|
@@ -120,115 +120,89 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpGet("org_data_list_detail")]
|
|
|
public async Task<PagedDto<OrderDto>> OrgDataListDetail([FromQuery] OrgDataListDetailRequest dto)
|
|
|
{
|
|
|
- dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
|
|
|
-
|
|
|
- var quer = _orderRepository.Queryable()
|
|
|
- .InnerJoin<SystemOrganize>((x, so) => x.ActualHandleOrgCode == so.Id)
|
|
|
- .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 == 3, x => x.Status < EOrderStatus.Filed && x.ExpiredTime < SqlFunc.GetDate()) //业务待办超期
|
|
|
- .WhereIF(dto.QueryType == 5, x =>
|
|
|
- (x.Status >= EOrderStatus.Filed && x.ExpiredTime < x.FiledTime) || (x.Status < EOrderStatus.Filed && x.ExpiredTime < SqlFunc.GetDate()))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.QueryType is 1 or 3 && dto.OrgCode == "001", x => x.ActualHandleOrgCode == dto.OrgCode)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.QueryType is 1 or 3 && dto.OrgCode != "001", x => x.ActualHandleOrgCode.StartsWith(dto.OrgCode))
|
|
|
- .MergeTable();
|
|
|
-
|
|
|
- if (dto.QueryType is 2 or 4 or 5)
|
|
|
- {
|
|
|
- var queryCountersign = _workflowCountersignRepository.Queryable()
|
|
|
- .LeftJoin<WorkflowCountersignMember>((x, o) => x.Id == o.WorkflowCountersignId)
|
|
|
- .Where((x, o) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime && x.IsExpired.HasValue && x.IsExpired.Value == true)
|
|
|
- .WhereIF(dto.QueryType == 2, (x, o) => o.IsHandled == true) //会签已办超期
|
|
|
- .WhereIF(dto.QueryType == 4, (x, o) => o.IsHandled == false) //会签待办超期
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.QueryType is 2 or 4 or 5, (x, o) => o.Key.StartsWith(dto.OrgCode))
|
|
|
- //.GroupBy((x,o)=>x.WorkflowId)
|
|
|
- .Select((x, o) => new { Id = x.WorkflowId })
|
|
|
- .MergeTable();
|
|
|
-
|
|
|
- quer = quer.InnerJoin(queryCountersign, (x, c) => x.WorkflowId == c.Id);
|
|
|
-
|
|
|
- }
|
|
|
+ var quer = _orderApplication.QueryOrgDataListDetail(dto);
|
|
|
var (total, items) = await quer.ToPagedListAsync(dto.PageIndex, dto.PageSize);
|
|
|
|
|
|
return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/// <summary>
|
|
|
- /// 部门超期统计
|
|
|
+ /// 部门超期统计明细导出
|
|
|
/// </summary>
|
|
|
- /// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
- [HttpGet("org_data_list")]
|
|
|
- public async Task<PagedDto<OrderBiOrgDataListVo>> OrgDataList([FromQuery] ReportPagedRequest dto)
|
|
|
+ [HttpPost("org_data_list_detail/_export")]
|
|
|
+ public async Task<FileStreamResult> OrgDataListDetailExport([FromBody] ExportExcelDto<OrgDataListDetailRequest> dto)
|
|
|
{
|
|
|
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
-
|
|
|
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
+ var query = _orderApplication.QueryOrgDataListDetail(dto.QueryDto);
|
|
|
+ List<Order> data;
|
|
|
+ if (dto.IsExportAll)
|
|
|
+ {
|
|
|
+ data = await query.ToListAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
|
|
|
+ data = items;
|
|
|
+ }
|
|
|
|
|
|
- var IsCenter = _sessionContext.OrgIsCenter;
|
|
|
+ var dataDtos = _mapper.Map<ICollection<OrderDto>>(data);
|
|
|
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
|
|
|
- var queryOrder = _systemOrganizeRepository.Queryable()
|
|
|
- .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 })
|
|
|
- .Select((x, o) => new OrderBiOrgDataListVo
|
|
|
- {
|
|
|
- OrgName = x.Name,
|
|
|
- OrgId = x.Id,
|
|
|
- HandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.Status >= EOrderStatus.Filed && o.ExpiredTime < o.FiledTime, 1, 0)),
|
|
|
- NoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.Status < EOrderStatus.Filed && o.ExpiredTime < SqlFunc.GetDate(), 1, 0)),
|
|
|
- }).MergeTable();
|
|
|
+ var dtos = dataDtos
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
|
|
|
- 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 && x.IsExpired.HasValue && x.IsExpired.Value == true, 1, 0)),
|
|
|
- CounterNoHandlerExtendedNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsHandled == false && x.IsExpired.HasValue && x.IsExpired.Value == true, 1, 0)),
|
|
|
- }).MergeTable();
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
|
|
|
- var query = queryOrder.LeftJoin(queryCountersign, (or, co) => or.OrgId == co.OrgId)
|
|
|
- .LeftJoin<SystemOrganize>((or, co, so) => or.OrgId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) == so.Id)
|
|
|
- .GroupBy((or, co, so) => new { so.Id, so.Name })
|
|
|
- .Select((or, co, so) => new OrderBiOrgDataListVo
|
|
|
- {
|
|
|
- OrgName = so.Name,
|
|
|
- OrgId = so.Id,
|
|
|
- HandlerExtendedNum = SqlFunc.AggregateSum(or.HandlerExtendedNum),
|
|
|
- NoHandlerExtendedNum = SqlFunc.AggregateSum(or.NoHandlerExtendedNum),
|
|
|
- CounterHandlerExtendedNum = SqlFunc.AggregateSum(co.CounterHandlerExtendedNum),
|
|
|
- CounterNoHandlerExtendedNum = SqlFunc.AggregateSum(co.CounterNoHandlerExtendedNum)
|
|
|
- }).MergeTable();
|
|
|
+ return ExcelStreamResult(stream, "部门超期统计明细数据");
|
|
|
+ }
|
|
|
|
|
|
- query = query.WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.OrgName.Contains(dto.Keyword!)).Where(x => x.HandlerExtendedNum > 0 || x.NoHandlerExtendedNum > 0 || x.CounterHandlerExtendedNum > 0 || x.CounterNoHandlerExtendedNum > 0);
|
|
|
- switch (dto.SortField)
|
|
|
- {
|
|
|
- case "handlerExtendedNum":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.HandlerExtendedNum) : query.OrderByDescending(x => x.HandlerExtendedNum);
|
|
|
- break;
|
|
|
- case "counterHandlerExtendedNum":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.CounterHandlerExtendedNum) : query.OrderByDescending(x => x.CounterHandlerExtendedNum);
|
|
|
- break;
|
|
|
- case "noHandlerExtendedNum":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.NoHandlerExtendedNum) : query.OrderByDescending(x => x.NoHandlerExtendedNum);
|
|
|
- break;
|
|
|
- case "counterNoHandlerExtendedNum":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.CounterNoHandlerExtendedNum) : query.OrderByDescending(x => x.CounterNoHandlerExtendedNum);
|
|
|
- break;
|
|
|
- }
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 部门超期统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("org_data_list")]
|
|
|
+ public async Task<PagedDto<OrderBiOrgDataListVo>> OrgDataList([FromQuery] ReportPagedRequest dto)
|
|
|
+ {
|
|
|
+ var query = _orderApplication.QueryOrgDataList(dto);
|
|
|
var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
+ items.Add(new OrderBiOrgDataListVo
|
|
|
+ {
|
|
|
+ OrgName = "合计",
|
|
|
+ HandlerExtendedNum = items.Select(s => s.HandlerExtendedNum).Sum(),
|
|
|
+ CounterHandlerExtendedNum = items.Select(s => s.CounterHandlerExtendedNum).Sum(),
|
|
|
+ NoHandlerExtendedNum = items.Select(s => s.NoHandlerExtendedNum).Sum(),
|
|
|
+ CounterNoHandlerExtendedNum = items.Select(s => s.CounterNoHandlerExtendedNum).Sum(),
|
|
|
+ });
|
|
|
return new PagedDto<OrderBiOrgDataListVo>(total, items);
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 部门超期统计导出
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("org_data_list/_export")]
|
|
|
+ public async Task<FileStreamResult> OrgDataListExport([FromBody] ExportExcelDto<ReportPagedRequest> dto)
|
|
|
+ {
|
|
|
+ var query = _orderApplication.QueryOrgDataList(dto.QueryDto);
|
|
|
+ List<OrderBiOrgDataListVo> data;
|
|
|
+ data = await query.ToListAsync(HttpContext.RequestAborted);
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+ var dtos = data
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(OrderBiOrgDataListVo), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
+
|
|
|
+ return ExcelStreamResult(stream, "部门超期统计数据");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 话务员办件统计
|
|
|
/// </summary>
|
|
@@ -264,22 +238,22 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
switch (dto.SortField)
|
|
|
{
|
|
|
case "centreArchive":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.CentreArchive) : query.OrderByDescending(x => x.CentreArchive);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.CentreArchive) : query.OrderByDescending(x => x.CentreArchive);
|
|
|
break;
|
|
|
case "centreCareOf":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.CentreCareOf) : query.OrderByDescending(x => x.CentreCareOf);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.CentreCareOf) : query.OrderByDescending(x => x.CentreCareOf);
|
|
|
break;
|
|
|
case "noCentreCareOf":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.NoCentreCareOf) : query.OrderByDescending(x => x.NoCentreCareOf);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.NoCentreCareOf) : query.OrderByDescending(x => x.NoCentreCareOf);
|
|
|
break;
|
|
|
case "invalid":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.Invalid) : query.OrderByDescending(x => x.Invalid);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.Invalid) : query.OrderByDescending(x => x.Invalid);
|
|
|
break;
|
|
|
case "repeat":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.Repeat) : query.OrderByDescending(x => x.Repeat);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.Repeat) : query.OrderByDescending(x => x.Repeat);
|
|
|
break;
|
|
|
case "subtotal":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.Subtotal) : query.OrderByDescending(x => x.Subtotal);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.Subtotal) : query.OrderByDescending(x => x.Subtotal);
|
|
|
break;
|
|
|
}
|
|
|
|
|
@@ -508,31 +482,50 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpGet("order-delay-data-list")]
|
|
|
public async Task<IReadOnlyList<BiOrderDelayDataDto>> QueryOrderDelayDataList([FromQuery] QueryOrderDelayDataListRequest dto)
|
|
|
{
|
|
|
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
+ return await _orderReportApplication.QueryOrderDelayDataList(dto).ToListAsync();
|
|
|
|
|
|
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
+ }
|
|
|
|
|
|
- var IsCenter = _sessionContext.OrgIsCenter;
|
|
|
+ /// <summary>
|
|
|
+ /// 部门延期统计---导出
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("order-delay-data-list-export")]
|
|
|
+ public async Task<FileStreamResult> ExportQueryOrderDelayDataList([FromBody] ExportExcelDto<QueryOrderDelayDataListRequest> dto)
|
|
|
+ {
|
|
|
+ var query = _orderReportApplication.QueryOrderDelayDataList(dto.QueryDto);
|
|
|
+ List<BiOrderDelayDataDto> list;
|
|
|
+ if (dto.IsExportAll)
|
|
|
+ {
|
|
|
+ list = await query.ToListAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
|
|
|
+ list = items;
|
|
|
+ }
|
|
|
|
|
|
- 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)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.ApplyOrgName.Contains(dto.OrgName))
|
|
|
- .WhereIF(IsCenter == false, x => x.ApplyOrgCode.StartsWith(_sessionContext.RequiredOrgId))
|
|
|
- .GroupBy(x => new { x.ApplyOrgCode, x.ApplyOrgName })
|
|
|
- .Select(x => new BiOrderDelayDataDto
|
|
|
- {
|
|
|
- OrgName = x.ApplyOrgName,
|
|
|
- OrgCode = x.ApplyOrgCode,
|
|
|
- PassTotal = SqlFunc.AggregateSum(SqlFunc.IIF(x.DelayState == EDelayState.Pass, 1, 0)),
|
|
|
- NoPassTotal = SqlFunc.AggregateSum(SqlFunc.IIF(x.DelayState == EDelayState.NoPass, 1, 0)),
|
|
|
- ExaminingTotal = SqlFunc.AggregateSum(SqlFunc.IIF(x.DelayState == EDelayState.Examining, 1, 0)),
|
|
|
- AllTotal = SqlFunc.AggregateSum(SqlFunc.IIF(x.DelayState == EDelayState.Pass, 1, 0)) + SqlFunc.AggregateSum(SqlFunc.IIF(x.DelayState == EDelayState.NoPass, 1, 0)) + SqlFunc.AggregateSum(SqlFunc.IIF(x.DelayState == EDelayState.Examining, 1, 0))
|
|
|
+ list.Add(new BiOrderDelayDataDto()
|
|
|
+ {
|
|
|
+ OrgName = "合计",
|
|
|
+ OrgCode = "",
|
|
|
+ AllTotal = list.Sum(p => p.AllTotal),
|
|
|
+ PassTotal = list.Sum(p => p.PassTotal),
|
|
|
+ NoPassTotal = list.Sum(p => p.NoPassTotal),
|
|
|
+ ExaminingTotal = list.Sum(p => p.ExaminingTotal)
|
|
|
+ });
|
|
|
|
|
|
- }).ToListAsync();
|
|
|
+ var orderDtos = _mapper.Map<ICollection<BiOrderDelayDataDto>>(list);
|
|
|
|
|
|
- return list;
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+ var dtos = orderDtos
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(BiOrderDelayDataDto), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
+ return ExcelStreamResult(stream, "部门延期统计数据");
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -543,22 +536,43 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
[HttpGet("order-delay-data-detail")]
|
|
|
public async Task<PagedDto<OrderDelayDto>> QueryOrderDelayDataDetail([FromQuery] QueryOrderDelayDataDetailRequest dto)
|
|
|
{
|
|
|
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
+ var (total, items) = await _orderReportApplication.QueryOrderDelayDataDetail(dto).ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
|
|
|
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
+ return new PagedDto<OrderDelayDto>(total, _mapper.Map<IReadOnlyList<OrderDelayDto>>(items));
|
|
|
+ }
|
|
|
|
|
|
- var (total, items) = await _orderDelayRepository.Queryable()
|
|
|
- .Includes(x => x.Order)
|
|
|
- .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
|
|
|
- .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgCode), x => x.ApplyOrgCode == dto.OrgCode)
|
|
|
- .WhereIF(dto.Type is 1, x => x.DelayState == EDelayState.Pass)
|
|
|
- .WhereIF(dto.Type is 2, x => x.DelayState == EDelayState.NoPass)
|
|
|
- .WhereIF(dto.Type is 3, x => x.DelayState == EDelayState.Examining)
|
|
|
- .WhereIF(dto.Type is 4, x => x.DelayState < EDelayState.Withdraw)
|
|
|
- .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
+ /// <summary>
|
|
|
+ /// 部门延期统计明细--导出
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("order-delay-data-detail-export")]
|
|
|
+ public async Task<FileStreamResult> ExportQueryOrderDelayDataDetail([FromBody] ExportExcelDto<QueryOrderDelayDataDetailRequest> dto)
|
|
|
+ {
|
|
|
+ var query = _orderReportApplication.QueryOrderDelayDataDetail(dto.QueryDto);
|
|
|
+ List<OrderDelay> list;
|
|
|
+ if (dto.IsExportAll)
|
|
|
+ {
|
|
|
+ list = await query.ToListAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
|
|
|
+ list = items;
|
|
|
+ }
|
|
|
|
|
|
- return new PagedDto<OrderDelayDto>(total, _mapper.Map<IReadOnlyList<OrderDelayDto>>(items));
|
|
|
+
|
|
|
+ var orderDtos = _mapper.Map<ICollection<OrderDelayDto>>(list);
|
|
|
+
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+
|
|
|
+ var dtos = orderDtos
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(OrderDelayDto), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
+ return ExcelStreamResult(stream, "部门延期统计明细数据");
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -590,13 +604,13 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
switch (dto.SortField)
|
|
|
{
|
|
|
case "cause":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.Cause) : query.OrderByDescending(x => x.Cause);
|
|
|
+ query = dto.SortRule is 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);
|
|
|
+ query = dto.SortRule is 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);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.MaxSpecialTime) : query.OrderByDescending(x => x.MaxSpecialTime);
|
|
|
break;
|
|
|
}
|
|
|
var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
@@ -671,34 +685,34 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
switch (dto.SortField)
|
|
|
{
|
|
|
case "validAccept":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.ValidAccept) : query.OrderByDescending(x => x.ValidAccept);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.ValidAccept) : query.OrderByDescending(x => x.ValidAccept);
|
|
|
break;
|
|
|
case "consult":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.Consult) : query.OrderByDescending(x => x.Consult);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.Consult) : query.OrderByDescending(x => x.Consult);
|
|
|
break;
|
|
|
case "report":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.Report) : query.OrderByDescending(x => x.Report);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.Report) : query.OrderByDescending(x => x.Report);
|
|
|
break;
|
|
|
case "complaint":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.Complaint) : query.OrderByDescending(x => x.Complaint);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.Complaint) : query.OrderByDescending(x => x.Complaint);
|
|
|
break;
|
|
|
case "seekHelp":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.SeekHelp) : query.OrderByDescending(x => x.SeekHelp);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.SeekHelp) : query.OrderByDescending(x => x.SeekHelp);
|
|
|
break;
|
|
|
case "suggest":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.Suggest) : query.OrderByDescending(x => x.Suggest);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.Suggest) : query.OrderByDescending(x => x.Suggest);
|
|
|
break;
|
|
|
case "opinion":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.Opinion) : query.OrderByDescending(x => x.Opinion);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.Opinion) : query.OrderByDescending(x => x.Opinion);
|
|
|
break;
|
|
|
case "rests":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.Rests) : query.OrderByDescending(x => x.Rests);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.Rests) : query.OrderByDescending(x => x.Rests);
|
|
|
break;
|
|
|
case "benefitThePeople":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.BenefitThePeople) : query.OrderByDescending(x => x.BenefitThePeople);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.BenefitThePeople) : query.OrderByDescending(x => x.BenefitThePeople);
|
|
|
break;
|
|
|
case "praise":
|
|
|
- query = dto.SortRule == 0 ? query.OrderBy(x => x.Praise) : query.OrderByDescending(x => x.Praise);
|
|
|
+ query = dto.SortRule is 0 ? query.OrderBy(x => x.Praise) : query.OrderByDescending(x => x.Praise);
|
|
|
break;
|
|
|
default:
|
|
|
query = query.OrderByDescending(x => x.ValidAccept);
|
|
@@ -847,95 +861,11 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
/// <param name="LineNum"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("visit-org-satisfaction-statistics")]
|
|
|
- public async Task<VisitAndOrgSatisfactionStatisticsResultDto> VisitAndOrgSatisfactionStatistics(DateTime StartDate, DateTime EndDate, string OrgName, int TypeId, string? LineNum)
|
|
|
+ public async Task<VisitAndOrgSatisfactionStatisticsResultDto> VisitAndOrgSatisfactionStatistics([FromQuery] PagedKeywordSonRequest dto)
|
|
|
{
|
|
|
- EndDate = EndDate.AddDays(1).AddSeconds(-1);
|
|
|
-
|
|
|
- bool IsCenter = _sessionContext.OrgIsCenter;
|
|
|
-
|
|
|
- var list = _orderVisitDetailRepository.Queryable()
|
|
|
- .Where(x => x.OrderVisit.VisitTime >= StartDate && x.OrderVisit.VisitTime <= EndDate && x.VisitTarget == EVisitTarget.Org && x.OrderVisit.VisitState == EVisitState.Visited && !string.IsNullOrEmpty(x.VisitOrgCode))
|
|
|
- .WhereIF(string.IsNullOrEmpty(OrgName) == false, x => x.VisitOrgName.Contains(OrgName))
|
|
|
- .WhereIF(string.IsNullOrEmpty(LineNum) == false, x => x.OrderVisit.Order.CallRecord.Gateway.Contains(LineNum))
|
|
|
- .WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContext.OrgId));
|
|
|
-
|
|
|
- var data = new List<VisitAndOrgSatisfactionStatisticsDto>();
|
|
|
-
|
|
|
- if (IsCenter && list != null)
|
|
|
- {
|
|
|
- data = await list.GroupBy(x => new
|
|
|
- {
|
|
|
- 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")),
|
|
|
- TotalSumCount = SqlFunc.AggregateCount(x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))),
|
|
|
- VerySatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "5", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "5", 1, 0))),//非常满意数
|
|
|
- SatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "4", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "4", 1, 0))), //满意数
|
|
|
- RegardedAsSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "-1", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "-1", 1, 0))),//视为满意
|
|
|
- DefaultSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "0", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "0", 1, 0))),//默认满意
|
|
|
- NoSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2", 1, 0))),//不满意
|
|
|
- NoEvaluateCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "7", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "7", 1, 0))),//未做评价
|
|
|
- NoPutThroughCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "6", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "6", 1, 0))),//未接通
|
|
|
- })
|
|
|
- .MergeTable()
|
|
|
- .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
|
|
|
- .Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
- {
|
|
|
- OrgName = o.Name,
|
|
|
- OrgCode = it.OrgCode,
|
|
|
- OrgType = o.OrgType,
|
|
|
- TotalSumCount = it.TotalSumCount,
|
|
|
- VerySatisfiedCount = it.VerySatisfiedCount,//非常满意数
|
|
|
- SatisfiedCount = it.SatisfiedCount, //满意数
|
|
|
- RegardedAsSatisfiedCount = it.RegardedAsSatisfiedCount,//视为满意
|
|
|
- DefaultSatisfiedCount = it.DefaultSatisfiedCount,//默认满意
|
|
|
- NoSatisfiedCount = it.NoSatisfiedCount,//不满意
|
|
|
- NoEvaluateCount = it.NoEvaluateCount,//未做评价
|
|
|
- NoPutThroughCount = it.NoPutThroughCount,//未接通
|
|
|
- })
|
|
|
- .ToListAsync();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- data = await list.GroupBy(x => new
|
|
|
- {
|
|
|
- x.VisitOrgCode
|
|
|
- })
|
|
|
- .Select(x => new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
- {
|
|
|
- OrgCode = x.VisitOrgCode,
|
|
|
- TotalSumCount = SqlFunc.AggregateCount(x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))),
|
|
|
- VerySatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "5", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "5", 1, 0))),//非常满意数
|
|
|
- SatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "4", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "4", 1, 0))), //满意数
|
|
|
- RegardedAsSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "-1", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "-1", 1, 0))),//视为满意
|
|
|
- DefaultSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "0", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "0", 1, 0))),//默认满意
|
|
|
- NoSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2", 1, 0))),//不满意
|
|
|
- NoEvaluateCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "7", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "7", 1, 0))),//未做评价
|
|
|
- NoPutThroughCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "6", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "6", 1, 0))),//未接通
|
|
|
- })
|
|
|
- .MergeTable()
|
|
|
- .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
|
|
|
- .Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
- {
|
|
|
- OrgName = o.Name,
|
|
|
- OrgCode = it.OrgCode,
|
|
|
- OrgType = o.OrgType,
|
|
|
- TotalSumCount = it.TotalSumCount,
|
|
|
- VerySatisfiedCount = it.VerySatisfiedCount,//非常满意数
|
|
|
- SatisfiedCount = it.SatisfiedCount, //满意数
|
|
|
- RegardedAsSatisfiedCount = it.RegardedAsSatisfiedCount,//视为满意
|
|
|
- DefaultSatisfiedCount = it.DefaultSatisfiedCount,//默认满意
|
|
|
- NoSatisfiedCount = it.NoSatisfiedCount,//不满意
|
|
|
- NoEvaluateCount = it.NoEvaluateCount,//未做评价
|
|
|
- NoPutThroughCount = it.NoPutThroughCount,//未接通
|
|
|
- })
|
|
|
- .ToListAsync();
|
|
|
- }
|
|
|
-
|
|
|
+ var data = await _orderApplication.VisitAndOrgSatisfactionStatistics(dto);
|
|
|
|
|
|
- var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
+ var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
{
|
|
|
OrgName = "区县合计",
|
|
|
TotalSumCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.TotalSumCount),
|
|
@@ -978,6 +908,63 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
return new VisitAndOrgSatisfactionStatisticsResultDto { DataList = data, CountySumModel = countySumModel, CitySumModel = citySumModel, SumModel = sumModel };
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 部门满意度统计导出
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("visit-org-satisfaction-statistics/_export")]
|
|
|
+ public async Task<FileStreamResult> VisitAndOrgSatisfactionStatisticsExport([FromBody] ExportExcelDto<PagedKeywordSonRequest> dto)
|
|
|
+ {
|
|
|
+ List<VisitAndOrgSatisfactionStatisticsDto> data = await _orderApplication.VisitAndOrgSatisfactionStatistics(dto.QueryDto);
|
|
|
+ var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
+ {
|
|
|
+ OrgName = "区县合计",
|
|
|
+ TotalSumCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.TotalSumCount),
|
|
|
+ VerySatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.VerySatisfiedCount),
|
|
|
+ SatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.SatisfiedCount),
|
|
|
+ RegardedAsSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.RegardedAsSatisfiedCount),
|
|
|
+ DefaultSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.DefaultSatisfiedCount),
|
|
|
+ NoSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoSatisfiedCount),
|
|
|
+ NoEvaluateCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoEvaluateCount),
|
|
|
+ NoPutThroughCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoPutThroughCount),
|
|
|
+ };
|
|
|
+ var citySumModel = new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
+ {
|
|
|
+ OrgName = "市直合计",
|
|
|
+ TotalSumCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.TotalSumCount),
|
|
|
+ VerySatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.VerySatisfiedCount),
|
|
|
+ SatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.SatisfiedCount),
|
|
|
+ RegardedAsSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.RegardedAsSatisfiedCount),
|
|
|
+ DefaultSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.DefaultSatisfiedCount),
|
|
|
+ NoSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoSatisfiedCount),
|
|
|
+ NoEvaluateCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoEvaluateCount),
|
|
|
+ NoPutThroughCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoPutThroughCount),
|
|
|
+ };
|
|
|
+ var sumModel = new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
+ {
|
|
|
+ OrgName = "总计",
|
|
|
+ TotalSumCount = data.Sum(x => x.TotalSumCount),
|
|
|
+ VerySatisfiedCount = data.Sum(x => x.VerySatisfiedCount),
|
|
|
+ SatisfiedCount = data.Sum(x => x.SatisfiedCount),
|
|
|
+ RegardedAsSatisfiedCount = data.Sum(x => x.RegardedAsSatisfiedCount),
|
|
|
+ DefaultSatisfiedCount = data.Sum(x => x.DefaultSatisfiedCount),
|
|
|
+ NoSatisfiedCount = data.Sum(x => x.NoSatisfiedCount),
|
|
|
+ NoEvaluateCount = data.Sum(x => x.NoEvaluateCount),
|
|
|
+ NoPutThroughCount = data.Sum(x => x.NoPutThroughCount),
|
|
|
+ };
|
|
|
+ data.Add(countySumModel);
|
|
|
+ data.Add(citySumModel);
|
|
|
+ data.Add(sumModel);
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+ var dtos = data
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(VisitAndOrgSatisfactionStatisticsDto), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
+
|
|
|
+ return ExcelStreamResult(stream, "部门满意度统计数据");
|
|
|
+ }
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
@@ -990,54 +977,10 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
/// <param name="LineNum"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("visit-org-statisfaction-org-detail")]
|
|
|
- public async Task<VisitAndOrgSatisfactionStatisticsResultDto> VisitAndOrgStatisfactionOrgDetail(DateTime StartDate, DateTime EndDate, string OrgCode, int TypeId, string? LineNum)
|
|
|
+ public async Task<VisitAndOrgSatisfactionStatisticsResultDto> VisitAndOrgStatisfactionOrgDetail([FromQuery] PagedKeywordSonRequest dto)
|
|
|
{
|
|
|
- EndDate = EndDate.AddDays(1).AddSeconds(-1);
|
|
|
-
|
|
|
- bool IsCenter = _sessionContext.OrgIsCenter;
|
|
|
-
|
|
|
- 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(!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
|
|
|
- {
|
|
|
- VisitOrgCode = it.VisitOrgCode
|
|
|
- })
|
|
|
- .Select((x, it) => new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
- {
|
|
|
- OrgCode = it.VisitOrgCode,
|
|
|
- TotalSumCount = SqlFunc.AggregateCount(it.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("9"))),
|
|
|
- VerySatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "5", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "5", 1, 0))),//非常满意数
|
|
|
- SatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "4", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "4", 1, 0))), //满意数
|
|
|
- RegardedAsSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "-1", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "-1", 1, 0))),//视为满意
|
|
|
- DefaultSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "0", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "0", 1, 0))),//默认满意
|
|
|
- NoSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "2", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "2", 1, 0))),//不满意
|
|
|
- NoEvaluateCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "7", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "7", 1, 0))),//未做评价
|
|
|
- NoPutThroughCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgProcessingResults, "Key") == "6", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(it.OrgHandledAttitude, "Key") == "6", 1, 0)))//未接通
|
|
|
- })
|
|
|
- .MergeTable()
|
|
|
- .LeftJoin<SystemOrganize>((x, it) => x.OrgCode == it.Id)
|
|
|
- .Select((x, it) => new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
- {
|
|
|
- OrgName = it.Name,
|
|
|
- OrgCode = x.OrgCode,
|
|
|
- OrgType = it.OrgType,
|
|
|
- TotalSumCount = x.TotalSumCount,
|
|
|
- VerySatisfiedCount = x.VerySatisfiedCount,//非常满意数
|
|
|
- SatisfiedCount = x.SatisfiedCount, //满意数
|
|
|
- RegardedAsSatisfiedCount = x.RegardedAsSatisfiedCount,//视为满意
|
|
|
- DefaultSatisfiedCount = x.DefaultSatisfiedCount,//默认满意
|
|
|
- NoSatisfiedCount = x.NoSatisfiedCount,//不满意
|
|
|
- NoEvaluateCount = x.NoEvaluateCount,//未做评价
|
|
|
- NoPutThroughCount = x.NoPutThroughCount,//未接通
|
|
|
- })
|
|
|
- .ToListAsync();
|
|
|
-
|
|
|
- var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
+ var list = await _orderApplication.VisitAndOrgStatisfactionOrgDetail(dto);
|
|
|
+ var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
{
|
|
|
OrgName = "区县合计",
|
|
|
TotalSumCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.TotalSumCount),
|
|
@@ -1079,40 +1022,113 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
return new VisitAndOrgSatisfactionStatisticsResultDto { DataList = list, CountySumModel = countySumModel, CitySumModel = citySumModel, SumModel = sumModel };
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 部门满意度明细
|
|
|
- /// </summary>
|
|
|
- /// <param name="StartDate"></param>
|
|
|
- /// <param name="EndDate"></param>
|
|
|
- /// <param name="OrgCode"></param>
|
|
|
- /// <param name="TypeId"></param>
|
|
|
- /// <param name="LineNum"></param>
|
|
|
- /// <returns></returns>
|
|
|
- [HttpGet("visit-org-satisfaction-detail")]
|
|
|
+ /// <summary>
|
|
|
+ /// 部门满意度统计导出
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("visit-org-statisfaction-org-detail/_export")]
|
|
|
+ public async Task<FileStreamResult> VisitAndOrgStatisfactionOrgDetailExport([FromBody] ExportExcelDto<PagedKeywordSonRequest> dto)
|
|
|
+ {
|
|
|
+ var list = await _orderApplication.VisitAndOrgStatisfactionOrgDetail(dto.QueryDto);
|
|
|
+ var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
+ {
|
|
|
+ OrgName = "区县合计",
|
|
|
+ TotalSumCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.TotalSumCount),
|
|
|
+ VerySatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.VerySatisfiedCount),
|
|
|
+ SatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.SatisfiedCount),
|
|
|
+ RegardedAsSatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.RegardedAsSatisfiedCount),
|
|
|
+ DefaultSatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.DefaultSatisfiedCount),
|
|
|
+ NoSatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoSatisfiedCount),
|
|
|
+ NoEvaluateCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoEvaluateCount),
|
|
|
+ NoPutThroughCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoPutThroughCount),
|
|
|
+ };
|
|
|
+ var citySumModel = new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
+ {
|
|
|
+ OrgName = "市直合计",
|
|
|
+ TotalSumCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.TotalSumCount),
|
|
|
+ VerySatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.VerySatisfiedCount),
|
|
|
+ SatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.SatisfiedCount),
|
|
|
+ RegardedAsSatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.RegardedAsSatisfiedCount),
|
|
|
+ DefaultSatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.DefaultSatisfiedCount),
|
|
|
+ NoSatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoSatisfiedCount),
|
|
|
+ NoEvaluateCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoEvaluateCount),
|
|
|
+ NoPutThroughCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoPutThroughCount),
|
|
|
+ };
|
|
|
+ var sumModel = new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
+ {
|
|
|
+ OrgName = "总计",
|
|
|
+ TotalSumCount = list.Sum(x => x.TotalSumCount),
|
|
|
+ VerySatisfiedCount = list.Sum(x => x.VerySatisfiedCount),
|
|
|
+ SatisfiedCount = list.Sum(x => x.SatisfiedCount),
|
|
|
+ RegardedAsSatisfiedCount = list.Sum(x => x.RegardedAsSatisfiedCount),
|
|
|
+ DefaultSatisfiedCount = list.Sum(x => x.DefaultSatisfiedCount),
|
|
|
+ NoSatisfiedCount = list.Sum(x => x.NoSatisfiedCount),
|
|
|
+ NoEvaluateCount = list.Sum(x => x.NoEvaluateCount),
|
|
|
+ NoPutThroughCount = list.Sum(x => x.NoPutThroughCount),
|
|
|
+ };
|
|
|
+ list.Add(countySumModel);
|
|
|
+ list.Add(citySumModel);
|
|
|
+ list.Add(sumModel);
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+ var dtos = list
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(VisitAndOrgSatisfactionStatisticsDto), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
+
|
|
|
+ return ExcelStreamResult(stream, "部门满意度统计数据");
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 部门满意度明细
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="StartDate"></param>
|
|
|
+ /// <param name="EndDate"></param>
|
|
|
+ /// <param name="OrgCode"></param>
|
|
|
+ /// <param name="TypeId"></param>
|
|
|
+ /// <param name="LineNum"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("visit-org-satisfaction-detail")]
|
|
|
public async Task<PagedDto<OrderVisitDetailDto>> VisitAndOrgSatisfactionDetail([FromQuery] VisitAndOrgSatisfactionDetailDto dto)
|
|
|
{
|
|
|
- dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
|
|
|
-
|
|
|
- bool IsCenter = _sessionContext.OrgIsCenter;
|
|
|
-
|
|
|
- var (total, items) = await _orderVisitDetailRepository.Queryable()
|
|
|
- .Includes(x => x.OrderVisit, o => o.Order, d => d.CallRecord)
|
|
|
- .Where(x => x.OrderVisit.VisitTime >= dto.StartDate && x.OrderVisit.VisitTime <= dto.EndDate && x.VisitTarget == EVisitTarget.Org && x.OrderVisit.VisitState == EVisitState.Visited)
|
|
|
- .WhereIF(dto.OrgCode == "001", x => x.VisitOrgCode == dto.OrgCode)
|
|
|
- //.WhereIF(dto.OrgCode != "001", x => x.VisitOrgCode == dto.OrgCode).
|
|
|
- .WhereIF(dto.IsOnlyMy == true, x => x.VisitOrgCode == dto.OrgCode)
|
|
|
- .WhereIF(IsCenter == true && dto.IsOnlyMy == true, x => x.VisitOrgCode == dto.OrgCode)
|
|
|
- .WhereIF(IsCenter == true && dto.IsOnlyMy == null, x => x.VisitOrgCode.StartsWith(dto.OrgCode))
|
|
|
- .WhereIF(IsCenter == false, x => x.VisitOrgCode == dto.OrgCode)
|
|
|
- .WhereIF(dto.TypeId == 1, x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.DateValue)
|
|
|
- .WhereIF(dto.TypeId == 2, x => SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == dto.DateValue)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.LineNum), x => x.OrderVisit.Order.CallRecord.Gateway == dto.LineNum)
|
|
|
- .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
+ var (total, items) = await _orderApplication.VisitAndOrgSatisfactionDetail(dto)
|
|
|
+ .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
return new PagedDto<OrderVisitDetailDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDetailDto>>(items));
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 部门满意度明细导出
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("visit-org-satisfaction-detail/_export")]
|
|
|
+ public async Task<FileStreamResult> VisitAndOrgSatisfactionDetailExport([FromBody] ExportExcelDto<VisitAndOrgSatisfactionDetailDto> dto)
|
|
|
+ {
|
|
|
+ var query = _orderApplication.VisitAndOrgSatisfactionDetail(dto.QueryDto);
|
|
|
+ List<OrderVisitDetail> data;
|
|
|
+ if (dto.IsExportAll)
|
|
|
+ {
|
|
|
+ data = await query.ToListAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
|
|
|
+ data = items;
|
|
|
+ }
|
|
|
+
|
|
|
+ var dataDtos = _mapper.Map<ICollection<OrderVisitDetailDto>>(data);
|
|
|
+
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+
|
|
|
+ var dtos = dataDtos
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(OrderVisitDetailDto), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
|
|
|
+ return ExcelStreamResult(stream, "部门满意度明细数据");
|
|
|
+ }
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
@@ -1564,18 +1580,18 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
OrgName = "合计",
|
|
|
OrgType = EOrgType.City,
|
|
|
// OrderCountNum = items.Sum(p => p.OrderCountNum),
|
|
|
- YBOrderCountNum = items.Sum(p => p.YBOrderCountNum),
|
|
|
- ZBOrderCountNum = items.Sum(p => p.ZBOrderCountNum),
|
|
|
+ YbOrderCountNum = items.Sum(p => p.YbOrderCountNum),
|
|
|
+ ZbOrderCountNum = items.Sum(p => p.ZbOrderCountNum),
|
|
|
Archived = items.Sum(p => p.Archived),
|
|
|
ToBeArchived = items.Sum(p => p.ToBeArchived),
|
|
|
WaitPublished = items.Sum(p => p.WaitPublished),
|
|
|
PublishedOpen = items.Sum(p => p.PublishedOpen),
|
|
|
PublishedNoOpen = items.Sum(p => p.PublishedNoOpen),
|
|
|
- YBOverdue = items.Sum(p => p.YBOverdue),
|
|
|
- ZBOverdue = items.Sum(p => p.ZBOverdue),
|
|
|
+ YbOverdue = items.Sum(p => p.YbOverdue),
|
|
|
+ ZbOverdue = items.Sum(p => p.ZbOverdue),
|
|
|
CompleteOnTime = items.Sum(p => p.CompleteOnTime),
|
|
|
- HQYBOverdue = items.Sum(p => p.HQYBOverdue),
|
|
|
- HQZBOverdue = items.Sum(p => p.HQZBOverdue),
|
|
|
+ HqybOverdue = items.Sum(p => p.HqybOverdue),
|
|
|
+ HqzbOverdue = items.Sum(p => p.HqzbOverdue),
|
|
|
DelayEnd = items.Sum(p => p.DelayEnd),
|
|
|
DelayWait = items.Sum(p => p.DelayWait),
|
|
|
OrderDelayCount = items.Sum(p => p.OrderDelayCount),
|
|
@@ -1616,18 +1632,18 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
OrgName = "合计",
|
|
|
OrgType = EOrgType.City,
|
|
|
// OrderCountNum = items.Sum(p => p.OrderCountNum),
|
|
|
- YBOrderCountNum = list.Sum(p => p.YBOrderCountNum),
|
|
|
- ZBOrderCountNum = list.Sum(p => p.ZBOrderCountNum),
|
|
|
+ YbOrderCountNum = list.Sum(p => p.YbOrderCountNum),
|
|
|
+ ZbOrderCountNum = list.Sum(p => p.ZbOrderCountNum),
|
|
|
Archived = list.Sum(p => p.Archived),
|
|
|
ToBeArchived = list.Sum(p => p.ToBeArchived),
|
|
|
WaitPublished = list.Sum(p => p.WaitPublished),
|
|
|
PublishedOpen = list.Sum(p => p.PublishedOpen),
|
|
|
PublishedNoOpen = list.Sum(p => p.PublishedNoOpen),
|
|
|
- YBOverdue = list.Sum(p => p.YBOverdue),
|
|
|
- ZBOverdue = list.Sum(p => p.ZBOverdue),
|
|
|
+ YbOverdue = list.Sum(p => p.YbOverdue),
|
|
|
+ ZbOverdue = list.Sum(p => p.ZbOverdue),
|
|
|
CompleteOnTime = list.Sum(p => p.CompleteOnTime),
|
|
|
- HQYBOverdue = list.Sum(p => p.HQYBOverdue),
|
|
|
- HQZBOverdue = list.Sum(p => p.HQZBOverdue),
|
|
|
+ HqybOverdue = list.Sum(p => p.HqybOverdue),
|
|
|
+ HqzbOverdue = list.Sum(p => p.HqzbOverdue),
|
|
|
DelayEnd = list.Sum(p => p.DelayEnd),
|
|
|
DelayWait = list.Sum(p => p.DelayWait),
|
|
|
OrderDelayCount = list.Sum(p => p.OrderDelayCount),
|
|
@@ -1671,18 +1687,18 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
OrgName = "合计",
|
|
|
OrgType = EOrgType.City,
|
|
|
// OrderCountNum = items.Sum(p => p.OrderCountNum),
|
|
|
- YBOrderCountNum = items.Sum(p => p.YBOrderCountNum),
|
|
|
- ZBOrderCountNum = items.Sum(p => p.ZBOrderCountNum),
|
|
|
+ YbOrderCountNum = items.Sum(p => p.YbOrderCountNum),
|
|
|
+ ZbOrderCountNum = items.Sum(p => p.ZbOrderCountNum),
|
|
|
Archived = items.Sum(p => p.Archived),
|
|
|
ToBeArchived = items.Sum(p => p.ToBeArchived),
|
|
|
WaitPublished = items.Sum(p => p.WaitPublished),
|
|
|
PublishedOpen = items.Sum(p => p.PublishedOpen),
|
|
|
PublishedNoOpen = items.Sum(p => p.PublishedNoOpen),
|
|
|
- YBOverdue = items.Sum(p => p.YBOverdue),
|
|
|
- ZBOverdue = items.Sum(p => p.ZBOverdue),
|
|
|
+ YbOverdue = items.Sum(p => p.YbOverdue),
|
|
|
+ ZbOverdue = items.Sum(p => p.ZbOverdue),
|
|
|
CompleteOnTime = items.Sum(p => p.CompleteOnTime),
|
|
|
- HQYBOverdue = items.Sum(p => p.HQYBOverdue),
|
|
|
- HQZBOverdue = items.Sum(p => p.HQZBOverdue),
|
|
|
+ HqybOverdue = items.Sum(p => p.HqybOverdue),
|
|
|
+ HqzbOverdue = items.Sum(p => p.HqzbOverdue),
|
|
|
DelayEnd = items.Sum(p => p.DelayEnd),
|
|
|
DelayWait = items.Sum(p => p.DelayWait),
|
|
|
OrderDelayCount = items.Sum(p => p.OrderDelayCount),
|
|
@@ -1723,18 +1739,18 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
OrgName = "合计",
|
|
|
OrgType = EOrgType.City,
|
|
|
// OrderCountNum = items.Sum(p => p.OrderCountNum),
|
|
|
- YBOrderCountNum = list.Sum(p => p.YBOrderCountNum),
|
|
|
- ZBOrderCountNum = list.Sum(p => p.ZBOrderCountNum),
|
|
|
+ YbOrderCountNum = list.Sum(p => p.YbOrderCountNum),
|
|
|
+ ZbOrderCountNum = list.Sum(p => p.ZbOrderCountNum),
|
|
|
Archived = list.Sum(p => p.Archived),
|
|
|
ToBeArchived = list.Sum(p => p.ToBeArchived),
|
|
|
WaitPublished = list.Sum(p => p.WaitPublished),
|
|
|
PublishedOpen = list.Sum(p => p.PublishedOpen),
|
|
|
PublishedNoOpen = list.Sum(p => p.PublishedNoOpen),
|
|
|
- YBOverdue = list.Sum(p => p.YBOverdue),
|
|
|
- ZBOverdue = list.Sum(p => p.ZBOverdue),
|
|
|
+ YbOverdue = list.Sum(p => p.YbOverdue),
|
|
|
+ ZbOverdue = list.Sum(p => p.ZbOverdue),
|
|
|
CompleteOnTime = list.Sum(p => p.CompleteOnTime),
|
|
|
- HQYBOverdue = list.Sum(p => p.HQYBOverdue),
|
|
|
- HQZBOverdue = list.Sum(p => p.HQZBOverdue),
|
|
|
+ HqybOverdue = list.Sum(p => p.HqybOverdue),
|
|
|
+ HqzbOverdue = list.Sum(p => p.HqzbOverdue),
|
|
|
DelayEnd = list.Sum(p => p.DelayEnd),
|
|
|
DelayWait = list.Sum(p => p.DelayWait),
|
|
|
OrderDelayCount = list.Sum(p => p.OrderDelayCount),
|
|
@@ -1796,11 +1812,11 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
var query = _orderReportApplication.GetDepartmentalProcessingStatisticsList(dto.QueryDto, HttpContext.RequestAborted)
|
|
|
.LeftJoin<Order>((x, o) => x.Id == o.Id)
|
|
|
.Select((x, o) => new { o });
|
|
|
- List<Orders.Order> list = new List<Order>();
|
|
|
+ List<OrderDto> list = new List<OrderDto>();
|
|
|
if (dto.IsExportAll)
|
|
|
{
|
|
|
var listData = await query.ToListAsync(HttpContext.RequestAborted);
|
|
|
- listData.Select(d =>
|
|
|
+ list = listData.Select(d =>
|
|
|
{
|
|
|
var dto = _mapper.Map<OrderDto>(d.o);
|
|
|
return dto;
|
|
@@ -1810,18 +1826,18 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
{
|
|
|
RefAsync<int> total = 0;
|
|
|
var listData = await query.ToPageListAsync(dto.QueryDto.PageIndex, dto.QueryDto.PageSize, total, HttpContext.RequestAborted);
|
|
|
- listData.Select(d =>
|
|
|
+ list = listData.Select(d =>
|
|
|
{
|
|
|
var dto = _mapper.Map<OrderDto>(d.o);
|
|
|
return dto;
|
|
|
}).ToList();
|
|
|
}
|
|
|
|
|
|
- var orderDtos = _mapper.Map<ICollection<OrderDto>>(list);
|
|
|
+ // var orderDtos = _mapper.Map<ICollection<OrderDto>>(list);
|
|
|
|
|
|
dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
|
|
|
- var dtos = orderDtos
|
|
|
+ var dtos = list
|
|
|
.Select(stu => _mapper.Map(stu, typeof(DepartmentalProcessingStatisticsDataDto), dynamicClass))
|
|
|
.Cast<object>()
|
|
|
.ToList();
|
|
@@ -2049,26 +2065,39 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
|
|
|
throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
- var (total, items) = await _orderSpecialDetailRepository.Queryable()
|
|
|
- .Includes(x => x.OrderSpecial)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.OrgName.Contains(dto.OrgName!))
|
|
|
- .Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
|
|
|
- .Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
|
|
|
- .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
|
|
|
- .GroupBy(x => new { Time = x.OrderSpecial.CreationTime.ToString("yyyy-MM-dd"), x.OrgId, x.OrgName })
|
|
|
- .Select(x => new OrderReTransactVo
|
|
|
- {
|
|
|
- Time = x.OrderSpecial.CreationTime.ToString("yyyy-MM-dd"),
|
|
|
- OrgId = x.OrgId,
|
|
|
- OrgName = x.OrgName,
|
|
|
- Num = SqlFunc.AggregateCount(1)
|
|
|
- }).MergeTable()
|
|
|
- .OrderByIF(dto.SortRule == 0, x => x.Num, OrderByType.Asc)
|
|
|
- .OrderByIF(dto.SortRule == 1, x => x.Num, OrderByType.Desc)
|
|
|
+ var query = _orderApplication.OrderReTransact(dto);
|
|
|
+ var (total, items) = await query
|
|
|
.ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
+ items.Add(new OrderReTransactVo
|
|
|
+ {
|
|
|
+ OrgName = "合计",
|
|
|
+ Num = items.Select(s => s.Num).Sum(),
|
|
|
+ });
|
|
|
return new PagedDto<OrderReTransactVo>(total, _mapper.Map<IReadOnlyList<OrderReTransactVo>>(items));
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 回退错件导出
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("reTransact/_export")]
|
|
|
+ public async Task<FileStreamResult> OrderReTransactExport([FromBody] ExportExcelDto<QueryOrderReTransactRequest> dto)
|
|
|
+ {
|
|
|
+ var query = _orderApplication.OrderReTransact(dto.QueryDto);
|
|
|
+ List<OrderReTransactVo> data;
|
|
|
+ data = await query.ToListAsync(HttpContext.RequestAborted);
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+ var dtos = data
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(OrderReTransactVo), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
+
|
|
|
+ return ExcelStreamResult(stream, "回退错件统计数据");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 回退错件明细
|
|
|
/// </summary>
|
|
@@ -2080,24 +2109,52 @@ namespace Hotline.Api.Controllers.Bi
|
|
|
if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
|
|
|
throw UserFriendlyException.SameMessage("请选择时间!");
|
|
|
dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
- var (total, items) = await _orderSpecialDetailRepository.Queryable()
|
|
|
- .Includes(x => x.OrderSpecial, s => s.Order)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.OrgName.Contains(dto.OrgName!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.ErrorName), x => x.ErrorName.Contains(dto.ErrorName!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderSpecial!.Order!.No!.Contains(dto.No!))
|
|
|
- .Where(x => x.OrderSpecial.ESpecialType == ESpecialType.ReTransact)
|
|
|
- .Where(x => x.OrderSpecial.CreationTime >= dto.StartTime)
|
|
|
- .Where(x => x.OrderSpecial.CreationTime <= dto.EndTime)
|
|
|
- .ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ var query = _orderApplication.QueryOrderSourceDetail(dto);
|
|
|
+ var (total, items) = await
|
|
|
+ query.ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
return new PagedDto<OrderSpecialDetailDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDetailDto>>(items));
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 回退错件明细导出
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("reTransact_detail/_export")]
|
|
|
+ public async Task<FileStreamResult> OrderReTransactDetailExport([FromBody] ExportExcelDto<QueryOrderReTransactDetailRequest> dto)
|
|
|
+ {
|
|
|
+ var query = _orderApplication.QueryOrderSourceDetail(dto.QueryDto);
|
|
|
+ List<OrderSpecialDetail> data;
|
|
|
+ if (dto.IsExportAll)
|
|
|
+ {
|
|
|
+ data = await query.ToListAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
|
|
|
+ data = items;
|
|
|
+ }
|
|
|
+
|
|
|
+ var dataDtos = _mapper.Map<ICollection<OrderSpecialDetailDto>>(data);
|
|
|
+
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+
|
|
|
+ var dtos = dataDtos
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(OrderSpecialDetailDto), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
+
|
|
|
+ return ExcelStreamResult(stream, "回退错件明细列表数据");
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 获取基本信息
|
|
|
/// </summary>
|
|
|
/// <param name="id"></param>
|
|
|
/// <returns></returns>
|
|
|
- [HttpGet("reTransact_base")]
|
|
|
+ [HttpGet("reTransact_base")]
|
|
|
public async Task<object> ReTransactBaseData()
|
|
|
{
|
|
|
var rsp = new
|