|
@@ -40,6 +40,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
private readonly IRepository<OrderDelay> _orderDelayRepository;
|
|
|
private readonly IMapper _mapper;
|
|
|
private readonly IRepository<WorkflowCountersign> _workflowCountersignRepository;
|
|
|
+ private readonly IRepository<WorkflowStep> _workflowStepRepository;
|
|
|
private readonly IRepository<OrderSpecial> _orderSpecialRepository;
|
|
|
private readonly IRepository<OrderVisit> _orderVisitRepository;
|
|
|
private readonly IRepository<TrCallRecord> _trCallRecordRepository;
|
|
@@ -104,7 +105,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
{
|
|
|
dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
|
|
|
|
|
|
- var (total,items) = await _orderRepository.Queryable()
|
|
|
+ var (total, items) = await _orderRepository.Queryable()
|
|
|
.Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
|
|
|
.WhereIF(dto.QueryType == 1, x => x.Status >= EOrderStatus.Filed && x.ExpiredTime < x.FiledTime) //业务已办超期
|
|
|
//.WhereIF(dto.QueryType== 2,) //会签已办超期
|
|
@@ -134,11 +135,11 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
|
|
|
|
|
|
var queryOrder = _systemOrganizeRepository.Queryable()
|
|
|
- .LeftJoin<Order>((x,o)=> x.Id == o.ActualHandleOrgCode)
|
|
|
+ .LeftJoin<Order>((x, o) => x.Id == o.ActualHandleOrgCode)
|
|
|
.WhereIF(dto.StartTime.HasValue, (x, o) => o.CreationTime >= dto.StartTime)
|
|
|
.WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= dto.EndTime)
|
|
|
.WhereIF(IsCenter == false, (x, o) => o.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
|
|
|
- .GroupBy((x,o) => new { x.Id, x.Name })
|
|
|
+ .GroupBy((x, o) => new { x.Id, x.Name })
|
|
|
.Select((x, o) => new OrderBiOrgDataListVo
|
|
|
{
|
|
|
OrgName = x.Name,
|
|
@@ -807,9 +808,9 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
if (IsCenter && list != null)
|
|
|
{
|
|
|
data = await list.GroupBy(x => new
|
|
|
- {
|
|
|
- VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
|
|
|
- })
|
|
|
+ {
|
|
|
+ VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
|
|
|
+ })
|
|
|
.Select(x => new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
{
|
|
|
OrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
|
|
@@ -843,9 +844,9 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
else
|
|
|
{
|
|
|
data = await list.GroupBy(x => new
|
|
|
- {
|
|
|
- x.VisitOrgCode
|
|
|
- })
|
|
|
+ {
|
|
|
+ x.VisitOrgCode
|
|
|
+ })
|
|
|
.Select(x => new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
{
|
|
|
OrgCode = x.VisitOrgCode,
|
|
@@ -876,7 +877,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
})
|
|
|
.ToListAsync();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
|
|
|
var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
{
|
|
@@ -942,8 +943,8 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
var list = await _systemOrganizeRepository.Queryable().Where(x => x.Id.StartsWith(OrgCode))
|
|
|
.LeftJoin<OrderVisitDetail>((x, it) => x.Id == it.VisitOrgCode)
|
|
|
.Where((x, it) => it.OrderVisit.VisitTime >= StartDate && it.OrderVisit.VisitTime <= EndDate && it.VisitTarget == EVisitTarget.Org && it.OrderVisit.VisitState == EVisitState.Visited)
|
|
|
- .WhereIF(OrgCode == "001", (x,it) => it.VisitOrgCode == OrgCode)
|
|
|
- .WhereIF(OrgCode != "001", (x,it) => it.VisitOrgCode.StartsWith(OrgCode))
|
|
|
+ .WhereIF(OrgCode == "001", (x, it) => it.VisitOrgCode == OrgCode)
|
|
|
+ .WhereIF(OrgCode != "001", (x, it) => it.VisitOrgCode.StartsWith(OrgCode))
|
|
|
.WhereIF(!string.IsNullOrEmpty(LineNum), (x, it) => it.OrderVisit.Order.CallRecord.Gateway.Contains(LineNum))
|
|
|
.WhereIF(IsCenter == false, (x, it) => it.VisitOrgCode.StartsWith(_sessionContext.OrgId))
|
|
|
.GroupBy((x, it) => new
|
|
@@ -1542,7 +1543,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
|
|
|
|
|
|
|
|
|
- //会签
|
|
|
+ //会签(已办超期、待办超期)
|
|
|
var queryCountersign = _workflowCountersignRepository.Queryable()
|
|
|
.LeftJoin<WorkflowCountersignMember>((x, o) => x.Id == o.WorkflowCountersignId)
|
|
|
.Where(x => x.CreationTime >= StartDate && x.CreationTime <= EndDate)
|
|
@@ -1556,7 +1557,24 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
DelayWait = SqlFunc.AggregateSum(SqlFunc.IIF(!o.IsHandled, 1, 0)),
|
|
|
}).MergeTable();
|
|
|
|
|
|
-
|
|
|
+ _workflowStepRepository.Queryable()
|
|
|
+ .Where(d => d.ModuleCode == WorkflowModuleConsts.OrderHandle &&
|
|
|
+ d.CountersignPosition == ECountersignPosition.Multi &&
|
|
|
+ d.CountersignPosition == ECountersignPosition.Single)
|
|
|
+ .Where(x => x.CreationTime >= StartDate && x.CreationTime <= EndDate)
|
|
|
+ .GroupBy(d => new { d.StepHandlers.First().OrgId, d.StepHandlers.First().OrgName })
|
|
|
+ .Select(d => new DepartmentalProcessingStatisticsDataDto
|
|
|
+ {
|
|
|
+ OrgCode = d.StepHandlers.First().OrgId,
|
|
|
+ HQYBOverdue =
|
|
|
+ SqlFunc.AggregateSum(SqlFunc.IIF(
|
|
|
+ d.Status == EWorkflowStepStatus.Handled && d.HandleTime > d.StepExpiredTime, 1, 0)),
|
|
|
+ HQZBOverdue =
|
|
|
+ SqlFunc.AggregateSum(SqlFunc.IIF(
|
|
|
+ d.Status != EWorkflowStepStatus.Handled && DateTime.Now >= d.StepExpiredTime, 1, 0)),
|
|
|
+ DelayEnd = SqlFunc.AggregateSum(SqlFunc.IIF(d.Status == EWorkflowStepStatus.Handled, 1, 0)),
|
|
|
+ DelayWait = SqlFunc.AggregateSum(SqlFunc.IIF(d.Status != EWorkflowStepStatus.Handled, 1, 0)),
|
|
|
+ });
|
|
|
|
|
|
|
|
|
var queryPush = query.LeftJoin(queryPublish, (it, o) => it.Id == o.Id).Where(it => it.OrgCode != null);
|
|
@@ -1613,7 +1631,7 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
.Where((p, o) => p.OverTime >= dto.StartDate && p.OverTime <= dto.EndDate)
|
|
|
.Where((p, o) => p.CallOrderType == ECallOrderType.Order)
|
|
|
.Where((p, o) => p.ExternalId != null && o.Id != null)
|
|
|
- .Where((p,o)=>p.CallDirection== ECallDirection.In)
|
|
|
+ .Where((p, o) => p.CallDirection == ECallDirection.In)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.PhoneNum), (p, o) => p.CPN == dto.PhoneNum)
|
|
|
.Select((p, o) => new
|
|
|
{
|
|
@@ -1852,26 +1870,26 @@ 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)
|
|
|
+ /// <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()
|
|
|
+ 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.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})
|
|
|
+ .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
|
|
|
{
|
|
@@ -1881,40 +1899,40 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
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 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;
|
|
|
+ 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;
|
|
|
}
|
|
|
|
|
|
|