|
@@ -0,0 +1,788 @@
|
|
|
+using Hotline.Api.Filter;
|
|
|
+using Hotline.Caching.Interfaces;
|
|
|
+using Hotline.File;
|
|
|
+using Hotline.JudicialManagement;
|
|
|
+using Hotline.Orders;
|
|
|
+using Hotline.Repository.SqlSugar.Extensions;
|
|
|
+using Hotline.Settings;
|
|
|
+using Hotline.Settings.TimeLimits;
|
|
|
+using Hotline.Share.Dtos;
|
|
|
+using Hotline.Share.Dtos.JudicialManagement;
|
|
|
+using Hotline.Share.Dtos.Order;
|
|
|
+using Hotline.Share.Enums.JudicialManagement;
|
|
|
+using Hotline.Share.Enums.Order;
|
|
|
+using MapsterMapper;
|
|
|
+using Microsoft.AspNetCore.Mvc;
|
|
|
+using SqlSugar;
|
|
|
+using XF.Domain.Authentications;
|
|
|
+using XF.Domain.Exceptions;
|
|
|
+using XF.Domain.Repository;
|
|
|
+
|
|
|
+namespace Hotline.Api.Controllers
|
|
|
+{
|
|
|
+ public class JudicialManagementOrdersController : BaseController
|
|
|
+ {
|
|
|
+ private readonly IRepository<JudicialComplaintsEventType> _judicialComplaintsEventTypeRepository;
|
|
|
+ private readonly IRepository<EnforcementHotspot> _enforcementHotspotRepository;
|
|
|
+ private readonly IMapper _mapper;
|
|
|
+ private readonly ISystemDicDataCacheManager _sysDicDataCacheManager;
|
|
|
+ private readonly IRepository<SystemOrganize> _systemOrganizeRepository;
|
|
|
+ private readonly ISessionContext _sessionContext;
|
|
|
+ private readonly IRepository<SystemArea> _systemAreaRepository;
|
|
|
+ private readonly IRepository<JudicialManagementOrders> _judicialManagementOrdersRepository;
|
|
|
+ private readonly IFileRepository _fileRepository;
|
|
|
+ private readonly IJudicialManagementOrdersService _judicialManagementOrdersService;
|
|
|
+ private readonly IRepository<EnforcementOrdersHandler> _enforcementOrdersHandlerRepository;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ ///
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="judicialComplaintsEventTypeRepository"></param>
|
|
|
+ /// <param name="enforcementHotspotRepository"></param>
|
|
|
+ /// <param name="mapper"></param>
|
|
|
+ /// <param name="sysDicDataCacheManager"></param>
|
|
|
+ /// <param name="systemOrganizeRepository"></param>
|
|
|
+ /// <param name="sessionContext"></param>
|
|
|
+ /// <param name="systemAreaRepository"></param>
|
|
|
+ /// <param name="judicialManagementOrdersRepository"></param>
|
|
|
+ /// <param name="fileRepository"></param>
|
|
|
+ /// <param name="judicialManagementOrdersService"></param>
|
|
|
+ /// <param name="enforcementOrdersHandlerRepository"></param>
|
|
|
+ public JudicialManagementOrdersController(
|
|
|
+ IRepository<JudicialComplaintsEventType> judicialComplaintsEventTypeRepository,
|
|
|
+ IRepository<EnforcementHotspot> enforcementHotspotRepository,
|
|
|
+ IMapper mapper,
|
|
|
+ ISystemDicDataCacheManager sysDicDataCacheManager,
|
|
|
+ IRepository<SystemOrganize> systemOrganizeRepository,
|
|
|
+ ISessionContext sessionContext,
|
|
|
+ IRepository<SystemArea> systemAreaRepository,
|
|
|
+ IRepository<JudicialManagementOrders> judicialManagementOrdersRepository,
|
|
|
+ IFileRepository fileRepository,
|
|
|
+ IJudicialManagementOrdersService judicialManagementOrdersService,
|
|
|
+ IRepository<EnforcementOrdersHandler> enforcementOrdersHandlerRepository
|
|
|
+ )
|
|
|
+ {
|
|
|
+ _judicialComplaintsEventTypeRepository = judicialComplaintsEventTypeRepository;
|
|
|
+ _enforcementHotspotRepository = enforcementHotspotRepository;
|
|
|
+ _mapper = mapper;
|
|
|
+ _sysDicDataCacheManager = sysDicDataCacheManager;
|
|
|
+ _systemOrganizeRepository = systemOrganizeRepository;
|
|
|
+ _sessionContext = sessionContext;
|
|
|
+ _systemAreaRepository = systemAreaRepository;
|
|
|
+ _judicialManagementOrdersRepository = judicialManagementOrdersRepository;
|
|
|
+ _fileRepository = fileRepository;
|
|
|
+ _judicialManagementOrdersService = judicialManagementOrdersService;
|
|
|
+ _enforcementOrdersHandlerRepository = enforcementOrdersHandlerRepository;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 新增工单
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ [LogFilter("新增司法工单")]
|
|
|
+ public async Task<string> Add([FromBody] JudicialManagementAddOrderDto dto)
|
|
|
+ {
|
|
|
+ dto.InitAddress();
|
|
|
+ var order = _mapper.Map<JudicialManagementOrders>(dto);
|
|
|
+ order.InitId();
|
|
|
+ if (dto.Files.Any())
|
|
|
+ order.FileJson = await _fileRepository.AddFileAsync(dto.Files, order.Id, "", HttpContext.RequestAborted);
|
|
|
+ await _judicialManagementOrdersService.AddAsync(order, true, HttpContext.RequestAborted);
|
|
|
+ //处理执法部门
|
|
|
+ if (dto.EnforcementOrdersHandler != null && dto.EnforcementOrdersHandler.Any())
|
|
|
+ {
|
|
|
+ List<EnforcementOrdersHandler> enforcementOrdersHandlers = new();
|
|
|
+ foreach (var item in dto.EnforcementOrdersHandler)
|
|
|
+ {
|
|
|
+ enforcementOrdersHandlers.Add(new EnforcementOrdersHandler
|
|
|
+ {
|
|
|
+ OrderId = order.Id,
|
|
|
+ OrderNo = order.No,
|
|
|
+ OrderSoure = EOrderSoure.Enforcement,
|
|
|
+ OrgCode = item.Value,
|
|
|
+ OrgName = item.Key
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (enforcementOrdersHandlers != null && enforcementOrdersHandlers.Any())
|
|
|
+ await _enforcementOrdersHandlerRepository.AddRangeAsync(enforcementOrdersHandlers, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ return order.Id;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 更新工单信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPut]
|
|
|
+ [LogFilter("更新司法工单")]
|
|
|
+ public async Task Update([FromBody] JudicialManagementUpdateOrderDto dto)
|
|
|
+ {
|
|
|
+ dto.InitAddress();
|
|
|
+ var order = await _judicialManagementOrdersRepository.Queryable().FirstAsync(d => d.Id == dto.Id);
|
|
|
+ if (order == null)
|
|
|
+ throw UserFriendlyException.SameMessage("无效工单编号");
|
|
|
+
|
|
|
+ _mapper.Map(dto, order);
|
|
|
+ if (dto.Files.Any())
|
|
|
+ order.FileJson = await _fileRepository.AddFileAsync(dto.Files, order.Id, "", HttpContext.RequestAborted);
|
|
|
+ await _judicialManagementOrdersRepository.UpdateAsync(order, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ //处理执法部门
|
|
|
+ if (dto.EnforcementOrdersHandler != null && dto.EnforcementOrdersHandler.Any())
|
|
|
+ {
|
|
|
+ List<EnforcementOrdersHandler> enforcementOrdersHandlers = new();
|
|
|
+ foreach (var item in dto.EnforcementOrdersHandler)
|
|
|
+ {
|
|
|
+ enforcementOrdersHandlers.Add(new EnforcementOrdersHandler
|
|
|
+ {
|
|
|
+ OrderId = order.Id,
|
|
|
+ OrderNo = order.No,
|
|
|
+ OrderSoure = EOrderSoure.Enforcement,
|
|
|
+ OrgCode = item.Value,
|
|
|
+ OrgName = item.Key
|
|
|
+ });
|
|
|
+ if (enforcementOrdersHandlers != null && enforcementOrdersHandlers.Any())
|
|
|
+ {
|
|
|
+ await _enforcementOrdersHandlerRepository.RemoveAsync(p => p.OrderId == order.Id, false, HttpContext.RequestAborted);
|
|
|
+ await _enforcementOrdersHandlerRepository.AddRangeAsync(enforcementOrdersHandlers, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 受理工单
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("getownorderlist")]
|
|
|
+ public async Task<PagedDto<EnforcementOrderListDto>> GetOwnOrderList([FromQuery] QueryEnforcementOrderNewDto dto)
|
|
|
+ {
|
|
|
+ var (total, items) = await _judicialManagementOrdersRepository.Queryable()
|
|
|
+ .Where(d => d.CreatorId == _sessionContext.UserId)
|
|
|
+ .WhereIF(dto.IsEnforcementOrder.HasValue, d => d.IsEnforcementOrder == dto.IsEnforcementOrder)//是否行政执法类
|
|
|
+ .WhereIF(dto.IsPassTheBuckOrder.HasValue, d => d.IsPassTheBuckOrder == dto.IsPassTheBuckOrder)//是否推诿
|
|
|
+ .WhereIF(dto.IsTheClueTrue.HasValue, d => d.IsTheClueTrue == dto.IsTheClueTrue)//线索是否属实
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.EventTypeId), d => dto.EventTypeId == d.EventTypeId)//事项分类
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Title.Contains(dto.Title!)) //标题
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No.Contains(dto.No)) //工单编码
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), d => d.AcceptTypeCode == dto.AcceptTypeCode) //受理类型
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.ChannelCode), d => d.SourceChannelCode == dto.ChannelCode) //来源渠道
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.HotspotId), d => d.TransferPhone == dto.HotspotId) //热点类型
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName.Contains(dto.NameOrNo!) || d.AcceptorStaffNo.Contains(dto.NameOrNo!)) //受理人/坐席
|
|
|
+ .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
|
|
|
+ .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd) //受理时间结束
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.FromName), d => d.FromName == dto.FromName) //来电人姓名
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode) //区域
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgCode), d => SqlFunc.JsonListObjectAny(d.EnforcementOrdersHandler, "Value", dto.OrgCode))//执法部门
|
|
|
+ .OrderByDescending(d => d.CreationTime)
|
|
|
+ .ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ var data = _mapper.Map<List<EnforcementOrderListDto>>(items);
|
|
|
+
|
|
|
+ if (_sessionContext.RequiredOrgId == "001188")
|
|
|
+ {
|
|
|
+ foreach (var item in data)
|
|
|
+ {
|
|
|
+ if (item.IsTheClueTrue.HasValue)
|
|
|
+ item.IsShowUpdateButton = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return new PagedDto<EnforcementOrderListDto>(total, data);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 启用/禁用
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet]
|
|
|
+ public async Task Update(string id)
|
|
|
+ {
|
|
|
+ var order = await _judicialManagementOrdersRepository.GetAsync(id, HttpContext.RequestAborted);
|
|
|
+ if (order == null)
|
|
|
+ throw UserFriendlyException.SameMessage("工单查询失败");
|
|
|
+ if (order.IsItCounted)
|
|
|
+ order.IsItCounted = false;
|
|
|
+ else
|
|
|
+ order.IsItCounted = true;
|
|
|
+ await _judicialManagementOrdersRepository.UpdateAsync(order, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 查询工单详情
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("{id}")]
|
|
|
+ public async Task<JudicialManagementOrderDto> Get(string id)
|
|
|
+ {
|
|
|
+ var order = await _judicialManagementOrdersRepository.Queryable().FirstAsync(d => d.Id == id);
|
|
|
+ if (order == null)
|
|
|
+ return new();
|
|
|
+ var dto = _mapper.Map<JudicialManagementOrderDto>(order);
|
|
|
+
|
|
|
+ if (dto.FileJson != null && dto.FileJson.Any())
|
|
|
+ {
|
|
|
+ var ids = order.FileJson.Select(x => x.Id).ToList();
|
|
|
+ var files = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
|
|
|
+ dto.Files = files.Where(x => string.IsNullOrEmpty(x.FlowKey)).ToList();
|
|
|
+ }
|
|
|
+ return dto;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 删除工单
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpDelete("{id}")]
|
|
|
+ [LogFilter("删除工单")]
|
|
|
+ public async Task Remove(string id)
|
|
|
+ {
|
|
|
+ var order = await _judicialManagementOrdersRepository.GetAsync(id, HttpContext.RequestAborted);
|
|
|
+ if (order == null) return;
|
|
|
+ //if (order.Status != EOrderStatus.WaitForAccept)
|
|
|
+ // throw UserFriendlyException.SameMessage("非草稿工单不可删除");
|
|
|
+ await _judicialManagementOrdersRepository.RemoveAsync(order);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 司法行政监督管理工单查询
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("getorderlist")]
|
|
|
+ public async Task<PagedDto<EnforcementOrderListDto>> GetOrderList([FromQuery] QueryEnforcementOrderNewDto dto)
|
|
|
+ {
|
|
|
+ var areaCode = _sessionContext.OrgAreaCode ?? "511500";
|
|
|
+
|
|
|
+ var (total, items) = await _judicialManagementOrdersRepository.Queryable()
|
|
|
+ .WhereIF(areaCode != "511500", d => d.AreaCode.StartsWith(areaCode))
|
|
|
+ .WhereIF(dto.IsEnforcementOrder.HasValue, d => d.IsEnforcementOrder == dto.IsEnforcementOrder)//是否行政执法类
|
|
|
+ .WhereIF(dto.IsPassTheBuckOrder.HasValue, d => d.IsPassTheBuckOrder == dto.IsPassTheBuckOrder)//是否推诿
|
|
|
+ .WhereIF(dto.IsTheClueTrue.HasValue, d => d.IsTheClueTrue == dto.IsTheClueTrue)//线索是否属实
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.EventTypeId), d => dto.EventTypeId == d.EventTypeId)//事项分类
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Title.Contains(dto.Title!)) //标题
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No.Contains(dto.No)) //工单编码
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), d => d.AcceptTypeCode == dto.AcceptTypeCode) //受理类型
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.ChannelCode), d => d.SourceChannelCode == dto.ChannelCode) //来源渠道
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.HotspotId), d => d.TransferPhone == dto.HotspotId) //热点类型
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName.Contains(dto.NameOrNo!) || d.AcceptorStaffNo.Contains(dto.NameOrNo!)) //受理人/坐席
|
|
|
+ .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
|
|
|
+ .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd) //受理时间结束
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.FromName), d => d.FromName == dto.FromName) //来电人姓名
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode) //区域
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgCode), d => SqlFunc.JsonListObjectAny(d.EnforcementOrdersHandler, "Value", dto.OrgCode))//执法部门
|
|
|
+ .OrderByDescending(d => d.CreationTime)
|
|
|
+ .ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ var data = _mapper.Map<List<EnforcementOrderListDto>>(items);
|
|
|
+
|
|
|
+ if (_sessionContext.RequiredOrgId == "001188")
|
|
|
+ {
|
|
|
+ foreach (var item in data)
|
|
|
+ {
|
|
|
+ if (item.IsTheClueTrue.HasValue)
|
|
|
+ item.IsShowUpdateButton = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return new PagedDto<EnforcementOrderListDto>(total, data);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 列表页面基础数据
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("base-data")]
|
|
|
+ public async Task<object> BaseData()
|
|
|
+ {
|
|
|
+ var orgList = await _systemOrganizeRepository.Queryable().OrderBy(d => d.Id).ToTreeAsync(x => x.Children, it => it.ParentId, null);
|
|
|
+ var judicialManagementOrg = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.JudicialManagementOrg);
|
|
|
+
|
|
|
+ List<SystemOrganize> OrgsOptions = new();
|
|
|
+ foreach (var item in judicialManagementOrg)
|
|
|
+ {
|
|
|
+ var tempOrg = orgList.Find(p => p.Id == item.DicDataValue);
|
|
|
+ if (tempOrg != null)
|
|
|
+ OrgsOptions.Add(tempOrg);
|
|
|
+ }
|
|
|
+ var listChannelOptions = _sysDicDataCacheManager.GetSysDicDataCache(TimeLimitBaseDataConsts.SourceChannel).ToList();
|
|
|
+ var ChannelOptions = new List<Kv>();
|
|
|
+ foreach (var item in listChannelOptions)
|
|
|
+ {
|
|
|
+ ChannelOptions.Add(new Kv { Key = item.DicDataName, Value = item.DicDataValue });
|
|
|
+ }
|
|
|
+ ChannelOptions.Add(new Kv { Key = "自定义", Value = "ZDY" });
|
|
|
+ var listAcceptTypeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.AcceptType).ToList();
|
|
|
+ var AcceptTypeOptions = new List<Kv>();
|
|
|
+ foreach (var item in listAcceptTypeOptions)
|
|
|
+ {
|
|
|
+ AcceptTypeOptions.Add(new Kv { Key = item.DicDataName, Value = item.DicDataValue });
|
|
|
+ }
|
|
|
+ var rsp = new
|
|
|
+ {
|
|
|
+ AcceptTypeOptions,
|
|
|
+ ChannelOptions,
|
|
|
+ OrgsOptions,
|
|
|
+ EnforcementHotspot = await _enforcementHotspotRepository.Queryable().ToTreeAsync(it => it.Children, it => it.ParentId, null, it => it.Id)
|
|
|
+ };
|
|
|
+ return rsp;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取省市区树形
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("area/tree")]
|
|
|
+ public async Task<List<SystemArea>> GetAreaTree()
|
|
|
+ {
|
|
|
+ var areaCode = _sessionContext.OrgAreaCode;
|
|
|
+ if (string.IsNullOrEmpty(areaCode))
|
|
|
+ areaCode = "511500";
|
|
|
+ if (areaCode == "511500")
|
|
|
+ {
|
|
|
+ return await _systemAreaRepository.Queryable().OrderBy(x => x.Id).ToTreeAsync(x => x.Children, q => q.ParentId, "510000");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ string parentId = "510000";
|
|
|
+ var data = await _systemAreaRepository.GetAsync(p => p.Id == areaCode);
|
|
|
+ if (data != null)
|
|
|
+ parentId = data.ParentId;
|
|
|
+ return await _systemAreaRepository.Queryable().Where(p => p.Id.StartsWith(areaCode)).OrderBy(x => x.Id).ToTreeAsync(x => x.Children, q => q.ParentId, parentId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 线索核实
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("clue_verification")]
|
|
|
+ public async Task ClueVerificationAsync([FromBody] ClueVerificationDto dto)
|
|
|
+ {
|
|
|
+ if (dto.OrderIds == null || dto.OrderIds.Count == 0)
|
|
|
+ throw UserFriendlyException.SameMessage("工单不能为空");
|
|
|
+
|
|
|
+ if (dto.IsTheClueTrue.HasValue && dto.IsTheClueTrue.Value == true)
|
|
|
+ {
|
|
|
+ if (string.IsNullOrEmpty(dto.EventTypeId) || string.IsNullOrEmpty(dto.EventTypeName))
|
|
|
+ throw UserFriendlyException.SameMessage("事项不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach (var item in dto.OrderIds)
|
|
|
+ {
|
|
|
+ var order = await _judicialManagementOrdersRepository.GetAsync(p => p.Id == item, HttpContext.RequestAborted);
|
|
|
+ if (order == null)
|
|
|
+ throw UserFriendlyException.SameMessage("工单查询失败");
|
|
|
+
|
|
|
+ order.IsTheClueTrue = dto.IsTheClueTrue;
|
|
|
+
|
|
|
+ if (!string.IsNullOrEmpty(dto.EventTypeName))
|
|
|
+ order.EventTypeName = dto.EventTypeName;
|
|
|
+ else
|
|
|
+ order.EventTypeName = "";
|
|
|
+
|
|
|
+ if (!string.IsNullOrEmpty(dto.EventTypeSpliceName))
|
|
|
+ order.EventTypeSpliceName = dto.EventTypeSpliceName;
|
|
|
+ else
|
|
|
+ order.EventTypeSpliceName = "";
|
|
|
+
|
|
|
+ if (!string.IsNullOrEmpty(dto.EventTypeId))
|
|
|
+ {
|
|
|
+ order.EventTypeOneLevelId = dto.EventTypeId.Substring(0, 2);
|
|
|
+ order.EventTypeId = dto.EventTypeId;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ order.EventTypeOneLevelId = "";
|
|
|
+ order.EventTypeId = "";
|
|
|
+ }
|
|
|
+ if (!order.IsTheClueTrue.HasValue || order.IsTheClueTrue.Value == false)
|
|
|
+ {
|
|
|
+ order.EventTypeName = "";
|
|
|
+ order.EventTypeSpliceName = "";
|
|
|
+ order.EventTypeOneLevelId = "";
|
|
|
+ order.EventTypeId = "";
|
|
|
+ }
|
|
|
+ await _judicialManagementOrdersRepository.UpdateAsync(order, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 行政执法活动投诉事项类型- 获取层级分类
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("treelist")]
|
|
|
+ public async Task<List<JudicialComplaintsEventType>> GetTreeList()
|
|
|
+ {
|
|
|
+ return await _judicialComplaintsEventTypeRepository.Queryable().ToTreeAsync(it => it.Children, it => it.ParentId, null, it => it.Id);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 事项分类统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="StartTime"></param>
|
|
|
+ /// <param name="EndTime"></param>
|
|
|
+ /// <param name="Id"></param>
|
|
|
+ /// <param name="AreaCode"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("event_classification_statistics")]
|
|
|
+ public async Task<object> GetEventClassificationStatisticsAsync(DateTime StartTime, DateTime EndTime, string Id, string AreaCode)
|
|
|
+ {
|
|
|
+
|
|
|
+ var items = await _judicialComplaintsEventTypeRepository.Queryable()
|
|
|
+ .LeftJoin<JudicialManagementOrders>((x, o) => o.EventTypeSpliceName != null && (x.EventTypeName == o.EventTypeSpliceName || o.EventTypeSpliceName.Contains(x.EventTypeName)))
|
|
|
+ .Where((x, o) => o.CreationTime >= StartTime && o.CreationTime <= EndTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(AreaCode), (x, o) => o.AreaCode.StartsWith(AreaCode))
|
|
|
+ .Where((x, o) => x.ParentId == Id)
|
|
|
+ .GroupBy((x, o) => new { x.Id, x.EventTypeName })
|
|
|
+ .Select((x, o) => new
|
|
|
+ {
|
|
|
+ Id = x.Id,
|
|
|
+ Name = x.EventTypeName,
|
|
|
+ Num = SqlFunc.AggregateSum(SqlFunc.IIF(o.Id != null, 1, 0)),
|
|
|
+ Sublevel = SqlFunc.AggregateSum(SqlFunc.IIF(x.EventTypeName != o.EventTypeName, 1, 0)) > 0,
|
|
|
+ })
|
|
|
+ .MergeTable()
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var data = await _judicialManagementOrdersRepository.Queryable()
|
|
|
+ .Where(d => d.CreationTime >= StartTime && d.CreationTime <= EndTime)
|
|
|
+ .GroupBy(d => d.Id)
|
|
|
+ .Select(d => new EventClassificationOrderCountDto
|
|
|
+ {
|
|
|
+ TheClueIsTrue = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == true, 1, 0)),
|
|
|
+ TheClueIsNotTrue = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == false, 1, 0)),
|
|
|
+ EnforcementOrder = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsEnforcementOrder.HasValue && d.IsEnforcementOrder.Value == true, 1, 0)),
|
|
|
+ PassTheBuckOrder = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsPassTheBuckOrder, 1, 0))
|
|
|
+ })
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var orderCount = new
|
|
|
+ {
|
|
|
+ TheClueIsTrue = data.Sum(x => x.TheClueIsTrue),
|
|
|
+ TheClueIsNotTrue = data.Sum(x => x.TheClueIsNotTrue),
|
|
|
+ EnforcementOrder = data.Sum(x => x.EnforcementOrder),
|
|
|
+ PassTheBuckOrder = data.Sum(x => x.PassTheBuckOrder),
|
|
|
+ };
|
|
|
+
|
|
|
+ return new { List = items, OrderCount = orderCount };
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 事项分类统计--明细
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("event_classification_statistics_order_list")]
|
|
|
+ public async Task<PagedDto<EnforcementOrderListDto>> GetEventClassificationStatisticsOrderListAsync([FromQuery] QueryEventClassificationStatisticsDto dto)
|
|
|
+ {
|
|
|
+ dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
|
|
|
+
|
|
|
+ var (total, items) = await _judicialManagementOrdersRepository.Queryable()
|
|
|
+ .Where(d => d.CreationTime >= dto.StartTime && d.CreationTime <= dto.EndTime && d.EventTypeId != null)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.EventTypeId), d => d.EventTypeId.StartsWith(dto.EventTypeId))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode.StartsWith(dto.AreaCode))
|
|
|
+ .OrderByDescending(d => d.CreationTime)
|
|
|
+ .ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ return new PagedDto<EnforcementOrderListDto>(total, _mapper.Map<List<EnforcementOrderListDto>>(items));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 执法部门办件统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="StartTime"></param>
|
|
|
+ /// <param name="EndTime"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("enforcement_departmental_processing_statistics")]
|
|
|
+ public async Task<object> GetDepartmentalProcessingStatisticsAsync(DateTime StartTime, DateTime EndTime)
|
|
|
+ {
|
|
|
+ var data = await _enforcementOrdersHandlerRepository.Queryable()
|
|
|
+ .LeftJoin<JudicialManagementOrders>((h, o) => h.OrderId == o.Id)
|
|
|
+ .Where((x, o) => o.CreationTime >= StartTime && o.CreationTime <= EndTime)
|
|
|
+ .GroupBy((x, o) => new
|
|
|
+ {
|
|
|
+ OrgCode = x.OrgCode,
|
|
|
+ OrgName = x.OrgName
|
|
|
+ })
|
|
|
+ .Select((x, o) => new
|
|
|
+ {
|
|
|
+ OrgCode = x.OrgCode,
|
|
|
+ OrgName = x.OrgName,
|
|
|
+ CountNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.OrgCode != null, 1, 0)),
|
|
|
+ TheClueIsTrue = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsTheClueTrue.HasValue && o.IsTheClueTrue.Value == true, 1, 0)),
|
|
|
+ TheClueIsNotTrue = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsTheClueTrue.HasValue && o.IsTheClueTrue.Value == false, 1, 0)),
|
|
|
+ EnforcementOrder = SqlFunc.AggregateSum(SqlFunc.IIF(o.IsEnforcementOrder.HasValue && o.IsEnforcementOrder.Value == true, 1, 0))
|
|
|
+ })
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 执法部门办件统计---明细
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("enforcement_departmental_processing_statistics_order_list")]
|
|
|
+ public async Task<PagedDto<EnforcementOrderListDto>> GetDepartmentalProcessingStatisticsOrderListAsync([FromQuery] QueryDepartmentalProcessingStatisticsDto dto)
|
|
|
+ {
|
|
|
+ RefAsync<int> total = 0;
|
|
|
+ var queryData = await _enforcementOrdersHandlerRepository.Queryable()
|
|
|
+ .LeftJoin<JudicialManagementOrders>((h, o) => h.OrderId == o.Id)
|
|
|
+ .Where((x, o) => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Id != null)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == "001", (x, o) => x.OrgCode == dto.OrgCode)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001", (x, o) => x.OrgCode.StartsWith(dto.OrgCode))
|
|
|
+ .WhereIF(dto.TheClueIsTrue == true, (x, o) => o.IsTheClueTrue == true)
|
|
|
+ .WhereIF(dto.TheClueIsNotTrue == true, (x, o) => o.IsTheClueTrue == false)
|
|
|
+ .WhereIF(dto.EnforcementOrder == true, (x, o) => o.IsEnforcementOrder == true)
|
|
|
+ .OrderByDescending((x, o) => o.CreationTime)
|
|
|
+ .Select((x, o) => new { o })
|
|
|
+ .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ var dtos = queryData.Select(d =>
|
|
|
+ {
|
|
|
+ var dto = _mapper.Map<EnforcementOrderListDto>(d.o);
|
|
|
+ return dto;
|
|
|
+ }).ToList();
|
|
|
+ return new PagedDto<EnforcementOrderListDto>(total, dtos);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 区域分类统计
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("regional_classification_statistics")]
|
|
|
+ public async Task<object> GetRegionalClassificationStatisticsAsync(DateTime StartTime, DateTime EndTime)
|
|
|
+ {
|
|
|
+
|
|
|
+ var areaCode = _sessionContext.OrgAreaCode ?? "511500";
|
|
|
+ var list = await _judicialManagementOrdersRepository.Queryable()
|
|
|
+ .Where(x => x.CreationTime >= StartTime && x.CreationTime <= EndTime)
|
|
|
+ .LeftJoin<SystemArea>((x, o) => x.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) == o.Id)
|
|
|
+ .WhereIF(areaCode != "511500", (x, o) => x.AreaCode.StartsWith(areaCode))
|
|
|
+ .GroupBy((x, o) => new
|
|
|
+ {
|
|
|
+ AreaCode = x.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
|
|
|
+ o.AreaName,
|
|
|
+ })
|
|
|
+ .Select((x, o) => new
|
|
|
+ {
|
|
|
+ AreaCode = x.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
|
|
|
+ AreaName = o.AreaName,
|
|
|
+ OrderCountNum = SqlFunc.AggregateCount(x.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))),
|
|
|
+ TheClueIsTrue = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsTheClueTrue.HasValue && x.IsTheClueTrue.Value == true, 1, 0)),
|
|
|
+ TheClueIsNotTrue = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsTheClueTrue.HasValue && x.IsTheClueTrue.Value == false, 1, 0)),
|
|
|
+ EnforcementOrder = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsEnforcementOrder.HasValue && x.IsEnforcementOrder.Value == true, 1, 0))
|
|
|
+ }).MergeTable()
|
|
|
+ .Where(x => x.AreaCode != "519800" && x.AreaCode != "519900")
|
|
|
+ .OrderByDescending(it => it.OrderCountNum)
|
|
|
+ .ToListAsync();
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 区域分类统计---明细
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("regional_classification_statistics_order_list")]
|
|
|
+ public async Task<PagedDto<EnforcementOrderListDto>> GetRegionalClassificationStatisticsOrderListAsync([FromQuery] QueryRegionalClassificationStatisticsDto dto)
|
|
|
+ {
|
|
|
+ var (total, items) = await _judicialManagementOrdersRepository.Queryable()
|
|
|
+ .Where(d => d.CreationTime >= dto.StartTime && d.CreationTime <= dto.EndTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode.StartsWith(dto.AreaCode))
|
|
|
+ .WhereIF(dto.TheClueIsTrue == true, d => d.IsTheClueTrue == true)
|
|
|
+ .WhereIF(dto.TheClueIsNotTrue == true, d => d.IsTheClueTrue == false)
|
|
|
+ .WhereIF(dto.EnforcementOrder == true, d => d.IsEnforcementOrder == true)
|
|
|
+ .OrderByDescending(d => d.CreationTime)
|
|
|
+ .ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ return new PagedDto<EnforcementOrderListDto>(total, _mapper.Map<List<EnforcementOrderListDto>>(items));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 部门满意度统计
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="StartTime"></param>
|
|
|
+ /// <param name="EndTime"></param>
|
|
|
+ /// <param name="TypeId">1:办件结果 2:办件态度</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("enforcement_visit_org_satisfaction_statistics")]
|
|
|
+ public async Task<object> GetVisitAndOrgSatisfactionStatisticsAsync(DateTime StartTime, DateTime EndTime, int TypeId)
|
|
|
+ {
|
|
|
+ EndTime = EndTime.AddDays(1).AddSeconds(-1);
|
|
|
+
|
|
|
+ var list = await _judicialManagementOrdersRepository.Queryable()
|
|
|
+ .LeftJoin<OrderVisit>((x, o) => x.Id == o.OrderId)
|
|
|
+ .LeftJoin<OrderVisitDetail>((x, o, p) => o.Id == p.VisitId)
|
|
|
+ .Where((x, o, p) => o.VisitTime >= StartTime && o.VisitTime <= EndTime && p.VisitTarget == EVisitTarget.Org
|
|
|
+ && o.VisitState == EVisitState.Visited && !string.IsNullOrEmpty(p.VisitOrgCode) && x.OrderSoure == EOrderSoure.Hotline)
|
|
|
+ .GroupBy((x, o, p) => new
|
|
|
+ {
|
|
|
+ VisitOrgCode = p.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
|
|
|
+ })
|
|
|
+ .Select((x, o, p) => new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
+ {
|
|
|
+ OrgCode = p.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
|
|
|
+ TotalSumCount = SqlFunc.AggregateCount(p.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))),
|
|
|
+ VerySatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgProcessingResults, "Key") == "5", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == "5", 1, 0))),//非常满意数
|
|
|
+ SatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgProcessingResults, "Key") == "4", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == "4", 1, 0))), //满意数
|
|
|
+ RegardedAsSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgProcessingResults, "Key") == "-1", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == "-1", 1, 0))),//视为满意
|
|
|
+ DefaultSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgProcessingResults, "Key") == "0", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == "0", 1, 0))),//默认满意
|
|
|
+ NoSatisfiedCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgProcessingResults, "Key") == "2", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == "2", 1, 0))),//不满意
|
|
|
+ NoEvaluateCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgProcessingResults, "Key") == "7", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == "7", 1, 0))),//未做评价
|
|
|
+ NoPutThroughCount = SqlFunc.IIF(TypeId == 1, SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.OrgProcessingResults, "Key") == "6", 1, 0)), SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(p.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 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),
|
|
|
+ };
|
|
|
+
|
|
|
+
|
|
|
+ return new { DataList = list, SumModel = sumModel };
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 部门满意度统计---明细
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("enforcement_visit_org_satisfaction_statistics_order_list")]
|
|
|
+ public async Task<PagedDto<EnforcementOrgSatisfactionOrderListDto>> GetVisitAndOrgSatisfactionStatisticsOrderListAsync([FromQuery] QueryOrgSatisfactionStatisticsDto dto)
|
|
|
+ {
|
|
|
+ RefAsync<int> total = 0;
|
|
|
+ var queryData = await _judicialManagementOrdersRepository.Queryable()
|
|
|
+ .LeftJoin<OrderVisit>((x, o) => x.Id == o.OrderId)
|
|
|
+ .LeftJoin<OrderVisitDetail>((x, o, p) => o.Id == p.VisitId)
|
|
|
+ .Where((x, o, p) => o.VisitTime >= dto.StartTime && o.VisitTime <= dto.EndTime && p.VisitTarget == EVisitTarget.Org && x.OrderSoure == EOrderSoure.Hotline)
|
|
|
+ .Where((x, o, p) => o.VisitState == EVisitState.Visited && !string.IsNullOrEmpty(p.VisitOrgCode))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == "001", (x, o, p) => p.VisitOrgCode == dto.OrgCode)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001", (x, o, p) => p.VisitOrgCode.StartsWith(dto.OrgCode))
|
|
|
+ .WhereIF(dto.TypeId == 1, (x, o, p) => SqlFunc.JsonField(p.OrgProcessingResults, "Key") == dto.DateValue)
|
|
|
+ .WhereIF(dto.TypeId == 2, (x, o, p) => SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == dto.DateValue)
|
|
|
+ .Select((x, o, p) => new
|
|
|
+ {
|
|
|
+ x,
|
|
|
+ p.VisitId
|
|
|
+ })
|
|
|
+ .MergeTable()
|
|
|
+ .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ var dtos = queryData.Select(d =>
|
|
|
+ {
|
|
|
+ var dto = _mapper.Map<EnforcementOrgSatisfactionOrderListDto>(d);
|
|
|
+ return dto;
|
|
|
+ }).ToList();
|
|
|
+ return new PagedDto<EnforcementOrgSatisfactionOrderListDto>(total, dtos);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ ///// <summary>
|
|
|
+ ///// 处理司法历史工单数据
|
|
|
+ ///// </summary>
|
|
|
+ ///// <param name="Year"></param>
|
|
|
+ ///// <param name="Month"></param>
|
|
|
+ ///// <returns></returns>
|
|
|
+ //[HttpGet("add_enforcement_old_order")]
|
|
|
+ //public async Task AddEnforcementOldOrder(int Year, int Month)
|
|
|
+ //{
|
|
|
+ // DateTime StartDate = DateTime.Parse(Year + "-" + Month + "-01 00:00:00");
|
|
|
+ // DateTime EndDate = StartDate.AddMonths(1).AddSeconds(-1);
|
|
|
+
|
|
|
+ // var list = await _orderRepository.Queryable()
|
|
|
+ // .Where(p => p.CreationTime >= StartDate && p.CreationTime <= EndDate && p.Status >= EOrderStatus.Filed && p.AcceptTypeCode != "10")
|
|
|
+ // .Select(p => new EnforcementOldOrder()
|
|
|
+ // {
|
|
|
+ // Id = p.Id,
|
|
|
+ // No = p.No,
|
|
|
+ // HotspotId = p.HotspotId,
|
|
|
+ // HandleTime = p.ActualHandleTime,
|
|
|
+ // OrgLevelOneCode = p.OrgLevelOneCode,
|
|
|
+ // ActualHandleOrgCode = p.ActualHandleOrgCode
|
|
|
+ // })
|
|
|
+ // .ToListAsync();
|
|
|
+
|
|
|
+ // if (list != null && list.Count > 0)
|
|
|
+ // {
|
|
|
+ // //查询指定热点数据
|
|
|
+ // var hotList = await _enforcementHotspotRepository.Queryable().ToListAsync();
|
|
|
+
|
|
|
+ // //查询指定部门数据
|
|
|
+ // var JudicialManagementOrg = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.JudicialManagementOrg).ToList();
|
|
|
+
|
|
|
+ // foreach (var item in list)
|
|
|
+ // {
|
|
|
+ // bool isAdd = false;
|
|
|
+
|
|
|
+ // //如果是特定热点写入数据
|
|
|
+ // if (hotList.Exists(p => p.Id == item.HotspotId))
|
|
|
+ // isAdd = true;
|
|
|
+
|
|
|
+ // if (!string.IsNullOrEmpty(item.OrgLevelOneCode))
|
|
|
+ // {
|
|
|
+ // //如果是特定部门办理写入数据
|
|
|
+ // if (JudicialManagementOrg.Exists(p => p.DicDataValue.Trim() == item.OrgLevelOneCode))
|
|
|
+ // isAdd = true;
|
|
|
+ // }
|
|
|
+
|
|
|
+ // if (isAdd)
|
|
|
+ // {
|
|
|
+ // //是否存在此工单
|
|
|
+ // if (!await _enforcementOrdersRepository.AnyAsync(p => p.Id == item.Id, HttpContext.RequestAborted))
|
|
|
+ // {
|
|
|
+ // // 不存在写入
|
|
|
+ // EnforcementOrders enforcementOrders = new()
|
|
|
+ // {
|
|
|
+ // Id = item.Id,
|
|
|
+ // OrderNo = item.No,
|
|
|
+ // IsEnforcementOrder = false,
|
|
|
+ // IsTheClueTrue = null,
|
|
|
+ // IsPassTheBuckOrder = false,
|
|
|
+ // CreationTime = item.HandleTime != null ? item.HandleTime.Value : DateTime.Now
|
|
|
+ // };
|
|
|
+ // await _enforcementOrdersRepository.AddAsync(enforcementOrders, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+}
|