|
@@ -1,13 +1,7 @@
|
|
using Hotline.JudicialManagement;
|
|
using Hotline.JudicialManagement;
|
|
-using Hotline.KnowledgeBase;
|
|
|
|
using Hotline.Orders;
|
|
using Hotline.Orders;
|
|
-using Hotline.Repository.SqlSugar.Orders;
|
|
|
|
using Hotline.Settings;
|
|
using Hotline.Settings;
|
|
-using Hotline.Settings.Hotspots;
|
|
|
|
-using Hotline.Share.Dtos.Bigscreen;
|
|
|
|
using Hotline.Share.Dtos.JudicialManagement;
|
|
using Hotline.Share.Dtos.JudicialManagement;
|
|
-using Hotline.Share.Dtos.Order;
|
|
|
|
-using Hotline.Share.Enums.KnowledgeBase;
|
|
|
|
using Hotline.Share.Enums.Order;
|
|
using Hotline.Share.Enums.Order;
|
|
using MapsterMapper;
|
|
using MapsterMapper;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
@@ -22,40 +16,22 @@ namespace Hotline.Api.Controllers.Bigscreen
|
|
/// </summary>
|
|
/// </summary>
|
|
public class EnforcementScreenController : BaseController
|
|
public class EnforcementScreenController : BaseController
|
|
{
|
|
{
|
|
- private readonly IRepository<EnforcementOrders> _enforcementOrdersRepository;
|
|
|
|
- private readonly IRepository<JudicialComplaintsEventType> _judicialComplaintsEventTypeRepository;
|
|
|
|
- private readonly IRepository<EnforcementHotspot> _enforcementHotspotRepository;
|
|
|
|
- private readonly IOrderRepository _orderRepository;
|
|
|
|
- private readonly IRepository<OrderDelay> _orderDelayRepository;
|
|
|
|
- private readonly IRepository<OrderVisit> _orderVisitRepository;
|
|
|
|
- private readonly IRepository<Knowledge> _knowledgeRepository;
|
|
|
|
- private readonly IRepository<KnowledgePv> _knowledgePvRepository;
|
|
|
|
private readonly IMapper _mapper;
|
|
private readonly IMapper _mapper;
|
|
- private readonly IRepository<OrderVisitDetail> _orderVisitDetailRepository;
|
|
|
|
|
|
+ private readonly IRepository<EnforcementOrders> _enforcementOrdersRepository;
|
|
private readonly IRepository<SystemArea> _systemAreaRepository;
|
|
private readonly IRepository<SystemArea> _systemAreaRepository;
|
|
|
|
|
|
- public EnforcementScreenController(IRepository<EnforcementOrders> enforcementOrdersRepository,
|
|
|
|
- IRepository<JudicialComplaintsEventType> judicialComplaintsEventTypeRepository,
|
|
|
|
- IRepository<EnforcementHotspot> enforcementHotspotRepository,
|
|
|
|
- IOrderRepository orderRepository,
|
|
|
|
- IRepository<OrderVisit> orderVisitRepository,
|
|
|
|
- IRepository<OrderDelay> orderDelayRepository,
|
|
|
|
- IRepository<Knowledge> knowledgeRepository,
|
|
|
|
- IRepository<KnowledgePv> knowledgePvRepository,
|
|
|
|
- IMapper mapper,
|
|
|
|
- IRepository<OrderVisitDetail> orderVisitDetailRepository,
|
|
|
|
|
|
+ /// <summary>
|
|
|
|
+ ///
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <param name="mapper"></param>
|
|
|
|
+ /// <param name="enforcementOrdersRepository"></param>
|
|
|
|
+ /// <param name="systemAreaRepository"></param>
|
|
|
|
+ public EnforcementScreenController(IMapper mapper,
|
|
|
|
+ IRepository<EnforcementOrders> enforcementOrdersRepository,
|
|
IRepository<SystemArea> systemAreaRepository)
|
|
IRepository<SystemArea> systemAreaRepository)
|
|
{
|
|
{
|
|
- _enforcementOrdersRepository = enforcementOrdersRepository;
|
|
|
|
- _judicialComplaintsEventTypeRepository = judicialComplaintsEventTypeRepository;
|
|
|
|
- _enforcementHotspotRepository = enforcementHotspotRepository;
|
|
|
|
- _orderRepository = orderRepository;
|
|
|
|
- _orderVisitRepository = orderVisitRepository;
|
|
|
|
- _orderDelayRepository = orderDelayRepository;
|
|
|
|
- _knowledgeRepository = knowledgeRepository;
|
|
|
|
- _knowledgePvRepository = knowledgePvRepository;
|
|
|
|
_mapper = mapper;
|
|
_mapper = mapper;
|
|
- _orderVisitDetailRepository = orderVisitDetailRepository;
|
|
|
|
|
|
+ _enforcementOrdersRepository = enforcementOrdersRepository;
|
|
_systemAreaRepository = systemAreaRepository;
|
|
_systemAreaRepository = systemAreaRepository;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -190,7 +166,7 @@ namespace Hotline.Api.Controllers.Bigscreen
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
- /// 区域地图数据
|
|
|
|
|
|
+ /// 中上区域地图数据
|
|
/// </summary>
|
|
/// </summary>
|
|
/// <param name="StartDate"></param>
|
|
/// <param name="StartDate"></param>
|
|
/// <param name="EndDate"></param>
|
|
/// <param name="EndDate"></param>
|
|
@@ -235,7 +211,7 @@ namespace Hotline.Api.Controllers.Bigscreen
|
|
var data = await _enforcementOrdersRepository.Queryable()
|
|
var data = await _enforcementOrdersRepository.Queryable()
|
|
.LeftJoin<Order>((x, o) => x.Id == o.Id)
|
|
.LeftJoin<Order>((x, o) => x.Id == o.Id)
|
|
.Where((x, o) => o.Id != null)
|
|
.Where((x, o) => o.Id != null)
|
|
- .Where((x, o) => o.StartTime >= StartDate && o.StartTime <= EndDate && o.AreaCode == item.Id)
|
|
|
|
|
|
+ .Where((x, o) => o.StartTime >= StartDate && o.StartTime <= EndDate && o.AreaCode.StartsWith(item.Id))
|
|
.Select((x, o) => new
|
|
.Select((x, o) => new
|
|
{
|
|
{
|
|
x.Id,
|
|
x.Id,
|
|
@@ -270,26 +246,48 @@ namespace Hotline.Api.Controllers.Bigscreen
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
- /// 办理中工单概览
|
|
|
|
|
|
+ /// 中下行政执法工单概览
|
|
/// </summary>
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
[AllowAnonymous]
|
|
[AllowAnonymous]
|
|
- [HttpGet("order-handling-query")]
|
|
|
|
- public async Task<List<EnforcementOrderListDto>> OrderHandlingDetailQuery()
|
|
|
|
|
|
+ [HttpGet("order-overview")]
|
|
|
|
+ public async Task<List<OrderOverviewDto>> GetOrderOverviewAsync()
|
|
{
|
|
{
|
|
var list = await _enforcementOrdersRepository.Queryable()
|
|
var list = await _enforcementOrdersRepository.Queryable()
|
|
- .Includes(d => d.Order)
|
|
|
|
- .Where(d => d.Order.Id != null)
|
|
|
|
- .Where(d => d.Order.Status > EOrderStatus.WaitForAccept && d.Order.StartTime.Value.Date == DateTime.Now.Date)
|
|
|
|
- .OrderByDescending(d => d.Order.StartTime)
|
|
|
|
- .Take(50)
|
|
|
|
- .ToListAsync();
|
|
|
|
-
|
|
|
|
- return _mapper.Map<List<EnforcementOrderListDto>>(list);
|
|
|
|
|
|
+ .LeftJoin<Order>((x, o) => x.Id == o.Id)
|
|
|
|
+ .LeftJoin<SystemArea>((x, o, p) => o.AreaCode == p.Id)
|
|
|
|
+ .Where((x, o, p) => o.Id != null)
|
|
|
|
+ .Where((x, o) => o.Status > EOrderStatus.WaitForAccept && o.StartTime.Value.Date == DateTime.Now.Date)
|
|
|
|
+ .Select((x, o, p) => new OrderOverviewDto
|
|
|
|
+ {
|
|
|
|
+ Id = o.Id,
|
|
|
|
+ WorkflowId = o.WorkflowId,
|
|
|
|
+ SourceChannel = o.SourceChannel,
|
|
|
|
+ SourceChannelCode = o.SourceChannelCode,
|
|
|
|
+ Title = o.Title,
|
|
|
|
+ AcceptType = o.AcceptType,
|
|
|
|
+ AcceptTypeCode = o.AcceptTypeCode,
|
|
|
|
+ HotspotId = o.HotspotId,
|
|
|
|
+ HotspotName = o.HotspotName,
|
|
|
|
+ ActualHandleOrgName = o.ActualHandleOrgName,
|
|
|
|
+ ActualHandleOrgCode = o.ActualHandleOrgCode,
|
|
|
|
+ Status = o.Status,
|
|
|
|
+ ActualHandleTime = o.ActualHandleTime,
|
|
|
|
+ ExpiredTime = o.ExpiredTime,
|
|
|
|
+ NearlyExpiredTime = o.NearlyExpiredTime,
|
|
|
|
+ StartTime = o.StartTime,
|
|
|
|
+ AreaName = p.AreaName
|
|
|
|
+ })
|
|
|
|
+ .MergeTable()
|
|
|
|
+ .OrderByDescending(d => d.StartTime)
|
|
|
|
+ .Take(50)
|
|
|
|
+ .ToListAsync();
|
|
|
|
+
|
|
|
|
+ return _mapper.Map<List<OrderOverviewDto>>(list);
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
- /// 部门满意度排行榜
|
|
|
|
|
|
+ /// 右上部门满意度排行榜
|
|
/// </summary>
|
|
/// </summary>
|
|
/// <param name="StartDate"></param>
|
|
/// <param name="StartDate"></param>
|
|
/// <param name="EndDate"></param>
|
|
/// <param name="EndDate"></param>
|
|
@@ -328,47 +326,106 @@ namespace Hotline.Api.Controllers.Bigscreen
|
|
return list;
|
|
return list;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 右中工单月份趋势图
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ [AllowAnonymous]
|
|
|
|
+ [HttpGet("order-monthly-trend")]
|
|
|
|
+ public async Task<List<OrderMonthlyTrendDto>> GetOrderMonthlyTrendStatisticsAsync(int Year)
|
|
|
|
+ {
|
|
|
|
+ if (Year == 0)
|
|
|
|
+ Year = DateTime.Now.Year;
|
|
|
|
+
|
|
|
|
+ int monthCount = 12;
|
|
|
|
+ DateTime StartDate = DateTime.Parse(Year + "-01-01 00:00:00");
|
|
|
|
+ DateTime EndDate = StartDate.AddYears(1).AddSeconds(-1);
|
|
|
|
+ if (Year == DateTime.Now.Year)
|
|
|
|
+ {
|
|
|
|
+ monthCount = DateTime.Now.Month;
|
|
|
|
+ EndDate = DateTime.Now;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var queryData = await _enforcementOrdersRepository.Queryable()
|
|
|
|
+ .LeftJoin<Order>((x, o) => x.Id == o.Id)
|
|
|
|
+ .Where((x, o) => o.Id != null)
|
|
|
|
+ .Where((x, o) => o.Status > EOrderStatus.WaitForAccept && o.StartTime >= StartDate && o.StartTime <= EndDate)
|
|
|
|
+ .Select((x, o) => new
|
|
|
|
+ {
|
|
|
|
+ o.Id,
|
|
|
|
+ Month = o.StartTime.Value.Month
|
|
|
|
+ })
|
|
|
|
+ .MergeTable()
|
|
|
|
+ .GroupBy(x => x.Month)
|
|
|
|
+ .Select(x => new OrderMonthlyTrendDto
|
|
|
|
+ {
|
|
|
|
+ Month = x.Month,
|
|
|
|
+ SumCount = SqlFunc.AggregateCount(x.Month)
|
|
|
|
+ })
|
|
|
|
+ .ToListAsync();
|
|
|
|
+
|
|
|
|
+ var orderMonthlyTrends = new List<OrderMonthlyTrendDto>();
|
|
|
|
+ for (int i = 1; i <= monthCount; i++)
|
|
|
|
+ {
|
|
|
|
+ var data = queryData.Find(p => p.Month == i);
|
|
|
|
+ var SumCount = 0;
|
|
|
|
+ if (data != null)
|
|
|
|
+ SumCount = data.SumCount;
|
|
|
|
+ orderMonthlyTrends.Add(new OrderMonthlyTrendDto { Month = i, SumCount = SumCount });
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ return orderMonthlyTrends;
|
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
- /// 占比分析
|
|
|
|
|
|
+ /// 右下占比分析
|
|
/// </summary>
|
|
/// </summary>
|
|
/// <param name="StartDate"></param>
|
|
/// <param name="StartDate"></param>
|
|
/// <param name="EndDate"></param>
|
|
/// <param name="EndDate"></param>
|
|
/// <param name="IsSource"></param>
|
|
/// <param name="IsSource"></param>
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
[AllowAnonymous]
|
|
[AllowAnonymous]
|
|
- [HttpGet("order-source-accepttype-statistics")]
|
|
|
|
- public async Task<List<OrderSourceAndAcceptTtoeStatisticsDto>> OrderSourceAndAcceptTtoeStatistics(DateTime StartDate, DateTime EndDate, bool IsSource)
|
|
|
|
|
|
+ [HttpGet("order-proportion-statistics")]
|
|
|
|
+ public async Task<List<OrderProportionStatisticsDto>> GetOrderProportionStatisticsAsync(DateTime StartDate, DateTime EndDate, bool IsSource)
|
|
{
|
|
{
|
|
EndDate = EndDate.AddDays(1).AddSeconds(-1);
|
|
EndDate = EndDate.AddDays(1).AddSeconds(-1);
|
|
|
|
|
|
- int SumCount = await _orderRepository.Queryable(false, false, false)
|
|
|
|
- .Where(x => x.StartTime >= StartDate && x.StartTime <= EndDate && x.Status > EOrderStatus.WaitForAccept).CountAsync();
|
|
|
|
|
|
+ var SumCount = await _enforcementOrdersRepository.Queryable()
|
|
|
|
+ .LeftJoin<Order>((x, o) => x.Id == o.Id)
|
|
|
|
+ .Where((x, o) => o.Id != null)
|
|
|
|
+ .Where((x, o) => o.StartTime >= StartDate && o.StartTime <= EndDate && o.Status > EOrderStatus.WaitForAccept)
|
|
|
|
+ .CountAsync();
|
|
|
|
+
|
|
if (IsSource)
|
|
if (IsSource)
|
|
{
|
|
{
|
|
- var list = await _orderRepository.Queryable(false, false, false)
|
|
|
|
- .Where(x => x.StartTime >= StartDate && x.StartTime <= EndDate && x.Status > EOrderStatus.WaitForAccept)
|
|
|
|
- .GroupBy(x => new { x.SourceChannelCode, x.SourceChannel })
|
|
|
|
- .Select(x => new OrderSourceAndAcceptTtoeStatisticsDto()
|
|
|
|
|
|
+ var list = await _enforcementOrdersRepository.Queryable()
|
|
|
|
+ .LeftJoin<Order>((x, o) => x.Id == o.Id)
|
|
|
|
+ .Where((x, o) => o.Id != null)
|
|
|
|
+ .Where((x, o) => o.StartTime >= StartDate && o.StartTime <= EndDate && o.Status > EOrderStatus.WaitForAccept)
|
|
|
|
+ .GroupBy((x, o) => new { o.SourceChannelCode, o.SourceChannel })
|
|
|
|
+ .Select((x, o) => new OrderProportionStatisticsDto()
|
|
{
|
|
{
|
|
- Name = x.SourceChannel,
|
|
|
|
|
|
+ Name = o.SourceChannel,
|
|
SumCount = SumCount,
|
|
SumCount = SumCount,
|
|
- HasCount = SqlFunc.AggregateCount(x.SourceChannel)
|
|
|
|
- }).ToListAsync();
|
|
|
|
|
|
+ HasCount = SqlFunc.AggregateCount(o.SourceChannel)
|
|
|
|
+ })
|
|
|
|
+ .ToListAsync();
|
|
return list;
|
|
return list;
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- var list = await _orderRepository.Queryable(false, false, false)
|
|
|
|
- .Where(x => x.StartTime >= StartDate && x.StartTime <= EndDate && x.Status > EOrderStatus.WaitForAccept)
|
|
|
|
- .GroupBy(x => new { x.AcceptTypeCode, x.AcceptType })
|
|
|
|
- .Select(x => new OrderSourceAndAcceptTtoeStatisticsDto()
|
|
|
|
|
|
+ var list = await _enforcementOrdersRepository.Queryable()
|
|
|
|
+ .LeftJoin<Order>((x, o) => x.Id == o.Id)
|
|
|
|
+ .Where((x, o) => o.Id != null)
|
|
|
|
+ .Where((x, o) => o.StartTime >= StartDate && o.StartTime <= EndDate && o.Status > EOrderStatus.WaitForAccept)
|
|
|
|
+ .GroupBy((x, o) => new { o.AcceptTypeCode, o.AcceptType })
|
|
|
|
+ .Select((x, o) => new OrderProportionStatisticsDto()
|
|
{
|
|
{
|
|
- Name = x.AcceptType,
|
|
|
|
|
|
+ Name = o.AcceptType,
|
|
SumCount = SumCount,
|
|
SumCount = SumCount,
|
|
- HasCount = SqlFunc.AggregateCount(x.AcceptTypeCode),
|
|
|
|
- }).ToListAsync();
|
|
|
|
|
|
+ HasCount = SqlFunc.AggregateCount(o.AcceptTypeCode),
|
|
|
|
+ })
|
|
|
|
+ .ToListAsync();
|
|
return list;
|
|
return list;
|
|
}
|
|
}
|
|
}
|
|
}
|