Ver código fonte

新增临时待发布功能和调整泸州12345小程序办件选登区域的取值

libin 3 semanas atrás
pai
commit
a2680721e4

+ 135 - 37
src/Hotline.Api/Controllers/OrderController.cs

@@ -169,6 +169,7 @@ public class OrderController : BaseController
     private readonly IRepository<Hotline.Special.SpecialNumber> _specialNumberRepository;
     private readonly IRepository<OrderVisitDetailCopy> _orderVisitDetailCopyRepository;
     private readonly IRedPackAuditRepository _redPackAuditRepository;
+    private readonly IRepository<OrderPublishTemp> _orderPublishTempRepository;
 
     public OrderController(
         IOrderDomainService orderDomainService,
@@ -248,7 +249,8 @@ public class OrderController : BaseController
         IRedPackAuditRepository redPackAuditRepository,
         IRepository<Hotline.Special.SpecialNumber> specialNumberRepository,
         IRepository<OrderVisitDetailCopy> orderVisitDetailCopyRepository,
-        ISystemLogRepository systemLogRepository)
+        ISystemLogRepository systemLogRepository,
+        IRepository<OrderPublishTemp> orderPublishTempRepository)
     {
         _orderDomainService = orderDomainService;
         _orderRepository = orderRepository;
@@ -328,6 +330,7 @@ public class OrderController : BaseController
         _specialNumberRepository = specialNumberRepository;
         _orderVisitDetailCopyRepository = orderVisitDetailCopyRepository;
         _systemLogRepository = systemLogRepository;
+        _orderPublishTempRepository = orderPublishTempRepository;
     }
 
     #endregion
@@ -368,8 +371,8 @@ public class OrderController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPost("publishorder/export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> ExportPublishOrders([FromBody] ExportExcelDto<QueryOrderPublishDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> ExportPublishOrders([FromBody] ExportExcelDto<QueryOrderPublishDto> dto)
     {
         var query = _orderApplication.GetPublishOrderList(dto.QueryDto);
         List<Order> orders;
@@ -813,6 +816,101 @@ public class OrderController : BaseController
         return res;
     }
 
+    /// <summary>
+    /// 临时待发布(集合)
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("publish/temp/items")]
+    public async Task<IReadOnlyList<PublishDto>> GetPublishTempOrderListAsync([FromQuery] QueryOrderPublishDto dto)
+    {
+        var orders = await _orderApplication.GetPublishTempOrderList(dto)
+            .ToPageListWithoutTotalAsync(dto, HttpContext.RequestAborted);
+        return _mapper.Map<IReadOnlyList<PublishDto>>(orders);
+    }
+
+    /// <summary>
+    /// 临时待发布
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("publish/temp/count")]
+    public async Task<int> GetPublishTempOrderCount([FromQuery] QueryOrderPublishDto dto)
+    {
+        return await _orderApplication.GetPublishTempOrderList(dto).CountAsync(HttpContext.RequestAborted);
+    }
+
+    /// <summary>
+    /// 临时待发布--导出
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpPost("publishorder/temp/export")]
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> ExportPublishTempOrders([FromBody] ExportExcelDto<QueryOrderPublishDto> dto)
+    {
+        var query = _orderApplication.GetPublishTempOrderList(dto.QueryDto);
+        List<Order> orders;
+        if (dto.IsExportAll)
+        {
+            orders = await query.ToListAsync(HttpContext.RequestAborted);
+        }
+        else
+        {
+            var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+            orders = items;
+        }
+
+        var orderDtos = _mapper.Map<ICollection<PublishDto>>(orders);
+
+        dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass<PublishDto>(dto.ColumnInfos);
+
+        var dtos = orderDtos
+            .Select(stu => _mapper.Map(stu, typeof(PublishDto), dynamicClass))
+            .Cast<object>()
+            .ToList();
+
+        var stream = ExcelHelper.CreateStream(dtos);
+
+        return ExcelStreamResult(stream, "临时发布待办数据");
+    }
+
+    /// <summary>
+    /// 临时待发布(发布)
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("publish/temp")]
+    [LogFilter("临时发布")]
+    public async Task PublishTempOrder([FromBody] PublishOrderDto dto)
+    {
+        //验证订单
+        var order = await _orderRepository.GetAsync(dto.Id, HttpContext.RequestAborted)
+                    ?? throw UserFriendlyException.SameMessage("未找到工单,无法发布");
+
+        if (order.Status != EOrderStatus.Filed)
+            throw UserFriendlyException.SameMessage("当前状态无法发布");
+
+        var enabled = _systemSettingCacheManager.CancelPublishOrderEnabled;
+        if (enabled)
+        {
+            // 获取上一次被取消发布的发布信息
+            var publishedDeleted = await _orderPublishRepository.Queryable().Where(m => m.OrderId == dto.Id && m.IsDeleted == true)
+                .OrderByDescending(m => m.CreationTime).FirstAsync(HttpContext.RequestAborted);
+            if (publishedDeleted != null && _sessionContext.RequiredUserId != publishedDeleted.CreatorId)
+            {
+                throw UserFriendlyException.SameMessage($"该工单被取消发布过, 之前的发布人是 [{publishedDeleted.CreatorName}], 您不能发布;");
+            }
+        }
+
+        //新增发布工单
+        var orderPublish = _mapper.Map<OrderPublishTemp>(dto);
+        orderPublish.OrderId = order.Id;
+        orderPublish.No = order.No;
+
+        // 新增临时待发布
+        string id = await _orderPublishTempRepository.AddAsync(orderPublish);
+    }
+
     /// <summary>
     /// 已发布列表
     /// </summary>
@@ -886,8 +984,8 @@ public class OrderController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPost("publishedorder/export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> ExportPublishedOrders([FromBody] ExportExcelDto<PublishedPagedRequest> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> ExportPublishedOrders([FromBody] ExportExcelDto<PublishedPagedRequest> dto)
     {
         var query = _orderApplication.GetPublishedOrder(dto.QueryDto);
         List<OrderPublish> orders;
@@ -1174,8 +1272,8 @@ public class OrderController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPost("visit/export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> ExportOrderVisit([FromBody] ExportExcelDto<QueryOrderVisitDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> ExportOrderVisit([FromBody] ExportExcelDto<QueryOrderVisitDto> dto)
     {
         var query = _orderApplication.QueryOrderVisitList(dto.QueryDto);
         List<OrderVisit> orders;
@@ -1620,8 +1718,8 @@ public class OrderController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPost("visit/judge-query-export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> VisitJudgeQueryExport([FromBody] ExportExcelDto<VisitJudgeQueryReq> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> VisitJudgeQueryExport([FromBody] ExportExcelDto<VisitJudgeQueryReq> dto)
     {
         var query = _orderRepository.VisitJudgeQuery(dto.QueryDto);
 
@@ -1751,8 +1849,8 @@ public class OrderController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPost("org-visitdetail-list-export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> OrgVisitDetailListExport([FromBody] ExportExcelDto<OrgVisitDetailListReq> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> OrgVisitDetailListExport([FromBody] ExportExcelDto<OrgVisitDetailListReq> dto)
     {
         //特殊需求:管理员账号使用该查询条件查询的数据,与富顺的账号查询的数据一致;
         var isAdmin = _orderDomainService.IsCheckAdmin();
@@ -2599,8 +2697,8 @@ public class OrderController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPost("delay/export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> ExportDelayList([FromBody] ExportExcelDto<DelayListDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> ExportDelayList([FromBody] ExportExcelDto<DelayListDto> dto)
     {
         var query = _orderApplication.DelayList(dto.QueryDto);
         List<OrderDelay> orders;
@@ -2648,8 +2746,8 @@ public class OrderController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPost("wait_delay/export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> ExportWaitDelayList([FromBody] ExportExcelDto<DelayListDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> ExportWaitDelayList([FromBody] ExportExcelDto<DelayListDto> dto)
     {
         var query = _orderApplication.WaitDelayList(dto.QueryDto);
         List<OrderDelay> orders;
@@ -2808,8 +2906,8 @@ public class OrderController : BaseController
     /// </summary>
     /// <returns></returns>
     [HttpPost("mayscreen/_export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> ScreenListExport([FromBody] ExportExcelDto<MayScreenListDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> ScreenListExport([FromBody] ExportExcelDto<MayScreenListDto> dto)
     {
         if (_appOptions.Value.IsYiBin) dto.QueryDto.ScreenType = EOrderScreenType.Org;
 
@@ -2867,8 +2965,8 @@ public class OrderController : BaseController
     /// </summary>
     /// <returns></returns>
     [HttpPost("screen_list/_export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> ScreenListExport([FromBody] ExportExcelDto<ScreenListDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> ScreenListExport([FromBody] ExportExcelDto<ScreenListDto> dto)
     {
         var query = _orderApplication.OrderScreenList(dto.QueryDto);
         List<OrderScreen> data;
@@ -3425,8 +3523,8 @@ public class OrderController : BaseController
     }
 
     [HttpPost("supervise/travel/export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> ExportTravel([FromBody] ExportExcelDto<QueryOrderDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> ExportTravel([FromBody] ExportExcelDto<QueryOrderDto> dto)
     {
         var query = _orderApplication.QueryTravel(dto.QueryDto);
         List<Order> orders;
@@ -4152,8 +4250,8 @@ public class OrderController : BaseController
     }
 
     [HttpPost("order/export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> ExportOrders([FromBody] ExportExcelDto<QueryOrderDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> ExportOrders([FromBody] ExportExcelDto<QueryOrderDto> dto)
     {
         var query = _orderApplication.QueryOrders(dto.QueryDto);
         List<Order> orders;
@@ -6653,8 +6751,8 @@ public class OrderController : BaseController
     /// </summary>
     /// <returns></returns>
     [HttpPost("order_previous_list/_export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> OrgDataListDetailExport([FromBody] ExportExcelDto<SendBackListDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> OrgDataListDetailExport([FromBody] ExportExcelDto<SendBackListDto> dto)
     {
         var query = _orderSendBackAuditApplication.AuditList(dto.QueryDto);
         List<OrderSendBackAudit> data;
@@ -8494,8 +8592,8 @@ public class OrderController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPost("order_word/list/export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> ListExport([FromBody] ExportExcelDto<OrderWordListDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> ListExport([FromBody] ExportExcelDto<OrderWordListDto> dto)
     {
         var query = _orderRepository.QueryOrderWordList(dto.QueryDto);
         List<OrderWord> list;
@@ -8620,8 +8718,8 @@ public class OrderController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpPost("order_observe/list/export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> ListExport([FromBody] ExportExcelDto<OrderObserveListDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> ListExport([FromBody] ExportExcelDto<OrderObserveListDto> dto)
     {
         var query = _orderApplication.OrderObserveList(dto.QueryDto);
         List<OrderObserve> data;
@@ -8817,8 +8915,8 @@ public class OrderController : BaseController
     /// </summary>
     /// <returns></returns>
     [HttpPost("order/about_expire/_export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> AboutListExport([FromBody] ExportExcelDto<AboutToExpireListDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> AboutListExport([FromBody] ExportExcelDto<AboutToExpireListDto> dto)
     {
         var query = _orderApplication.GetAboutToExpireAsync(dto.QueryDto);
         List<Hotline.Orders.Order> orders;
@@ -8871,8 +8969,8 @@ public class OrderController : BaseController
     /// </summary>
     /// <returns></returns>
     [HttpPost("order/expire/_export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> ExpireListExport([FromBody] ExportExcelDto<AboutToExpireListDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> ExpireListExport([FromBody] ExportExcelDto<AboutToExpireListDto> dto)
     {
         var query = _orderApplication.GetToExpireAsync(dto.QueryDto);
         List<Hotline.Orders.Order> orders;
@@ -9255,8 +9353,8 @@ public class OrderController : BaseController
     /// </summary>
     /// <returns></returns>
     [HttpPost("secondary_handling/apply_export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> OrderSecondaryHandlingApplyExport([FromBody] ExportExcelDto<MayScreenListDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> OrderSecondaryHandlingApplyExport([FromBody] ExportExcelDto<MayScreenListDto> dto)
     {
         var query = _orderSecondaryHandlingApplication.ApplyQuery(dto.QueryDto, HttpContext.RequestAborted);
         List<OrderVisitDetail> visitDetails;
@@ -9302,8 +9400,8 @@ public class OrderController : BaseController
     /// </summary>
     /// <returns></returns>
     [HttpPost("secondary_handling/_export")]
-	[LogFilterAlpha("导出日志")]
-	public async Task<FileStreamResult> OrderSecondaryHandlingExport([FromBody] ExportExcelDto<SecondaryHandlingListDto> dto)
+    [LogFilterAlpha("导出日志")]
+    public async Task<FileStreamResult> OrderSecondaryHandlingExport([FromBody] ExportExcelDto<SecondaryHandlingListDto> dto)
     {
         var query = _orderSecondaryHandlingApplication.Query(dto.QueryDto, HttpContext.RequestAborted);
         List<OrderSecondaryHandling> secondaryHandling;

+ 6 - 0
src/Hotline.Api/Controllers/WebPortalController.cs

@@ -824,6 +824,12 @@ namespace Hotline.Api.Controllers
                    RSFlagName = p.Status >= EOrderStatus.Filed ? "办理完成" : "办理中"
                });
 
+            //if (_appOptions.Value.IsLuZhou)
+            //{
+            //    // 添加只查询临时待发布的公开件
+            //    queryNew = queryNew.Where(it => SqlFunc.Subqueryable<OrderPublishTemp>().Where(s => s.Id == it.FlowID).Any());
+            //}
+
             var queryold = _oldPublicDataRepository.Queryable()
                       .WhereIF(!string.IsNullOrEmpty(dto.FlowCode), p => p.OrderNo == dto.FlowCode)
                       .WhereIF(!string.IsNullOrEmpty(dto.FlowName), p => p.Title.Contains(dto.FlowName))

+ 2 - 0
src/Hotline.Application/OrderApp/IOrderApplication.cs

@@ -352,6 +352,8 @@ namespace Hotline.Application.OrderApp
         ISugarQueryable<OrderPublish> GetPublishedOrder(PublishedPagedRequest dto);
         ISugarQueryable<Order> GetPublishOrderList(QueryOrderPublishDto dto);
 
+        ISugarQueryable<Order> GetPublishTempOrderList(QueryOrderPublishDto dto);
+
         /// <summary>
         /// 回访列表
         /// </summary>

+ 89 - 1
src/Hotline.Application/OrderApp/OrderApplication.cs

@@ -848,6 +848,86 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .OrderByIF(dto is { SortRule: 1, SortField: "expiredTimeProvince" }, d => d.ExpiredTimeProvince, OrderByType.Desc);
     }
 
+    /// <summary>
+    /// 获取临时待发布列表
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public ISugarQueryable<Order> GetPublishTempOrderList(QueryOrderPublishDto dto)
+    {
+        var query = _orderRepository.Queryable().Includes(d => d.OrderTags);
+        if (_appOptions.Value.IsLuZhou)
+            query = query.Includes(d => d.FwCallRecord);
+        query = query.RightJoin<OrderPublishTemp>((d, p) => d.No == p.No);
+
+        return query.Where(d => d.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.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.OrderTag), d => d.OrderTags.Any(ot => ot.DicDataValue == dto.OrderTag)) //工单标签
+            .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))
+            .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
+            .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone == dto.FromPhone) //来电号码
+            .WhereIF(!string.IsNullOrEmpty(dto.Contact), d => d.Contact == dto.Contact) //联系电话
+                                                                                        //.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.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, d => d.IsProvince == true)
+            .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, d => d.IsProvince == false)
+            //.WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.ProcessType == EProcessType.Zhiban)
+            //.WhereIF(dto.FiledType != null && dto.FiledType == FiledType.OrgFiled, d => d.ProcessType == EProcessType.Jiaoban)
+            .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.FileOrgIsCenter == true)
+            .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.OrgFiled, d => d.FileOrgIsCenter == false)
+            .WhereIF(dto.IsCountersign != null && dto.IsCountersign == true, d => d.CounterSignType != null)
+            .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.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)
+            .WhereIF(dto.FiledTimeEnd.HasValue, d => d.FiledTime <= dto.FiledTimeEnd)
+            .WhereIF(dto.ExpiredTimeProvinceStart.HasValue, d => d.ExpiredTimeProvince >= dto.ExpiredTimeProvinceStart) //省期满时间开始
+            .WhereIF(dto.ExpiredTimeProvinceEnd.HasValue, d => d.ExpiredTimeProvince <= dto.ExpiredTimeProvinceEnd) //省期满时间结束
+            .WhereIF(dto.Iszgzfw.HasValue && dto.Iszgzfw == true, d => d.ReceiveProvinceNo.StartsWith("ZGZFW"))
+            .WhereIF(dto.Isgjzwfwpt.HasValue && dto.Isgjzwfwpt == true, d => d.ReceiveProvinceNo.StartsWith("GJZWFWPT"))
+            .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)) //是 超期
+            .WhereIF(dto.IsOverTime == false,
+                d => (d.ExpiredTime > DateTime.Now && d.Status < EOrderStatus.Filed) ||
+                     (d.ExpiredTime > d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //否 超期
+            .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "1", d => d.Source == ESource.ProvinceStraight &&
+                d.SourceChannelCode == "SZMHD" && d.IsProvince == false) //政民互动直派
+            .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "2", d => d.Source == ESource.ProvinceStraight &&
+                d.SourceChannelCode == "SZMHD" && d.IsProvince == true) //政民互动
+            .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "3", d => d.Source == ESource.ProvinceStraight &&
+                d.SourceChannelCode == "S12345" && d.IsProvince == true) //省12345
+            .OrderBy(d => new { IsUrgent = d.IsUrgent }, OrderByType.Desc)
+            .OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.IsUrgent, OrderByType.Desc)
+            .OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.FiledTime, OrderByType.Desc)
+            .OrderByIF(dto is { SortRule: 0, SortField: "filedTime" }, d => d.FiledTime, OrderByType.Asc)
+            .OrderByIF(dto is { SortRule: 1, SortField: "filedTime" }, d => d.FiledTime, OrderByType.Desc)
+            .OrderByIF(dto is { SortRule: 0, SortField: "actualHandleTime" }, d => d.ActualHandleTime, OrderByType.Asc)
+            .OrderByIF(dto is { SortRule: 1, SortField: "actualHandleTime" }, d => d.ActualHandleTime, OrderByType.Desc)
+            .OrderByIF(dto is { SortRule: 0, SortField: "creationTime" }, d => d.CreationTime, OrderByType.Asc)
+            .OrderByIF(dto is { SortRule: 1, SortField: "creationTime" }, d => d.CreationTime, OrderByType.Desc)
+            .OrderByIF(dto is { SortRule: 0, SortField: "expiredTimeProvince" }, d => d.ExpiredTimeProvince, OrderByType.Asc)
+            .OrderByIF(dto is { SortRule: 1, SortField: "expiredTimeProvince" }, d => d.ExpiredTimeProvince, OrderByType.Desc);
+    }
+
     public ISugarQueryable<OrderPublish> GetPublishedOrder(PublishedPagedRequest dto)
     {
         return _orderPublishRepository.Queryable()
@@ -882,7 +962,15 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 d.Order.SourceChannelCode == "SZMHD" && d.Order.IsProvince == true) //政民互动
             .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "3", d => d.Order.Source == ESource.ProvinceStraight &&
                 d.Order.SourceChannelCode == "S12345" && d.Order.IsProvince == true) //省12345
-            .OrderByDescending(d => d.CreationTime);
+            .OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.CreationTime, OrderByType.Desc)
+            .OrderByIF(dto is { SortRule: 0, SortField: "creationTime" }, d => d.Order.CreationTime, OrderByType.Asc)   //受理时间
+            .OrderByIF(dto is { SortRule: 1, SortField: "creationTime" }, d => d.Order.CreationTime, OrderByType.Desc)
+            .OrderByIF(dto is { SortRule: 0, SortField: "filedTime" }, d => d.Order.FiledTime, OrderByType.Asc)  //办结时间
+            .OrderByIF(dto is { SortRule: 1, SortField: "filedTime" }, d => d.Order.FiledTime, OrderByType.Desc)
+            .OrderByIF(dto is { SortRule: 0, SortField: "publishTime" }, d => d.CreationTime, OrderByType.Asc) //发布时间
+            .OrderByIF(dto is { SortRule: 1, SortField: "publishTime" }, d => d.CreationTime, OrderByType.Desc)
+            .OrderByIF(dto is { SortRule: 0, SortField: "lastModificationTime" }, d => d.LastModificationTime, OrderByType.Asc) //更新时间
+            .OrderByIF(dto is { SortRule: 1, SortField: "lastModificationTime" }, d => d.LastModificationTime, OrderByType.Desc);
     }
 
     /// <summary>

+ 105 - 0
src/Hotline/Orders/OrderPublishTemp.cs

@@ -0,0 +1,105 @@
+using Hotline.Share.Dtos;
+using Hotline.Share.Enums.Order;
+using Hotline.Users;
+using SqlSugar;
+using System.ComponentModel;
+using XF.Domain.Repository;
+
+namespace Hotline.Orders;
+
+/// <summary>
+/// 临时待发布
+/// </summary>
+[Description("临时待发布")]
+[SugarIndex("index_publish_orderId", nameof(OrderPublish.OrderId), OrderByType.Asc)]
+public class OrderPublishTemp : FullStateEntity
+{
+    public string OrderId { get; set; }
+
+    /// <summary>
+    /// 工单编码(冗余)
+    /// </summary>
+    public string No { get; set; }
+
+    /// <summary>
+    /// 发布范围
+    /// </summary>
+    public bool PublishState { get; set; }
+
+    /// <summary>
+    /// 整理标题
+    /// </summary>
+    public string ArrangeTitle { get; set; }
+
+    /// <summary>
+    /// 整理内容
+    /// </summary>
+    [SugarColumn(ColumnDataType = "text")]
+    public string ArrangeContent { get; set; }
+
+    /// <summary>
+    /// 整理结果
+    /// </summary>
+    [SugarColumn(ColumnDataType = "text")]
+    public string ArrangeOpinion { get; set; }
+
+    /// <summary>
+    /// 已发布工单
+    /// </summary>
+    [Navigate(NavigateType.OneToOne, nameof(OrderId))]
+    public Order Order { get; set; }
+
+    #region 省工单使用字段
+
+    /// <summary>
+    /// 省是否公开
+    /// </summary>
+    public bool? ProPublishState { get; set; }
+
+    /// <summary>
+    /// 反馈电话
+    /// </summary>
+    [SugarColumn(IsNullable = true)]
+    public string? FeedBackPhone { get; set; }
+
+    /// <summary>
+    /// 不公开原因
+    /// </summary>
+    [SugarColumn(IsNullable = true)]
+    public string? NoPubReason { get; set; }
+
+    /// <summary>
+    /// 是否联系
+    /// </summary>
+    public bool? IsContact { get; set; }
+
+    /// <summary>
+    /// 是否评价
+    /// </summary>
+    public bool? IsVisited { get; set; }
+
+    /// <summary>
+    /// 网民评价
+    /// </summary>
+    [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
+    public Kv? NetizenEvaluate { get; set; }
+
+    /// <summary>
+    /// 评价内容
+    /// </summary>
+    public string? EvaluateContent { get; set; }
+
+    /// <summary>
+    /// 备注
+    /// </summary>
+    public string? Remark { get; set; }
+
+    /// <summary>
+    /// 答复口径
+    /// </summary>
+    [SugarColumn(ColumnDataType = "text", IsNullable = true)]
+    public string? AnswerContent { get; set; }
+    #endregion
+
+    public bool? Resolve { get; set; }
+}