Ver código fonte

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

田爽 1 ano atrás
pai
commit
79ac9d7695

+ 5 - 0
src/Hotline.Ai.Jths/Hotline.Ai.Jths.csproj

@@ -9,10 +9,15 @@
   <ItemGroup>
     <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
     <PackageReference Include="RestSharp" Version="110.2.0" />
+    <PackageReference Include="Fw.Utility.UnifyResponse" Version="1.0.0" />
   </ItemGroup>
 
   <ItemGroup>
     <ProjectReference Include="..\Hotline\Hotline.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Compile Remove="IJthsClient.cs" />
+  </ItemGroup>
+
 </Project>

+ 13 - 8
src/Hotline.Api/Controllers/OrderController.cs

@@ -1705,7 +1705,7 @@ public class OrderController : BaseController
 
     #endregion
 
-    #region 工单办理klooooooooooooooooooooooooooooooooooooooooooooooooo,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+    #region 工单办理
 
     /// <summary>
     /// 工单列表
@@ -1965,18 +1965,23 @@ public class OrderController : BaseController
     /// 查询工单办理下一步可选节点(带推荐部门)
     /// </summary>
     [HttpGet("nextsteps/{orderId}")]
-    public async Task<NextStepsWithRecommendDto> GetNextStepsWithRecommendAsync(string orderId)
+    public async Task<NextStepsDto<RecommendStepOption>> GetNextStepsWithRecommendAsync(string orderId)
     {
         var order = await _orderDomainService.GetOrderAsync(orderId, cancellationToken: HttpContext.RequestAborted);
         if (string.IsNullOrEmpty(order.WorkflowId))
             throw new UserFriendlyException("该工单无关联流程id");
         var dto = await _workflowApplication.GetNextStepsAsync(order.WorkflowId, HttpContext.RequestAborted);
-        var rsp = _mapper.Map<NextStepsWithRecommendDto>(dto);
-        var org = await _organizeRepository.GetAsync(d => d.AreaCode == order.AreaCode, HttpContext.RequestAborted);
-        if (org is null) return rsp;
-        
-        rsp.RecommendOrgId = org.Id;
-        rsp.RecommendOrgName = org.Name;
+        var rsp = _mapper.Map<NextStepsDto<RecommendStepOption>>(dto);
+        foreach (var step in rsp.Steps)
+        {
+            if (dto.CurrentStepBusinessType is not EBusinessType.Send ||
+                step.BusinessType is not EBusinessType.Department) continue;
+            var org = await _organizeRepository.GetAsync(d => d.AreaCode == order.AreaCode, HttpContext.RequestAborted);
+            if (org is null) continue;
+            step.RecommendOrgId = org.Id;
+            step.RecommendOrgName = org.Name;
+        }
+
         return rsp;
     }
 

+ 14 - 15
src/Hotline.Api/Controllers/WorkflowController.cs

@@ -52,7 +52,7 @@ public class WorkflowController : BaseController
     private readonly ISystemDicDataCacheManager _systemDicDataCacheManager;
     private readonly IFileRepository _fileRepository;
 
-	public WorkflowController(
+    public WorkflowController(
         IDefinitionDomainService definitionDomainService,
         IRepository<WorkflowDefinition> definitionRepository,
         IWorkflowApplication workflowApplication,
@@ -70,7 +70,7 @@ public class WorkflowController : BaseController
         IMapper mapper,
         ISystemDicDataCacheManager systemDicDataCacheManager,
         IFileRepository fileRepository
-	)
+    )
     {
         _definitionDomainService = definitionDomainService;
         _definitionRepository = definitionRepository;
@@ -89,8 +89,7 @@ public class WorkflowController : BaseController
         _workflowCountersignRepository = workflowCountersignRepository;
         _systemDicDataCacheManager = systemDicDataCacheManager;
         _fileRepository = fileRepository;
-
-	}
+    }
 
     /// <summary>
     /// 分页查询最新版本号的模板
@@ -333,7 +332,7 @@ public class WorkflowController : BaseController
     /// <param name="workflowId"></param>
     /// <returns></returns>
     [HttpGet("{workflowId}/recall")]
-    public async Task<RecallStepsDto> GetRecallSteps(string workflowId)
+    public async Task<NextStepsDto<RecallStepOption>> GetRecallSteps(string workflowId)
     {
         return await _workflowApplication.GetRecallStepsAsync(workflowId, HttpContext.RequestAborted);
     }
@@ -458,7 +457,7 @@ public class WorkflowController : BaseController
     public async Task<WorkflowDto> GetWorkflowTraces(string workflowId)
     {
         var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, cancellationToken: HttpContext.RequestAborted);
-		workflow.Traces = await _workflowTraceRepository.Queryable()
+        workflow.Traces = await _workflowTraceRepository.Queryable()
             .Where(d => d.WorkflowId == workflow.Id)
             .OrderBy(d => d.CreationTime)
             .ToTreeAsync(d => d.Traces, d => d.ParentId, null);
@@ -466,15 +465,16 @@ public class WorkflowController : BaseController
         var workflowDto = _mapper.Map<WorkflowDto>(workflow);
         if (workflowDto.Traces.Any())
         {
-	        foreach (var item in workflowDto.Traces)
-	        {
-		        if (item.FileJson != null && item.FileJson.Any())
-		        {
-					var files = await _fileRepository.Queryable().Where(x => x.FlowKey == item.StepId).ToListAsync();
-					if (files.Any()) item.Files = _mapper.Map<List<FileDto>>(files);
-				}
-			}
+            foreach (var item in workflowDto.Traces)
+            {
+                if (item.FileJson != null && item.FileJson.Any())
+                {
+                    var files = await _fileRepository.Queryable().Where(x => x.FlowKey == item.StepId).ToListAsync();
+                    if (files.Any()) item.Files = _mapper.Map<List<FileDto>>(files);
+                }
+            }
         }
+
         return workflowDto;
     }
 
@@ -619,6 +619,5 @@ public class WorkflowController : BaseController
         }).ToList();
 
         return new PagedDto<WorkflowCountersignDto>(total, dtos);
-
     }
 }

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

@@ -21,7 +21,7 @@ namespace Hotline.Application.FlowEngine
         /// 流转至下一节点(节点办理)
         /// </summary>
         Task NextAsync(NextWorkflowDto dto, CancellationToken cancellationToken);
-        
+
         /// <summary>
         /// 退回(返回前一节点)
         /// </summary>
@@ -45,7 +45,8 @@ namespace Hotline.Application.FlowEngine
         /// <summary>
         /// 跳转至结束节点(无视流程模板配置直接跳至结束节点)
         /// </summary>
-        Task JumpToEndAsync(string workflowId, string opinion,List<FileDto> file, EReviewResult? reviewResult = EReviewResult.Unknown,
+        Task JumpToEndAsync(string workflowId, string opinion, List<FileDto> file,
+            EReviewResult? reviewResult = EReviewResult.Unknown,
             CancellationToken cancellationToken = default);
 
         /// <summary>
@@ -68,17 +69,17 @@ namespace Hotline.Application.FlowEngine
         /// <summary>
         /// 查询开始流程的下一步待选节点
         /// </summary>
-        Task<NextStepsDto> GetStartStepsAsync(string moduleCode, CancellationToken cancellationToken);
+        Task<NextStepsDto<NextStepOption>> GetStartStepsAsync(string moduleCode, CancellationToken cancellationToken);
 
         /// <summary>
         /// 查询办理流程的下一步待选节点
         /// </summary>
-        Task<NextStepsDto> GetNextStepsAsync(string workflowId, CancellationToken cancellationToken);
+        Task<NextStepsDto<NextStepOption>> GetNextStepsAsync(string workflowId, CancellationToken cancellationToken);
 
         /// <summary>
         /// 查询撤回可选节点
         /// </summary>
-        Task<RecallStepsDto> GetRecallStepsAsync(string workflowId, CancellationToken cancellationToken);
+        Task<NextStepsDto<RecallStepOption>> GetRecallStepsAsync(string workflowId, CancellationToken cancellationToken);
 
         /// <summary>
         /// 查询跳转可选节点

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

@@ -463,7 +463,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     /// <summary>
     /// 查询开始流程的下一步待选节点
     /// </summary>
-    public async Task<NextStepsDto> GetStartStepsAsync(string moduleCode, CancellationToken cancellationToken)
+    public async Task<NextStepsDto<NextStepOption>> GetStartStepsAsync(string moduleCode, CancellationToken cancellationToken)
     {
         var wfModule = await GetWorkflowModuleAsync(moduleCode, cancellationToken);
         var definition = wfModule.Definition;
@@ -489,7 +489,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
             //return dto;
             var nextStepOption = await GetDynamicStepAsync(startStepDefine.InstancePolicy.Value,
                 startStepDefine.StepType, startStepDefine.BusinessType, cancellationToken);
-            return new NextStepsDto
+            return new NextStepsDto<NextStepOption>
             {
                 Steps = new List<NextStepOption> { nextStepOption }
             };
@@ -502,7 +502,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         //var steps = firstStepDefines
         //        .Select(d => new NextStepOption { Key = d.Code, Value = d.Name })
         //        .ToList();
-        return new NextStepsDto
+        return new NextStepsDto<NextStepOption>
         {
             Steps = await GetConfigStepsAsync(definition.FlowType, startStepDefine.StepType, startStepDefine.BusinessType,
                 firstStepDefines,
@@ -515,7 +515,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     /// <summary>
     /// 查询办理流程的下一步待选节点
     /// </summary>
-    public async Task<NextStepsDto> GetNextStepsAsync(string workflowId, CancellationToken cancellationToken)
+    public async Task<NextStepsDto<NextStepOption>> GetNextStepsAsync(string workflowId, CancellationToken cancellationToken)
     {
         var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, true, true,
             cancellationToken: cancellationToken);
@@ -523,12 +523,12 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         if (currentStep.StepType is EStepType.End)
             throw new UserFriendlyException("结束节点无需办理");
 
-        var dto = new NextStepsDto
+        var dto = new NextStepsDto<NextStepOption>
         {
             CanReject = workflow.IsReviewType() && currentStep.CanReject,
             ExpiredTime = workflow.ExpiredTime,
             CanStartCountersign = currentStep.CanStartCountersign,
-            //RealCommunicationModeOptions = EnumExts.GetDescriptions<ERealCommunicationMode>().ToList(),
+            CurrentStepBusinessType = currentStep.BusinessType,
             TimeTypeOptions = EnumExts.GetDescriptions<ETimeType>().ToList()
         };
 
@@ -596,7 +596,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     /// <summary>
     /// 查询撤回可选节点及办理对象
     /// </summary>
-    public async Task<RecallStepsDto> GetRecallStepsAsync(string workflowId, CancellationToken cancellationToken)
+    public async Task<NextStepsDto<RecallStepOption>> GetRecallStepsAsync(string workflowId, CancellationToken cancellationToken)
     {
         var workflow =
             await _workflowDomainService.GetWorkflowAsync(workflowId, true, true, cancellationToken: cancellationToken);
@@ -607,7 +607,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         if (currentStep is null)
             throw new UserFriendlyException("无效当前节点编号");
 
-        var dto = new RecallStepsDto
+        var dto = new NextStepsDto<RecallStepOption>
         {
             TimeTypeOptions = EnumExts.GetDescriptions<ETimeType>().ToList()
         };

+ 18 - 17
src/Hotline.Application/Mappers/DataSharing/DsMapperConfigs.cs

@@ -6,6 +6,7 @@ using Hotline.DataSharing.Province.HuiJu.Send;
 using Hotline.DataSharing.Province.XieTong.Receive;
 using Hotline.DataSharing.Province.XieTong.Send;
 using Hotline.DataSharing.WebPortal;
+using Hotline.Orders;
 using Hotline.Share.Dtos.DataSharing.Province.Extend;
 using Hotline.Share.Dtos.DataSharing.Province.XieTong.Receive;
 using Hotline.Share.Dtos.File;
@@ -129,14 +130,14 @@ namespace Hotline.Application.Mappers.DataSharing
            .Map(d => d.Title, x => x.CaseTitle)
            //.Map(d => d.AcceptorName, x => x.CaseRegister)
            //.Map(d => d.AcceptorStaffNo, x => x.CaseRegisterNo)
-           //.Map(d => d.CreationTime, x => x.CaseDate)
+          // .Map(d => d.CreationTime, x => x.CaseDate)
            .Map(d => d.Contact, x => x.PhoneNumber)
            .Map(d => d.FromName, x => x.AppLicantName)
            .Map(d => d.AgeRangeCode, x => x.AppLicantAge)
            .Map(d => d.LicenceNo, x => x.AppLicantId)
-           // .Map(d => d.Hotspot.ProvinceCode, x => x.CaseAccord)
+           //.Map(d => d.Hotspot.ProvinceCode, x => x.CaseAccord)
            .Map(d => d.Content, x => x.CaseContent)
-           // .Map(d => d.ProcessType, x => x.CaseProcessType)
+           .Map(d => d.AcceptTypeCode, x => x.CaseType)
            .Map(d => d.IsSecret, x => x.CaseIsSecrect == "1" ? true : false)
            //  .Map(d => d.IsPublicity, x => x.CaseIsPublic == "1" ? true : false)
            .Map(d => d.ExpiredTimeProvince, x => x.TfdBackTimeBf)
@@ -168,20 +169,20 @@ namespace Hotline.Application.Mappers.DataSharing
              ;
 
             ///服务工单交办处理结果
-            config.ForType<OrderFlowDto, DsGetCaseResultReceive>()
-           .Map(d => d.CaseSerial, x => x.Order.ProvinceNo)
-           .Map(d => d.DeptName, x => x.Order.ActualHandleOrgName)
-           .Map(d => d.FinishTime, x => x.Order.ActualHandleTime)
-           .Map(d => d.FinishName, x => x.Order.ActualHandlerName)
-           .Map(d => d.FinishNote, x => x.Order.ActualOpinion)
-           .Map(d => d.EndDept, x => x.Order.ActualHandleOrgName)
-           .Map(d => d.EndName, x => x.Order.ActualHandlerName)
-           .Map(d => d.SendTime, x => x.Order.CenterToOrgTime)
-           .Map(d => d.FdBack, x => x.Order.ActualOpinion)
-           .Map(d => d.AreaCode, x => x.Order.AreaCode)
-           .Map(d => d.EndAreaCode, x => x.Order.ActualHandleOrgAreaCode)
-           .Map(d => d.EndAreaName, x => x.Order.ActualHandleOrgAreaName)
-           .Map(d => d.HandleTimeLong, x => x.Order.HandleDurationWorkday)
+            config.ForType<OrderDto, DsGetCaseResultReceive>()
+           .Map(d => d.CaseSerial, x => x.ProvinceNo)
+           .Map(d => d.DeptName, x => x.ActualHandleOrgName)
+           .Map(d => d.FinishTime, x => x.ActualHandleTime)
+           .Map(d => d.FinishName, x => x.ActualHandlerName)
+           .Map(d => d.FinishNote, x => x.ActualOpinion)
+           .Map(d => d.EndDept, x => x.ActualHandleOrgName)
+           .Map(d => d.EndName, x => x.ActualHandlerName)
+           .Map(d => d.SendTime, x => x.CenterToOrgTime)
+           .Map(d => d.FdBack, x => x.ActualOpinion)
+           .Map(d => d.AreaCode, x => x.AreaCode)
+           .Map(d => d.EndAreaCode, x => x.ActualHandleOrgAreaCode)
+           .Map(d => d.EndAreaName, x => x.ActualHandleOrgAreaName)
+           .Map(d => d.HandleTimeLong, x => x.HandleDurationWorkday)
             ;
 
             //通话记录

+ 42 - 0
src/Hotline.Share/Dtos/DataSharing/Province/XieTong/Send/GetCaseResultReceiveRequest.cs

@@ -162,5 +162,47 @@ namespace Hotline.Share.Dtos.DataSharing.Province.XieTong.Send
         /// </summary>
         [JsonPropertyName("FEEDBACK_TEL")]
         public string FeedBackTel { get; set; }
+
+        /// <summary>
+        /// 备注-办理单位备注,仅审核可见,群众不可见,无备注填“无”
+        /// </summary>
+        [JsonPropertyName("NOTES")]
+        public string Notes { get; set; } = "无";
+
+        /// <summary>
+        /// 事件类型
+        /// </summary>
+        [JsonPropertyName("EVENTTYPE")]
+        public string EventType { get; set; }
+
+        /// <summary>
+        /// 事件名称
+        /// </summary>
+        [JsonPropertyName("EVENTNAME")]
+        public string Eventname { get; set; }
+
+        /// <summary>
+        /// 是否与网民取得联系
+        /// </summary>
+        [JsonPropertyName("CONTACTFLAG")]
+        public string ContactFlag { get; set; }
+
+        /// <summary>
+        /// 是否邀请网民评价
+        /// </summary>
+        [JsonPropertyName("ASSESSFLAG")]
+        public string AssessFlag { get; set; }
+
+        /// <summary>
+        /// 网民评价类型
+        /// </summary>
+        [JsonPropertyName("ASSESSOPINION")]
+        public string AssessOpinion { get; set; }
+
+        /// <summary>
+        /// 网民评价内容
+        /// </summary>
+        [JsonPropertyName("ASSESSCONTENT")]
+        public string AssessContent { get; set; }
     }
 }

+ 35 - 29
src/Hotline.Share/Dtos/FlowEngine/NextStepsDto.cs

@@ -4,10 +4,7 @@ namespace Hotline.Share.Dtos.FlowEngine;
 
 public class NextStepsDto
 {
-    //public string DefinitionId { get; set; }
-    //public EInstanceMode InstanceMode { get; set; }
-    //public EDynamicPolicy DynamicPolicy { get; set; }
-    public IReadOnlyList<NextStepOption> Steps { get; set; }
+    // public IReadOnlyList<NextStepOption> Steps { get; set; }
     public DateTime? ExpiredTime { get; set; }
 
     /// <summary>
@@ -20,10 +17,19 @@ public class NextStepsDto
     /// </summary>
     public bool CanStartCountersign { get; set; }
 
-    //public IReadOnlyList<KeyValuePair<int, string>> RealCommunicationModeOptions { get; set; }
+    /// <summary>
+    /// 当前办理节点业务类型
+    /// </summary>
+    public EBusinessType CurrentStepBusinessType { get; set; }
+
     public IReadOnlyList<KeyValuePair<int, string>> TimeTypeOptions { get; set; }
 }
 
+public class NextStepsDto<TSteps> : NextStepsDto
+{
+    public IReadOnlyList<TSteps> Steps { get; set; }
+}
+
 public class NextStepOption : Kv
 {
     /// <summary>
@@ -65,30 +71,30 @@ public class GetNextStepItemsDto
     public NextStepOption Step { get; set; }
 }
 
-/// <summary>
-/// 撤回可选节点参数
-/// </summary>
-public class RecallStepsDto
-{
-    public IReadOnlyList<RecallStepOption> Steps { get; set; }
-
-    //public DateTime? ExpiredTime { get; set; }
-
-    /// <summary>
-    /// 是否有否决按钮
-    /// </summary>
-    public bool CanReject { get; set; }
-
-    /// <summary>
-    /// 是否支持发起会签
-    /// </summary>
-    public bool CanStartCountersign { get; set; }
-
-    /// <summary>
-    /// 办理时限时间类型待选参数
-    /// </summary>
-    public IReadOnlyList<KeyValuePair<int, string>> TimeTypeOptions { get; set; }
-}
+// /// <summary>
+// /// 撤回可选节点参数
+// /// </summary>
+// public class RecallStepsDto
+// {
+//     public IReadOnlyList<RecallStepOption> Steps { get; set; }
+//
+//     //public DateTime? ExpiredTime { get; set; }
+//
+//     /// <summary>
+//     /// 是否有否决按钮
+//     /// </summary>
+//     public bool CanReject { get; set; }
+//
+//     /// <summary>
+//     /// 是否支持发起会签
+//     /// </summary>
+//     public bool CanStartCountersign { get; set; }
+//
+//     /// <summary>
+//     /// 办理时限时间类型待选参数
+//     /// </summary>
+//     public IReadOnlyList<KeyValuePair<int, string>> TimeTypeOptions { get; set; }
+// }
 
 public class RecallStepOption : NextStepOption
 {

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

@@ -8,7 +8,20 @@ public class NextStepsWithRecommendDto : NextStepsDto
     /// 推荐部门id
     /// </summary>
     public string RecommendOrgId { get; set; }
-    
+
+    /// <summary>
+    /// 推荐部门名称
+    /// </summary>
+    public string RecommendOrgName { get; set; }
+}
+
+public class RecommendStepOption : NextStepOption
+{
+    /// <summary>
+    /// 推荐部门id
+    /// </summary>
+    public string RecommendOrgId { get; set; }
+
     /// <summary>
     /// 推荐部门名称
     /// </summary>

+ 2 - 2
src/Hotline/DataSharing/Province/Services/IProvinceService.cs

@@ -73,7 +73,7 @@ namespace Hotline.DataSharing.Province.Services
         Task HotlineOrderFlowRecalled(OrderDto dto, CancellationToken cancellationToken);
 
         /// <summary>
-        /// 热线工单办理---服务工单处理/服务工单交办处理过程--缺少附件----1
+        /// 热线工单办理---服务工单处理/服务工单交办处理过程----1
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
@@ -94,7 +94,7 @@ namespace Hotline.DataSharing.Province.Services
         Task SubmitOrderScreenSuccess(PublishVisitDto dto, CancellationToken cancellationToken);
 
         /// <summary>
-        ///热线工单归档---服务工单结果/服务工单交办处理结果--缺少附件---1
+        ///热线工单归档---服务工单结果/服务工单交办处理结果----1
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>

+ 8 - 0
src/Hotline/DataSharing/Province/Services/IPusherProviderService.cs

@@ -55,6 +55,14 @@ namespace Hotline.DataSharing.Province.Services
         /// <returns></returns>
         Task GetCaseProcessReceivePusher(DsGetCaseProcessReceive dto, CancellationToken cancellationToken);
 
+        /// <summary>
+        /// 服务工单交办处理结果
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task GetCaseResultReceivePusher(DsGetCaseResultReceive dto, CancellationToken cancellationToken);
+
         /// <summary>
         /// 退回申请请求
         /// </summary>

+ 47 - 15
src/Hotline/DataSharing/Province/Services/ProvinceService.cs

@@ -86,6 +86,7 @@ namespace Hotline.DataSharing.Province.Services
         private readonly IEnterpriseService _enterpriseService;
         private readonly ILogger<ProvinceService> _logger;
         private readonly IFileRepository _fileRepository;
+        private readonly IRepository<DsGetCaseResultReceive> _getCaseResultReceiveRepository;
 
         /// <summary>
         /// 注入
@@ -189,7 +190,8 @@ namespace Hotline.DataSharing.Province.Services
           IPusherProviderService pusherProviderService,
           IEnterpriseService enterpriseService,
           ILogger<ProvinceService> logger,
-          IFileRepository fileRepository)
+          IFileRepository fileRepository,
+          IRepository<DsGetCaseResultReceive> getCaseResultReceiveRepository)
         {
             _submitCaseInfoRepository = submitCaseInfoRepository;
             _mapper = mapper;
@@ -242,6 +244,7 @@ namespace Hotline.DataSharing.Province.Services
             _enterpriseService = enterpriseService;
             _logger = logger;
             _fileRepository = fileRepository;
+            _getCaseResultReceiveRepository = getCaseResultReceiveRepository;
         }
         #endregion
 
@@ -606,10 +609,10 @@ namespace Hotline.DataSharing.Province.Services
 
                 await InitPushData("SubmitCaseInfo", System.Text.Json.JsonSerializer.Serialize(submitCaseInfo), "submit_case_info", submitCaseInfo.Id, 10, cancellationToken);
                 // await _pusherProviderService.ProvinceOrderCreatedPusher(submitCaseInfo, cancellationToken);
+                //推送服务工单结果信息-组装110数据
+                await SubmitCaseResult(dto, cancellationToken);
             }
-            //推送服务工单结果信息-组装110数据
-            await SubmitCaseResult(dto, cancellationToken);
-
+           
             //修改本地工单数据
             var data = await _dataOrderRepository.GetAsync(p => p.OrderId == dto.Order.Id, cancellationToken);
             if (data != null)
@@ -685,7 +688,6 @@ namespace Hotline.DataSharing.Province.Services
             //await _pusherProviderService.SubmitCaseTotalPusher(data, cancellationToken);
         }
 
-
         #endregion
 
         #region 协同-第三批次
@@ -962,19 +964,49 @@ namespace Hotline.DataSharing.Province.Services
         }
         #endregion
 
+        /// <summary>
+        /// 接收发布数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task PublishOrder(OrderDto dto, CancellationToken cancellationToken)
+        {
+            #region 服务工单交办处理结果
+            //判断是否是热线中心
+            if (!string.IsNullOrEmpty(dto.ActualHandleOrgCode))
+            {
+                if (dto.ActualHandleOrgCode.Substring(0, 3) == "001")
+                {
+                    dto.ActualHandleOrgName = "热线中心";
+                }
+            }
+
+            var data = _mapper.Map<DsGetCaseResultReceive>(dto);
+            data.ConcactType = "40";
+            data.FinishType = "1";
+            data.HandleTimeLong = dto.AllDuration;
+            data.CliengGuid = Guid.NewGuid().ToString();
+            //将上报信息写入本地库
+            data.Id = await _getCaseResultReceiveRepository.AddAsync(data, cancellationToken);
 
-        ///// <summary>
-        ///// 接收发布数据
-        ///// </summary>
-        ///// <param name="dto"></param>
-        ///// <param name="cancellationToken"></param>
-        ///// <returns></returns>
-        //public async Task PublishOrder(PublishPublishOrderDto dto, CancellationToken cancellationToken)
-        //{
+            //将待推送数据写入待推送表
+            DsWaitingPushData pushData = new()
+            {
+                ServiceInterface = "GetCaseResultReceive",
+                Data = System.Text.Json.JsonSerializer.Serialize(data),
+                Priority = 0,
+                PushUrl = "get_case_result_receive",
+                Method = HttpMethods.Post,
+                SyncID = data.Id
+            };
+            await _waitingPushDataRepository.AddAsync(pushData, cancellationToken);
+            //处理附件
+            await FileData(new List<FileJson>(), data.CaseSerial, data.CliengGuid, dto.AreaCode, cancellationToken); 
+            #endregion
 
-        //    _dataOrderRepository
 
-        //}
+        }
 
         #region 私有方法
         /// <summary>

+ 67 - 19
src/Hotline/DataSharing/Province/Services/PusherProviderService.cs

@@ -4,6 +4,7 @@ using Hotline.DataSharing.Enterprise;
 using Hotline.DataSharing.Order;
 using Hotline.DataSharing.Province.Extend;
 using Hotline.DataSharing.Province.HuiJu.Send;
+using Hotline.DataSharing.Province.Notifications;
 using Hotline.DataSharing.Province.Other;
 using Hotline.DataSharing.Province.XieTong.Knowledge;
 using Hotline.DataSharing.Province.XieTong.Receive;
@@ -12,11 +13,15 @@ using Hotline.Share.Dtos.DataSharing.Province;
 using Hotline.Share.Dtos.DataSharing.Province.XieTong.Knowledge;
 using Hotline.Share.Dtos.DataSharing.Province.XieTong.Receive;
 using Hotline.Share.Dtos.DataSharing.Province.XieTong.Send;
+using Hotline.Share.Dtos.FlowEngine.Workflow;
+using Hotline.Users;
 using MapsterMapper;
 using MediatR;
 using Newtonsoft.Json;
 using Sharing.Province.Dtos.HuiJu.Send;
+using System.Collections.Generic;
 using System.Net;
+using System.Threading;
 using XF.Domain.Dependency;
 using XF.Domain.Repository;
 
@@ -461,7 +466,7 @@ namespace Hotline.DataSharing.Province.Services
                         else
                             caseInfo.SyncState = "2";
 
-                        caseInfo.ReturnResult =  System.Text.Json.JsonSerializer.Serialize(response);
+                        caseInfo.ReturnResult = System.Text.Json.JsonSerializer.Serialize(response);
                         await _receiveCaseExtendsRepository.UpdateAsync(caseInfo, cancellationToken);
                         //处理同步记录
                         await UpdateWaitingPushData(caseInfo.Id, caseInfo.SyncState, System.Text.Json.JsonSerializer.Serialize(response), cancellationToken: cancellationToken);
@@ -538,6 +543,37 @@ namespace Hotline.DataSharing.Province.Services
             }
         }
 
+        /// <summary>
+        /// 服务工单交办处理结果
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task GetCaseResultReceivePusher(DsGetCaseResultReceive dto, CancellationToken cancellationToken)
+        {
+            var pusher = _pusherProvider.CreatePusher(_channelConfigurationManager);
+            var dataReceive = _mapper.Map<GetCaseResultReceiveInfo>(dto);
+            var request = new GetCaseResultReceiveRequest();
+            request.ForeachClass(dataReceive);
+            request.SetData(dataReceive);
+
+            var response = await pusher.PushGetCaseResultReceiveAsync(request, cancellationToken);
+
+            //如果推送成功修改数据状态
+            if (response != null)
+            {
+                if (response.Code == "1")
+                    dto.SyncState = "1";
+                else
+                    dto.SyncState = "2";
+
+                dto.ReturnResult = Newtonsoft.Json.JsonConvert.SerializeObject(response);
+                await _getCaseResultReceiveRepository.UpdateAsync(dto, cancellationToken);
+                //处理同步记录
+                await UpdateWaitingPushData(dto.Id, dto.SyncState, System.Text.Json.JsonSerializer.Serialize(response), cancellationToken: cancellationToken);
+            }
+        }
+
         /// <summary>
         /// 退回申请请求
         /// </summary>
@@ -697,7 +733,7 @@ namespace Hotline.DataSharing.Province.Services
                 else
                     dto.SyncState = "2";
 
-                dto.ReturnResult =  System.Text.Json.JsonSerializer.Serialize(response);
+                dto.ReturnResult = System.Text.Json.JsonSerializer.Serialize(response);
                 await _remindCaseInfoRepository.UpdateAsync(dto, cancellationToken);
                 //处理同步记录
                 await UpdateWaitingPushData(dto.Id, dto.SyncState, System.Text.Json.JsonSerializer.Serialize(response), cancellationToken: cancellationToken);
@@ -730,7 +766,7 @@ namespace Hotline.DataSharing.Province.Services
                 else
                     dto.SyncState = "2";
 
-                dto.ReturnResult =  System.Text.Json.JsonSerializer.Serialize(response);
+                dto.ReturnResult = System.Text.Json.JsonSerializer.Serialize(response);
                 await _getKnowledgeInfoSendRepository.UpdateAsync(dto, cancellationToken);
                 //处理同步记录
                 await UpdateWaitingPushData(dto.Id, dto.SyncState, System.Text.Json.JsonSerializer.Serialize(response), cancellationToken: cancellationToken);
@@ -763,7 +799,7 @@ namespace Hotline.DataSharing.Province.Services
                 else
                     dto.SyncState = "2";
 
-                dto.ReturnResult =  System.Text.Json.JsonSerializer.Serialize(response);
+                dto.ReturnResult = System.Text.Json.JsonSerializer.Serialize(response);
                 await _getKnowledgeInfoUpdateRepository.UpdateAsync(dto, cancellationToken);
                 //处理同步记录
                 await UpdateWaitingPushData(dto.Id, dto.SyncState, System.Text.Json.JsonSerializer.Serialize(response), cancellationToken: cancellationToken);
@@ -798,7 +834,7 @@ namespace Hotline.DataSharing.Province.Services
                 else
                     dto.SyncState = "2";
 
-                dto.ReturnResult =  System.Text.Json.JsonSerializer.Serialize(response);
+                dto.ReturnResult = System.Text.Json.JsonSerializer.Serialize(response);
                 await _getKnowledgeInfoAbandonRepository.UpdateAsync(dto, cancellationToken);
                 //处理同步记录
                 await UpdateWaitingPushData(dto.Id, dto.SyncState, System.Text.Json.JsonSerializer.Serialize(response), cancellationToken: cancellationToken);
@@ -831,7 +867,7 @@ namespace Hotline.DataSharing.Province.Services
                 else
                     dto.SyncState = "2";
 
-                dto.ReturnResult =  System.Text.Json.JsonSerializer.Serialize(response);
+                dto.ReturnResult = System.Text.Json.JsonSerializer.Serialize(response);
                 await _sendRealTimeStatusRepository.UpdateAsync(dto, cancellationToken);
                 //处理同步记录
                 await UpdateWaitingPushData(dto.Id, dto.SyncState, System.Text.Json.JsonSerializer.Serialize(response), cancellationToken: cancellationToken);
@@ -864,7 +900,7 @@ namespace Hotline.DataSharing.Province.Services
                 else
                     dto.SyncState = "2";
 
-                dto.ReturnResult =  System.Text.Json.JsonSerializer.Serialize(response);
+                dto.ReturnResult = System.Text.Json.JsonSerializer.Serialize(response);
                 await _delayCaseInfoSendRepository.UpdateAsync(dto, cancellationToken);
                 //处理同步记录
                 await UpdateWaitingPushData(dto.Id, dto.SyncState, System.Text.Json.JsonSerializer.Serialize(response), cancellationToken: cancellationToken);
@@ -897,7 +933,7 @@ namespace Hotline.DataSharing.Province.Services
                 else
                     dto.SyncState = "2";
 
-                dto.ReturnResult =  System.Text.Json.JsonSerializer.Serialize(response);
+                dto.ReturnResult = System.Text.Json.JsonSerializer.Serialize(response);
                 await _zMHDCaseInfoPublicRepository.UpdateAsync(dto, cancellationToken);
                 //处理同步记录
                 await UpdateWaitingPushData(dto.Id, dto.SyncState, System.Text.Json.JsonSerializer.Serialize(response), cancellationToken: cancellationToken);
@@ -939,7 +975,7 @@ namespace Hotline.DataSharing.Province.Services
                 else
                     dto.SyncState = "2";
 
-                dto.ReturnResult =  System.Text.Json.JsonSerializer.Serialize(response);
+                dto.ReturnResult = System.Text.Json.JsonSerializer.Serialize(response);
                 await _submitCaseTotalRepository.UpdateAsync(dto, cancellationToken);
                 //处理同步记录
                 await UpdateWaitingPushData(dto.Id, dto.SyncState, System.Text.Json.JsonSerializer.Serialize(response), cancellationToken: cancellationToken);
@@ -972,10 +1008,10 @@ namespace Hotline.DataSharing.Province.Services
                 else
                     dto.SyncState = "2";
 
-                dto.ReturnResult =  System.Text.Json.JsonSerializer.Serialize (response);
+                dto.ReturnResult = System.Text.Json.JsonSerializer.Serialize(response);
                 await _supplyCaseInfoSendRepository.UpdateAsync(dto, cancellationToken);
                 //处理同步记录
-                await UpdateWaitingPushData(dto.Id, dto.SyncState, System.Text.Json.JsonSerializer.Serialize (response), cancellationToken: cancellationToken);
+                await UpdateWaitingPushData(dto.Id, dto.SyncState, System.Text.Json.JsonSerializer.Serialize(response), cancellationToken: cancellationToken);
             }
         }
 
@@ -1005,11 +1041,11 @@ namespace Hotline.DataSharing.Province.Services
                 else
                     dto.SyncState = "2";
 
-                dto.ReturnResult = System.Text.Json.JsonSerializer.Serialize (response);
+                dto.ReturnResult = System.Text.Json.JsonSerializer.Serialize(response);
                 await _revokeCaseInfoRepository.UpdateAsync(dto, cancellationToken);
 
                 //处理同步记录
-                await UpdateWaitingPushData(dto.Id, dto.SyncState, System.Text.Json.JsonSerializer.Serialize (response), cancellationToken: cancellationToken);
+                await UpdateWaitingPushData(dto.Id, dto.SyncState, System.Text.Json.JsonSerializer.Serialize(response), cancellationToken: cancellationToken);
             }
         }
 
@@ -1264,25 +1300,37 @@ namespace Hotline.DataSharing.Province.Services
             //这里处理业务
             if (response.custom.STEP_List != null && response.custom.STEP_List.Count > 0)
             {
+                //查询工单数据
+                var dataOrder = await _dataOrderRepository.GetAsync(p => p.ProvinceNo == CaseSerial, cancellationToken);
+                //这里调用业务接口,推送办理数据
+                List<WorkflowTraceDto> Traces = new List<WorkflowTraceDto>();
                 //遍历返回的数据
                 foreach (var item in response.custom.STEP_List)
                 {
                     //检测当前数据是否存在,如果存在不处理,不存在新增到数据库并推送到业务系统
-                    if (!await _getCaseDistrecordSendRepository.AnyAsync(p => p.CaseSerial == response.custom.CASE_SERIAL && p.RowGuid == item.RowGuid))
+                    if (!await _getCaseDistrecordSendRepository.AnyAsync(p => p.CaseSerial == response.custom.CASE_SERIAL && p.RowGuid == item.RowGuid, cancellationToken))
                     {
                         var tempData = _mapper.Map<DsGetCaseDistrecordSend>(item);
                         await _getCaseDistrecordSendRepository.AddAsync(tempData);
 
-                        //这里调用业务接口,推送办理数据
-
+                        Traces.Add(new()
+                        {
+                            HandlerName = item.OperatorName,
+                            HandlerOrgName = item.OperatorouName,
+                            HandleTime = item.HandleTime,
+                            Opinion = item.HandleOpinion
+                        });
                     }
                 }
+
+                //往业务系统推送数据
+                if (dataOrder != null && Traces != null && Traces.Count > 0)
+                    await _mediator.Send(new AddOrderTracesAsyncNotify { OrderId = dataOrder.OrderId, Traces = Traces }, cancellationToken);
             }
         }
 
-
         /// <summary>
-        /// 将文件流上传到附件服务器   ----还需要拉取文件流
+        /// 将文件流上传到附件服务器 
         /// </summary>
         /// <param name="dto"></param>
         /// <param name="fileName"></param>
@@ -1332,7 +1380,7 @@ namespace Hotline.DataSharing.Province.Services
                 // 上传附件
                 string strResult = CFormUpload.MultipartFormDataPost(strUrl, null, dicParam, strToken);
 
-                return  JsonConvert.DeserializeObject<ProvinceResponse>(strResult);
+                return JsonConvert.DeserializeObject<ProvinceResponse>(strResult);
             }
             catch (Exception)
             {

+ 43 - 1
src/Hotline/DataSharing/Province/XieTong/Send/DsGetCaseResultReceive.cs

@@ -68,7 +68,7 @@ namespace Hotline.DataSharing.Province.XieTong.Send
         /// 办理时长
         /// </summary>
         [SugarColumn(ColumnDescription = "办理时长")]
-        public decimal HandleTimeLong { get; set; }
+        public Double HandleTimeLong { get; set; }
 
         /// <summary>
         /// 签收时间
@@ -148,6 +148,48 @@ namespace Hotline.DataSharing.Province.XieTong.Send
         [SugarColumn(ColumnDescription = "反馈人电话号码", ColumnDataType = "varchar(11)", IsNullable = true)]
         public string FeedBackTel { get; set; }
 
+        /// <summary>
+        /// 备注-办理单位备注,仅审核可见,群众不可见,无备注填“无”
+        /// </summary>
+        [SugarColumn(ColumnDescription = " 备注-办理单位备注,仅审核可见", ColumnDataType = "text", IsNullable = true)]
+        public string Notes { get; set; } = "无";
+
+        /// <summary>
+        /// 事件类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "事件类型", ColumnDataType = "varchar(10)", IsNullable = true)]
+        public string EventType { get; set; }
+
+        /// <summary>
+        /// 事件名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "事件名称", ColumnDataType = "varchar(100)", IsNullable = true)]
+        public string Eventname { get; set; }
+
+        /// <summary>
+        /// 是否与网民取得联系
+        /// </summary>
+        [SugarColumn(ColumnDescription = "是否与网民取得联系", ColumnDataType = "varchar(5)", IsNullable = true)]
+        public string ContactFlag { get; set; }
+
+        /// <summary>
+        /// 是否邀请网民评价
+        /// </summary>
+        [SugarColumn(ColumnDescription = "是否邀请网民评价", ColumnDataType = "varchar(5)", IsNullable = true)]
+        public string AssessFlag { get; set; }
+
+        /// <summary>
+        /// 网民评价类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "网民评价类型", ColumnDataType = "varchar(5)", IsNullable = true)]
+        public string AssessOpinion { get; set; }
+
+        /// <summary>
+        /// 网民评价内容
+        /// </summary>
+        [SugarColumn(ColumnDescription = "网民评价内容", ColumnDataType = "varchar(3000)", IsNullable = true)]
+        public string AssessContent { get; set; }
+
         /// <summary>
         /// 服务工单编号  
         /// </summary>