Kaynağa Gözat

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

xf 1 yıl önce
ebeveyn
işleme
2cd6666256

+ 7 - 4
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -1481,7 +1481,10 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("highmatter-warning")]
         public async Task<PagedDto<HighMatterWarningDto>> HighMatterWarning([FromQuery] HighMatterWarningRequest dto)
         {
-            var (total, items) = await _orderRepository.Queryable(false, false, false)
+
+            dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
+
+            var (total, items) = await _orderRepository.Queryable()
                 .Where(x => x.CreationTime >= dto.StartDate && x.CreationTime <= dto.EndDate)
                 .LeftJoin<SystemArea>((it, o) => it.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) == o.Id)
                 .WhereIF(dto.AreaCodes.Any(), (it, o) => dto.AreaCodes.Contains(it.AreaCode)) //区域
@@ -1495,7 +1498,6 @@ namespace Hotline.Api.Controllers.Bi
                     it.HotspotName,
                     AreaCode = it.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
                     o.AreaName,
-                    o.Id,
                 })
                 .Having((it, o) => SqlFunc.AggregateCount(it.HotspotName) >= 5)
                 .Select((it, o) => new HighMatterWarningDto()
@@ -1507,7 +1509,7 @@ namespace Hotline.Api.Controllers.Bi
                     HotspotId = it.HotspotId,
                     SumCount = SqlFunc.AggregateCount(it.HotspotName),
                     Id = SqlFunc.AggregateMin(it.Id),
-                    AreaCode = o.Id
+                    AreaCode = it.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
                 })
                 .MergeTable()
                 .LeftJoin<Order>((x, d) => x.Id == d.Id)
@@ -1537,7 +1539,8 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("highmatter-warning-detail")]
         public async Task<PagedDto<OrderDto>> HighMatterWarningDetail([FromQuery] HighMatterWarningDetailRequest dto)
         {
-            var (total, items) = await _orderRepository.Queryable(viewFilter: true)
+            dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
+            var (total, items) = await _orderRepository.Queryable()
             .Includes(x => x.OrderScreens)
             .Where(d => d.AcceptTypeCode == dto.AcceptTypeCode) //受理类型
             .Where(d => d.HotspotId == dto.HotspotId) //热点类型

+ 224 - 6
src/Hotline.Api/Controllers/EnforcementOrderController.cs

@@ -2,15 +2,20 @@
 using Hotline.Caching.Interfaces;
 using Hotline.FlowEngine.WorkflowModules;
 using Hotline.JudicialManagement;
+using Hotline.Orders;
 using Hotline.Repository.SqlSugar.Extensions;
 using Hotline.Settings;
 using Hotline.Settings.TimeLimits;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.JudicialManagement;
+using Hotline.Share.Dtos.Order;
 using Hotline.Share.Enums.Order;
 using MapsterMapper;
+using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
+using SqlSugar;
 using System.Diagnostics.Eventing.Reader;
+using XF.Domain.Authentications;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
 using XF.Utility.EnumExtensions;
@@ -27,6 +32,8 @@ namespace Hotline.Api.Controllers
         private readonly IWorkflowApplication _workflowApplication;
         private readonly ISystemDicDataCacheManager _sysDicDataCacheManager;
         private readonly IRepository<SystemOrganize> _systemOrganizeRepository;
+        private readonly ISessionContext _sessionContext;
+        private readonly IRepository<OrderVisitDetail> _orderVisitDetailRepository;
 
         public EnforcementOrderController(IRepository<EnforcementOrderHander> enforcementOrderHanderRepository,
          IRepository<EnforcementOrders> enforcementOrdersRepository,
@@ -35,7 +42,9 @@ namespace Hotline.Api.Controllers
          IMapper mapper,
          IWorkflowApplication workflowApplication,
          ISystemDicDataCacheManager sysDicDataCacheManager,
-         IRepository<SystemOrganize> systemOrganizeRepository)
+         IRepository<SystemOrganize> systemOrganizeRepository,
+         ISessionContext sessionContext,
+         IRepository<OrderVisitDetail> orderVisitDetailRepository)
         {
             _enforcementOrderHanderRepository = enforcementOrderHanderRepository;
             _enforcementOrdersRepository = enforcementOrdersRepository;
@@ -45,6 +54,8 @@ namespace Hotline.Api.Controllers
             _workflowApplication = workflowApplication;
             _sysDicDataCacheManager = sysDicDataCacheManager;
             _systemOrganizeRepository = systemOrganizeRepository;
+            _sessionContext = sessionContext;
+            _orderVisitDetailRepository = orderVisitDetailRepository;
         }
 
         /// <summary>
@@ -61,6 +72,7 @@ namespace Hotline.Api.Controllers
            .WhereIF(dto.IsEnforcementOrder.HasValue, d => d.IsEnforcementOrder == dto.IsEnforcementOrder)//是否行政执法类
            .WhereIF(dto.IsPassTheBuckOrder.HasValue, d => d.IsPassTheBuckOrder == dto.IsPassTheBuckOrder)//是否推诿
            .WhereIF(dto.IsTheClueTrue.HasValue, d => d.IsTheClueTrue == dto.IsTheClueTrue)//线索是否属实
+           .WhereIF(dto.EventTypeId.Any(), d => dto.EventTypeId.Contains(d.EventTypeId))//事项分类
            .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Order.Title.Contains(dto.Title!)) //标题
            .WhereIF(!string.IsNullOrEmpty(dto.ProvinceNo), d => d.Order.ProvinceNo.Contains(dto.ProvinceNo)) //省本地编号
            .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.Order.No.Contains(dto.No)) //工单编码
@@ -94,7 +106,17 @@ namespace Hotline.Api.Controllers
            .OrderByDescending(d => d.CreationTime)
            .ToPagedListAsync(dto, HttpContext.RequestAborted);
 
-            return new PagedDto<EnforcementOrderListDto>(total, _mapper.Map<IReadOnlyList<EnforcementOrderListDto>>(items));
+            var data = _mapper.Map<List<EnforcementOrderListDto>>(items);
+
+            if (_sessionContext.RequiredOrgId == "001188")
+            {
+                foreach (var item in data)
+                {
+                    if (item.IsTheClueTrue.HasValue)
+                        item.IsShowUpdateButton = true;
+                }
+            }
+            return new PagedDto<EnforcementOrderListDto>(total, data);
         }
 
         /// <summary>
@@ -142,8 +164,11 @@ namespace Hotline.Api.Controllers
             if (dto.OrderIds == null || dto.OrderIds.Count == 0)
                 throw UserFriendlyException.SameMessage("工单不能为空");
 
-            if (string.IsNullOrEmpty(dto.EventTypeId) || string.IsNullOrEmpty(dto.EventTypeName))
-                throw UserFriendlyException.SameMessage("事项不能为空");
+            if (dto.IsTheClueTrue.HasValue && dto.IsTheClueTrue.Value == true)
+            {
+                if (string.IsNullOrEmpty(dto.EventTypeId) || string.IsNullOrEmpty(dto.EventTypeName))
+                    throw UserFriendlyException.SameMessage("事项不能为空");
+            }
 
             foreach (var item in dto.OrderIds)
             {
@@ -155,9 +180,14 @@ namespace Hotline.Api.Controllers
 
                 if (!string.IsNullOrEmpty(dto.EventTypeName))
                     order.EventTypeName = dto.EventTypeName;
-                else 
+                else
                     order.EventTypeName = null;
 
+                if (!string.IsNullOrEmpty(dto.EventTypeSpliceName))
+                    order.EventTypeSpliceName = dto.EventTypeSpliceName;
+                else
+                    order.EventTypeSpliceName = null;
+
                 if (!string.IsNullOrEmpty(dto.EventTypeId))
                 {
                     order.EventTypeOneLevelId = dto.EventTypeId.Substring(0, 2);
@@ -166,7 +196,7 @@ namespace Hotline.Api.Controllers
                 else
                 {
                     order.EventTypeOneLevelId = null;
-                    order.EventTypeOneLevelId = null;
+                    order.EventTypeId = null;
                 }
                 await _enforcementOrdersRepository.UpdateAsync(order, HttpContext.RequestAborted);
             }
@@ -182,6 +212,194 @@ namespace Hotline.Api.Controllers
             return await _judicialComplaintsEventTypeRepository.Queryable().ToTreeAsync(it => it.Children, it => it.ParentId, null, it => it.Id);
         }
 
+        /// <summary>
+        /// 执法部门办件统计
+        /// </summary>
+        /// <param name="StartDate"></param>
+        /// <param name="EndDate"></param>
+        /// <returns></returns>
+        [HttpGet("enforcement_departmental_processing_statistics")]
+        public async Task<object> GetDepartmentalProcessingStatisticsAsync(DateTime StartDate, DateTime EndDate)
+        {
+
+            EndDate = EndDate.AddDays(1).AddSeconds(-1);
+            var data = await _enforcementOrdersRepository.Queryable()
+                   .Includes(x => x.Order)
+                   .Where(d => d.Order.Id != null)
+                   .Where(d => d.Order.FiledTime >= StartDate && d.Order.FiledTime <= EndDate)
+                    .GroupBy(d => new
+                    {
+                        OrgCode = d.Order.OrgLevelOneCode,
+                        OrgName = d.Order.OrgLevelOneName
+                    })
+                    .Select(d => new
+                    {
+                        OrgName = d.Order.OrgLevelOneName,
+                        CountNum = SqlFunc.AggregateCount(d.Order.OrgLevelOneCode),
+                        TheClueIsTrue = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == true, 1, 0)),
+                        TheClueIsNotTrue = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == false, 1, 0)),
+                        EnforcementOrder = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsEnforcementOrder, 1, 0))
+                    })
+                   .ToListAsync();
+
+            return data;
+        }
+
+        /// <summary>
+        /// 事项分类统计
+        /// </summary>
+        /// <param name="StartDate"></param>
+        /// <param name="EndDate"></param>
+        /// <param name="Id"></param>
+        /// <param name="AreaCode"></param>
+        /// <returns></returns>
+        [HttpGet("event_classification_statistics")]
+        public async Task<object> GetEventClassificationStatisticsAsync(DateTime StartDate, DateTime EndDate, string Id, string AreaCode)
+        {
+
+            EndDate = EndDate.AddDays(1).AddSeconds(-1);
+
+            var items = await _judicialComplaintsEventTypeRepository.Queryable()
+             .LeftJoin<EnforcementOrders>((x, o) => o.EventTypeSpliceName != null && (x.EventTypeName == o.EventTypeSpliceName || o.EventTypeSpliceName.Contains(x.EventTypeName)))
+            .LeftJoin<Order>((x, o, p) => p.Id == o.Id)
+            .Where((x, o, p) => p.FiledTime >= StartDate && p.FiledTime <= EndDate)
+            .WhereIF(!string.IsNullOrEmpty(AreaCode), (x, o, p) => p.AreaCode == AreaCode)
+             .Where((x, o, p) => x.ParentId == Id)
+             .GroupBy((x, o, p) => new { x.Id, x.EventTypeName })
+             .Select((x, o, p) => new
+             {
+                 Id = x.Id,
+                 Name = x.EventTypeName,
+                 Num = SqlFunc.AggregateSum(SqlFunc.IIF(p.Id != null, 1, 0)),
+                 Sublevel = SqlFunc.AggregateSum(SqlFunc.IIF(x.EventTypeName != o.EventTypeName, 1, 0)) > 0,
+             })
+             .MergeTable()
+             .ToListAsync();
+
+            var total = new
+            {
+                Id = "0",
+                Name = "合计",
+                Num = items.Sum(x => x.Num),
+                Sublevel = false
+            };
+
+            var orderCount = new
+            {
+                TheClueIsTrue = 0,
+                TheClueIsNotTrue = 0,
+                EnforcementOrder = 0,
+                PassTheBuckOrder = 0
+            };
+
+            return new { List = items, Total = total, OrderCount = orderCount };
+        }
+
+        /// <summary>
+        /// 区域受理排行
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet("regional_classification_statistics")]
+        public async Task<object> GetRegionalClassificationStatisticsAsync(DateTime StartDate, DateTime EndDate)
+        {
+            EndDate = EndDate.AddDays(1).AddSeconds(-1);
+
+            var list = await _enforcementOrdersRepository.Queryable()
+               .Includes(x => x.Order)
+               .Where(x => x.Order.Id != null)
+               .Where(x => x.Order.FiledTime >= StartDate && x.Order.FiledTime <= EndDate)
+               .LeftJoin<SystemArea>((x, o) => x.Order.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) == o.Id)
+               .Where((x, o) => x.Order.Status >= EOrderStatus.Filed)
+               .GroupBy((x, o) => new
+               {
+                   AreaCode = x.Order.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
+                   o.AreaName,
+               })
+               .Select((x, o) => new
+               {
+                   AreaCode = x.Order.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
+                   AreaName = o.AreaName,
+                   OrderCountNum = SqlFunc.AggregateCount(x.Order.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))),
+                   TheClueIsTrue = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsTheClueTrue.HasValue && x.IsTheClueTrue.Value == true, 1, 0)),
+                   TheClueIsNotTrue = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsTheClueTrue.HasValue && x.IsTheClueTrue.Value == false, 1, 0)),
+                   EnforcementOrder = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsEnforcementOrder, 1, 0))
+               }).MergeTable()
+                .Where(x => x.AreaCode != "519800" && x.AreaCode != "519900")
+                .OrderByDescending(it => it.OrderCountNum)
+                .ToListAsync();
+            return list;
+        }
+
+        /// <summary>
+        /// 部门满意度统计
+        /// </summary>
+        /// <param name="StartDate"></param>
+        /// <param name="EndDate"></param>
+        /// <param name="TypeId">1:办件结果 2:办件态度</param>
+        /// <returns></returns>
+        [HttpGet("enforcement_visit_org_satisfaction_statistics")]
+        public async Task<object> GetVisitAndOrgSatisfactionStatisticsAsync(DateTime StartDate, DateTime EndDate, int TypeId)
+        {
+            EndDate = EndDate.AddDays(1).AddSeconds(-1);
+
+            var list =
+                 await _enforcementOrdersRepository.Queryable()
+                 .LeftJoin<OrderVisit>((x,o)=>x.Id==o.OrderId)
+                 .LeftJoin<OrderVisitDetail>((x, o,p) => o.Id == p.VisitId)
+                .Where((x, o, p) => o.VisitTime >= StartDate && o.VisitTime <= EndDate && p.VisitTarget == EVisitTarget.Org 
+                && o.VisitState == EVisitState.Visited && !string.IsNullOrEmpty(p.VisitOrgCode))
+
+                .GroupBy((x, o, p) => new
+                {
+                    VisitOrgCode = p.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
+                })
+                .Select((x, o, p) => new VisitAndOrgSatisfactionStatisticsDto()
+                {
+                    OrgCode = p.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
+                    TotalSumCount = SqlFunc.AggregateCount(p.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))),
+                    VerySatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgProcessingResults, "Key") == "5", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == "5", 1, 0))),//非常满意数
+                    SatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgProcessingResults, "Key") == "4", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == "4", 1, 0))), //满意数
+                    RegardedAsSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgProcessingResults, "Key") == "-1", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == "-1", 1, 0))),//视为满意
+                    DefaultSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgProcessingResults, "Key") == "0", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == "0", 1, 0))),//默认满意
+                    NoSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgProcessingResults, "Key") == "2", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == "2", 1, 0))),//不满意
+                    NoEvaluateCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgProcessingResults, "Key") == "7", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == "7", 1, 0))),//未做评价
+                    NoPutThroughCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgProcessingResults, "Key") == "6", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == "6", 1, 0))),//未接通
+                })
+                .MergeTable()
+                .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
+                .Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
+                {
+                    OrgName = o.Name,
+                    OrgCode = it.OrgCode,
+                    OrgType = o.OrgType,
+                    TotalSumCount = it.TotalSumCount,
+                    VerySatisfiedCount = it.VerySatisfiedCount,//非常满意数
+                    SatisfiedCount = it.SatisfiedCount, //满意数
+                    RegardedAsSatisfiedCount = it.RegardedAsSatisfiedCount,//视为满意
+                    DefaultSatisfiedCount = it.DefaultSatisfiedCount,//默认满意
+                    NoSatisfiedCount = it.NoSatisfiedCount,//不满意
+                    NoEvaluateCount = it.NoEvaluateCount,//未做评价
+                    NoPutThroughCount = it.NoPutThroughCount,//未接通
+                })
+                .ToListAsync();
+
+
+            var sumModel = new VisitAndOrgSatisfactionStatisticsDto()
+            {
+                OrgName = "总计",
+                TotalSumCount = list.Sum(x => x.TotalSumCount),
+                VerySatisfiedCount = list.Sum(x => x.VerySatisfiedCount),
+                SatisfiedCount = list.Sum(x => x.SatisfiedCount),
+                RegardedAsSatisfiedCount = list.Sum(x => x.RegardedAsSatisfiedCount),
+                DefaultSatisfiedCount = list.Sum(x => x.DefaultSatisfiedCount),
+                NoSatisfiedCount = list.Sum(x => x.NoSatisfiedCount),
+                NoEvaluateCount = list.Sum(x => x.NoEvaluateCount),
+                NoPutThroughCount = list.Sum(x => x.NoPutThroughCount),
+            };
+
+
+            return new { DataList = list, SumModel = sumModel };
+        }
 
     }
 }

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

@@ -2127,7 +2127,9 @@ public class OrderController : BaseController
     [HttpGet]
     public async Task<PagedDto<OrderDto>> Query([FromQuery] QueryOrderDto dto)
     {
-        var (total, items) = await _orderRepository.Queryable(viewFilter: true)
+        var isCenter = _sessionContext.OrgIsCenter;
+
+        var (total, items) = await _orderRepository.Queryable(viewFilter: isCenter? false:true)
             .Includes(x => x.OrderScreens)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.Contains(dto.Keyword!)) //标题
             .WhereIF(!string.IsNullOrEmpty(dto.ProvinceNo), d => d.ProvinceNo.Contains(dto.ProvinceNo)) //省本地编号
@@ -2164,7 +2166,7 @@ public class OrderController : BaseController
             .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, x => x.IsProvince == true)
             .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, x => x.IsProvince == false)
             .WhereIF(!string.IsNullOrEmpty(dto.SensitiveWord),x=> SqlFunc.JsonArrayAny(x.Sensitive, dto.SensitiveWord))
-            .WhereIF(dto.IsSensitiveWord.HasValue  && dto.IsSensitiveWord  == true, x => x.Sensitive != null)
+            .WhereIF(dto.IsSensitiveWord.HasValue  && dto.IsSensitiveWord  == true, x => x.Sensitive != null && SqlFunc.JsonArrayLength(x.Sensitive) > 0)
 			.OrderByDescending(d => d.CreationTime)
             .ToPagedListAsync(dto, HttpContext.RequestAborted);
 
@@ -2778,16 +2780,18 @@ public class OrderController : BaseController
         var isHandled = dto.IsHandled.HasValue && dto.IsHandled.Value;
         var (total, items) = await _orderRepository
             .Queryable(viewFilter: true, handlerFilter: !isHandled)
+            .Includes(d => d.OrderSpecials)
             .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.No.Contains(dto.Keyword) || d.Title.Contains(dto.Keyword))
             .WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == true, d => d.CounterSignType.HasValue)
             .WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == false, d => !d.CounterSignType.HasValue)
             .WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == true, d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) || (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //超期 未办
             .WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == false, d => d.NearlyExpiredTime < DateTime.Now && d.ExpiredTime > DateTime.Now)//即将超期 未办
-            .Where(x => x.Source < ESource.MLSQ || x.Source > ESource.WZSC)
-            .Where(x => x.Status != EOrderStatus.BackToProvince)
+            .Where(d => d.Source < ESource.MLSQ || d.Source > ESource.WZSC)
+            .Where(d => d.Status != EOrderStatus.BackToProvince)
+            .Where(d => d.OrderSpecials.Any() == false ||  d.OrderSpecials.Any(s => s.State == 0) == false)
             .OrderByDescending(d => d.StartTime)
-            .ToPagedListAsync(dto, HttpContext.RequestAborted);
+			.ToPagedListAsync(dto, HttpContext.RequestAborted);
 
         return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
     }
@@ -2824,14 +2828,69 @@ public class OrderController : BaseController
         return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
     }
 
-    #endregion
-
-    #region 业务工单退回
-
     /// <summary>
-    /// 工单退回退回(返回前一节点)
+    /// 首页查询
     /// </summary>
-    [HttpPost("order_previous")]
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("waited/home")]
+
+    public async Task<Object> QueryWaitedHome([FromQuery] QueryOrderWaitedDto dto) {
+
+		var isHandled = dto.IsHandled.HasValue && dto.IsHandled.Value;
+		var (total, items) = await _orderRepository
+			.Queryable(viewFilter: true, handlerFilter: !isHandled)
+			.Includes(d => d.OrderSpecials)
+			.WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
+			.WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.No.Contains(dto.Keyword) || d.Title.Contains(dto.Keyword))
+			.WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == true, d => d.CounterSignType.HasValue)
+			.WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == false, d => !d.CounterSignType.HasValue)
+			.WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == true, d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) || (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //超期 未办
+			.WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == false, d => d.NearlyExpiredTime < DateTime.Now && d.ExpiredTime > DateTime.Now)//即将超期 未办
+			.Where(d => d.Source < ESource.MLSQ || d.Source > ESource.WZSC)
+			.Where(d => d.Status != EOrderStatus.BackToProvince)
+			.Where(d => d.OrderSpecials.Any() == false || d.OrderSpecials.Any(s => s.State == 0) == false)
+			.OrderByDescending(d => d.StartTime)
+			.ToPagedListAsync(dto, HttpContext.RequestAborted);
+
+		var page1=  new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
+
+		EOrderStatus[] handleStatuses = EnumExts.GetFields<EOrderStatus>().Select(d => (EOrderStatus)d.Key).ToArray();
+		handleStatuses = handleStatuses.WhereIF(dto.IsHandled.HasValue,
+				d => dto.IsHandled!.Value
+					? d is not EOrderStatus.WaitForAccept and not EOrderStatus.BackToUnAccept and not EOrderStatus.SpecialToUnAccept
+					: d is EOrderStatus.WaitForAccept or EOrderStatus.BackToUnAccept or EOrderStatus.SpecialToUnAccept)
+			.ToArray();
+
+		var (total2, items2) = await _orderRepository.Queryable(viewFilter: false)
+			.WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
+			.WhereIF(dto.IsHandled.HasValue, d => handleStatuses.Contains(d.Status))
+			.WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.No.Contains(dto.Keyword!) || d.Title.Contains(dto.Keyword!))
+			.Where(d => string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContext.RequiredUserId)
+			.WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == true, d => d.CounterSignType.HasValue)
+			.WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == false, d => !d.CounterSignType.HasValue)
+			.WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == true, d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) || (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //超期 未办
+			.WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == false, d => d.NearlyExpiredTime < DateTime.Now && d.ExpiredTime > DateTime.Now)//即将超期 未办
+			.Where(x => x.Source < ESource.MLSQ || x.Source > ESource.WZSC)
+			.Where(x => x.Status != EOrderStatus.BackToProvince)
+			.OrderBy(d => d.Status)
+			.OrderByIF(dto.IsHandled == true, d => d.StartTime, OrderByType.Asc)
+			.OrderByIF(dto.IsHandled == false, d => d.CreationTime, OrderByType.Desc)
+			.ToPagedListAsync(dto, HttpContext.RequestAborted);
+
+		var page2 = new PagedDto<OrderDto>(total2, _mapper.Map<IReadOnlyList<OrderDto>>(items2));
+
+        return new { Waited = page1, Sign = page2 };
+	}
+
+	#endregion
+
+	#region 业务工单退回
+
+	/// <summary>
+	/// 工单退回退回(返回前一节点)
+	/// </summary>
+	[HttpPost("order_previous")]
     public async Task Previous([FromBody] OrderPreviousDto dto)
     {
         var oneSendBack = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.OneOrgSendBack)?.SettingValue[0]);

+ 1 - 1
src/Hotline.Application/JudicialManagement/EnforcementApplication.cs

@@ -107,7 +107,7 @@ namespace Hotline.Application.JudicialManagement
         public async Task AddPassTheBuckOrderAsync(Hotline.Orders.Order order, string orgCode, string orgName, CancellationToken cancellationToken)
         {
             //排除咨询件
-            if (order.AcceptTypeCode == "30")
+            if (order.AcceptTypeCode == "10")
                 return;
 
             //如果没开启则不处理

+ 3 - 0
src/Hotline.Application/Mappers/MapperConfigs.cs

@@ -70,6 +70,9 @@ namespace Hotline.Application.Mappers
                 .Map(d => d.IsPassTheBuckOrder, x => x.IsPassTheBuckOrder)
                 .Map(d => d.IsTheClueTrue, x => x.IsTheClueTrue)
                 .Map(d => d.EventTypeName, x => x.EventTypeName)
+                .Map(d => d.EventTypeId, x => x.EventTypeId)
+                .Map(d => d.EventTypeSpliceName, x => x.EventTypeSpliceName)
+                
                  ;
 
 

+ 5 - 0
src/Hotline.Share/Dtos/JudicialManagement/ClueVerificationDto.cs

@@ -24,5 +24,10 @@
         /// 诉事项类型名称
         /// </summary>
         public string? EventTypeName { get; set; }
+
+        /// <summary>
+        /// 诉事项类型名称
+        /// </summary>
+        public string? EventTypeSpliceName { get; set; }
     }
 }

+ 15 - 0
src/Hotline.Share/Dtos/JudicialManagement/EnforcementOrderListDto.cs

@@ -157,11 +157,26 @@ namespace Hotline.Share.Dtos.JudicialManagement
         /// </summary>
         public bool? IsTheClueTrue { get; set; }
 
+        /// <summary>
+        /// 诉事项类型Id
+        /// </summary>
+        public string? EventTypeId { get; set; }
+
         /// <summary>
         /// 诉事项类型名称
         /// </summary>
         public string? EventTypeName { get; set; }
 
+        /// <summary>
+        /// 诉事项类型名称
+        /// </summary>
+        public string? EventTypeSpliceName { get; set; }
+
+        /// <summary>
+        /// 是否显示修改按钮
+        /// </summary>
+        public bool IsShowUpdateButton { get; set; }
+
         public EExpiredStatus? CalculateExpiredState()
         {
             DateTime? dateTime = DateTime.Now;

+ 5 - 0
src/Hotline/JudicialManagement/EnforcementOrders.cs

@@ -36,6 +36,11 @@ namespace Hotline.JudicialManagement
         /// </summary>
         public string? EventTypeName { get; set; }
 
+        /// <summary>
+        /// 诉事项类型名称
+        /// </summary>
+        public string? EventTypeSpliceName { get; set; }
+
         /// <summary>
         /// 诉事项类型一级Id
         /// </summary>

+ 8 - 2
src/Hotline/Orders/Order.cs

@@ -736,9 +736,15 @@ namespace Hotline.Orders
         public List<OrderScreen> OrderScreens { get; set; }
 
         /// <summary>
-        /// 延期
+        /// 
         /// </summary>
-        [Navigate(NavigateType.OneToMany, nameof(OrderDelay.OrderId))]
+        [Navigate(NavigateType.OneToMany, nameof(OrderSpecial.OrderId))]
+        public List<OrderSpecial> OrderSpecials { get; set; }
+
+		/// <summary>
+		/// 延期
+		/// </summary>
+		[Navigate(NavigateType.OneToMany, nameof(OrderDelay.OrderId))]
         public List<OrderDelay> OrderDelays { get; set; }
 
         /// <summary>

+ 2 - 2
src/Hotline/Orders/OrderDomainService.cs

@@ -230,7 +230,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
             List<(string userId, string username, IReadOnlyList<string> stepIds)> handlers = new();
             ; handlers.Add(new ValueTuple<string, string, IReadOnlyList<string>>(user.Id, user.Name, stepIds));
             var workflowIds = await _workflowDomainService.ChangeHandlerRangeAsync(OrderDefaults.SourceChannel.SendPoolId, handlers, cancellationToken);
-            var orders = await _orderRepository.Queryable().Where(d => workflowIds.Contains(d.WorkflowId))
+            var orders = await _orderRepository.Queryable().Includes(d => d.Workflow).Where(d => workflowIds.Contains(d.WorkflowId))
                 .ToListAsync(cancellationToken);
             foreach (var order in orders)
             {
@@ -292,7 +292,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
             if (handlers.Any())
             {
                 var workflowIds = await _workflowDomainService.ChangeHandlerRangeAsync(OrderDefaults.SourceChannel.SendPoolId, handlers, cancellationToken);
-                var orders = await _orderRepository.Queryable().Where(d => workflowIds.Contains(d.WorkflowId))
+                var orders = await _orderRepository.Queryable().Includes(d=>d.Workflow).Where(d => workflowIds.Contains(d.WorkflowId))
                     .ToListAsync(cancellationToken);
                 foreach (var order in orders)
                 {

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

@@ -448,6 +448,11 @@ namespace Hotline.Permissions
         /// </summary>
         [Display(GroupName ="发布待办",Name ="批量发布工单",Description ="批量发布工单")]
         BatchPublishOrder = 200803,
+        /// <summary>
+        /// 工单重办
+        /// </summary>
+        [Display(GroupName ="发布待办",Name ="工单重办",Description ="工单重办")]
+        OrderRedo = 200804,
 
         #endregion