Browse Source

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

xf 1 year ago
parent
commit
0f1c1844bc

+ 76 - 13
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -1881,6 +1881,7 @@ namespace Hotline.Api.Controllers.Bi
             if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
                 throw UserFriendlyException.SameMessage("请选择时间!");
             dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+
             var items = await _workflowTraceRepository.Queryable()
                 .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
                 .LeftJoin<WorkflowStepHandler>((x, w, wsh) => x.StepId == wsh.WorkflowStepId)
@@ -1890,32 +1891,39 @@ namespace Hotline.Api.Controllers.Bi
                 .Where((x, w, wsh, su) => x.CreationTime <= dto.EndTime.Value)
                 .WhereIF(!string.IsNullOrEmpty(dto.UserName), (x, w, wsh, su) => su.UserName == dto.UserName)
                 .GroupBy((x, w, wsh, su) => new { su.UserId, su.UserName })
-                .Having((x, w, wsh, su) => SqlFunc.AggregateCount(x.WorkflowId) == 1)
+                //.Having((x, w, wsh, su) => SqlFunc.AggregateCount(x.WorkflowId) == 1)
                 .Select((x, w, wsh, su) => new BiOrderSendVo
                 {
                     UserId = su.UserId,
                     UserName = su.UserName,
-                    SendOrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(true, 1, 0)),
+                    SendOrderNum = SqlFunc.AggregateDistinctCount(w.ExternalId),
                     NoSendOrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.HandlerId == null || x.HandlerId == "", 1, 0)),
                     ReSendOrderNum = 0,
                 }).ToListAsync();
             var items2 = await _workflowTraceRepository.Queryable()
                 .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
-                .LeftJoin<WorkflowStepHandler>((x, w, wsh) => x.StepId == wsh.WorkflowStepId)
-                .InnerJoin<SchedulingUser>((x, w, wsh, su) => wsh.UserId == su.UserId)
-                .Where((x, w, wsh, su) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send)
-                .Where((x, w, wsh, su) => x.CreationTime >= dto.StartTime.Value)
-                .Where((x, w, wsh, su) => x.CreationTime <= dto.EndTime.Value)
-                .WhereIF(!string.IsNullOrEmpty(dto.UserName), (x, w, wsh, su) => su.UserName == dto.UserName)
-                .GroupBy((x, w, wsh, su) => new { su.UserId, su.UserName })
-                .Having((x, w, wsh, su) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
-                .Select((x, w, wsh, su) => new BiOrderSendVo
+                .LeftJoin<WorkflowStepHandler>((x, w, wfsh) => x.StepId == wfsh.WorkflowStepId)
+                .InnerJoin<SchedulingUser>((x, w, wfsh, su) => wfsh.UserId == su.UserId)
+				.Where((x, w, wfsh, su) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send)
+                .Where((x, w, wfsh, su) => x.CreationTime >= dto.StartTime.Value)
+                .Where((x, w, wfsh, su) => x.CreationTime <= dto.EndTime.Value)
+				.GroupBy((x, w, wfsh, su) =>x.WorkflowId)
+                .Having((x, w, wfsh, su) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
+                .Select((x, w, wfsh, su) => new { Id = x.WorkflowId })
+                .MergeTable()
+                .LeftJoin<WorkflowTrace>((a,wt)=>a.Id == wt.WorkflowId)
+                .LeftJoin<Workflow>((a, wt, wf) => wt.WorkflowId == wf.Id)
+				.LeftJoin<WorkflowStepHandler>((a, wt, wf, wsh) => wt.StepId == wsh.WorkflowStepId)
+                .InnerJoin<SchedulingUser>((a,wt, wf, wsh, su) => wsh.UserId == su.UserId)
+				.WhereIF(!string.IsNullOrEmpty(dto.UserName), ((a, wt, wf, wsh, su) => su.UserName == dto.UserName))
+				.GroupBy((a, wt, wf, wsh, su) => new { su.UserId, su.UserName })
+                .Select((a, wt, wf, wsh, su) => new BiOrderSendVo
                 {
                     UserId = su.UserId,
                     UserName = su.UserName,
                     SendOrderNum = 0,
                     NoSendOrderNum = 0,
-                    ReSendOrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(true, 1, 0)),
+                    ReSendOrderNum = SqlFunc.AggregateDistinctCount(wf.ExternalId),
                 }).ToListAsync();
 
             var res = (from t1 in items
@@ -1934,7 +1942,62 @@ namespace Hotline.Api.Controllers.Bi
 
             return res;
         }
+        /// <summary>
+        /// 派单量统计明细
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("send_order_detail_report")]
+		public async Task<PagedDto<OrderDto>> QuerySendOrderDetail([FromQuery] QuerySendOrderDetailRequest dto) {
+	        if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
+		        throw UserFriendlyException.SameMessage("请选择时间!");
+	        dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+
+            var (total, items) = await _workflowTraceRepository.Queryable()
+                .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
+                .LeftJoin<WorkflowStepHandler>((x, w, wsh) => x.StepId == wsh.WorkflowStepId)
+                .InnerJoin<SchedulingUser>((x, w, wsh, su) => wsh.UserId == su.UserId)
+                .Where((x, w, wsh, su) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send)
+                .Where((x, w, wsh, su) => x.CreationTime >= dto.StartTime.Value)
+                .Where((x, w, wsh, su) => x.CreationTime <= dto.EndTime.Value)
+                .Where((x, w, wsh, su)=> su.UserId == dto.UserId)
+				.WhereIF(dto.TitleCode == "NoSendOrderNum", (x, w, wsh, su) => x.HandlerId == null || x.HandlerId == "")
+                .GroupBy((x, w, wsh, su) => w.ExternalId)
+                .Select((x, w, wsh, su) => new { Id = w.ExternalId })
+                .MergeTable()
+                .LeftJoin<Order>((a, b) => a.Id == b.Id)
+                .Select((a, b) => b)
+                .ToPagedListAsync(dto, HttpContext.RequestAborted);
+
+			if (dto.TitleCode == "ReSendOrderNum")
+			{
+				 (total, items) = await _workflowTraceRepository.Queryable()
+	                    .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
+	                    .LeftJoin<WorkflowStepHandler>((x, w, wfsh) => x.StepId == wfsh.WorkflowStepId)
+	                    .InnerJoin<SchedulingUser>((x, w, wfsh, su) => wfsh.UserId == su.UserId)
+	                    .Where((x, w, wfsh, su) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send)
+	                    .Where((x, w, wfsh, su) => x.CreationTime >= dto.StartTime.Value)
+	                    .Where((x, w, wfsh, su) => x.CreationTime <= dto.EndTime.Value)
+						.GroupBy((x, w, wfsh, su) => x.WorkflowId)
+	                    .Having((x, w, wfsh, su) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
+	                    .Select((x, w, wfsh, su) => new { Id = x.WorkflowId })
+	                    .MergeTable()
+	                    .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
+	                    .LeftJoin<Workflow>((a, wt, wf) => wt.WorkflowId == wf.Id)
+	                    .LeftJoin<WorkflowStepHandler>((a, wt, wf, wsh) => wt.StepId == wsh.WorkflowStepId)
+	                    .InnerJoin<SchedulingUser>((a, wt, wf, wsh, su) => wsh.UserId == su.UserId)
+	                    .Where((a, wt, wf, wsh, su) => su.UserId == dto.UserId)
+						.GroupBy((a, wt, wf, wsh, su) => wf.ExternalId)
+	                    .Select((a, wt, wf, wsh, su) => new { Id = wf.ExternalId })
+	                    .MergeTable()
+	                    .LeftJoin<Order>((a, b) => a.Id == b.Id)
+	                    .Select((a, b) => b)
+	                    .ToPagedListAsync(dto, HttpContext.RequestAborted);
+			}
+            return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
+		}
+
 
 
-    }
+	}
 }

+ 4 - 4
src/Hotline.Api/Controllers/OrderController.cs

@@ -2601,10 +2601,10 @@ public class OrderController : BaseController
             .FirstAsync(d => d.WorkflowId == dto.WorkflowId, HttpContext.RequestAborted);
         if (order is null)
             throw new UserFriendlyException("无效工单编号");
-        if (await _orderDelayRepository.AnyAsync(x => x.OrderId == order.Id && x.DelayState == EDelayState.Examining, HttpContext.RequestAborted))
-        {
-            throw UserFriendlyException.SameMessage("该工单存在正在审核中的延期,不能办理");
-        }
+        //if (await _orderDelayRepository.AnyAsync(x => x.OrderId == order.Id && x.DelayState == EDelayState.Examining, HttpContext.RequestAborted))
+        //{
+        //    throw UserFriendlyException.SameMessage("该工单存在正在审核中的延期,不能办理");
+        //}
         if (await _orderSendBackAuditRepository.AnyAsync(x => x.OrderId == order.Id && x.State == ESendBackAuditState.Apply, HttpContext.RequestAborted))
         {
             throw UserFriendlyException.SameMessage("该工单存在正在审核中的退回,不能办理");

+ 1 - 2
src/Hotline.Repository.SqlSugar/System/SystemOrganizeRepository.cs

@@ -31,10 +31,9 @@ namespace Hotline.Repository.SqlSugar.System
 
         public async Task<IReadOnlyList<SystemOrganize>> GetCanUseOrgByOrgCode(string orgCode)
         {
-            orgCode = orgCode.Substring(0, orgCode.Length - 3);
             var list = await Db.Queryable<SystemOrganize>()
                  .Where(it => it.Id.StartsWith(orgCode))
-                .ToTreeAsync(it => it.Children, it => it.ParentId, orgCode);
+                .ToTreeAsync(it => it.Children, it => it.ParentId, orgCode.Length > 6 ? orgCode.Substring(0, orgCode.Length - 3) : null);
             return list;
         }
 

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

@@ -167,4 +167,11 @@ public record QuerySendOrderRequest
 	/// </summary>
 	public DateTime? EndTime { get; set; }
 
+}
+
+public record QuerySendOrderDetailRequest : ReportPagedRequest 
+{
+	public string UserId { get; set; }
+
+	public string TitleCode { get; set; }
 }

+ 1 - 1
src/Hotline/Orders/OrderDelay.cs

@@ -70,7 +70,7 @@ namespace Hotline.Orders
         /// <summary>
         /// 延期申请单位
         /// </summary>
-        public ETimeType DelayUnit { get; set; }
+        public ETimeType DelayUnit { get; set; } 
 
         /// <summary>
         /// 延期申请理由