Przeglądaj źródła

Merge branch 'release' of http://110.188.24.182:10023/Fengwo/hotline into release

tangjiang 6 miesięcy temu
rodzic
commit
6e7028e83c

+ 9 - 8
src/Hotline.Api/Controllers/CommonPController.cs

@@ -256,13 +256,13 @@ namespace Hotline.Api.Controllers
 					})
 					.ToListAsync();
 				var waitedList = waitedDataList.Where(x => x.Status != EOrderStatus.Countersigning && 
-				((x.Time > DateTime.Now && x.Status < EOrderStatus.Filed) || (x.Time > x.ActualHandleTime && x.Status >= EOrderStatus.Filed))).Take(40).ToList();
+				((x.Time > DateTime.Now && x.Status < EOrderStatus.Filed) || (x.Time > x.ActualHandleTime && x.Status >= EOrderStatus.Filed))).OrderBy(x=> x.Time).Take(40).ToList();
 				waitedList = waitedList.Count > 0 ? waitedList.Copy() : waitedList;
 				//allNum += waitedList.Count > 40 ? 40 : waitedList.Count;
 				//allList.AddRange(waitedList);
 				// 已超期
 				var waitedExpiredDataList = waitedDataList.Where(x => (x.Time < DateTime.Now && x.Status < EOrderStatus.Filed) ||
-				                                                      (x.Time < x.ActualHandleTime && x.Status >= EOrderStatus.Filed)).Take(40).ToList();
+				                                                      (x.Time < x.ActualHandleTime && x.Status >= EOrderStatus.Filed)).OrderBy(x=>x.Time).Take(40).ToList();
 				waitedExpiredDataList = waitedExpiredDataList.Count > 0 ? waitedExpiredDataList.Copy() : waitedExpiredDataList;
 				waitedExpiredDataList.ForEach(x => x.Type = "WaitedExpired");
 				//allNum += waitedExpiredDataList.Count;
@@ -290,7 +290,7 @@ namespace Hotline.Api.Controllers
 				//allNum += visitDataList.Count;
 				//allList.AddRange(visitDataList);
 				//会签待办
-				var signDataList = waitedDataList.Where(x => x.Status == EOrderStatus.Countersigning).Take(40).ToList();
+				var signDataList = waitedDataList.Where(x => x.Status == EOrderStatus.Countersigning).OrderBy(x => x.Time).Take(40).ToList();
 				signDataList = signDataList.Count > 0 ? signDataList.Copy() : signDataList;
 				signDataList.ForEach(x => x.Type = "Sign");
 				//allNum += signDataList.Count;
@@ -325,7 +325,7 @@ namespace Hotline.Api.Controllers
 						                (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId))))
 						.Any())
 					.Where(d => d.Status < EOrderStatus.Filed && DateTime.Now > d.NearlyExpiredTime && DateTime.Now < d.ExpiredTime)
-					.OrderByDescending(d => d.CreationTime)
+					.OrderBy(d => d.NearlyExpiredTime)
 					.Select(d => new HomeOrderDto
 					{
 						No = d.No,
@@ -436,19 +436,20 @@ namespace Hotline.Api.Controllers
 					})
 					.ToListAsync();
 				var waitedList = waitedDataList.Where(x => x.Status != EOrderStatus.Countersigning &&
-				((x.Time > DateTime.Now && x.Status < EOrderStatus.Filed) || (x.Time > x.ActualHandleTime && x.Status >= EOrderStatus.Filed))).Take(40).ToList();
+				((x.Time > DateTime.Now && x.Status < EOrderStatus.Filed) || (x.Time > x.ActualHandleTime && x.Status >= EOrderStatus.Filed))).OrderBy(x=>x.Time).Take(40).ToList();
 				waitedList = waitedList.Count > 0 ? waitedList.Copy() : waitedList;
 				//allNum += waitedList.Count > 40 ? 40 : waitedList.Count;
 				//allList.AddRange(waitedList);
 				//已超期
 				var waitedExpiredDataList = waitedDataList.Where(x => (x.Time < DateTime.Now && x.Status < EOrderStatus.Filed) ||
-				                                                      (x.Time < x.ActualHandleTime && x.Status >= EOrderStatus.Filed)).Take(40).ToList();
+				                                                      (x.Time < x.ActualHandleTime && x.Status >= EOrderStatus.Filed))
+														  .OrderBy(x=> x.Time).Take(40).ToList();
 				waitedExpiredDataList = waitedExpiredDataList.Count > 0 ? waitedExpiredDataList.Copy() : waitedExpiredDataList;
 				waitedExpiredDataList.ForEach(x => x.Type = "WaitedExpired");
 				//allNum += waitedExpiredDataList.Count;
 				//allList.AddRange(waitedExpiredDataList);
 				//会签待办
-				var signDataList = waitedDataList.Where(x => x.Status == EOrderStatus.Countersigning).Take(40).ToList();
+				var signDataList = waitedDataList.Where(x => x.Status == EOrderStatus.Countersigning).OrderBy(x => x.Time).Take(40).ToList();
 				signDataList = signDataList.Count > 0 ? signDataList.Copy() : signDataList;
 				signDataList.ForEach(x => x.Type = "Sign");
 				
@@ -554,7 +555,7 @@ namespace Hotline.Api.Controllers
 						                (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId))))
 						.Any())
 					.Where(d => d.Status < EOrderStatus.Filed && DateTime.Now > d.NearlyExpiredTime && DateTime.Now < d.ExpiredTime)
-					.OrderByDescending(d => d.CreationTime)
+					.OrderBy(d => d.NearlyExpiredTime)
 					.Select(d => new HomeOrderDto
 					{
 						No = d.No,

+ 2 - 2
src/Hotline.Api/Controllers/OldHotlineController.cs

@@ -432,9 +432,9 @@ namespace Hotline.Api.Controllers
                 var result = Newtonsoft.Json.JsonConvert.DeserializeObject<HotlineStateResult>(respContentString);
                 return result?.Result;
             }
-            catch
+            catch (Exception ex)
             {
-                throw UserFriendlyException.SameMessage("账号加密失败!");
+                throw UserFriendlyException.SameMessage("账号加密失败!"+ex.Message);
             }
         }
     }

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

@@ -347,7 +347,7 @@ public class OrderController : BaseController
         foreach (var item in dto.Ids)
         {
             var order = await _orderRepository.GetAsync(item, HttpContext.RequestAborted);
-            if (order != null)
+            if (order != null &&  order.Status == EOrderStatus.Filed)
             {
                 try
                 {

+ 2 - 2
src/Hotline.Application/Handlers/FlowEngine/WorkflowRecallHandler.cs

@@ -78,7 +78,8 @@ public class WorkflowRecallHandler : INotificationHandler<RecallNotify>
                         withExtension: true, cancellationToken: cancellationToken);
                     //order.UpdateHandlingStatus(workflow.IsInCountersign);
                     _mapper.Map(workflow, order);
-                    if (notification.TargetStep.StepType is EStepType.Start)
+                    order.FileEmpty();
+					if (notification.TargetStep.StepType is EStepType.Start)
                     {
                         //if (!bool.TryParse(
                         //        _systemSettingCacheManager.GetSetting(SettingConstants.IsRecallToSeatDesignated)?.SettingValue[0],
@@ -86,7 +87,6 @@ public class WorkflowRecallHandler : INotificationHandler<RecallNotify>
                         //    isRecallToSeatDesignated = false;
                         //var isRecallToSeatDesignated = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.IsRecallToSeatDesignated).SettingValue[0]);
                         order.Status = EOrderStatus.SpecialToUnAccept;
-                        order.FileEmpty();
                         //if (isRecallToSeatDesignated)
                         //{
                         //    if (data.HandlerType is EHandlerType.Role or EHandlerType.AssignedUser)

+ 44 - 4
src/Hotline.Application/Orders/OrderApplication.cs

@@ -66,6 +66,7 @@ using Hotline.EventBus;
 using Hotline.Orders.Notifications;
 using Hotline.OrderTranspond;
 using Newtonsoft.Json;
+using static NPOI.SS.Format.CellNumberFormatter;
 
 namespace Hotline.Application.Orders;
 
@@ -107,8 +108,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     private readonly ICalcExpireTime _expireTime;
     private readonly IRepository<OrderObserve> _orderObserveRepository;
     private readonly IOrderTerminateRepository _orderTerminateRepository;
+    private readonly IRepository<OrderPublishHistory> _orderPublishHistoryRepository;
 
-	public OrderApplication(
+    public OrderApplication(
         IOrderDomainService orderDomainService,
         IOrderRepository orderRepository,
         IWorkflowDomainService workflowDomainService,
@@ -143,7 +145,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         ISessionContextProvider sessionContextProvider,
         IRepository<TranspondCityRawData> transpondCityRawDataRepository,
         IRepository<OrderObserve> orderObserveRepository,
-        IOrderTerminateRepository orderTerminateRepository)
+        IOrderTerminateRepository orderTerminateRepository,
+        IRepository<OrderPublishHistory> orderPublishHistoryRepository)
     {
         _orderDomainService = orderDomainService;
         _workflowDomainService = workflowDomainService;
@@ -179,7 +182,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         _transpondCityRawDataRepository = transpondCityRawDataRepository;
         _orderObserveRepository = orderObserveRepository;
         _orderTerminateRepository = orderTerminateRepository;
-	}
+        _orderPublishHistoryRepository = orderPublishHistoryRepository;
+    }
 
     /// <summary>
     /// 更新工单办理期满时间(延期调用,其他不调用)
@@ -2367,9 +2371,45 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 
             //特提(撤回至发起)
             if (!string.IsNullOrEmpty(order.WorkflowId))
+            {
                 //await _workflowDomainService.RecallToStartStepAsync(order.WorkflowId, "省工单重派", current, order.Status >= EOrderStatus.Filed, cancellationToken);
-                await _workflowDomainService.RecallToCenterFirstToSendAsync(order.WorkflowId, "省工单重派", order.Status >= EOrderStatus.Filed,
+                var isPaiDan = await _workflowDomainService.RecallToCenterFirstToSendAsync(order.WorkflowId, "省工单重派", order.Status >= EOrderStatus.Filed,
                     order.ExpiredTime, cancellationToken);
+                order.FileEmpty();
+                if (isPaiDan)
+                {
+                    order.Status = EOrderStatus.Handling;
+                }
+                else
+                {
+                    order.Status = EOrderStatus.WaitForAccept;
+                }
+                await _orderRepository.UpdateAsync(order, cancellationToken);
+                //处理回访和发布信息
+              
+                var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == order.Id);
+                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, cancellationToken);
+                    await _orderPublishRepository.RemoveAsync(publish, false, cancellationToken);
+                }
+
+                var visit = await _orderVisitRepository.GetAsync(x => x.OrderId == order.Id&& x.VisitState != EVisitState.None);
+                if (visit != null)
+                {
+                    visit.VisitState = EVisitState.None;
+                    await _orderVisitRepository.UpdateAsync(visit,cancellationToken);
+                }
+
+            }
             //await _workflowDomainService.RecallToStartStepAsync(order.WorkflowId, "省工单重派", current, cancellationToken);
         }
         return _mapper.Map<AddOrderResponse>(order);

+ 11 - 1
src/Hotline.Application/Subscribers/DatasharingSubscriber.cs

@@ -297,8 +297,18 @@ namespace Hotline.Application.Subscribers
             }
             else
             {
-                await _workflowDomainService.RecallToCenterFirstToSendAsync(order.WorkflowId, dto.Opinion,
+                var isPaiDan = await _workflowDomainService.RecallToCenterFirstToSendAsync(order.WorkflowId, dto.Opinion,
                     order.Status >= EOrderStatus.Filed, order.ExpiredTime, cancellationToken);
+                order.FiledTime = null;
+                if (isPaiDan)
+                {
+                    order.Status = EOrderStatus.Handling;
+                }
+                else
+                {
+                    order.Status = EOrderStatus.WaitForAccept;
+                }
+                await _orderRepository.UpdateAsync(order, cancellationToken);
             }
         }
 

+ 1 - 1
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -84,7 +84,7 @@ namespace Hotline.FlowEngine.Workflows
         /// 特提至中心(优先派单组其次坐席)
         /// </summary>
         /// <returns></returns>
-        Task RecallToCenterFirstToSendAsync(string workflowId, string opinion, bool isOrderFiled, DateTime? expiredTime,
+        Task<bool> RecallToCenterFirstToSendAsync(string workflowId, string opinion, bool isOrderFiled, DateTime? expiredTime,
             CancellationToken cancellationToken);
 
         ///// <summary>

+ 5 - 2
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -1185,10 +1185,11 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 特提至中心(优先派单组其次坐席)
         /// </summary>
-        /// <returns></returns>
-        public async Task RecallToCenterFirstToSendAsync(string workflowId, string opinion, bool isOrderFiled,
+        /// <returns>true 派单组  false 话务部</returns>
+        public async Task<bool> RecallToCenterFirstToSendAsync(string workflowId, string opinion, bool isOrderFiled,
             DateTime? expiredTime, CancellationToken cancellationToken)
         {
+            bool isPaiDan = true;
             var workflow = await GetWorkflowAsync(workflowId, withDefine: true, withSteps: true, withTraces: true, withCountersigns: true,
                 cancellationToken: cancellationToken);
             var sendStep = workflow.Steps.FirstOrDefault(d => d.BusinessType == EBusinessType.Send);
@@ -1260,7 +1261,9 @@ namespace Hotline.FlowEngine.Workflows
                 //flowAssignInfo.FlowAssignType = EFlowAssignType.Role;
                 await RecallAsync(workflow, dto, targetStepDefine, flowAssignInfo, EWorkflowTraceType.Recall, expiredTime, isOrderFiled,
                     cancellationToken);
+                isPaiDan = false;
             }
+            return isPaiDan;
         }
 
         //private async Task RecallToTargetStepAsync(Workflow workflow, WorkflowStep targetStep, string opinion, ISessionContext current,