|
@@ -2,22 +2,18 @@
|
|
|
using Hotline.Repository.SqlSugar.Extensions;
|
|
|
using Hotline.Settings;
|
|
|
using Hotline.Settings.Hotspots;
|
|
|
-using Hotline.Share.Dtos.Knowledge;
|
|
|
using Hotline.Share.Dtos;
|
|
|
using Hotline.Share.Dtos.Order;
|
|
|
-using Hotline.Share.Enums.KnowledgeBase;
|
|
|
using Hotline.Share.Enums.Order;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
using SqlSugar;
|
|
|
using Hotline.Share.Requests;
|
|
|
-using Hotline.Users;
|
|
|
using XF.Domain.Repository;
|
|
|
-using Hotline.Caching.Services;
|
|
|
-using Hotline.Share.Dtos.CallCenter;
|
|
|
-using Microsoft.AspNetCore.Authorization;
|
|
|
using Hotline.Caching.Interfaces;
|
|
|
-using System.Data;
|
|
|
+using Hotline.FlowEngine.Workflows;
|
|
|
+using Hotline.Share.Dtos.CallCenter;
|
|
|
using MapsterMapper;
|
|
|
+using XF.Domain.Exceptions;
|
|
|
|
|
|
namespace Hotline.Api.Controllers.Bi
|
|
|
{
|
|
@@ -29,13 +25,18 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
private readonly IRepository<OrderVisitDetail> _orderVisitDetailRepository;
|
|
|
private readonly IRepository<OrderDelay> _orderDelayRepository;
|
|
|
private readonly IMapper _mapper;
|
|
|
+ private readonly IRepository<WorkflowCountersign> _workflowCountersignRepository;
|
|
|
+ private readonly IRepository<OrderSpecial> _orderSpecialRepository;
|
|
|
+
|
|
|
public BiOrderController(
|
|
|
IOrderRepository orderRepository,
|
|
|
IRepository<Hotspot> hotspotTypeRepository,
|
|
|
ISystemDicDataCacheManager sysDicDataCacheManager,
|
|
|
IRepository<OrderVisitDetail> orderVisitDetailRepository,
|
|
|
IRepository<OrderDelay> orderDelayRepository,
|
|
|
- IMapper mapper
|
|
|
+ IRepository<WorkflowCountersign> workflowCountersignRepository,
|
|
|
+ IRepository<OrderSpecial> orderSpecialRepository,
|
|
|
+ IMapper mapper
|
|
|
)
|
|
|
{
|
|
|
_orderRepository = orderRepository;
|
|
@@ -43,7 +44,9 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
_sysDicDataCacheManager = sysDicDataCacheManager;
|
|
|
_orderVisitDetailRepository = orderVisitDetailRepository;
|
|
|
_orderDelayRepository = orderDelayRepository;
|
|
|
- _mapper = mapper;
|
|
|
+ _workflowCountersignRepository = workflowCountersignRepository;
|
|
|
+ _orderSpecialRepository = orderSpecialRepository;
|
|
|
+ _mapper = mapper;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -54,23 +57,43 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpGet("org_data_list")]
|
|
|
public async Task<PagedDto<OrderBiOrgDataListVo>> OrgDataList([FromQuery] ReportPagedRequest dto)
|
|
|
{
|
|
|
- //TODO 会签统计待处理 目前缺少关联关系
|
|
|
- var query = _orderRepository.Queryable(false, false, false)
|
|
|
+ if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
+ var queryOrder = _orderRepository.Queryable(false, false, false)
|
|
|
.LeftJoin<SystemOrganize>((x, o) => x.ActualHandleOrgCode == o.Id)
|
|
|
.WhereIF(dto.StartTime.HasValue, (x, o) => x.CreationTime >= dto.StartTime)
|
|
|
.WhereIF(dto.EndTime.HasValue, (x, o) => x.CreationTime <= dto.EndTime)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Keyword), (x, o) => o.Name.Contains(dto.Keyword!))
|
|
|
.GroupBy((x, o) => new { x.ActualHandleOrgCode, o.Name })
|
|
|
.Select((x, o) => new OrderBiOrgDataListVo
|
|
|
{
|
|
|
OrgName = o.Name,
|
|
|
OrgId = x.ActualHandleOrgCode,
|
|
|
HandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF((int)x.Status >= 300 && x.ExpiredTime > x.FiledTime, 1, 0)),
|
|
|
- //CounterHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsDeleted, 1, 0)),
|
|
|
NoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF((int)x.Status < 300 && x.ExpiredTime > x.FiledTime, 1, 0)),
|
|
|
- //CounterNoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status == EKnowledgeStatus.OnShelf, 1, 0))
|
|
|
}).MergeTable();
|
|
|
- switch (dto.SortField)
|
|
|
+ var queryCountersign = _workflowCountersignRepository.Queryable()
|
|
|
+ .LeftJoin<WorkflowCountersignMember>((x,o)=>x.Id ==o.WorkflowCountersignId)
|
|
|
+ .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
|
|
|
+ .WhereIF(dto.EndTime.HasValue, x=> x.CreationTime <= dto.EndTime)
|
|
|
+ .GroupBy((x,o)=> o.Key)
|
|
|
+ .Select((x,o) => new OrderBiOrgDataListVo
|
|
|
+ {
|
|
|
+ OrgId = o.Key,
|
|
|
+ CounterHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsHandled,1,0)),
|
|
|
+ CounterNoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(!o.IsHandled, 1, 0)),
|
|
|
+ }).MergeTable();
|
|
|
+
|
|
|
+ var query = queryOrder.LeftJoin(queryCountersign,(or,co)=>or.OrgId == co.OrgId)
|
|
|
+ .Select((or,co) => new OrderBiOrgDataListVo {
|
|
|
+ OrgName = or.OrgName,
|
|
|
+ OrgId = or.OrgId,
|
|
|
+ HandlerExtendedNum =or.HandlerExtendedNum,
|
|
|
+ NoHandlerExtendedNum =or.NoHandlerExtendedNum,
|
|
|
+ CounterHandlerExtendedNum =co.CounterHandlerExtendedNum,
|
|
|
+ CounterNoHandlerExtendedNum =co.CounterNoHandlerExtendedNum
|
|
|
+ }).MergeTable();
|
|
|
+
|
|
|
+ query = query.WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.OrgName.Contains(dto.Keyword!));
|
|
|
+ switch (dto.SortField)
|
|
|
{
|
|
|
case "handlerExtendedNum":
|
|
|
query = dto.SortRule == 0 ? query.OrderBy(x => x.HandlerExtendedNum) : query.OrderByDescending(x => x.HandlerExtendedNum);
|
|
@@ -98,7 +121,8 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpGet("centre_data_list")]
|
|
|
public async Task<PagedDto<OrderBiCentreDataListVo>> CentreDataList([FromQuery] ReportPagedRequest dto)
|
|
|
{
|
|
|
- var query = _orderRepository.Queryable(false, false, false)
|
|
|
+ if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
+ var query = _orderRepository.Queryable(false, false, false)
|
|
|
.WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
|
|
|
.WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.AcceptorName.Contains(dto.Keyword!))
|
|
@@ -143,7 +167,8 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpGet("hotspot_data_list")]
|
|
|
public async Task<PagedDto<HotspotDataLsitVo>> HotspotDataLsit([FromQuery] HotspotReportPagedRequest dto)
|
|
|
{
|
|
|
- var query = _hotspotTypeRepository.Queryable(false, true)
|
|
|
+ if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
+ var query = _hotspotTypeRepository.Queryable(false, true)
|
|
|
.LeftJoin<Order>((x, o) => o.HotspotSpliceName != null && (x.HotSpotFullName == o.HotspotSpliceName || o.HotspotSpliceName.Contains(x.HotSpotFullName)) && o.IsDeleted == false)
|
|
|
.WhereIF(dto.StartTime.HasValue, (x, o) => o.CreationTime >= dto.StartTime)
|
|
|
.WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= dto.EndTime)
|
|
@@ -170,8 +195,8 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpGet("visit-nosatisfied")]
|
|
|
public async Task<object> QueryVisitNoSatisfied([FromQuery] QueryVisitNoSatiisfiedRequest dto)
|
|
|
{
|
|
|
- var dissatisfiedReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.DissatisfiedReason);
|
|
|
-
|
|
|
+ if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
+ var dissatisfiedReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.DissatisfiedReason);
|
|
|
List<dynamic>? list = new List<dynamic>();
|
|
|
//DataTable dt = new DataTable();
|
|
|
foreach (var item in dissatisfiedReason)
|
|
@@ -210,7 +235,8 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpGet("visit-nosatisfied-detail")]
|
|
|
public async Task<PagedDto<OrderVisitDetailDto>> BiQueryVisitNoSatisfiedDetail([FromQuery]BiQueryVisitNoSatisfiedDetailDto dto)
|
|
|
{
|
|
|
- var (total,items) = await _orderVisitDetailRepository.Queryable()
|
|
|
+ if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
+ var (total,items) = await _orderVisitDetailRepository.Queryable()
|
|
|
.Includes(x => x.OrderVisit, d => d.Order)
|
|
|
.Includes(x => x.OrderVisit, d => d.Employee)
|
|
|
.Where(x => x.VisitOrgCode == dto.OrgCode)
|
|
@@ -234,7 +260,8 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpGet("order-delay-data-list")]
|
|
|
public async Task<IReadOnlyList<BiOrderDelayDataDto>> QueryOrderDelayDataList([FromQuery] QueryOrderDelayDataListRequest dto)
|
|
|
{
|
|
|
- var list = await _orderDelayRepository.Queryable()
|
|
|
+ if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
+ var list = await _orderDelayRepository.Queryable()
|
|
|
.LeftJoin<SystemOrganize>((x, o) => x.ApplyOrgCode == o.Id)
|
|
|
.WhereIF(dto.StartTime.HasValue, (x, o) => x.CreationTime >= dto.StartTime)
|
|
|
.WhereIF(dto.EndTime.HasValue, (x, o) => x.CreationTime <= dto.EndTime)
|
|
@@ -253,5 +280,63 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
|
|
|
return list;
|
|
|
}
|
|
|
- }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 特提统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("special_data_list")]
|
|
|
+ public async Task<PagedDto<OrderBiSpecialListVo>> SpecialDataList([FromQuery] ReportPagedRequest dto)
|
|
|
+ {
|
|
|
+ if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
+ var query = _orderSpecialRepository.Queryable()
|
|
|
+ .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
|
|
|
+ .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
|
|
|
+ .GroupBy(x => new { x.Cause })
|
|
|
+ .Select(x => new OrderBiSpecialListVo
|
|
|
+ {
|
|
|
+ Cause = x.Cause,
|
|
|
+ OrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(true, 1, 0)),
|
|
|
+ MaxSpecialTime = SqlFunc.AggregateMax(x.CreationTime),
|
|
|
+ }).MergeTable();
|
|
|
+ switch (dto.SortField)
|
|
|
+ {
|
|
|
+ case "cause":
|
|
|
+ query = dto.SortRule == 0 ? query.OrderBy(x => x.Cause) : query.OrderByDescending(x => x.Cause);
|
|
|
+ break;
|
|
|
+ case "orderNum":
|
|
|
+ query = dto.SortRule == 0 ? query.OrderBy(x => x.OrderNum) : query.OrderByDescending(x => x.OrderNum);
|
|
|
+ break;
|
|
|
+ case "maxSpecialTime":
|
|
|
+ query = dto.SortRule == 0 ? query.OrderBy(x => x.MaxSpecialTime) : query.OrderByDescending(x => x.MaxSpecialTime);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
+ return new PagedDto<OrderBiSpecialListVo>(total, items);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取工单特提信息列表
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("special_data_list/list")]
|
|
|
+ public async Task<PagedDto<OrderSpecialDto>> List([FromQuery] OrderSpecialListDto dto)
|
|
|
+ {
|
|
|
+ if(!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
+ var (total, items) = await _orderSpecialRepository.Queryable()
|
|
|
+ .Includes(x => x.Order)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
|
|
|
+ x => x.Order.No.Contains(dto.Keyword!) || x.Order.Title.Contains(dto.Keyword!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Cause),
|
|
|
+ x => x.Cause != null && x.Cause.Equals(dto.Cause))
|
|
|
+ .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
|
|
|
+ .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
|
|
|
+ .WhereIF(dto.State.HasValue, x => x.State == dto.State)
|
|
|
+ .OrderByDescending(x => x.CreationTime)
|
|
|
+ .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
+ return new PagedDto<OrderSpecialDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDto>>(items));
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|