Просмотр исходного кода

1. 办理流程中的上下文对象由外部传入
2. 取消否决接口,流程办理接口参数增加审批是否通过,统一调用流程办理接口完成审批通过与否决
3. 收到省平台消息通知生成对应上下文对象

xf 11 месяцев назад
Родитель
Сommit
eb87a62220
60 измененных файлов с 506 добавлено и 1315 удалено
  1. 1 8
      Hotline.sln
  2. 49 49
      src/Hotline.Api.Sdk/Order/IHotlineClient.Order.cs
  3. 3 3
      src/Hotline.Api/Controllers/OrderController.cs
  4. 4 52
      src/Hotline.Api/Controllers/TestController.cs
  5. 9 9
      src/Hotline.Api/Controllers/WorkflowController.cs
  6. 6 7
      src/Hotline.Application/FlowEngine/IWorkflowApplication.cs
  7. 20 20
      src/Hotline.Application/FlowEngine/WorkflowApplication.cs
  8. 0 24
      src/Hotline.Application/Handlers/Order/AddOrderComplementAsyncNotifyHandler.cs
  9. 0 23
      src/Hotline.Application/Handlers/Order/AddOrderTracesAsyncNotifyHandler.cs
  10. 0 23
      src/Hotline.Application/Handlers/Order/CancelOrderAsyncNotifyHandler.cs
  11. 0 62
      src/Hotline.Application/Handlers/Order/DelayProvinceResultNotifyHandler.cs
  12. 0 33
      src/Hotline.Application/Handlers/Order/GetOrderDetailNotifyHandler.cs
  13. 0 42
      src/Hotline.Application/Handlers/Order/OrderResultNotifyHandler.cs
  14. 0 53
      src/Hotline.Application/Handlers/Order/OrderSendBackResultNotifyHandler.cs
  15. 0 71
      src/Hotline.Application/Handlers/Order/ProvinceOrderSuperviseNotifyHandler.cs
  16. 0 45
      src/Hotline.Application/Handlers/Order/ProvinceOrderUrgeNotifyHandler.cs
  17. 0 57
      src/Hotline.Application/Handlers/Order/ReceiveOrderExtensionNotifyHandler.cs
  18. 0 148
      src/Hotline.Application/Handlers/Order/ReceiveOrderNotifyHandler.cs
  19. 0 63
      src/Hotline.Application/Handlers/Order/ScreenProvinceResultNotifyHandler.cs
  20. 5 4
      src/Hotline.Application/Orders/IOrderApplication.cs
  21. 8 6
      src/Hotline.Application/Orders/OrderApplication.cs
  22. 33 14
      src/Hotline.Application/Subscribers/DatasharingSubscriber.cs
  23. 1 1
      src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/CancelOrderDto.cs
  24. 2 2
      src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/DelayProvinceResultDto.cs
  25. 6 0
      src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/DsSource.cs
  26. 1 1
      src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/OrderResultDto.cs
  27. 15 0
      src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/OrderSendBackResultDto.cs
  28. 1 1
      src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/OrderUpdataFiles.cs
  29. 26 0
      src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/OrderVisitWebDto.cs
  30. 36 0
      src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/ProvinceOrderUrgeDto.cs
  31. 29 0
      src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/ProvinceOrderVisitDto.cs
  32. 1 1
      src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/ProvinceSendScreenResultDto.cs
  33. 1 14
      src/Hotline.Share/Dtos/Order/OrderSendBackDto.cs
  34. 1 33
      src/Hotline.Share/Dtos/Order/OrderUrgeDto.cs
  35. 0 48
      src/Hotline.Share/Dtos/Order/OrderVisitDto.cs
  36. 9 0
      src/Hotline.Share/Enums/Order/ESource.cs
  37. 56 0
      src/Hotline/Authentications/Police110SessionContext.cs
  38. 51 0
      src/Hotline/Authentications/ProvinceSessionContext.cs
  39. 28 0
      src/Hotline/Authentications/SessionContextCreator.cs
  40. 56 0
      src/Hotline/Authentications/YbEnterpriseSessionContext.cs
  41. 0 13
      src/Hotline/DataSharing/Province/Notifications/AddOrderComplementAsyncNotify.cs
  42. 0 21
      src/Hotline/DataSharing/Province/Notifications/AddOrderTracesAsyncNotify.cs
  43. 0 20
      src/Hotline/DataSharing/Province/Notifications/CancelOrderAsyncNotify.cs
  44. 0 33
      src/Hotline/DataSharing/Province/Notifications/DelayProvinceResultNotify.cs
  45. 0 22
      src/Hotline/DataSharing/Province/Notifications/OrderResultNotify.cs
  46. 0 12
      src/Hotline/DataSharing/Province/Notifications/OrderSendBackResultNotify.cs
  47. 0 15
      src/Hotline/DataSharing/Province/Notifications/ProvinceOrderSuperviseNotify.cs
  48. 0 12
      src/Hotline/DataSharing/Province/Notifications/ProvinceOrderUrgeNotify.cs
  49. 0 12
      src/Hotline/DataSharing/Province/Notifications/ReceiveOrderExtensionNotify.cs
  50. 0 18
      src/Hotline/DataSharing/Province/Notifications/ReceiveOrderNotify.cs
  51. 0 15
      src/Hotline/DataSharing/Province/Notifications/ScreenProvinceResultNotify.cs
  52. 11 12
      src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs
  53. 37 42
      src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs
  54. 0 46
      test/WebApplication1/Controllers/WeatherForecastController.cs
  55. 0 26
      test/WebApplication1/Program.cs
  56. 0 31
      test/WebApplication1/Properties/launchSettings.json
  57. 0 13
      test/WebApplication1/WeatherForecast.cs
  58. 0 18
      test/WebApplication1/WebApplication1.csproj
  59. 0 8
      test/WebApplication1/appsettings.Development.json
  60. 0 9
      test/WebApplication1/appsettings.json

+ 1 - 8
Hotline.sln

@@ -45,11 +45,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tr.Sdk", "src\Tr.Sdk\Tr.Sdk
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hotline.Api.Sdk", "src\Hotline.Api.Sdk\Hotline.Api.Sdk.csproj", "{EEF30056-A626-43B2-9762-632935C1AF31}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebApplication1", "test\WebApplication1\WebApplication1.csproj", "{D291230A-0CFD-4991-BC1A-B67C58F3857A}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hotline.Ai.Jths", "src\Hotline.Ai.Jths\Hotline.Ai.Jths.csproj", "{1634234A-379C-44DC-BFEC-7BBDEF50B47B}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hotline.YbEnterprise.Sdk", "src\Hotline.YbEnterprise.Sdk\Hotline.YbEnterprise.Sdk.csproj", "{C3F289D5-C50B-46DB-852C-9543EF9B0355}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hotline.YbEnterprise.Sdk", "src\Hotline.YbEnterprise.Sdk\Hotline.YbEnterprise.Sdk.csproj", "{C3F289D5-C50B-46DB-852C-9543EF9B0355}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -117,10 +115,6 @@ Global
 		{EEF30056-A626-43B2-9762-632935C1AF31}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{EEF30056-A626-43B2-9762-632935C1AF31}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{EEF30056-A626-43B2-9762-632935C1AF31}.Release|Any CPU.Build.0 = Release|Any CPU
-		{D291230A-0CFD-4991-BC1A-B67C58F3857A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{D291230A-0CFD-4991-BC1A-B67C58F3857A}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{D291230A-0CFD-4991-BC1A-B67C58F3857A}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{D291230A-0CFD-4991-BC1A-B67C58F3857A}.Release|Any CPU.Build.0 = Release|Any CPU
 		{1634234A-379C-44DC-BFEC-7BBDEF50B47B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{1634234A-379C-44DC-BFEC-7BBDEF50B47B}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{1634234A-379C-44DC-BFEC-7BBDEF50B47B}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -153,7 +147,6 @@ Global
 		{40B6FBEC-0524-430C-8B28-22229681D0F8} = {D041C554-B78E-4AAF-B597-E309DC8EEF4F}
 		{BB901B26-EA97-4D6F-8CAC-14DB321E1733} = {D041C554-B78E-4AAF-B597-E309DC8EEF4F}
 		{EEF30056-A626-43B2-9762-632935C1AF31} = {25C73963-4D5E-4654-804A-D2E2D360134B}
-		{D291230A-0CFD-4991-BC1A-B67C58F3857A} = {08D63205-1445-430F-A4AB-EF1744E3AC11}
 		{1634234A-379C-44DC-BFEC-7BBDEF50B47B} = {D041C554-B78E-4AAF-B597-E309DC8EEF4F}
 		{C3F289D5-C50B-46DB-852C-9543EF9B0355} = {D041C554-B78E-4AAF-B597-E309DC8EEF4F}
 	EndGlobalSection

+ 49 - 49
src/Hotline.Api.Sdk/Order/IHotlineClient.Order.cs

@@ -1,56 +1,56 @@
-using Hotline.Share.Dtos.Order;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Fw.Utility.UnifyResponse;
-using RestSharp;
+//using Hotline.Share.Dtos.Order;
+//using System;
+//using System.Collections.Generic;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+//using Fw.Utility.UnifyResponse;
+//using RestSharp;
 
-namespace Hotline.Api.Sdk
-{
-    public partial interface IHotlineClient
-    {
-        /// <summary>
-        /// 省延期结果
-        /// </summary>
-        public Task<ApiResponse> DelayProvinceResultAsync(DelayProvinceResultDto request, CancellationToken cancellationToken) =>
-            ExecuteAsync("api/v1/Order/delay/province/result", Method.Post, request, cancellationToken);
+//namespace Hotline.Api.Sdk
+//{
+//    public partial interface IHotlineClient
+//    {
+//        /// <summary>
+//        /// 省延期结果
+//        /// </summary>
+//        public Task<ApiResponse> DelayProvinceResultAsync(DelayProvinceResultDto request, CancellationToken cancellationToken) =>
+//            ExecuteAsync("api/v1/Order/delay/province/result", Method.Post, request, cancellationToken);
 
-        /// <summary>
-        /// 接受其他平台工单数据
-        /// </summary>
-        public Task<ApiResponse<AddOrderResponse>> ReceiveOrderAsync(AddOrderDto request, CancellationToken cancellationToken) =>
-            ExecuteAsync<AddOrderDto, AddOrderResponse>("receive", Method.Post, request, cancellationToken);
+//        /// <summary>
+//        /// 接受其他平台工单数据
+//        /// </summary>
+//        public Task<ApiResponse<AddOrderResponse>> ReceiveOrderAsync(AddOrderDto request, CancellationToken cancellationToken) =>
+//            ExecuteAsync<AddOrderDto, AddOrderResponse>("receive", Method.Post, request, cancellationToken);
 
-        /// <summary>
-        /// 接受其他平台工单扩展信息
-        /// </summary>
-        public Task<ApiResponse<string>> ReceiveExtensionAsync(OrderExtensionDto request, CancellationToken cancellationToken) =>
-            ExecuteAsync<OrderExtensionDto, string>("receive/extension", Method.Post, request, cancellationToken);
+//        /// <summary>
+//        /// 接受其他平台工单扩展信息
+//        /// </summary>
+//        public Task<ApiResponse<string>> ReceiveExtensionAsync(OrderExtensionDto request, CancellationToken cancellationToken) =>
+//            ExecuteAsync<OrderExtensionDto, string>("receive/extension", Method.Post, request, cancellationToken);
 
-        /// <summary>
-        /// 工单退回结果
-        /// </summary>
-        public Task<ApiResponse> OrderSendBackResultAsync(OrderSendBackResultDto request, CancellationToken cancellationToken) =>
-            ExecuteAsync("api/v1/Order/send_back/result", Method.Post, request, cancellationToken);
+//        /// <summary>
+//        /// 工单退回结果
+//        /// </summary>
+//        public Task<ApiResponse> OrderSendBackResultAsync(OrderSendBackResultDto request, CancellationToken cancellationToken) =>
+//            ExecuteAsync("api/v1/Order/send_back/result", Method.Post, request, cancellationToken);
 
-        /// <summary>
-        /// 督办工单派发
-        /// </summary>
-        public Task<ApiResponse> ProvinceOrderSuperviseAsync(ProvinceOrderSuperviseDto request, CancellationToken cancellationToken) =>
-            ExecuteAsync("api/v1/Order/supervise/province", Method.Post, request, cancellationToken);
+//        /// <summary>
+//        /// 督办工单派发
+//        /// </summary>
+//        public Task<ApiResponse> ProvinceOrderSuperviseAsync(ProvinceOrderSuperviseDto request, CancellationToken cancellationToken) =>
+//            ExecuteAsync("api/v1/Order/supervise/province", Method.Post, request, cancellationToken);
 
-        /// <summary>
-        /// 催办工单派发
-        /// </summary>
-        public Task<ApiResponse> ProvinceOrderUrgeAsync(ProvinceOrderUrgeDto request, CancellationToken cancellationToken) =>
-            ExecuteAsync("api/v1/Order/urge/province", Method.Post, request, cancellationToken);
+//        /// <summary>
+//        /// 催办工单派发
+//        /// </summary>
+//        public Task<ApiResponse> ProvinceOrderUrgeAsync(ProvinceOrderUrgeDto request, CancellationToken cancellationToken) =>
+//            ExecuteAsync("api/v1/Order/urge/province", Method.Post, request, cancellationToken);
 
-        /// <summary>
-        /// 省工单甄别结果
-        /// </summary>
-        public Task<ApiResponse> ScreenProvinceResultAsync(ProvinceScreenResult request, CancellationToken cancellationToken) =>
-            ExecuteAsync("api/v1/Order/screen/province/result", Method.Post, request, cancellationToken);
-    }
-}
+//        /// <summary>
+//        /// 省工单甄别结果
+//        /// </summary>
+//        public Task<ApiResponse> ScreenProvinceResultAsync(ProvinceScreenResult request, CancellationToken cancellationToken) =>
+//            ExecuteAsync("api/v1/Order/screen/province/result", Method.Post, request, cancellationToken);
+//    }
+//}

+ 3 - 3
src/Hotline.Api/Controllers/OrderController.cs

@@ -1582,7 +1582,7 @@ public class OrderController : BaseController
             var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
             startDto.DefinitionModuleCode = WorkflowModuleConsts.OrderScreen;
             startDto.Title = dto.Data.Content;
-            workflowId = await _workflowApplication.StartWorkflowAsync(startDto, model.Id,
+            workflowId = await _workflowApplication.StartWorkflowAsync(startDto, _sessionContext, model.Id,
                     cancellationToken: HttpContext.RequestAborted);
             //var screen = await _orderScreenRepository.GetAsync(model.Id, HttpContext.RequestAborted);
             //if (screen != null)
@@ -1615,7 +1615,7 @@ public class OrderController : BaseController
         try
         {
             dto.NextWorkflow.WorkflowId = screen.WorkflowId;
-            await _workflowApplication.NextAsync(dto.NextWorkflow,
+            await _workflowApplication.NextAsync(dto.NextWorkflow, _sessionContext,
                     cancellationToken: HttpContext.RequestAborted);
         }
         catch (Exception e)
@@ -2418,7 +2418,7 @@ public class OrderController : BaseController
     [AllowAnonymous]
     public async Task<AddOrderResponse> AddAnonymous([FromBody] AddOrderDto dto)
     {
-        return await _orderApplication.ReceiveOrderFromExternalAsync(dto, HttpContext.RequestAborted);
+        return await _orderApplication.ReceiveOrderFromExternalAsync(dto, _sessionContext, HttpContext.RequestAborted);
     }
 
     /// <summary>

+ 4 - 52
src/Hotline.Api/Controllers/TestController.cs

@@ -1,6 +1,7 @@
 using System.Collections.Concurrent;
 using System.Data;
 using System.IO;
+using System.Threading;
 using DotNetCore.CAP;
 using Fw.Utility.Client;
 using Google.Protobuf.WellKnownTypes;
@@ -23,6 +24,7 @@ using Hotline.Settings;
 using Hotline.Settings.TimeLimits;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.FlowEngine;
+using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Realtime;
 using Hotline.Share.Enums.Settings;
 using Hotline.Share.Mq;
@@ -456,59 +458,9 @@ public class TestController : BaseController
 
     [AllowAnonymous]
     [HttpPost("t3")]
-    public IActionResult TestExportExcel()
+    public async Task TestExportExcel()
     {
-       //var students = new List<Student>
-       // {
-       //     new Student
-       //     {
-       //         Id = "student001",
-       //         Name = "student001Name",
-       //         School = new School
-       //         {
-       //             Id = "schoolABC",
-       //             Name = "schoolABCName",
-       //             Sponser = new Sponser
-       //             {
-       //                 Amount = 1000
-       //             }
-       //         }
-       //     },
-       //     new Student
-       //     {
-       //         Id = "student002",
-       //         Name = "student002Name",
-       //         School = new School
-       //         {
-       //             Id = "schoolABCD",
-       //             Name = "schoolABCDName",
-       //             Sponser = new Sponser
-       //             {
-       //                 Amount = 2000
-       //             }
-       //         }
-       //     }
-       // };
-
-       //var ps = new List<Kv>
-       //{
-       //    new("Id", "编号"),
-       //    new("SchoolId", "流程标题"),
-       //    new("SchoolSponserAmount", "金额"),
-       //};
-
-       //dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(ps);
-
-       // var dtos = students.Select(stu => _mapper.Map(stu, typeof(Student), dynamicClass))
-       //     .Cast<object>()
-       //     .ToList();
-
-       // var stream = ExcelHelper.CreateStream(dtos);
-
-       // return ExcelStreamResult(stream);
-
-       throw new NotImplementedException();
-
+      
     }
 
     [HttpGet("rsa")]

+ 9 - 9
src/Hotline.Api/Controllers/WorkflowController.cs

@@ -392,17 +392,17 @@ public class WorkflowController : BaseController
     [HttpPost("cancel")]
     public async Task Cancel([FromBody] CancelDto dto)
     {
-        await _workflowDomainService.CancelAsync(dto, HttpContext.RequestAborted);
+        await _workflowDomainService.CancelAsync(dto, _sessionContext, HttpContext.RequestAborted);
     }
 
-    /// <summary>
-    /// 否决
-    /// </summary>
-    [HttpPost("reject")]
-    public async Task Reject([FromBody] RejectDto dto)
-    {
-        await _workflowApplication.RejectAsync(dto, HttpContext.RequestAborted);
-    }
+    ///// <summary>
+    ///// 否决
+    ///// </summary>
+    //[HttpPost("reject")]
+    //public async Task Reject([FromBody] RejectDto dto)
+    //{
+    //    await _workflowApplication.RejectAsync(dto, HttpContext.RequestAborted);
+    //}
 
     /// <summary>
     /// 补充

+ 6 - 7
src/Hotline.Application/FlowEngine/IWorkflowApplication.cs

@@ -45,9 +45,8 @@ namespace Hotline.Application.FlowEngine
         /// <summary>
         /// 跳转至结束节点(无视流程模板配置直接跳至结束节点)
         /// </summary>
-        Task HandleToEndAsync(string workflowId, string opinion, List<FileDto> file,
-            EReviewResult? reviewResult = EReviewResult.Unknown, bool isProvince = false,
-            CancellationToken cancellationToken = default);
+        Task HandleToEndAsync(ISessionContext current, string workflowId, string opinion, List<FileDto> file,
+            EReviewResult? reviewResult = EReviewResult.Unknown, CancellationToken cancellationToken = default);
 
         ////////
 
@@ -66,10 +65,10 @@ namespace Hotline.Application.FlowEngine
         /// </summary>
         Task<NextStepsDto<RecallStepOption>> GetRecallStepsAsync(string workflowId, CancellationToken cancellationToken);
 
-        /// <summary>
-        /// 否决
-        /// </summary>
-        Task RejectAsync(RejectDto dto, CancellationToken cancellationToken);
+        ///// <summary>
+        ///// 否决
+        ///// </summary>
+        //Task RejectAsync(RejectDto dto, CancellationToken cancellationToken);
 
         /// <summary>
         /// 获取流程模板信息

+ 20 - 20
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -161,8 +161,8 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         var counterSignType = _workflowDomainService.GetCounterSignType(startStep.BusinessType);
 
         //办理开始节点
-        await _workflowDomainService.HandleStepAsync(startStep, workflow, dto, flowAssignInfo.FlowAssignType, counterSignType,
-            expiredTime, cancellationToken);
+        await _workflowDomainService.HandleStepAsync(current, startStep, workflow, dto, flowAssignInfo.FlowAssignType,
+            counterSignType, expiredTime, cancellationToken);
         //startStep.Handle(current.RequiredUserId, current.UserName,
         //    current.RequiredOrgId, current.OrgName,
         //    current.OrgAreaCode, current.OrgAreaName,
@@ -273,7 +273,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         var user = await _userRepository.Queryable()
             .Includes(x => x.Organization)
             .FirstAsync(x => x.Id == _sessionContext.RequiredUserId, cancellationToken);
-        await _workflowDomainService.PreviousAsync(workflow, dto, user, cancellationToken);
+        await _workflowDomainService.PreviousAsync(workflow, dto, user, _sessionContext, cancellationToken);
     }
 
     /// <summary>
@@ -286,7 +286,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         var user = await _userRepository.Queryable()
             .Includes(x => x.Organization)
             .FirstAsync(x => x.Id == userId, cancellationToken);
-        await _workflowDomainService.PreviousAsync(workflow, dto, user, cancellationToken);
+        await _workflowDomainService.PreviousAsync(workflow, dto, user, _sessionContext, cancellationToken);
     }
 
     /// <summary>
@@ -313,15 +313,14 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
 
         var stepHandlers = await GetNextStepHandlersAsync(workflow, targetStepDefine, dto, cancellationToken);
 
-        await _workflowDomainService.RecallAsync(workflow, dto, targetStepDefine, flowAssignInfo, stepHandlers, expiredTime, cancellationToken);
+        await _workflowDomainService.RecallAsync(workflow, dto, targetStepDefine, flowAssignInfo, stepHandlers, expiredTime, _sessionContext, cancellationToken);
     }
 
     /// <summary>
     /// 无视流程模板配置直接将当前节点办理至结束节点
     /// </summary>
     public async Task HandleToEndAsync(ISessionContext current, string workflowId, string opinion, List<FileDto> files,
-        EReviewResult? reviewResult = EReviewResult.Unknown, bool isProvince = false,
-        CancellationToken cancellationToken = default)
+        EReviewResult? reviewResult = EReviewResult.Unknown, CancellationToken cancellationToken = default)
     {
         var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, withDefine: true, withSteps: true,
             cancellationToken: cancellationToken);
@@ -335,7 +334,8 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
             NextStepName = endStepDefine.Name,
             FlowDirection = EFlowDirection.OrgToFile,
             BusinessType = endStepDefine.BusinessType,
-            Opinion = opinion
+            Opinion = opinion,
+            Files = files
         };
         await NextAsync(dto, current, cancellationToken: cancellationToken);
 
@@ -580,18 +580,18 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         return steps;
     }
 
-    /// <summary>
-    /// 否决
-    /// </summary>
-    public async Task RejectAsync(RejectDto dto, CancellationToken cancellationToken)
-    {
-        var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withDefine: true, withSteps: true,
-            cancellationToken: cancellationToken);
-        var basicDto = _mapper.Map<BasicWorkflowDto>(dto);
-        basicDto.NextStepCode = string.Empty;
-        basicDto.IsStartCountersign = false;
-        await _workflowDomainService.RejectAsync(workflow, basicDto, cancellationToken);
-    }
+    ///// <summary>
+    ///// 否决
+    ///// </summary>
+    //public async Task RejectAsync(RejectDto dto, CancellationToken cancellationToken)
+    //{
+    //    var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withDefine: true, withSteps: true,
+    //        cancellationToken: cancellationToken);
+    //    var basicDto = _mapper.Map<BasicWorkflowDto>(dto);
+    //    basicDto.NextStepCode = string.Empty;
+    //    basicDto.IsStartCountersign = false;
+    //    await _workflowDomainService.RejectAsync(workflow, basicDto, cancellationToken);
+    //}
 
     //供开启流程调用
     private async Task<List<NextStepOption>> GetConfigStepsAsync(

+ 0 - 24
src/Hotline.Application/Handlers/Order/AddOrderComplementAsyncNotifyHandler.cs

@@ -1,24 +0,0 @@
-using Hotline.DataSharing.Province.Notifications;
-using Hotline.Orders;
-using MediatR;
-
-namespace Hotline.Application.Handlers.Order
-{
-    public class AddOrderComplementAsyncNotifyHandler : INotificationHandler<AddOrderComplementAsyncNotify>
-    {
-        private readonly IOrderDomainService _orderDomainService;
-
-        public AddOrderComplementAsyncNotifyHandler(IOrderDomainService orderDomainService)
-        {
-            _orderDomainService = orderDomainService;
-        }
-
-        /// <summary>Handles a notification</summary>
-        /// <param name="notification">The notification</param>
-        /// <param name="cancellationToken">Cancellation token</param>
-        public async Task Handle(AddOrderComplementAsyncNotify notification, CancellationToken cancellationToken)
-        {
-            await _orderDomainService.AddOrderComplementAsync(notification.OrderComplementDto, cancellationToken);
-        }
-    }
-}

+ 0 - 23
src/Hotline.Application/Handlers/Order/AddOrderTracesAsyncNotifyHandler.cs

@@ -1,23 +0,0 @@
-using Hotline.Application.Orders;
-using Hotline.DataSharing.Province.Notifications;
-using MediatR;
-
-namespace Hotline.Application.Handlers.Order;
-
-public class AddOrderTracesAsyncNotifyHandler:INotificationHandler<AddOrderTracesAsyncNotify>
-{
-    private readonly IOrderApplication _orderApplication;
-
-    public AddOrderTracesAsyncNotifyHandler(IOrderApplication orderApplication)
-    {
-        _orderApplication = orderApplication;
-    }
-    
-    /// <summary>Handles a notification</summary>
-    /// <param name="notification">The notification</param>
-    /// <param name="cancellationToken">Cancellation token</param>
-    public async Task Handle(AddOrderTracesAsyncNotify notification, CancellationToken cancellationToken)
-    {
-        await _orderApplication.AddOrderTracesAsync(notification.OrderId, notification.Traces, cancellationToken);
-    }
-}

+ 0 - 23
src/Hotline.Application/Handlers/Order/CancelOrderAsyncNotifyHandler.cs

@@ -1,23 +0,0 @@
-using Hotline.Application.Orders;
-using Hotline.DataSharing.Province.Notifications;
-using MediatR;
-
-namespace Hotline.Application.Handlers.Order;
-
-public class CancelOrderAsyncNotifyHandler : INotificationHandler<CancelOrderAsyncNotify>
-{
-    private readonly IOrderApplication _orderApplication;
-
-    public CancelOrderAsyncNotifyHandler(IOrderApplication orderApplication)
-    {
-        _orderApplication = orderApplication;
-    }
-    
-    /// <summary>Handles a notification</summary>
-    /// <param name="notification">The notification</param>
-    /// <param name="cancellationToken">Cancellation token</param>
-    public async Task Handle(CancelOrderAsyncNotify notification, CancellationToken cancellationToken)
-    {
-        await _orderApplication.CancelOrderAsync(notification.OrderId, notification.Opinion, cancellationToken);
-    }
-}

+ 0 - 62
src/Hotline.Application/Handlers/Order/DelayProvinceResultNotifyHandler.cs

@@ -1,62 +0,0 @@
-//using MediatR;
-//using System;
-//using System.Collections.Generic;
-//using System.Linq;
-//using System.Text;
-//using System.Threading.Tasks;
-//using Hotline.Application.FlowEngine;
-//using Hotline.DataSharing.Province.Notifications;
-//using Hotline.Orders;
-//using Hotline.Share.Dtos.FlowEngine;
-//using Hotline.Share.Enums.FlowEngine;
-//using Hotline.Share.Enums.Order;
-//using XF.Domain.Exceptions;
-//using XF.Domain.Repository;
-
-//namespace Hotline.Application.Handlers.Order
-//{
-//    public class DelayProvinceResultNotifyHandler : INotificationHandler<DelayProvinceResultNotify>
-//    {
-//        private readonly IRepository<OrderDelay> _orderDelayRepository;
-//        private readonly IWorkflowApplication _workflowApplication;
-
-//        public DelayProvinceResultNotifyHandler(
-//            IRepository<OrderDelay> orderDelayRepository,
-//            IWorkflowApplication workflowApplication)
-//        {
-//            _orderDelayRepository = orderDelayRepository;
-//            _workflowApplication = workflowApplication;
-//        }
-
-//        /// <summary>Handles a notification</summary>
-//        /// <param name="notification">The notification</param>
-//        /// <param name="cancellationToken">Cancellation token</param>
-//        public async Task Handle(DelayProvinceResultNotify notification, CancellationToken cancellationToken)
-//        {
-//            var dto = notification;
-//            var orderDelay = await _orderDelayRepository.Queryable()
-//                .Includes(d => d.Order)
-//                .Includes(d => d.Workflow)
-//                .FirstAsync(d => d.Order.ProvinceNo == dto.No && d.DelayState == EDelayState.Examining, cancellationToken);
-//            if (orderDelay is null)
-//                throw new UserFriendlyException("无效省工单编号");
-//            if (string.IsNullOrEmpty(orderDelay.WorkflowId))
-//                throw new UserFriendlyException("无效延期审批流程编号");
-
-//            if (dto.IsPass)
-//            {
-//                await _workflowApplication.JumpToEndAsync(orderDelay.WorkflowId, dto.Opinion, notification.Files,EReviewResult.Approval,
-//                    true,cancellationToken);
-//            }
-//            else
-//            {
-//                var rejectDto = new RejectDto
-//                {
-//                    WorkflowId = orderDelay.WorkflowId,
-//                    Opinion = dto.Opinion,
-//                };
-//                await _workflowApplication.RejectAsync(rejectDto, cancellationToken);
-//            }
-//        }
-//    }
-//}

+ 0 - 33
src/Hotline.Application/Handlers/Order/GetOrderDetailNotifyHandler.cs

@@ -1,33 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Hotline.FlowEngine.Workflows;
-using Hotline.Orders.Notifications;
-using MediatR;
-
-namespace Hotline.Application.Handlers.Order
-{
-    public class GetOrderDetailNotifyHandler : INotificationHandler<GetOrderDetailNotify>
-    {
-        private readonly IWorkflowDomainService _workflowDomainService;
-
-        public GetOrderDetailNotifyHandler(IWorkflowDomainService workflowDomainService)
-        {
-            _workflowDomainService = workflowDomainService;
-        }
-
-        /// <summary>Handles a notification</summary>
-        /// <param name="notification">The notification</param>
-        /// <param name="cancellationToken">Cancellation token</param>
-        public async Task Handle(GetOrderDetailNotify notification, CancellationToken cancellationToken)
-        {
-            await _workflowDomainService.AcceptAsync(notification.Workflow,
-                notification.UserId, notification.UserName,
-                notification.OrgId, notification.OrgName,
-                notification.OrgAreaCode, notification.OrgAreaName,
-                cancellationToken);
-        }
-    }
-}

+ 0 - 42
src/Hotline.Application/Handlers/Order/OrderResultNotifyHandler.cs

@@ -1,42 +0,0 @@
-//using Hotline.Application.FlowEngine;
-//using Hotline.DataSharing.Province.Notifications;
-//using Hotline.File;
-//using Hotline.Orders;
-//using Hotline.Share.Dtos.FlowEngine;
-//using Hotline.Share.Dtos.Order;
-//using Hotline.Share.Enums.Order;
-//using MapsterMapper;
-//using MediatR;
-
-//namespace Hotline.Application.Handlers.Order
-//{
-//	public class OrderResultNotifyHandler : INotificationHandler<OrderResultNotify>
-//	{
-//		private readonly IOrderRepository _orderRepository;
-//		private readonly IWorkflowApplication _workflowApplication;
-
-//		public OrderResultNotifyHandler(
-//			IOrderRepository orderRepository, 
-//			IWorkflowApplication workflowApplication)
-//		{
-//			_orderRepository = orderRepository;
-//			_workflowApplication = workflowApplication;
-//		}
-
-//		public async Task Handle(OrderResultNotify request, CancellationToken cancellationToken)
-//		{
-//			var order = await  _orderRepository.GetAsync(request.OrderId, cancellationToken);
-//            if (order != null)
-//            {
-//				if ("0".Equals(request.FinishType))
-//				{
-//					await _workflowApplication.PreviousAsync(
-//						new PreviousWorkflowDto { WorkflowId = order.WorkflowId, Opinion = request.Opinion, Files = request.Files }, cancellationToken: cancellationToken);
-//				}
-//				else if ("1".Equals(request.FinishType)) {
-//					await _workflowApplication.JumpToEndAsync(order.WorkflowId, request.Opinion, request.Files, cancellationToken: cancellationToken);
-//				}
-//			}
-//        }
-//	}
-//}

+ 0 - 53
src/Hotline.Application/Handlers/Order/OrderSendBackResultNotifyHandler.cs

@@ -1,53 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Hotline.DataSharing.Province.Notifications;
-using Hotline.Orders;
-using Hotline.Share.Enums.Order;
-using MapsterMapper;
-using MediatR;
-using Microsoft.AspNetCore.Http;
-using XF.Domain.Exceptions;
-using XF.Domain.Repository;
-
-namespace Hotline.Application.Handlers.Order
-{
-    public class OrderSendBackResultNotifyHandler : INotificationHandler<OrderSendBackResultNotify>
-    {
-        private readonly IRepository<OrderSendBack> _orderSendBackRepository;
-        private readonly IOrderRepository _orderRepository;
-        private readonly IMapper _mapper;
-
-        public OrderSendBackResultNotifyHandler(
-            IRepository<OrderSendBack> orderSendBackRepository,
-            IOrderRepository orderRepository,
-            IMapper mapper)
-        {
-            _orderSendBackRepository = orderSendBackRepository;
-            _orderRepository = orderRepository;
-            _mapper = mapper;
-        }
-
-        /// <summary>Handles a notification</summary>
-        /// <param name="notification">The notification</param>
-        /// <param name="cancellationToken">Cancellation token</param>
-        public async Task Handle(OrderSendBackResultNotify notification, CancellationToken cancellationToken)
-        {
-            var dto = notification.OrderSendBackResultDto;
-            //验证是否存在退回
-            var sendBack = await _orderSendBackRepository.GetAsync(dto.Id, cancellationToken);
-            if (sendBack is null)
-                throw UserFriendlyException.SameMessage("无效退回");
-
-            _mapper.Map(dto, sendBack);
-            sendBack.Result = dto.Result;
-            sendBack.Reason = dto.Reason;
-            await _orderSendBackRepository.UpdateAsync(sendBack, cancellationToken);
-            var order = await _orderRepository.GetAsync(sendBack.OrderId, cancellationToken);
-            order.Status = EOrderStatus.WaitForAccept;
-            await _orderRepository.UpdateAsync(order, cancellationToken);
-        }
-    }
-}

+ 0 - 71
src/Hotline.Application/Handlers/Order/ProvinceOrderSuperviseNotifyHandler.cs

@@ -1,71 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Hotline.DataSharing.Province.Notifications;
-using Hotline.File;
-using Hotline.Orders;
-using Hotline.Settings;
-using MediatR;
-using Microsoft.AspNetCore.Http;
-using XF.Domain.Repository;
-
-namespace Hotline.Application.Handlers.Order
-{
-    public class ProvinceOrderSuperviseNotifyHandler : INotificationHandler<ProvinceOrderSuperviseNotify>
-    {
-        private readonly IOrderRepository _orderRepository;
-        private readonly IRepository<OrderSupervise> _orderSuperviseRepository;
-        private readonly ISystemOrganizeRepository _organizeRepository;
-        private readonly IFileRepository _fileRepository;
-
-		public ProvinceOrderSuperviseNotifyHandler(
-            IOrderRepository orderRepository,
-            IRepository<OrderSupervise> orderSuperviseRepository,
-            ISystemOrganizeRepository organizeRepository,
-            IFileRepository fileRepository)
-        {
-            _orderRepository = orderRepository;
-            _orderSuperviseRepository = orderSuperviseRepository;
-            _organizeRepository = organizeRepository;
-            _fileRepository = fileRepository; 
-
-		}
-
-        /// <summary>Handles a notification</summary>
-        /// <param name="notification">The notification</param>
-        /// <param name="cancellationToken">Cancellation token</param>
-        public async Task Handle(ProvinceOrderSuperviseNotify notification, CancellationToken cancellationToken)
-        {
-            var dto = notification.ProvinceOrderSuperviseDto;
-            var files = notification.Files;
-            var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.CaseSerial).FirstAsync(cancellationToken);
-            var org = await _organizeRepository.Queryable().Where(x => x.Name == dto.SuperviseRsvDept).FirstAsync(cancellationToken);
-            var orderSupervise = await _orderSuperviseRepository.GetAsync(x => x.SuperviseSerial == dto.SuperviseSerial);
-            if (orderSupervise is null)
-            {
-                var model = new OrderSupervise
-                {
-                    OrderId = order.Id,
-                    ReplyLimitTime = dto.SuperviseReturnDate,
-                    OrgId = org.Id,
-                    OrgName = org.Name,
-                    LaunchOrgName = dto.SuperviseSendDept,
-                    State = 0,
-                    ApplyContent = dto.SuperviseContent,
-                    CrUser = dto.SupervisePerson,
-                    SuperviseSerial = dto.SuperviseSerial
-                };
-                model.InitId();
-                if(files != null && files.Any()) model.FileJson = await _fileRepository.AddFileAsync(files, model.Id, "", cancellationToken);
-				await _orderSuperviseRepository.AddAsync(model, cancellationToken);
-            }
-            else {
-				if (files != null && files.Any()) orderSupervise.FileJson = await _fileRepository.AddFileAsync(files, orderSupervise.Id, "", cancellationToken);
-				await _orderSuperviseRepository.UpdateAsync(orderSupervise, cancellationToken);
-			}
-          
-        }
-    }
-}

+ 0 - 45
src/Hotline.Application/Handlers/Order/ProvinceOrderUrgeNotifyHandler.cs

@@ -1,45 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Hotline.DataSharing.Province.Notifications;
-using Hotline.Orders;
-using MediatR;
-using Microsoft.AspNetCore.Http;
-using XF.Domain.Repository;
-
-namespace Hotline.Application.Handlers.Order
-{
-    public class ProvinceOrderUrgeNotifyHandler : INotificationHandler<ProvinceOrderUrgeNotify>
-    {
-        private readonly IOrderRepository _orderRepository;
-        private readonly IRepository<OrderUrge> _orderUrgeRepository;
-
-        public ProvinceOrderUrgeNotifyHandler(
-            IOrderRepository orderRepository,
-            IRepository<OrderUrge> orderUrgeRepository)
-        {
-            _orderRepository = orderRepository;
-            _orderUrgeRepository = orderUrgeRepository;
-        }
-
-        /// <summary>Handles a notification</summary>
-        /// <param name="notification">The notification</param>
-        /// <param name="cancellationToken">Cancellation token</param>
-        public async Task Handle(ProvinceOrderUrgeNotify notification, CancellationToken cancellationToken)
-        {
-            var dto = notification.ProvinceOrderUrgeDto;
-            var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.CaseSerial).FirstAsync();
-            var model = new OrderUrge
-            {
-                OrderId = order.Id,
-                ApplyContent = dto.RemindReasion,
-                CrUser = dto.RemindName,
-                State = 0,
-                CreationTime = dto.RemindTime
-            };
-            await _orderUrgeRepository.AddAsync(model, cancellationToken);
-        }
-    }
-}

+ 0 - 57
src/Hotline.Application/Handlers/Order/ReceiveOrderExtensionNotifyHandler.cs

@@ -1,57 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Hotline.DataSharing.Province.Notifications;
-using Hotline.Orders;
-using MapsterMapper;
-using MediatR;
-using Microsoft.AspNetCore.Http;
-using XF.Domain.Exceptions;
-
-namespace Hotline.Application.Handlers.Order
-{
-    public class ReceiveOrderExtensionNotifyHandler : INotificationHandler<ReceiveOrderExtensionNotify>
-    {
-        private readonly IOrderRepository _orderRepository;
-        private readonly IOrderDomainService _orderDomainService;
-        private readonly IMapper _mapper;
-
-        public ReceiveOrderExtensionNotifyHandler(
-            IOrderRepository orderRepository,
-            IOrderDomainService orderDomainService,
-            IMapper mapper)
-        {
-            _orderRepository = orderRepository;
-            _orderDomainService = orderDomainService;
-            _mapper = mapper;
-        }
-
-        /// <summary>Handles a notification</summary>
-        /// <param name="notification">The notification</param>
-        /// <param name="cancellationToken">Cancellation token</param>
-        public async Task Handle(ReceiveOrderExtensionNotify notification, CancellationToken cancellationToken)
-        {
-            var dto = notification.OrderExtensionDto;
-            if (string.IsNullOrEmpty(dto.ProvinceNo))
-                throw new UserFriendlyException("无效省工单编号");
-
-            var orderExtension = await _orderDomainService.GetOrderExtensionsAsync(dto.ProvinceNo, cancellationToken);
-            if (orderExtension is not null) return;
-
-            var extension = _mapper.Map<OrderExtension>(dto);
-            var order = await _orderRepository.GetAsync(d => d.ProvinceNo == dto.ProvinceNo, cancellationToken);
-            if (order is null)
-            {
-                await _orderDomainService.AddExtensionAsync(extension, cancellationToken);
-            }
-            else
-            {
-                order.OrderExtension = extension;
-                await _orderRepository.UpdateNav(order).Include(d => d.OrderExtension).ExecuteCommandAsync();
-            }
-
-        }
-    }
-}

+ 0 - 148
src/Hotline.Application/Handlers/Order/ReceiveOrderNotifyHandler.cs

@@ -1,148 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Hotline.Application.FlowEngine;
-using Hotline.DataSharing.Province.Notifications;
-using Hotline.File;
-using Hotline.FlowEngine.Workflows;
-using Hotline.Orders;
-using Hotline.Share.Dtos.File;
-using Hotline.Share.Dtos.Order;
-using Hotline.Share.Enums.Order;
-using MapsterMapper;
-using MediatR;
-using Microsoft.AspNetCore.Http;
-using XF.Domain.Exceptions;
-
-namespace Hotline.Application.Handlers.Order
-{
-    public class ReceiveOrderNotifyHandler : IRequestHandler<ReceiveOrderNotify, AddOrderResponse?>
-    {
-        private readonly IOrderRepository _orderRepository;
-        private readonly IOrderDomainService _orderDomainService;
-        private readonly IWorkflowApplication _workflowApplication;
-        private readonly IWorkflowDomainService _workflowDomainService;
-        private readonly IMapper _mapper;
-        private readonly IFileRepository _fileRepository;
-
-        public ReceiveOrderNotifyHandler(
-            IOrderRepository orderRepository,
-            IOrderDomainService orderDomainService,
-            IWorkflowApplication workflowApplication,
-            IWorkflowDomainService workflowDomainService,
-            IMapper mapper,
-            IFileRepository fileRepository)
-        {
-            _orderRepository = orderRepository;
-            _orderDomainService = orderDomainService;
-            _workflowApplication = workflowApplication;
-            _workflowDomainService = workflowDomainService;
-            _mapper = mapper;
-            _fileRepository = fileRepository;
-        }
-
-        /// <summary>Handles a request</summary>
-        /// <param name="request">The request</param>
-        /// <param name="cancellationToken">Cancellation token</param>
-        /// <returns>Response from the request</returns>
-        public Task<AddOrderResponse?> Handle(ReceiveOrderNotify request, CancellationToken cancellationToken)
-        {
-            var dto = request.AddOrderDto;
-            var files = request.Files;
-            switch (dto.Source)
-            {
-                case ESource.ProvinceStraight:
-                    return ReceiveOrderFromProvinceAsync(dto, files, cancellationToken);
-                case ESource.Police110:
-                case ESource.CityDataExchangeLz:
-                case ESource.ConvergenceMedia:
-                case ESource.WebPortal:
-                    return ReceiveOrderFromOtherPlatformAsync(dto, files, cancellationToken);
-                case ESource.Hotline:
-                case ESource.HotlineImport:
-                default:
-                    throw new ArgumentOutOfRangeException();
-            }
-        }
-
-        /// <summary>
-        /// 接受外部工单(除省平台)
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <param name="cancellationToken"></param>
-        /// <returns></returns>
-        private async Task<AddOrderResponse?> ReceiveOrderFromOtherPlatformAsync(AddOrderDto dto, List<FileDto> files,
-
-            CancellationToken cancellationToken)
-        {
-            if (string.IsNullOrEmpty(dto.ExternalId))
-                throw new UserFriendlyException("工单外部编号不能为空");
-
-            var exists = await _orderRepository.Queryable().Where(d => d.ExternalId == dto.ExternalId).FirstAsync(cancellationToken);
-            if (exists != null)
-            {
-                if (files != null && files.Any()) exists.FileJson = await _fileRepository.AddFileAsync(files, exists.Id, "", cancellationToken);
-                await _orderRepository.FileAsync(exists, cancellationToken);
-                return null;
-            }
-            else
-            {
-                var order = _mapper.Map<Hotline.Orders.Order>(dto);
-                order.InitId();
-                if (files != null && files.Any()) order.FileJson = await _fileRepository.AddFileAsync(files, order.Id, "", cancellationToken);
-                var orderId = await _orderDomainService.AddAsync(order, cancellationToken: cancellationToken);
-                return new AddOrderResponse
-                {
-                    Id = orderId,
-                    No = order.No,
-                    Password = order.Password!
-                };
-            }
-        }
-
-        /// <summary>
-        /// 接受省平台工单
-        /// </summary>
-        private async Task<AddOrderResponse?> ReceiveOrderFromProvinceAsync(AddOrderDto dto, List<FileDto> files, CancellationToken cancellationToken)
-        {
-            if (string.IsNullOrEmpty(dto.ProvinceNo))
-                throw new UserFriendlyException("无效省工单编号");
-
-            var order = await _orderRepository.GetAsync(d => d.ProvinceNo == dto.ProvinceNo, cancellationToken);
-            if (order is null)
-            {
-                order = _mapper.Map<Hotline.Orders.Order>(dto);
-                order.InitId();
-                if (files != null && files.Any()) order.FileJson = await _fileRepository.AddFileAsync(files, order.Id, "", cancellationToken);
-                await _orderDomainService.AddAsync(order, cancellationToken: cancellationToken);
-
-                if (order.Source is ESource.ProvinceStraight)
-                {
-                    var orderExtension = await _orderDomainService.GetOrderExtensionsAsync(dto.ProvinceNo, cancellationToken);
-                    if (orderExtension is not null)
-                    {
-                        orderExtension.Id = order.Id;
-                        await _orderDomainService.UpdateExtensionAsync(orderExtension, cancellationToken);
-                    }
-                }
-                return new AddOrderResponse
-                {
-                    Id = order.Id,
-                    No = order.No,
-                    Password = order.Password!
-                };
-            }
-            else
-            {
-                if (files != null && files.Any()) order.FileJson = await _fileRepository.AddFileAsync(files, order.Id, "", cancellationToken);
-                await _orderRepository.FileAsync(order, cancellationToken);
-                // 特提(撤回至发起)
-                if (!string.IsNullOrEmpty(order.WorkflowId))
-                    await _workflowDomainService.RecallToStartStepAsync(order.WorkflowId, "省工单重派", cancellationToken);
-                return _mapper.Map<AddOrderResponse>(order);
-            }
-        }
-    }
-}

+ 0 - 63
src/Hotline.Application/Handlers/Order/ScreenProvinceResultNotifyHandler.cs

@@ -1,63 +0,0 @@
-//using System;
-//using System.Collections.Generic;
-//using System.Linq;
-//using System.Text;
-//using System.Threading.Tasks;
-//using Hotline.Application.FlowEngine;
-//using Hotline.DataSharing.Province.Notifications;
-//using Hotline.Orders;
-//using Hotline.Share.Dtos.FlowEngine;
-//using Hotline.Share.Enums.FlowEngine;
-//using Hotline.Share.Enums.Order;
-//using MediatR;
-//using Microsoft.AspNetCore.Http;
-//using XF.Domain.Exceptions;
-//using XF.Domain.Repository;
-
-//namespace Hotline.Application.Handlers.Order
-//{
-//    public class ScreenProvinceResultNotifyHandler : INotificationHandler<ScreenProvinceResultNotify>
-//    {
-//        private readonly IRepository<OrderScreen> _orderScreenRepository;
-//        private readonly IWorkflowApplication _workflowApplication;
-
-//        public ScreenProvinceResultNotifyHandler(
-//            IRepository<OrderScreen> orderScreenRepository,
-//            IWorkflowApplication workflowApplication)
-//        {
-//            _orderScreenRepository = orderScreenRepository;
-//            _workflowApplication = workflowApplication;
-//        }
-
-//        /// <summary>Handles a notification</summary>
-//        /// <param name="notification">The notification</param>
-//        /// <param name="cancellationToken">Cancellation token</param>
-//        public async Task Handle(ScreenProvinceResultNotify notification, CancellationToken cancellationToken)
-//        {
-//            var dto = notification.ProvinceScreenResult;
-//            var orderScreen = await _orderScreenRepository.Queryable()
-//                .Includes(d => d.Order)
-//                .Includes(d => d.Workflow)
-//                .FirstAsync(d => d.Order.ProvinceNo == dto.CaseSerial && d.Status == EScreenStatus.Approval, cancellationToken);
-//            if (orderScreen is null)
-//                throw new UserFriendlyException("无效省工单编号");
-//            if (string.IsNullOrEmpty(orderScreen.WorkflowId))
-//                throw new UserFriendlyException("无效甄别审批流程编号");
-
-//            if (dto.AuditResult)
-//            {
-//                await _workflowApplication.JumpToEndAsync(orderScreen.WorkflowId, dto.AuditOpinion, notification.Files,EReviewResult.Approval,
-//                    true,cancellationToken);
-//            }
-//            else
-//            {
-//                var rejectDto = new RejectDto
-//                {
-//                    WorkflowId = orderScreen.WorkflowId,
-//                    Opinion = dto.AuditOpinion,
-//                };
-//                await _workflowApplication.RejectAsync(rejectDto, cancellationToken);
-//            }
-//        }
-//    }
-//}

+ 5 - 4
src/Hotline.Application/Orders/IOrderApplication.cs

@@ -11,6 +11,7 @@ using Hotline.Share.Dtos.Order;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Settings;
 using SqlSugar;
+using XF.Domain.Authentications;
 using XF.Domain.Entities;
 
 namespace Hotline.Application.Orders
@@ -40,10 +41,10 @@ namespace Hotline.Application.Orders
         //Task<PagedDto<WorkflowOrderDto>> GetAboutToExpireNodeAsync(AboutToExpireListDto dto, CancellationToken cancellationToken);
         Task OrderParticiple(string inputStr, string orderId, CancellationToken cancellationToken);
         Task OrderSensitiveParticiple(string inputStr, string orderId, CancellationToken cancellationToken);
-		/// <summary>
-		/// 接收外部平台工单
-		/// </summary>
-		Task<AddOrderResponse> ReceiveOrderFromExternalAsync(AddOrderDto dto, CancellationToken cancellationToken);
+        /// <summary>
+        /// 接收外部平台工单
+        /// </summary>
+        Task<AddOrderResponse> ReceiveOrderFromExternalAsync(AddOrderDto dto, ISessionContext current, CancellationToken cancellationToken);
 
         /// <summary>
         /// 接收外部平台修改工单附件

+ 8 - 6
src/Hotline.Application/Orders/OrderApplication.cs

@@ -284,17 +284,17 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <summary>
     /// 接收外部平台工单
     /// </summary>
-    public Task<AddOrderResponse> ReceiveOrderFromExternalAsync(AddOrderDto dto, CancellationToken cancellationToken)
+    public Task<AddOrderResponse> ReceiveOrderFromExternalAsync(AddOrderDto dto, ISessionContext current, CancellationToken cancellationToken)
     {
         switch (dto.Source)
         {
             case ESource.ProvinceStraight:
-                return ReceiveOrderFromProvinceAsync(dto, dto.Files, cancellationToken);
+                return ReceiveOrderFromProvinceAsync(dto, dto.Files, current, cancellationToken);
             case ESource.Police110:
             case ESource.CityDataExchangeLz:
             case ESource.ConvergenceMedia:
             case ESource.WebPortal:
-                return ReceiveOrderFromOtherPlatformAsync(dto, dto.Files, cancellationToken);
+                return ReceiveOrderFromOtherPlatformAsync(dto, dto.Files, current, cancellationToken);
             case ESource.Hotline:
             case ESource.HotlineImport:
             default:
@@ -373,7 +373,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <param name="dto"></param>
     /// <param name="cancellationToken"></param>
     /// <returns></returns>
-    private async Task<AddOrderResponse> ReceiveOrderFromOtherPlatformAsync(AddOrderDto dto, List<FileDto> files, CancellationToken cancellationToken)
+    private async Task<AddOrderResponse> ReceiveOrderFromOtherPlatformAsync(AddOrderDto dto, List<FileDto> files,
+        ISessionContext current, CancellationToken cancellationToken)
     {
         if (string.IsNullOrEmpty(dto.ExternalId))
             throw new UserFriendlyException("工单外部编号不能为空");
@@ -402,7 +403,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     /// <summary>
     /// 接受省平台工单
     /// </summary>
-    private async Task<AddOrderResponse> ReceiveOrderFromProvinceAsync(AddOrderDto dto, List<FileDto> files, CancellationToken cancellationToken)
+    private async Task<AddOrderResponse> ReceiveOrderFromProvinceAsync(AddOrderDto dto, List<FileDto> files,
+        ISessionContext current, CancellationToken cancellationToken)
     {
         if (string.IsNullOrEmpty(dto.ProvinceNo))
             throw new UserFriendlyException("无效省工单编号");
@@ -443,7 +445,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
             //特提(撤回至发起)
             if (!string.IsNullOrEmpty(order.WorkflowId))
-                await _workflowDomainService.RecallToStartStepAsync(order.WorkflowId, "省工单重派", cancellationToken);
+                await _workflowDomainService.RecallToStartStepAsync(order.WorkflowId, "省工单重派", current, cancellationToken);
         }
         return _mapper.Map<AddOrderResponse>(order);
     }

+ 33 - 14
src/Hotline.Application/Subscribers/DatasharingSubscriber.cs

@@ -1,6 +1,7 @@
 using DotNetCore.CAP;
 using Hotline.Application.FlowEngine;
 using Hotline.Application.Quality;
+using Hotline.Authentications;
 using Hotline.File;
 using Hotline.FlowEngine.Workflows;
 using Hotline.Orders;
@@ -10,11 +11,11 @@ using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.OrderTranspond;
+using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Quality;
 using Hotline.Share.Mq;
 using MapsterMapper;
-using XF.Domain.Authentications;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
@@ -36,7 +37,6 @@ namespace Hotline.Application.Subscribers
         private readonly IRepository<OrderDelay> _orderDelayRepository;
         private readonly IRepository<OrderSendBack> _orderSendBackRepository;
         private readonly IWorkflowApplication _workflowApplication;
-        private readonly ISessionContext _sessionContext;
         private readonly IWorkflowDomainService _workflowDomainService;
         private readonly IFileRepository _fileRepository;
         private readonly IRepository<OrderUrge> _orderUrgeRepository;
@@ -70,7 +70,8 @@ namespace Hotline.Application.Subscribers
             IRepository<SystemDicData> systemDicDataRepository,
             ISystemOrganizeRepository systemOrganizeRepository,
             IRepository<TranspondCityRawData> transpondCityRawDataRepository,
-            IRepository<Workflow> workflowRepository)
+            IRepository<Workflow> workflowRepository
+            )
         {
             _orderSendBackRepository = orderSendBackRepository;
             _workflowApplication = workflowApplication;
@@ -112,7 +113,8 @@ namespace Hotline.Application.Subscribers
                 {
                     if (!string.IsNullOrEmpty(order.WorkflowId))
                     {
-                        await _workflowApplication.HandleToEndAsync(order.WorkflowId, "省工单同意退回",null,isProvince:true, cancellationToken: cancellationToken);
+                        var current = SessionContextCreator.CreateSessionContext(dto.Source);
+                        await _workflowApplication.HandleToEndAsync(current, order.WorkflowId, "省工单同意退回", null, EReviewResult.Approval, cancellationToken);
                     }
                 }
             }
@@ -126,11 +128,14 @@ namespace Hotline.Application.Subscribers
         public async Task RecCancelOrderAsync(CancelOrderDto dto, CancellationToken cancellationToken)
         {
             var order = await _orderRepository.GetAsync(p => p.ProvinceNo == dto.ProvinceNo, cancellationToken);
-            if (!string.IsNullOrEmpty(order.WorkflowId))
-                await _workflowApplication.HandleToEndAsync(order.WorkflowId, dto.Opinion, null,isProvince:true, cancellationToken: cancellationToken);
+            if (string.IsNullOrEmpty(order?.WorkflowId))
+            {
+            }
             else
             {
-
+                var current = SessionContextCreator.CreateSessionContext(dto.Source);
+                await _workflowApplication.HandleToEndAsync(current, order.WorkflowId, dto.Opinion, null,
+                    cancellationToken: cancellationToken);
             }
         }
 
@@ -234,9 +239,19 @@ namespace Hotline.Application.Subscribers
         [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderScreen)]
         public async Task RecOrderScreenResultAsync(ProvinceSendScreenResultDto dto, CancellationToken cancellationToken)
         {
-            var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.ProvinceScreenResult!.CaseSerial).FirstAsync(cancellationToken);
-            var orderScreen = await _orderScreenRepository.Queryable().Where(x => x.OrderId == order.Id && x.Status == Share.Enums.Order.EScreenStatus.Approval).FirstAsync(cancellationToken);
-            await _workflowApplication.HandleToEndAsync(orderScreen.WorkflowId, "省上推送甄别结果", null,dto.ProvinceScreenResult.AuditResult? Share.Enums.FlowEngine.EReviewResult.Approval : Share.Enums.FlowEngine.EReviewResult.Failed ,isProvince:true, cancellationToken: cancellationToken);
+            var order = await _orderRepository.Queryable()
+                .Where(x => x.ProvinceNo == dto.ProvinceScreenResult!.CaseSerial)
+                .FirstAsync(cancellationToken);
+            var orderScreen = await _orderScreenRepository.Queryable()
+                .Where(x => x.OrderId == order.Id && x.Status == Share.Enums.Order.EScreenStatus.Approval)
+                .FirstAsync(cancellationToken);
+
+            var current = SessionContextCreator.CreateSessionContext(dto.Source);
+            await _workflowApplication.HandleToEndAsync(current,
+                orderScreen.WorkflowId, "省上推送甄别结果", null,
+                dto.ProvinceScreenResult.AuditResult
+                    ? Share.Enums.FlowEngine.EReviewResult.Approval
+                    : Share.Enums.FlowEngine.EReviewResult.Failed, cancellationToken);
             orderScreen.Status = dto.ProvinceScreenResult.AuditResult ? Share.Enums.Order.EScreenStatus.End : Share.Enums.Order.EScreenStatus.Refuse;
             if (orderScreen.Status == Share.Enums.Order.EScreenStatus.End)
             {
@@ -481,7 +496,7 @@ namespace Hotline.Application.Subscribers
         /// <param name="dto"></param>
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
-        [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderDelayResult)]
+        [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderDelayResult, Group = "g1")]
         public async Task OrderDelayWeb(DelayProvinceResultDto dto, CancellationToken cancellationToken)
         {
             var order = await _orderRepository.GetAsync(x => x.ProvinceNo == dto.No, cancellationToken);
@@ -489,7 +504,9 @@ namespace Hotline.Application.Subscribers
             {
                 //查询延期
                 var orderDelay = await _orderDelayRepository.GetAsync(x => x.OrderId == order.Id && x.DelayState == EDelayState.Examining, cancellationToken);
-                await _workflowApplication.HandleToEndAsync(orderDelay.WorkflowId, dto.Opinion, null, dto.IsPass ? Share.Enums.FlowEngine.EReviewResult.Approval : Share.Enums.FlowEngine.EReviewResult.Failed,isProvince:true,cancellationToken);
+                var current = SessionContextCreator.CreateSessionContext(dto.Source);
+                await _workflowApplication.HandleToEndAsync(current, orderDelay.WorkflowId, dto.Opinion, null,
+                    dto.IsPass ? Share.Enums.FlowEngine.EReviewResult.Approval : Share.Enums.FlowEngine.EReviewResult.Failed, cancellationToken);
             }
         }
 
@@ -511,15 +528,17 @@ namespace Hotline.Application.Subscribers
                     cancellationToken);
                 await _orderRepository.FileAsync(order, cancellationToken);
             }
+
+            var current = SessionContextCreator.CreateSessionContext(dto.Source);
             switch (dto.FinishType)
             {
                 case "0":
                     //退回:撤回至发起人
-                    await _workflowDomainService.RecallToStartStepAsync(order.WorkflowId, dto.Opinion, cancellationToken);
+                    await _workflowDomainService.RecallToStartStepAsync(order.WorkflowId, dto.Opinion, current, cancellationToken);
                     break;
                 case "1":
                     //办结:归档
-                    await _workflowApplication.HandleToEndAsync(order.WorkflowId, dto.Opinion, dto.Files,isProvince:true,
+                    await _workflowApplication.HandleToEndAsync(current, order.WorkflowId, dto.Opinion, dto.Files,
                         cancellationToken: cancellationToken);
                     break;
             }

+ 1 - 1
src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/CancelOrderDto.cs

@@ -9,7 +9,7 @@ namespace Hotline.Share.Dtos.DataSharing.PusherHotlineDto
     /// <summary>
     /// 撤销工单
     /// </summary>
-    public class CancelOrderDto
+    public class CancelOrderDto : DsSource
     {
         /// <summary>
         /// 工单Id

+ 2 - 2
src/Hotline.Share/Dtos/Order/DelayProvinceResultDto.cs → src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/DelayProvinceResultDto.cs

@@ -4,9 +4,9 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
-namespace Hotline.Share.Dtos.Order
+namespace Hotline.Share.Dtos.DataSharing.PusherHotlineDto
 {
-    public class DelayProvinceResultDto
+    public class DelayProvinceResultDto : DsSource
     {
         /// <summary>
         /// 省工单编号

+ 6 - 0
src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/DsSource.cs

@@ -0,0 +1,6 @@
+namespace Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
+
+public class DsSource
+{
+    public string Source { get; set; }
+}

+ 1 - 1
src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/OrderResultDto.cs

@@ -5,7 +5,7 @@ namespace Hotline.Share.Dtos.DataSharing.PusherHotlineDto
     /// <summary>
     /// 办理或退回
     /// </summary>
-    public class OrderResultDto
+    public class OrderResultDto : DsSource
     {
         public string OrderId { get; set; }
 

+ 15 - 0
src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/OrderSendBackResultDto.cs

@@ -0,0 +1,15 @@
+namespace Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
+
+public class OrderSendBackResultDto : DsSource
+{
+    public string Id { get; set; }
+    /// <summary>
+    /// 省上退回反馈结果
+    /// </summary>
+    public int? Result { get; set; }
+
+    /// <summary>
+    /// 省上退回反馈
+    /// </summary>
+    public string? Reason { get; set; }
+}

+ 1 - 1
src/Hotline.Share/Dtos/Order/OrderUpdataFiles.cs → src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/OrderUpdataFiles.cs

@@ -1,6 +1,6 @@
 using Hotline.Share.Dtos.File;
 
-namespace Hotline.Share.Dtos.Order
+namespace Hotline.Share.Dtos.DataSharing.PusherHotlineDto
 {
     /// <summary>
     /// 更新工单受理附件

+ 26 - 0
src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/OrderVisitWebDto.cs

@@ -0,0 +1,26 @@
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.Order;
+
+namespace Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
+
+public class OrderVisitWebDto
+{
+    /// <summary>
+    /// 回访主表ID
+    /// </summary>
+    public string Id { get; set; }
+    /// <summary>
+    /// 回访方式
+    /// </summary>
+    public EVisitType VisitType { get; set; }
+
+    /// <summary>
+    /// 回访时间
+    /// </summary>
+    public DateTime VisitTime { get; set; }
+
+    /// <summary>
+    /// 回访明细
+    /// </summary>
+    public List<OrderVisitDetailWebDto> OrderVisitDetailDto { get; set; }
+}

+ 36 - 0
src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/ProvinceOrderUrgeDto.cs

@@ -0,0 +1,36 @@
+using Hotline.Share.Dtos.File;
+
+namespace Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
+
+public class ProvinceOrderUrgeDto
+{
+    /// <summary>
+    /// 省工单编号
+    /// </summary>
+    public string CaseSerial { get; set; }
+
+    /// <summary>
+    /// 催单时间
+    /// </summary>
+    public DateTime RemindTime { get; set; }
+
+    /// <summary>
+    /// 操作人员
+    /// </summary>
+    public string RemindName { get; set; }
+
+    /// <summary>
+    /// 催单理由
+    /// </summary>
+    public string RemindReasion { get; set; }
+
+    /// <summary>
+    /// 行政区划代码
+    /// </summary>
+    public string AreaCode { get; set; }
+
+    /// <summary>
+    /// 附件列表
+    /// </summary>
+    public List<FileDto> Files { get; set; } = new();
+}

+ 29 - 0
src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/ProvinceOrderVisitDto.cs

@@ -0,0 +1,29 @@
+using Hotline.Share.Enums.Order;
+
+namespace Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
+
+public class ProvinceOrderVisitDto
+{
+    /// <summary>
+    /// 工单编号
+    /// </summary>
+    public string ProvinceNo { get; set; }
+    /// <summary>
+    /// 回访时间
+    /// </summary>
+    public DateTime? VisitTime { get; set; }
+    /// <summary>
+    /// 回访方式
+    /// </summary>
+    public EVisitType? VisitType { get; set; }
+    /// <summary>
+    /// 回访内容
+    /// </summary>
+    public string? VisitContent { get; set; }
+
+    /// <summary>
+    /// 满意度
+    /// </summary>
+    public string? OrgProcessingResults { get; set; }
+
+}

+ 1 - 1
src/Hotline.Share/Dtos/DataSharing/PusherHotlineDto/ProvinceSendScreenResultDto.cs

@@ -6,7 +6,7 @@ namespace Hotline.Share.Dtos.DataSharing.PusherHotlineDto
     /// <summary>
     /// 省工单甄别结果
     /// </summary>
-    public class ProvinceSendScreenResultDto
+    public class ProvinceSendScreenResultDto : DsSource
     {
         public ProvinceScreenResult ProvinceScreenResult { get; set; }
 

+ 1 - 14
src/Hotline.Share/Dtos/Order/OrderSendBackDto.cs

@@ -56,21 +56,8 @@ namespace Hotline.Share.Dtos.Order
 		public string? AuditOpinion { get; set; }
 
 	}
-	public class OrderSendBackResultDto
-	{
-		public string Id { get; set; }
-		/// <summary>
-		/// 省上退回反馈结果
-		/// </summary>
-		public int? Result { get; set; }
 
-		/// <summary>
-		/// 省上退回反馈
-		/// </summary>
-		public string? Reason { get; set; }
-
-	}
-	public class OrderSendBackDto : OrderSendBackBaseDto
+    public class OrderSendBackDto : OrderSendBackBaseDto
 	{
 		public string OrderId { get; set; }
 

+ 1 - 33
src/Hotline.Share/Dtos/Order/OrderUrgeDto.cs

@@ -87,39 +87,7 @@ namespace Hotline.Share.Dtos.Order
 
 	}
 
-	public class ProvinceOrderUrgeDto 
-	{
-		/// <summary>
-		/// 省工单编号
-		/// </summary>
-		public string CaseSerial { get; set; }
-
-		/// <summary>
-		/// 催单时间
-		/// </summary>
-		public DateTime RemindTime { get; set; }
-
-		/// <summary>
-		/// 操作人员
-		/// </summary>
-		public string RemindName { get; set; }
-
-		/// <summary>
-		/// 催单理由
-		/// </summary>
-		public string RemindReasion { get; set; }
-
-		/// <summary>
-		/// 行政区划代码
-		/// </summary>
-		public string AreaCode { get; set; }
-
-		/// <summary>
-		/// 附件列表
-		/// </summary>
-		public List<FileDto> Files { get; set; } = new();
-	}
-	public class PublishUrgeDto
+    public class PublishUrgeDto
 	{
 		// <summary>
 		/// 工单对象

+ 0 - 48
src/Hotline.Share/Dtos/Order/OrderVisitDto.cs

@@ -537,54 +537,6 @@ namespace Hotline.Share.Dtos.Order
         public string ClientGuid { get; set; }
     }
 
-    public class ProvinceOrderVisitDto
-    {
-        /// <summary>
-        /// 工单编号
-        /// </summary>
-        public string ProvinceNo { get; set; }
-        /// <summary>
-        /// 回访时间
-        /// </summary>
-        public DateTime? VisitTime { get; set; }
-        /// <summary>
-        /// 回访方式
-        /// </summary>
-        public EVisitType? VisitType { get; set; }
-        /// <summary>
-        /// 回访内容
-        /// </summary>
-        public string? VisitContent { get; set; }
-
-        /// <summary>
-        /// 满意度
-        /// </summary>
-        public string? OrgProcessingResults { get; set; }
-
-    }
-
-    public class OrderVisitWebDto
-    {
-        /// <summary>
-        /// 回访主表ID
-        /// </summary>
-        public string Id { get; set; }
-        /// <summary>
-        /// 回访方式
-        /// </summary>
-        public EVisitType VisitType { get; set; }
-
-        /// <summary>
-        /// 回访时间
-        /// </summary>
-        public DateTime VisitTime { get; set; }
-
-        /// <summary>
-        /// 回访明细
-        /// </summary>
-        public List<OrderVisitDetailWebDto> OrderVisitDetailDto { get; set; }
-    }
-
     public class OrderVisitDetailWebDto
     {
         /// <summary>

+ 9 - 0
src/Hotline.Share/Enums/Order/ESource.cs

@@ -51,12 +51,21 @@ public enum ESource
     [Description("麻辣社区")]
     MLSQ = 500,
 
+    /// <summary>
+    /// 人民网
+    /// </summary>
     [Description("人民网")]
     RMW = 501,
 
+    /// <summary>
+    /// 省长信箱
+    /// </summary>
     [Description("省长信箱")]
     SZXX = 502,
 
+    /// <summary>
+    /// 问政四川
+    /// </summary>
     [Description("问政四川")]
     WZSC = 529,
     #endregion

+ 56 - 0
src/Hotline/Authentications/Police110SessionContext.cs

@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Authentications;
+
+namespace Hotline.Authentications
+{
+    public class Police110SessionContext : ISessionContext
+    {
+        public Police110SessionContext()
+        {
+            UserId = "08dc73e3-f77f-4484-8309-bed5e532c9f2";
+            UserName = "市公安局110系统账号";
+            OrgId = "001180";
+            OrgName = "市公安局110";
+        }
+
+        /// <summary>
+        /// Id of current tenant or null for host
+        /// </summary>
+        public string? UserId { get; }
+
+        /// <summary>
+        /// Id of current user or throw Exception for guest
+        /// </summary>
+        /// <exception cref="AuthenticationException"></exception>
+        public string RequiredUserId { get; }
+        public string? UserName { get; }
+        public string? Phone { get; }
+
+        /// <summary>
+        /// Roles
+        /// </summary>
+        public string[] Roles { get; }
+        public string? OrgId { get; set; }
+        public string RequiredOrgId { get; }
+        public string? OrgName { get; set; }
+        public int OrgLevel { get; set; }
+        public string? OrgAreaCode { get; set; }
+        public bool OrgIsCenter { get; set; }
+
+        /// <summary>
+        /// 部门行政区划名称
+        /// </summary>
+        public string? OrgAreaName { get; set; }
+        public string? AreaId { get; }
+        public string? ClientId { get; }
+
+        /// <summary>
+        /// 工号
+        /// </summary>
+        public string? StaffNo { get; }
+    }
+}

+ 51 - 0
src/Hotline/Authentications/ProvinceSessionContext.cs

@@ -0,0 +1,51 @@
+using XF.Domain.Authentications;
+
+namespace Hotline.Authentications
+{
+    public class ProvinceSessionContext : ISessionContext
+    {
+        public ProvinceSessionContext()
+        {
+            UserId = "08dc73dd-56a7-4e95-80e0-47a8113db235";
+            UserName = "省12345平台系统账号";
+            OrgId = "001171";
+            OrgName = "省12345平台";
+        }
+
+        /// <summary>
+        /// Id of current tenant or null for host
+        /// </summary>
+        public string? UserId { get; }
+
+        /// <summary>
+        /// Id of current user or throw Exception for guest
+        /// </summary>
+        /// <exception cref="AuthenticationException"></exception>
+        public string RequiredUserId { get; }
+        public string? UserName { get; }
+        public string? Phone { get; }
+
+        /// <summary>
+        /// Roles
+        /// </summary>
+        public string[] Roles { get; }
+        public string? OrgId { get; set; }
+        public string RequiredOrgId { get; }
+        public string? OrgName { get; set; }
+        public int OrgLevel { get; set; }
+        public string? OrgAreaCode { get; set; }
+        public bool OrgIsCenter { get; set; }
+
+        /// <summary>
+        /// 部门行政区划名称
+        /// </summary>
+        public string? OrgAreaName { get; set; }
+        public string? AreaId { get; }
+        public string? ClientId { get; }
+
+        /// <summary>
+        /// 工号
+        /// </summary>
+        public string? StaffNo { get; }
+    }
+}

+ 28 - 0
src/Hotline/Authentications/SessionContextCreator.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.Share.Enums.Order;
+using XF.Domain.Authentications;
+
+namespace Hotline.Authentications
+{
+    public class SessionContextCreator
+    {
+        public static ISessionContext CreateSessionContext(string source)
+        {
+            switch (source)
+            {
+                case "province":
+                    return new ProvinceSessionContext();
+                case "110":
+                    return new Police110SessionContext();
+                case "yb-enterprise":
+                    return new YbEnterpriseSessionContext();
+                default:
+                    throw new ArgumentOutOfRangeException(nameof(source), source, null);
+            }
+        }
+    }
+}

+ 56 - 0
src/Hotline/Authentications/YbEnterpriseSessionContext.cs

@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Authentications;
+
+namespace Hotline.Authentications
+{
+    public class YbEnterpriseSessionContext : ISessionContext
+    {
+        public YbEnterpriseSessionContext()
+        {
+            UserId = "08dc73e5-3ba9-4436-869a-5345c45471fe";
+            UserName = "企业专办系统账号";
+            OrgId = "001181";
+            OrgName = "企业专办";
+        }
+
+        /// <summary>
+        /// Id of current tenant or null for host
+        /// </summary>
+        public string? UserId { get; }
+
+        /// <summary>
+        /// Id of current user or throw Exception for guest
+        /// </summary>
+        /// <exception cref="AuthenticationException"></exception>
+        public string RequiredUserId { get; }
+        public string? UserName { get; }
+        public string? Phone { get; }
+
+        /// <summary>
+        /// Roles
+        /// </summary>
+        public string[] Roles { get; }
+        public string? OrgId { get; set; }
+        public string RequiredOrgId { get; }
+        public string? OrgName { get; set; }
+        public int OrgLevel { get; set; }
+        public string? OrgAreaCode { get; set; }
+        public bool OrgIsCenter { get; set; }
+
+        /// <summary>
+        /// 部门行政区划名称
+        /// </summary>
+        public string? OrgAreaName { get; set; }
+        public string? AreaId { get; }
+        public string? ClientId { get; }
+
+        /// <summary>
+        /// 工号
+        /// </summary>
+        public string? StaffNo { get; }
+    }
+}

+ 0 - 13
src/Hotline/DataSharing/Province/Notifications/AddOrderComplementAsyncNotify.cs

@@ -1,13 +0,0 @@
-using Hotline.Share.Dtos.Order;
-using MediatR;
-
-namespace Hotline.DataSharing.Province.Notifications
-{
-    /// <summary>
-    /// 新增工单补充信息
-    /// </summary>
-    public class AddOrderComplementAsyncNotify : INotification
-    {
-        public AddOrderComplementDto OrderComplementDto { get; set; }
-    }
-}

+ 0 - 21
src/Hotline/DataSharing/Province/Notifications/AddOrderTracesAsyncNotify.cs

@@ -1,21 +0,0 @@
-using Hotline.Share.Dtos.FlowEngine.Workflow;
-using MediatR;
-
-namespace Hotline.DataSharing.Province.Notifications
-{
-    /// <summary>
-    /// 新增工单办理流程记录
-    /// </summary>
-    public class AddOrderTracesAsyncNotify : INotification
-    {
-        /// <summary>
-        /// 工单ID
-        /// </summary>
-        public string OrderId { get; set; }
-
-        /// <summary>
-        /// 流程数据
-        /// </summary>
-        public ICollection<WorkflowTraceDto> Traces { get; set; }
-    }
-}

+ 0 - 20
src/Hotline/DataSharing/Province/Notifications/CancelOrderAsyncNotify.cs

@@ -1,20 +0,0 @@
-using MediatR;
-
-namespace Hotline.DataSharing.Province.Notifications
-{
-    /// <summary>
-    /// 撤销工单
-    /// </summary>
-    public class CancelOrderAsyncNotify : INotification
-    {
-        /// <summary>
-        /// 工单Id
-        /// </summary>
-        public string OrderId { get; set; }
-
-        /// <summary>
-        /// 意见
-        /// </summary>
-        public string Opinion { get; set; }
-    }
-}

+ 0 - 33
src/Hotline/DataSharing/Province/Notifications/DelayProvinceResultNotify.cs

@@ -1,33 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Hotline.Share.Dtos.File;
-using MediatR;
-
-namespace Hotline.DataSharing.Province.Notifications
-{
-    /// <summary>
-    /// 省延期结果通知
-    /// </summary>
-    public class DelayProvinceResultNotify : INotification
-    {
-        /// <summary>
-        /// 省工单编号
-        /// </summary>
-        public string No { get; set; }
-
-        /// <summary>
-        /// 是否通过审批
-        /// </summary>
-        public bool IsPass { get; set; }
-
-        /// <summary>
-        /// 办理意见
-        /// </summary>
-        public string Opinion { get; set; }
-
-        public List<FileDto> Files { get; set; }
-	}
-}

+ 0 - 22
src/Hotline/DataSharing/Province/Notifications/OrderResultNotify.cs

@@ -1,22 +0,0 @@
-using Hotline.Share.Dtos.File;
-using MediatR;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Hotline.DataSharing.Province.Notifications
-{
-	// 不接受补附件
-	public class OrderResultNotify : INotification
-	{
-		public string OrderId { get; set; }
-
-		public string Opinion { get; set; }
-
-		public string FinishType { get; set; }
-
-		public List<FileDto> Files { get; set; }
-	}
-}

+ 0 - 12
src/Hotline/DataSharing/Province/Notifications/OrderSendBackResultNotify.cs

@@ -1,12 +0,0 @@
-using Hotline.Share.Dtos.Order;
-using MediatR;
-
-namespace Hotline.DataSharing.Province.Notifications;
-
-/// <summary>
-/// 工单退回结果
-/// </summary>
-public class OrderSendBackResultNotify : INotification
-{
-    public OrderSendBackResultDto OrderSendBackResultDto { get; set; }
-}

+ 0 - 15
src/Hotline/DataSharing/Province/Notifications/ProvinceOrderSuperviseNotify.cs

@@ -1,15 +0,0 @@
-using Hotline.Share.Dtos.File;
-using Hotline.Share.Dtos.Order;
-using MediatR;
-
-namespace Hotline.DataSharing.Province.Notifications;
-
-/// <summary>
-/// 督办工单派发
-/// </summary>
-public class ProvinceOrderSuperviseNotify : INotification
-{
-    public ProvinceOrderSuperviseDto? ProvinceOrderSuperviseDto { get; set; }
-
-    public List<FileDto>? Files { get; set; }
-}

+ 0 - 12
src/Hotline/DataSharing/Province/Notifications/ProvinceOrderUrgeNotify.cs

@@ -1,12 +0,0 @@
-using Hotline.Share.Dtos.Order;
-using MediatR;
-
-namespace Hotline.DataSharing.Province.Notifications;
-
-/// <summary>
-/// 催办工单派发
-/// </summary>
-public class ProvinceOrderUrgeNotify : INotification
-{
-    public ProvinceOrderUrgeDto ProvinceOrderUrgeDto { get; set; }
-}

+ 0 - 12
src/Hotline/DataSharing/Province/Notifications/ReceiveOrderExtensionNotify.cs

@@ -1,12 +0,0 @@
-using Hotline.Share.Dtos.Order;
-using MediatR;
-
-namespace Hotline.DataSharing.Province.Notifications;
-
-/// <summary>
-/// 接受其他平台工单扩展信息
-/// </summary>
-public class ReceiveOrderExtensionNotify : INotification
-{
-    public OrderExtensionDto OrderExtensionDto { get; set; }
-}

+ 0 - 18
src/Hotline/DataSharing/Province/Notifications/ReceiveOrderNotify.cs

@@ -1,18 +0,0 @@
-using Hotline.Share.Dtos.File;
-using Hotline.Share.Dtos.Order;
-using MediatR;
-
-namespace Hotline.DataSharing.Province.Notifications;
-
-/// <summary>
-/// 接受其他平台工单数据
-/// </summary>
-public class ReceiveOrderNotify : IRequest<AddOrderResponse>
-{
-    public AddOrderDto AddOrderDto { get; set; }
-
-    /// <summary>
-    /// 附件列表
-    /// </summary>
-    public List<FileDto>? Files { get; set; }
-}

+ 0 - 15
src/Hotline/DataSharing/Province/Notifications/ScreenProvinceResultNotify.cs

@@ -1,15 +0,0 @@
-using Hotline.Share.Dtos.File;
-using Hotline.Share.Dtos.Order;
-using MediatR;
-
-namespace Hotline.DataSharing.Province.Notifications;
-
-/// <summary>
-/// 省工单甄别结果
-/// </summary>
-public class ScreenProvinceResultNotify : INotification
-{
-    public ProvinceScreenResult ProvinceScreenResult { get; set; }
-
-    public List<FileDto> Files { get; set; }
-}

+ 11 - 12
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -56,19 +56,19 @@ namespace Hotline.FlowEngine.Workflows
         /// 退回(返回前一节点)
         /// </summary>
         /// <returns></returns>
-        Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, User operater,
+        Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, User operater, ISessionContext current,
             CancellationToken cancellationToken);
 
         /// <summary>
         /// 撤回(返回到之前任意节点)
         /// </summary>
         Task RecallAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine, FlowAssignInfo flowAssignInfo,
-            List<WorkflowStepHandler> stepHandlers, DateTime? expiredTime, CancellationToken cancellationToken);
+            List<WorkflowStepHandler> stepHandlers, DateTime? expiredTime, ISessionContext current, CancellationToken cancellationToken);
 
         /// <summary>
         /// 撤回至开始节点
         /// </summary>
-        Task RecallToStartStepAsync(string workflowId, string opinion, CancellationToken cancellationToken);
+        Task RecallToStartStepAsync(string workflowId, string opinion, ISessionContext current, CancellationToken cancellationToken);
 
         ///// <summary>
         ///// 跳转(直接将流程跳转至任意节点)
@@ -82,11 +82,11 @@ namespace Hotline.FlowEngine.Workflows
         //Task RedoAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine, FlowAssignInfo flowAssignInfo,
         //    CancellationToken cancellationToken);
 
-        /// <summary>
-        /// 否决(审批流程不通过)
-        /// </summary>
-        /// <returns></returns>
-        Task RejectAsync(Workflow workflow, BasicWorkflowDto dto, CancellationToken cancellationToken);
+        ///// <summary>
+        ///// 否决(审批流程不通过)
+        ///// </summary>
+        ///// <returns></returns>
+        //Task RejectAsync(Workflow workflow, BasicWorkflowDto dto, CancellationToken cancellationToken);
 
         /// <summary>
         /// 补充
@@ -103,8 +103,7 @@ namespace Hotline.FlowEngine.Workflows
         /// 结束流程(流程直接流转至结束节点)
         /// </summary>
         Task<WorkflowTrace> EndAsync(Workflow workflow, BasicWorkflowDto dto, StepDefine endStepDefine,
-            WorkflowStep currentStep, EReviewResult? reviewResult = EReviewResult.Unknown, bool isProvince = false,
-            CancellationToken cancellationToken = default);
+            WorkflowStep currentStep, ISessionContext current, CancellationToken cancellationToken);
 
         StepDefine GetStepDefine(WorkflowDefinition workflowDefinition, string stepCode);
 
@@ -131,7 +130,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 撤销流程
         /// </summary>
-        Task CancelAsync(CancelDto dto, CancellationToken cancellationToken);
+        Task CancelAsync(CancelDto dto, ISessionContext current, CancellationToken cancellationToken);
 
         ///// <summary>
         ///// 更新期满时间
@@ -194,7 +193,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 办理节点
         /// </summary>
-        Task HandleStepAsync(WorkflowStep step, Workflow workflow, BasicWorkflowDto dto,
+        Task HandleStepAsync(ISessionContext current, WorkflowStep step, Workflow workflow, BasicWorkflowDto dto,
             EFlowAssignType? flowAssignType, ECounterSignType? counterSignType, DateTime? expiredTime,
             CancellationToken cancellationToken);
 

+ 37 - 42
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -523,7 +523,7 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         /// <returns></returns>
         public async Task PreviousAsync(Workflow workflow, PreviousWorkflowDto dto, User operater,
-            CancellationToken cancellationToken)
+           ISessionContext current, CancellationToken cancellationToken)
         {
             ValidatePermission(workflow, operater.OrgId, operater.Id);
 
@@ -557,9 +557,9 @@ namespace Hotline.FlowEngine.Workflows
 
                 //结束会签
                 currentCountersign.End(currentStep.Id, currentStep.Code, currentStep.BusinessType,
-                    _sessionContext.RequiredUserId, _sessionContext.UserName,
-                    _sessionContext.RequiredOrgId, _sessionContext.OrgName,
-                    _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName);
+                    current.RequiredUserId, current.UserName,
+                    current.RequiredOrgId, current.OrgName,
+                    current.OrgAreaCode, current.OrgAreaName);
                 await _workflowCountersignRepository.UpdateAsync(currentCountersign, cancellationToken);
 
                 //update workflow cs status
@@ -568,7 +568,7 @@ namespace Hotline.FlowEngine.Workflows
             }
 
             //update trace
-            var trace = await PreviousTraceAsync(workflow.Id, dto, currentStep, cancellationToken);
+            var trace = await PreviousTraceAsync(workflow.Id, dto, currentStep, current, cancellationToken);
 
             //复制上一个节点为待接办
             var newPrevStep = await DuplicateStepWithTraceAsync(workflow, prevStep, EWorkflowTraceType.Previous,
@@ -799,14 +799,14 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         public async Task RecallAsync(Workflow workflow, RecallDto dto, StepDefine targetStepDefine,
             FlowAssignInfo flowAssignInfo, List<WorkflowStepHandler> stepHandlers, DateTime? expiredTime,
-            CancellationToken cancellationToken)
+            ISessionContext current, CancellationToken cancellationToken)
         {
             var targetStep = workflow.Steps.FirstOrDefault(d => d.Code == dto.NextStepCode && d.IsOrigin);
             if (targetStep is null)
                 throw UserFriendlyException.SameMessage("该流程尚未流转至该节点");
 
             //update uncompleted traces
-            await RecallTraceAsync(workflow.Id, dto.Opinion, cancellationToken);
+            await RecallTraceAsync(workflow.Id, dto.Opinion, current, cancellationToken);
 
             var isOrgToCenter = await RecallAsync(workflow, dto, flowAssignInfo, targetStepDefine, targetStep,
                 EWorkflowTraceType.Recall, stepHandlers, expiredTime, cancellationToken);
@@ -821,13 +821,13 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 撤回至开始节点
         /// </summary>
-        public async Task RecallToStartStepAsync(string workflowId, string opinion, CancellationToken cancellationToken)
+        public async Task RecallToStartStepAsync(string workflowId, string opinion, ISessionContext current, CancellationToken cancellationToken)
         {
             //todo 1.当前待办节点删掉 2.当前待办trace更新(status, opinion) 3.复制startStep为待办 4.更新workflow(status, csStatus, handlers) 5.publish event
             var workflow = await GetWorkflowAsync(workflowId, withDefine: true, withSteps: true,
                 cancellationToken: cancellationToken);
             //update uncompleted traces
-            await RecallTraceAsync(workflow.Id, opinion, cancellationToken);
+            await RecallTraceAsync(workflow.Id, opinion, current, cancellationToken);
 
             var startStep = workflow.Steps.First(d => d.StepType == EStepType.Start);
             workflow.Steps.RemoveAll(d => true);
@@ -1106,7 +1106,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 撤销流程
         /// </summary>
-        public async Task CancelAsync(CancelDto dto, CancellationToken cancellationToken)
+        public async Task CancelAsync(CancelDto dto, ISessionContext current, CancellationToken cancellationToken)
         {
             var workflow = await GetWorkflowAsync(dto.WorkflowId, withDefine: true, withSteps: true,
                 cancellationToken: cancellationToken);
@@ -1118,7 +1118,7 @@ namespace Hotline.FlowEngine.Workflows
             var endStepDefine = workflow.WorkflowDefinition.FindEndStepDefine();
 
             var basicDto = _mapper.Map<BasicWorkflowDto>(dto);
-            var endTrace = await EndAsync(workflow, basicDto, endStepDefine, currentStep, EReviewResult.Unknown,
+            var endTrace = await EndAsync(workflow, basicDto, endStepDefine, currentStep, current,
                 cancellationToken: cancellationToken);
 
             await _mediator.Publish(new CancelWorkflowNotify(workflow), cancellationToken);
@@ -1173,12 +1173,12 @@ namespace Hotline.FlowEngine.Workflows
             return new Kv(workflow.ActualHandleOrgCode, workflow.ActualHandleOrgName);
         }
 
-
         /// <summary>
         /// 流程结束
         /// </summary>
         public async Task<WorkflowTrace> EndAsync(Workflow workflow, BasicWorkflowDto dto,
-            StepDefine endStepDefine, WorkflowStep currentStep, ISessionContext current, CancellationToken cancellationToken = default)
+            StepDefine endStepDefine, WorkflowStep currentStep, ISessionContext current,
+            CancellationToken cancellationToken)
         {
             var endStepHandles = new List<WorkflowStepHandler>
             {
@@ -1557,15 +1557,10 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         private void HandleStep(ISessionContext current, WorkflowStep step, string opinion, string nextStepCode)
         {
-            string userId = isProvince ? "08daa5f2-1878-4cfa-8764-1244f0229994" : _sessionContext.RequiredOrgId;
-            string userName = isProvince ? "省平台" : _sessionContext.UserName;
-            string orgId = isProvince ? "001" : _sessionContext.RequiredOrgId;
-            string OrgName = isProvince ? "市民热线服务系统" : _sessionContext.OrgName;
-
             step.Handle(current.RequiredUserId, current.UserName,
-                current.RequiredOrgId, current.OrgName,
-                current.OrgAreaCode, current.OrgAreaName,
-                current.OrgIsCenter, opinion, nextStepCode);
+                 current.RequiredOrgId, current.OrgName,
+                 current.OrgAreaCode, current.OrgAreaName,
+                 current.OrgIsCenter, opinion, nextStepCode);
 
             var handler = step.FindActualHandler(current.Roles, current.RequiredUserId, current.RequiredOrgId);
             if (handler is not null)
@@ -1714,30 +1709,30 @@ namespace Hotline.FlowEngine.Workflows
             return countersign;
         }
 
-        private async Task JumpTraceAsync(string workflowId, RecallDto dto, CancellationToken cancellationToken)
-        {
-            //未办理的traces
-            var uncompleteTraces =
-                await _workflowTraceRepository.QueryAsync(d =>
-                    d.WorkflowId == workflowId && string.IsNullOrEmpty(d.HandlerId));
-            foreach (var trace in uncompleteTraces)
-            {
-                HandleTrace(trace, dto.Opinion);
-            }
+        //private async Task JumpTraceAsync(string workflowId, RecallDto dto, CancellationToken cancellationToken)
+        //{
+        //    //未办理的traces
+        //    var uncompleteTraces =
+        //        await _workflowTraceRepository.QueryAsync(d =>
+        //            d.WorkflowId == workflowId && string.IsNullOrEmpty(d.HandlerId));
+        //    foreach (var trace in uncompleteTraces)
+        //    {
+        //        HandleTrace(trace, dto.Opinion);
+        //    }
 
-            await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
-        }
+        //    await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
+        //}
 
-        private void HandleTrace(WorkflowTrace trace, string opinion)
+        private void HandleTrace(WorkflowTrace trace, string opinion, ISessionContext current)
         {
             trace.Handle(
-                _sessionContext.RequiredUserId, _sessionContext.UserName,
-                _sessionContext.RequiredOrgId, _sessionContext.OrgName,
-                _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
-                _sessionContext.OrgIsCenter, opinion);
+                current.RequiredUserId, current.UserName,
+                current.RequiredOrgId, current.OrgName,
+                current.OrgAreaCode, current.OrgAreaName,
+                current.OrgIsCenter, opinion);
         }
 
-        private async Task RecallTraceAsync(string workflowId, string opinion, CancellationToken cancellationToken)
+        private async Task RecallTraceAsync(string workflowId, string opinion, ISessionContext current, CancellationToken cancellationToken)
         {
             //未办理的traces
             var uncompleteTraces =
@@ -1748,7 +1743,7 @@ namespace Hotline.FlowEngine.Workflows
             {
                 foreach (var trace in uncompleteTraces)
                 {
-                    HandleTrace(trace, opinion);
+                    HandleTrace(trace, opinion, current);
                 }
 
                 await _workflowTraceRepository.UpdateRangeAsync(uncompleteTraces, cancellationToken);
@@ -1756,11 +1751,11 @@ namespace Hotline.FlowEngine.Workflows
         }
 
         private async Task<WorkflowTrace> PreviousTraceAsync(string workflowId, PreviousWorkflowDto dto,
-            WorkflowStep step, CancellationToken cancellationToken)
+            WorkflowStep step, ISessionContext current, CancellationToken cancellationToken)
         {
             var trace = await GetWorkflowTraceAsync(workflowId, step.Id, cancellationToken);
             _mapper.Map(dto, trace);
-            HandleTrace(trace, dto.Opinion);
+            HandleTrace(trace, dto.Opinion, current);
             await _workflowTraceRepository.UpdateAsync(trace, cancellationToken);
             return trace;
         }

+ 0 - 46
test/WebApplication1/Controllers/WeatherForecastController.cs

@@ -1,46 +0,0 @@
-using Hotline.Api.Sdk;
-using Hotline.Share.Dtos.Order;
-using Microsoft.AspNetCore.Mvc;
-
-namespace WebApplication1.Controllers
-{
-    [ApiController]
-    [Route("[controller]")]
-    public class WeatherForecastController : ControllerBase
-    {
-        private static readonly string[] Summaries = new[]
-        {
-        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
-    };
-
-        private readonly IHotlineClient _hotlineClient;
-        private readonly ILogger<WeatherForecastController> _logger;
-
-        public WeatherForecastController(
-            IHotlineClient hotlineClient,
-            ILogger<WeatherForecastController> logger)
-        {
-            _hotlineClient = hotlineClient;
-            _logger = logger;
-        }
-
-        [HttpGet(Name = "GetWeatherForecast")]
-        public IEnumerable<WeatherForecast> Get()
-        {
-            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
-            {
-                Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
-                TemperatureC = Random.Shared.Next(-20, 55),
-                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
-            })
-            .ToArray();
-        }
-
-        [HttpGet("test")]
-        public async Task Test()
-        {
-            await _hotlineClient.DelayProvinceResultAsync(
-                new DelayProvinceResultDto { IsPass = true, No = "123", Opinion = "aaa" }, HttpContext.RequestAborted);
-        }
-    }
-}

+ 0 - 26
test/WebApplication1/Program.cs

@@ -1,26 +0,0 @@
-using Hotline.Api.Sdk;
-
-var builder = WebApplication.CreateBuilder(args);
-
-builder.Services.AddHotlineSdk("http://localhost:50100", "sharing", "Fwkj@789");
-// Add services to the container.
-
-builder.Services.AddControllers();
-// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
-builder.Services.AddEndpointsApiExplorer();
-builder.Services.AddSwaggerGen();
-
-var app = builder.Build();
-
-// Configure the HTTP request pipeline.
-if (app.Environment.IsDevelopment())
-{
-    app.UseSwagger();
-    app.UseSwaggerUI();
-}
-
-app.UseAuthorization();
-
-app.MapControllers();
-
-app.Run();

+ 0 - 31
test/WebApplication1/Properties/launchSettings.json

@@ -1,31 +0,0 @@
-{
-  "$schema": "https://json.schemastore.org/launchsettings.json",
-  "iisSettings": {
-    "windowsAuthentication": false,
-    "anonymousAuthentication": true,
-    "iisExpress": {
-      "applicationUrl": "http://localhost:9949",
-      "sslPort": 0
-    }
-  },
-  "profiles": {
-    "http": {
-      "commandName": "Project",
-      "dotnetRunMessages": true,
-      "launchBrowser": true,
-      "launchUrl": "swagger",
-      "applicationUrl": "http://localhost:5177",
-      "environmentVariables": {
-        "ASPNETCORE_ENVIRONMENT": "Development"
-      }
-    },
-    "IIS Express": {
-      "commandName": "IISExpress",
-      "launchBrowser": true,
-      "launchUrl": "swagger",
-      "environmentVariables": {
-        "ASPNETCORE_ENVIRONMENT": "Development"
-      }
-    }
-  }
-}

+ 0 - 13
test/WebApplication1/WeatherForecast.cs

@@ -1,13 +0,0 @@
-namespace WebApplication1
-{
-    public class WeatherForecast
-    {
-        public DateOnly Date { get; set; }
-
-        public int TemperatureC { get; set; }
-
-        public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
-
-        public string? Summary { get; set; }
-    }
-}

+ 0 - 18
test/WebApplication1/WebApplication1.csproj

@@ -1,18 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
-
-  <PropertyGroup>
-    <TargetFramework>net7.0</TargetFramework>
-    <Nullable>enable</Nullable>
-    <ImplicitUsings>enable</ImplicitUsings>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.10" />
-    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\..\src\Hotline.Api.Sdk\Hotline.Api.Sdk.csproj" />
-  </ItemGroup>
-
-</Project>

+ 0 - 8
test/WebApplication1/appsettings.Development.json

@@ -1,8 +0,0 @@
-{
-  "Logging": {
-    "LogLevel": {
-      "Default": "Information",
-      "Microsoft.AspNetCore": "Warning"
-    }
-  }
-}

+ 0 - 9
test/WebApplication1/appsettings.json

@@ -1,9 +0,0 @@
-{
-  "Logging": {
-    "LogLevel": {
-      "Default": "Information",
-      "Microsoft.AspNetCore": "Warning"
-    }
-  },
-  "AllowedHosts": "*"
-}