|
@@ -4,6 +4,7 @@ using Hotline.FlowEngine.WorkflowModules;
|
|
|
using Hotline.FlowEngine.Workflows;
|
|
|
using Hotline.Orders;
|
|
|
using Hotline.Repository.SqlSugar.Extensions;
|
|
|
+using Hotline.Schedulings;
|
|
|
using Hotline.Repository.SqlSugar.System;
|
|
|
using Hotline.Settings;
|
|
|
using Hotline.Settings.Hotspots;
|
|
@@ -49,6 +50,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
private readonly ISystemSettingCacheManager _systemSettingCacheManager;
|
|
|
private readonly IRepository<OrderSpecialDetail> _orderSpecialDetailRepository;
|
|
|
private readonly IRepository<WorkflowStepHandler> _workflowStepHandler;
|
|
|
+ private readonly IRepository<WorkflowTrace> _workflowTraceRepository;
|
|
|
|
|
|
public BiOrderController(
|
|
|
IOrderRepository orderRepository,
|
|
@@ -68,6 +70,8 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
ISystemSettingCacheManager systemSettingCacheManager,
|
|
|
IRepository<OrderSpecialDetail> orderSpecialDetailRepository,
|
|
|
IRepository<WorkflowStepHandler> workflowStepHandler
|
|
|
+ IRepository<OrderSpecialDetail> orderSpecialDetailRepository,
|
|
|
+ IRepository<WorkflowTrace> workflowTraceRepository
|
|
|
)
|
|
|
{
|
|
|
_orderRepository = orderRepository;
|
|
@@ -87,6 +91,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
_systemSettingCacheManager = systemSettingCacheManager;
|
|
|
_orderSpecialDetailRepository = orderSpecialDetailRepository;
|
|
|
_workflowStepHandler = workflowStepHandler;
|
|
|
+ _workflowTraceRepository = workflowTraceRepository;
|
|
|
|
|
|
}
|
|
|
|
|
@@ -730,7 +735,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
.Where((it, o) => o.CreationTime >= StartDate && o.CreationTime <= EndDate && o.Id != null)
|
|
|
.WhereIF(TypeId == 1, (it, o) => o.IdentityType == EIdentityType.Citizen)
|
|
|
.WhereIF(TypeId == 2, (it, o) => o.IdentityType == EIdentityType.Enterprise)
|
|
|
- .WhereIF(IsCenter == false, (it,o) => o.ActualHandleOrgCode.StartsWith(_sessionContext.RequiredOrgId))
|
|
|
+ .WhereIF(IsCenter == false, (it, o) => o.ActualHandleOrgCode.StartsWith(_sessionContext.RequiredOrgId))
|
|
|
.GroupBy((it, o) => new { Id = it.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("2")) })
|
|
|
.Select((it, o) => new
|
|
|
{
|
|
@@ -1236,7 +1241,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
/// <param name="TypeCode">0:全部,1:中心,2:部门</param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("department_acceptance_type_statistics")]
|
|
|
- public async Task<object> DepartmentAcceptanceTypeStatistics(DateTime StartDate, DateTime EndDate, int TypeCode)
|
|
|
+ public async Task<List<DepartmentAcceptanceTypeStatisticsDto>> DepartmentAcceptanceTypeStatistics(DateTime StartDate, DateTime EndDate, int TypeCode)
|
|
|
{
|
|
|
EndDate = EndDate.AddDays(1).AddSeconds(-1);
|
|
|
|
|
@@ -1300,39 +1305,8 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
})
|
|
|
.ToListAsync();
|
|
|
|
|
|
- var sumModel = new DepartmentAcceptanceTypeStatisticsDto
|
|
|
- {
|
|
|
- OrgName = "合计",
|
|
|
- ZxAllCount = orderData.Sum(x => x.ZxAllCount),
|
|
|
- ZxAllTimes = orderData.Sum(x => x.ZxAllTimes),
|
|
|
- ZxAcceptanceTypeCode = "10",
|
|
|
-
|
|
|
- JyAllCount = orderData.Sum(x => x.JyAllCount),
|
|
|
- JyAllTimes = orderData.Sum(x => x.JyAllTimes),
|
|
|
- JyAcceptanceTypeCode = "15",
|
|
|
|
|
|
- QzAllCount = orderData.Sum(x => x.QzAllCount),
|
|
|
- QzAllTimes = orderData.Sum(x => x.QzAllTimes),
|
|
|
- QzAcceptanceTypeCode = "20",
|
|
|
-
|
|
|
- ByAllCount = orderData.Sum(x => x.ByAllCount),
|
|
|
- ByAllTimes = orderData.Sum(x => x.ByAllTimes),
|
|
|
- ByAcceptanceTypeCode = "25",
|
|
|
-
|
|
|
- JbAllCount = orderData.Sum(x => x.JbAllCount),
|
|
|
- JbAllTimes = orderData.Sum(x => x.JbAllTimes),
|
|
|
- JbAcceptanceTypeCode = "30",
|
|
|
-
|
|
|
- TsAllCount = orderData.Sum(x => x.TsAllCount),
|
|
|
- TsAllTimes = orderData.Sum(x => x.TsAllTimes),
|
|
|
- TsAcceptanceTypeCode = "35",
|
|
|
-
|
|
|
- QtAllCount = orderData.Sum(x => x.QtAllCount),
|
|
|
- QtAllTimes = orderData.Sum(x => x.QtAllTimes),
|
|
|
- QtAcceptanceTypeCode = "40"
|
|
|
- };
|
|
|
-
|
|
|
- return new { DataList = orderData, SumModel = sumModel };
|
|
|
+ return orderData;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -1457,12 +1431,12 @@ 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 && p.Status > EOrderStatus.WaitForAccept)//&& p.Status >= EOrderStatus.Filed
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == "001", p => p.OrgLevelOneCode == dto.OrgCode)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001" && dto.SuperiorOrgCode != dto.OrgCode, p => p.ActualHandleOrgCode.StartsWith(dto.OrgCode))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001" && dto.SuperiorOrgCode == dto.OrgCode, p => p.ActualHandleOrgCode == dto.OrgCode)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == "001", p => p.ActualHandleOrgCode == dto.OrgCode)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001" && _sessionContext.RequiredOrgId != dto.OrgCode, p => p.ActualHandleOrgCode.StartsWith(dto.OrgCode))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001" && _sessionContext.RequiredOrgId == dto.OrgCode, p => p.ActualHandleOrgCode == dto.OrgCode)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), p => p.AcceptTypeCode == dto.AcceptTypeCode)
|
|
|
- .WhereIF(dto.TypeCode == 1, p => p.OrgLevelOneCode == "001")
|
|
|
- .WhereIF(dto.TypeCode == 2, p => p.OrgLevelOneCode != "001")
|
|
|
+ .WhereIF(dto.TypeCode == 1, p => p.ActualHandleOrgCode == "001")
|
|
|
+ .WhereIF(dto.TypeCode == 2, p => p.ActualHandleOrgCode != "001")
|
|
|
.OrderByDescending(d => d.CreationTime)
|
|
|
.ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
|
|
@@ -1836,5 +1810,71 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
return rsp;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 派单量统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("send_order_report")]
|
|
|
+ public async Task<object> SendOrderReport([FromQuery] QuerySendOrderRequest dto)
|
|
|
+ {
|
|
|
+ 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)
|
|
|
+ .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
|
|
|
+ {
|
|
|
+ UserId = su.UserId,
|
|
|
+ UserName = su.UserName,
|
|
|
+ SendOrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(true, 1, 0)),
|
|
|
+ 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
|
|
|
+ {
|
|
|
+ UserId = su.UserId,
|
|
|
+ UserName = su.UserName,
|
|
|
+ SendOrderNum = 0,
|
|
|
+ NoSendOrderNum = 0,
|
|
|
+ ReSendOrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(true, 1, 0)),
|
|
|
+ }).ToListAsync();
|
|
|
+
|
|
|
+ var res = (from t1 in items
|
|
|
+ join t2 in items2 on t1.UserId equals t2.UserId into t1_t2
|
|
|
+ from item in t1_t2.DefaultIfEmpty()
|
|
|
+ select new
|
|
|
+ {
|
|
|
+ UserId = t1.UserId,
|
|
|
+ UserName = t1.UserName,
|
|
|
+ SendOrderNum = t1.SendOrderNum,
|
|
|
+ NoSendOrderNum = t1.NoSendOrderNum,
|
|
|
+ ReSendOrderNum = t1_t2.Select(x => x.NoSendOrderNum).FirstOrDefault(),
|
|
|
+ ChainRate = t1_t2.Select(x => x.NoSendOrderNum).FirstOrDefault() > 0 ?
|
|
|
+ ((double.Parse(t1.SendOrderNum.ToString()) - double.Parse(t1_t2.Select(x => x.NoSendOrderNum).FirstOrDefault().ToString())) / double.Parse(t1.SendOrderNum.ToString()) * 100).ToString("F2") + "%" : "100.00%",
|
|
|
+ }).ToList();
|
|
|
+
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
}
|