Эх сурвалжийг харах

增加热点类型统计详情

qinchaoyue 1 сар өмнө
parent
commit
c9c3635c26

+ 10 - 1
src/Hotline.Api/Controllers/Snapshot/BiSnapshotController.cs

@@ -45,7 +45,7 @@ public class BiSnapshotController : BaseController
     /// <returns></returns>
     [HttpGet("statistics")]
     public async Task<SnapshotStatisticsOutDto> GetSnapshotStatisticsAsync([FromQuery] SnapshotStatisticsInDto dto)
-        =>  await _biSnapshotApplication.GetSnapshotStatisticsAsync(dto, HttpContext.RequestAborted);
+        => await _biSnapshotApplication.GetSnapshotStatisticsAsync(dto, HttpContext.RequestAborted);
 
     /// <summary>
     /// 随手拍统计详情集合
@@ -85,4 +85,13 @@ public class BiSnapshotController : BaseController
     public async Task<IList<HotspotStatisticsOutDto>> GetHotspotStatisticsAsync([FromQuery] HotspotStatisticsInDto dto)
         => await _biSnapshotApplication.GetHotspotStatistics(dto).ToListAsync();
 
+    /// <summary>
+    /// 热点类型小类统计明细
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("hotspot-statistics-detail")]
+    public async Task<PagedDto<HotspotStatisticsDetailsOutDto>> GetHotspotStatisticsDetailAsync([FromQuery] HotspotStatisticsDetailsInDto dto)
+        => (await _biSnapshotApplication.HotspotStatisticsDetail(dto).ToPagedListAsync(dto)).ToPaged();
+
 }

+ 30 - 2
src/Hotline.Application/Snapshot/BiSnapshotApplication.cs

@@ -1,17 +1,22 @@
 using FluentValidation.Results;
 using Hotline.FlowEngine.Workflows;
 using Hotline.Orders;
+using Hotline.Repository.SqlSugar.Orders;
 using Hotline.Settings.Hotspots;
 using Hotline.Share.Attributes;
+using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Snapshot;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Snapshot;
+using Hotline.Share.Requests;
 using Hotline.Share.Tools;
 using Hotline.Snapshot;
 using Hotline.Snapshot.Interfaces;
 using Hotline.Tools;
 using Mapster;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
 using NPOI.SS.Formula.Functions;
 using SqlSugar;
 using System;
@@ -35,8 +40,9 @@ public class BiSnapshotApplication : IBiSnapshotApplication, IScopeDependency
     private readonly IRedPackAuditRepository _redPackAuditRepository;
     private readonly IRepository<Hotspot> _hotspotTypeRepository;
     private readonly ISessionContext _sessionContext;
+    private readonly IOrderRepository _orderRepository;
 
-    public BiSnapshotApplication(IOrderSnapshotRepository orderSnapshotRepository, IRedPackRecordRepository redPackRecordRepository, IIndustryRepository industryRepository, IIndustryCaseRepository industryCaseRepository, IRedPackAuditRepository redPackAuditRepository, IRepository<Hotspot> hotspotTypeRepository, ISessionContext sessionContext)
+    public BiSnapshotApplication(IOrderSnapshotRepository orderSnapshotRepository, IRedPackRecordRepository redPackRecordRepository, IIndustryRepository industryRepository, IIndustryCaseRepository industryCaseRepository, IRedPackAuditRepository redPackAuditRepository, IRepository<Hotspot> hotspotTypeRepository, ISessionContext sessionContext, IOrderRepository orderRepository)
     {
         _orderSnapshotRepository = orderSnapshotRepository;
         _redPackRecordRepository = redPackRecordRepository;
@@ -45,6 +51,7 @@ public class BiSnapshotApplication : IBiSnapshotApplication, IScopeDependency
         _redPackAuditRepository = redPackAuditRepository;
         _hotspotTypeRepository = hotspotTypeRepository;
         _sessionContext = sessionContext;
+        _orderRepository = orderRepository;
     }
 
     public ISugarQueryable<HotspotStatisticsOutDto> GetHotspotStatistics(HotspotStatisticsInDto dto)
@@ -55,7 +62,7 @@ public class BiSnapshotApplication : IBiSnapshotApplication, IScopeDependency
         if (dto.HotspotCode.NotNullOrEmpty())
         {
             count = (dto.HotspotCode.Length + 2).ToString();
-            dto.HotspotCode.Length.ToString();
+            countx = dto.HotspotCode.Length.ToString();
         }
         return _hotspotTypeRepository.Queryable()
         .LeftJoin<Order>((it, o) => it.Id == o.HotspotId)
@@ -81,6 +88,27 @@ public class BiSnapshotApplication : IBiSnapshotApplication, IScopeDependency
         });
     }
 
+    /// <summary>
+    /// 热点类型小类统计明细
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public ISugarQueryable<HotspotStatisticsDetailsOutDto> HotspotStatisticsDetail([FromQuery] HotspotStatisticsDetailsInDto dto)
+    {
+        var IsCenter = _sessionContext.OrgIsCenter;
+        IsCenter = true;
+        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(IsCenter == false, d => d.ActualHandleOrgCode.StartsWith(_sessionContext.RequiredOrgId))
+            .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);
+        return query;
+    }
+
     /// <summary>
     /// 市民红包审批统计
     /// </summary>

+ 1 - 0
src/Hotline.Application/Snapshot/IBiSnapshotApplication.cs

@@ -17,6 +17,7 @@ public interface IBiSnapshotApplication
     /// <param name="dto"></param>
     /// <returns></returns>
     ISugarQueryable<HotspotStatisticsOutDto> GetHotspotStatistics(HotspotStatisticsInDto dto);
+    ISugarQueryable<HotspotStatisticsDetailsOutDto> HotspotStatisticsDetail(HotspotStatisticsDetailsInDto dto);
     IList<RedPackStatisticsOutDto> GetRedPackAuditStatistics(RedPackStatisticsInDto dto);
     ISugarQueryable<RedPackStatisticsDetailsOutDto> GetRedPackAuditStatisticsDetails(RedPackStatisticsDetailsInDto dto);
     Task<SnapshotStatisticsOutDto> GetSnapshotStatisticsAsync(SnapshotStatisticsInDto dto, CancellationToken token);

+ 182 - 0
src/Hotline.Share/Dtos/Snapshot/StatisticsDto.cs

@@ -884,3 +884,185 @@ public class HotspotStatisticsOutDto
     public string HotspotName { get; set; }
     public bool HasChild { get; set; }
 }
+
+public record HotspotStatisticsDetailsInDto : PagedRequest
+{
+    [Required]
+    public DateTime StartTime { get; set; }
+
+    [Required]
+    public DateTime EndTime { get; set; }
+
+    public string? HotspotCode { get; set; }
+
+}
+public class HotspotStatisticsDetailsOutDto
+{
+    /// <summary>
+    /// Id
+    /// </summary>
+    public string Id { get; set; }
+
+    /// <summary>
+    /// 过期状态
+    /// </summary>
+    public EExpiredStatus ExpiredStatus { get; set; }
+
+    /// <summary>
+    /// 过期状态
+    /// </summary>
+    public string ExpiredStatusText => ExpiredStatus.GetDescription();
+
+    /// <summary>
+    /// 受理编号
+    /// </summary>
+    public string No { get; set; }
+
+    /// <summary>
+    /// 信件状态
+    /// </summary>
+    public EOrderStatus Status { get; set; }
+
+    /// <summary>
+    /// 信件状态
+    /// </summary>
+    public string StatusTxt => Status.GetDescription();
+
+    /// <summary>
+    /// 来源
+    /// </summary>
+    public string SourceChannel { get; set; }
+
+    /// <summary>
+    /// 当前节点
+    /// </summary>
+    public string CurrentStepName { get; set; }
+
+    /// <summary>
+    /// 重办次数
+    /// </summary>
+    public int ReTransactNum { get; set; }
+
+    /// <summary>
+    /// 甄别状态
+    /// </summary>
+    public EScreenStatus? OrderScreenStatus { get; set; }
+
+    /// <summary>
+    /// 甄别状态
+    /// </summary>
+    public string? OrderScreenStatusText => OrderScreenStatus.HasValue && OrderScreenStatus != null ? OrderScreenStatus?.GetDescription() : "未甄别";
+
+    /// <summary>
+    /// 是否紧急
+    /// </summary>
+    public bool IsUrgent { get; set; }
+
+    /// <summary>
+    /// 是否紧急
+    /// </summary>
+    public string IsUrgentTxt => IsUrgent ? "紧急" : "-";
+
+    /// <summary>
+    /// 期满时间
+    /// </summary>
+    public DateTime? ExpiredTime { get; set; }
+
+    /// <summary>
+    /// 是否超期
+    /// </summary>
+    public bool IsExpired
+    {
+        get
+        {
+            if (ExpiredTime.HasValue)
+                return DateTime.Now > ExpiredTime.Value;
+            return false;
+        }
+    }
+
+    /// <summary>
+    /// 受理时间
+    /// </summary>
+    public DateTime CreationTime { get; set; }
+
+    /// <summary>
+    /// 标题
+    /// </summary>
+    public string Title { get; set; }
+
+    /// <summary>
+    /// 行业
+    /// </summary>
+    public string IndustryName { get; set; }
+
+    /// <summary>
+    /// 办理时长
+    /// </summary>
+    public double CreationTimeHandleDuration { get; set; }
+
+    /// <summary>
+    /// 区域
+    /// </summary>
+    public string County { get; set; }
+
+    /// <summary>
+    /// 电话
+    /// </summary>
+    public string Contact { get; set; }
+
+    /// <summary>
+    /// 受理期满时间
+    /// </summary>
+    public DateTime? AcceptExpiredTime { get; set; }
+
+    /// <summary>
+    /// 接办部门
+    /// </summary>
+    public string ActualHandleOrgName { get; set; }
+
+    /// <summary>
+    /// 接办时间
+    /// </summary>
+    public DateTime? StartTime { get; set; }
+
+    /// <summary>
+    /// 办结时间
+    /// </summary>
+    public DateTime? CenterToOrgTime { get; set; }
+
+    /// <summary>
+    /// 满意度
+    /// </summary>
+    public Kv? OrgProcessingResults { get; set; }
+
+    /// <summary>
+    /// 满意度
+    /// </summary>
+    public string? OrgProcessingResultsTxt => OrgProcessingResults != null ? OrgProcessingResults.Value : "";
+
+    /// <summary>
+    /// 受理类型
+    /// </summary>
+    public string AcceptType { get; set; }
+
+    /// <summary>
+    /// 热点类型
+    /// </summary>
+    public string HotspotName { get; set; }
+
+    /// <summary>
+    /// 受理人
+    /// </summary>
+    public string AcceptorName { get; set; }
+
+    /// <summary>
+    /// 受理内容
+    /// </summary>
+    public string Content { get; set; }
+
+    /// <summary>
+    /// 办理结果
+    /// </summary>
+    public string FileOpinion { get; set; }
+}