Dun.Jason 1 year ago
parent
commit
88a945c42e

+ 51 - 17
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -11,7 +11,9 @@ using Hotline.Share.Dtos.Bigscreen;
 using Hotline.Share.Dtos.CallCenter;
 using Hotline.Share.Dtos.CallCenter;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Enums.CallCenter;
 using Hotline.Share.Enums.CallCenter;
+using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Order;
+using Hotline.Share.Enums.Settings;
 using Hotline.Share.Requests;
 using Hotline.Share.Requests;
 using MapsterMapper;
 using MapsterMapper;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Authorization;
@@ -21,6 +23,7 @@ using XF.Domain.Authentications;
 using XF.Domain.Constants;
 using XF.Domain.Constants;
 using XF.Domain.Exceptions;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
 using XF.Domain.Repository;
+using XF.Utility.EnumExtensions;
 
 
 namespace Hotline.Api.Controllers.Bi
 namespace Hotline.Api.Controllers.Bi
 {
 {
@@ -1195,21 +1198,33 @@ namespace Hotline.Api.Controllers.Bi
             var IsCenter = _sessionContext.OrgIsCenter;
             var IsCenter = _sessionContext.OrgIsCenter;
 
 
             var orderData = await _orderRepository.Queryable()
             var orderData = await _orderRepository.Queryable()
-              .LeftJoin<SystemOrganize>((it, o) => it.OrgLevelOneCode == o.Id)
-              .Where((it, o) => it.CreationTime >= StartDate && it.CreationTime <= EndDate && it.Status >= EOrderStatus.Filed)
-                .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
                .GroupBy((it, o) => new
                {
                {
-                   it.OrgLevelOneCode,
+                   it.OrgCode,
                    o.Name,
                    o.Name,
                    o.OrgType
                    o.OrgType
                })
                })
                 .Select((it, o) => new DepartmentAcceptanceTypeStatisticsDto
                 .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 ? "区县部门" : "市直部门",
                     OrgType = (int)o.OrgType == 2 ? "区县部门" : "市直部门",
                     ZxAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10", 1, 0)),
                     ZxAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10", 1, 0)),
                     ZxAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10" && it.AllDuration != null, it.AllDuration, 0)),
                     ZxAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10" && it.AllDuration != null, it.AllDuration, 0)),
@@ -1244,6 +1259,7 @@ namespace Hotline.Api.Controllers.Bi
             return orderData;
             return orderData;
         }
         }
 
 
+
         /// <summary>
         /// <summary>
         /// 部门受理类型统计周期--明细列表
         /// 部门受理类型统计周期--明细列表
         /// </summary>
         /// </summary>
@@ -1567,20 +1583,22 @@ namespace Hotline.Api.Controllers.Bi
 		/// <param name="dto"></param>
 		/// <param name="dto"></param>
 		/// <returns></returns>
 		/// <returns></returns>
 		[HttpGet("reTransact")]
 		[HttpGet("reTransact")]
-		public async Task<PagedDto<OrderReTransactVo>> OrderReTransact([FromQuery] ReportPagedRequest dto) 
+		public async Task<PagedDto<OrderReTransactVo>> OrderReTransact([FromQuery] QueryOrderReTransactRequest dto) 
         {
         {
 			if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
 			if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
 				throw UserFriendlyException.SameMessage("请选择时间!");
 				throw UserFriendlyException.SameMessage("请选择时间!");
-
-            var (total, items) = await _orderSpecialDetailRepository.Queryable()
+			dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+			var (total, items) = await _orderSpecialDetailRepository.Queryable()
                 .Includes(x=>x.OrderSpecial)
                 .Includes(x=>x.OrderSpecial)
-                .Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
+                .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.StartTime)
                 .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
                 .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
-                .GroupBy(x => new { x.OrgId, x.OrgName })
+                .GroupBy(x => new { Time = x.OrderSpecial.CreationTime.ToString("yyyy-MM-dd"), x.OrgId, x.OrgName })
                 .Select(x => new OrderReTransactVo
                 .Select(x => new OrderReTransactVo
                 {
                 {
-                    OrgId = x.OrgId,
+	                Time = x.OrderSpecial.CreationTime.ToString("yyyy-MM-dd"),
+					OrgId = x.OrgId,
                     OrgName = x.OrgName,
                     OrgName = x.OrgName,
                     Num = SqlFunc.AggregateCount(1)
                     Num = SqlFunc.AggregateCount(1)
                 }).MergeTable()
                 }).MergeTable()
@@ -1600,9 +1618,12 @@ namespace Hotline.Api.Controllers.Bi
         {
         {
 			if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
 			if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
 				throw UserFriendlyException.SameMessage("请选择时间!");
 				throw UserFriendlyException.SameMessage("请选择时间!");
+			dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
 			var (total, items) = await _orderSpecialDetailRepository.Queryable()
 			var (total, items) = await _orderSpecialDetailRepository.Queryable()
-				.Includes(x => x.OrderSpecial)
+				.Includes(x => x.OrderSpecial,s=>s.Order)
                 .WhereIF(!string.IsNullOrEmpty(dto.OrgName),x=>x.OrgName.Contains(dto.OrgName!))
                 .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.ESpecialType == ESpecialType.ReTransact)
 				.Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
 				.Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
 				.Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
 				.Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
@@ -1610,7 +1631,20 @@ namespace Hotline.Api.Controllers.Bi
 			return new PagedDto<OrderSpecialDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDto>>(items));
 			return new PagedDto<OrderSpecialDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDto>>(items));
 		}
 		}
 
 
+        /// <summary>
+        /// 获取基本信息
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+		[HttpGet("reTransact_base")]
+		public async Task<object> ReTransactBaseData()
+		{
+			var rsp = new
+			{
+				ReTransactErrorType = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.ReTransactErrorType),
+			};
+			return rsp;
+		}
 
 
-
-    }
+	}
 }
 }

+ 2 - 0
src/Hotline.Api/Controllers/OrderController.cs

@@ -1682,6 +1682,8 @@ public class OrderController : BaseController
             ScreenStatus = EnumExts.GetDescriptions<EScreenStatus>(),
             ScreenStatus = EnumExts.GetDescriptions<EScreenStatus>(),
             ScreenType = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.ScreenType),
             ScreenType = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.ScreenType),
             CounterSignType = EnumExts.GetDescriptions<ECounterSignType>(),
             CounterSignType = EnumExts.GetDescriptions<ECounterSignType>(),
+            AcceptType = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.AcceptType),
+            SalesChannel = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.SalesChannel),
 		};
 		};
         return rsp;
         return rsp;
     }
     }

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

@@ -24,6 +24,7 @@ using Hotline.File;
 using Hotline.Orders;
 using Hotline.Orders;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.FlowEngine.Definition;
 using Hotline.Share.Dtos.FlowEngine.Definition;
+using Microsoft.AspNetCore.Authorization;
 
 
 namespace Hotline.Api.Controllers;
 namespace Hotline.Api.Controllers;
 
 
@@ -541,12 +542,82 @@ public class WorkflowController : BaseController
             return dto;
             return dto;
         }).ToList();
         }).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);
         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.Linq;
 using System.Text;
 using System.Text;
 using System.Threading.Tasks;
 using System.Threading.Tasks;
+using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Requests;
 using Hotline.Share.Requests;
 
 
 namespace Hotline.Share.Dtos.FlowEngine.Workflow
 namespace Hotline.Share.Dtos.FlowEngine.Workflow
@@ -13,4 +14,52 @@ namespace Hotline.Share.Dtos.FlowEngine.Workflow
     /// <param name="IsOnlyStarter">根据发起人过滤会签信息</param>
     /// <param name="IsOnlyStarter">根据发起人过滤会签信息</param>
     /// <param name="IsProvince"></param>
     /// <param name="IsProvince"></param>
     public record QueryWorkflowCountersignDto(bool IsOnlyStarter, bool? IsProvince) : PagedKeywordRequest;
     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>
         /// </summary>
         public DateTime StartExpiredTime { get; set; }
         public DateTime StartExpiredTime { get; set; }
 
 
-        public OrderDto Order{ get; set; }
+        public OrderDto Order { get; set; }
+
+        public string? StateText => EndTime.HasValue ? "已结束" : "未结束";
     }
     }
 }
 }

+ 1 - 0
src/Hotline.Share/Dtos/Order/OrderBiDto.cs

@@ -458,6 +458,7 @@ namespace Hotline.Share.Dtos.Order
 
 
 	public class OrderReTransactVo
 	public class OrderReTransactVo
 	{
 	{
+		public string Time { get; set; }
 		public string OrgName { get; set; }
 		public string OrgName { get; set; }
 
 
 		public string OrgId { get; set; }
 		public string OrgId { get; set; }

+ 10 - 0
src/Hotline.Share/Requests/PagedKeywordRequest.cs

@@ -136,8 +136,18 @@ public record QueryOrderDelayDataListRequest:ReportPagedRequest
 	public string? OrgName { get; set; }
 	public string? OrgName { get; set; }
 }
 }
 
 
+public record QueryOrderReTransactRequest : ReportPagedRequest
+{
+	public string? OrgName { get; set; }
+
+}
+
 public record QueryOrderReTransactDetailRequest : ReportPagedRequest
 public record QueryOrderReTransactDetailRequest : ReportPagedRequest
 {
 {
 	public string? OrgName { get; set; }
 	public string? OrgName { get; set; }
 
 
+	public string? ErrorName { get; set; }
+
+	public string? No { get; set; }
+
 }
 }

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

@@ -698,12 +698,13 @@ namespace Hotline.FlowEngine.Workflows
         public async Task<ICollection<Kv>> GetLevelOneOrgsAsync(string workflowId, CancellationToken cancellation)
         public async Task<ICollection<Kv>> GetLevelOneOrgsAsync(string workflowId, CancellationToken cancellation)
         {
         {
             var workflow = await GetWorkflowAsync(workflowId, withSteps: true, cancellationToken: cancellation);
             var workflow = await GetWorkflowAsync(workflowId, withSteps: true, cancellationToken: cancellation);
-            return workflow.Steps.Where(d => d.BusinessType == EBusinessType.Department &&
+            var list = workflow.Steps.Distinct().Where(d => d.BusinessType == EBusinessType.Department &&
                                              d.HandlerType == EHandlerType.OrgLevel &&
                                              d.HandlerType == EHandlerType.OrgLevel &&
                                              d.StepHandlers.Any(d =>
                                              d.StepHandlers.Any(d =>
                                                  !string.IsNullOrEmpty(d.OrgId) && d.OrgId.CheckIfOrgLevelIs(1)))
                                                  !string.IsNullOrEmpty(d.OrgId) && d.OrgId.CheckIfOrgLevelIs(1)))
                 .Select(d => new Kv(d.StepHandlers.First().OrgId, d.StepHandlers.First().OrgName))
                 .Select(d => new Kv(d.StepHandlers.First().OrgId, d.StepHandlers.First().OrgName))
-                .ToList();
+				.ToList();
+            return list.Where((x, i) => list.FindIndex(z => z.Key == x.Key) == i).ToList();
         }
         }
 
 
         /// <summary>
         /// <summary>