|
@@ -2,6 +2,7 @@
|
|
|
using Hotline.FlowEngine.Workflows;
|
|
|
using Hotline.Orders;
|
|
|
using Hotline.Repository.SqlSugar.Orders;
|
|
|
+using Hotline.Settings;
|
|
|
using Hotline.Settings.Hotspots;
|
|
|
using Hotline.Share.Attributes;
|
|
|
using Hotline.Share.Dtos;
|
|
@@ -28,6 +29,7 @@ using XF.Domain.Authentications;
|
|
|
using XF.Domain.Dependency;
|
|
|
using XF.Domain.Exceptions;
|
|
|
using XF.Domain.Repository;
|
|
|
+using static NPOI.HSSF.Util.HSSFColor;
|
|
|
using static NPOI.SS.Format.CellNumberFormatter;
|
|
|
|
|
|
namespace Hotline.Application.Snapshot;
|
|
@@ -100,9 +102,9 @@ public class BiSnapshotApplication : IBiSnapshotApplication, IScopeDependency
|
|
|
var query = _orderRepository.Queryable()
|
|
|
.Includes(d => d.OrderVisits)
|
|
|
.Where(d => d.CreationTime >= dto.StartTime && d.CreationTime <= dto.EndTime)
|
|
|
- .WhereIF(dto.HotspotCode.NotNullOrEmpty(), d => d.HotspotId.StartsWith(dto.HotspotCode))
|
|
|
+ .WhereIF(dto.HotspotCode.NotNullOrEmpty(), d => d.HotspotId.StartsWith(dto.HotspotCode))
|
|
|
.WhereIF(IsCenter == false, d => d.ActualHandleOrgCode.StartsWith(_sessionContext.RequiredOrgId))
|
|
|
- .Select(d => new HotspotStatisticsDetailsOutDto
|
|
|
+ .Select(d => new HotspotStatisticsDetailsOutDto
|
|
|
{
|
|
|
OrderScreenStatus = SqlFunc.Subqueryable<OrderScreen>().Where(q => q.OrderId == d.Id).OrderByDesc(q => q.CreationTime).Select(q => q.Status), //x.OrderScreens.FirstOrDefault().Status,
|
|
|
}, true);
|
|
@@ -324,4 +326,106 @@ public class BiSnapshotApplication : IBiSnapshotApplication, IScopeDependency
|
|
|
CreationTime = order.CreationTime
|
|
|
}, true);
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 办件统计-随手拍
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ /// <exception cref="NotImplementedException"></exception>
|
|
|
+ public ISugarQueryable<SnapshotProcessingStatisticsOutDto> GetSnapshotProcessingStatistics(SnapshotProcessingStatisticsInDto dto)
|
|
|
+ {
|
|
|
+ bool IsCenter = _sessionContext.OrgIsCenter;
|
|
|
+ var orgLevel = _sessionContext.OrgLevel;
|
|
|
+ string orgLevelStr = (_sessionContext.RequiredOrgId.Length + 3).ToString();
|
|
|
+
|
|
|
+ var query = _orderSnapshotRepository.Queryable(includeDeleted: true)
|
|
|
+ .LeftJoin<Order>((snapshot, order) => snapshot.Id == order.Id)
|
|
|
+ .LeftJoin<OrderSendBackAudit>((snapshot, order, back) => snapshot.Id == back.OrderId && back.State == ESendBackAuditState.End)
|
|
|
+ .LeftJoin<OrderVisit>((snapshot, order, back, visit) => snapshot.Id == visit.OrderId && visit.VisitState == EVisitState.Visited)
|
|
|
+ .LeftJoin<OrderSecondaryHandling>((snapshot, order, back, visit, second) => snapshot.Id == second.OrderId && second.State == ESecondaryHandlingState.End)
|
|
|
+ .Where(snapshot => snapshot.CreationTime >= dto.StartTime && snapshot.CreationTime <= dto.EndTime)
|
|
|
+ .WhereIF(dto.IndustryId.NotNullOrEmpty(), snapshot => snapshot.IndustryId == dto.IndustryId)
|
|
|
+ .GroupBy((snapshot, order) => new
|
|
|
+ {
|
|
|
+ OrgCode = order.ActualHandleOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
|
|
|
+ })
|
|
|
+ .Select((snapshot, order, back, visit, second) => new SnapshotProcessingStatisticsOutDto()
|
|
|
+ {
|
|
|
+ OrgCode = order.ActualHandleOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
|
|
|
+ YbOrderCountNum = SqlFunc.AggregateCount(SqlFunc.IIF(order.Status >= EOrderStatus.Filed, 1, 0)),
|
|
|
+ ZbOrderCountNum = SqlFunc.AggregateCount(SqlFunc.IIF(order.Status < EOrderStatus.Filed, 1, 0)),
|
|
|
+ ReceiveIn20Minutes = SqlFunc.AggregateCount(SqlFunc.IIF(order.ActualHandleStepCreateTime != null && order.ActualHandleStepCreateTime.Value.AddMinutes(-20) <= order.CreationTime, 1, 0)),
|
|
|
+ ReceiveOut20Minutes = SqlFunc.AggregateCount(SqlFunc.IIF(order.ActualHandleStepCreateTime == null || order.ActualHandleStepCreateTime.Value.AddMinutes(-20) > order.CreationTime, 1, 0)),
|
|
|
+ BackNum = SqlFunc.AggregateCount(SqlFunc.IIF(back.OrderId != null && back.OrderId != "", 1, 0)),
|
|
|
+ TotalHandleDuration = SqlFunc.AggregateSum(order.HandleDuration),
|
|
|
+ End3Day = SqlFunc.AggregateSum(SqlFunc.IIF(order.FiledTime != null && order.FiledTime.Value.AddDays(-3) < order.CreationTime, 1, 0)),
|
|
|
+ End3To5Day = SqlFunc.AggregateSum(SqlFunc.IIF(order.FiledTime != null && order.FiledTime.Value.AddDays(-3) > order.CreationTime && order.FiledTime.Value.AddDays(-5) < order.CreationTime, 1, 0)),
|
|
|
+ End5To7Day = SqlFunc.AggregateSum(SqlFunc.IIF(order.FiledTime != null && order.FiledTime.Value.AddDays(-5) > order.CreationTime && order.FiledTime.Value.AddDays(-7) < order.CreationTime, 1, 0)),
|
|
|
+ End7Day = SqlFunc.AggregateSum(SqlFunc.IIF(order.FiledTime != null && order.FiledTime.Value.AddDays(-7) < order.CreationTime, 1, 0)),
|
|
|
+ OnTimeCount = SqlFunc.AggregateSum(SqlFunc.IIF(order.FiledTime <= order.ExpiredTime, 1, 0)),
|
|
|
+ SatisfiedCount = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonListObjectAny(visit.NowEvaluate, "key", "1") || SqlFunc.JsonListObjectAny(visit.NowEvaluate, "key", "2"), 1, 0)),
|
|
|
+ NoSatisfiedCount = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonListObjectAny(visit.NowEvaluate, "key", "1") || SqlFunc.JsonListObjectAny(visit.NowEvaluate, "key", "2"), 0, 1)),
|
|
|
+ SecondNum = SqlFunc.AggregateCount(second.Id)
|
|
|
+ })
|
|
|
+ .MergeTable()
|
|
|
+ .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
|
|
|
+ .Select((it, o) => new SnapshotProcessingStatisticsOutDto()
|
|
|
+ {
|
|
|
+ OrgName = o.Name,
|
|
|
+ OrgCode = it.OrgCode,
|
|
|
+ YbOrderCountNum = it.YbOrderCountNum,
|
|
|
+ ZbOrderCountNum = it.ZbOrderCountNum,
|
|
|
+ ReceiveIn20Minutes = it.ReceiveIn20Minutes,
|
|
|
+ ReceiveOut20Minutes = it.ReceiveOut20Minutes,
|
|
|
+ BackNum = it.BackNum,
|
|
|
+ TotalHandleDuration = it.TotalHandleDuration,
|
|
|
+ End3Day = it.End3Day,
|
|
|
+ End3To5Day = it.End3To5Day,
|
|
|
+ End5To7Day = it.End5To7Day,
|
|
|
+ End7Day = it.End7Day,
|
|
|
+ OnTimeCount = it.OnTimeCount,
|
|
|
+ SatisfiedCount = it.SatisfiedCount,
|
|
|
+ NoSatisfiedCount = it.NoSatisfiedCount,
|
|
|
+ SecondNum = it.SecondNum
|
|
|
+ });
|
|
|
+
|
|
|
+ return query;
|
|
|
+ }
|
|
|
+
|
|
|
+ public ISugarQueryable<SnapshotProcessingStatisticsDetailsOutDto> GetSnapshotProcessingStatisticsDetails(SnapshotProcessingStatisticsDetailsInDto dto)
|
|
|
+ {
|
|
|
+ dto.FieldName = dto.FieldName.ToLower();
|
|
|
+ var IsCenter = _sessionContext.OrgIsCenter;
|
|
|
+ IsCenter = true;
|
|
|
+ var query = _orderSnapshotRepository.Queryable()
|
|
|
+ .LeftJoin<Order>((snapshot, order) => snapshot.Id == order.Id)
|
|
|
+ .LeftJoin<OrderSendBackAudit>((snapshot, order, back) => snapshot.Id == back.OrderId && back.State == ESendBackAuditState.End)
|
|
|
+ .LeftJoin<OrderVisit>((snapshot, order, back, visit) => snapshot.Id == visit.OrderId && visit.VisitState == EVisitState.Visited)
|
|
|
+ .LeftJoin<OrderSecondaryHandling>((snapshot, order, back, visit, second) => snapshot.Id == second.OrderId && second.State == ESecondaryHandlingState.End)
|
|
|
+ .Where((snapshot, order, back) => order.CreationTime >= dto.StartTime && order.CreationTime <= dto.EndTime && order.ActualHandleOrgCode.StartsWith(dto.OrgId))
|
|
|
+ .WhereIF(IsCenter == false, (snapshot, order, back) => order.ActualHandleOrgCode.StartsWith(_sessionContext.RequiredOrgId))
|
|
|
+ .WhereIF(dto.IndustryId.NotNullOrEmpty(), (snapshot, order, back) => snapshot.IndustryId == dto.IndustryId);
|
|
|
+
|
|
|
+ query = dto.FieldName switch
|
|
|
+ {
|
|
|
+ "ybordercountnum" => query.Where((snapshot, order, back) => order.Status >= EOrderStatus.Filed),
|
|
|
+ "zbordercountnum" => query.Where((snapshot, order, back) => order.Status < EOrderStatus.Filed),
|
|
|
+ "receivein20minutes" => query.Where((snapshot, order, back) => order.ActualHandleStepCreateTime != null && order.ActualHandleStepCreateTime.Value.AddMinutes(-20) <= order.CreationTime),
|
|
|
+ "receiveout20minutes" => query.Where((snapshot, order, back) => order.ActualHandleStepCreateTime == null || order.ActualHandleStepCreateTime.Value.AddMinutes(-20) > order.CreationTime),
|
|
|
+ "backnum" => query.Where((snapshot, order, back) => back.OrderId != null && back.OrderId != ""),
|
|
|
+ "end3day" => query.Where((snapshot, order, back) => order.FiledTime != null && order.FiledTime.Value.AddDays(-3) < order.CreationTime),
|
|
|
+ "end3to5day" => query.Where((snapshot, order, back) => order.FiledTime != null && order.FiledTime.Value.AddDays(-3) > order.CreationTime && order.FiledTime.Value.AddDays(-5) < order.CreationTime),
|
|
|
+ "end5to7day" => query.Where((snapshot, order, back) => order.FiledTime != null && order.FiledTime.Value.AddDays(-5) > order.CreationTime && order.FiledTime.Value.AddDays(-7) < order.CreationTime),
|
|
|
+ "end7day" => query.Where((snapshot, order, back) => order.FiledTime != null && order.FiledTime.Value.AddDays(-7) < order.CreationTime),
|
|
|
+ "satisfiedcount" => query.Where((snapshot, order, back, visit) => SqlFunc.JsonListObjectAny(visit.NowEvaluate, "key", "1") || SqlFunc.JsonListObjectAny(visit.NowEvaluate, "key", "2")),
|
|
|
+ "nosatisfiedcount" => query.Where((snapshot, order, back, visit) => SqlFunc.JsonListObjectAny(visit.NowEvaluate, "key", "1") || SqlFunc.JsonListObjectAny(visit.NowEvaluate, "key", "2")),
|
|
|
+ "secondnum" => query.Where((snapshot, order, back, visit, second) => second.Id != null || second.Id != ""),
|
|
|
+ _ => throw new UserFriendlyException($"入参: {dto.FieldName} 异常")
|
|
|
+ };
|
|
|
+ return query.Select(d => new SnapshotProcessingStatisticsDetailsOutDto
|
|
|
+ {
|
|
|
+ OrderScreenStatus = SqlFunc.Subqueryable<OrderScreen>().Where(q => q.OrderId == d.Id).OrderByDesc(q => q.CreationTime).Select(q => q.Status),
|
|
|
+ }, true);
|
|
|
+ }
|
|
|
}
|