|
@@ -64,6 +64,7 @@ using XF.Domain.Authentications;
|
|
|
using XF.Domain.Dependency;
|
|
|
using XF.Domain.Exceptions;
|
|
|
using XF.Domain.Repository;
|
|
|
+using static Org.BouncyCastle.Asn1.Cmp.Challenge;
|
|
|
using WordInfo = PanGu.WordInfo;
|
|
|
|
|
|
namespace Hotline.Application.OrderApp;
|
|
@@ -5508,6 +5509,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
/// <returns></returns>
|
|
|
public async Task<List<SendOrderReportOutDto>> SendOrderReportAsync(QuerySendOrderRequest dto)
|
|
|
{
|
|
|
+ if (_appOptions.Value.IsLuZhou)
|
|
|
+ {
|
|
|
+ return await SendOrderReportAsync_LZ(dto);
|
|
|
+ }
|
|
|
var itemsHandled = _workflowTraceRepository.Queryable()
|
|
|
.LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
.InnerJoin<SchedulingUser>((x, w, su) => x.HandlerId == su.UserId)
|
|
@@ -5596,13 +5601,183 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
return res;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 泸州派单量统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<List<SendOrderReportOutDto>> SendOrderReportAsync_LZ(QuerySendOrderRequest dto)
|
|
|
+ {
|
|
|
+ var itemsHandled = _workflowTraceRepository.Queryable()
|
|
|
+ .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
+ .Where((x, w) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send && x.Status == EWorkflowStepStatus.Handled)
|
|
|
+ .Where((x, w) => x.HandleTime >= dto.StartTime.Value)
|
|
|
+ .Where((x, w) => x.HandleTime <= dto.EndTime.Value)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.UserName), (x, w) => x.HandlerName == dto.UserName)
|
|
|
+ .GroupBy((x, w) => new { x.HandlerId,x.HandlerName,x.Name})
|
|
|
+ .Select((x, w) => new BiOrderSendVo
|
|
|
+ {
|
|
|
+ UserId = x.HandlerId,
|
|
|
+ UserName = x.HandlerName,
|
|
|
+ StepName = x.Name,
|
|
|
+ SendOrderNum = SqlFunc.AggregateDistinctCount(w.ExternalId),
|
|
|
+ NoSendOrderNum = 0,
|
|
|
+ });
|
|
|
+ var itemsNo = _workflowTraceRepository.Queryable()
|
|
|
+ .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
+ .Where((x, w) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send && x.Status != EWorkflowStepStatus.Handled)
|
|
|
+ .Where((x, w) => x.CreationTime >= dto.StartTime.Value)
|
|
|
+ .Where((x, w) => x.CreationTime <= dto.EndTime.Value)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.UserName), (x, w) => x.HandlerName == dto.UserName)
|
|
|
+ .GroupBy((x, w) => new { x.HandlerId, x.HandlerName, x.Name })
|
|
|
+ .Select((x, w) => new BiOrderSendVo
|
|
|
+ {
|
|
|
+ UserId = x.HandlerId,
|
|
|
+ UserName = x.HandlerName,
|
|
|
+ StepName = x.Name,
|
|
|
+ SendOrderNum = 0,
|
|
|
+ NoSendOrderNum = SqlFunc.AggregateDistinctCount(w.ExternalId),
|
|
|
+ });
|
|
|
+
|
|
|
+ var items2 = _workflowTraceRepository.Queryable()
|
|
|
+ .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
+ .Where((x, w) => w.ModuleCode == WorkflowModuleConsts.OrderHandle && x.BusinessType == EBusinessType.Send &&
|
|
|
+ x.Status == EWorkflowStepStatus.Handled
|
|
|
+ && !string.IsNullOrEmpty(x.NextMainHandler) && x.NextMainHandler != OrgSeedData.CenterId)
|
|
|
+ .Where((x, w) => x.CreationTime >= dto.StartTime.Value)
|
|
|
+ .Where((x, w) => x.CreationTime <= dto.EndTime.Value)
|
|
|
+ .GroupBy((x, w) => x.WorkflowId)
|
|
|
+ .Having((x, w) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
|
|
|
+ .Select((x, w) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(x.CreationTime) })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.UserName), ((a, wt) => wt.HandlerName == dto.UserName))
|
|
|
+ .GroupBy((a, wt) => new { wt.HandlerId, wt.HandlerName ,wt.Name })
|
|
|
+ .Select((a, wt) => new BiOrderSendVo
|
|
|
+ {
|
|
|
+ UserId = wt.HandlerId,
|
|
|
+ UserName = wt.HandlerName,
|
|
|
+ StepName = wt.Name,
|
|
|
+ SendOrderNum = 0,
|
|
|
+ NoSendOrderNum = 0,
|
|
|
+ ReSendOrderNum = SqlFunc.AggregateDistinctCount(wt.ExternalId),
|
|
|
+ });
|
|
|
+
|
|
|
+ var items = await _orderRepository.UnionAll(itemsHandled, itemsNo,itemsHandled)
|
|
|
+ .GroupBy(x => new { x.UserId, x.UserName, x.StepName })
|
|
|
+ .Select(x => new BiOrderSendVo
|
|
|
+ {
|
|
|
+ UserId = x.UserId,
|
|
|
+ UserName = x.UserName,
|
|
|
+ StepName = x.StepName,
|
|
|
+ SendOrderNum = SqlFunc.AggregateSum(x.SendOrderNum),
|
|
|
+ NoSendOrderNum = SqlFunc.AggregateSum(x.NoSendOrderNum),
|
|
|
+ ReSendOrderNum = SqlFunc.AggregateSum(x.ReSendOrderNum)
|
|
|
+ }).MergeTable().Select(p=> new SendOrderReportOutDto {
|
|
|
+ UserId =p.UserId,
|
|
|
+ UserName = p.UserName,
|
|
|
+ StepName = p.StepName,
|
|
|
+ SendOrderNum = p.SendOrderNum,
|
|
|
+ NoSendOrderNum = p.NoSendOrderNum,
|
|
|
+ ReSendOrderNum = p.ReSendOrderNum,
|
|
|
+ ChainRate = p.AccuracyRate
|
|
|
+ }).ToListAsync();
|
|
|
+ return items;
|
|
|
+ }
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 扭转信件统计
|
|
|
- /// </summary>
|
|
|
- /// <param name="dto"></param>
|
|
|
- /// <returns></returns>
|
|
|
- public ISugarQueryable<OrderVisitJudeStatisticsRep> OrderVisitJudeStatistics(OrderVisitJudeStatisticsReq dto)
|
|
|
+
|
|
|
+ public ISugarQueryable<Order> QuerySendOrderDetail(QuerySendOrderDetailRequest dto)
|
|
|
+ {
|
|
|
+ if (_appOptions.Value.IsLuZhou)
|
|
|
+ {
|
|
|
+ return QuerySendOrderDetail_LZ(dto);
|
|
|
+
|
|
|
+ }
|
|
|
+ if (dto.TitleCode.ToUpper() == "RESENDORDERNUM")
|
|
|
+ {
|
|
|
+ var query = _workflowTraceRepository.Queryable()
|
|
|
+ .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
+ .InnerJoin<SchedulingUser>((x, w, su) => x.HandlerId == su.UserId)
|
|
|
+ .Where((x, w, su) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send && x.Status == EWorkflowStepStatus.Handled
|
|
|
+ && !string.IsNullOrEmpty(x.NextMainHandler) && x.NextMainHandler != OrgSeedData.CenterId)
|
|
|
+ .Where((x, w, su) => x.CreationTime >= dto.StartTime.Value)
|
|
|
+ .Where((x, w, su) => x.CreationTime <= dto.EndTime.Value)
|
|
|
+ .GroupBy((x, w, su) => x.WorkflowId)
|
|
|
+ .Having((x, w, su) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
|
|
|
+ .Select((x, w, su) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(x.CreationTime) })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
|
|
|
+ .LeftJoin<Workflow>((a, wt, wf) => wt.WorkflowId == wf.Id)
|
|
|
+ .InnerJoin<SchedulingUser>((a, wt, wf, su) => wt.HandlerId == su.UserId)
|
|
|
+ .Where((a, wt, wf, su) => su.UserId == dto.UserId)
|
|
|
+ .GroupBy((a, wt, wf, su) => wf.ExternalId)
|
|
|
+ .Select((a, wt, wf, su) => new { Id = wf.ExternalId })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<Order>((a, b) => a.Id == b.Id)
|
|
|
+ .Select((a, b) => b);
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+ var query2 = _workflowTraceRepository.Queryable()
|
|
|
+ .InnerJoin<SchedulingUser>((x, su) => x.HandlerId == su.UserId)
|
|
|
+ .Where((x, su) => x.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send)
|
|
|
+ .Where((x, su) => x.CreationTime >= dto.StartTime.Value && x.CreationTime <= dto.EndTime.Value && su.UserId == dto.UserId)
|
|
|
+ .WhereIF(dto.TitleCode.ToUpper() == "NOSENDORDERNUM", (x, su) => x.Status != EWorkflowStepStatus.Handled)
|
|
|
+ .WhereIF(dto.TitleCode.ToUpper() == "SENDORDERNUM", (x, su) => x.Status == EWorkflowStepStatus.Handled)
|
|
|
+ .GroupBy((x, su) => x.ExternalId)
|
|
|
+ .Select((x, su) => new { Id = x.ExternalId })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<Order>((a, b) => a.Id == b.Id)
|
|
|
+ .Select((a, b) => b);
|
|
|
+ return query2;
|
|
|
+ }
|
|
|
+
|
|
|
+ public ISugarQueryable<Order> QuerySendOrderDetail_LZ(QuerySendOrderDetailRequest dto)
|
|
|
+ {
|
|
|
+ if (dto.TitleCode.ToUpper() == "RESENDORDERNUM")
|
|
|
+ {
|
|
|
+ var query = _workflowTraceRepository.Queryable()
|
|
|
+ .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
|
|
|
+ .Where((x, w) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send && x.Status == EWorkflowStepStatus.Handled
|
|
|
+ && !string.IsNullOrEmpty(x.NextMainHandler) && x.NextMainHandler != OrgSeedData.CenterId)
|
|
|
+ .Where((x, w) => x.CreationTime >= dto.StartTime.Value)
|
|
|
+ .Where((x, w) => x.CreationTime <= dto.EndTime.Value)
|
|
|
+ .WhereIF(dto.RoleName is "派单组", (x, w) => x.Name == "派单组")
|
|
|
+ .WhereIF(dto.RoleName is "中心班长", (x, w) => x.Name == "班长审批")
|
|
|
+ .GroupBy((x, w) => x.WorkflowId)
|
|
|
+ .Having((x, w) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
|
|
|
+ .Select((x, w) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(x.CreationTime) })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
|
|
|
+ .LeftJoin<Workflow>((a, wt, wf) => wt.WorkflowId == wf.Id)
|
|
|
+ .Where((a, wt, wf) => wt.HandlerId == dto.UserId)
|
|
|
+ .GroupBy((a, wt, wf) => wf.ExternalId)
|
|
|
+ .Select((a, wt, wf) => new { Id = wf.ExternalId })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<Order>((a, b) => a.Id == b.Id)
|
|
|
+ .Select((a, b) => b);
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+ var query2 = _workflowTraceRepository.Queryable()
|
|
|
+ .Where(x => x.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send)
|
|
|
+ .Where(x => x.CreationTime >= dto.StartTime.Value && x.CreationTime <= dto.EndTime.Value && x.HandlerId == dto.UserId)
|
|
|
+ .WhereIF(dto.TitleCode.ToUpper() == "NOSENDORDERNUM", x => x.Status != EWorkflowStepStatus.Handled)
|
|
|
+ .WhereIF(dto.TitleCode.ToUpper() == "SENDORDERNUM", x => x.Status == EWorkflowStepStatus.Handled)
|
|
|
+ .WhereIF(dto.RoleName is "派单组", x => x.Name == "派单组")
|
|
|
+ .WhereIF(dto.RoleName is "中心班长", x => x.Name == "班长审批")
|
|
|
+ .GroupBy(x => x.ExternalId)
|
|
|
+ .Select(x => new { Id = x.ExternalId })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<Order>((a, b) => a.Id == b.Id)
|
|
|
+ .Select((a, b) => b);
|
|
|
+ return query2;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 扭转信件统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public ISugarQueryable<OrderVisitJudeStatisticsRep> OrderVisitJudeStatistics(OrderVisitJudeStatisticsReq dto)
|
|
|
{
|
|
|
if (!dto.EndTime.HasValue)
|
|
|
{
|