Browse Source

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

qinchaoyue 6 tháng trước cách đây
mục cha
commit
7f26728771

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

@@ -179,8 +179,7 @@ namespace Hotline.Api.Controllers
         public async Task<PagedDto<PublishDto>> GetOrderByListOpen([FromBody] GetOrderList dto)
         {
             var (total, items) = await _orderRepository.Queryable()
-                .Includes(d => d.OrderPublish)
-                .Where(p => p.OrderPublish.PublishState == true)
+                .Where(p => p.IsPublicity == true)
                 .WhereIF(!string.IsNullOrEmpty(dto.No), p => p.No == dto.No)
                 .WhereIF(!string.IsNullOrEmpty(dto.Title), p => p.Title.Contains(dto.Title))
                 .WhereIF(!string.IsNullOrEmpty(dto.Mobile), p => p.Contact.Contains(dto.Mobile))

+ 11 - 2
src/Hotline.Api/Controllers/OrderController.cs

@@ -2146,8 +2146,17 @@ public class OrderController : BaseController
     public async Task InitialNextFlow([FromBody] ScreenNextFlowDto dto)
     {
         var screen = await _orderScreenRepository.GetAsync(dto.Data.Id);
+        var visitDetail = await _orderVisitedDetailRepository.GetAsync(screen.VisitDetailId, HttpContext.RequestAborted);
+        if (_appOptions.Value.IsZiGong && visitDetail.ScreenByEndTime.HasValue)
+        {
+	        if (DateTime.Now > visitDetail.ScreenByEndTime && !_sessionContext.OrgIsCenter)
+	        {
+		        throw UserFriendlyException.SameMessage("超过2个工作日不能申请甄别,不能申请");
+	        }
+        }
 
-        if (dto.Data.Files.Any())
+
+		if (dto.Data.Files.Any())
             screen.FileJson = await _fileRepository.AddFileAsync(dto.Data.Files, screen.Id, "", HttpContext.RequestAborted);
         else
             screen.FileJson = new List<Share.Dtos.File.FileJson>();
@@ -2290,7 +2299,7 @@ public class OrderController : BaseController
     [LogFilter("更新甄别提起截至时限")]
     public async Task Update([FromBody] OrderScreenEndTimeDto dto)
     {
-        await _orderVisitedDetailRepository.Updateable().SetColumns(x => new OrderVisitDetail { ScreenByEndTime = dto.ScreenByEndTime }).Where(x => x.Id == dto.VisitDetailId).ExecuteCommandAsync();
+        await _orderVisitedDetailRepository.Updateable().SetColumns(x => new OrderVisitDetail { ScreenByEndTime = dto.ScreenByEndTime }).Where(x => x.Id == dto.Id).ExecuteCommandAsync();
     }
 
     #endregion

+ 31 - 20
src/Hotline.Api/Controllers/OrderRevocationController.cs

@@ -1,12 +1,14 @@
 using Hotline.Application.FlowEngine;
 using Hotline.Caching.Interfaces;
 using Hotline.FlowEngine.WorkflowModules;
+using Hotline.FlowEngine.Workflows;
 using Hotline.Orders;
 using Hotline.Push.Notifies;
 using Hotline.SeedData;
 using Hotline.Settings;
 using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Push;
 using Hotline.Users;
@@ -31,6 +33,7 @@ namespace Hotline.Api.Controllers
         private readonly IRepository<SystemOrganize> _systemOrganizeRepository;
         private readonly IRepository<User> _userRepository;
         private readonly IMediator _mediator;
+        private readonly IWorkflowDomainService _workflowDomainService;
 
 
         public OrderRevocationController(IMapper mapper,
@@ -41,7 +44,8 @@ namespace Hotline.Api.Controllers
             ISystemSettingCacheManager systemSettingCacheManager,
             IRepository<SystemOrganize> systemOrganizeRepository,
             IRepository<User> userRepository,
-             IMediator mediator)
+            IMediator mediator,
+            IWorkflowDomainService workflowDomainService)
         {
             _mapper = mapper;
             _orderRevocationRepository = orderRevocationRepository;
@@ -52,6 +56,7 @@ namespace Hotline.Api.Controllers
             _systemOrganizeRepository = systemOrganizeRepository;
             _userRepository = userRepository;
             _mediator = mediator;
+            _workflowDomainService = workflowDomainService;
         }
 
         /// <summary>
@@ -140,27 +145,33 @@ namespace Hotline.Api.Controllers
 
                             #region 处理短信业务
                             //如果需要发短信、处理短信业务
-                            if (dto.IsSendSms)
-                            {
-                                //处理短信业务
-                                var acceptSmsRoleIds = _systemSettingCacheManager.GetSetting(SettingConstants.AcceptSmsRoleIds)?.SettingValue;
-                                //查询部门所有账号
-                                var userlist = await _userRepository.Queryable().Where(x =>
-                                    x.OrgId == order.CurrentHandleOrgId && !string.IsNullOrEmpty(x.PhoneNo) &&
-                                    x.Roles.Any(d => acceptSmsRoleIds.Contains(d.Id))).ToListAsync();
-                                //发送短信
-                                foreach (var user in userlist)
+                            if (dto.IsSendSms && !string.IsNullOrEmpty(order.WorkflowId))
+                            {  //查询当前工单的实际办理节点,如果在热线中心不处理,如果在部门需要更新期满时间
+                                var workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId, withSteps: true, withTraces: true, cancellationToken: HttpContext.RequestAborted);
+                                var nowWorkflow = workflow.Steps.Where(p => p.Id == order.ActualHandleStepId && p.BusinessType >= EBusinessType.Department && p.BusinessType <= EBusinessType.DepartmentLeader).FirstOrDefault();
+                                //在部门才需要发送短信
+                                if (nowWorkflow != null && order.CenterToOrgTime.HasValue)
                                 {
-                                    var messageDto = new Share.Dtos.Push.MessageDto
+                                    //处理短信业务
+                                    var acceptSmsRoleIds = _systemSettingCacheManager.GetSetting(SettingConstants.AcceptSmsRoleIds)?.SettingValue;
+                                    //查询部门所有账号
+                                    var userlist = await _userRepository.Queryable().Where(x =>
+                                        x.OrgId == order.CurrentHandleOrgId && !string.IsNullOrEmpty(x.PhoneNo) &&
+                                        x.Roles.Any(d => acceptSmsRoleIds.Contains(d.Id))).ToListAsync();
+                                    //发送短信
+                                    foreach (var user in userlist)
                                     {
-                                        PushBusiness = EPushBusiness.OrderRevocationSms,
-                                        PushPlatform = EPushPlatform.Sms,
-                                        Name = user.Name,
-                                        TemplateCode = "1016",
-                                        Params = new List<string>() { order.No },
-                                        TelNumber = user.PhoneNo,
-                                    };
-                                    await _mediator.Publish(new PushMessageNotify(messageDto), HttpContext.RequestAborted);
+                                        var messageDto = new Share.Dtos.Push.MessageDto
+                                        {
+                                            PushBusiness = EPushBusiness.OrderRevocationSms,
+                                            PushPlatform = EPushPlatform.Sms,
+                                            Name = user.Name,
+                                            TemplateCode = "1016",
+                                            Params = new List<string>() { order.No },
+                                            TelNumber = user.PhoneNo,
+                                        };
+                                        await _mediator.Publish(new PushMessageNotify(messageDto), HttpContext.RequestAborted);
+                                    }
                                 }
 
                             }

+ 16 - 0
src/Hotline.Api/Controllers/TestController.cs

@@ -41,6 +41,7 @@ using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.JudicialManagement;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Quality;
+using Hotline.Share.Mq;
 using Hotline.Users;
 using MapsterMapper;
 using MediatR;
@@ -969,4 +970,19 @@ ICallApplication callApplication,
 
         _logger.LogWarning($"推送完成");
     }
+
+
+    /// <summary>
+    /// 自动延期测试
+    /// </summary>
+    /// <param name="ExpiredTime"></param>
+    /// <param name="orderId"></param>
+    /// <returns></returns>
+    [HttpGet("automatic_delay")]
+    [AllowAnonymous]
+    public async Task AutomaticDelay(DateTime ExpiredTime, string orderId) {
+
+	    _capPublisher.PublishDelay(ExpiredTime - DateTime.Now.AddHours(1), EventNames.HotlineOrderAutomaticDelay, new PublishAutomaticDelayDto() { OrderId = orderId });
+	}
+
 }

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

@@ -104,8 +104,10 @@ public class WorkflowRecallHandler : INotificationHandler<RecallNotify>
                         //    //order.BackToUnsign();
                         //}
                     }
-
-                    order.Status = EOrderStatus.Special;
+                    else {
+	                    order.Status = EOrderStatus.Special;
+					}
+                   
                     await _orderRepository.UpdateAsync(order, false, cancellationToken);
                     var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == order.Id, cancellationToken);
                     if (publish != null)

+ 6 - 5
src/Hotline.Application/Subscribers/InternalCapSubscriber.cs

@@ -235,11 +235,11 @@ namespace Hotline.Application.Subscribers
         public async Task AutomaticDelay(PublishAutomaticDelayDto dto, CancellationToken cancellationToken) 
         {
             var order = await _orderRepository.GetAsync(dto.OrderId, cancellationToken);
-            var expiredTime = DateTime.Now.AddHours(-1);
-            if (order != null && order.Status < EOrderStatus.Filed && order.ExpiredTime <= DateTime.Now)
-            {
-                if (order.ExpiredTime >= expiredTime)
-                {
+			var expiredTime = DateTime.Now.AddHours(1);
+			if (order != null && order.Status < EOrderStatus.Filed && order.ExpiredTime >= DateTime.Now)
+			{
+				if (order.ExpiredTime <= expiredTime)
+				{
                     var delayAny= await _orderDelayRepository.Queryable().Where(x => x.OrderId == order.Id && x.DelayState == EDelayState.Examining).AnyAsync();
                     if (!delayAny)
                     {
@@ -253,6 +253,7 @@ namespace Hotline.Application.Subscribers
 						}
 						else
 						{
+                            delay.OrderId = order.Id;
 							delay.EmployeeId = "";
 							delay.EmployeeName = "系统自动延期";
 							delay.ApplyOrgName = OrgSeedData.CenterName;

+ 1 - 1
src/Hotline.Share/Dtos/Order/OrderScreenDto.cs

@@ -336,7 +336,7 @@ namespace Hotline.Share.Dtos.Order
 		/// <summary>
 		/// 回访明细id
 		/// </summary>
-		public string VisitDetailId { get; set; }
+		public string Id { get; set; }
 
 		/// <summary>
 		/// 截至甄别时间

+ 35 - 0
src/Hotline.Share/Enums/FlowEngine/EDynamicPolicyCountersign.cs

@@ -30,4 +30,39 @@ public enum EDynamicPolicyCountersign
     /// </summary>
     [Description("直属下级(中心作为一级部门)")]
     OrgDown = 3,
+    /// <summary>
+    /// 直属上级部门(中心作为顶级部门)经办人
+    /// </summary>
+    [Description("直属上级(中心作为顶级部门) 经办人")]
+    OrgUpHandleCenterTop = 4,
+
+    /// <summary>
+    /// 直属上级(中心作为一级部门)
+    /// </summary>
+    [Description("直属上级(中心作为一级部门)经办人")]
+    OrgUpHandle = 5,
+
+    /// <summary>
+    /// 直属上级部门(中心作为顶级部门) 经办人与领导
+    /// </summary>
+    [Description("直属上级(中心作为顶级部门)经办人与领导")]
+    OrgUpLeadCenterTop = 6,
+
+    /// <summary>
+    /// 直属上级(中心作为一级部门)经办人与领导
+    /// </summary>
+    [Description("直属上级(中心作为一级部门)经办人与领导")]
+    OrgUpLead = 7,
+
+    /// <summary>
+    /// 直达中心
+    /// </summary>
+    [Description("直达中心")]
+    ArriveCenter = 8,
+
+    /// <summary>
+    /// 直达一级部门
+    /// </summary>
+    [Description("直达一级部门")]
+    ArriveOneOrg = 9,
 }

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

@@ -1768,7 +1768,13 @@ namespace Hotline.FlowEngine.Workflows
             {
                 EDynamicPolicy.OrgUpCenterTop => EHandlerType.OrgLevel,
                 EDynamicPolicy.OrgUp => EHandlerType.OrgLevel,
-                EDynamicPolicy.OrgDownCenterTop => EHandlerType.OrgLevel,
+                EDynamicPolicy.OrgUpHandleCenterTop => EHandlerType.OrgLevel,
+                EDynamicPolicy.OrgUpHandle => EHandlerType.OrgLevel,
+                EDynamicPolicy.OrgUpLeadCenterTop => EHandlerType.OrgLevel,
+                EDynamicPolicy.OrgUpLead => EHandlerType.OrgLevel,
+                EDynamicPolicy.ArriveCenter => EHandlerType.OrgLevel,
+                EDynamicPolicy.ArriveOneOrg => EHandlerType.OrgLevel,
+				EDynamicPolicy.OrgDownCenterTop => EHandlerType.OrgLevel,
                 EDynamicPolicy.OrgDown => EHandlerType.OrgLevel,
                 null => throw new ArgumentOutOfRangeException(),
                 _ => throw new ArgumentOutOfRangeException()
@@ -1798,7 +1804,13 @@ namespace Hotline.FlowEngine.Workflows
             {
                 EDynamicPolicyCountersign.OrgUpCenterTop => EHandlerType.OrgLevel,
                 EDynamicPolicyCountersign.OrgUp => EHandlerType.OrgLevel,
-                EDynamicPolicyCountersign.OrgDownCenterTop => EHandlerType.OrgLevel,
+                EDynamicPolicyCountersign.OrgUpHandleCenterTop => EHandlerType.OrgLevel,
+                EDynamicPolicyCountersign.OrgUpHandle => EHandlerType.OrgLevel,
+                EDynamicPolicyCountersign.OrgUpLeadCenterTop => EHandlerType.OrgLevel,
+                EDynamicPolicyCountersign.OrgUpLead => EHandlerType.OrgLevel,
+                EDynamicPolicyCountersign.ArriveCenter => EHandlerType.OrgLevel,
+                EDynamicPolicyCountersign.ArriveOneOrg => EHandlerType.OrgLevel,
+				EDynamicPolicyCountersign.OrgDownCenterTop => EHandlerType.OrgLevel,
                 EDynamicPolicyCountersign.OrgDown => EHandlerType.OrgLevel,
                 null => throw new ArgumentOutOfRangeException(),
                 _ => throw new ArgumentOutOfRangeException()
@@ -2535,7 +2547,13 @@ namespace Hotline.FlowEngine.Workflows
             {
                 case EDynamicPolicy.OrgUpCenterTop:
                 case EDynamicPolicy.OrgUp:
-                    if (!int.TryParse(currentStepDefine.TerminalDynamicMark, out var tMark))
+                case EDynamicPolicy.OrgUpHandleCenterTop:
+                case EDynamicPolicy.OrgUpHandle:
+                case EDynamicPolicy.OrgUpLeadCenterTop:
+                case EDynamicPolicy.OrgUpLead:
+                case EDynamicPolicy.ArriveCenter:
+                case EDynamicPolicy.ArriveOneOrg:
+					if (!int.TryParse(currentStepDefine.TerminalDynamicMark, out var tMark))
                         throw new UserFriendlyException(
                             $"TerminalDynamicMark parse to int failed, tMark: {currentStepDefine.TerminalDynamicMark}");
                     return currentOrgLevel <= tMark;

+ 2 - 1
src/Hotline/Settings/TimeLimitDomain/ExpireTimeLimitBase.cs

@@ -151,7 +151,8 @@ public abstract class ExpireTimeLimitBase
         {
             EFlowDirection.CenterToOrg => GetOrderTimeLimitConfig(order.AcceptTypeCode),
             EFlowDirection.OrgToCenter => GetOrderTimeLimitConfig(),
-            EFlowDirection.CenterToCenter => GetOrderTimeLimitConfig(order.AcceptTypeCode),
+            EFlowDirection.FiledToCenter => GetOrderTimeLimitConfig(),
+			EFlowDirection.CenterToCenter => GetOrderTimeLimitConfig(order.AcceptTypeCode),
             EFlowDirection.FiledToOrg => GetOrderTimeLimitConfig(order.AcceptTypeCode),
 			_ => throw new ArgumentOutOfRangeException(nameof(flowDirection), flowDirection, null)
         };