Ver código fonte

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

田爽 1 ano atrás
pai
commit
b5e9fd4a80

+ 6 - 1
src/Hotline.Api/Controllers/AiController.cs

@@ -29,8 +29,9 @@ namespace Hotline.Api.Controllers
         private readonly IMapper _mapper;
         private readonly IOptionsSnapshot<AiVisitConfig> _options;
         private readonly IAiVisitService _aiVisitService;
+        private readonly ILogger<AiController> _logger;
 
-        public AiController(ISystemSettingCacheManager systemSettingCacheManager,IRepository<AiOrderVisit> aiOrderVisitRepository,IRepository<AiOrderVisitDetail>  aiOrderVisitDetailRepository,IRepository<OrderVisit> orderVisitRepository,IRepository<OrderVisitDetail> orderVisitDetailRepository,IMapper mapper, IOptionsSnapshot<AiVisitConfig> options,IAiVisitService aiVisitService)
+        public AiController(ISystemSettingCacheManager systemSettingCacheManager,IRepository<AiOrderVisit> aiOrderVisitRepository,IRepository<AiOrderVisitDetail>  aiOrderVisitDetailRepository,IRepository<OrderVisit> orderVisitRepository,IRepository<OrderVisitDetail> orderVisitDetailRepository,IMapper mapper, IOptionsSnapshot<AiVisitConfig> options,IAiVisitService aiVisitService, ILogger<AiController> logger)
         {
            _systemSettingCacheManager = systemSettingCacheManager;
             _aiOrderVisitRepository = aiOrderVisitRepository;
@@ -40,6 +41,7 @@ namespace Hotline.Api.Controllers
             _mapper = mapper;
             _options = options;
             _aiVisitService = aiVisitService;
+            _logger = logger;
         }
 
 
@@ -90,6 +92,9 @@ namespace Hotline.Api.Controllers
         [HttpPost("aivisit/aivisit-back")]
         public async Task AiVisitBack([FromBody]AiVisitBackDto dto)
         {
+            _logger.LogInformation($"收到智能外呼结果回传:{JsonConvert.SerializeObject(dto)}");
+
+
             var aiOrderVisit = await _aiOrderVisitRepository.Queryable()
                 .Includes(x => x.AiOrderVisitDetails,s=>s.OrderVisit)
                 .FirstAsync(x => x.BatchUid == dto.BatchUid);

+ 3 - 18
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -141,28 +141,13 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
             _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, externalId, expiredTimeConfig?.TimeText,
             expiredTimeConfig.Count, expiredTimeConfig.TimeType, expiredTimeConfig.ExpiredTime, cancellationToken);
 
-        //startstep
-        var nextSteps = _mapper.Map<List<StepSimple>>(startStepDefine.NextSteps);
-        if (startStepDefine.InstanceMode is EInstanceMode.Config)
-            nextSteps.First(d => d.Code == dto.NextStepCode).Selected = true;
-        var startStep = new WorkflowStep
-        {
-            WorkflowId = workflow.Id,
-            Handlers = new List<Kv> { new(_sessionContext.RequiredUserId, _sessionContext.UserName) },
-            NextSteps = nextSteps,
-            IsMain = true,
-            IsOrigin = true,
-            Status = EWorkflowStepStatus.WaitForHandle,
-            PrevChosenStepCode = null,
-            StepExpiredTime = workflow.ExpiredTime,
-        };
-        startStep.InitId();
+        var startStep = _workflowDomainService.CreateStartStep(workflow, startStepDefine, dto, 
+            new List<Kv> { new(_sessionContext.RequiredUserId, _sessionContext.UserName) });
+
         if (dto.Files.Any())
             startStep.FileJson =
                 await _fileRepository.AddFileAsync(dto.Files, workflow.ExternalId, startStep.Id, cancellationToken);
 
-        var startDefine = workflow.WorkflowDefinition.FindStartStepDefine();
-        _mapper.Map(startDefine, startStep);
         await _workflowStepRepository.AddAsync(startStep, cancellationToken);
         workflow.Steps.Add(startStep);
 

+ 2 - 2
src/Hotline.Share/Dtos/Users/UserDto.cs

@@ -104,9 +104,9 @@ public record UpdateUserDto
     public string? OrgId { get; set; }
 
     /// <summary>
-    /// 部门编码(冗余)
+    /// 用户类型
     /// </summary>
-    public string? OrgCode { get; set; }
+    public EUserType UserType { get; set; }
 
     /// <summary>
     /// 默认分机号

+ 5 - 0
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -130,5 +130,10 @@ namespace Hotline.FlowEngine.Workflows
         /// 新增流程流转记录
         /// </summary>
         Task AddTracesAsync(string workflowId, List<WorkflowTrace> traces, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 创建开始节点
+        /// </summary>
+        WorkflowStep CreateStartStep(Workflow workflow, StepDefine startStepDefine, BasicWorkflowDto dto, List<Kv> handlers);
     }
 }

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

@@ -5,6 +5,7 @@ using Hotline.FlowEngine.WorkflowModules;
 using Hotline.Settings;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.FlowEngine;
+using Hotline.Share.Dtos.FlowEngine.Definition;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Settings;
 using MapsterMapper;
@@ -766,8 +767,43 @@ namespace Hotline.FlowEngine.Workflows
             await _workflowTraceRepository.AddRangeAsync(traces, cancellationToken);
         }
 
+        /// <summary>
+        /// 创建开始节点
+        /// </summary>
+        public WorkflowStep CreateStartStep(Workflow workflow, StepDefine startStepDefine, BasicWorkflowDto dto, List<Kv> handles)
+        {
+            //startstep
+            var nextSteps = _mapper.Map<List<StepSimple>>(startStepDefine.NextSteps);
+            if (startStepDefine.InstanceMode is EInstanceMode.Config)
+            {
+                var selectedStep = nextSteps.FirstOrDefault(d => d.Code == dto.NextStepCode);
+                if (selectedStep is not null)
+                    selectedStep.Selected = true;
+            }
+            var startStep = _mapper.Map<WorkflowStep>(startStepDefine);
+            startStep.WorkflowId = workflow.Id;
+            startStep.Handlers = handles;
+            startStep.NextSteps = nextSteps;
+            startStep.IsMain = true;
+            startStep.IsOrigin = true;
+            startStep.Status = EWorkflowStepStatus.WaitForHandle;
+            startStep.PrevChosenStepCode = null;
+            startStep.StepExpiredTime = workflow.ExpiredTime;
+            
+            startStep.InitId();
+            return startStep;
+        }
+
         #region private method
 
+        public async Task<WorkflowStep> CreateStartStepAsync(Workflow workflow, StepDefine startStepDefine, BasicWorkflowDto dto,
+            List<Kv> handles, CancellationToken cancellationToken)
+        {
+            var startStep = CreateStartStep(workflow, startStepDefine, dto, handles);
+            await _workflowStepRepository.AddAsync(startStep, cancellationToken);
+            return startStep;
+        }
+
         //更新目标节点前一节点的会签办理完成状态
         private void PrevStepCsHandled(Workflow workflow, WorkflowStep targetStep, ref List<WorkflowStep> updateSteps)
         {
@@ -1255,13 +1291,19 @@ namespace Hotline.FlowEngine.Workflows
         }
 
         private async Task<bool> RecallAsync(Workflow workflow, BasicWorkflowDto dto, FlowAssignInfo flowAssignInfo,
-            StepDefine targetStepDefine,
-            WorkflowStep targetStep, EWorkflowTraceStatus traceStatus, CancellationToken cancellationToken)
+            StepDefine targetStepDefine, WorkflowStep targetStep,
+            EWorkflowTraceStatus traceStatus, CancellationToken cancellationToken)
         {
+            var targetIsStartStep = targetStepDefine.StepType is EStepType.Start;
+
             //get targetStep's previous
-            var targetPrevStep = workflow.Steps.FirstOrDefault(d => d.Id == targetStep.PrevStepId);
-            if (targetPrevStep == null)
-                throw new UserFriendlyException($"{nameof(RecallAsync)}, 未找到目标节点的前一节点, flowId: {workflow.Id}");
+            WorkflowStep? targetPrevStep = null;
+            if (!targetIsStartStep)
+            {
+                targetPrevStep = workflow.Steps.FirstOrDefault(d => d.Id == targetStep.PrevStepId);
+                if (targetPrevStep == null)
+                    throw new UserFriendlyException($"{nameof(RecallAsync)}, 未找到目标节点的前一节点, flowId: {workflow.Id}");
+            }
 
             //查询所有目标节点之后的节点,然后删掉(包括目标节点)
             var removeSteps = GetStepsBehindTargetStep(workflow.Steps, targetStep);
@@ -1276,19 +1318,18 @@ namespace Hotline.FlowEngine.Workflows
             if (workflow.Status is EWorkflowStatus.Completed)
                 workflow.SetStatusRunnable();
 
-            //recreate targetStep
-            //var targetStepBoxNew = await CreateStepAsync(workflow, targetStepDefine, dto, EWorkflowStepStatus.WaitForAccept,
-            //     targetPrevStepBox, targetPrevStep, traceStatus, workflow.ExpiredTime, cancellationToken);
-
-            var targetStepsNew = await CreateConfigStepsAsync(workflow, targetStepDefine, targetPrevStep, dto,
-                flowAssignInfo, cancellationToken);
+            var targetStepNew = targetIsStartStep
+                ? await CreateStartStepAsync(workflow, targetStepDefine, dto,
+                    new List<Kv> { new(_sessionContext.RequiredUserId, _sessionContext.UserName) }, cancellationToken)
+                : (await CreateConfigStepsAsync(workflow, targetStepDefine, targetPrevStep, dto, flowAssignInfo,
+                    cancellationToken)).First();
 
             //更新当前办理节点信息
             workflow.UpdateWorkflowCurrentStepInfo(dto.IsStartCountersign,
                 _sessionContext.RequiredUserId, _sessionContext.UserName,
                 _sessionContext.RequiredOrgId, _sessionContext.OrgName,
                 _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
-                nextStep: targetStepsNew.First());
+                nextStep: targetStepNew);
 
             //calc workflow expired time
             var isOrgToCenter = CheckIfFlowFromOrgToCenter(workflow, targetStep);