Pārlūkot izejas kodu

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

田爽 5 mēneši atpakaļ
vecāks
revīzija
63e8be82c5

+ 1 - 0
src/Hotline.Api/Controllers/HomeController.cs

@@ -191,6 +191,7 @@ public class HomeController : BaseController
             OldHotlineOrderState = _systemSettingCacheManager.GetSetting(SettingConstants.OldHotlineOrderState).SettingValue[0],
             FileExt = _systemSettingCacheManager.GetSetting(SettingConstants.FileExt).SettingValue[0],
             NationalPlatformWordLimit = int.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.NationalPlatformWordLimit).SettingValue[0]),
+            HandleOpinionWordLimit= int.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.HandleOpinionWordLimit).SettingValue[0]),
         };
         return rsp;
     }

+ 63 - 7
src/Hotline.Api/Controllers/OrderController.cs

@@ -297,13 +297,13 @@ public class OrderController : BaseController
     public async Task<PagedDto<PublishDto>> PublishOrderList([FromQuery] QueryOrderPublishDto dto)
     {
         var (total, items) = await _orderRepository.Queryable()
-            .Includes(d => d.OrderPublish)
+            //.Includes(d => d.OrderPublish)
             .Where(x => x.Status == EOrderStatus.Filed)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.StartsWith(dto.Keyword!))
             .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No.Contains(dto.No))
             .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Title.Contains(dto.Title))
-            .WhereIF(dto.PubState == EPubState.Pub, d => d.Status >= EOrderStatus.Published)
-            .WhereIF(dto.PubState == EPubState.NoPub, d => d.Status < EOrderStatus.Published)
+            //.WhereIF(dto.PubState == EPubState.Pub, d => d.Status >= EOrderStatus.Published)
+            //.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!) //派单人
@@ -314,8 +314,8 @@ public class OrderController : BaseController
             .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone == dto.FromPhone) //来电号码
                                                                                               //.WhereIF(!string.IsNullOrEmpty(dto.PubMan),
                                                                                               //    d => d.AcceptorName.Contains(dto.PubMan!) || d.AcceptorStaffNo.Contains(dto.PubMan!))
-            .WhereIF(dto.PubRange == EPublicState.Pub, d => d.OrderPublish.PublishState)
-            .WhereIF(dto.PubRange == EPublicState.NoPub, d => !d.OrderPublish.PublishState)
+            //.WhereIF(dto.PubRange == EPublicState.Pub, d => d.OrderPublish.PublishState)
+            //.WhereIF(dto.PubRange == EPublicState.NoPub, d => !d.OrderPublish.PublishState)
             .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, d => d.Source == ESource.ProvinceStraight)
             .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, d => d.Source != ESource.ProvinceStraight)
             .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.ProcessType == EProcessType.Zhiban)
@@ -324,7 +324,7 @@ public class OrderController : BaseController
             .WhereIF(dto.IsCountersign != null && dto.IsCountersign == false, d => d.CounterSignType == null)
             .WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptType))
             .WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.HotspotId))
-            .WhereIF(dto.Resolve.HasValue, d => d.OrderPublish.Resolve == dto.Resolve)
+            //.WhereIF(dto.Resolve.HasValue, d => d.OrderPublish.Resolve == dto.Resolve)
             .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
             .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
             .WhereIF(dto.FiledTimeStart.HasValue, d => d.FiledTime >= dto.FiledTimeStart)
@@ -592,7 +592,7 @@ public class OrderController : BaseController
                 .Select(x => new Kv { Key = x.DicDataValue, Value = x.DicDataName }).ToList()
         };
         var (idName, idNames) = await _workflowDomainService.GetHandleOrgsAsync(order.WorkflowId, HttpContext.RequestAborted);
-        res.ActualHandleOrgName = idName;
+        res.ActualHandleOrgName = new Kv() {  Key=order.ActualHandleOrgCode, Value= order.ActualHandleOrgName };
         res.idNames = order.CounterSignType == null
             ? null
             : idNames.Where(d => d.Key != idName.Key).ToList();
@@ -6493,11 +6493,67 @@ public class OrderController : BaseController
     [HttpGet("order/about_expire/list")]
     public async Task<PagedDto<OrderDto>> AboutList([FromQuery] AboutToExpireListDto dto)
     {
+        var version = _systemSettingCacheManager.GetAboutToExpireVersion;
+        if (version == 1)
+        {
+            var (t, i) = await _orderApplication.GetAboutToExpireAsyncV1(dto)
+                .ToPagedListAsync(dto, HttpContext.RequestAborted);
+            return new PagedDto<OrderDto>(t, _mapper.Map<IReadOnlyList<OrderDto>>(i));
+        }
         var (total, items) = await _orderApplication.GetAboutToExpireAsync(dto)
             .ToPagedListAsync(dto, HttpContext.RequestAborted);
         return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
     }
 
+    /// <summary>
+    /// 工单即将超期列表(不查总条数)
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("order/about_expire/list_items")]
+    public async Task<List<OrderDto>> AboutListAsnc([FromQuery] AboutToExpireListDto dto)
+    {
+        var version = _systemSettingCacheManager.GetAboutToExpireVersion;
+        var fixedQueryCount = _systemSettingCacheManager.FixedQueryCount;
+        if (version == 1)
+        {
+            return (await _orderApplication.GetAboutToExpireAsyncV1(dto).ToFixedListAsync(dto.QueryIndex, fixedQueryCount, HttpContext.RequestAborted))
+                .Adapt<List<OrderDto>>();
+        }
+        return (await _orderApplication.GetAboutToExpireAsync(dto).ToFixedListAsync(dto.QueryIndex, fixedQueryCount, HttpContext.RequestAborted))
+            .Adapt<List<OrderDto>>();
+    }
+
+    /// <summary>
+    /// 工单即将超期列表总条数
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+   [HttpGet("order/about_expire/list_count")]
+    public async Task<int> AboutListCountAsnc([FromQuery] AboutToExpireListDto dto)
+    {
+        var version = _systemSettingCacheManager.GetAboutToExpireVersion;
+        if (version == 1)
+        {
+            return await _orderApplication.GetAboutToExpireAsyncV1(dto).CountAsync(HttpContext.RequestAborted);
+        }
+        return await _orderApplication.GetAboutToExpireAsync(dto).CountAsync(HttpContext.RequestAborted);
+    }
+
+    /// <summary>
+    /// 工单即将超期列表(优化测试)
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    //[Permission(EPermission.OverdueOrderV1)]
+    [HttpGet("order/about_expire/list_optimize")]
+    public async Task<PagedDto<OrderDto>> GetAboutToExpireAsyncV1([FromQuery] AboutToExpireListDto dto)
+    {
+        var (t, i) = await _orderApplication.GetAboutToExpireAsyncV1(dto)
+            .ToPagedListAsync(dto, HttpContext.RequestAborted);
+        return new PagedDto<OrderDto>(t, _mapper.Map<IReadOnlyList<OrderDto>>(i));
+    }
+
     /// <summary>
     /// 工单即将超期列表导出
     /// </summary>

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

@@ -300,7 +300,12 @@ ICallApplication callApplication,
     [AllowAnonymous]
     public async Task PublishVisitToProvinceByNo(string Nos)
     {
+        Nos = Nos.Trim();
         string[] no = Nos.Split(',');
+        for (int i = 0; i < no.Length; i++)
+        {
+            no[i] = no[i].Trim();
+        }
         var list = await _orderRepository.Queryable()
              .Includes(x => x.OrderVisits.Where(q => q.VisitState == EVisitState.Visited).ToList(), d => d.OrderVisitDetails)
              .Where(x => no.Contains(x.No) && x.Status == EOrderStatus.Visited).ToListAsync();
@@ -312,6 +317,7 @@ ICallApplication callApplication,
                 var visit = item.OrderVisits.FirstOrDefault();
                 if (visit != null)
                 {
+                    var visitRemark = visit.OrderVisitDetails.Where(q => q.VisitTarget == EVisitTarget.Org).FirstOrDefault()?.VisitContent;
                     //推省上
                     await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisited,
                     new PublishVisitDto()
@@ -321,7 +327,7 @@ ICallApplication callApplication,
                         VisitType = visit.VisitType,
                         VisitName = visit.CreatorName,
                         VisitTime = visit.VisitTime,
-                        VisitRemark = visit.OrderVisitDetails.Where(q => q.VisitTarget == EVisitTarget.Org).FirstOrDefault()?.VisitContent,
+                        VisitRemark = string.IsNullOrEmpty(visitRemark) == true ? "满意" : visitRemark,
                         AreaCode = item.AreaCode!,
                         SubjectResultSatifyCode = visit.NowEvaluate.Key,
                         FirstSatisfactionCode = item.FirstVisitResultCode,

+ 4 - 4
src/Hotline.Application.Contracts/Validators/FlowEngine/BasicWorkflowDtoValidator.cs

@@ -15,10 +15,10 @@ namespace Hotline.Application.Contracts.Validators.FlowEngine
         {
             RuleFor(d => d.BusinessType).NotNull();
             RuleFor(d => d.HandlerType).NotNull();
-            RuleFor(d => d.Opinion)
-                .Cascade(CascadeMode.Stop)
-                .NotEmpty()
-                .MaximumLength(2000);
+            //RuleFor(d => d.Opinion)
+            //    .Cascade(CascadeMode.Stop)
+            //    .NotEmpty()
+            //    .MaximumLength(4000);
         }
     }
 }

+ 4 - 4
src/Hotline.Application.Contracts/Validators/FlowEngine/NextWorkflowDtoValidator.cs

@@ -14,10 +14,10 @@ namespace Hotline.Application.Contracts.Validators.FlowEngine
         {
             Include(new BasicWorkflowDtoValidator());
             RuleFor(d => d.WorkflowId).NotEmpty();
-            RuleFor(d => d.Opinion)
-                .Cascade(CascadeMode.Stop)
-                .NotEmpty()
-                .MaximumLength(2000);
+            //RuleFor(d => d.Opinion)
+            //    .Cascade(CascadeMode.Stop)
+            //    .NotEmpty()
+            //    .MaximumLength(4000);
             //RuleFor(d=>d.ExpiredTime).NotEmpty();
             //RuleFor(d=>d.NextStepCode).NotEmpty();
         }

+ 1 - 0
src/Hotline.Application.Tests/Application/SystemSettingCacheManagerTest.cs

@@ -35,5 +35,6 @@ public class SystemSettingCacheManagerTest
         delaySecondEntity.ShouldNotBeNull("DefaultVisitSmsDelaySecond 系统设置为NULL");
 
         _systemSettingCacheManager.CallSyncUnPushDateTime.ShouldBe(DateTime.Parse("2024/11/19 18:08:00"));
+        _systemSettingCacheManager.GetAboutToExpireVersion.ShouldBe(0);
     }
 }

+ 14 - 0
src/Hotline.Application/Orders/IOrderApplication.cs

@@ -54,7 +54,21 @@ namespace Hotline.Application.Orders
 
         ISugarQueryable<Order> GetToExpireAsync(AboutToExpireListDto dto);
         //Task<PagedDto<WorkflowOrderDto>> GetToExpireNodeAsync(AboutToExpireListDto dto, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 即将超期列表优化V1版本
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        ISugarQueryable<Order> GetAboutToExpireAsyncV1(AboutToExpireListDto dto);
+
+        /// <summary>
+        /// 即将超期列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
         ISugarQueryable<Order> GetAboutToExpireAsync(AboutToExpireListDto dto);
+
         //Task<PagedDto<WorkflowOrderDto>> GetAboutToExpireNodeAsync(AboutToExpireListDto dto, CancellationToken cancellationToken);
         Task OrderParticiple(string inputStr, string orderId, DateTime time, CancellationToken cancellationToken);
         Task OrderSensitiveParticiple(string inputStr, string orderId, CancellationToken cancellationToken);

+ 68 - 0
src/Hotline.Application/Orders/OrderApplication.cs

@@ -316,6 +316,73 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         await _orderRepository.UpdateAsync(order, cancellationToken);
     }
 
+    /// <summary>
+    /// 工单即将超期列表(优化版本v1)
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public ISugarQueryable<Order> GetAboutToExpireAsyncV1(AboutToExpireListDto dto)
+    {
+        DateTime? dateTime = DateTime.Now;
+        var IsCenter = _sessionContextProvider.SessionContext.OrgIsCenter;
+        int orgLevel = _sessionContextProvider.SessionContext.OrgLevel;
+        var orgCode = _sessionContextProvider.SessionContext.OrgId;
+        var query = _orderRepository.Queryable();
+        if (IsCenter == true)
+            query = _orderRepository.Queryable(canView: !IsCenter);
+        return query
+            .Includes(d => d.OrderDelays)
+            .WhereIF(orgLevel == 3, d => SqlFunc.Subqueryable<WorkflowStep>()
+                .Where(step => step.ExternalId == d.Id && step.Status != EWorkflowStepStatus.Handled &&
+                               ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) &&
+                                 step.HandlerId == _sessionContextProvider.SessionContext.RequiredUserId) ||
+                                (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) &&
+                                 step.HandlerOrgId == _sessionContextProvider.SessionContext.RequiredOrgId) ||
+                                (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) &&
+                                 _sessionContextProvider.SessionContext.Roles.Contains(step.RoleId))))
+                .Any())
+             .WhereIF(orgLevel == 2 || orgLevel == 1, d => SqlFunc.Subqueryable<WorkflowStep>()
+                .Where(step => step.ExternalId == d.Id &&
+                               step.Status != EWorkflowStepStatus.Handled &&
+                               (!string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId.StartsWith(orgCode)))
+                .Any())
+            .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
+            .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No.Contains(dto.No!))
+            .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Title.Contains(dto.Title!))
+            .WhereIF(dto.Delay.HasValue && dto.Delay == 1, d => d.OrderDelays.Any() == true)
+            .WhereIF(dto.Delay.HasValue && dto.Delay == 2, d => d.OrderDelays.Any() == false)
+            //&& stTime >= d.ExpiredTime.Value && stTime2 <= d.ExpiredTime.Value
+            //.Where(d => d.ExpiredTime != null &&
+            //         d.Status != EOrderStatus.Filed && d.Status != EOrderStatus.Published && d.Status != EOrderStatus.Visited && stTime >= d.ExpiredTime.Value && stTime2 <= d.ExpiredTime.Value)
+            .Where(d => d.Status < EOrderStatus.Filed && dateTime > d.NearlyExpiredTime && dateTime < d.ExpiredTime)
+            .OrderByIF(dto is { SortField: "no", SortRule: 0 }, x => x.No, OrderByType.Asc) //工单编号升序
+            .OrderByIF(dto is { SortField: "no", SortRule: 1 }, x => x.No, OrderByType.Desc) //工单编号降序
+            .OrderByIF(dto is { SortField: "isProvinceText", SortRule: 0 }, x => x.IsProvince, OrderByType.Asc)//是否省工单升序
+            .OrderByIF(dto is { SortField: "isProvinceText", SortRule: 1 }, x => x.IsProvince, OrderByType.Desc)//是否省工单降序
+            .OrderByIF(dto is { SortField: "currentStepName", SortRule: 0 }, x => x.CurrentStepName, OrderByType.Asc)//当前节点升序
+            .OrderByIF(dto is { SortField: "currentStepName", SortRule: 1 }, x => x.CurrentStepName, OrderByType.Desc)//当前节点降序
+            .OrderByIF(dto is { SortField: "delayText", SortRule: 0 }, x => x.OrderDelays.Count, OrderByType.Asc) //是否延期升序
+            .OrderByIF(dto is { SortField: "delayText", SortRule: 1 }, x => x.OrderDelays.Count, OrderByType.Desc) //是否延期升序
+            .OrderByIF(dto is { SortField: "statusText", SortRule: 0 }, x => x.Status, OrderByType.Asc) //工单状态升序
+            .OrderByIF(dto is { SortField: "statusText", SortRule: 1 }, x => x.Status, OrderByType.Desc) //工单状态升序
+            .OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, x => x.StartTime, OrderByType.Asc) //受理时间升序
+            .OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, x => x.StartTime, OrderByType.Desc) //受理时间降序
+            .OrderByIF(dto is { SortField: "expiredTime", SortRule: 0 }, x => x.ExpiredTime, OrderByType.Asc) //期满时间升序
+            .OrderByIF(dto is { SortField: "expiredTime", SortRule: 1 }, x => x.ExpiredTime, OrderByType.Desc) //期满时间降序
+            .OrderByIF(dto is { SortField: "actualHandleOrgName", SortRule: 0 }, x => x.ActualHandleOrgName, OrderByType.Asc)// 接办部门升序
+            .OrderByIF(dto is { SortField: "actualHandleOrgName", SortRule: 1 }, x => x.ActualHandleOrgName, OrderByType.Desc)// 接办部门降序
+            .OrderByIF(dto is { SortField: "acceptType", SortRule: 0 }, x => x.AcceptTypeCode, OrderByType.Asc) //受理类型升序
+            .OrderByIF(dto is { SortField: "acceptType", SortRule: 1 }, x => x.AcceptTypeCode, OrderByType.Desc) //受理类型降序
+            .OrderByIF(dto is { SortField: "counterSignTypeText", SortRule: 0 }, x => x.CounterSignType, OrderByType.Asc) //是否会签升序
+            .OrderByIF(dto is { SortField: "counterSignTypeText", SortRule: 1 }, x => x.CounterSignType, OrderByType.Desc) //是否会签降序
+            .OrderByIF(dto is { SortField: "orgLevelOneName", SortRule: 0 }, x => x.OrgLevelOneName, OrderByType.Asc) //一级部门升序
+            .OrderByIF(dto is { SortField: "orgLevelOneName", SortRule: 1 }, x => x.OrgLevelOneName, OrderByType.Desc)//一级部门降序
+            .OrderByIF(dto is { SortField: "hotspotName", SortRule: 0 }, x => x.HotspotId, OrderByType.Asc) //热点升序
+            .OrderByIF(dto is { SortField: "hotspotName", SortRule: 1 }, x => x.HotspotId, OrderByType.Desc) //热点降序
+            .OrderByIF(dto is { SortField: "acceptorName", SortRule: 0 }, x => x.AcceptorName, OrderByType.Asc)// 受理人升序
+            .OrderByIF(dto is { SortField: "acceptorName", SortRule: 1 }, x => x.AcceptorName, OrderByType.Desc);// 受理人升序
+    }
+
     /// <summary>
     /// 即将超期列表
     /// </summary>
@@ -339,6 +406,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         //    query = _orderRepository.Queryable(canView: !IsCenter);
         //return query.Includes(d => d.OrderDelays)
         return _orderRepository.Queryable(canView: !IsCenter)
+            .Includes(d => d.OrderDelays)
             .WhereIF(orgLevel == 3, d => SqlFunc.Subqueryable<WorkflowStep>()
                 .Where(step => step.ExternalId == d.Id && step.Status != EWorkflowStepStatus.Handled &&
                                ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) &&

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

@@ -616,6 +616,11 @@ public record AboutToExpireListDto : PagedKeywordRequest
     /// 排序方式 // 0 升序 1 降序
     /// </summary>
     public int? SortRule { get; set; } = 0;
+
+    /// <summary>
+    /// 查询批次
+    /// </summary>
+    public int QueryIndex { get; set; }
 }
 
 public class PublishOrderAllDto

+ 1 - 0
src/Hotline.Share/Tools/TupleExtensions.cs

@@ -1,4 +1,5 @@
 using Hotline.Share.Dtos;
+using Mapster;
 using System;
 using System.Collections.Generic;
 using System.Linq;

+ 5 - 0
src/Hotline/Caching/Interfaces/ISystemSettingCacheManager.cs

@@ -43,5 +43,10 @@ namespace Hotline.Caching.Interfaces
         /// 通话记录同步时不推送省上的时间(默认:2024/11/19 18:08)
         /// </summary>
         DateTime CallSyncUnPushDateTime { get; }
+
+        /// <summary>
+        /// 即将超期列表调用方法的版本(有优化办法和老版本)
+        /// </summary>
+        int GetAboutToExpireVersion { get; }
     }
 }

+ 7 - 0
src/Hotline/Caching/Services/SystemSettingCacheManager.cs

@@ -167,5 +167,12 @@ namespace Hotline.Caching.Services
         public DateTime CallSyncUnPushDateTime =>
             GetOrDefault("08dc9bed-41da-4074-8289-e753e8fa8ea4", SettingConstants.CallSyncUnPushDateTime, "通话记录同步时不推送省上的时间(默认:2024/11/19 18:08)",
                 DateTime.Parse("2024/11/19 18:08:00"), "通话记录同步时不推送省上的时间(默认:2024/11/19 18:08), 在兴唐数据库 callstarttime 字段时间小于设置 (默认:2024/11/19 18:08) 的时间都不会推送给省上");
+
+        /// <summary>
+        /// 即将超期列表调用方法的版本(有优化办法和老版本)
+        /// </summary>
+        public int GetAboutToExpireVersion => 
+            GetOrDefault("08dc39bd-0ead-477c-87bc-97252dd8fb26", SettingConstants.GetAboutToExpireVersion, "前调用后端超期列表时后端控制调用优化的代码还是老代码", 0, "前调用后端超期列表时后端控制调用优化的代码还是老代码, 目前只有一个优化版本. 该值为 1 调用优化过的代码.");
+
     }
 }

+ 1 - 0
src/Hotline/Orders/Order.cs

@@ -24,6 +24,7 @@ namespace Hotline.Orders
     [SugarIndex("unique_order_no", nameof(Order.No), OrderByType.Desc, true)]
     [SugarIndex("index_order_creationtime", nameof(Order.CreationTime), OrderByType.Asc)]
     [SugarIndex("index_order_startTime", nameof(Order.StartTime), OrderByType.Asc)]
+    [SugarIndex("index_order_status", nameof(Status), OrderByType.Asc)]
     [SugarIndex("index_order_expiredTime", nameof(Order.ExpiredTime), OrderByType.Asc)]
 	public partial class Order : PositionWorkflowEntity
     {

+ 5 - 0
src/Hotline/Permissions/EPermission.cs

@@ -743,6 +743,11 @@ namespace Hotline.Permissions
         [Display(GroupName = "工单超期列表", Name = "工单超期列表", Description = "工单超期列表")]
         OverdueOrder = 201002,
 
+        /// <summary>
+        /// 工单超期列表(优化)
+        /// </summary>
+        [Display(GroupName = "工单超期列表(优化)", Name = "工单超期列表(优化)", Description = "工单超期列表(优化)")]
+        OverdueOrderV1 = 201003,
         #endregion
 
         #endregion

+ 10 - 0
src/Hotline/Settings/SettingConstants.cs

@@ -581,6 +581,11 @@ namespace Hotline.Settings
         /// </summary>
         public const string NationalPlatformWordLimit = "NationalPlatformWordLimit";
 
+        /// <summary>
+        /// 办理意见字数限制
+        /// </summary>
+        public const string HandleOpinionWordLimit = "HandleOpinionWordLimit";
+
         /// <summary>
         /// 取消发布功能总开关
         /// </summary>
@@ -612,5 +617,10 @@ namespace Hotline.Settings
         /// 通话记录同步时不推送省上的时间(默认:2024/11/19 18:08)
         /// </summary>
         public const string CallSyncUnPushDateTime = "CallSyncUnPushDateTime";
+
+        /// <summary>
+        /// 即将超期列表调用方法的版本(有优化办法和老版本)
+        /// </summary>
+        public const string GetAboutToExpireVersion = "GetAboutToExpireVersion";
     }
 }