Procházet zdrojové kódy

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

田爽 před 5 měsíci
rodič
revize
28b6e883d6

+ 24 - 23
src/Hotline.Api/Controllers/TestController.cs

@@ -181,7 +181,7 @@ ICallApplication callApplication,
         IOptionsSnapshot<AppConfiguration> appOptions,
         ISystemSettingCacheManager systemSettingCacheManager,
         ICalcExpireTime expireTime
-		)
+        )
     {
         _logger = logger;
         //_authorizeGenerator = authorizeGenerator;
@@ -230,7 +230,7 @@ ICallApplication callApplication,
         _appOptions = appOptions;
         _systemSettingCacheManager = systemSettingCacheManager;
         _expireTime = expireTime;
-	}
+    }
 
 
     [HttpGet("time")]
@@ -290,7 +290,7 @@ ICallApplication callApplication,
         return OpenResponse.Ok(DateTime.Now.ToString("F"));
     }
 
-    
+
     /// <summary>
     /// 通过工单号重推回访到省上
     /// </summary>
@@ -302,7 +302,7 @@ ICallApplication callApplication,
     {
         string[] no = Nos.Split(',');
         var list = await _orderRepository.Queryable()
-             .Includes(x => x.OrderVisits.Where(q => q.VisitState == EVisitState.Visited).ToList(),d=>d.OrderVisitDetails)
+             .Includes(x => x.OrderVisits.Where(q => q.VisitState == EVisitState.Visited).ToList(), d => d.OrderVisitDetails)
              .Where(x => no.Contains(x.No) && x.Status == EOrderStatus.Visited).ToListAsync();
 
         foreach (var item in list)
@@ -321,15 +321,15 @@ ICallApplication callApplication,
                         VisitType = visit.VisitType,
                         VisitName = visit.CreatorName,
                         VisitTime = visit.VisitTime,
-                        VisitRemark = "满意",
+                        VisitRemark = visit.OrderVisitDetails.Where(q => q.VisitTarget == EVisitTarget.Org).FirstOrDefault()?.VisitContent,
                         AreaCode = item.AreaCode!,
-                        SubjectResultSatifyCode = "4",
-                        FirstSatisfactionCode = "4",
+                        SubjectResultSatifyCode = visit.NowEvaluate.Key,
+                        FirstSatisfactionCode = item.FirstVisitResultCode,
                         ClientGuid = ""
                     }, cancellationToken: HttpContext.RequestAborted);
                 }
             }
-            catch {}
+            catch { }
         }
     }
 
@@ -736,18 +736,18 @@ ICallApplication callApplication,
     [HttpGet("t5")]
     public async Task<string> GetUserAllowAnonymous()
     {
-		//var users = await _userRepository.Queryable()
-		//    .FirstAsync(d => d.Name == "xf", HttpContext.RequestAborted);
-		//return users.Id;
-		//var setting = _systemSettingCacheManager.GetSetting(SettingConstants.CityBaseConfiguration)?.SettingValue[0];
-		//CityBaseConfiguration cityBase = JsonConvert.DeserializeObject<CityBaseConfiguration>(setting);
-		//var b = cityBase;
-
-		//var a = await _expireTime.GetWorkDay(DateTime.Now);
-		//自动延期订阅
-		_capPublisher.PublishDelay(DateTime.Parse("2024-10-14 14:28:00") - DateTime.Now.AddHours(1), EventNames.HotlineOrderAutomaticDelay, new PublishAutomaticDelayDto() { OrderId = "08dcebff-2fae-4c30-824f-fe2ef4d582ae" });
-		return string.Empty;
-	}
+        //var users = await _userRepository.Queryable()
+        //    .FirstAsync(d => d.Name == "xf", HttpContext.RequestAborted);
+        //return users.Id;
+        //var setting = _systemSettingCacheManager.GetSetting(SettingConstants.CityBaseConfiguration)?.SettingValue[0];
+        //CityBaseConfiguration cityBase = JsonConvert.DeserializeObject<CityBaseConfiguration>(setting);
+        //var b = cityBase;
+
+        //var a = await _expireTime.GetWorkDay(DateTime.Now);
+        //自动延期订阅
+        _capPublisher.PublishDelay(DateTime.Parse("2024-10-14 14:28:00") - DateTime.Now.AddHours(1), EventNames.HotlineOrderAutomaticDelay, new PublishAutomaticDelayDto() { OrderId = "08dcebff-2fae-4c30-824f-fe2ef4d582ae" });
+        return string.Empty;
+    }
 
     [HttpGet("t6")]
     public async Task<string> GetUserWithAuth()
@@ -1027,9 +1027,10 @@ ICallApplication callApplication,
     /// <returns></returns>
     [HttpGet("automatic_delay")]
     [AllowAnonymous]
-    public async Task AutomaticDelay(DateTime ExpiredTime, string orderId) {
+    public async Task AutomaticDelay(DateTime ExpiredTime, string orderId)
+    {
 
-	    _capPublisher.PublishDelay(ExpiredTime - DateTime.Now.AddHours(1), EventNames.HotlineOrderAutomaticDelay, new PublishAutomaticDelayDto() { OrderId = orderId });
-	}
+        _capPublisher.PublishDelay(ExpiredTime - DateTime.Now.AddHours(1), EventNames.HotlineOrderAutomaticDelay, new PublishAutomaticDelayDto() { OrderId = orderId });
+    }
 
 }

+ 2 - 2
src/Hotline.Api/config/appsettings.shared.json

@@ -23,14 +23,14 @@
         "Name": "Console",
         "Args": {
           //"outputTemplate": "time=\"{Timestamp:yyyy-MM-dd HH:mm:ss}\" level={Level:w3} category={SourceContext} trace={TraceId}{NewLine}msg=\"{Message:lj}\"{NewLine}error=\"{Exception}\"{NewLine}",
-          "outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] {SourceContext} [{TraceId}]{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}",
+          "outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] ({Application}/{MachineName}/{ThreadId}) {SourceContext} [{TraceId}]{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}",
           "theme": "Serilog.Sinks.SystemConsole.Themes.ConsoleTheme::None, Serilog.Sinks.Console"
         }
       },
       {
         "Name": "GrafanaLoki",
         "Args": {
-          "outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] {SourceContext} [{TraceId}]{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}",
+          "outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] ({Application}/{MachineName}/{ThreadId}) {SourceContext} [{TraceId}]{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}",
           "uri": "http://110.188.24.182:50112",
           "labels": [
             {

+ 1 - 1
src/Hotline.Application/Orders/OrderApplication.cs

@@ -992,7 +992,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     {
         var orderVisitList = await _orderVisitRepository.Queryable()
             .Includes(d => d.Order)
-            .Where(d => dto.Ids.Contains(d.Id) && d.VisitState == EVisitState.WaitForVisit)
+            .Where(d => dto.Ids.Contains(d.Id) && (d.VisitState == EVisitState.WaitForVisit || d.VisitState == EVisitState.NoSatisfiedWaitForVisit || d.VisitState == EVisitState.SMSUnsatisfied))
             .Select(d => new { d.Id, d.Order.SourceChannelCode, d.Order.Contact, d.Order.Password, d.No, d.OrderId, d.Order.Title, d.Order.FromName })
             .ToListAsync(cancellationToken);
 

+ 19 - 23
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -437,7 +437,7 @@ namespace Hotline.FlowEngine.Workflows
                 workflow.UpdateCurrentStepWhenHandle(currentStep, _sessionContextProvider.SessionContext.OrgAreaCode,
                     _sessionContextProvider.SessionContext.OrgAreaName, _sessionContextProvider.SessionContext.OrgLevel);
             }
-            
+
             //var trace = await NextTraceAsync(workflow, dto, currentStep, cancellationToken);
 
             #endregion
@@ -602,16 +602,12 @@ namespace Hotline.FlowEngine.Workflows
             var unhandlePreviousTrace = workflow.Traces.FirstOrDefault(d =>
                 d.Status is not EWorkflowStepStatus.Handled
             );
-
-            WorkflowCountersign? unCompletedCountersign = null;
-            if (!canHandle)
-            {
-                unCompletedCountersign = workflow.Countersigns
-                    .FirstOrDefault(d => !d.IsCompleted() && d.StarterOrgId == orgId);
-                if (unCompletedCountersign is null)
-                    return (workflow, null, canHandle, canPrevious, unhandlePreviousTrace);
-            }
-
+            
+            var unCompletedCountersign = workflow.Countersigns
+                .FirstOrDefault(d => !d.IsCompleted() && d.StarterOrgId == orgId);
+            if (unCompletedCountersign is null)
+                return (workflow, null, canHandle, canPrevious, unhandlePreviousTrace);
+            
             //var existCountersignEndStep = workflow.Steps.Exists(d =>
             //    d.IsCountersignEndStep && d.CountersignStartStepId == unCompletedCountersign.StartStepId);
             //return (workflow, existCountersignEndStep ? null : unCompletedCountersign.Id, canPrevious);
@@ -978,8 +974,8 @@ namespace Hotline.FlowEngine.Workflows
 
             if (workflow.FlowType == EFlowType.Handle)
             {
-	            prevStep.FlowAssignType = prevStep.BusinessType is EBusinessType.Seat ? EFlowAssignType.User :
-		            prevStep.BusinessType is EBusinessType.Send ? EFlowAssignType.Role : EFlowAssignType.Org;
+                prevStep.FlowAssignType = prevStep.BusinessType is EBusinessType.Seat ? EFlowAssignType.User :
+                    prevStep.BusinessType is EBusinessType.Send ? EFlowAssignType.Role : EFlowAssignType.Org;
             }
 
             //复制上一个节点为待接办
@@ -2118,7 +2114,7 @@ namespace Hotline.FlowEngine.Workflows
                 var nextHandler = dto.NextHandlers.First();
                 workflow.UpdateActualStepWhenAssign(nextStep, nextHandler);
             }
-            
+
             //与实际办理节点的接办状态保持一致
             workflow.ActualHandleStepAcceptTime = nextStep.AcceptTime;
         }
@@ -2582,16 +2578,16 @@ namespace Hotline.FlowEngine.Workflows
             //退回场景:指派给原办理人,其余场景:按照原节点原始指派方式复制 //todo 重构为参数传入办理对象
             if (traceType is EWorkflowTraceType.Previous)
             {
-	            newStep.FlowAssignType = step.FlowAssignType;
-				//newStep.FlowAssignType = EFlowAssignType.User;
-				// 是否中心  临时紧急修改 后续在流程模版定义是否原办理人退回类型 来实现流程 禅道200
-				//newStep.FlowAssignType = step.BusinessType is EBusinessType.Seat or EBusinessType.Send
-				//    ? step.BusinessType is EBusinessType.Send ? EFlowAssignType.User : EFlowAssignType.Role
-				//    : EFlowAssignType.Org;
-				//if (newStep is { FlowAssignType: EFlowAssignType.Role, BusinessType: EBusinessType.Send })
-				//    newStep.FlowAssignType = EFlowAssignType.User;
+                newStep.FlowAssignType = step.FlowAssignType;
+                //newStep.FlowAssignType = EFlowAssignType.User;
+                // 是否中心  临时紧急修改 后续在流程模版定义是否原办理人退回类型 来实现流程 禅道200
+                //newStep.FlowAssignType = step.BusinessType is EBusinessType.Seat or EBusinessType.Send
+                //    ? step.BusinessType is EBusinessType.Send ? EFlowAssignType.User : EFlowAssignType.Role
+                //    : EFlowAssignType.Org;
+                //if (newStep is { FlowAssignType: EFlowAssignType.Role, BusinessType: EBusinessType.Send })
+                //    newStep.FlowAssignType = EFlowAssignType.User;
 
-				newStep.Assign(step.HandlerId, step.HandlerName, step.HandlerOrgId, step.HandlerOrgName, step.RoleId, step.RoleName);
+                newStep.Assign(step.HandlerId, step.HandlerName, step.HandlerOrgId, step.HandlerOrgName, step.RoleId, step.RoleName);
             }
 
             return newStep;