Ver código fonte

Merge branch 'release' of http://git.12345lm.cn/Fengwo/hotline into release

Dun.Jason 8 meses atrás
pai
commit
0a78cfd180

+ 1 - 8
Hotline.sln

@@ -49,9 +49,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hotline.Ai.Jths", "src\Hotl
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hotline.YbEnterprise.Sdk", "src\Hotline.YbEnterprise.Sdk\Hotline.YbEnterprise.Sdk.csproj", "{C3F289D5-C50B-46DB-852C-9543EF9B0355}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XingTang.Sdk", "src\XingTang.Sdk\XingTang.Sdk.csproj", "{CF2A8B80-FF4E-4291-B383-D735BB629F32}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hotline.XingTang", "src\Hotline.XingTang\Hotline.XingTang.csproj", "{9F99C272-5BC2-452C-9D97-BC756AF04669}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XingTang.Sdk", "src\XingTang.Sdk\XingTang.Sdk.csproj", "{CF2A8B80-FF4E-4291-B383-D735BB629F32}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -131,10 +129,6 @@ Global
 		{CF2A8B80-FF4E-4291-B383-D735BB629F32}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{CF2A8B80-FF4E-4291-B383-D735BB629F32}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{CF2A8B80-FF4E-4291-B383-D735BB629F32}.Release|Any CPU.Build.0 = Release|Any CPU
-		{9F99C272-5BC2-452C-9D97-BC756AF04669}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{9F99C272-5BC2-452C-9D97-BC756AF04669}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{9F99C272-5BC2-452C-9D97-BC756AF04669}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{9F99C272-5BC2-452C-9D97-BC756AF04669}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -162,7 +156,6 @@ Global
 		{1634234A-379C-44DC-BFEC-7BBDEF50B47B} = {D041C554-B78E-4AAF-B597-E309DC8EEF4F}
 		{C3F289D5-C50B-46DB-852C-9543EF9B0355} = {D041C554-B78E-4AAF-B597-E309DC8EEF4F}
 		{CF2A8B80-FF4E-4291-B383-D735BB629F32} = {D041C554-B78E-4AAF-B597-E309DC8EEF4F}
-		{9F99C272-5BC2-452C-9D97-BC756AF04669} = {D041C554-B78E-4AAF-B597-E309DC8EEF4F}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {4B8EA790-BD13-4422-8D63-D6DBB77B823F}

+ 130 - 110
src/Hotline.Api/Controllers/OrderController.cs

@@ -615,7 +615,7 @@ public class OrderController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPost("published/statistics/department/export")]
-    public async Task<FileStreamResult> ExportQueryPublishedOrderDepartmentAsync([FromBody]ExportExcelDto<QueryOrderPublishStatisticsAllDto> dto)
+    public async Task<FileStreamResult> ExportQueryPublishedOrderDepartmentAsync([FromBody] ExportExcelDto<QueryOrderPublishStatisticsAllDto> dto)
     {
         var (total, list) = await _orderApplication.QueryPublishedOrderDepartmentAsync(dto.QueryDto, dto.IsExportAll);
         if (list != null && list.Count > 0)
@@ -716,7 +716,8 @@ public class OrderController : BaseController
             .FirstAsync();
 
 
-        return new PublishedOrderStatisticsDto {
+        return new PublishedOrderStatisticsDto
+        {
             TotalCount = totalCount,
             PrivateCount = privateCount,
             PublicCount = publicCount,
@@ -1221,7 +1222,7 @@ public class OrderController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPost("visit/judge-query-export")]
-    public async Task<FileStreamResult> VisitJudgeQueryExport([FromBody]ExportExcelDto<VisitJudgeQueryReq> dto)
+    public async Task<FileStreamResult> VisitJudgeQueryExport([FromBody] ExportExcelDto<VisitJudgeQueryReq> dto)
     {
         var query = _orderRepository.VisitJudgeQuery(dto.QueryDto);
 
@@ -4103,13 +4104,13 @@ public class OrderController : BaseController
                 audit.AuditUser = "默认通过";
                 audit.AuditTime = DateTime.Now;
                 dto.ExpiredTime = order.ExpiredTime;
-				var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
+                var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
                 var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
                     ? EProcessType.Zhiban
                     : EProcessType.Jiaoban;
                 if (currentStep.AcceptorOrgId != OrgSeedData.CenterId && prevStep.BusinessType == EBusinessType.Send)
                     order.SendBackNum = order.SendBackNum.HasValue ? order.SendBackNum.Value + 1 : 1;
-				await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType,SendBackNum = order.SendBackNum })
+                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, SendBackNum = order.SendBackNum })
                     .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                 //发送短信TODO
             }
@@ -4124,8 +4125,8 @@ public class OrderController : BaseController
                 ? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
             if (currentStep.AcceptorOrgId != OrgSeedData.CenterId && prevStep.BusinessType == EBusinessType.Send)
-	            order.SendBackNum = order.SendBackNum.HasValue ? order.SendBackNum.Value + 1 : 1;
-			await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, SendBackNum = order.SendBackNum })
+                order.SendBackNum = order.SendBackNum.HasValue ? order.SendBackNum.Value + 1 : 1;
+            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, SendBackNum = order.SendBackNum })
                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
             //发送短信TODO
         }
@@ -4158,11 +4159,11 @@ public class OrderController : BaseController
         //执行退回
         if (sendBack.State == ESendBackAuditState.End)
         {
-	        var order = await _orderRepository.Queryable().Includes(d => d.Workflow).FirstAsync(d => d.Id == sendBack.OrderId);
-			//string applicantId, string applicantOrgId, string[] applicantRoleIds,
-			//    ISessionContext current, CancellationToken cancellationToken);
-			sendBack.SendBackData.ExpiredTime = order.ExpiredTime;
-			var flowDirection = await _workflowApplication.PreviousAsync(sendBack.SendBackData, sendBack.WorkflowUserId,
+            var order = await _orderRepository.Queryable().Includes(d => d.Workflow).FirstAsync(d => d.Id == sendBack.OrderId);
+            //string applicantId, string applicantOrgId, string[] applicantRoleIds,
+            //    ISessionContext current, CancellationToken cancellationToken);
+            sendBack.SendBackData.ExpiredTime = order.ExpiredTime;
+            var flowDirection = await _workflowApplication.PreviousAsync(sendBack.SendBackData, sendBack.WorkflowUserId,
                 sendBack.WorkflowOrgId, sendBack.WorkflowRoleIds.ToArray(), _sessionContext,
                 HttpContext.RequestAborted);
             //var flowDirection = await _workflowApplication.PreviousAsync(sendBack.SendBackData, sendBack.WorkflowUserId, HttpContext.RequestAborted);
@@ -4170,9 +4171,9 @@ public class OrderController : BaseController
                               flowDirection == EFlowDirection.CenterToCenter
                 ? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
-			if (sendBack.ApplyOrgId != OrgSeedData.CenterId && sendBack.SendBackOrgId == OrgSeedData.CenterId)
-				order.SendBackNum = order.SendBackNum.HasValue ? order.SendBackNum.Value + 1 : 1;
-			await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType,SendBackNum = order.SendBackNum })
+            if (sendBack.ApplyOrgId != OrgSeedData.CenterId && sendBack.SendBackOrgId == OrgSeedData.CenterId)
+                order.SendBackNum = order.SendBackNum.HasValue ? order.SendBackNum.Value + 1 : 1;
+            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, SendBackNum = order.SendBackNum })
                 .Where(o => o.Id == sendBack.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
             //发送短信TODO
         }
@@ -4210,9 +4211,9 @@ public class OrderController : BaseController
             //执行退回
             if (sendBack.State == ESendBackAuditState.End)
             {
-	            var order = await _orderRepository.Queryable().Includes(d => d.Workflow).FirstAsync(d => d.Id == sendBack.OrderId);
-	            sendBack.SendBackData.ExpiredTime = order.ExpiredTime;
-				var flowDirection = await _workflowApplication.PreviousAsync(sendBack.SendBackData,
+                var order = await _orderRepository.Queryable().Includes(d => d.Workflow).FirstAsync(d => d.Id == sendBack.OrderId);
+                sendBack.SendBackData.ExpiredTime = order.ExpiredTime;
+                var flowDirection = await _workflowApplication.PreviousAsync(sendBack.SendBackData,
                     sendBack.WorkflowUserId, sendBack.WorkflowOrgId, sendBack.WorkflowRoleIds.ToArray(),
                     _sessionContext, HttpContext.RequestAborted);
                 //var flowDirection = await _workflowApplication.PreviousAsync(sendBack.SendBackData, sendBack.WorkflowUserId, HttpContext.RequestAborted);
@@ -4220,8 +4221,8 @@ public class OrderController : BaseController
                     ? EProcessType.Zhiban
                     : EProcessType.Jiaoban;
                 if (sendBack.ApplyOrgId != OrgSeedData.CenterId && sendBack.SendBackOrgId == OrgSeedData.CenterId)
-	                order.SendBackNum = order.SendBackNum.HasValue ? order.SendBackNum.Value + 1 : 1;
-				await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, SendBackNum = order.SendBackNum })
+                    order.SendBackNum = order.SendBackNum.HasValue ? order.SendBackNum.Value + 1 : 1;
+                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, SendBackNum = order.SendBackNum })
                     .Where(o => o.Id == sendBack.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
                 //发送短信TODO
             }
@@ -4576,11 +4577,11 @@ public class OrderController : BaseController
                 expiredTime.ExpiredTime = order.ExpiredTime.Value;
                 expiredTime.NearlyExpiredTime = order.NearlyExpiredTime.Value;
                 expiredTime.NearlyExpiredTimeOne = order.NearlyExpiredTimeOne.Value;
-			}
-			//var expiredTime = _timeLimitDomainService.CalcEndTime(DateTime.Now,
-			//	ETimeType.WorkDay,
-			//	dto.TimeLimit.Value, order.AcceptTypeCode);
-			await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ExpiredTime = expiredTime.ExpiredTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime, NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne, ProcessType = processType, Status = EOrderStatus.Special })
+            }
+            //var expiredTime = _timeLimitDomainService.CalcEndTime(DateTime.Now,
+            //	ETimeType.WorkDay,
+            //	dto.TimeLimit.Value, order.AcceptTypeCode);
+            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ExpiredTime = expiredTime.ExpiredTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime, NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne, ProcessType = processType, Status = EOrderStatus.Special })
                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
             var orderDto = _mapper.Map<OrderDto>(order);
             await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
@@ -4588,30 +4589,30 @@ public class OrderController : BaseController
             //}
             await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Recall, HttpContext.RequestAborted);
 
-            if (order.Status  >= EOrderStatus.Filed)
+            if (order.Status >= EOrderStatus.Filed)
             {
-				var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == dto.OrderId);
-				if (publish != null)
-				{
-					var publishHistory = _mapper.Map<OrderPublishHistory>(publish);
-					publishHistory.OrderPublishId = publish.Id;
-					publishHistory.ArrangeTitleAfter = publish.ArrangeTitle;
-					publishHistory.ArrangeTitleBefor = publish.ArrangeTitle;
-					publishHistory.ArrangeContentAfter = publish.ArrangeContent;
-					publishHistory.ArrangeContentBefor = publish.ArrangeContent;
-					publishHistory.ArrangeOpinionAfter = publish.ArrangeOpinion;
-					publishHistory.ArrangeOpinionBefor = publish.ArrangeOpinion;
-					await _orderPublishHistoryRepository.AddAsync(publishHistory, HttpContext.RequestAborted);
-					await _orderPublishRepository.RemoveAsync(publish, false, HttpContext.RequestAborted);
-				}
-
-				var visit = await _orderVisitRepository.GetAsync(x => x.OrderId == dto.OrderId && x.VisitState != EVisitState.None);
-				if (visit != null)
-				{
-					visit.VisitState = EVisitState.None;
-					await _orderVisitRepository.UpdateAsync(visit, HttpContext.RequestAborted);
-				}
-			}
+                var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == dto.OrderId);
+                if (publish != null)
+                {
+                    var publishHistory = _mapper.Map<OrderPublishHistory>(publish);
+                    publishHistory.OrderPublishId = publish.Id;
+                    publishHistory.ArrangeTitleAfter = publish.ArrangeTitle;
+                    publishHistory.ArrangeTitleBefor = publish.ArrangeTitle;
+                    publishHistory.ArrangeContentAfter = publish.ArrangeContent;
+                    publishHistory.ArrangeContentBefor = publish.ArrangeContent;
+                    publishHistory.ArrangeOpinionAfter = publish.ArrangeOpinion;
+                    publishHistory.ArrangeOpinionBefor = publish.ArrangeOpinion;
+                    await _orderPublishHistoryRepository.AddAsync(publishHistory, HttpContext.RequestAborted);
+                    await _orderPublishRepository.RemoveAsync(publish, false, HttpContext.RequestAborted);
+                }
+
+                var visit = await _orderVisitRepository.GetAsync(x => x.OrderId == dto.OrderId && x.VisitState != EVisitState.None);
+                if (visit != null)
+                {
+                    visit.VisitState = EVisitState.None;
+                    await _orderVisitRepository.UpdateAsync(visit, HttpContext.RequestAborted);
+                }
+            }
 
             if (order != null && ("001171".Equals(model.OrgId) ||
                                   "001178".Equals(model.OrgId) ||
@@ -4719,7 +4720,7 @@ public class OrderController : BaseController
             // 计算期满时间
             if (dto.AlterTime)
             {
-                var expiredTime = 
+                var expiredTime =
                    // _timeLimitDomainService.CalcEndTime(
                    await _expireTime.CalcEndTime(
                     DateTime.Now,
@@ -4727,11 +4728,11 @@ public class OrderController : BaseController
                     dto.TimeLimit.Value, order.AcceptTypeCode);
                 if (expiredTime.EndTime < order.ExpiredTime.Value)
                 {
-	                expiredTime.EndTime = order.ExpiredTime.Value;
-	                expiredTime.NearlyExpiredTime = order.NearlyExpiredTime.Value;
-	                expiredTime.NearlyExpiredTimeOne = order.NearlyExpiredTimeOne.Value;
+                    expiredTime.EndTime = order.ExpiredTime.Value;
+                    expiredTime.NearlyExpiredTime = order.NearlyExpiredTime.Value;
+                    expiredTime.NearlyExpiredTimeOne = order.NearlyExpiredTimeOne.Value;
                 }
-				endTime = expiredTime.EndTime;
+                endTime = expiredTime.EndTime;
                 await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ExpiredTime = expiredTime.EndTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime, NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne })
                     .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                 var orderDto = _mapper.Map<OrderDto>(order);
@@ -4836,28 +4837,28 @@ public class OrderController : BaseController
             await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Recall, HttpContext.RequestAborted);
             if (order.Status >= EOrderStatus.Filed)
             {
-				var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == special.OrderId);
-				if (publish != null)
-				{
-					var publishHistory = _mapper.Map<OrderPublishHistory>(publish);
-					publishHistory.OrderPublishId = publish.Id;
-					publishHistory.ArrangeTitleAfter = publish.ArrangeTitle;
-					publishHistory.ArrangeTitleBefor = publish.ArrangeTitle;
-					publishHistory.ArrangeContentAfter = publish.ArrangeContent;
-					publishHistory.ArrangeContentBefor = publish.ArrangeContent;
-					publishHistory.ArrangeOpinionAfter = publish.ArrangeOpinion;
-					publishHistory.ArrangeOpinionBefor = publish.ArrangeOpinion;
-					await _orderPublishHistoryRepository.AddAsync(publishHistory, HttpContext.RequestAborted);
-					await _orderPublishRepository.RemoveAsync(publish, false, HttpContext.RequestAborted);
-				}
-
-				var visit = await _orderVisitRepository.GetAsync(x => x.OrderId == special.OrderId && x.VisitState != EVisitState.None);
-				if (visit != null)
-				{
-					visit.VisitState = EVisitState.None;
-					await _orderVisitRepository.UpdateAsync(visit, HttpContext.RequestAborted);
-				}
-			}
+                var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == special.OrderId);
+                if (publish != null)
+                {
+                    var publishHistory = _mapper.Map<OrderPublishHistory>(publish);
+                    publishHistory.OrderPublishId = publish.Id;
+                    publishHistory.ArrangeTitleAfter = publish.ArrangeTitle;
+                    publishHistory.ArrangeTitleBefor = publish.ArrangeTitle;
+                    publishHistory.ArrangeContentAfter = publish.ArrangeContent;
+                    publishHistory.ArrangeContentBefor = publish.ArrangeContent;
+                    publishHistory.ArrangeOpinionAfter = publish.ArrangeOpinion;
+                    publishHistory.ArrangeOpinionBefor = publish.ArrangeOpinion;
+                    await _orderPublishHistoryRepository.AddAsync(publishHistory, HttpContext.RequestAborted);
+                    await _orderPublishRepository.RemoveAsync(publish, false, HttpContext.RequestAborted);
+                }
+
+                var visit = await _orderVisitRepository.GetAsync(x => x.OrderId == special.OrderId && x.VisitState != EVisitState.None);
+                if (visit != null)
+                {
+                    visit.VisitState = EVisitState.None;
+                    await _orderVisitRepository.UpdateAsync(visit, HttpContext.RequestAborted);
+                }
+            }
 
             if (order != null && ("001171".Equals(special.OrgId) ||
                                   "001178".Equals(special.OrgId) ||
@@ -4949,28 +4950,28 @@ public class OrderController : BaseController
                 await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Recall, HttpContext.RequestAborted);
                 if (order.Status >= EOrderStatus.Filed)
                 {
-					var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == special.OrderId);
-					if (publish != null)
-					{
-						var publishHistory = _mapper.Map<OrderPublishHistory>(publish);
-						publishHistory.OrderPublishId = publish.Id;
-						publishHistory.ArrangeTitleAfter = publish.ArrangeTitle;
-						publishHistory.ArrangeTitleBefor = publish.ArrangeTitle;
-						publishHistory.ArrangeContentAfter = publish.ArrangeContent;
-						publishHistory.ArrangeContentBefor = publish.ArrangeContent;
-						publishHistory.ArrangeOpinionAfter = publish.ArrangeOpinion;
-						publishHistory.ArrangeOpinionBefor = publish.ArrangeOpinion;
-						await _orderPublishHistoryRepository.AddAsync(publishHistory, HttpContext.RequestAborted);
-						await _orderPublishRepository.RemoveAsync(publish, false, HttpContext.RequestAborted);
-					}
-
-					var visit = await _orderVisitRepository.GetAsync(x => x.OrderId == special.OrderId && x.VisitState != EVisitState.None);
-					if (visit != null)
-					{
-						visit.VisitState = EVisitState.None;
-						await _orderVisitRepository.UpdateAsync(visit, HttpContext.RequestAborted);
-					}
-				}
+                    var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == special.OrderId);
+                    if (publish != null)
+                    {
+                        var publishHistory = _mapper.Map<OrderPublishHistory>(publish);
+                        publishHistory.OrderPublishId = publish.Id;
+                        publishHistory.ArrangeTitleAfter = publish.ArrangeTitle;
+                        publishHistory.ArrangeTitleBefor = publish.ArrangeTitle;
+                        publishHistory.ArrangeContentAfter = publish.ArrangeContent;
+                        publishHistory.ArrangeContentBefor = publish.ArrangeContent;
+                        publishHistory.ArrangeOpinionAfter = publish.ArrangeOpinion;
+                        publishHistory.ArrangeOpinionBefor = publish.ArrangeOpinion;
+                        await _orderPublishHistoryRepository.AddAsync(publishHistory, HttpContext.RequestAborted);
+                        await _orderPublishRepository.RemoveAsync(publish, false, HttpContext.RequestAborted);
+                    }
+
+                    var visit = await _orderVisitRepository.GetAsync(x => x.OrderId == special.OrderId && x.VisitState != EVisitState.None);
+                    if (visit != null)
+                    {
+                        visit.VisitState = EVisitState.None;
+                        await _orderVisitRepository.UpdateAsync(visit, HttpContext.RequestAborted);
+                    }
+                }
 
                 if (order != null && ("001171".Equals(special.OrgId) ||
                                       "001178".Equals(special.OrgId) ||
@@ -6564,7 +6565,7 @@ public class OrderController : BaseController
     }
 
     /// <summary>
-    /// 获取修改记录
+    /// 根据工单ID获取修改记录
     /// </summary>
     /// <returns></returns>
     [HttpGet("get-order-modifying-records-list")]
@@ -6575,6 +6576,25 @@ public class OrderController : BaseController
         return _mapper.Map<IReadOnlyList<OrderModifyingRecordsDto>>(list);
     }
 
+    /// <summary>
+    /// 获取修改记录
+    /// </summary>
+    /// <returns></returns>
+    [HttpGet("get-order-modifying-records-all-list")]
+    public async Task<IReadOnlyList<OrderModifyingRecordsDto>> GetOrderModifyingRecordsAllList([FromQuery] OrderModifyingRecordsRequest dto)
+    {
+        var list = await _orderModifyingRecordsRepository.Queryable()
+            .WhereIF(dto.StartTime.HasValue, p => p.CreationTime >= dto.StartTime)
+            .WhereIF(dto.EndTime.HasValue, p => p.CreationTime <= dto.EndTime)
+            .WhereIF(!string.IsNullOrEmpty(dto.OrderNo), p => p.OrderNo.Contains(dto.OrderNo))
+            .WhereIF(!string.IsNullOrEmpty(dto.ProvinceNo), p => p.ProvinceNo.Contains(dto.ProvinceNo))
+            .WhereIF(dto.UpdateOrderType == "0", p => p.UpdateOrderType == EUpdateType.ExpiredTime)
+            .WhereIF(dto.UpdateOrderType == "1", p => p.UpdateOrderType == EUpdateType.SourceChannel)
+            .OrderByDescending(p => p.CreationTime)
+           .ToListAsync();
+        return _mapper.Map<IReadOnlyList<OrderModifyingRecordsDto>>(list);
+    }
+
     #endregion
 
     #region 工单平移
@@ -6728,16 +6748,16 @@ public class OrderController : BaseController
         return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
     }
 
-	/// <summary>
-	/// 生成分析报告
-	/// </summary>
-	/// <param name="dtos"></param>
-	/// <returns></returns>
-	[HttpGet("analysis_report")]
-	[LogFilter("生成分析报告")]
-	public async Task<object> OrderAnalysisReportQuery([FromQuery] OrderAnalysisDetailDto dto)
-	{
-		 return await _orderAnalysisApplication.ReportQuery(dto, HttpContext.RequestAborted);
-	}
-	#endregion
+    /// <summary>
+    /// 生成分析报告
+    /// </summary>
+    /// <param name="dtos"></param>
+    /// <returns></returns>
+    [HttpGet("analysis_report")]
+    [LogFilter("生成分析报告")]
+    public async Task<object> OrderAnalysisReportQuery([FromQuery] OrderAnalysisDetailDto dto)
+    {
+        return await _orderAnalysisApplication.ReportQuery(dto, HttpContext.RequestAborted);
+    }
+    #endregion
 }

+ 252 - 421
src/Hotline.Api/Controllers/TestController.cs

@@ -14,6 +14,7 @@ using Hotline.CallCenter.Calls;
 using Hotline.CallCenter.Configs;
 using Hotline.CallCenter.Ivrs;
 using Hotline.CallCenter.Tels;
+using Hotline.Configurations;
 using Hotline.ContingencyManagement;
 using Hotline.FlowEngine;
 using Hotline.FlowEngine.Definitions;
@@ -44,6 +45,7 @@ using Hotline.Users;
 using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Builder.Extensions;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.Options;
 using MiniExcelLibs;
@@ -117,6 +119,7 @@ public class TestController : BaseController
     private readonly IRepository<Tel> _telRepository;
     private readonly IOrderDomainService _orderDomainService;
     private readonly ICallApplication _callApplication;
+    private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
 
     private readonly ISystemSettingCacheManager _systemSettingCacheManager;
     //private readonly ITypedCache<List<User>> _cache;
@@ -170,9 +173,10 @@ IRepository<EnforcementOrdersHandler> enforcementOrdersHandlerRepository,
 IRepository<ContingencyManagementHotspot> contingencyManagementHotspotRepository,
 IRepository<Hotspot> hotspotRepository,
 IOrderDomainService orderDomainService,
-ICallApplication callApplication
-,
-ICalcExpireTime expireTime)
+ICallApplication callApplication,
+        IOptionsSnapshot<AppConfiguration> appOptions,
+        ISystemSettingCacheManager systemSettingCacheManager
+        )
     {
         _logger = logger;
         //_authorizeGenerator = authorizeGenerator;
@@ -218,7 +222,8 @@ ICalcExpireTime expireTime)
         _telRepository = telRepository;
         _orderDomainService = orderDomainService;
         _callApplication = callApplication;
-        _expireTime = expireTime;
+        _appOptions = appOptions;
+        _systemSettingCacheManager = systemSettingCacheManager;
     }
 
 
@@ -440,14 +445,14 @@ ICalcExpireTime expireTime)
             foreach (var item in list)
             {
                 var creationTimeHandleDurationWorkday = item.FiledTime.HasValue
-                  ? 
+                  ?
                   //_timeLimitDomainService.CalcWorkTimeEx(
                   await _expireTime.CalcWorkTimeEx(
                       item.CreationTime, item.FiledTime.Value,
                   item.ProcessType is EProcessType.Zhiban)
                   : 0;
                 var centerToOrgHandleDurationWorkday = item.FiledTime.HasValue && item.CenterToOrgTime.HasValue
-                    ? 
+                    ?
                     //_timeLimitDomainService.CalcWorkTimeEx(
                     await _expireTime.CalcWorkTimeEx(
                         item.CenterToOrgTime.Value, item.FiledTime.Value,
@@ -659,7 +664,7 @@ ICalcExpireTime expireTime)
     [HttpGet("t2")]
     public async Task<string> GetCacheAllowAnonymous()
     {
-        var systemAdministrator = _systemSettingCacheManager.GetSetting(SettingConstants.SystemAdministrator)?.SettingValue[0]; 
+        var systemAdministrator = _systemSettingCacheManager.GetSetting(SettingConstants.SystemAdministrator)?.SettingValue[0];
         return systemAdministrator;
     }
 
@@ -670,205 +675,10 @@ ICalcExpireTime expireTime)
         return systemAdministrator;
     }
 
-    [AllowAnonymous]
-    [HttpPost("t3")]
-    public async Task TestExportExcel()
+    [HttpGet("t4")]
+    public async Task<string> Test4()
     {
-        var orders = await _orderRepository.Queryable()
-            //.Includes(d => d.Workflow, x => x.Steps.Where(d => d.BusinessType == EBusinessType.Send))
-            //.Where(d=>d.Workflow.Steps.Any(d=>d.BusinessType == EBusinessType.Send))
-            .Where(d => d.Status != EOrderStatus.WaitForAccept && d.CenterToOrgTime == null)
-            .ToListAsync(HttpContext.RequestAborted);
-
-        var orderIds = orders.Select(d => d.Id).ToList();
-        var steps = await _workflowStepRepository.Queryable()
-            .Where(d => orderIds.Contains(d.ExternalId) &&
-                        d.BusinessType == EBusinessType.Send &&
-                        d.Status == EWorkflowStepStatus.Handled)
-            .OrderBy(d => d.CreationTime)
-            .ToListAsync(HttpContext.RequestAborted);
-
-        _logger.LogWarning($"取到steps: {steps.Count} 条");
-        var updateOrders = new List<Order>();
-        foreach (var order in orders)
-        {
-            var step = steps.Where(d => d.ExternalId == order.Id)
-                .OrderBy(d => d.CreationTime)
-                .FirstOrDefault();
-            if (step is null) continue;
-
-            order.CenterToOrgTime = step.HandleTime;
-            order.CenterToOrgHandlerId = step.HandlerId;
-            order.CenterToOrgHandlerName = step.HandlerName;
-            order.CenterToOrgOpinion = step.Opinion;
-
-            var handleDuration = order.CenterToOrgTime.HasValue && order.ActualHandleTime.HasValue
-                ? 
-                // _timeLimitDomainService.CalcWorkTime(
-                await _expireTime.CalcWorkTime(
-                    order.CenterToOrgTime.Value,
-                    order.ActualHandleTime.Value, order.ProcessType is EProcessType.Zhiban)
-                : 0;
-            var fileDuration = order.CenterToOrgTime.HasValue && order.FiledTime.HasValue
-                ? await _expireTime.CalcWorkTime(order.CenterToOrgTime.Value, order.FiledTime.Value, order.ProcessType is EProcessType.Zhiban)
-                : 0;
-            //var allDuration = order.StartTime.HasValue
-            //    ? _timeLimitDomainService.CalcWorkTime(order.StartTime.Value, order.FiledTime.Value,
-            //        order.ProcessType is EProcessType.Zhiban)
-            //    : 0;
-            order.SetHandleDuration();
-            order.SetFileDuration();
-
-            order.HandleDurationWorkday = handleDuration;
-            order.FileDurationWorkday = fileDuration;
-
-            updateOrders.Add(order);
-        }
-
-        _logger.LogWarning($"更新工单:{updateOrders.Count} 条");
-        await _orderRepository.UpdateRangeAsync(updateOrders, HttpContext.RequestAborted);
-    }
-
-    [AllowAnonymous]
-    [HttpPost("t4")]
-    public async Task TestExportExcel1()
-    {
-        var numbers = new List<string>
-        {
-            "20240623000180",
-            "20240622000097",
-            "20240621000055",
-            "20240622000185",
-            "20240623000025",
-            "20240621000099",
-            "20240621000270",
-            "20240622000060",
-            "20240621000144",
-        };
-
-        var orders = await _orderRepository.Queryable()
-            .Includes(d => d.OrderExtension)
-            .Where(d => numbers.Contains(d.No))
-            .ToListAsync(HttpContext.RequestAborted);
-        _logger.LogWarning($"order count: {orders.Count}");
-
-        var workflowIds = orders.Select(d => d.WorkflowId).ToList();
-        var workflows = await _workflowRepository.Queryable()
-            .Includes(d => d.Steps, x => x.WorkflowTrace)
-            .Where(d => workflowIds.Contains(d.Id))
-            .ToListAsync(HttpContext.RequestAborted);
-
-        //var workflowIds = orders.Select(d => d.WorkflowId).ToList();
-        //var workflows = await _workflowRepository.Queryable()
-        //    .Includes(d => d.Steps, x => x.WorkflowTrace)
-        //    //.Includes(d=>d.Traces)
-        //    .Where(d => workflowIds.Contains(d.Id))
-        //    .ToListAsync(HttpContext.RequestAborted);
-
-        var updateOrders = new List<Order>();
-        foreach (var order in orders)
-        {
-            var workflow = workflows.First(d => d.Id == order.WorkflowId);
-
-            _mapper.Map(workflow, order);
-            var now = order.FiledTime.Value;//DateTime.Now;
-            var handleDuration = order.StartTime.HasValue
-                ? await _expireTime.CalcWorkTime(order.StartTime.Value, now, order.ProcessType is EProcessType.Zhiban)
-                : 0;
-            var fileDuration = order.CenterToOrgTime.HasValue
-                ? await _expireTime.CalcWorkTime(order.CenterToOrgTime.Value, now, order.ProcessType is EProcessType.Zhiban)
-                : 0;
-            var allDuration = order.StartTime.HasValue
-                ? await _expireTime.CalcWorkTime(order.StartTime.Value, now, order.ProcessType is EProcessType.Zhiban)
-                : 0;
-            var creationTimeHandleDurationWorkday = order.ActualHandleTime.HasValue
-                   ? await _expireTime.CalcWorkTime(order.CreationTime, now, order.ProcessType is EProcessType.Zhiban)
-                   : 0;
-            var centerToOrgHandleDurationWorkday = order.ActualHandleTime.HasValue && order.CenterToOrgTime.HasValue
-                ? await _expireTime.CalcWorkTime(order.CenterToOrgTime.Value, now, order.ProcessType is EProcessType.Zhiban)
-                : 0;
-
-            //order.File(now, handleDuration, fileDuration, allDuration, creationTimeHandleDurationWorkday, centerToOrgHandleDurationWorkday);
-
-            order.HandleDurationWorkday = handleDuration;
-            order.FileDurationWorkday = fileDuration;
-            order.AllDurationWorkday = allDuration;
-            order.CreationTimeHandleDurationWorkday = creationTimeHandleDurationWorkday;
-            order.CenterToOrgHandleDurationWorkday = centerToOrgHandleDurationWorkday;
-
-            //计算实际办结时长
-            order.SetHandleDuration();
-            order.SetFileDuration();
-            order.SetAllDuration();
-            order.SetCreationTimeHandleDurationWorkday();
-            order.SetCenterToOrgHandleDurationWorkday();
-
-            var endStep = workflow.Steps.FirstOrDefault(d => d.StepType == EStepType.End);
-            //var endTrace = workflow.Steps.FirstOrDefault(d => d.WorkflowTrace.StepType == EStepType.End)?.WorkflowTrace;
-            if (endStep is null)
-            {
-                _logger.LogWarning($"endStep 为空, orderNo:{order.No}");
-                continue;
-            }
-
-            var step = workflow.Steps.FirstOrDefault(d => d.Id == endStep.PrevStepId);
-            //var trace = workflow.Steps.FirstOrDefault(d => d.WorkflowTrace.Id == endTrace.PrevStepId)?.WorkflowTrace;
-            if (step is null)
-            {
-                _logger.LogWarning($"step 为空, orderNo:{order.No}");
-                continue;
-            }
-
-            var trace = step.WorkflowTrace;
-            order.FileUserId = trace.HandlerId;
-            order.FileUserName = trace.HandlerName;
-            order.FileUserOrgId = trace.HandlerOrgId;
-            order.FileUserOrgName = trace.HandlerOrgName;
-            order.FileOpinion = trace.Opinion;
-
-            //记录冗余归档数据
-            if (workflow.Steps.Any(x => x.BusinessType == Share.Enums.FlowEngine.EBusinessType.Send))
-            {
-                order.FileUserRole = EFileUserType.Dispatch;
-            }
-            else
-            {
-                order.FileUserRole = EFileUserType.Seat;
-            }
-            if (order.ProcessType == EProcessType.Jiaoban)
-            {
-                order.FileUserRole = EFileUserType.Org;
-            }
-
-            ////是否已解决
-            //order.IsResolved = true;//notification.Dto.External == null ? false : notification.Dto.External.IsResolved;
-
-            //await _orderRepository.UpdateAsync(order, cancellationToken);
-            updateOrders.Add(order);
-
-            //var callRecord = await _trCallRecordRepository.GetAsync(p => p.CallAccept == order.CallId, cancellationToken); //由CallAccept改为OtherAccept
-            var orderFlowDto = new OrderFlowDto
-            {
-                Order = _mapper.Map<OrderDto>(order),
-                WorkflowTrace = _mapper.Map<WorkflowTraceDto>(trace)
-            };
-            var callRecord = await _trCallRecordRepository.GetAsync(p => p.OtherAccept == order.CallId, HttpContext.RequestAborted);
-            if (callRecord != null)
-            {
-                orderFlowDto.TrCallRecordDto = _mapper.Map<TrCallDto>(callRecord);
-            }
-            //这里需要判断是否是警情退回
-            orderFlowDto.IsNonPoliceReturn = false;//notification.Dto.External == null ? false : notification.Dto.External.IsPoliceReturn;
-            await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFiled, orderFlowDto, cancellationToken: HttpContext.RequestAborted);
-            //写入质检  针对受理之后直接结束的工单
-            await _qualityApplication.AddQualityAsync(EQualitySource.Accepted, order.Id, HttpContext.RequestAborted);
-
-            //司法行政监督管理-工单处理
-            //await _enforcementApplication.AddEnforcementOrderAsync(order, HttpContext.RequestAborted);
-        }
-
-        //_logger.LogWarning($"更新orders:{updateOrders.Count}");
-        //await _orderRepository.UpdateRangeAsync(updateOrders, HttpContext.RequestAborted);
+        return DateTime.Now.ToString("O");
     }
 
     [AllowAnonymous]
@@ -897,234 +707,255 @@ ICalcExpireTime expireTime)
         return $"{publicKey} \r\n {privateKey}";
     }
 
-    /// <summary>
-    /// 处理错误工单数据
-    /// </summary>
-    /// <returns></returns>
-    [HttpGet("handle-order-data")]
     [AllowAnonymous]
-    public async Task HandleData()
+    [HttpGet("republish")]
+    public async Task Republish()
     {
-        //var steps = await _workflowStepRepository.Queryable()
-        //    .LeftJoin<Order>((ws, d) => ws.ExternalId == d.Id)
-        //    .Where((ws, d) => d.Status == EOrderStatus.Handling && d.ProcessType == EProcessType.Zhiban && ws.Status == EWorkflowStepStatus.Handled && ws.StepType == EStepType.End)
-        //    .ToListAsync(HttpContext.RequestAborted);
-        var steps = await _workflowStepRepository.Queryable()
-            .LeftJoin<Order>((ws, d) => ws.ExternalId == d.Id)
-            .Where((ws, d) => d.Status == EOrderStatus.Handling && d.ProcessType == EProcessType.Zhiban && ws.Status == EWorkflowStepStatus.Handled && ws.StepType == EStepType.End)
-            .ToListAsync(HttpContext.RequestAborted);
-
-        _logger.LogInformation($"取到数据{steps.Count}条");
-        foreach (var step in steps)
+        var provinceNos = new List<string>
         {
-            var order = await _orderDomainService.GetOrderAsync(step.ExternalId,
-                        withExtension: true, cancellationToken: HttpContext.RequestAborted);
-            var now = step.HandleTime.Value;
-            var handleDuration = order.CenterToOrgTime.HasValue && order.ActualHandleTime.HasValue
-                ? await _expireTime.CalcWorkTime(order.CenterToOrgTime.Value, order.ActualHandleTime.Value, order.ProcessType is EProcessType.Zhiban)
-                : 0;
-            var fileDuration = order.CenterToOrgTime.HasValue
-                ? await _expireTime.CalcWorkTime(order.CenterToOrgTime.Value, now, order.ProcessType is EProcessType.Zhiban)
-                : 0;
-            var allDuration = order.StartTime.HasValue
-                ? await _expireTime.CalcWorkTime(order.StartTime.Value, now, order.ProcessType is EProcessType.Zhiban)
-                : 0;
-            var creationTimeHandleDurationWorkday = order.ActualHandleTime.HasValue
-                ? 
-                // _timeLimitDomainService.CalcWorkTimeEx(order.CreationTime, now,
-                await _expireTime.CalcWorkTimeEx(order.CreationTime, now,
-                order.ProcessType is EProcessType.Zhiban)
-                : 0;
-            var centerToOrgHandleDurationWorkday = order.ActualHandleTime.HasValue && order.CenterToOrgTime.HasValue
-                ? 
-                // _timeLimitDomainService.CalcWorkTimeEx(
-                await _expireTime.CalcWorkTimeEx(
-                    order.CenterToOrgTime.Value, now,
-                order.ProcessType is EProcessType.Zhiban)
-                : 0;
-            order.File(now, handleDuration, fileDuration, allDuration, creationTimeHandleDurationWorkday, centerToOrgHandleDurationWorkday);
-            order.FileUserId = step.HandlerId;// notification.Trace.HandlerId;
-            order.FileUserName = step.HandlerName;// notification.Trace.HandlerName;
-            order.FileUserOrgId = step.HandlerOrgId;// notification.Trace.HandlerOrgId;
-            order.FileUserOrgName = step.HandlerOrgName;// notification.Trace.HandlerOrgName;
-            order.FileOrgIsCenter = step.HandlerOrgIsCenter; //notification.Trace.HandlerOrgIsCenter;
-            order.FileOpinion = step.Opinion;//.Dto.Opinion;
-            order.FileUserRole = EFileUserType.Seat;
-            order.IsResolved = false;
-
-
-            order.ActualHandleStepCode = step.Code;
-            order.ActualHandleStepName = step.Name;
-            order.ActualHandleStepId = step.Id;
-            order.ActualHandleStepCreateTime = step.CreationTime;
-            order.ActualHandleStepAcceptTime = step.AcceptTime;
-            order.ActualHandleTime = step.HandleTime;
-            order.ActualHandlerId = step.HandlerId;
-            order.ActualHandlerName = step.HandlerName;
-            order.ActualHandleOrgCode = step.HandlerOrgId;
-            order.ActualHandleOrgName = step.HandlerOrgName;
-            order.ActualHandleOrgAreaCode = step.HandlerOrgAreaCode;
-            order.ActualHandleOrgAreaName = step.HandlerOrgAreaName;
-
-
-            order.CurrentStepId = order.ActualHandleStepId;
-            order.CurrentStepCode = order.ActualHandleStepCode;
-            order.CurrentStepName = order.ActualHandleStepName;
-            order.CurrentStepCreateTime = order.ActualHandleStepCreateTime;
-            order.CurrentStepAcceptTime = order.ActualHandleStepAcceptTime;
-            order.CurrentHandleTime = order.ActualHandleTime;
-            order.CurrentHandlerId = order.ActualHandlerId;
-            order.CurrentHandlerName = order.ActualHandlerName;
-            order.CurrentHandleOrgName = order.ActualHandleOrgName;
-            order.CurrentHandleOrgId = order.ActualHandleOrgCode;
-            order.CurrentHandleOrgAreaCode = order.ActualHandleOrgAreaCode;
-            order.CurrentHandleOrgAreaName = order.ActualHandleOrgAreaName;
-
-            await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
-            //var workflowTrace = await _workflowTraceRepository.Queryable().Where(x => x.WorkflowId == step.WorkflowId && x.Code == "end").OrderByDescending(x=>x.HandleTime).FirstAsync();
-            //var orderFlowDto = new OrderFlowDto
-            //{
-            //    Order = _mapper.Map<OrderDto>(order)
-            //};
-            //if (workflowTrace!=null)
-            //{
-            //    orderFlowDto.WorkflowTrace = _mapper.Map<WorkflowTraceDto>(workflowTrace);
-            //}
-            //if (order.SourceChannelCode == AppDefaults.SourceChannel.DianHua &&
-            //            !string.IsNullOrEmpty(order.CallId))
-            //{
-
-            //    var call = await _callApplication.GetCallAsync(order.CallId, HttpContext.RequestAborted);
-            //    if (call is not null)
-            //        orderFlowDto.TrCallRecordDto = _mapper.Map<TrCallDto>(call);
-            //}
-            //await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFiled, orderFlowDto, cancellationToken: HttpContext.RequestAborted);
-        }
-    }
-
-    /// <summary>
-    /// 处理工单流程错误数据   话务部直接归档件  没有归档节点
-    /// </summary>
-    /// <param name="StartTime"></param>
-    /// <param name="EndTime"></param>
-    /// <returns></returns>
-    [HttpGet("oders_workflow_step")]
-    [AllowAnonymous]
-    public async Task AddJudicialManagementOrders()
-    {
+            "RGDH9951150024082950312",
+"RGDH9951150024080750198",
+"RGDH9951150024083050009",
+"RGDH9951150024083150167",
+"RGDH9951150024083150102",
+"RGDH9951150024083050052",
+"RGDH9951150024080750184",
+"RGDH9951150024083050108",
+"RGDH9951150024083050314",
+"RGDH9951150024083050363",
+"RGDH9951150024083150243",
+"RGDH9951150024082850303",
+"QT9951150024082150023",
+"RGDH9951150024080750185",
+"RGDH9951150024083150065",
+"RGDH9951150024082850032",
+"RGDH9951150024082950295",
+"RGDH9951150024080750189",
+"RGDH9951150024082650189",
+"RGDH9951150024083050008",
+"RGDH9951150024082950036",
+"RGDH9951150024082850341",
+"RGDH9951150024080750215",
+"RGDH9951150024081450005",
+"RGDH9951150024080750212",
+"RGDH9951150024083050137",
+"RGDH9951150024082450124",
+"RGDH9951150024083150188",
+"RGDH9951150024083150083",
+"RGDH9951150024082850082",
+"RGDH9951150024080750174",
+"RGDH9951150024082950371",
+"RGDH9951150024082950114",
+"RGDH9951150024083050339",
+"RGDH9951150024080750217",
+"RGDH9951150024082950040",
+"RGDH9951150024083050031",
+"RGDH9951150024083150267",
+"RGDH9951150024083050064",
+"RGDH9951150024072650086",
+"RGDH9951150024082950360",
+"RGDH9951150024080750195",
+"RGDH9951150024080750210",
+"RGDH9951150024082950250",
+"RGDH9951150024083050145",
+"RGDH9951150024083050356",
+"RGDH9951150024080750194",
+"RGDH9951150024080750173",
+"RGDH9951150024080750213",
+"RGDH9951150024080750218",
+"RGDH9951150024083150271",
+"RGDH9951150024083150134",
+"RGDH9951150024080750179",
+"RGDH9951150024083050140",
+"RGDH9951150024083150262",
+"RGDH9951150024083050119",
+"RGDH9951150024083150177",
+"RGDH9951150024083050146",
+"RGDH9951150024080750223",
+"RGDH9951150024080750221",
+"RGDH9951150024083150130",
+"RGDH9951150024080750209",
+"RGDH9951150024083150237",
+"RGDH9951150024082850095",
+"RGDH9951150024082850223",
+"RGDH9951150024083050077",
+"RGDH9951150024082950118",
+"RGDH9951150024082850056",
+"RGDH9951150024082550177",
+"RGDH9951150024083050358",
+"RGDH9951150024080750193",
+"RGDH9951150024082150011",
+"RGDH9951150024082950167",
+"RGDH9951150024083050201",
+"RGDH9951150024082850048",
+"RGDH9951150024083150161",
+"RGDH9951150024083050300",
+"RGDH9951150024083150016",
+"RGDH9951150024083150101",
+"RGDH9951150024082850207",
+"RGDH9951150024083150144",
+"RGDH9951150024082750300",
+"RGDH9951150024083050230",
+"RGDH9951150024080750211",
+"RGDH9951150024082750379",
+"RGDH9951150024082850252",
+"RGDH9951150024083050204",
+"RGDH9951150024080750176",
+"RGDH9951150024080750190",
+"RGDH9951150024083150027",
+"RGDH9951150024082850308",
+"RGDH9951150024082850070",
+"RGDH9951150024082950068",
+"RGDH9951150024083050002",
+"RGDH9951150024083050130",
+"RGDH9951150024083050060",
+"RGDH9951150024082950282",
+"RGDH9951150024082950320",
+"RGDH9951150024082850312",
+"RGDH9951150024083150040",
+"RGDH9951150024080750202",
+"RGDH9951150024083150216",
+"RGDH9951150024082750156",
+"RGDH9951150024082850224",
+"RGDH9951150024083150238",
+"RGDH9951150024083050327",
+"RGDH9951150024082950090",
+"RGDH9951150024083150131",
+"RGDH9951150024080750187",
+"RGDH9951150024082350072",
+"RGDH9951150024080750177",
+"RGDH9951150024082950010",
+"RGDH9951150024082850263",
+"RGDH9951150024082850087",
+"RGDH9951150024083050234",
+"RGDH9951150024083150098",
+"RGDH9951150024083050166",
+"RGDH9951150024082850339",
+"RGDH9951150024083150157",
+"RGDH9951150024080150214",
+"RGDH9951150024083150149",
+"RGDH9951150024083150264",
+"RGDH9951150024080750200",
+"RGDH9951150024083150116",
+"RGDH9951150024082950188",
+"RGDH9951150024083050148",
+"RGDH9951150024082750338",
+"RGDH9951150024082950268",
+"RGDH9951150024083050337",
+"RGDH9951150024082250263",
+"RGDH9951150024080750196",
+"RGDH9951150024080750192",
+"RGDH9951150024082850272",
+"RGDH9951150024082650290",
+"RGDH9951150024083150117",
+"RGDH9951150024080750207",
+"RGDH9951150024080750201",
+"RGDH9951150024080750188",
+"RGDH9951150024083050011",
+"RGDH9951150024083050067",
+"RGDH9951150024083050193",
+"RGDH9951150024082850242",
+"RGDH9951150024082950121",
+"RGDH9951150024080750222",
+"RGDH9951150024082950280",
+"RGDH9951150024080750205",
+"RGDH9951150024083050334",
+"RGDH9951150024083150235",
+"RGDH9951150024082950156",
+"RGDH9951150024080750220",
+"RGDH9951150024082750209",
+"RGDH9951150024083150046",
+"RGDH9951150024080750214",
+"RGDH9951150024082850116",
+"RGDH9951150024083050082",
+"RGDH9951150024083150118",
+"RGDH9951150024082950338",
+"RGDH9951150024082950359",
+"RGDH9951150024083150156",
+"RGDH9951150024083150072",
+"RGDH9951150024082150001",
+"RGDH9951150024082850186",
+"RGDH9951150024082750377",
+"RGDH9951150024083150166",
+"RGDH9951150024083050255",
+"RGDH9951150024083050190",
+"RGDH9951150024080750175",
+"RGDH9951150024083050184",
+"RGDH9951150024083050021",
+"RGDH9951150024082850317",
+"RGDH9951150024082950146",
+"RGDH9951150024083150172",
+"RGDH9951150024083050354",
+"RGDH9951150024082850305",
+"RGDH9951150024082850351",
+"RGDH9951150024082950340",
+"RGDH9951150024083150273",
+"RGDH9951150024080750208",
+"RGDH9951150024083150053",
+"RGDH9951150024082850291",
+"RGDH9951150024082950104",
+"RGDH9951150024082850247",
+"RGDH9951150024082850320",
+"RGDH9951150024083050285",
+"RGDH9951150024082850011",
+"RGDH9951150024083050174",
+"RGDH9951150024083150212",
+"RGDH9951150024083050323",
+"RGDH9951150024080750224",
+"RGDH9951150024083150244",
+"RGDH9951150024080750199",
+"RGDH9951150024082850269",
+"RGDH9951150024082850053",
+"RGDH9951150024082950342",
+"RGDH9951150024082950046",
+"RGDH9951150024082950194"
+        };
+        _logger.LogWarning($"推送数据共:{provinceNos.Count}");
 
-        var steps = await _workflowStepRepository.Queryable()
-            .LeftJoin<Order>((ws, d) => ws.ExternalId == d.Id)
-            .Where((ws, d) => d.Status == EOrderStatus.Handling && ws.NextStepCode == "end" && ws.Status == EWorkflowStepStatus.Handled && ws.StepType == EStepType.Start)
+        var unpublishOrders = await _orderRepository.Queryable()
+            .Where(d => provinceNos.Contains(d.ProvinceNo) &&
+                        !string.IsNullOrEmpty(d.ProvinceNo) &&
+                        d.Status >= EOrderStatus.Filed)
             .ToListAsync(HttpContext.RequestAborted);
 
-        _logger.LogInformation($"取到数据 {steps.Count} 条");
-        foreach (var item in steps)
+        _logger.LogWarning($"准备开始推送:{unpublishOrders.Count}");
+
+        foreach (var order in unpublishOrders)
         {
-            ///组装数据
-            //Workflow workflow
-            Workflow workflow = await _workflowDomainService.GetWorkflowAsync(item.WorkflowId, withDefine: true, withSteps: true,
-                cancellationToken: HttpContext.RequestAborted);
-            //WorkflowStep startStep
-            var startStep = workflow.Steps.FirstOrDefault(x => x.StepType == EStepType.Start);
-            if (startStep is null) continue;
-            //BasicWorkflowDto dto
-            BasicWorkflowDto dto = new BasicWorkflowDto
-            {
-                NextStepCode = "end",
-                NextStepName = "结束",
-                BackToCountersignEnd = false,
-                FlowDirection = null,
-                HandlerType = 0,
-                StepType = 0,
-                NextHandlers = new List<FlowStepHandler>(),
-                IsSms = false,
-                NextMainHandler = "",
-                IsStartCountersign = false,
-                External = new External
-                {
-                    TimeLimit = null,
-                    TimeLimitUnit = null,
-                    IsPoliceReturn = false,
-                    IsResolved = false,
-                },
-                BusinessType = EBusinessType.File,
-                ReviewResult = 0,
-                Remark = null,
-                Opinion = startStep.Opinion,
-                Files = new List<Share.Dtos.File.FileDto>()
-            };
-            //ISessionContext current
-            ISessionContext current = new ProvinceSessionContext
+            var trace = await _workflowTraceRepository.Queryable()
+                .FirstAsync(d => d.WorkflowId == order.WorkflowId && d.StepType == EStepType.End,
+                    HttpContext.RequestAborted);
+            var orderFlowDto = new OrderFlowDto
             {
-                //UserId = startStep.HandlerId,
-                //UserName = startStep.HandlerName,
-                OrgId = startStep.HandlerOrgId,
-                OrgName = startStep.HandlerOrgName,
-                OrgAreaCode = startStep.HandlerOrgAreaCode,
-                OrgAreaName = startStep.HandlerOrgAreaName,
-                OrgLevel = 1
+                Order = _mapper.Map<OrderDto>(order),
+                WorkflowTrace = _mapper.Map<WorkflowTraceDto>(trace)
             };
 
-            //StepDefine firstStepDefine
-            StepDefine firstStepDefine = workflow.WorkflowDefinition.FindStepDefine(startStep.NextStepCode);
-            //FlowAssignInfo flowAssignInfo
-            ////如果发起会签需检查是否支持发起会签
-            //var startStepDefine = workflow.WorkflowDefinition.FindStartStepDefine();
-
-            //下一节点是否为动态节点
-            var isNextDynamic = false;
-
-            FlowAssignInfo flowAssignInfo =
-                await _workflowApplication.GetNextStepFlowAssignInfoAsync(workflow, startStep, dto, firstStepDefine, isNextDynamic, HttpContext.RequestAborted);
-            //DateTime? expiredTime
-            DateTime? expiredTime = startStep.StepExpiredTime;
-
-            ///
-            await _mediator.Publish(
-                new StartWorkflowNotify(workflow, dto, flowAssignInfo, startStep.WorkflowTrace), HttpContext.RequestAborted);
-
-            //firstStep是否为end,t: 实际办理节点为startStep, 并且handlerId赋值 f: 实际办理节点为firstStep, handlerId未赋值
-            workflow.UpdateActualStepWhenHandle(startStep,
-                current.RequiredUserId, current.UserName,
-                current.RequiredOrgId, current.OrgName,
-                current.OrgAreaCode, current.OrgAreaName,
-                current.OrgLevel);
-
-            workflow.UpdateCurrentStepWhenHandle(startStep,
-                current.OrgAreaCode, current.OrgAreaName, current.OrgLevel);
-
-            var endTrace = await _workflowDomainService.EndAsync(workflow, dto, firstStepDefine,
-                startStep, current, expiredTime, HttpContext.RequestAborted);
-
-
-        }
-
-        _logger.LogInformation($"处理完成");
-    }
-
-    [HttpGet("order_participle")]
-    [AllowAnonymous]
-    public async Task OrderParticiple()
-    {
-        var tels = new List<Tel>();
-        for (int i = 5001; i <= 5010; i++)
-        {
-            tels.Add(new Tel
+            if (order.SourceChannelCode == AppDefaults.SourceChannel.DianHua &&
+                !string.IsNullOrEmpty(order.CallId))
             {
-                No = i.ToString()
-            });
-        }
+                if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.TianRun)
+                {
+                    var callRecord = await _callApplication.GetTianrunCallAsync(order.CallId, HttpContext.RequestAborted);
+                    if (callRecord != null)
+                    {
+                        orderFlowDto.TrCallRecordDto = _mapper.Map<TrCallDto>(callRecord);
+                    }
+                }
+                else if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.XingTang)
+                {
+                    var call = await _callApplication.GetCallAsync(order.CallId, HttpContext.RequestAborted);
+                    if (call is not null)
+                        orderFlowDto.TrCallRecordDto = _mapper.Map<TrCallDto>(call);
+                }
+            }
 
-        for (int i = 8001; i <= 9069; i++)
-        {
-            tels.Add(new Tel
-            {
-                No = i.ToString()
-            });
+            //这里需要判断是否是警情退回
+            orderFlowDto.IsNonPoliceReturn = false;
+            await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFiled, orderFlowDto, cancellationToken: HttpContext.RequestAborted);
+            _logger.LogWarning($"推送完成: {order.ProvinceNo}");
         }
-        
-        await _telRepository.AddRangeAsync(tels, HttpContext.RequestAborted);
-        
+
+        _logger.LogWarning($"推送完成");
     }
 }

+ 3 - 1
src/Hotline.Application/Jobs/XingTangCallsSyncJob.cs

@@ -13,6 +13,7 @@ using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.TrCallCenter;
 using Hotline.Share.Enums.CallCenter;
 using System.Dynamic;
+using Hotline.Share.Dtos.CallCenter;
 
 namespace Hotline.Application.Jobs
 {
@@ -92,7 +93,8 @@ namespace Hotline.Application.Jobs
                 //推省上
                 if (calls.Any())
                 {
-                    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineCallAdd, calls);
+                    var callIns = _mapper.Map<List<CallNativeDto>>(calls);
+                    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineCallAdd, callIns);
                 }
                 ////todo
                 //var callIns = calls.Where(d => d.Direction == ECallDirection.In).ToList();

+ 3 - 1
src/Hotline.Application/Mappers/CallMapperConfigs.cs

@@ -111,6 +111,7 @@ namespace Hotline.Application.Mappers
                 .Map(d => d.Duration, s => s.Duration)
                 .Map(d => d.TelNo, s => s.TelNo)
                 .Map(d => d.RecordingFileUrl, s => s.AudioFile)
+                .Map(d => d.OtherAccept, s => s.Id)
                 ;
 
             config.ForType<TrCallRecord, TrCallDtoNew>()
@@ -123,7 +124,8 @@ namespace Hotline.Application.Mappers
                 .Map(d => d.FromNo, s => s.CPN)
                 .Map(d => d.ToNo, s => s.CDPN)
                 .Map(d => d.EndRingTime, s => s.EndRingTimg)
-                .Map(d => d.AudioFile, s => s.RecordingAbsolutePath);
+                .Map(d => d.AudioFile, s => s.RecordingAbsolutePath)
+                .Map(d => d.BeginIvrTime, s => s.CreatedTime);
 
         }
 

+ 67 - 6
src/Hotline.Application/Subscribers/DatasharingSubscriber.cs

@@ -1,9 +1,10 @@
 using DotNetCore.CAP;
+using Hotline.Application.CallCenter;
 using Hotline.Application.FlowEngine;
 using Hotline.Application.Orders;
-using Hotline.Application.Quality;
 using Hotline.Authentications;
 using Hotline.Caching.Interfaces;
+using Hotline.Configurations;
 using Hotline.ContingencyManagement;
 using Hotline.File;
 using Hotline.FlowEngine.WorkflowModules;
@@ -12,18 +13,18 @@ using Hotline.Orders;
 using Hotline.OrderTranspond;
 using Hotline.Settings;
 using Hotline.Share.Dtos;
-using Hotline.Share.Dtos.CallCenter;
 using Hotline.Share.Dtos.ContingencyManagement;
 using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
 using Hotline.Share.Dtos.FlowEngine;
+using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.OrderTranspond;
+using Hotline.Share.Dtos.TrCallCenter;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Mq;
 using MapsterMapper;
-using PanGu;
-using StackExchange.Redis;
+using Microsoft.Extensions.Options;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
@@ -44,6 +45,7 @@ namespace Hotline.Application.Subscribers
         private readonly IRepository<OrderSendBack> _orderSendBackRepository;
         private readonly IWorkflowApplication _workflowApplication;
         private readonly IWorkflowDomainService _workflowDomainService;
+        private readonly IRepository<WorkflowTrace> _workflowTraceRepository;
         private readonly IFileRepository _fileRepository;
         private readonly IRepository<OrderUrge> _orderUrgeRepository;
         private readonly IRepository<OrderSupervise> _orderSuperviseRepository;
@@ -59,6 +61,8 @@ namespace Hotline.Application.Subscribers
         private readonly IRepository<OrderWarning> _orderWarningRepository;
         private readonly IRepository<OrderRevoke> _orderRevokeRepository;
         private readonly IRepository<ContingencyManagementOrders> _contingencyManagementOrdersRepository;
+        private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
+        private readonly ICallApplication _callApplication;
 
         public DataSharingSubscriber(
             IRepository<OrderVisit> orderVisitRepository,
@@ -70,6 +74,7 @@ namespace Hotline.Application.Subscribers
             IRepository<OrderSendBack> orderSendBackRepository,
             IWorkflowApplication workflowApplication,
             IWorkflowDomainService workflowDomainService,
+            IRepository<WorkflowTrace> workflowTraceRepository,
             IRepository<OrderUrge> orderUrgeRepository,
             IRepository<OrderSupervise> orderSuperviseRepository,
             IRepository<OrderVisitDetail> orderVisitedDetailRepository,
@@ -84,12 +89,14 @@ namespace Hotline.Application.Subscribers
             ISystemSettingCacheManager systemSettingCacheManager,
             IRepository<OrderWarning> orderWarningRepository,
              IRepository<OrderRevoke> orderRevokeRepository,
-             IRepository<ContingencyManagementOrders> contingencyManagementOrdersRepository
-            )
+             IRepository<ContingencyManagementOrders> contingencyManagementOrdersRepository,
+            IOptionsSnapshot<AppConfiguration> appOptions,
+            ICallApplication callApplication)
         {
             _orderSendBackRepository = orderSendBackRepository;
             _workflowApplication = workflowApplication;
             _workflowDomainService = workflowDomainService;
+            _workflowTraceRepository = workflowTraceRepository;
             _orderUrgeRepository = orderUrgeRepository;
             _orderSuperviseRepository = orderSuperviseRepository;
             _orderScreenRepository = orderScreenRepository;
@@ -111,6 +118,8 @@ namespace Hotline.Application.Subscribers
             _orderWarningRepository = orderWarningRepository;
             _orderRevokeRepository = orderRevokeRepository;
             _contingencyManagementOrdersRepository = contingencyManagementOrdersRepository;
+            _appOptions = appOptions;
+            _callApplication = callApplication;
         }
 
         /// <summary>
@@ -837,5 +846,57 @@ namespace Hotline.Application.Subscribers
                 await _contingencyManagementOrdersRepository.UpdateAsync(data, cancellationToken);
             }
         }
+
+        /// <summary>
+        /// 处理每天办理完成未及时推送办理结果的数据
+        /// </summary>
+        /// <param name="provinceNos"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        [CapSubscribe(EventNames.HotlineFiledOrdersRepublish)]
+        public async Task RepublishFiledOrders(List<string> provinceNos, CancellationToken cancellationToken)
+        {
+            var unpublishOrders = await _orderRepository.Queryable()
+                .Where(d => provinceNos.Contains(d.ProvinceNo) &&
+                            !string.IsNullOrEmpty(d.ProvinceNo) &&
+                            d.Status >= EOrderStatus.Filed)
+                .ToListAsync(cancellationToken);
+
+            foreach (var order in unpublishOrders)
+            {
+                var trace = await _workflowTraceRepository.Queryable()
+                    .FirstAsync(d => d.WorkflowId == order.WorkflowId && d.StepType == EStepType.End, cancellationToken);
+                var orderFlowDto = new OrderFlowDto
+                {
+                    Order = _mapper.Map<OrderDto>(order),
+                    WorkflowTrace = _mapper.Map<WorkflowTraceDto>(trace)
+                };
+
+                if (order.SourceChannelCode == AppDefaults.SourceChannel.DianHua &&
+                    !string.IsNullOrEmpty(order.CallId))
+                {
+                    if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.TianRun)
+                    {
+                        var callRecord = await _callApplication.GetTianrunCallAsync(order.CallId, cancellationToken);
+                        if (callRecord != null)
+                        {
+                            orderFlowDto.TrCallRecordDto = _mapper.Map<TrCallDto>(callRecord);
+                        }
+                    }
+                    else if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.XingTang)
+                    {
+                        var call = await _callApplication.GetCallAsync(order.CallId, cancellationToken);
+                        if (call is not null)
+                            orderFlowDto.TrCallRecordDto = _mapper.Map<TrCallDto>(call);
+                    }
+                }
+
+                //这里需要判断是否是警情退回
+                orderFlowDto.IsNonPoliceReturn = false;
+                await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFiled, orderFlowDto, cancellationToken: cancellationToken);
+
+            }
+        }
     }
+
 }

+ 1 - 1
src/Hotline.Share/Hotline.Share.csproj

@@ -7,7 +7,7 @@
     <GenerateDocumentationFile>True</GenerateDocumentationFile>
     <NoWarn>$(NoWarn);1591;8618;</NoWarn>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>1.0.92</Version>
+    <Version>1.0.94</Version>
   </PropertyGroup>
 
   <ItemGroup>

+ 6 - 1
src/Hotline.Share/Mq/EventNames.Order.cs

@@ -110,9 +110,12 @@ namespace Hotline.Share.Mq
         /// </summary>
         public const string HotlineOrderContingencyManagementState = "hotline.order.contingency.management.state";
 
+        /// <summary>
+        /// 处理每天办理完成未及时推送办理结果的数据 
+        /// </summary>
+        public const string HotlineFiledOrdersRepublish = "hotline.filed.orders.republish";
         #endregion
 
-
         #region 内部订阅
 
         /// <summary>
@@ -131,5 +134,7 @@ namespace Hotline.Share.Mq
         public const string HotlineBatchSmsTask = "hotline.order.batchsmstask";
 
         #endregion
+
+     
     }
 }

+ 29 - 0
src/Hotline.Share/Requests/OrderModifyingRecordsRequest.cs

@@ -0,0 +1,29 @@
+namespace Hotline.Share.Requests
+{
+    public record OrderModifyingRecordsRequest : PagedRequest
+    {
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        public DateTime? StartTime { get; set; }
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        public DateTime? EndTime { get; set; }
+
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        public string? OrderNo { get; set; }
+
+        /// <summary>
+        /// 省编号
+        /// </summary>
+        public string? ProvinceNo { get; set; }
+
+        /// <summary>
+        /// 修改类型 0:期满时间修改,1:来源方式修改
+        /// </summary>
+        public string? UpdateOrderType { get; set; }
+    }
+}

+ 0 - 30
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -2773,37 +2773,7 @@ namespace Hotline.FlowEngine.Workflows
             return step;
         }
 
-        ///// <summary>
-        ///// 依据配置生成过期时间
-        ///// </summary>
-        ///// <returns></returns>
-        //private DateTime CalculateExpiredTime(string defineCode, DateTime? time = null)
-        //{
-        //    time ??= DateTime.Now;
-        //    var config = GetConfig(defineCode);
-        //    return time.Value.AddDays(config.Days);
-        //}
-
-        //private string GetTimeLimit(string defineCode)
-        //{
-        //    return GetConfig(defineCode).Description;
-        //}
-
-        //private ConfigIncludeDescriptionAndTime GetConfig(string defineCode)
-        //{
-        //    return new ConfigIncludeDescriptionAndTime
-        //    {
-        //        Days = 7,
-        //        Description = "7个工作日"//todo 依据配置生成, Think about 工作日
-        //    };
-        //}
-
         #endregion
     }
 
-    public class ConfigIncludeDescriptionAndTime
-    {
-        public int Days { get; set; }
-        public string Description { get; set; }
-    }
 }