Procházet zdrojové kódy

Merge branch 'test' of http://110.188.24.182:10023/Fengwo/hotline into test

Dun.Jason před 4 měsíci
rodič
revize
87229fd630

+ 12 - 7
src/Hotline.Application/Mappers/WorkflowMapperConfigs.cs

@@ -45,19 +45,24 @@ public class WorkflowMapperConfigs : IRegister
 
         config.ForType<WorkflowStep, WorkflowTrace>()
             .Ignore(d=>d.Workflow)
+            .Ignore(d=>d.OrderPublish)
+            .Ignore(d=>d.OrderVisit)
+            .Ignore(d=>d.Traces)
             .Ignore(d => d.ParentId)
             .Ignore(d => d.TraceType)
             .Map(d => d.StepId, s => s.Id)
             .AfterMapping((s, d) => d.Id = s.Id)
             ;
 
-        // config.ForType<WorkflowSupplement, WorkflowSupplementDto>()
-        //     .Map(d => d.CreationTime, x => x.CreationTime)
-        //     .Map(d => d.Additions, x => x.Additions)
-        //     .Map(d => d.Opinion, x => x.Opinion)
-        //     .Map(d => d.Creator.Name, x => x.Creator.Name)
-        //     .IgnoreNonMapped(true)
-        //     ;
+        config.ForType<WorkflowTrace, WorkflowTrace>()
+            .Ignore(d=>d.Id)
+            .Ignore(d => d.Workflow)
+            .Ignore(d => d.OrderPublish)
+            .Ignore(d => d.OrderVisit)
+            .Ignore(d => d.Traces)
+            .Ignore(d => d.ParentId)
+            .Ignore(d => d.TraceType)
+            ;
 
         config.ForType<Workflow, WorkflowDto>()
             //.IgnoreIf((s, d) => s.Assigns == null || !s.Assigns.Any(), d => d.AssignOrgs)

+ 2 - 1
src/Hotline.Application/StatisticalReport/OrderReportApplication.cs

@@ -1648,7 +1648,8 @@ namespace Hotline.Application.StatisticalReport
                 .WhereIF(dto.StartTime.HasValue, x => x.OrderVisit.VisitTime >= dto.StartTime.Value)
                 .WhereIF(dto.EndTime.HasValue, x => x.OrderVisit.VisitTime <= dto.EndTime.Value)
                 .WhereIF(isCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContext.RequiredOrgId))
-                .WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults), x => SqlFunc.JsonListObjectAny(x.OrgProcessingResults, "Key", dto.OrgProcessingResults))
+                .WhereIF(dto.OrgProcessingResults == "-1", x => SqlFunc.JsonArrayLength(x.OrgNoSatisfiedReason) > 1 && x.OrgNoSatisfiedReason != null)
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults), x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults)
                 .GroupBy((x, org) => new { VisitOrgName = org.Name, VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) })
                 .Select((x, org) => new BiVisitNoSatisfiedDto
                 {

+ 28 - 29
src/Hotline.Share/Dtos/Order/Detail/OrderFlowTraceDto.cs

@@ -1,5 +1,4 @@
 using Hotline.Share.Dtos.File;
-using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
 using XF.Utility.EnumExtensions;
@@ -13,124 +12,124 @@ public class OrderFlowTraceDto
     public DateTime CreationTime { get; set; }
 
     /// <summary>
-    /// 节点名称
+    /// 鑺傜偣鍚嶇О
     /// </summary>
     public string Name { get; set; }
 
     /// <summary>
-    /// 交办人
+    /// 浜ょ彮浜哄悕绉�
     /// </summary>
     public string? AssignerName { get; set; }
 
     /// <summary>
-    /// 交办部门
+    /// 浜ょ彮浜洪儴闂�
     /// </summary>
     public string AssignOrgName { get; set; }
 
     /// <summary>
-    /// 接办人
+    /// 鍙楃悊浜�
     /// </summary>
     public string? AcceptorName { get; set; }
 
     public string? AcceptorOrgName { get; set; }
 
     /// <summary>
-    /// 接办时间
+    /// 鍙楃悊鏃堕棿
     /// </summary>
     public DateTime? AcceptTime { get; set; }
 
     /// <summary>
-    /// 办理人
+    /// 鍔炵悊浜�
     /// </summary>
 
     public string? HandlerName { get; set; }
 
     /// <summary>
-    /// 办理人部门名称
+    /// 鍔炵悊浜洪儴闂�
     /// </summary>
     public string? HandlerOrgName { get; set; }
 
     /// <summary>
-    /// 办理完成时间
+    /// 鍔炵悊鏃堕棿
     /// </summary>
     public DateTime? HandleTime { get; set; }
 
     /// <summary>
-    /// 节点期满时间
+    /// 鑺傜偣鏈熸弧鏃堕棿
     /// </summary>
     public DateTime? StepExpiredTime { get; set; }
 
     /// <summary>
-    /// 节点超期状态
+    /// 瓒呮湡鐘舵€�
     /// </summary>
     public EExpiredStatus? ExpiredStatus { get; set; }
 
     public string? ExpiredStatusText => ExpiredStatus.HasValue ? ExpiredStatus.GetDescription() : "";
 
     /// <summary>
-    /// 办理方式
+    /// 鍔炵悊鏂瑰紡
     /// </summary>
     public EHandleMode? HandleMode { get; set; }
 
     public string HandleModeText => HandleMode.HasValue ? HandleMode.GetDescription() : "";
 
     /// <summary>
-    /// 快照类型
+    /// 鑺傜偣绫诲瀷
     /// </summary>
     public ETraceStyle TraceStyle { get; set; }
 
-    #region 流程节点展开
+    #region 娴佺▼鑺傜偣灞曞紑
 
     /// <summary>
-    /// 办理意见
+    /// 鍔炵悊鎰忚�
     /// </summary>
     public string? Opinion { get; set; }
 
     /// <summary>
-    /// 附件
+    /// 闄勪欢
     /// </summary>
     public List<FileDto>? Files { get; set; }
 
     /// <summary>
-    /// 备注
+    /// 澶囨敞
     /// </summary>
     public string? Remark { get; set; }
 
     #endregion
 
-    #region 发布节点展开
+    #region 鍙戝竷鑺傜偣灞曞紑
 
 
     /// <summary>
-    /// 发布范围
+    /// 鍙戝竷鑼冨洿
     /// </summary>
     public bool PublishState { get; set; }
 
     /// <summary>
-    /// 整理结果
+    /// 鏁寸悊缁撴灉
     /// </summary>
     public string ArrangeOpinion { get; set; }
 
     #endregion
 
-    #region 回访节点展开
+    #region 鍥炶�鑺傜偣灞曞紑
 
 
     /// <summary>
-    /// 语音评价(话务评价)
+    /// 璇�煶璇勪环锛堣瘽鍔¤瘎浠凤級
     /// </summary>
     public EVoiceEvaluate? VoiceEvaluate { get; set; }
 
     public string? VoiceEvaluateText => VoiceEvaluate.HasValue ? VoiceEvaluate.GetDescription() : "";
 
     /// <summary>
-    /// 话务员评价(话务评价)
+    /// 璇濆姟鍛樿瘎浠凤紙璇濆姟璇勪环锛�
     /// </summary>
     public ESeatEvaluate? SeatEvaluate { get; set; }
     public string? SeatEvaluateText => SeatEvaluate.HasValue ? SeatEvaluate.GetDescription() : "";
 
     /// <summary>
-    /// 回访内容
+    /// 鍥炶�鍐呭�
     /// </summary>
     public string? VisitContent { get; set; }
 
@@ -141,27 +140,27 @@ public class OrderFlowTraceDto
 }
 
 /// <summary>
-/// 流程明细回访节点展开元素
+/// 宸ュ崟鍔炵悊娴佺▼鏄庣粏鍥炶�鏄庣粏椤�
 /// </summary>
 public class OrderFlowVisitDetail
 {
     /// <summary>
-    /// 部门办件结果
+    /// 閮ㄩ棬鍔炰欢缁撴灉
     /// </summary>
     public string? OrgProcessingResults { get; set; }
 
     /// <summary>
-    /// 不满意原因
+    /// 涓嶆弧鎰忓師鍥�
     /// </summary>
     public List<string>? OrgNoSatisfiedReason { get; set; }
 
     /// <summary>
-    /// 部门办件态度
+    /// 閮ㄩ棬鍔炰欢鎬佸害
     /// </summary>
     public string? OrgHandledAttitude { get; set; }
 
     /// <summary>
-    /// 回访内容
+    /// 鍥炶�鍐呭�
     /// </summary>
     public string? VisitContent { get; set; }
 }

+ 70 - 53
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -2107,45 +2107,57 @@ namespace Hotline.FlowEngine.Workflows
                 .FirstAsync(d => d.WorkflowId == workflowId
                           && d.TraceStyle == ETraceStyle.Publish
                           && d.Status == EWorkflowStepStatus.WaitForAccept, cancellation);
-            if (pubTrace is null) throw new UserFriendlyException($"未查询到待办的发布节点, workflowId:{workflowId}");
-            pubTrace.OrderPublishId = orderPublishId;
-            pubTrace.AcceptorId = acceptor.UserId;
-            pubTrace.AcceptorName = acceptor.UserName;
-            pubTrace.AcceptorOrgId = acceptor.OrgId;
-            pubTrace.AcceptorOrgName = acceptor.OrgName;
-            pubTrace.HandlerId = handler.UserId;
-            pubTrace.HandlerName = handler.UserName;
-            pubTrace.HandlerOrgId = handler.OrgId;
-            pubTrace.HandlerOrgName = handler.OrgName;
-            pubTrace.HandleTime = handleTime;
-            pubTrace.Status = EWorkflowStepStatus.Handled;
+            if (pubTrace is not null)
+            {
+                pubTrace.OrderPublishId = orderPublishId;
+                pubTrace.AcceptorId = acceptor.UserId;
+                pubTrace.AcceptorName = acceptor.UserName;
+                pubTrace.AcceptorOrgId = acceptor.OrgId;
+                pubTrace.AcceptorOrgName = acceptor.OrgName;
+                pubTrace.HandlerId = handler.UserId;
+                pubTrace.HandlerName = handler.UserName;
+                pubTrace.HandlerOrgId = handler.OrgId;
+                pubTrace.HandlerOrgName = handler.OrgName;
+                pubTrace.HandleTime = handleTime;
+                pubTrace.Status = EWorkflowStepStatus.Handled;
 
-            await _workflowTraceRepository.UpdateAsync(pubTrace, cancellation);
+                await _workflowTraceRepository.UpdateAsync(pubTrace, cancellation);
 
-            //create visit trace
-            await CreateVisitTraceAsync(pubTrace, visitAcceptor, orderVisitId, cancellation);
+                //create visit trace
+                await CreateVisitTraceAsync(pubTrace, visitAcceptor, orderVisitId, cancellation);
+            }
+            else
+            {
+                //throw new UserFriendlyException($"未查询到待办的发布节点, workflowId:{workflowId}");
+            }
         }
 
         public async Task HandleVisitTraceAsync(string orderVisitId, UserInfo visitor, DateTime visitTime, CancellationToken cancellation)
         {
             var visitTrace = await _workflowTraceRepository.GetAsync(d => d.OrderVisitId == orderVisitId,
                 cancellationToken: cancellation);
-            if (visitTrace is null) throw new UserFriendlyException($"未查询到待办的发布节点, orderVisitId:{orderVisitId}");
-            visitTrace.AcceptorId = visitor.UserId;
-            visitTrace.AcceptorName = visitor.UserName;
-            visitTrace.AcceptorOrgId = visitor.OrgId;
-            visitTrace.AcceptorOrgName = visitor.OrgName;
-            visitTrace.HandlerId = visitor.UserId;
-            visitTrace.HandlerName = visitor.UserName;
-            visitTrace.HandlerOrgId = visitor.OrgId;
-            visitTrace.HandlerOrgName = visitor.OrgName;
-            visitTrace.HandleTime = visitTime;
-            visitTrace.Status = EWorkflowStepStatus.Handled;
+            if (visitTrace is not null)
+            {
+                visitTrace.AcceptorId = visitor.UserId;
+                visitTrace.AcceptorName = visitor.UserName;
+                visitTrace.AcceptorOrgId = visitor.OrgId;
+                visitTrace.AcceptorOrgName = visitor.OrgName;
+                visitTrace.HandlerId = visitor.UserId;
+                visitTrace.HandlerName = visitor.UserName;
+                visitTrace.HandlerOrgId = visitor.OrgId;
+                visitTrace.HandlerOrgName = visitor.OrgName;
+                visitTrace.HandleTime = visitTime;
+                visitTrace.Status = EWorkflowStepStatus.Handled;
 
-            await _workflowTraceRepository.UpdateAsync(visitTrace, cancellation);
+                await _workflowTraceRepository.UpdateAsync(visitTrace, cancellation);
 
-            //create append end trace
-            await CreateTrashEndTraceAsync(visitTrace, cancellation);
+                //create append end trace
+                await CreateTrashEndTraceAsync(visitTrace, cancellation);
+            }
+            else
+            {
+                //throw new UserFriendlyException($"未查询到待办的发布节点, orderVisitId:{orderVisitId}");
+            }
         }
 
         #region private method
@@ -3235,30 +3247,30 @@ namespace Hotline.FlowEngine.Workflows
         {
             if (string.IsNullOrEmpty(orderVisitId))
                 throw new UserFriendlyException($"参数异常,orderVisitId不能为空, pubTraceId: {pubTrace.Id}");
-            var visitTrace = new WorkflowTrace
-            {
-                OrderVisitId = orderVisitId,
-                TraceStyle = ETraceStyle.Visit,
-                Name = "中心回访",
-                Status = EWorkflowStepStatus.WaitForAccept,
-                Code = "visit",
-                CreationTime = pubTrace.HandleTime ?? DateTime.Now,
-                PrevStepId = pubTrace.Id,
-                PrevStepCode = pubTrace.Code,
-                PrevStepName = pubTrace.Name,
-                AssignerId = pubTrace.HandlerId,
-                AssignerName = pubTrace.HandlerName,
-                AssignerOrgId = pubTrace.HandlerOrgId,
-                AssignerOrgName = pubTrace.HandlerOrgName,
-                AssignerOrgIsCenter = pubTrace.HandlerOrgIsCenter ?? false,
-
-                AcceptorId = acceptor.UserId,
-                AcceptorName = acceptor.UserName,
-                AcceptorOrgId = acceptor.OrgId,
-                AcceptorOrgName = acceptor.OrgName,
-
-                StepExpiredTime = null,
-            };
+            var visitTrace = _mapper.Map<WorkflowTrace>(pubTrace);
+
+            visitTrace.OrderPublishId = null;
+            visitTrace.OrderVisitId = orderVisitId;
+            visitTrace.TraceStyle = ETraceStyle.Visit;
+            visitTrace.Name = "中心回访";
+            visitTrace.Status = EWorkflowStepStatus.WaitForAccept;
+            visitTrace.Code = "visit";
+            visitTrace.CreationTime = pubTrace.HandleTime ?? DateTime.Now;
+            visitTrace.PrevStepId = pubTrace.Id;
+            visitTrace.PrevStepCode = pubTrace.Code;
+            visitTrace.PrevStepName = pubTrace.Name;
+            visitTrace.AssignerId = pubTrace.HandlerId;
+            visitTrace.AssignerName = pubTrace.HandlerName;
+            visitTrace.AssignerOrgId = pubTrace.HandlerOrgId;
+            visitTrace.AssignerOrgName = pubTrace.HandlerOrgName;
+            visitTrace.AssignerOrgIsCenter = pubTrace.HandlerOrgIsCenter ?? false;
+
+            visitTrace.AcceptorId = acceptor.UserId;
+            visitTrace.AcceptorName = acceptor.UserName;
+            visitTrace.AcceptorOrgId = acceptor.OrgId;
+            visitTrace.AcceptorOrgName = acceptor.OrgName;
+
+            visitTrace.StepExpiredTime = null;
 
             await _workflowTraceRepository.AddAsync(visitTrace, cancellation);
 
@@ -3269,6 +3281,11 @@ namespace Hotline.FlowEngine.Workflows
         {
             var now = DateTime.Now;
             var TrashEndTrace = _mapper.Map<WorkflowTrace>(visitTrace);
+            TrashEndTrace.Id = null;
+            TrashEndTrace.StepId = null;
+            TrashEndTrace.OrderPublishId = null;
+            TrashEndTrace.OrderVisitId = null;
+
             TrashEndTrace.TraceStyle = ETraceStyle.TrashEnd;
             TrashEndTrace.Name = "结束";
             TrashEndTrace.Status = EWorkflowStepStatus.Handled;

+ 1 - 1
src/Hotline/FlowEngine/Workflows/WorkflowTrace.cs

@@ -16,7 +16,7 @@ public class WorkflowTrace : StepBasicEntity
     /// <summary>
     /// 节点Id
     /// </summary>
-    public string StepId { get; set; }
+    public string? StepId { get; set; }
 
     /// <summary>
     /// 会签从属关系