Jelajahi Sumber

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

田爽 4 bulan lalu
induk
melakukan
fc0a5c86d6

+ 8 - 5
src/Hotline.Api/Controllers/OrderController.cs

@@ -556,7 +556,7 @@ public class OrderController : BaseController
         //任何类型的省工单都不需要发送短信
         try
         {
-            if (order.Source != ESource.ProvinceStraight)
+            if (order.Source != ESource.ProvinceStraight && _appOptions.Value.IsYiBin)
             {
                 var code = "";
                 //受理类型为“投诉、举报”
@@ -925,7 +925,7 @@ public class OrderController : BaseController
             .WhereIF(dto.VisitStateQuery == EVisitStateQuery.SMSVisiting, d => d.VisitState == EVisitState.SMSVisiting)
             .WhereIF(dto.VisitStateQuery == EVisitStateQuery.NoPutThrough, d => d.IsPutThrough == false && d.VisitState != EVisitState.Visited)
             .WhereIF(dto.VisitStateQuery == EVisitStateQuery.ChipVoiceVisiting, d => d.VisitState == EVisitState.AiVisiting)//任务 162:回访状态快捷查询条件
-            .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Order.Title.StartsWith(dto.Keyword!))
+            .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Order.Title.Contains(dto.Keyword!))
             .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No)
             .WhereIF(dto.VisitType != null, d => d.VisitType == dto.VisitType)
               //.WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.Order.ProcessType == EProcessType.Zhiban)
@@ -956,8 +956,11 @@ public class OrderController : BaseController
             .WhereIF(dto.StartTime.HasValue, d => d.VisitTime >= dto.StartTime)
             .WhereIF(dto.EndTime.HasValue, d => d.VisitTime <= dto.EndTime)
             .WhereIF(dto.StartPublishTime.HasValue && dto.EndPublishTime.HasValue, d => d.PublishTime >= dto.StartPublishTime && d.PublishTime <= dto.EndPublishTime) // 发布时间
-            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.Order.ActualHandleOrgName == dto.ActualHandleOrgName) //接办部门
+            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.Order.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门
             .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.Order.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
+            .WhereIF(dto.IdentityType != null, d => d.Order.IdentityType == dto.IdentityType) //来电主体
+           .WhereIF(dto.CreationTimeStart.HasValue, d => d.Order.CreationTime >= dto.CreationTimeStart)
+            .WhereIF(dto.CreationTimeEnd.HasValue, d => d.Order.CreationTime <= dto.CreationTimeEnd)
             .OrderByDescending(x => x.PublishTime)
             .WhereIF(dto.Channel.NotNullOrEmpty(), d => d.Order.SourceChannelCode == dto.Channel)
             .OrderByDescending(d => d.PublishTime)
@@ -1043,8 +1046,8 @@ public class OrderController : BaseController
         {
             CallNative? call = null;
             if (orderVisit.CallId == null && orderVisit.VisitTime.HasValue)
-            { 
-                call = await _callApplication.GetCallByTimeAndToNoAsync(orderVisit.Order.Contact, orderVisit.VisitTime.Value,  HttpContext.RequestAborted);
+            {
+                call = await _callApplication.GetCallByTimeAndToNoAsync(orderVisit.Order.Contact, orderVisit.VisitTime.Value, HttpContext.RequestAborted);
             }
             call = await _callApplication.GetCallAsync(orderVisit.CallId, HttpContext.RequestAborted);
             if (call is not null)

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

@@ -519,7 +519,7 @@ ICallApplication callApplication,
         //var r = _timeLimitDomainService.CalcExpiredTime(DateTime.Now, EFlowDirection.CenterToCenter, batchId);
         //var r = _timeLimitDomainService.CalcEndTime(DateTime.Parse("2024-09-12 14:45:47"), Share.Enums.Settings.ETimeType.WorkDay, 2, 80, 50);
         //_capPublisher.PublishDelay((DateTime.Now.AddMinutes(2) - DateTime.Now), EventNames.OrderRelateCall, "123");
-        var times = _expireTime.CalcExpiredTime(DateTime.Parse("2024-12-10 20:37:58"), DateTime.Parse("2024-12-10 20:37:58"), EFlowDirection.CenterToOrg,new OrderTimeClacInfo() { AcceptTypeCode= "10" });
+        var times = _expireTime.CalcExpiredTime(DateTime.Parse("2024-12-11 00:31:36"), DateTime.Parse("2024-12-11 00:31:36"), EFlowDirection.CenterToOrg,new OrderTimeClacInfo() { AcceptTypeCode= "15" });
         //await _capPublisher.PublishDelay(EventNames.OrderRelateCall, "123", cancellationToken: HttpContext.RequestAborted);
         return OpenResponse.Ok(times.Result);
     }

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

@@ -675,8 +675,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             //.WhereIF(dto.PubState == EPubState.NoPub, d => d.Status == EOrderStatus.Filed)
             .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.SourceChannelCode == dto.Channel)
             .WhereIF(!string.IsNullOrEmpty(dto.OrderTag), d => d.OrderTagCode == dto.OrderTag!) //工单标签
-            .WhereIF(!string.IsNullOrEmpty(dto.CenterToOrgHandlerName), d => d.CenterToOrgHandlerName == dto.CenterToOrgHandlerName!) //派单人
-            .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName == dto.NameOrNo! || d.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席
+            .WhereIF(!string.IsNullOrEmpty(dto.CenterToOrgHandlerName), d => d.CenterToOrgHandlerName.Contains(dto.CenterToOrgHandlerName)) //派单人
+            .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName .Contains(dto.NameOrNo) || d.AcceptorStaffNo.Contains(dto.NameOrNo)) //受理人/坐席
             .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
             .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
             .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
@@ -702,6 +702,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(dto.FiledTimeStart.HasValue, d => d.FiledTime >= dto.FiledTimeStart)
             .WhereIF(dto.FiledTimeEnd.HasValue, d => d.FiledTime <= dto.FiledTimeEnd)
             .WhereIF(dto.QuerySelf.HasValue && dto.QuerySelf.Value, d => d.WaitForPublisherId == _sessionContext.RequiredUserId)
+             .WhereIF(dto.IdentityType != null, d => d.IdentityType == dto.IdentityType) //来电主体
             .WhereIF(dto.IsOverTime == true,
                 d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) ||
                      (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //是 超期
@@ -709,7 +710,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 d => (d.ExpiredTime > DateTime.Now && d.Status < EOrderStatus.Filed) ||
                      (d.ExpiredTime > d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //否 超期
             .OrderByDescending(d => d.FiledTime);
-    }
+    }            
 
     public ISugarQueryable<OrderPublish> GetPublishedOrder(PublishedPagedRequest dto)
     {
@@ -727,10 +728,12 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.Order.HotspotSpliceName != null && d.Order.HotspotSpliceName.Contains(dto.Hotspot))
             .WhereIF(!string.IsNullOrEmpty(dto.PublishName), d => d.CreatorName.Contains(dto.PublishName!))
             .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo),
-                d => d.Order.AcceptorName == dto.NameOrNo! || d.Order.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席
+                d => d.Order.AcceptorName .Contains(dto.NameOrNo) || d.Order.AcceptorStaffNo.Contains(dto.NameOrNo)) //受理人/坐席
             .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
             .WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime)
             .WhereIF(dto.Resolve.HasValue, x => x.Resolve == dto.Resolve)
+            .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.Order.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
+            .WhereIF(dto.IdentityType != null, d => d.Order.IdentityType == dto.IdentityType) //来电主体
             .WhereIF(dto.IsOverTime == true,
                 d => (d.Order.ExpiredTime < DateTime.Now && d.Order.Status < EOrderStatus.Filed) ||
                      (d.Order.ExpiredTime < d.Order.ActualHandleTime && d.Order.Status >= EOrderStatus.Filed)) //是 超期

+ 128 - 119
src/Hotline.Application/Orders/OrderScreenHandler/OrderScreenEndWorkflowHandler.cs

@@ -9,131 +9,140 @@ using MediatR;
 using Hotline.Share.Dtos;
 using XF.Domain.Repository;
 using XF.Domain.Authentications;
+using Hotline.Configurations;
+using Microsoft.Extensions.Options;
 
 namespace Hotline.Application.Orders.OrderScreenHandler;
 public class OrderScreenEndWorkflowHandler : INotificationHandler<EndWorkflowNotify>
 {
-	private readonly IOrderRepository _orderRepository;
-	private readonly ICapPublisher _capPublisher;
-	private readonly IMapper _mapper;
-	private readonly IRepository<OrderVisitDetail> _orderVisitedDetailRepository;
-	private readonly IRepository<OrderScreen> _orderScreenRepository;
-	private readonly IRepository<OrderVisit> _orderVisitRepository;
-	private readonly ISessionContext _sessionContext;
-	private readonly IRepository<OrderScreenDetail> _orderScreenDetailRepository;
+    private readonly IOrderRepository _orderRepository;
+    private readonly ICapPublisher _capPublisher;
+    private readonly IMapper _mapper;
+    private readonly IRepository<OrderVisitDetail> _orderVisitedDetailRepository;
+    private readonly IRepository<OrderScreen> _orderScreenRepository;
+    private readonly IRepository<OrderVisit> _orderVisitRepository;
+    private readonly ISessionContext _sessionContext;
+    private readonly IRepository<OrderScreenDetail> _orderScreenDetailRepository;
+    private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
 
-	public OrderScreenEndWorkflowHandler(
-		IOrderRepository orderRepository,
-		ICapPublisher capPublisher,
-		IMapper mapper,
-		IRepository<OrderVisitDetail> orderVisitedDetailRepository,
-		IRepository<OrderScreen> orderScreenRepository,
-		IRepository<OrderVisit> orderVisitRepository,
-		ISessionContext sessionContext,
-		IRepository<OrderScreenDetail> orderScreenDetailRepository)
-	{
-		_orderRepository = orderRepository;
-		_capPublisher = capPublisher;
-		_mapper = mapper;
-		_orderScreenRepository = orderScreenRepository;
-		_orderVisitedDetailRepository = orderVisitedDetailRepository;
-		_orderVisitRepository = orderVisitRepository;
-		_sessionContext = sessionContext;
-		_orderScreenDetailRepository = orderScreenDetailRepository;
-	}
+    public OrderScreenEndWorkflowHandler(
+        IOrderRepository orderRepository,
+        ICapPublisher capPublisher,
+        IMapper mapper,
+        IRepository<OrderVisitDetail> orderVisitedDetailRepository,
+        IRepository<OrderScreen> orderScreenRepository,
+        IRepository<OrderVisit> orderVisitRepository,
+        ISessionContext sessionContext,
+        IRepository<OrderScreenDetail> orderScreenDetailRepository,
+         IOptionsSnapshot<AppConfiguration> appOptions)
+    {
+        _orderRepository = orderRepository;
+        _capPublisher = capPublisher;
+        _mapper = mapper;
+        _orderScreenRepository = orderScreenRepository;
+        _orderVisitedDetailRepository = orderVisitedDetailRepository;
+        _orderVisitRepository = orderVisitRepository;
+        _sessionContext = sessionContext;
+        _orderScreenDetailRepository = orderScreenDetailRepository;
+        _appOptions = appOptions;
 
-	/// <summary>Handles a notification</summary>
-	/// <param name="notification">The notification</param>
-	/// <param name="cancellationToken">Cancellation token</param>
-	public async Task Handle(EndWorkflowNotify notification, CancellationToken cancellationToken)
-	{
-		if (notification.Workflow.ModuleCode == WorkflowModuleConsts.OrderScreen) 
-		{
-			var workflow = notification.Workflow;
-			//审批是否通过
-			var isReviewPass = workflow.IsReviewPass();
+    }
 
-			var screen = await _orderScreenRepository.GetAsync(workflow.ExternalId, cancellationToken);
-			if (screen != null)
-			{
-				screen.Flowed(workflow.FlowedUserIds, workflow.FlowedOrgIds, workflow.HandlerUsers, workflow.HandlerOrgs);
-				if (isReviewPass)
-				{
-					screen.Status = EScreenStatus.End;
-					screen.ReplyContent = workflow.ActualOpinion;
-					//await _orderScreenRepository.UpdateAsync(screen, cancellationToken);
-					var visitDetail =
-						await _orderVisitedDetailRepository.GetAsync(screen.VisitDetailId, cancellationToken);
-					if (visitDetail != null)
-					{
-						if (screen.ScreenType == EOrderScreenType.Seat)
-						{
-							visitDetail.SeatEvaluate = ESeatEvaluate.DefaultSatisfied;
-							await _orderVisitedDetailRepository.UpdateAsync(visitDetail, cancellationToken);
-						}
-						else {
-							var screenSatisfy = new Kv() { Key = "-1", Value = "视为满意" };
-							visitDetail.OrgProcessingResults = screenSatisfy;
-							visitDetail.OrgNoSatisfiedReason = new List<Kv>();
-							//visitDetail.OrgHandledAttitude = screenSatisfy;
-							await _orderVisitedDetailRepository.UpdateAsync(visitDetail, cancellationToken);
-							// 修改主表当前评价结果
-							await _orderVisitRepository.Updateable().SetColumns(v => new OrderVisit() { NowEvaluate = screenSatisfy }).Where(v => v.Id == visitDetail.VisitId).ExecuteCommandAsync(cancellationToken);
-							//获取回访信息
-							var visit = await _orderVisitRepository.Queryable().Includes(x => x.Order)
-								.Includes(x => x.OrderVisitDetails)
-								.Where(x => x.Id == screen.VisitId).FirstAsync(cancellationToken);
-							if (visit != null)
-							{
-								//获取回访明细
-								var visitDe = visit.OrderVisitDetails.First(x => x.Id == screen.VisitDetailId);
-								//推省上
-								await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderScreenApplyed,
-									new PublishVisitDto()
-									{
-										Order = _mapper.Map<OrderDto>(visit.Order),
-										No = visit.No,
-										VisitType = visit.VisitType,
-										VisitName = visit.CreatorName,
-										VisitTime = visit.VisitTime,
-										VisitRemark = string.IsNullOrEmpty(visitDe.VisitContent) ? screenSatisfy.Value : visitDe.VisitContent,
-										AreaCode = visit.Order.AreaCode!,
-										SubjectResultSatifyCode = visitDe.OrgProcessingResults?.Key,
-										FirstSatisfactionCode = visit.Order.FirstVisitResultCode!,
-										ClientGuid = ""
-									});
+    /// <summary>Handles a notification</summary>
+    /// <param name="notification">The notification</param>
+    /// <param name="cancellationToken">Cancellation token</param>
+    public async Task Handle(EndWorkflowNotify notification, CancellationToken cancellationToken)
+    {
+        if (notification.Workflow.ModuleCode == WorkflowModuleConsts.OrderScreen)
+        {
+            var workflow = notification.Workflow;
+            //审批是否通过
+            var isReviewPass = workflow.IsReviewPass();
 
-								//推门户
-								await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisitedWeb, new PublishVisitAllDto()
-								{
-									Id = visit.Id,
-									Order = _mapper.Map<OrderDto>(visit.Order),
-									OrderVisitDetails = _mapper.Map<List<VisitDetailDto>>(visit.OrderVisitDetails),
-									VisitName = visit.CreatorName,
-									VisitTime = visit.VisitTime,
-									VisitType = visit.VisitType,
-									VisitState = visit.VisitState,
-									PublishTime = visit.PublishTime,
-								}, cancellationToken: cancellationToken);
-							}
-						}
-					}
-				}
-				else
-				{
-					screen.Status = EScreenStatus.Refuse;
-					screen.ReplyContent = workflow.ActualOpinion;
-				}
-				await _orderRepository.OrderScreenRevisionVisit(screen.VisitId, true, cancellationToken);
-				screen.NewestAuditTime = DateTime.Now;
-				await _orderScreenRepository.UpdateAsync(screen, cancellationToken);
-				OrderScreenDetail detail = new OrderScreenDetail
-				{
-					ScreenId = screen.Id
-				};
-				detail.Audit(_sessionContext.UserId, _sessionContext.UserName, _sessionContext.OrgId, _sessionContext.OrgName, 1);
-				await _orderScreenDetailRepository.AddAsync(detail, cancellationToken);
-			}
-		}
-	}
+            var screen = await _orderScreenRepository.GetAsync(workflow.ExternalId, cancellationToken);
+            if (screen != null)
+            {
+                screen.Flowed(workflow.FlowedUserIds, workflow.FlowedOrgIds, workflow.HandlerUsers, workflow.HandlerOrgs);
+                if (isReviewPass)
+                {
+                    screen.Status = EScreenStatus.End;
+                    screen.ReplyContent = workflow.ActualOpinion;
+                    //await _orderScreenRepository.UpdateAsync(screen, cancellationToken);
+                    var visitDetail =
+                        await _orderVisitedDetailRepository.GetAsync(screen.VisitDetailId, cancellationToken);
+                    if (visitDetail != null)
+                    {
+                        if (screen.ScreenType == EOrderScreenType.Seat)
+                        {
+                            visitDetail.SeatEvaluate = ESeatEvaluate.DefaultSatisfied;
+                            await _orderVisitedDetailRepository.UpdateAsync(visitDetail, cancellationToken);
+                        }
+                        else
+                        {
+                            var screenSatisfy = new Kv() { Key = "-1", Value = "视为满意" };
+                            visitDetail.OrgProcessingResults = screenSatisfy;
+                            if (_appOptions.Value.IsYiBin)
+                                visitDetail.OrgNoSatisfiedReason = new List<Kv>();
+
+                            //visitDetail.OrgHandledAttitude = screenSatisfy;
+                            await _orderVisitedDetailRepository.UpdateAsync(visitDetail, cancellationToken);
+                            // 修改主表当前评价结果
+                            await _orderVisitRepository.Updateable().SetColumns(v => new OrderVisit() { NowEvaluate = screenSatisfy }).Where(v => v.Id == visitDetail.VisitId).ExecuteCommandAsync(cancellationToken);
+                            //获取回访信息
+                            var visit = await _orderVisitRepository.Queryable().Includes(x => x.Order)
+                                .Includes(x => x.OrderVisitDetails)
+                                .Where(x => x.Id == screen.VisitId).FirstAsync(cancellationToken);
+                            if (visit != null)
+                            {
+                                //获取回访明细
+                                var visitDe = visit.OrderVisitDetails.First(x => x.Id == screen.VisitDetailId);
+                                //推省上
+                                await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderScreenApplyed,
+                                    new PublishVisitDto()
+                                    {
+                                        Order = _mapper.Map<OrderDto>(visit.Order),
+                                        No = visit.No,
+                                        VisitType = visit.VisitType,
+                                        VisitName = visit.CreatorName,
+                                        VisitTime = visit.VisitTime,
+                                        VisitRemark = string.IsNullOrEmpty(visitDe.VisitContent) ? screenSatisfy.Value : visitDe.VisitContent,
+                                        AreaCode = visit.Order.AreaCode!,
+                                        SubjectResultSatifyCode = visitDe.OrgProcessingResults?.Key,
+                                        FirstSatisfactionCode = visit.Order.FirstVisitResultCode!,
+                                        ClientGuid = ""
+                                    });
+
+                                //推门户
+                                await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisitedWeb, new PublishVisitAllDto()
+                                {
+                                    Id = visit.Id,
+                                    Order = _mapper.Map<OrderDto>(visit.Order),
+                                    OrderVisitDetails = _mapper.Map<List<VisitDetailDto>>(visit.OrderVisitDetails),
+                                    VisitName = visit.CreatorName,
+                                    VisitTime = visit.VisitTime,
+                                    VisitType = visit.VisitType,
+                                    VisitState = visit.VisitState,
+                                    PublishTime = visit.PublishTime,
+                                }, cancellationToken: cancellationToken);
+                            }
+                        }
+                    }
+                }
+                else
+                {
+                    screen.Status = EScreenStatus.Refuse;
+                    screen.ReplyContent = workflow.ActualOpinion;
+                }
+                await _orderRepository.OrderScreenRevisionVisit(screen.VisitId, true, cancellationToken);
+                screen.NewestAuditTime = DateTime.Now;
+                await _orderScreenRepository.UpdateAsync(screen, cancellationToken);
+                OrderScreenDetail detail = new OrderScreenDetail
+                {
+                    ScreenId = screen.Id
+                };
+                detail.Audit(_sessionContext.UserId, _sessionContext.UserName, _sessionContext.OrgId, _sessionContext.OrgName, 1);
+                await _orderScreenDetailRepository.AddAsync(detail, cancellationToken);
+            }
+        }
+    }
 }

+ 13 - 1
src/Hotline.Share/Dtos/Order/OrderVisitDto.cs

@@ -120,7 +120,19 @@ namespace Hotline.Share.Dtos.Order
 		/// 一级部门
 		/// </summary>
 		public string? OrgLevelOneName { get; set; }
-	}
+
+        /// <summary>
+        /// 来电主体
+        /// </summary>
+        public EIdentityType? IdentityType { get; set; }
+
+        /// <summary>
+        /// 受理时间(工单创建时间)
+        /// </summary>
+        public DateTime? CreationTimeStart { get; set; }
+        public DateTime? CreationTimeEnd { get; set; }
+
+    }
 
     public record QueryOrderPublishStatisticsAllDto : PagedRequest
     {

+ 8 - 1
src/Hotline.Share/Dtos/Order/Publish/QueryOrderPublishDto.cs

@@ -1,4 +1,5 @@
-using Hotline.Share.Requests;
+using Hotline.Share.Enums.Order;
+using Hotline.Share.Requests;
 
 namespace Hotline.Share.Dtos.Order.Publish;
 
@@ -126,4 +127,10 @@ public record QueryOrderPublishDto : PagedKeywordRequest
 	/// 一级部门
 	/// </summary>
     public string? OrgLevelOneName { get; set; }
+
+    /// <summary>
+    /// 来电主体(√)(单选)
+    /// </summary>
+    public EIdentityType? IdentityType { get; set; }
+
 }

+ 12 - 0
src/Hotline.Share/Requests/PagedKeywordRequest.cs

@@ -234,6 +234,18 @@ public record PublishedPagedRequest : PagedKeywordRequest
     /// 查询批次
     /// </summary>
     public int QueryIndex { get; set; }
+
+    /// <summary>
+    /// 一级部门
+    /// </summary>
+    public string? OrgLevelOneName { get; set; }
+
+    /// <summary>
+    /// 来电主体
+    /// </summary>
+    public EIdentityType? IdentityType { get; set; }
+
+
 }
 
 public record HotspotSubtotalReportPagedRequest : ReportPagedRequest

+ 6 - 31
src/Hotline/Orders/OrderDomainService.cs

@@ -124,6 +124,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     public async Task OrderAutomaticPublishAsync(Order order, CancellationToken cancellationToken)
     {
         var name = "中心直办件归档后默认自动发布";
+        var msg = $"OrderId: {order.Id}, No: {order.No}";
         try
         {
             if (_systemSettingCacheManager.AutomaticPublishOrder == false)
@@ -133,13 +134,13 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
             var checkResult = order.AutoPublishCheck();
             if (checkResult.NotNullOrEmpty())
             {
-                _systemLogRepository.Add(name, order.Id, checkResult);
+                _systemLogRepository.Add(name, msg, checkResult);
                 return;
             }
 
-            if (order.ProcessType != EProcessType.Zhiban)
+            if (order.FileOrgIsCenter == null || order.FileOrgIsCenter == false)
             {
-                _systemLogRepository.Add(name, order.Id, "非中心直办件");
+                _systemLogRepository.Add(name, msg, "非中心直办件");
                 return;
             }
 
@@ -147,7 +148,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         }
         catch (Exception e)
         {
-            _systemLogRepository.Add(name, order.Id, $"系统异常: {e.Message}");
+            _systemLogRepository.Add(name, msg, $"系统异常: {e.Message}");
         }
     }
 
@@ -169,32 +170,6 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         order.Publish(orderPublish.PublishState);
         await _orderRepository.UpdateAsync(order, cancellationToken);
 
-        //需求251  某些工单需自动发送短信
-        //任何类型的省工单都不需要发送短信
-        if (order.Source != ESource.ProvinceStraight)
-        {
-            var code = "";
-            //受理类型为“投诉、举报”
-            if (order.AcceptTypeCode == "30" || order.AcceptTypeCode == "35")
-                code = "1017";
-            else
-                code = "1018";
-
-            var messageDto = new Share.Dtos.Push.MessageDto
-            {
-                PushBusiness = EPushBusiness.SearchSms,
-                ExternalId = id,
-                OrderId = order.Id,
-                PushPlatform = EPushPlatform.Sms,
-                Remark = order.Title,
-                Name = order.FromName,
-                TemplateCode = code,
-                Params = new List<string>() { order.No, order.Password },
-                TelNumber = order.Contact,
-            };
-            await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
-        }
-
         //推省上
         var publishPublishOrder = orderPublish.Adapt<PublishPublishOrderDto>();
         publishPublishOrder.Order = order.Adapt<OrderDto>();
@@ -309,7 +284,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         //任何类型的省工单都不需要发送短信
         try
         {
-            if (order.Source != ESource.ProvinceStraight)
+            if (order.Source != ESource.ProvinceStraight && _appOptions.Value.IsYiBin)
             {
                 var code = "";
                 //受理类型为“投诉、举报”

+ 10 - 4
src/Hotline/Settings/TimeLimitDomain/ExpireTimeSupplier/WorkDaySupplier.cs

@@ -187,16 +187,19 @@ public class WorkDaySupplier : IExpireTimeSupplier, IScopeDependency
                     beginTime = WorkBeginTime;
                 }
                 int w = timeConfig.Count;
+                int days = 1;
                 while (true && w != 0)
                 {   
-                    if (await IsWorkDay(beginTime))
+                    if (await IsWorkDay(beginTime.AddDays(days)))
                     {
-                        beginTime = beginTime.AddDays(1);
+                        beginTime = beginTime.AddDays(days);
                         w--;
+                        days = 1;
                     }
                     else
                     {
-                        beginTime = beginTime.AddDays(1);
+                        //beginTime = beginTime.AddDays(1);
+                        days++;
                     }
                 }
                 beginTime = beginTime.AddSeconds(-1);
@@ -208,7 +211,10 @@ public class WorkDaySupplier : IExpireTimeSupplier, IScopeDependency
                         {
                             beginTime = DateTime.Parse(beginTime.AddDays(-1).ToShortDateString() + " " + timeConfig.WorkTime[1] + ":00");
                         }
-                        break;
+                        else
+                        {
+                            break;
+                        }
                     }
                     else if(!await IsWorkDay(beginTime))
                     {