TANG JIANG 1 tahun lalu
induk
melakukan
ca2a40ba46

+ 64 - 52
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -43,7 +43,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,
@@ -60,7 +60,7 @@ namespace Hotline.Api.Controllers.Bi
             ISessionContext sessionContext,
             ISystemSettingCacheManager systemSettingCacheManager,
             IRepository<OrderSpecialDetail> orderSpecialDetailRepository
-			)
+            )
         {
             _orderRepository = orderRepository;
             _hotspotTypeRepository = hotspotTypeRepository;
@@ -79,12 +79,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) //业务已办超期
@@ -92,7 +92,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);
-            
+
         //}
 
 
@@ -114,14 +114,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)
@@ -132,7 +132,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)
@@ -189,7 +189,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)),
@@ -213,7 +213,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);
         }
 
@@ -1189,21 +1189,33 @@ namespace Hotline.Api.Controllers.Bi
             var IsCenter = _sessionContext.OrgIsCenter;
 
             var orderData = await _orderRepository.Queryable()
-              .LeftJoin<SystemOrganize>((it, o) => it.OrgLevelOneCode == o.Id)
-              .Where((it, o) => it.CreationTime >= StartDate && it.CreationTime <= EndDate && (int)it.Status >= 300)
-                .WhereIF(TypeCode == 1, (it, o) => it.OrgLevelOneCode == "001")
-                .WhereIF(TypeCode == 2, (it, o) => it.OrgLevelOneCode != "001")
-                .WhereIF(IsCenter == false, (it, o) => it.OrgLevelOneCode.StartsWith(_sessionContext.RequiredOrgId))
+              // .LeftJoin<SystemOrganize>((it, o) => it.OrgLevelOneCode == o.Id)
+              .Where(it => it.CreationTime >= StartDate && it.CreationTime <= EndDate && it.Status >= EOrderStatus.Filed)
+      
+              .Select(it => new
+              {
+                  OrgCode = IsCenter == false ? it.ActualHandleOrgCode : it.OrgLevelOneCode,
+                  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.OrgLevelOneCode,
+                   it.OrgCode,
                    o.Name,
                    o.OrgType
                })
                 .Select((it, o) => new DepartmentAcceptanceTypeStatisticsDto
                 {
-                    OrgName = it.OrgLevelOneCode == "001" ? "热线中心" : o.Name,
-                    OrgCode = it.OrgLevelOneCode,
+                    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)),
@@ -1248,7 +1260,7 @@ 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 && (int)p.Status >= 300)
+                .Where(p => p.CreationTime >= dto.StartDate && p.CreationTime <= dto.EndDate && p.Status >= EOrderStatus.Filed)
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneCode), p => p.OrgLevelOneCode == dto.OrgLevelOneCode)
                 .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), p => p.AcceptTypeCode == dto.AcceptTypeCode)
                 .OrderByDescending(d => d.CreationTime)
@@ -1388,7 +1400,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
@@ -1555,19 +1567,19 @@ 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] ReportPagedRequest dto) 
+        /// <summary>
+        /// 回退错件
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("reTransact")]
+        public async Task<PagedDto<OrderReTransactVo>> OrderReTransact([FromQuery] ReportPagedRequest dto)
         {
-			if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
-				throw UserFriendlyException.SameMessage("请选择时间!");
+            if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
+                throw UserFriendlyException.SameMessage("请选择时间!");
 
             var (total, items) = await _orderSpecialDetailRepository.Queryable()
-                .Includes(x=>x.OrderSpecial)
+                .Includes(x => x.OrderSpecial)
                 .Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
                 .Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
                 .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
@@ -1578,31 +1590,31 @@ namespace Hotline.Api.Controllers.Bi
                     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<OrderSpecialDto>> OrderReTransactDetail([FromQuery] QueryOrderReTransactDetailRequest dto) 
+        }
+
+        /// <summary>
+        /// 回退错件明细
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("reTransact_detail")]
+        public async Task<PagedDto<OrderSpecialDto>> OrderReTransactDetail([FromQuery] QueryOrderReTransactDetailRequest dto)
         {
-			if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
-				throw UserFriendlyException.SameMessage("请选择时间!");
-			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.CreationTime >= dto.StartTime)
-				.Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
-				.ToPagedListAsync(dto, HttpContext.RequestAborted);
-			return new PagedDto<OrderSpecialDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDto>>(items));
-		}
+            if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
+                throw UserFriendlyException.SameMessage("请选择时间!");
+            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.CreationTime >= dto.StartTime)
+                .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
+                .ToPagedListAsync(dto, HttpContext.RequestAborted);
+            return new PagedDto<OrderSpecialDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDto>>(items));
+        }
 
 
 

+ 71 - 0
src/Hotline.Api/Controllers/WorkflowController.cs

@@ -24,6 +24,7 @@ using Hotline.File;
 using Hotline.Orders;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.FlowEngine.Definition;
+using Microsoft.AspNetCore.Authorization;
 
 namespace Hotline.Api.Controllers;
 
@@ -541,12 +542,82 @@ public class WorkflowController : BaseController
             return dto;
         }).ToList();
 
+        return new PagedDto<WorkflowCountersignDto>(total, dtos);
+    }
 
 
 
+    /// <summary>
+    /// 查询会签信息
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("order-countersign")]
+    [AllowAnonymous]
+    public async Task<PagedDto<WorkflowCountersignDto>> QueryOrderCountersigns([FromQuery] QueryOrderCountersignDto dto)
+    {
+        RefAsync<int> total = 0;
 
+        var Role = _sessionContext.Roles;
 
+        var query = _workflowCountersignRepository.Queryable()
+            .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(!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)) //受理类型
+            .WhereIF(dto.Channels.Any(), (c, w, o) => dto.Channels.Contains(o.SourceChannelCode)) //来源渠道
+            .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) //会签类型
+
+        ;
+
+        //发起会签:班长角色能看所有会签信件;
+        //派单员角色只能看到自己发起的会签信件;
+        //承办部门用户能看到自己发起的和同级部门用户发起的会签件
+        if (dto.InitiatedCountersignature.HasValue && dto.InitiatedCountersignature == true)
+        {
+            if (_sessionContext.Roles.Select(p => "banzhang") != null)
+            {
+
+            }
+            else
+            if (_sessionContext.Roles.Select(p => "paidanyuan") != null)
+            {
+
+            }
+            else
+            {
+
+            }
+        }
 
+        //会签已办(会签状态为已结束):
+        //班长角色能看所有已结束的会签信件;
+        //派单员不会办理会签件只会发起会签件所以这一点派单员角色可以忽略;
+        //承办部门用户能看到和同级部门用户已办理过的会签件
+        if (dto.HandleCountersignature.HasValue && dto.HandleCountersignature == true)
+        {
+
+        }
+
+        //if (dto.IsOnlyStarter)
+        //    query = query.Where((c, w, o) => c.StarterId == _sessionContext.RequiredUserId);
+
+        var items = await query
+            .OrderByDescending((c, w, o) => o.ExpiredTime)
+            .Select((c, w, o) => new { c, o })
+            .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
+
+        var dtos = items.Select(d =>
+        {
+            var dto = _mapper.Map<WorkflowCountersignDto>(d.c);
+            dto.Order = _mapper.Map<OrderDto>(d.o);
+            return dto;
+        }).ToList();
 
         return new PagedDto<WorkflowCountersignDto>(total, dtos);
     }

+ 49 - 0
src/Hotline.Share/Dtos/FlowEngine/Workflow/QueryWorkflowCountersignDto.cs

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Requests;
 
 namespace Hotline.Share.Dtos.FlowEngine.Workflow
@@ -13,4 +14,52 @@ namespace Hotline.Share.Dtos.FlowEngine.Workflow
     /// <param name="IsOnlyStarter">根据发起人过滤会签信息</param>
     /// <param name="IsProvince"></param>
     public record QueryWorkflowCountersignDto(bool IsOnlyStarter, bool? IsProvince) : PagedKeywordRequest;
+
+    public record QueryOrderCountersignDto : PagedKeywordRequest
+    {
+        /// <summary>
+        /// 发起的会签
+        /// </summary>
+        public bool? InitiatedCountersignature { get; set; }
+
+        /// <summary>
+        /// 会签已办
+        /// </summary>
+        public bool? HandleCountersignature { get; set; }
+
+        /// <summary>
+        /// 标题
+        /// </summary>
+        public string? Title { get; set; }
+
+        /// <summary>
+        /// 工单编码
+        /// </summary>
+        public string? OrderNo { get; set; }
+
+        /// <summary>
+        /// 受理类型(√)
+        /// </summary>
+        public List<string> AcceptTypes { get; set; } = new();
+
+        /// <summary>
+        /// 来源渠道(√)
+        /// </summary>
+        public List<string> Channels { get; set; } = new();
+
+        /// <summary>
+        /// 会签类型
+        /// </summary>
+        public ECounterSignType? CounterSignType { get; set; }
+
+        /// <summary>
+        /// 接办部门(√)
+        /// </summary>
+        public List<string> OrgCodes { get; set; } = new();
+
+        /// <summary>
+        /// 热点分类(√)
+        /// </summary>
+        public List<string> HotspotIds { get; set; } = new();
+    }
 }

+ 3 - 1
src/Hotline.Share/Dtos/FlowEngine/Workflow/WorkflowCountersignDto.cs

@@ -120,6 +120,8 @@ namespace Hotline.Share.Dtos.FlowEngine.Workflow
         /// </summary>
         public DateTime StartExpiredTime { get; set; }
 
-        public OrderDto Order{ get; set; }
+        public OrderDto Order { get; set; }
+
+        public string? StateText => EndTime.HasValue ? "已结束" : "未结束";
     }
 }