田爽 1 vuosi sitten
vanhempi
commit
6f8e8ba953

+ 221 - 70
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -19,6 +19,7 @@ using MapsterMapper;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using SqlSugar;
+using System.Collections.Generic;
 using XF.Domain.Authentications;
 using XF.Domain.Constants;
 using XF.Domain.Exceptions;
@@ -46,7 +47,7 @@ namespace Hotline.Api.Controllers.Bi
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
         private readonly IRepository<OrderSpecialDetail> _orderSpecialDetailRepository;
 
-		public BiOrderController(
+        public BiOrderController(
             IOrderRepository orderRepository,
             IRepository<Hotspot> hotspotTypeRepository,
             ISystemDicDataCacheManager sysDicDataCacheManager,
@@ -63,7 +64,7 @@ namespace Hotline.Api.Controllers.Bi
             ISessionContext sessionContext,
             ISystemSettingCacheManager systemSettingCacheManager,
             IRepository<OrderSpecialDetail> orderSpecialDetailRepository
-			)
+            )
         {
             _orderRepository = orderRepository;
             _hotspotTypeRepository = hotspotTypeRepository;
@@ -82,12 +83,12 @@ namespace Hotline.Api.Controllers.Bi
             _systemSettingCacheManager = systemSettingCacheManager;
             _orderSpecialDetailRepository = orderSpecialDetailRepository;
 
-		}
+        }
 
         //public async Task OrgDataListDetail([FromQuery] OrgDataListDetailRequest dto)
         //{
         //    dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
-            
+
         //    await _orderRepository.Queryable()
         //    .Where(x => x.CreationTime >= dto.StartDate && x.CreationTime <= dto.EndDate)
         //    .WhereIF(dto.QueryType == 1, x => x.Status >= EOrderStatus.Filed && x.ExpiredTime < x.FiledTime) //业务已办超期
@@ -95,7 +96,7 @@ namespace Hotline.Api.Controllers.Bi
         //    .WhereIF(dto.QueryType == 3, x => x.Status < EOrderStatus.Filed && x.ExpiredTime < SqlFunc.GetDate()) //业务待办超期
         //    //.WhereIF(dto.QueryType ==4,) //会签待办超期
         //    .ToPageListAsync(dto.PageIndex, dto.PageSize);
-            
+
         //}
 
 
@@ -117,14 +118,14 @@ namespace Hotline.Api.Controllers.Bi
                 .LeftJoin<SystemOrganize>((x, o) => x.ActualHandleOrgCode == o.Id)
                 .WhereIF(dto.StartTime.HasValue, (x, o) => x.CreationTime >= dto.StartTime)
                 .WhereIF(dto.EndTime.HasValue, (x, o) => x.CreationTime <= dto.EndTime)
-                .WhereIF(IsCenter == false, (x,o) => x.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
+                .WhereIF(IsCenter == false, (x, o) => x.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
                 .GroupBy((x, o) => new { x.ActualHandleOrgCode, o.Name })
                 .Select((x, o) => new OrderBiOrgDataListVo
                 {
                     OrgName = o.Name,
                     OrgId = x.ActualHandleOrgCode,
-                    HandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status >=  EOrderStatus.Filed && x.ExpiredTime < x.FiledTime, 1, 0)),
-                    NoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status <  EOrderStatus.Filed && x.ExpiredTime < SqlFunc.GetDate(), 1, 0)),
+                    HandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status >= EOrderStatus.Filed && x.ExpiredTime < x.FiledTime, 1, 0)),
+                    NoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status < EOrderStatus.Filed && x.ExpiredTime < SqlFunc.GetDate(), 1, 0)),
                 }).MergeTable();
             var queryCountersign = _workflowCountersignRepository.Queryable()
                 .LeftJoin<WorkflowCountersignMember>((x, o) => x.Id == o.WorkflowCountersignId)
@@ -135,7 +136,7 @@ namespace Hotline.Api.Controllers.Bi
                 {
                     OrgId = o.Key,
                     CounterHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsHandled, 1, 0)),
-                    CounterNoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsHandled==false, 1, 0)),
+                    CounterNoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsHandled == false, 1, 0)),
                 }).MergeTable();
 
             var query = queryOrder.LeftJoin(queryCountersign, (or, co) => or.OrgId == co.OrgId)
@@ -192,7 +193,7 @@ namespace Hotline.Api.Controllers.Bi
                     UserName = x.AcceptorName,
                     UserId = x.AcceptorId,
                     //Subtotal = SqlFunc.AggregateCount(x.AcceptorId),
-                    CentreArchive = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status >=  EOrderStatus.Filed && x.ProcessType == EProcessType.Zhiban, 1, 0)),
+                    CentreArchive = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status >= EOrderStatus.Filed && x.ProcessType == EProcessType.Zhiban, 1, 0)),
                     CentreCareOf = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status >= EOrderStatus.Filed && x.ProcessType == EProcessType.Jiaoban, 1, 0)),
                     //NoCentreCareOf = SqlFunc.AggregateSum(SqlFunc.IIF((int)x.Status < 300 && x.ExpiredTime > x.FiledTime, 1, 0)),
                     Invalid = SqlFunc.AggregateSum(SqlFunc.IIF(x.AcceptType == "无效", 1, 0)),
@@ -216,7 +217,7 @@ namespace Hotline.Api.Controllers.Bi
                     query = dto.SortRule == 0 ? query.OrderBy(x => x.Repeat) : query.OrderByDescending(x => x.Repeat);
                     break;
             }
-            var (total, items) = await query.Where(x=> (x.CentreArchive+x.CentreCareOf+x.Invalid+x.Repeat)!=0).ToPagedListAsync(dto, HttpContext.RequestAborted);
+            var (total, items) = await query.Where(x => (x.CentreArchive + x.CentreCareOf + x.Invalid + x.Repeat) != 0).ToPagedListAsync(dto, HttpContext.RequestAborted);
             return new PagedDto<OrderBiCentreDataListVo>(total, items);
         }
 
@@ -263,6 +264,8 @@ namespace Hotline.Api.Controllers.Bi
 
             dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
 
+            var IsCenter = _sessionContext.OrgIsCenter;
+
             if (dto.Type == 0)
             {
                 dto.ChainEndTime = dto.ChainEndTime.Value.AddDays(1).AddSeconds(-1);
@@ -273,6 +276,7 @@ namespace Hotline.Api.Controllers.Bi
                 .WhereIF(dto.StartTime.HasValue, (x, o) => o.CreationTime >= dto.StartTime)
                 .WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= dto.EndTime)
                 .WhereIF(!string.IsNullOrEmpty(dto.Keyword), (x, o) => x.HotSpotName.Contains(dto.Keyword!))
+                .WhereIF(IsCenter == false, (x, o) => o.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
                 .Where((x, o) => x.ParentId == dto.Id)
                 .Where((x, o) => x.IsDeleted == false)
                 .GroupBy((x, o) => new { x.Id, x.HotSpotName })
@@ -309,6 +313,7 @@ namespace Hotline.Api.Controllers.Bi
                 .WhereIF(dto.StartTime.HasValue, (x, o) => o.CreationTime >= chainStartTime)
                 .WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= chainEndTime)
                 .WhereIF(!string.IsNullOrEmpty(dto.Keyword), (x, o) => x.HotSpotName.Contains(dto.Keyword!))
+                .WhereIF(IsCenter == false, (x, o) => o.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
                 .Where((x, o) => x.ParentId == dto.Id)
                 .Where((x, o) => x.IsDeleted == false)
                 .GroupBy((x, o) => new { x.Id, x.HotSpotName })
@@ -675,6 +680,7 @@ namespace Hotline.Api.Controllers.Bi
         {
             EndDate = EndDate.AddDays(1).AddSeconds(-1);
 
+            var IsCenter = _sessionContext.OrgIsCenter;
 
             if (string.IsNullOrEmpty(HotspotCode))
             {
@@ -683,6 +689,7 @@ namespace Hotline.Api.Controllers.Bi
                 .Where((it, o) => o.CreationTime >= StartDate && o.CreationTime <= EndDate && o.Id != null)
                 .WhereIF(TypeId == 1, (it, o) => o.IdentityType == EIdentityType.Citizen)
                 .WhereIF(TypeId == 2, (it, o) => o.IdentityType == EIdentityType.Enterprise)
+                .WhereIF(IsCenter == false, (it,o) => o.ActualHandleOrgCode.StartsWith(_sessionContext.RequiredOrgId))
                 .GroupBy((it, o) => new { Id = it.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("2")) })
                 .Select((it, o) => new
                 {
@@ -711,6 +718,7 @@ namespace Hotline.Api.Controllers.Bi
                 .Where((it, o) => o.CreationTime >= StartDate && o.CreationTime <= EndDate && it.ParentId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(countx)) == HotspotCode)
                 .WhereIF(TypeId == 1, (it, o) => o.IdentityType == EIdentityType.Citizen)
                 .WhereIF(TypeId == 2, (it, o) => o.IdentityType == EIdentityType.Enterprise)
+                .WhereIF(IsCenter == false, (it, o) => o.ActualHandleOrgCode.StartsWith(_sessionContext.RequiredOrgId))
                 .GroupBy((it, o) => new { Id = it.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(count)) })
                 .Select((it, o) => new
                 {
@@ -750,10 +758,10 @@ namespace Hotline.Api.Controllers.Bi
 
             var list = await _orderVisitDetailRepository.Queryable()
                 .Where(x => x.OrderVisit.VisitTime >= StartDate && x.OrderVisit.VisitTime <= EndDate && x.VisitTarget == EVisitTarget.Org && x.OrderVisit.VisitState == EVisitState.Visited && !string.IsNullOrEmpty(x.VisitOrgCode))
-                .WhereIF(string.IsNullOrEmpty(OrgName)==false, x => x.VisitOrgName.Contains(OrgName))
-                .WhereIF(string.IsNullOrEmpty(LineNum)==false, x => x.OrderVisit.Order.CallRecord.Gateway.Contains(LineNum))
+                .WhereIF(string.IsNullOrEmpty(OrgName) == false, x => x.VisitOrgName.Contains(OrgName))
+                .WhereIF(string.IsNullOrEmpty(LineNum) == false, x => x.OrderVisit.Order.CallRecord.Gateway.Contains(LineNum))
                 .WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContext.OrgId))
-                .GroupByIF(IsCenter,x => new
+                .GroupByIF(IsCenter, x => new
                 {
                     VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
                 })
@@ -763,7 +771,7 @@ namespace Hotline.Api.Controllers.Bi
                 })
                 .Select(x => new VisitAndOrgSatisfactionStatisticsDto()
                 {
-                    OrgCode = SqlFunc.IIF(IsCenter,x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")), x.VisitOrgCode),
+                    OrgCode = SqlFunc.IIF(IsCenter, x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")), x.VisitOrgCode),
                     TotalSumCount = SqlFunc.AggregateCount(x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))),
                     VerySatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "5", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "5", 1, 0))),//非常满意数
                     SatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "4", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "4", 1, 0))), //满意数
@@ -1191,19 +1199,18 @@ namespace Hotline.Api.Controllers.Bi
         /// <param name="TypeCode">0:全部,1:中心,2:部门</param>
         /// <returns></returns>
         [HttpGet("department_acceptance_type_statistics")]
-        public async Task<List<DepartmentAcceptanceTypeStatisticsDto>> DepartmentAcceptanceTypeStatistics(DateTime StartDate, DateTime EndDate, int TypeCode)
+        public async Task<object> DepartmentAcceptanceTypeStatistics(DateTime StartDate, DateTime EndDate, int TypeCode)
         {
             EndDate = EndDate.AddDays(1).AddSeconds(-1);
 
             var IsCenter = _sessionContext.OrgIsCenter;
 
             var orderData = await _orderRepository.Queryable()
-              // .LeftJoin<SystemOrganize>((it, o) => it.OrgLevelOneCode == o.Id)
-              .Where(it => it.CreationTime >= StartDate && it.CreationTime <= EndDate && it.Status >= EOrderStatus.Filed)
+              .Where(it => it.CreationTime >= StartDate && it.CreationTime <= EndDate && it.Status > EOrderStatus.WaitForAccept)
 
               .Select(it => new
               {
-                  OrgCode = IsCenter == true ? it.OrgLevelOneCode  : it.ActualHandleOrgCode.Substring(0, _sessionContext.RequiredOrgId.Length + 3),
+                  OrgCode = IsCenter == true ? it.ActualHandleOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) : it.ActualHandleOrgCode.Substring(0, _sessionContext.RequiredOrgId.Length + 3),
                   it.AcceptTypeCode,
                   it.FileDurationWorkday,
                   it.AllDuration
@@ -1256,9 +1263,152 @@ namespace Hotline.Api.Controllers.Bi
                 })
               .ToListAsync();
 
-            return orderData;
+            var sumModel = new DepartmentAcceptanceTypeStatisticsDto
+            {
+                OrgName = "合计",
+                ZxAllCount = orderData.Sum(x => x.ZxAllCount),
+                ZxAllTimes = orderData.Sum(x => x.ZxAllTimes),
+                ZxAcceptanceTypeCode = "10",
+
+                JyAllCount = orderData.Sum(x => x.JyAllCount),
+                JyAllTimes = orderData.Sum(x => x.JyAllTimes),
+                JyAcceptanceTypeCode = "15",
+
+                QzAllCount = orderData.Sum(x => x.QzAllCount),
+                QzAllTimes = orderData.Sum(x => x.QzAllTimes),
+                QzAcceptanceTypeCode = "20",
+
+                ByAllCount = orderData.Sum(x => x.ByAllCount),
+                ByAllTimes = orderData.Sum(x => x.ByAllTimes),
+                ByAcceptanceTypeCode = "25",
+
+                JbAllCount = orderData.Sum(x => x.JbAllCount),
+                JbAllTimes = orderData.Sum(x => x.JbAllTimes),
+                JbAcceptanceTypeCode = "30",
+
+                TsAllCount = orderData.Sum(x => x.TsAllCount),
+                TsAllTimes = orderData.Sum(x => x.TsAllTimes),
+                TsAcceptanceTypeCode = "35",
+
+                QtAllCount = orderData.Sum(x => x.QtAllCount),
+                QtAllTimes = orderData.Sum(x => x.QtAllTimes),
+                QtAcceptanceTypeCode = "40"
+            };
+
+            return new { DataList = orderData, SumModel = sumModel };
+        }
+
+        /// <summary>
+        /// 部门受理类型统计周期---子级
+        /// </summary>
+        /// <param name="StartDate"></param>
+        /// <param name="EndDate"></param>
+        /// <param name="TypeCode">0:全部,1:中心,2:部门</param>
+        /// <param name="OrgCode"></param>
+        /// <returns></returns>
+        [HttpGet("department_acceptance_type_child_statistics")]
+        public async Task<object> DepartmentAcceptanceTypeChildStatistics(DateTime StartDate, DateTime EndDate, int TypeCode, string OrgCode)
+        {
+            EndDate = EndDate.AddDays(1).AddSeconds(-1);
+
+            // var IsCenter = _sessionContext.OrgIsCenter;
+
+            var orderData = await _orderRepository.Queryable()
+              .Where(it => it.CreationTime >= StartDate && it.CreationTime <= EndDate && it.Status > EOrderStatus.WaitForAccept)// && it.Status >= EOrderStatus.Filed
+              .WhereIF(OrgCode == "001", it => it.ActualHandleOrgCode == OrgCode)
+              .WhereIF(OrgCode != "001", it => it.ActualHandleOrgCode.StartsWith(OrgCode))
+
+              .Select(it => new
+              {
+                  // OrgCode = OrgCode == "001" ? OrgCode : it.ActualHandleOrgCode.Substring(0, OrgCode.Length + 3),
+                  OrgCode = it.ActualHandleOrgCode == "001" ? it.ActualHandleOrgCode : it.ActualHandleOrgCode.Substring(0, OrgCode.Length + 3),
+                  it.AcceptTypeCode,
+                  it.FileDurationWorkday,
+                  it.AllDuration
+              })
+              .MergeTable()
+              .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
+
+              .WhereIF(TypeCode == 1, (it, o) => it.OrgCode == "001")
+              .WhereIF(TypeCode == 2, (it, o) => it.OrgCode != "001")
+               //.WhereIF(IsCenter == false, (it, o) => it.OrgCode.StartsWith(_sessionContext.RequiredOrgId))
+
+               .GroupBy((it, o) => new
+               {
+                   it.OrgCode,
+                   o.Name,
+                   o.OrgType
+               })
+                .Select((it, o) => new DepartmentAcceptanceTypeStatisticsDto
+                {
+                    OrgName = it.OrgCode == "001" ? "热线中心" : o.Name,
+                    OrgCode = it.OrgCode,
+                    OrgType = (int)o.OrgType == 2 ? "区县部门" : "市直部门",
+                    ZxAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10", 1, 0)),
+                    ZxAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10" && it.AllDuration != null, it.AllDuration, 0)),
+                    ZxAcceptanceTypeCode = "10",
+
+                    JyAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "15", 1, 0)),
+                    JyAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "15" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
+                    JyAcceptanceTypeCode = "15",
+
+                    QzAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "20", 1, 0)),
+                    QzAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "20" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
+                    QzAcceptanceTypeCode = "20",
+
+                    ByAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "25", 1, 0)),
+                    ByAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "25" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
+                    ByAcceptanceTypeCode = "25",
+
+                    JbAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "30", 1, 0)),
+                    JbAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "30" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
+                    JbAcceptanceTypeCode = "30",
+
+                    TsAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "35", 1, 0)),
+                    TsAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "35" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
+                    TsAcceptanceTypeCode = "35",
+
+                    QtAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "40", 1, 0)),
+                    QtAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "40" && it.FileDurationWorkday != null, it.FileDurationWorkday, 0)),
+                    QtAcceptanceTypeCode = "40"
+                })
+              .ToListAsync();
+
+            var sumModel = new DepartmentAcceptanceTypeStatisticsDto
+            {
+                OrgName = "合计",
+                ZxAllCount = orderData.Sum(x => x.ZxAllCount),
+                ZxAllTimes = orderData.Sum(x => x.ZxAllTimes),
+                ZxAcceptanceTypeCode = "10",
+
+                JyAllCount = orderData.Sum(x => x.JyAllCount),
+                JyAllTimes = orderData.Sum(x => x.JyAllTimes),
+                JyAcceptanceTypeCode = "15",
+
+                QzAllCount = orderData.Sum(x => x.QzAllCount),
+                QzAllTimes = orderData.Sum(x => x.QzAllTimes),
+                QzAcceptanceTypeCode = "20",
+
+                ByAllCount = orderData.Sum(x => x.ByAllCount),
+                ByAllTimes = orderData.Sum(x => x.ByAllTimes),
+                ByAcceptanceTypeCode = "25",
+
+                JbAllCount = orderData.Sum(x => x.JbAllCount),
+                JbAllTimes = orderData.Sum(x => x.JbAllTimes),
+                JbAcceptanceTypeCode = "30",
+
+                TsAllCount = orderData.Sum(x => x.TsAllCount),
+                TsAllTimes = orderData.Sum(x => x.TsAllTimes),
+                TsAcceptanceTypeCode = "35",
+
+                QtAllCount = orderData.Sum(x => x.QtAllCount),
+                QtAllTimes = orderData.Sum(x => x.QtAllTimes),
+                QtAcceptanceTypeCode = "40"
+            };
+            return new { DataList = orderData, SumModel = sumModel };
         }
 
+
         /// <summary>
         /// 部门受理类型统计周期--明细列表
         /// </summary>
@@ -1269,9 +1419,10 @@ namespace Hotline.Api.Controllers.Bi
         {
             dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
             var (total, items) = await _orderRepository.Queryable()
-                .Where(p => p.CreationTime >= dto.StartDate && p.CreationTime <= dto.EndDate && p.Status >= EOrderStatus.Filed)
-                .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneCode) && dto.OrgLevelOneCode == "001", p => p.OrgLevelOneCode == dto.OrgLevelOneCode)
-                .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneCode) && dto.OrgLevelOneCode != "001", p => p.ActualHandleOrgCode.StartsWith(dto.OrgLevelOneCode))
+                .Where(p => p.CreationTime >= dto.StartDate && p.CreationTime <= dto.EndDate && p.Status > EOrderStatus.WaitForAccept)//&& p.Status >= EOrderStatus.Filed
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == "001", p => p.OrgLevelOneCode == dto.OrgCode)
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001" && dto.SuperiorOrgCode != dto.OrgCode, p => p.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001" && dto.SuperiorOrgCode == dto.OrgCode, p => p.ActualHandleOrgCode == dto.OrgCode)
                 .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), p => p.AcceptTypeCode == dto.AcceptTypeCode)
                 .WhereIF(dto.TypeCode == 1, p => p.OrgLevelOneCode == "001")
                 .WhereIF(dto.TypeCode == 2, p => p.OrgLevelOneCode != "001")
@@ -1412,7 +1563,7 @@ namespace Hotline.Api.Controllers.Bi
                    .Where((p, o) => p.CallOrderType == ECallOrderType.Order)
                    .Where((p, o) => p.ExternalId != null && o.Id != null)
                     .WhereIF(!string.IsNullOrEmpty(dto.PhoneNum), (p, o) => p.CPN == dto.PhoneNum)
-                   .Select((p, o) => new 
+                   .Select((p, o) => new
                    {
                        p.CPN,
                        p.ExternalId
@@ -1579,59 +1730,59 @@ namespace Hotline.Api.Controllers.Bi
             return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
         }
 
-		/// <summary>
-		/// 回退错件
-		/// </summary>
-		/// <param name="dto"></param>
-		/// <returns></returns>
-		[HttpGet("reTransact")]
-		public async Task<PagedDto<OrderReTransactVo>> OrderReTransact([FromQuery] QueryOrderReTransactRequest dto) 
+        /// <summary>
+        /// 回退错件
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("reTransact")]
+        public async Task<PagedDto<OrderReTransactVo>> OrderReTransact([FromQuery] QueryOrderReTransactRequest dto)
         {
-			if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
-				throw UserFriendlyException.SameMessage("请选择时间!");
-			dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
-			var (total, items) = await _orderSpecialDetailRepository.Queryable()
-                .Includes(x=>x.OrderSpecial)
+            if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
+                throw UserFriendlyException.SameMessage("请选择时间!");
+            dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+            var (total, items) = await _orderSpecialDetailRepository.Queryable()
+                .Includes(x => x.OrderSpecial)
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.OrgName.Contains(dto.OrgName!))
-				.Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
+                .Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
                 .Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
                 .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
                 .GroupBy(x => new { Time = x.OrderSpecial.CreationTime.ToString("yyyy-MM-dd"), x.OrgId, x.OrgName })
                 .Select(x => new OrderReTransactVo
                 {
-	                Time = x.OrderSpecial.CreationTime.ToString("yyyy-MM-dd"),
-					OrgId = x.OrgId,
+                    Time = x.OrderSpecial.CreationTime.ToString("yyyy-MM-dd"),
+                    OrgId = x.OrgId,
                     OrgName = x.OrgName,
                     Num = SqlFunc.AggregateCount(1)
                 }).MergeTable()
-				.OrderByIF(dto.SortRule == 0, x => x.Num, OrderByType.Asc)
+                .OrderByIF(dto.SortRule == 0, x => x.Num, OrderByType.Asc)
                 .OrderByIF(dto.SortRule == 1, x => x.Num, OrderByType.Desc)
                 .ToPagedListAsync(dto, HttpContext.RequestAborted);
             return new PagedDto<OrderReTransactVo>(total, _mapper.Map<IReadOnlyList<OrderReTransactVo>>(items));
-		}
+        }
 
-		/// <summary>
-		/// 回退错件明细
-		/// </summary>
-		/// <param name="dto"></param>
-		/// <returns></returns>
-		[HttpGet("reTransact_detail")]
-		public async Task<PagedDto<OrderSpecialDetailDto>> OrderReTransactDetail([FromQuery] QueryOrderReTransactDetailRequest dto) 
+        /// <summary>
+        /// 回退错件明细
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("reTransact_detail")]
+        public async Task<PagedDto<OrderSpecialDetailDto>> OrderReTransactDetail([FromQuery] QueryOrderReTransactDetailRequest dto)
         {
-			if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
-				throw UserFriendlyException.SameMessage("请选择时间!");
-			dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
-			var (total, items) = await _orderSpecialDetailRepository.Queryable()
-				.Includes(x => x.OrderSpecial,s=>s.Order)
-                .WhereIF(!string.IsNullOrEmpty(dto.OrgName),x=>x.OrgName.Contains(dto.OrgName!))
-				.WhereIF(!string.IsNullOrEmpty(dto.ErrorName), x => x.ErrorName.Contains(dto.ErrorName!))
-				.WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderSpecial!.Order!.No!.Contains(dto.No!))
-				.Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
-				.Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
-				.Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
-				.ToPagedListAsync(dto, HttpContext.RequestAborted);
-			return new PagedDto<OrderSpecialDetailDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDetailDto>>(items));
-		}
+            if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
+                throw UserFriendlyException.SameMessage("请选择时间!");
+            dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+            var (total, items) = await _orderSpecialDetailRepository.Queryable()
+                .Includes(x => x.OrderSpecial, s => s.Order)
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.OrgName.Contains(dto.OrgName!))
+                .WhereIF(!string.IsNullOrEmpty(dto.ErrorName), x => x.ErrorName.Contains(dto.ErrorName!))
+                .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderSpecial!.Order!.No!.Contains(dto.No!))
+                .Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
+                .Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
+                .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
+                .ToPagedListAsync(dto, HttpContext.RequestAborted);
+            return new PagedDto<OrderSpecialDetailDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDetailDto>>(items));
+        }
 
         /// <summary>
         /// 获取基本信息
@@ -1639,14 +1790,14 @@ namespace Hotline.Api.Controllers.Bi
         /// <param name="id"></param>
         /// <returns></returns>
 		[HttpGet("reTransact_base")]
-		public async Task<object> ReTransactBaseData()
-		{
-			var rsp = new
-			{
-				ReTransactErrorType = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.ReTransactErrorType),
-			};
-			return rsp;
-		}
+        public async Task<object> ReTransactBaseData()
+        {
+            var rsp = new
+            {
+                ReTransactErrorType = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.ReTransactErrorType),
+            };
+            return rsp;
+        }
 
         /// <summary>
         /// 派单量统计// TODO

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

@@ -575,6 +575,12 @@ namespace Hotline.Api.Controllers
             return _mapper.Map<SystemLogDto>(log);
 		}
 
+        [HttpPost("log")]
+        public async Task<string> LogAdd([FromBody]SystemLogDto dto)
+        {
+            var log = _mapper.Map<SystemLog>(dto);
+            return await _systemLogRepository.AddAsync(log, HttpContext.RequestAborted);
+        }
 
         #endregion
 

+ 20 - 9
src/Hotline.Api/Controllers/WorkflowController.cs

@@ -553,7 +553,6 @@ public class WorkflowController : BaseController
     /// <param name="dto"></param>
     /// <returns></returns>
     [HttpGet("order-countersign")]
-    [AllowAnonymous]
     public async Task<PagedDto<WorkflowCountersignDto>> QueryOrderCountersigns([FromQuery] QueryOrderCountersignDto dto)
     {
         RefAsync<int> total = 0;
@@ -564,7 +563,7 @@ public class WorkflowController : BaseController
             .Includes(x => x.Members)
             .LeftJoin<Workflow>((c, w) => c.WorkflowId == w.Id)
             .InnerJoin<Order>((c, w, o) => w.ExternalId == o.Id)
-            .WhereIF(!_sessionContext.OrgIsCenter, (c, w, o) => c.Members.Any(m => m.Key == _sessionContext.OrgId))
+         //   .WhereIF(!_sessionContext.OrgIsCenter, (c, w, o) => c.Members.Any(m => m.Key == _sessionContext.OrgId || m.Key == _sessionContext.RequiredOrgId))
             .WhereIF(!string.IsNullOrEmpty(dto.Title), (c, w, o) => o.Title.Contains(dto.Title))
             .WhereIF(!string.IsNullOrEmpty(dto.OrderNo), (c, w, o) => o.No.Contains(dto.OrderNo))
             .WhereIF(dto.AcceptTypes.Any(), (c, w, o) => dto.AcceptTypes.Contains(o.AcceptTypeCode)) //受理类型
@@ -572,7 +571,6 @@ public class WorkflowController : BaseController
             .WhereIF(dto.HotspotIds.Any(), (c, w, o) => dto.HotspotIds.Contains(o.HotspotId)) //热点类型
             .WhereIF(dto.OrgCodes.Any(), (c, w, o) => dto.OrgCodes.Contains(c.FinisherOrgAreaCode)) //接办部门
             .WhereIF(dto.CounterSignType != null, (c, w, o) => c.CounterSignType == dto.CounterSignType) //会签类型
-
         ;
 
         //发起会签:班长角色能看所有会签信件;
@@ -580,18 +578,18 @@ public class WorkflowController : BaseController
         //承办部门用户能看到自己发起的和同级部门用户发起的会签件
         if (dto.InitiatedCountersignature.HasValue && dto.InitiatedCountersignature == true)
         {
-            if (_sessionContext.Roles.Select(p => "banzhang") != null)
+            if (_sessionContext.Roles.Any(p => p == "banzhang"))
             {
 
             }
             else
-            if (_sessionContext.Roles.Select(p => "paidanyuan") != null)
+            if (_sessionContext.Roles.Any(p => p == "paidanyuan"))
             {
-
+                query = query.Where((c, w, o) => c.StarterId == _sessionContext.UserId);
             }
             else
             {
-
+                query = query.Where((c, w, o) => c.StarterOrgId == _sessionContext.RequiredOrgId);
             }
         }
 
@@ -601,12 +599,24 @@ public class WorkflowController : BaseController
         //承办部门用户能看到和同级部门用户已办理过的会签件
         if (dto.HandleCountersignature.HasValue && dto.HandleCountersignature == true)
         {
-
+            if (_sessionContext.Roles.Any(p => p == "banzhang"))
+            {
+                query = query.Where((c, w, o) => c.EndTime.HasValue);
+            }
+            else
+           if (_sessionContext.Roles.Any(p => p == "paidanyuan"))
+            {
+                query = query.Where((c, w, o) => c.Members.Any(m => m.Key == _sessionContext.RequiredOrgId) && c.EndTime.HasValue);
+            }
+            else
+            {
+                query = query.Where((c, w, o) => c.Members.Any(m => m.Key == _sessionContext.OrgId || m.Key == _sessionContext.RequiredOrgId) && c.EndTime.HasValue);
+            }
         }
 
         //if (dto.IsOnlyStarter)
         //    query = query.Where((c, w, o) => c.StarterId == _sessionContext.RequiredUserId);
-
+        // dto.CounterSignCount = await _workflowCountersignRepository.Queryable().Where(p => p.WorkflowId == dto.WorkflowId).CountAsync();
         var items = await query
             .OrderByDescending((c, w, o) => o.ExpiredTime)
             .Select((c, w, o) => new { c, o })
@@ -616,6 +626,7 @@ public class WorkflowController : BaseController
         {
             var dto = _mapper.Map<WorkflowCountersignDto>(d.c);
             dto.Order = _mapper.Map<OrderDto>(d.o);
+            dto.CounterSignCount = _workflowCountersignRepository.Queryable().Where(p => p.WorkflowId == d.c.WorkflowId).CountAsync().GetAwaiter().GetResult();
             return dto;
         }).ToList();
 

+ 1 - 0
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -416,6 +416,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         {
             if (currentStep.IsCountersignEndStep)
             {
+                //todo outer汇总节点??
                 // 宜宾需求:会签汇总节点展示会签办理节点办理意见
                 var countersignHandleSteps = workflow.Steps.Where(d =>
                         d.CountersignId == currentStep.CountersignId &&

+ 4 - 2
src/Hotline.Application/Handlers/FlowEngine/WorkflowNextHandler.cs

@@ -144,6 +144,9 @@ public class WorkflowNextHandler : INotificationHandler<NextStepNotify>
                 //    expiredTimeChanged = true;
                 //}
 				await _orderRepository.UpdateAsync(order, cancellationToken);
+
+                //司法行政监督管理-推诿工单
+                await _enforcementApplication.AddPassTheBuckOrderAsync(order, _sessionContext.RequiredOrgId, _sessionContext.OrgName, cancellationToken);
                 try
                 {
                     if (notification.Dto.IsSms)
@@ -210,8 +213,7 @@ public class WorkflowNextHandler : INotificationHandler<NextStepNotify>
                     HandlerOrgLevel = notification.HandlerOrgId.CalcOrgLevel()
                 }, cancellationToken: cancellationToken);
 
-                //司法行政监督管理-推诿工单
-                await _enforcementApplication.AddPassTheBuckOrderAsync(order, _sessionContext.RequiredOrgId, _sessionContext.OrgName, cancellationToken);
+             
                 break;
             case WorkflowModuleConsts.KnowledgeAdd:
             case WorkflowModuleConsts.KnowledgeUpdate:

+ 15 - 3
src/Hotline.Application/JudicialManagement/EnforcementApplication.cs

@@ -1,6 +1,8 @@
-using Hotline.Caching.Interfaces;
+using Hotline.Application.Handlers.FlowEngine;
+using Hotline.Caching.Interfaces;
 using Hotline.JudicialManagement;
 using Hotline.Settings;
+using Microsoft.Extensions.Logging;
 using SqlSugar;
 using XF.Domain.Constants;
 using XF.Domain.Dependency;
@@ -15,6 +17,7 @@ namespace Hotline.Application.JudicialManagement
         private readonly IRepository<EnforcementHotspot> _enforcementHotspotRepository;
         private readonly ISystemDicDataCacheManager _sysDicDataCacheManager;
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
+        private readonly ILogger<EnforcementApplication> _logger;
 
 
         /// <summary>
@@ -29,13 +32,15 @@ namespace Hotline.Application.JudicialManagement
            IRepository<EnforcementOrders> enforcementOrdersRepository,
           IRepository<EnforcementHotspot> enforcementHotspotRepository,
         ISystemDicDataCacheManager sysDicDataCacheManager,
-       ISystemSettingCacheManager systemSettingCacheManager)
+       ISystemSettingCacheManager systemSettingCacheManager,
+      ILogger<EnforcementApplication> logger)
         {
             _enforcementOrderHanderRepository = enforcementOrderHanderRepository;
             _enforcementOrdersRepository = enforcementOrdersRepository;
             _enforcementHotspotRepository = enforcementHotspotRepository;
             _sysDicDataCacheManager = sysDicDataCacheManager;
             _systemSettingCacheManager = systemSettingCacheManager;
+            _logger= logger;
         }
 
         /// <summary>
@@ -105,6 +110,7 @@ namespace Hotline.Application.JudicialManagement
         /// <returns></returns>
         public async Task AddPassTheBuckOrderAsync(Hotline.Orders.Order order, string orgCode, string orgName, CancellationToken cancellationToken)
         {
+            _logger.LogInformation("进入");
             //排除咨询件
             if (order.AcceptTypeCode == "10")
                 return;
@@ -120,15 +126,17 @@ namespace Hotline.Application.JudicialManagement
             if (enforcementPassTheBuckNum != null)
                 CountNum = int.Parse(enforcementPassTheBuckNum);
 
-
+            _logger.LogInformation("进入"+ CountNum);
             //如果是特定部门办理写入数据
             var JudicialManagementOrg = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.JudicialManagementOrg).Where(p => p.DicDataValue == orgCode);
             if (JudicialManagementOrg != null && JudicialManagementOrg.Any())
             {
+                _logger.LogInformation("部门进入" );
                 //第一次办理,直接写入数据
                 var enforcementOrder = await _enforcementOrderHanderRepository.GetAsync(p => p.OrderId == order.Id && p.ActualHandleOrgCode == orgCode, cancellationToken);
                 if (enforcementOrder == null)
                 {
+                    _logger.LogInformation("部门没数据进入");
                     enforcementOrder = new EnforcementOrderHander()
                     {
                         OrderId = order.Id,
@@ -140,6 +148,7 @@ namespace Hotline.Application.JudicialManagement
                 }
                 else
                 {
+                    _logger.LogInformation("部门有数据进入");
                     //多次办理,修改数据
                     enforcementOrder.ActualHandleOrgName = orgName;
                     enforcementOrder.ActualHandleOrgCode = orgCode;
@@ -150,10 +159,12 @@ namespace Hotline.Application.JudicialManagement
                 //达到工单推诿计算次数
                 if (enforcementOrder.HandleNum >= CountNum)
                 {
+                    _logger.LogInformation("达到次数");
                     //查找工单数据
                     var orderData = await _enforcementOrdersRepository.GetAsync(p => p.Id == order.Id, cancellationToken);
                     if (orderData == null)
                     {
+                        _logger.LogInformation("达到次数新增工单");
                         //没有工单数据,直接写入
                         EnforcementOrders enforcementOrders = new EnforcementOrders()
                         {
@@ -167,6 +178,7 @@ namespace Hotline.Application.JudicialManagement
                     }
                     else
                     {
+                        _logger.LogInformation("达到次数修改");
                         //有工单数据修改为推诿
                         if (orderData.IsPassTheBuckOrder != true)
                         {

+ 5 - 0
src/Hotline.Share/Dtos/FlowEngine/Workflow/WorkflowCountersignDto.cs

@@ -123,5 +123,10 @@ namespace Hotline.Share.Dtos.FlowEngine.Workflow
         public OrderDto Order { get; set; }
 
         public string? StateText => EndTime.HasValue ? "已结束" : "未结束";
+
+        /// <summary>
+        /// 会签次数
+        /// </summary>
+        public int CounterSignCount { get; set; }
     }
 }

+ 7 - 2
src/Hotline.Share/Requests/DepartmentKeyWordRequest.cs

@@ -13,9 +13,14 @@
         public DateTime EndDate { get; set; }
 
         /// <summary>
-        /// 一级部门编码
+        /// 部门编码
         /// </summary>
-        public string? OrgLevelOneCode { get; set; }
+        public string? OrgCode { get; set; }
+
+        /// <summary>
+        /// 上级部门编码
+        /// </summary>
+        public string? SuperiorOrgCode { get; set; }
 
         /// <summary>
         /// 受理类型编码

+ 2 - 8
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -427,20 +427,14 @@ namespace Hotline.FlowEngine.Workflows
 
             if (workflow.ActualHandleStepId == currentStep.Id)
             {
+                //更新实际办理节点信息
                 workflow.UpdateActualStepWhenHandle(currentStep,
                     _sessionContext.RequiredUserId, _sessionContext.UserName,
                     _sessionContext.RequiredOrgId, _sessionContext.OrgName,
                     _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
                     _sessionContext.OrgLevel);
             }
-
-            ////更新实际办理节点信息
-            //workflow.UpdateWorkflowActualHandleInfo(currentStep,
-            //    _sessionContext.RequiredUserId, _sessionContext.UserName,
-            //    _sessionContext.RequiredOrgId, _sessionContext.OrgName,
-            //    _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
-            //    _sessionContext.OrgLevel);
-
+            
             //检查是否流转到流程终点
             if (nextStepDefine.StepType is EStepType.End)
             {