xf 1 年之前
父節點
當前提交
8a57482373

+ 38 - 26
src/Hotline.Api/Controllers/OrderController.cs

@@ -1217,7 +1217,7 @@ public class OrderController : BaseController
     [LogFilter("取消工单延期")]
     public async Task CancelDelay([FromBody] CancelDelayDto dto)
     {
-        var orderDelay = await _orderDelayRepository.GetAsync(x=>x.OrderId== dto.Id && x.DelayState == EDelayState.Examining, HttpContext.RequestAborted);
+        var orderDelay = await _orderDelayRepository.GetAsync(x => x.OrderId == dto.Id && x.DelayState == EDelayState.Examining, HttpContext.RequestAborted);
         if (orderDelay != null)
         {
             await _workflowDomainService.TerminateAsync(new TerminateDto() { WorkflowId = orderDelay.WorkflowId, Opinion = "" }, HttpContext.RequestAborted);
@@ -1228,12 +1228,12 @@ public class OrderController : BaseController
     }
 
 
-	/// <summary>
-	/// 延期列表
-	/// </summary>
-	/// <returns></returns>
-	//[Permission(EPermission.DelayList)]
-	[HttpGet("delay")]
+    /// <summary>
+    /// 延期列表
+    /// </summary>
+    /// <returns></returns>
+    //[Permission(EPermission.DelayList)]
+    [HttpGet("delay")]
     public async Task<PagedDto<OrderDelayDto>> DelayList([FromQuery] DelayListDto dto)
     {
         var (total, items) = await _orderDelayRepository.Queryable(viewFilter: false)
@@ -1898,7 +1898,7 @@ public class OrderController : BaseController
                         await _mediator.Publish(new PushMessageNotify(messageDto), HttpContext.RequestAborted);
                     }
                 }
-                catch{}
+                catch { }
             }
 
             //推省上
@@ -2306,14 +2306,26 @@ public class OrderController : BaseController
     /// 工单办理
     /// </summary>
     [HttpPost("handle")]
-    public async Task Handle([FromBody] NextWorkflowDto dto)
+    public async Task Handle([FromBody] OrderHandleFlowDto dto)
     {
-        var order = await _orderRepository.GetAsync(x => x.WorkflowId == dto.WorkflowId,HttpContext.RequestAborted);
-        if(await _orderDelayRepository.AnyAsync(x => x.OrderId == order.Id && x.DelayState == EDelayState.Examining,HttpContext.RequestAborted))
+        if (await _orderDelayRepository.AnyAsync(x => x.OrderId == dto.OrderId && x.DelayState == EDelayState.Examining, HttpContext.RequestAborted))
         {
             throw UserFriendlyException.SameMessage("该工单存在正在审核中的延期,不能办理");
         }
-        await _workflowApplication.NextAsync(dto, HttpContext.RequestAborted);
+        var order = await _orderDomainService.GetOrderAsync(dto.OrderId, withExtension: true,
+            cancellationToken: HttpContext.RequestAborted);
+        if (string.IsNullOrEmpty(order.WorkflowId))
+            throw new UserFriendlyException("该工单未发起流程");
+
+        if(dto.Data is not null && !string.IsNullOrEmpty(dto.Data.Id))
+        {
+            _mapper.Map(dto.Data, order);
+            await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
+        }
+
+        var nextWorkflowDto = _mapper.Map<NextWorkflowDto>(dto.Workflow);
+        nextWorkflowDto.WorkflowId = order.WorkflowId;
+        await _workflowApplication.NextAsync(nextWorkflowDto, HttpContext.RequestAborted);
     }
 
     /// <summary>
@@ -2769,28 +2781,28 @@ public class OrderController : BaseController
         var screen = await _orderScreenRepository.Queryable().Where(x => x.OrderId == dto.OrderId && (int)x.Status < 2).AnyAsync();
         if (screen) throw UserFriendlyException.SameMessage("工单存在甄别中的信息!");
 
-		var order = await _orderRepository
+        var order = await _orderRepository
             .Queryable()
-            .Includes(d=>d.Workflow)
-            .FirstAsync(d=>d.Id == dto.OrderId);
-		if (order.Workflow.IsInCountersign) throw UserFriendlyException.SameMessage("工单会签中,无法进行特提!");
+            .Includes(d => d.Workflow)
+            .FirstAsync(d => d.Id == dto.OrderId);
+        if (order.Workflow.IsInCountersign) throw UserFriendlyException.SameMessage("工单会签中,无法进行特提!");
 
-		var model = _mapper.Map<OrderSpecial>(dto);
+        var model = _mapper.Map<OrderSpecial>(dto);
         model.OrgId = _sessionContext.OrgId;
         model.OrgName = _sessionContext.OrgName;
         //if (!dto.Audit) model.State = 1;
         //取消根据进入界面判断是否审批  最新按照系统配置设定
         var audit = true;
-		var setting = _systemSettingCacheManager.GetSetting(SettingConstants.SeatsMonitor);
+        var setting = _systemSettingCacheManager.GetSetting(SettingConstants.SeatsMonitor);
         var settingStr = setting?.SettingValue;
-		var roles = _sessionContext.Roles;
-		foreach (var item in settingStr)
-		{
-            if (roles != null && roles.Contains(item)) audit = false; 
-		}
-		if (!audit) model.State = 1;
-
-		model.InitId();
+        var roles = _sessionContext.Roles;
+        foreach (var item in settingStr)
+        {
+            if (roles != null && roles.Contains(item)) audit = false;
+        }
+        if (!audit) model.State = 1;
+
+        model.InitId();
         if (dto.Files.Any())
             model.FileJson = await _fileRepository.AddFileAsync(dto.Files, model.Id, "", HttpContext.RequestAborted);
         await _orderSpecialRepository.AddAsync(model, HttpContext.RequestAborted);

+ 2 - 1
src/Hotline.Application/FlowEngine/IWorkflowApplication.cs

@@ -1,4 +1,5 @@
 using Hotline.FlowEngine.Definitions;
+using Hotline.FlowEngine.Workflows;
 using Hotline.Orders;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.File;
@@ -21,7 +22,7 @@ namespace Hotline.Application.FlowEngine
         /// <summary>
         /// 流转至下一节点(节点办理)
         /// </summary>
-        Task NextAsync(NextWorkflowDto dto, CancellationToken cancellationToken);
+        Task<Workflow> NextAsync(NextWorkflowDto dto, CancellationToken cancellationToken);
 
         /// <summary>
         /// 退回(返回前一节点)

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

@@ -174,7 +174,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     /// <summary>
     /// 流转至下一节点(节点办理)
     /// </summary>
-    public async Task NextAsync(NextWorkflowDto dto, CancellationToken cancellationToken)
+    public async Task<Workflow> NextAsync(NextWorkflowDto dto, CancellationToken cancellationToken)
     {
         var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, true, true, withCountersigns: true,
             cancellationToken: cancellationToken);
@@ -232,6 +232,8 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
         await _workflowDomainService.NextAsync(workflow, currentStep, dto, nextStepDefine, isNextDynamic,
             flowAssignInfo, cancellationToken);
+
+        return workflow;
     }
 
     /// <summary>

+ 45 - 0
src/Hotline.Share/Dtos/Order/OrderStartFlowDto.cs

@@ -5,6 +5,7 @@ using System.Text;
 using System.Threading.Tasks;
 using Hotline.Share.Dtos.Article;
 using Hotline.Share.Dtos.FlowEngine;
+using Hotline.Share.Enums.FlowEngine;
 
 namespace Hotline.Share.Dtos.Order
 {
@@ -13,6 +14,50 @@ namespace Hotline.Share.Dtos.Order
 
     }
 
+    public class OrderHandleFlowDto : StartWorkflowDto<UpdateOrderDto>
+    {
+        public string OrderId { get; set; }
+
+        #region 手动填入办理人信息
+
+        /// <summary>
+        /// 真实办理人姓名(手动填写)
+        /// </summary>
+        public string? RealHandlerName { get; set; }
+
+        /// <summary>
+        /// 真实办理人电话(手动填写)
+        /// </summary>
+        public string? RealHandlerPhone { get; set; }
+
+        /// <summary>
+        /// 沟通方式(手动填写)
+        /// </summary>
+        public ERealCommunicationMode? RealCommunicationMode { get; set; }
+
+        /// <summary>
+        /// 沟通时间(手动填写)
+        /// </summary>
+        public DateTime? RealCommunicationTime { get; set; }
+
+        /// <summary>
+        /// 沟通地点(手动填写)
+        /// </summary>
+        public string? RealCommunicationAddress { get; set; }
+
+        /// <summary>
+        /// 已与市民沟通
+        /// </summary>
+        public bool? RealIsContacted { get; set; }
+
+        /// <summary>
+        /// 已与市民现场沟通
+        /// </summary>
+        public bool? RealContactLocale { get; set; }
+
+        #endregion
+    }
+
     public class ScreenStartFlowDto : StartWorkflowDto<OrderScreenDto>
     {