Browse Source

自贡任务

tangjiang 1 month ago
parent
commit
09471b5d4d

+ 33 - 2
src/Hotline.Application/Orders/Handles/OrderScreenHandler/OrderScreenEndWorkflowHandler.cs

@@ -3,9 +3,12 @@ using Hotline.Configurations;
 using Hotline.FlowEngine.Notifications;
 using Hotline.FlowEngine.WorkflowModules;
 using Hotline.Orders;
+using Hotline.Push.Notifies;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Enums.Order;
+using Hotline.Share.Enums.Push;
+using Hotline.Users;
 using MapsterMapper;
 using MediatR;
 using Microsoft.Extensions.Options;
@@ -24,6 +27,8 @@ public class OrderScreenEndWorkflowHandler : INotificationHandler<EndWorkflowNot
     private readonly ISessionContext _sessionContext;
     private readonly IRepository<OrderScreenDetail> _orderScreenDetailRepository;
     private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
+    private readonly IMediator _mediator;
+    private readonly IRepository<User> _userRepository;
 
     public OrderScreenEndWorkflowHandler(
         IOrderRepository orderRepository,
@@ -34,7 +39,9 @@ public class OrderScreenEndWorkflowHandler : INotificationHandler<EndWorkflowNot
         IRepository<OrderVisit> orderVisitRepository,
         ISessionContext sessionContext,
         IRepository<OrderScreenDetail> orderScreenDetailRepository,
-         IOptionsSnapshot<AppConfiguration> appOptions)
+        IOptionsSnapshot<AppConfiguration> appOptions,
+        IMediator mediator,
+        IRepository<User> userRepository)
     {
         _orderRepository = orderRepository;
         _capPublisher = capPublisher;
@@ -45,7 +52,8 @@ public class OrderScreenEndWorkflowHandler : INotificationHandler<EndWorkflowNot
         _sessionContext = sessionContext;
         _orderScreenDetailRepository = orderScreenDetailRepository;
         _appOptions = appOptions;
-
+        _mediator = mediator;
+        _userRepository = userRepository;
     }
 
     /// <summary>Handles a notification</summary>
@@ -142,6 +150,29 @@ public class OrderScreenEndWorkflowHandler : INotificationHandler<EndWorkflowNot
                 };
                 detail.Audit(_sessionContext.UserId, _sessionContext.UserName, _sessionContext.OrgId, _sessionContext.OrgName, 1);
                 await _orderScreenDetailRepository.AddAsync(detail, cancellationToken);
+
+                //这里处理甄别完成后发送短信
+                if (_appOptions.Value.IsZiGong)
+                {
+                    var user = await _userRepository.GetAsync(p => p.Id == screen.CreatorId, cancellationToken);
+                    if (user != null)
+                    {
+                        var isReviewPassText = isReviewPass == true ? "审批通过" : "审批拒绝";
+                        var messageDto = new Share.Dtos.Push.MessageDto
+                        {
+                            PushBusiness = EPushBusiness.ScreenEnd,
+                            ExternalId = screen.Id,
+                            OrderId = screen.Id,
+                            PushPlatform = EPushPlatform.Sms,
+                            Remark = screen.No + isReviewPassText,
+                            Name = screen.CreatorName,
+                            TemplateCode = "1019",
+                            Params = new List<string>() { screen.No, isReviewPassText },
+                            TelNumber = user.PhoneNo,
+                        };
+                        await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+                    }
+                }
             }
         }
     }

+ 16 - 18
src/Hotline.Application/Orders/OrderApplication.cs

@@ -3078,6 +3078,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .Where(x => x.HandlerName != null && x.HandlerName != "")
             .WhereIF(dto.AuditType is 1, x => x.Name == "班长审批")
             .WhereIF(dto.AuditType is 2, x => x.Name == "中心领导")
+             .WhereIF(_appOptions.Value.IsZiGong && dto.AuditType is 3, x => x.Name == "中心初审")
             .GroupBy(x => new { x.HandlerName })
             .Select(x => new OrderScreenAuditVo
             {
@@ -3269,33 +3270,30 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             //    x => SqlFunc.JsonListObjectAny(x.OrgHandledAttitude, "Key", dto.OrgHandledAttitude))
             //.WhereIF(!string.IsNullOrEmpty(dto.OrgNoSatisfiedReason),
             //    x => SqlFunc.JsonField(x.OrgNoSatisfiedReason, "Key") == dto.OrgNoSatisfiedReason)
-            .Where(x => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle);
+            .Where(x => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle)
+            .WhereIF(dto.DataScope is 1, x => x.VisitOrgCode == _sessionContext.OrgId);
         if (_sessionContext.OrgId != null && !_sessionContext.OrgIsCenter)
         {
-            query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-                    x => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
-                         x.OrderVisit.Order.No.Contains(dto.Keyword!))
-                .Where(x => x.VisitTarget == EVisitTarget.Org && x.VisitOrgCode == _sessionContext.OrgId && (
+            query.WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.OrderVisit.Order.Title.Contains(dto.Keyword!) || x.OrderVisit.Order.No.Contains(dto.Keyword!))
+                .Where(x => x.VisitTarget == EVisitTarget.Org && (
                     SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
                     SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2" ||
                     SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||
                     SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2"
-                ));
+                ))
+                .WhereIF(dto.DataScope is 0, x => x.VisitOrgCode.StartsWith(_sessionContext.OrgId))
+                ;
         }
         else
         {
-            query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-                    x => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
-                         x.OrderVisit.Order.No.Contains(dto.Keyword!))
+            query.WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.OrderVisit.Order.Title.Contains(dto.Keyword!) || x.OrderVisit.Order.No.Contains(dto.Keyword!))
                 .WhereIF(dto.ScreenType == EOrderScreenType.Org, x => x.VisitTarget == EVisitTarget.Org && (
                     SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
                     SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2" ||
                     SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||
                     SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2"
                 ))
-                .WhereIF(dto.ScreenType == EOrderScreenType.Seat,
-                    x => x.VisitTarget == EVisitTarget.Seat &&
-                         (x.SeatEvaluate == ESeatEvaluate.VeryNoSatisfied || x.SeatEvaluate == ESeatEvaluate.NoSatisfied))
+                .WhereIF(dto.ScreenType == EOrderScreenType.Seat, x => x.VisitTarget == EVisitTarget.Seat && (x.SeatEvaluate == ESeatEvaluate.VeryNoSatisfied || x.SeatEvaluate == ESeatEvaluate.NoSatisfied))
                 ;
         }
 
@@ -3307,7 +3305,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .OrderByIF(dto is { SortRule: 1, SortField: "order.filedTime" }, x => x.OrderVisit.Order.FiledTime, OrderByType.Desc)
             .OrderByIF(dto is { SortRule: 0, SortField: "orderVisit.visitTime" }, x => x.OrderVisit.VisitTime, OrderByType.Asc)
             .OrderByIF(dto is { SortRule: 1, SortField: "orderVisit.visitTime" }, x => x.OrderVisit.VisitTime, OrderByType.Desc)
-            .OrderByIF(dto is { SortRule: 0, SortField: "screenByEndTime" }, x => x.ScreenByEndTime, OrderByType.Asc)
+            .OrderByIF(dto is { SortRule: 0, SortField: "screenByEndTime" }, x => x.ScreenByEndTime, OrderByType.Asc)//截止申请日期排序
             .OrderByIF(dto is { SortRule: 1, SortField: "screenByEndTime" }, x => x.ScreenByEndTime, OrderByType.Desc)
             .OrderByIF(dto.SortRule is null, x => x.CreationTime, OrderByType.Desc);
     }
@@ -4107,10 +4105,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 cancellation);
 
 
-		//if (order.ActualHandleOrgCode != OrgSeedData.CenterId && order.Status < EOrderStatus.Filed)
-		//{
-		//	await _circularRecordDomainService.OrderSpecialCircularMessage(special, order, cancellation);
-		//}
+        //if (order.ActualHandleOrgCode != OrgSeedData.CenterId && order.Status < EOrderStatus.Filed)
+        //{
+        //	await _circularRecordDomainService.OrderSpecialCircularMessage(special, order, cancellation);
+        //}
 
         if (_appOptions.Value.IsZiGong && dto.BusinessType == EBusinessType.Send)
         {
@@ -5021,7 +5019,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     {
         var query = _orderSendBackAuditRepository.Queryable()
             .Where(x => x.ApplyOrgId.Length == 6 && x.CreationTime > x.OrderExpiredTime)
-            .WhereIF(!_sessionContext.OrgIsCenter, x=>x.ApplyOrgId == _sessionContext.OrgId)
+            .WhereIF(!_sessionContext.OrgIsCenter, x => x.ApplyOrgId == _sessionContext.OrgId)
             .WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue, x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
             .GroupBy(x => new { x.ApplyOrgId, x.ApplyOrgName })
             .Select(x => new ExtendedSendBackVo()

+ 5 - 0
src/Hotline.Share/Dtos/Order/QueryOrderDto.cs

@@ -855,6 +855,11 @@ namespace Hotline.Share.Dtos.Order
         /// 受理坐席名字或工号(×)
         /// </summary>
         public string? NameOrNo { get; set; }
+
+        /// <summary>
+        /// 0 全部  1 我的(本部门)
+        /// </summary>
+        public int? DataScope { get; set; }
     }
 
     public record UrgeListDto : PagedKeywordRequest

+ 3 - 0
src/Hotline.Share/Enums/Push/EPushBusiness.cs

@@ -87,4 +87,7 @@ public enum EPushBusiness
 
     [Description("随手拍短信")]
     Snapshot = 13,
+
+    [Description("甄别完成")]
+    ScreenEnd=14,
 }

+ 1 - 1
src/Hotline.Share/Requests/PagedKeywordRequest.cs

@@ -1008,7 +1008,7 @@ public record OrderScreenAuditPagedRequest : PagedKeywordRequest
     public string AuditUserName { get; set; }
 
     /// <summary>
-    ///  1 中心班长   2 中心领导
+    ///  1 中心班长   2 中心领导 3中心初审
     /// </summary>
     public int? AuditType { get; set; }
 

+ 53 - 50
src/Hotline/Orders/OrderDomainService.cs

@@ -70,9 +70,9 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     private readonly IRepository<WorkflowStep> _workflowStepRepository;
     private readonly ISystemLogRepository _systemLogRepository;
     private readonly IOrderSnapshotRepository _orderSnapshotRepository;
-	private readonly ICalcExpireTime _expireTime;
+    private readonly ICalcExpireTime _expireTime;
 
-	public OrderDomainService(
+    public OrderDomainService(
         IOrderRepository orderRepository,
         IRepository<OrderRedo> orderRedoRepository,
         IRepository<OrderPublish> orderPublishRepository,
@@ -98,7 +98,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         ISystemLogRepository systemLogRepository,
         IOptionsSnapshot<AppConfiguration> appOptions,
         IOrderSnapshotRepository orderSnapshotRepository,
-		ICalcExpireTime expireTime)
+        ICalcExpireTime expireTime)
     {
         _orderRepository = orderRepository;
         _orderRedoRepository = orderRedoRepository;
@@ -124,9 +124,9 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         _systemLogRepository = systemLogRepository;
         _appOptions = appOptions;
         _orderSnapshotRepository = orderSnapshotRepository;
-		_expireTime = expireTime;
+        _expireTime = expireTime;
 
-	}
+    }
 
     /// <summary>
     /// 归档后自动发布
@@ -603,33 +603,33 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
             .Where(x => x.SchedulingTime == time).CountAsync(cancellationToken);
         if (schedulings > 0)
         {
-			var sendNum = steps.Count / schedulings;
-			scheduling.SendOrderNum += sendNum;
-			if (!scheduling.LoginSendOrderNum.HasValue)
-			{
-				scheduling.LoginSendOrderNum = scheduling.LoginSendOrderNum.HasValue && scheduling.LoginSendOrderNum > sendNum ? scheduling.LoginSendOrderNum : sendNum;
-				await _schedulingRepository.Updateable()
-					.SetColumns(s => new Scheduling() { LoginSendOrderNum = scheduling.LoginSendOrderNum })
-					.Where(s => s.SchedulingTime == scheduling.SchedulingTime).ExecuteCommandAsync(cancellationToken);
-			}
-			sendNum = scheduling.LoginSendOrderNum.Value;
-			await _schedulingRepository.Updateable()
-				.SetColumns(s => new Scheduling() { SendOrderNum = scheduling.SendOrderNum, AtWork = scheduling.AtWork })
-				.Where(s => s.Id == scheduling.Id).ExecuteCommandAsync(cancellationToken);
-
-			if (sendNum <= 0) return;
-			var sendSteps = steps.Take(sendNum).ToList();
-			await _orderRepository.Updateable().SetColumns(o => new Order()
-			{
-				CenterToOrgHandlerId = user.OrgId,
-				CenterToOrgHandlerName = user.Name
-			}).Where(o => sendSteps.Any(s => s.ExternalId == o.Id)).ExecuteCommandAsync(cancellationToken);
-
-			await _workflowDomainService.ChangeHandlerBatchAsync(new List<(string userId, string username, string orgId, string orgName, string? roleId, string? roleName, ICollection<WorkflowStep> steps)>
-			{
-				new(user.Id, user.Name, user.OrgId, user.Organization.Name,roleId,"派单员", sendSteps)
-			}, cancellationToken);
-		}
+            var sendNum = steps.Count / schedulings;
+            scheduling.SendOrderNum += sendNum;
+            if (!scheduling.LoginSendOrderNum.HasValue)
+            {
+                scheduling.LoginSendOrderNum = scheduling.LoginSendOrderNum.HasValue && scheduling.LoginSendOrderNum > sendNum ? scheduling.LoginSendOrderNum : sendNum;
+                await _schedulingRepository.Updateable()
+                    .SetColumns(s => new Scheduling() { LoginSendOrderNum = scheduling.LoginSendOrderNum })
+                    .Where(s => s.SchedulingTime == scheduling.SchedulingTime).ExecuteCommandAsync(cancellationToken);
+            }
+            sendNum = scheduling.LoginSendOrderNum.Value;
+            await _schedulingRepository.Updateable()
+                .SetColumns(s => new Scheduling() { SendOrderNum = scheduling.SendOrderNum, AtWork = scheduling.AtWork })
+                .Where(s => s.Id == scheduling.Id).ExecuteCommandAsync(cancellationToken);
+
+            if (sendNum <= 0) return;
+            var sendSteps = steps.Take(sendNum).ToList();
+            await _orderRepository.Updateable().SetColumns(o => new Order()
+            {
+                CenterToOrgHandlerId = user.OrgId,
+                CenterToOrgHandlerName = user.Name
+            }).Where(o => sendSteps.Any(s => s.ExternalId == o.Id)).ExecuteCommandAsync(cancellationToken);
+
+            await _workflowDomainService.ChangeHandlerBatchAsync(new List<(string userId, string username, string orgId, string orgName, string? roleId, string? roleName, ICollection<WorkflowStep> steps)>
+            {
+                new(user.Id, user.Name, user.OrgId, user.Organization.Name,roleId,"派单员", sendSteps)
+            }, cancellationToken);
+        }
 
     }
 
@@ -702,7 +702,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     {
         var valid = new OrderValidation { Validation = false, Result = "" };
         var hotspot = await _hotspotRepository.GetAsync(dto.HotspotId, cancellationToken);
-        if (hotspot.TrunkNum.Equals(AppDefaults.TrafficTrunkNum))
+        if (hotspot != null && hotspot.TrunkNum.Equals(AppDefaults.TrafficTrunkNum))
         {
             switch (dto.AcceptTypeCode)
             {
@@ -771,7 +771,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         return valid;
     }
     #endregion
-    
+
     #region 即将超期和超期短信
 
     /// <summary>
@@ -830,35 +830,38 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
 
     #region  计算甄别申请截至日期
 
-    public async Task<DateTime>  GetScreenByEndTime() {
+    public async Task<DateTime> GetScreenByEndTime()
+    {
 
         var endTime = DateTime.Now;
         var beginTime = DateTime.Now;
         var timeValue = 1;
-		if (_appOptions.Value.IsZiGong)
+        if (_appOptions.Value.IsZiGong)
         {
             timeValue = 2;
-		}
+        }
         else if (_appOptions.Value.IsLuZhou)
         {
-			DateTime firstDayOfMonth = new DateTime(beginTime.Year, beginTime.Month, 1);
-			DateTime lastDayOfMonth = firstDayOfMonth.AddMonths(1).AddDays(-1);
+            DateTime firstDayOfMonth = new DateTime(beginTime.Year, beginTime.Month, 1);
+            DateTime lastDayOfMonth = firstDayOfMonth.AddMonths(1).AddDays(-1);
             beginTime = new DateTime(lastDayOfMonth.Year, lastDayOfMonth.Month, lastDayOfMonth.Day, 23, 59, 59);
-		}
-        else {
-			var setting = _systemSettingCacheManager.GetSetting(SettingConstants.ScreenApplyEndTime);
-            if (int.Parse(setting?.SettingValue[0]) > 0) {
+        }
+        else
+        {
+            var setting = _systemSettingCacheManager.GetSetting(SettingConstants.ScreenApplyEndTime);
+            if (int.Parse(setting?.SettingValue[0]) > 0)
+            {
                 timeValue = int.Parse(setting?.SettingValue[0]);
-			}
-		}
-		endTime = (await _expireTime.CalcEndTime(beginTime, beginTime, ETimeType.WorkDay, timeValue, 0, 0)).EndTime;
-		return endTime;
+            }
+        }
+        endTime = (await _expireTime.CalcEndTime(beginTime, beginTime, ETimeType.WorkDay, timeValue, 0, 0)).EndTime;
+        return endTime;
     }
-	#endregion
+    #endregion
 
-	#region private
+    #region private
 
-	private async Task<Order> GetOrderByFlowIdAsync(string workflowId, CancellationToken cancellationToken)
+    private async Task<Order> GetOrderByFlowIdAsync(string workflowId, CancellationToken cancellationToken)
     {
         if (string.IsNullOrEmpty(workflowId))
             throw UserFriendlyException.SameMessage("无效流程编号");