Эх сурвалжийг харах

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

Dun.Jason 8 сар өмнө
parent
commit
62decb9e2a

+ 13 - 6
src/Hotline.Api/Controllers/CommonPController.cs

@@ -248,12 +248,14 @@ namespace Hotline.Api.Controllers
 						CounterSignType = d.CounterSignType
 					})
 					.ToListAsync();
-				var waitedList = waitedDataList.Take(40).Copy().ToList();
+				var waitedList = waitedDataList.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).Copy().ToList();
+				                                                      (x.Time < x.ActualHandleTime && x.Status >= EOrderStatus.Filed)).Take(40).ToList();
+				waitedExpiredDataList = waitedExpiredDataList.Count > 0 ? waitedExpiredDataList.Copy() : waitedExpiredDataList;
 				waitedExpiredDataList.ForEach(x => x.Type = "WaitedExpired");
 				//allNum += waitedExpiredDataList.Count;
 				//allList.AddRange(waitedExpiredDataList);
@@ -280,7 +282,8 @@ namespace Hotline.Api.Controllers
 				//allNum += visitDataList.Count;
 				//allList.AddRange(visitDataList);
 				//会签待办
-				var signDataList = waitedDataList.Where(x => x.CounterSignType == ECounterSignType.Center || x.CounterSignType == ECounterSignType.Department).Take(40).Copy().ToList();
+				var signDataList = waitedDataList.Where(x => x.CounterSignType == ECounterSignType.Center || x.CounterSignType == ECounterSignType.Department).Take(40).ToList();
+				signDataList = signDataList.Count > 0 ? signDataList.Copy() : signDataList;
 				signDataList.ForEach(x => x.Type = "Sign");
 				//allNum += signDataList.Count;
 				//allList.AddRange(signDataList);
@@ -412,18 +415,22 @@ namespace Hotline.Api.Controllers
 						CounterSignType = d.CounterSignType
 					})
 					.ToListAsync();
-				var waitedList = waitedDataList.Take(40).Copy().ToList();
+				var waitedList = waitedDataList.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).Copy().ToList();
+				                                                      (x.Time < x.ActualHandleTime && x.Status >= EOrderStatus.Filed)).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.CounterSignType == ECounterSignType.Center || x.CounterSignType == ECounterSignType.Department).Take(40).Copy().ToList();
+				var signDataList = waitedDataList.Where(x => x.CounterSignType == ECounterSignType.Center || x.CounterSignType == ECounterSignType.Department).Take(40).ToList();
+				signDataList = signDataList.Count > 0 ? signDataList.Copy() : signDataList;
 				signDataList.ForEach(x => x.Type = "Sign");
+				
 				//allNum += signDataList.Count;
 				//allList.AddRange(signDataList);
 				//甄别待审批

+ 43 - 16
src/Hotline.Api/Controllers/OrderController.cs

@@ -3939,7 +3939,8 @@ public class OrderController : BaseController
                 audit.State = ESendBackAuditState.End;
                 audit.AuditUser = "默认通过";
                 audit.AuditTime = DateTime.Now;
-                var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
+                dto.ExpiredTime = order.ExpiredTime;
+				var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
                 var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
                     ? EProcessType.Zhiban
                     : EProcessType.Jiaoban;
@@ -3994,9 +3995,11 @@ public class OrderController : BaseController
         //执行退回
         if (sendBack.State == ESendBackAuditState.End)
         {
-            //string applicantId, string applicantOrgId, string[] applicantRoleIds,
-            //    ISessionContext current, CancellationToken cancellationToken);
-            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);
@@ -4004,7 +4007,6 @@ public class OrderController : BaseController
                               flowDirection == EFlowDirection.CenterToCenter
                 ? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
-            var order = await _orderRepository.Queryable().Includes(d => d.Workflow).FirstAsync(d => d.Id == sendBack.OrderId);
 			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 })
@@ -4045,14 +4047,15 @@ public class OrderController : BaseController
             //执行退回
             if (sendBack.State == ESendBackAuditState.End)
             {
-                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);
                 var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
                     ? EProcessType.Zhiban
                     : EProcessType.Jiaoban;
-                var order = await _orderRepository.Queryable().Includes(d => d.Workflow).FirstAsync(d => d.Id == sendBack.OrderId);
                 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 })
@@ -4404,10 +4407,16 @@ public class OrderController : BaseController
             var processType = dto.FlowDirection is EFlowDirection.OrgToCenter or EFlowDirection.CenterToCenter or EFlowDirection.FiledToCenter
                 ? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
-            //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 })
+            if (expiredTime.ExpiredTime < order.ExpiredTime)
+            {
+                expiredTime.ExpiredTime = order.ExpiredTime;
+                expiredTime.NearlyExpiredTime = order.NearlyExpiredTime;
+                expiredTime.NearlyExpiredTimeOne = order.NearlyExpiredTimeOne;
+			}
+			//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,
@@ -4525,7 +4534,13 @@ public class OrderController : BaseController
                 var expiredTime = _timeLimitDomainService.CalcEndTime(DateTime.Now,
                     ETimeType.WorkDay,
                     dto.TimeLimit.Value, order.AcceptTypeCode);
-                endTime = expiredTime.EndTime;
+                if (expiredTime.ExpiredTime < order.ExpiredTime)
+                {
+	                expiredTime.ExpiredTime = order.ExpiredTime;
+	                expiredTime.NearlyExpiredTime = order.NearlyExpiredTime;
+	                expiredTime.NearlyExpiredTimeOne = order.NearlyExpiredTimeOne;
+                }
+				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);
@@ -4613,8 +4628,14 @@ public class OrderController : BaseController
             //if (dto.AlterTime)
             //{
             var expiredTime = _timeLimitDomainService.CalcEndTime(DateTime.Now, order.AcceptTypeCode);
-            //var processType = dto.FlowDirection == EFlowDirection.OrgToCenter || dto.FlowDirection == EFlowDirection.CenterToCenter ? EProcessType.Zhiban : EProcessType.Jiaoban;
-            var processType = special.FlowDirection is EFlowDirection.OrgToCenter or EFlowDirection.CenterToCenter or EFlowDirection.FiledToCenter
+            if (expiredTime.ExpiredTime < order.ExpiredTime)
+            {
+	            expiredTime.ExpiredTime = order.ExpiredTime;
+	            expiredTime.NearlyExpiredTime = order.NearlyExpiredTime;
+	            expiredTime.NearlyExpiredTimeOne = order.NearlyExpiredTimeOne;
+            }
+			//var processType = dto.FlowDirection == EFlowDirection.OrgToCenter || dto.FlowDirection == EFlowDirection.CenterToCenter ? EProcessType.Zhiban : EProcessType.Jiaoban;
+			var processType = special.FlowDirection is EFlowDirection.OrgToCenter or EFlowDirection.CenterToCenter or EFlowDirection.FiledToCenter
                 ? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
             await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ExpiredTime = expiredTime.ExpiredTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime, NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne, ProcessType = processType, Status = EOrderStatus.Special })
@@ -4722,8 +4743,14 @@ public class OrderController : BaseController
                 //if (dto.AlterTime)
                 //{
                 var expiredTime = _timeLimitDomainService.CalcEndTime(DateTime.Now, order.AcceptTypeCode);
-                //var processType = dto.FlowDirection == EFlowDirection.OrgToCenter || dto.FlowDirection == EFlowDirection.CenterToCenter ? EProcessType.Zhiban : EProcessType.Jiaoban;
-                var processType = special.FlowDirection is EFlowDirection.OrgToCenter or EFlowDirection.CenterToCenter or EFlowDirection.FiledToCenter
+                if (expiredTime.ExpiredTime < order.ExpiredTime)
+                {
+	                expiredTime.ExpiredTime = order.ExpiredTime;
+	                expiredTime.NearlyExpiredTime = order.NearlyExpiredTime;
+	                expiredTime.NearlyExpiredTimeOne = order.NearlyExpiredTimeOne;
+                }
+				//var processType = dto.FlowDirection == EFlowDirection.OrgToCenter || dto.FlowDirection == EFlowDirection.CenterToCenter ? EProcessType.Zhiban : EProcessType.Jiaoban;
+				var processType = special.FlowDirection is EFlowDirection.OrgToCenter or EFlowDirection.CenterToCenter or EFlowDirection.FiledToCenter
                     ? EProcessType.Zhiban
                     : EProcessType.Jiaoban;
                 await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ExpiredTime = expiredTime.ExpiredTime, NearlyExpiredTime = expiredTime.NearlyExpiredTime, NearlyExpiredTimeOne = expiredTime.NearlyExpiredTimeOne, ProcessType = processType, Status = EOrderStatus.Special })

+ 2 - 1
src/Hotline.Api/Controllers/WebPortalController.cs

@@ -138,7 +138,8 @@ namespace Hotline.Api.Controllers
                 .Where(p => p.LoseEfficacyTime >= DateTime.Now)
                 .Where(p => p.IsArrive == true)
                 .Where(p => SqlFunc.JsonListObjectAny(p.PushRanges, "Key", "2"))
-                 .Where(p => p.BulletinTypeId == dto.BulletinTypeId)
+               //  .Where(p => p.BulletinTypeId == dto.BulletinTypeId)
+               .WhereIF(!string.IsNullOrEmpty(dto.BulletinTypeId), p => p.BulletinTypeId == dto.BulletinTypeId)
                  .WhereIF(!string.IsNullOrEmpty(dto.CheckChar), p => p.Content.Contains(dto.CheckChar))
                  .OrderByDescending(p => p.BulletinTime)
                  .Select(it => new

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

@@ -292,7 +292,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
     /// 工单退回(返回前一节点)
     /// </summary>
     public async Task<EFlowDirection> PreviousAsync(PreviousWorkflowDto dto, string applicantId, string applicantOrgId, string[] applicantRoleIds,
-        ISessionContext current, CancellationToken cancellationToken)
+		ISessionContext current, CancellationToken cancellationToken)
     {
         var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true,
             withTraces: true, withCountersigns: true, cancellationToken: cancellationToken);

+ 2 - 2
src/Hotline.Application/Orders/OrderSecondaryHandlingApplication.cs

@@ -238,14 +238,14 @@ namespace Hotline.Application.Orders
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgHandledAttitude), x => SqlFunc.JsonListObjectAny(x.OrgHandledAttitude, "Key", dto.OrgHandledAttitude))
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgNoSatisfiedReason), x => SqlFunc.JsonField(x.OrgNoSatisfiedReason, "Key") == dto.OrgNoSatisfiedReason)
                 .Where((x, s) => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle)
-                .WhereIF(!isAdmin, (x, s) => x.OrderVisit.Order.CounterSignType !=  ECounterSignType.Center && _sessionContext.OrgId.StartsWith(x.VisitOrgCode))
+                .WhereIF(!isAdmin, (x, s) => (x.OrderVisit.Order.CounterSignType ==  ECounterSignType.Department || x.OrderVisit.Order.CounterSignType == null) && x.VisitOrgCode.StartsWith(_sessionContext.OrgId))
                 ;
             if (_sessionContext.OrgId != null && !_sessionContext.OrgIsCenter)
             {
                 query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
                         (x, s) => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
                                   x.OrderVisit.Order.No.Contains(dto.Keyword!))
-                    .Where((x, s) => x.VisitTarget == EVisitTarget.Org && x.VisitOrgCode == _sessionContext.OrgId && (
+                    .Where((x, s) => x.VisitTarget == EVisitTarget.Org && x.VisitOrgCode.StartsWith(_sessionContext.OrgId) && (
                         SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
                         SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2"
                         || SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||

+ 6 - 0
src/Hotline.Share/Dtos/FlowEngine/PreviousWorkflowDto.cs

@@ -6,4 +6,10 @@ public class PreviousWorkflowDto : EndWorkflowIdDto
     /// 是否短信通知
     /// </summary>
     public bool AcceptSms { get; set; }
+
+    /// <summary>
+    /// 期满时间
+    /// </summary>
+    public DateTime? ExpiredTime { get; set; }
+
 }

+ 6 - 3
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -632,10 +632,13 @@ namespace Hotline.FlowEngine.Workflows
                 applicantOrgAreaCode, applicantOrgAreaName,
                 applicantIsCenter, dto.Opinion);
 
-            //await _workflowTraceRepository.UpdateAsync(trace, cancellationToken);
+			//await _workflowTraceRepository.UpdateAsync(trace, cancellationToken);
 
-            //复制上一个节点为待接办
-            var newPrevStep =
+			//如果有传入期满时间 新节点为传入的期满时间
+			if (dto.ExpiredTime.HasValue)
+                prevStep.StepExpiredTime = dto.ExpiredTime;
+			//复制上一个节点为待接办
+			var newPrevStep =
                 await DuplicateStepWithTraceAsync(workflow, prevStep, EWorkflowTraceType.Previous, cancellationToken);
 
             //remove workflow.steps