EnforcementOrderController.cs 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704
  1. using Hotline.Application.FlowEngine;
  2. using Hotline.Caching.Interfaces;
  3. using Hotline.FlowEngine.WorkflowModules;
  4. using Hotline.JudicialManagement;
  5. using Hotline.Orders;
  6. using Hotline.Repository.SqlSugar.Extensions;
  7. using Hotline.Settings;
  8. using Hotline.Settings.TimeLimits;
  9. using Hotline.Share.Dtos;
  10. using Hotline.Share.Dtos.JudicialManagement;
  11. using Hotline.Share.Dtos.Order;
  12. using Hotline.Share.Enums.Order;
  13. using MapsterMapper;
  14. using Microsoft.AspNetCore.Mvc;
  15. using SqlSugar;
  16. using XF.Domain.Authentications;
  17. using XF.Domain.Exceptions;
  18. using XF.Domain.Repository;
  19. using XF.Utility.EnumExtensions;
  20. namespace Hotline.Api.Controllers
  21. {
  22. public class EnforcementOrderController : BaseController
  23. {
  24. private readonly IRepository<EnforcementOrders> _enforcementOrdersRepository;
  25. private readonly IRepository<JudicialComplaintsEventType> _judicialComplaintsEventTypeRepository;
  26. private readonly IRepository<EnforcementHotspot> _enforcementHotspotRepository;
  27. private readonly IMapper _mapper;
  28. private readonly IWorkflowApplication _workflowApplication;
  29. private readonly ISystemDicDataCacheManager _sysDicDataCacheManager;
  30. private readonly IRepository<SystemOrganize> _systemOrganizeRepository;
  31. private readonly ISessionContext _sessionContext;
  32. private readonly IRepository<SystemArea> _systemAreaRepository;
  33. /// <summary>
  34. ///
  35. /// </summary>
  36. /// <param name="enforcementOrdersRepository"></param>
  37. /// <param name="judicialComplaintsEventTypeRepository"></param>
  38. /// <param name="enforcementHotspotRepository"></param>
  39. /// <param name="mapper"></param>
  40. /// <param name="workflowApplication"></param>
  41. /// <param name="sysDicDataCacheManager"></param>
  42. /// <param name="systemOrganizeRepository"></param>
  43. /// <param name="sessionContext"></param>
  44. /// <param name="systemAreaRepository"></param>
  45. public EnforcementOrderController(IRepository<EnforcementOrders> enforcementOrdersRepository,
  46. IRepository<JudicialComplaintsEventType> judicialComplaintsEventTypeRepository,
  47. IRepository<EnforcementHotspot> enforcementHotspotRepository,
  48. IMapper mapper,
  49. IWorkflowApplication workflowApplication,
  50. ISystemDicDataCacheManager sysDicDataCacheManager,
  51. IRepository<SystemOrganize> systemOrganizeRepository,
  52. ISessionContext sessionContext,
  53. IRepository<SystemArea> systemAreaRepository
  54. )
  55. {
  56. _enforcementOrdersRepository = enforcementOrdersRepository;
  57. _judicialComplaintsEventTypeRepository = judicialComplaintsEventTypeRepository;
  58. _enforcementHotspotRepository = enforcementHotspotRepository;
  59. _mapper = mapper;
  60. _workflowApplication = workflowApplication;
  61. _sysDicDataCacheManager = sysDicDataCacheManager;
  62. _systemOrganizeRepository = systemOrganizeRepository;
  63. _sessionContext = sessionContext;
  64. _systemAreaRepository = systemAreaRepository;
  65. }
  66. /// <summary>
  67. /// 司法行政监督管理工单查询
  68. /// </summary>
  69. /// <param name="dto"></param>
  70. /// <returns></returns>
  71. [HttpGet("getorderlist")]
  72. public async Task<PagedDto<EnforcementOrderListDto>> GetOrderList([FromQuery] QueryEnforcementOrderDto dto)
  73. {
  74. var areaCode = _sessionContext.OrgAreaCode ?? "511500";
  75. var (total, items) = await _enforcementOrdersRepository.Queryable()
  76. .Includes(x => x.Order)
  77. .Where(d => d.Order.Id != null)
  78. .WhereIF(areaCode != "511500", d => d.Order.AreaCode.StartsWith(areaCode))
  79. .WhereIF(dto.IsEnforcementOrder.HasValue, d => d.IsEnforcementOrder == dto.IsEnforcementOrder)//是否行政执法类
  80. .WhereIF(dto.IsPassTheBuckOrder.HasValue, d => d.IsPassTheBuckOrder == dto.IsPassTheBuckOrder)//是否推诿
  81. .WhereIF(dto.IsTheClueTrue.HasValue, d => d.IsTheClueTrue == dto.IsTheClueTrue)//线索是否属实
  82. .WhereIF(!string.IsNullOrEmpty(dto.EventTypeId), d => dto.EventTypeId == d.EventTypeId)//事项分类
  83. .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Order.Title.Contains(dto.Title!)) //标题
  84. .WhereIF(!string.IsNullOrEmpty(dto.ProvinceNo), d => d.Order.ProvinceNo.Contains(dto.ProvinceNo)) //省本地编号
  85. .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.Order.No.Contains(dto.No)) //工单编码
  86. .WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.Order.AcceptTypeCode)) //受理类型
  87. .WhereIF(dto.Channels.Any(), d => dto.Channels.Contains(d.Order.SourceChannelCode)) //来源渠道
  88. .WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.Order.HotspotId)) //热点类型
  89. .WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.Order.TransferPhone.Contains(dto.TransferPhone!)) //转接号码
  90. .WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.Order.ActualHandleOrgCode)) //接办部门
  91. .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.Order.AcceptorName.Contains(dto.NameOrNo!) || d.Order.AcceptorStaffNo.Contains(dto.NameOrNo!)) //受理人/坐席
  92. .WhereIF(dto.CreationTimeStart.HasValue, d => d.Order.CreationTime >= dto.CreationTimeStart) //受理时间开始
  93. .WhereIF(dto.CreationTimeEnd.HasValue, d => d.Order.CreationTime <= dto.CreationTimeEnd) //受理时间结束
  94. .WhereIF(dto.EmergencyLevels.Any(), d => dto.EmergencyLevels.Contains(d.Order.EmergencyLevel)) //紧急程度
  95. .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.Order.FromPhone.Contains(dto.FromPhone)) //来电号码
  96. .WhereIF(!string.IsNullOrEmpty(dto.PhoneNo), d => d.Order.Contact.Contains(dto.PhoneNo!)) //联系电话
  97. .WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), d => d.Order.PushTypeCode == dto.PushTypeCode) //推送分类
  98. .WhereIF(dto.ExpiredTimeStart.HasValue, d => d.Order.ExpiredTime >= dto.ExpiredTimeStart) //超期时间开始
  99. .WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.Order.ExpiredTime <= dto.ExpiredTimeEnd) //超期时间结束
  100. .WhereIF(dto.Statuses.Any(), d => dto.Statuses.Contains(d.Order.Status)) //工单状态
  101. .WhereIF(dto.Statuses.Any(d => d == EOrderStatus.SpecialToUnAccept), d => d.Order.Status <= EOrderStatus.SpecialToUnAccept)
  102. .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.Order.ActualHandlerName.Contains(dto.ActualHandlerName)) //接办人
  103. .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), d => d.Order.ActualHandleStepCode == dto.CurrentStepCode) //当前办理节点
  104. .WhereIF(dto.ActualHandleTimeStart.HasValue, d => d.Order.ActualHandleTime >= dto.ActualHandleTimeStart) //办结时间开始
  105. .WhereIF(dto.ActualHandleTimeEnd.HasValue, d => d.Order.ActualHandleTime <= dto.ActualHandleTimeEnd) //办结时间结束
  106. .WhereIF(dto.IsOverTime == true, d => (d.Order.ExpiredTime < DateTime.Now && d.Order.Status < EOrderStatus.Filed) || (d.Order.ExpiredTime < d.Order.ActualHandleTime && d.Order.Status >= EOrderStatus.Filed)) //是 超期
  107. .WhereIF(dto.IsOverTime == false, d => (d.Order.ExpiredTime > DateTime.Now && d.Order.Status < EOrderStatus.Filed) || (d.Order.ExpiredTime > d.Order.ActualHandleTime && d.Order.Status >= EOrderStatus.Filed)) //否 超期
  108. .WhereIF(dto.IdentityType != null, d => d.Order.IdentityType == dto.IdentityType) //来电主体
  109. .WhereIF(!string.IsNullOrEmpty(dto.FromName), d => d.Order.FromName.Contains(dto.FromName)) //来电人姓名
  110. .WhereIF(dto.AreaCodes.Any(), d => dto.AreaCodes.Contains(d.Order.AreaCode)) //区域
  111. .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, x => x.Order.IsProvince == true)
  112. .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, x => x.Order.IsProvince == false)
  113. .OrderByDescending(d => d.CreationTime)
  114. .ToPagedListAsync(dto, HttpContext.RequestAborted);
  115. var data = _mapper.Map<List<EnforcementOrderListDto>>(items);
  116. if (_sessionContext.RequiredOrgId == "001188")
  117. {
  118. foreach (var item in data)
  119. {
  120. if (item.IsTheClueTrue.HasValue)
  121. item.IsShowUpdateButton = true;
  122. }
  123. }
  124. return new PagedDto<EnforcementOrderListDto>(total, data);
  125. }
  126. /// <summary>
  127. /// 列表页面基础数据
  128. /// </summary>
  129. /// <returns></returns>
  130. [HttpGet("base-data")]
  131. public async Task<object> BaseData()
  132. {
  133. var wfModule = await _workflowApplication.GetWorkflowModuleAsync(WorkflowModuleConsts.OrderHandle, HttpContext.RequestAborted);
  134. var definition = wfModule.Definition;
  135. var orgList = await _systemOrganizeRepository.Queryable().OrderBy(d => d.Id).ToTreeAsync(x => x.Children, it => it.ParentId, null);
  136. var judicialManagementOrg = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.JudicialManagementOrg);
  137. List<SystemOrganize> OrgsOptions = new();
  138. foreach (var item in judicialManagementOrg)
  139. {
  140. var tempOrg = orgList.Find(p => p.Id == item.DicDataValue);
  141. if (tempOrg != null)
  142. OrgsOptions.Add(tempOrg);
  143. }
  144. var rsp = new
  145. {
  146. AcceptTypeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.AcceptType),
  147. ChannelOptions = _sysDicDataCacheManager.GetSysDicDataCache(TimeLimitBaseDataConsts.SourceChannel),
  148. OrgsOptions,
  149. EmergencyLevelOptions = EnumExts.GetDescriptions<EEmergencyLevel>(),
  150. PushTypeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.PushType),
  151. OrderStatusOptions = EnumExts.GetDescriptions<EOrderStatus>(),
  152. CurrentStepOptions = definition?.Steps.Select(x => new Kv(x.Code, x.Name)),
  153. IdentityTypeOptions = EnumExts.GetDescriptions<EIdentityType>(),
  154. EnforcementHotspot = await _enforcementHotspotRepository.Queryable().ToTreeAsync(it => it.Children, it => it.ParentId, null, it => it.Id)
  155. };
  156. return rsp;
  157. }
  158. /// <summary>
  159. /// 获取省市区树形
  160. /// </summary>
  161. /// <returns></returns>
  162. [HttpGet("area/tree")]
  163. public async Task<List<SystemArea>> GetAreaTree()
  164. {
  165. var areaCode = _sessionContext.OrgAreaCode;
  166. if (string.IsNullOrEmpty(areaCode))
  167. areaCode = "511500";
  168. if (areaCode == "511500")
  169. {
  170. return await _systemAreaRepository.Queryable().OrderBy(x => x.Id).ToTreeAsync(x => x.Children, q => q.ParentId, "510000");
  171. }
  172. else
  173. {
  174. string parentId = "510000";
  175. var data = await _systemAreaRepository.GetAsync(p => p.Id == areaCode);
  176. if (data != null)
  177. parentId = data.ParentId;
  178. return await _systemAreaRepository.Queryable().Where(p => p.Id.StartsWith(areaCode)).OrderBy(x => x.Id).ToTreeAsync(x => x.Children, q => q.ParentId, parentId);
  179. }
  180. }
  181. /// <summary>
  182. /// 线索核实
  183. /// </summary>
  184. /// <param name="dto"></param>
  185. /// <returns></returns>
  186. [HttpPost("clue_verification")]
  187. public async Task ClueVerificationAsync([FromBody] ClueVerificationDto dto)
  188. {
  189. if (dto.OrderIds == null || dto.OrderIds.Count == 0)
  190. throw UserFriendlyException.SameMessage("工单不能为空");
  191. if (dto.IsTheClueTrue.HasValue && dto.IsTheClueTrue.Value == true)
  192. {
  193. if (string.IsNullOrEmpty(dto.EventTypeId) || string.IsNullOrEmpty(dto.EventTypeName))
  194. throw UserFriendlyException.SameMessage("事项不能为空");
  195. }
  196. foreach (var item in dto.OrderIds)
  197. {
  198. var order = await _enforcementOrdersRepository.GetAsync(p => p.Id == item, HttpContext.RequestAborted);
  199. if (order == null)
  200. throw UserFriendlyException.SameMessage("工单查询失败");
  201. order.IsTheClueTrue = dto.IsTheClueTrue;
  202. if (!string.IsNullOrEmpty(dto.EventTypeName))
  203. order.EventTypeName = dto.EventTypeName;
  204. else
  205. order.EventTypeName = "";
  206. if (!string.IsNullOrEmpty(dto.EventTypeSpliceName))
  207. order.EventTypeSpliceName = dto.EventTypeSpliceName;
  208. else
  209. order.EventTypeSpliceName = "";
  210. if (!string.IsNullOrEmpty(dto.EventTypeId))
  211. {
  212. order.EventTypeOneLevelId = dto.EventTypeId.Substring(0, 2);
  213. order.EventTypeId = dto.EventTypeId;
  214. }
  215. else
  216. {
  217. order.EventTypeOneLevelId = "";
  218. order.EventTypeId = "";
  219. }
  220. if (!order.IsTheClueTrue.HasValue || order.IsTheClueTrue.Value == false)
  221. {
  222. order.EventTypeName = "";
  223. order.EventTypeSpliceName = "";
  224. order.EventTypeOneLevelId = "";
  225. order.EventTypeId = "";
  226. }
  227. await _enforcementOrdersRepository.UpdateAsync(order, HttpContext.RequestAborted);
  228. }
  229. }
  230. /// <summary>
  231. /// 行政执法活动投诉事项类型- 获取层级分类
  232. /// </summary>
  233. /// <returns></returns>
  234. [HttpGet("treelist")]
  235. public async Task<List<JudicialComplaintsEventType>> GetTreeList()
  236. {
  237. return await _judicialComplaintsEventTypeRepository.Queryable().ToTreeAsync(it => it.Children, it => it.ParentId, null, it => it.Id);
  238. }
  239. /// <summary>
  240. /// 事项分类统计
  241. /// </summary>
  242. /// <param name="StartDate"></param>
  243. /// <param name="EndDate"></param>
  244. /// <param name="Id"></param>
  245. /// <param name="AreaCode"></param>
  246. /// <returns></returns>
  247. [HttpGet("event_classification_statistics")]
  248. public async Task<object> GetEventClassificationStatisticsAsync(DateTime StartDate, DateTime EndDate, string Id, string AreaCode)
  249. {
  250. EndDate = EndDate.AddDays(1).AddSeconds(-1);
  251. var items = await _judicialComplaintsEventTypeRepository.Queryable()
  252. .LeftJoin<EnforcementOrders>((x, o) => o.EventTypeSpliceName != null && (x.EventTypeName == o.EventTypeSpliceName || o.EventTypeSpliceName.Contains(x.EventTypeName)))
  253. .LeftJoin<Order>((x, o, p) => p.Id == o.Id)
  254. .Where((x, o, p) => p.StartTime >= StartDate && p.StartTime <= EndDate)
  255. .WhereIF(!string.IsNullOrEmpty(AreaCode), (x, o, p) => p.AreaCode == AreaCode)
  256. .Where((x, o, p) => x.ParentId == Id)
  257. .GroupBy((x, o, p) => new { x.Id, x.EventTypeName })
  258. .Select((x, o, p) => new
  259. {
  260. Id = x.Id,
  261. Name = x.EventTypeName,
  262. Num = SqlFunc.AggregateSum(SqlFunc.IIF(p.Id != null, 1, 0)),
  263. Sublevel = SqlFunc.AggregateSum(SqlFunc.IIF(x.EventTypeName != o.EventTypeName, 1, 0)) > 0,
  264. })
  265. .MergeTable()
  266. .ToListAsync();
  267. var data = await _enforcementOrdersRepository.Queryable()
  268. .Includes(x => x.Order)
  269. .Where(d => d.Order.Id != null)
  270. .Where(d => d.Order.StartTime >= StartDate && d.Order.StartTime <= EndDate)
  271. .GroupBy(d => d.Id)
  272. .Select(d => new EventClassificationOrderCountDto
  273. {
  274. TheClueIsTrue = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == true, 1, 0)),
  275. TheClueIsNotTrue = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == false, 1, 0)),
  276. EnforcementOrder = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsEnforcementOrder, 1, 0)),
  277. PassTheBuckOrder = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsPassTheBuckOrder, 1, 0))
  278. })
  279. .ToListAsync();
  280. var orderCount = new
  281. {
  282. TheClueIsTrue = data.Sum(x => x.TheClueIsTrue),
  283. TheClueIsNotTrue = data.Sum(x => x.TheClueIsNotTrue),
  284. EnforcementOrder = data.Sum(x => x.EnforcementOrder),
  285. PassTheBuckOrder = data.Sum(x => x.PassTheBuckOrder),
  286. };
  287. return new { List = items, OrderCount = orderCount };
  288. }
  289. /// <summary>
  290. /// 事项分类统计--明细
  291. /// </summary>
  292. /// <param name="dto"></param>
  293. /// <returns></returns>
  294. [HttpGet("event_classification_statistics_order_list")]
  295. public async Task<PagedDto<EnforcementOrderListDto>> GetEventClassificationStatisticsOrderListAsync([FromQuery] QueryEventClassificationStatisticsDto dto)
  296. {
  297. dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
  298. var (total, items) = await _enforcementOrdersRepository.Queryable()
  299. .Includes(x => x.Order)
  300. .Where(d => d.Order.Id != null)
  301. .Where(d => d.Order.StartTime >= dto.StartDate && d.Order.StartTime <= dto.EndDate && d.EventTypeId != null)
  302. .WhereIF(!string.IsNullOrEmpty(dto.EventTypeId), d => d.EventTypeId.StartsWith(dto.EventTypeId))
  303. .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.Order.AreaCode == dto.AreaCode)
  304. .OrderByDescending(d => d.CreationTime)
  305. .ToPagedListAsync(dto, HttpContext.RequestAborted);
  306. return new PagedDto<EnforcementOrderListDto>(total, _mapper.Map<List<EnforcementOrderListDto>>(items));
  307. }
  308. /// <summary>
  309. /// 执法部门办件统计
  310. /// </summary>
  311. /// <param name="StartDate"></param>
  312. /// <param name="EndDate"></param>
  313. /// <returns></returns>
  314. [HttpGet("enforcement_departmental_processing_statistics")]
  315. public async Task<object> GetDepartmentalProcessingStatisticsAsync(DateTime StartDate, DateTime EndDate)
  316. {
  317. EndDate = EndDate.AddDays(1).AddSeconds(-1);
  318. var data = await _enforcementOrdersRepository.Queryable()
  319. .Includes(x => x.Order)
  320. .Where(d => d.Order.Id != null)
  321. .Where(d => d.Order.StartTime >= StartDate && d.Order.StartTime <= EndDate)
  322. .GroupBy(d => new
  323. {
  324. OrgCode = d.Order.OrgLevelOneCode,
  325. OrgName = d.Order.OrgLevelOneName
  326. })
  327. .Select(d => new
  328. {
  329. OrgCode = d.Order.OrgLevelOneCode,
  330. OrgName = d.Order.OrgLevelOneName,
  331. CountNum = SqlFunc.AggregateCount(d.Order.OrgLevelOneCode),
  332. TheClueIsTrue = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == true, 1, 0)),
  333. TheClueIsNotTrue = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == false, 1, 0)),
  334. EnforcementOrder = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsEnforcementOrder, 1, 0))
  335. })
  336. .ToListAsync();
  337. return data;
  338. }
  339. /// <summary>
  340. /// 执法部门办件统计---子级
  341. /// </summary>
  342. /// <param name="StartDate"></param>
  343. /// <param name="EndDate"></param>
  344. /// <param name="OrgCode"></param>
  345. /// <returns></returns>
  346. [HttpGet("enforcement_departmental_processing_statistics_child")]
  347. public async Task<object> GetDepartmentalProcessingStatisticsChildAsync(DateTime StartDate, DateTime EndDate, string OrgCode)
  348. {
  349. EndDate = EndDate.AddDays(1).AddSeconds(-1);
  350. if (string.IsNullOrEmpty(OrgCode))
  351. throw UserFriendlyException.SameMessage("部门code不能为空!");
  352. var data = await _enforcementOrdersRepository.Queryable()
  353. .Includes(x => x.Order)
  354. .Where(d => d.Order.Id != null)
  355. .Where(d => d.Order.StartTime >= StartDate && d.Order.StartTime <= EndDate)
  356. .WhereIF(OrgCode == "001", d => d.Order.ActualHandleOrgCode == OrgCode)
  357. .WhereIF(OrgCode != "001", d => d.Order.ActualHandleOrgCode.StartsWith(OrgCode))
  358. .GroupBy(d => new
  359. {
  360. OrgCode = d.Order.ActualHandleOrgCode,
  361. OrgName = d.Order.ActualHandleOrgName
  362. })
  363. .Select(d => new
  364. {
  365. OrgCode = d.Order.ActualHandleOrgCode,
  366. OrgName = d.Order.ActualHandleOrgName,
  367. CountNum = SqlFunc.AggregateCount(d.Order.ActualHandleOrgCode),
  368. TheClueIsTrue = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == true, 1, 0)),
  369. TheClueIsNotTrue = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsTheClueTrue.HasValue && d.IsTheClueTrue.Value == false, 1, 0)),
  370. EnforcementOrder = SqlFunc.AggregateSum(SqlFunc.IIF(d.IsEnforcementOrder, 1, 0)),
  371. })
  372. .ToListAsync();
  373. return data;
  374. }
  375. /// <summary>
  376. /// 执法部门办件统计---明细
  377. /// </summary>
  378. /// <param name="dto"></param>
  379. /// <returns></returns>
  380. [HttpGet("enforcement_departmental_processing_statistics_order_list")]
  381. public async Task<PagedDto<EnforcementOrderListDto>> GetDepartmentalProcessingStatisticsOrderListAsync([FromQuery] QueryDepartmentalProcessingStatisticsDto dto)
  382. {
  383. dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
  384. var (total, items) = await _enforcementOrdersRepository.Queryable()
  385. .Includes(x => x.Order)
  386. .Where(d => d.Order.Id != null)
  387. .Where(d => d.Order.StartTime >= dto.StartDate && d.Order.StartTime <= dto.EndDate)
  388. .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == "001", d => d.Order.ActualHandleOrgCode == dto.OrgCode)
  389. .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001", d => d.Order.ActualHandleOrgCode.StartsWith(dto.OrgCode))
  390. .WhereIF(dto.TheClueIsTrue == true, d => d.IsTheClueTrue == true)
  391. .WhereIF(dto.TheClueIsNotTrue == true, d => d.IsTheClueTrue == false)
  392. .WhereIF(dto.EnforcementOrder == true, d => d.IsEnforcementOrder == true)
  393. .OrderByDescending(d => d.CreationTime)
  394. .ToPagedListAsync(dto, HttpContext.RequestAborted);
  395. return new PagedDto<EnforcementOrderListDto>(total, _mapper.Map<List<EnforcementOrderListDto>>(items));
  396. }
  397. /// <summary>
  398. /// 区域分类统计
  399. /// </summary>
  400. /// <returns></returns>
  401. [HttpGet("regional_classification_statistics")]
  402. public async Task<object> GetRegionalClassificationStatisticsAsync(DateTime StartDate, DateTime EndDate)
  403. {
  404. EndDate = EndDate.AddDays(1).AddSeconds(-1);
  405. var areaCode = _sessionContext.OrgAreaCode ?? "511500";
  406. var list = await _enforcementOrdersRepository.Queryable()
  407. .Includes(x => x.Order)
  408. .Where(x => x.Order.Id != null)
  409. .Where(x => x.Order.StartTime >= StartDate && x.Order.StartTime <= EndDate)
  410. .LeftJoin<SystemArea>((x, o) => x.Order.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) == o.Id)
  411. .Where((x, o) => x.Order.Status >= EOrderStatus.Filed)
  412. .WhereIF(areaCode != "511500", (x, o) => x.Order.AreaCode.StartsWith(areaCode))
  413. .GroupBy((x, o) => new
  414. {
  415. AreaCode = x.Order.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
  416. o.AreaName,
  417. })
  418. .Select((x, o) => new
  419. {
  420. AreaCode = x.Order.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
  421. AreaName = o.AreaName,
  422. OrderCountNum = SqlFunc.AggregateCount(x.Order.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))),
  423. TheClueIsTrue = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsTheClueTrue.HasValue && x.IsTheClueTrue.Value == true, 1, 0)),
  424. TheClueIsNotTrue = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsTheClueTrue.HasValue && x.IsTheClueTrue.Value == false, 1, 0)),
  425. EnforcementOrder = SqlFunc.AggregateSum(SqlFunc.IIF(x.IsEnforcementOrder, 1, 0))
  426. }).MergeTable()
  427. .Where(x => x.AreaCode != "519800" && x.AreaCode != "519900")
  428. .OrderByDescending(it => it.OrderCountNum)
  429. .ToListAsync();
  430. return list;
  431. }
  432. /// <summary>
  433. /// 区域分类统计---明细
  434. /// </summary>
  435. /// <param name="dto"></param>
  436. /// <returns></returns>
  437. [HttpGet("regional_classification_statistics_order_list")]
  438. public async Task<PagedDto<EnforcementOrderListDto>> GetRegionalClassificationStatisticsOrderListAsync([FromQuery] QueryRegionalClassificationStatisticsDto dto)
  439. {
  440. dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
  441. var (total, items) = await _enforcementOrdersRepository.Queryable()
  442. .Includes(x => x.Order)
  443. .Where(d => d.Order.Id != null)
  444. .Where(d => d.Order.StartTime >= dto.StartDate && d.Order.StartTime <= dto.EndDate)
  445. .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.Order.AreaCode.StartsWith(dto.AreaCode))
  446. .WhereIF(dto.TheClueIsTrue == true, d => d.IsTheClueTrue == true)
  447. .WhereIF(dto.TheClueIsNotTrue == true, d => d.IsTheClueTrue == false)
  448. .WhereIF(dto.EnforcementOrder == true, d => d.IsEnforcementOrder == true)
  449. .OrderByDescending(d => d.CreationTime)
  450. .ToPagedListAsync(dto, HttpContext.RequestAborted);
  451. return new PagedDto<EnforcementOrderListDto>(total, _mapper.Map<List<EnforcementOrderListDto>>(items));
  452. }
  453. /// <summary>
  454. /// 部门满意度统计
  455. /// </summary>
  456. /// <param name="StartDate"></param>
  457. /// <param name="EndDate"></param>
  458. /// <param name="TypeId">1:办件结果 2:办件态度</param>
  459. /// <returns></returns>
  460. [HttpGet("enforcement_visit_org_satisfaction_statistics")]
  461. public async Task<object> GetVisitAndOrgSatisfactionStatisticsAsync(DateTime StartDate, DateTime EndDate, int TypeId)
  462. {
  463. EndDate = EndDate.AddDays(1).AddSeconds(-1);
  464. var list = await _enforcementOrdersRepository.Queryable()
  465. .LeftJoin<OrderVisit>((x, o) => x.Id == o.OrderId)
  466. .LeftJoin<OrderVisitDetail>((x, o, p) => o.Id == p.VisitId)
  467. .Where((x, o, p) => o.VisitTime >= StartDate && o.VisitTime <= EndDate && p.VisitTarget == EVisitTarget.Org && o.VisitState == EVisitState.Visited && !string.IsNullOrEmpty(p.VisitOrgCode))
  468. .GroupBy((x, o, p) => new
  469. {
  470. VisitOrgCode = p.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
  471. })
  472. .Select((x, o, p) => new VisitAndOrgSatisfactionStatisticsDto()
  473. {
  474. OrgCode = p.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
  475. TotalSumCount = SqlFunc.AggregateCount(p.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))),
  476. 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))),//非常满意数
  477. 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))), //满意数
  478. 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))),//视为满意
  479. 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))),//默认满意
  480. 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))),//不满意
  481. 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))),//未做评价
  482. 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))),//未接通
  483. })
  484. .MergeTable()
  485. .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
  486. .Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
  487. {
  488. OrgName = o.Name,
  489. OrgCode = it.OrgCode,
  490. OrgType = o.OrgType,
  491. TotalSumCount = it.TotalSumCount,
  492. VerySatisfiedCount = it.VerySatisfiedCount,//非常满意数
  493. SatisfiedCount = it.SatisfiedCount, //满意数
  494. RegardedAsSatisfiedCount = it.RegardedAsSatisfiedCount,//视为满意
  495. DefaultSatisfiedCount = it.DefaultSatisfiedCount,//默认满意
  496. NoSatisfiedCount = it.NoSatisfiedCount,//不满意
  497. NoEvaluateCount = it.NoEvaluateCount,//未做评价
  498. NoPutThroughCount = it.NoPutThroughCount,//未接通
  499. })
  500. .ToListAsync();
  501. var sumModel = new VisitAndOrgSatisfactionStatisticsDto()
  502. {
  503. OrgName = "总计",
  504. TotalSumCount = list.Sum(x => x.TotalSumCount),
  505. VerySatisfiedCount = list.Sum(x => x.VerySatisfiedCount),
  506. SatisfiedCount = list.Sum(x => x.SatisfiedCount),
  507. RegardedAsSatisfiedCount = list.Sum(x => x.RegardedAsSatisfiedCount),
  508. DefaultSatisfiedCount = list.Sum(x => x.DefaultSatisfiedCount),
  509. NoSatisfiedCount = list.Sum(x => x.NoSatisfiedCount),
  510. NoEvaluateCount = list.Sum(x => x.NoEvaluateCount),
  511. NoPutThroughCount = list.Sum(x => x.NoPutThroughCount),
  512. };
  513. return new { DataList = list, SumModel = sumModel };
  514. }
  515. /// <summary>
  516. /// 部门满意度统计----子级
  517. /// </summary>
  518. /// <param name="StartDate"></param>
  519. /// <param name="EndDate"></param>
  520. /// <param name="TypeId">1:办件结果 2:办件态度</param>
  521. /// <param name="OrgCode"></param>
  522. /// <returns></returns>
  523. [HttpGet("enforcement_visit_org_satisfaction_statistics_child")]
  524. public async Task<object> GetVisitAndOrgSatisfactionStatisticsChildAsync(DateTime StartDate, DateTime EndDate, int TypeId, string OrgCode)
  525. {
  526. EndDate = EndDate.AddDays(1).AddSeconds(-1);
  527. var list = await _enforcementOrdersRepository.Queryable()
  528. .LeftJoin<OrderVisit>((x, o) => x.Id == o.OrderId)
  529. .LeftJoin<OrderVisitDetail>((x, o, p) => o.Id == p.VisitId)
  530. .Where((x, o, p) => o.VisitTime >= StartDate && o.VisitTime <= EndDate && p.VisitTarget == EVisitTarget.Org)
  531. .Where((x, o, p) => o.VisitState == EVisitState.Visited && !string.IsNullOrEmpty(p.VisitOrgCode))
  532. .WhereIF(!string.IsNullOrEmpty(OrgCode) && OrgCode == "001", (x, o, p) => p.VisitOrgCode == OrgCode)
  533. .WhereIF(!string.IsNullOrEmpty(OrgCode) && OrgCode != "001", (x, o, p) => p.VisitOrgCode.StartsWith(OrgCode))
  534. .GroupBy((x, o, p) => new
  535. {
  536. VisitOrgCode = p.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("9"))
  537. })
  538. .Select((x, o, p) => new VisitAndOrgSatisfactionStatisticsDto()
  539. {
  540. OrgCode = p.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("9")),
  541. TotalSumCount = SqlFunc.AggregateCount(p.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("9"))),
  542. 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))),//非常满意数
  543. 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))), //满意数
  544. 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))),//视为满意
  545. 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))),//默认满意
  546. 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))),//不满意
  547. 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))),//未做评价
  548. 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))),//未接通
  549. })
  550. .MergeTable()
  551. .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
  552. .Select((it, o) => new VisitAndOrgSatisfactionStatisticsDto()
  553. {
  554. OrgName = o.Name,
  555. OrgCode = it.OrgCode,
  556. OrgType = o.OrgType,
  557. TotalSumCount = it.TotalSumCount,
  558. VerySatisfiedCount = it.VerySatisfiedCount,//非常满意数
  559. SatisfiedCount = it.SatisfiedCount, //满意数
  560. RegardedAsSatisfiedCount = it.RegardedAsSatisfiedCount,//视为满意
  561. DefaultSatisfiedCount = it.DefaultSatisfiedCount,//默认满意
  562. NoSatisfiedCount = it.NoSatisfiedCount,//不满意
  563. NoEvaluateCount = it.NoEvaluateCount,//未做评价
  564. NoPutThroughCount = it.NoPutThroughCount,//未接通
  565. })
  566. .ToListAsync();
  567. var sumModel = new VisitAndOrgSatisfactionStatisticsDto()
  568. {
  569. OrgName = "总计",
  570. TotalSumCount = list.Sum(x => x.TotalSumCount),
  571. VerySatisfiedCount = list.Sum(x => x.VerySatisfiedCount),
  572. SatisfiedCount = list.Sum(x => x.SatisfiedCount),
  573. RegardedAsSatisfiedCount = list.Sum(x => x.RegardedAsSatisfiedCount),
  574. DefaultSatisfiedCount = list.Sum(x => x.DefaultSatisfiedCount),
  575. NoSatisfiedCount = list.Sum(x => x.NoSatisfiedCount),
  576. NoEvaluateCount = list.Sum(x => x.NoEvaluateCount),
  577. NoPutThroughCount = list.Sum(x => x.NoPutThroughCount),
  578. };
  579. return new { DataList = list, SumModel = sumModel };
  580. }
  581. /// <summary>
  582. /// 部门满意度统计---明细
  583. /// </summary>
  584. /// <param name="dto"></param>
  585. /// <returns></returns>
  586. [HttpGet("enforcement_visit_org_satisfaction_statistics_order_list")]
  587. public async Task<PagedDto<EnforcementOrgSatisfactionOrderListDto>> GetVisitAndOrgSatisfactionStatisticsOrderListAsync([FromQuery] QueryOrgSatisfactionStatisticsDto dto)
  588. {
  589. dto.EndDate = dto.EndDate.AddDays(1).AddSeconds(-1);
  590. var (total, items) = await _enforcementOrdersRepository.Queryable()
  591. .Includes(x => x.Order)
  592. .Where(x => x.Order.Id != null)
  593. .LeftJoin<OrderVisit>((x, o) => x.Id == o.OrderId)
  594. .LeftJoin<OrderVisitDetail>((x, o, p) => o.Id == p.VisitId)
  595. .Where((x, o, p) => o.VisitTime >= dto.StartDate && o.VisitTime <= dto.EndDate && p.VisitTarget == EVisitTarget.Org)
  596. .Where((x, o, p) => o.VisitState == EVisitState.Visited && !string.IsNullOrEmpty(p.VisitOrgCode))
  597. .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == "001", (x, o, p) => p.VisitOrgCode == dto.OrgCode)
  598. .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001", (x, o, p) => p.VisitOrgCode.StartsWith(dto.OrgCode))
  599. .WhereIF(dto.TypeId == 1, (x, o, p) => SqlFunc.JsonField(p.OrgProcessingResults, "Key") == dto.DateValue)
  600. .WhereIF(dto.TypeId == 2, (x, o, p) => SqlFunc.JsonField(p.OrgHandledAttitude, "Key") == dto.DateValue)
  601. .Select((x, o, p) => new EnforcementOrgSatisfactionOrderListDto
  602. {
  603. Id = x.Id,
  604. WorkflowId = x.Order.WorkflowId,
  605. VisitId = o.Id,
  606. Status = x.Order.Status,
  607. No = x.Order.No,
  608. SourceChannel = x.Order.SourceChannel,
  609. SourceChannelCode = x.Order.SourceChannelCode,
  610. FromPhone = x.Order.FromPhone,
  611. TransferPhone = x.Order.TransferPhone,
  612. FromName = x.Order.FromName,
  613. Contact = x.Order.Contact,
  614. AcceptType = x.Order.AcceptType,
  615. AcceptTypeCode = x.Order.AcceptTypeCode,
  616. EmergencyLevel = x.Order.EmergencyLevel,
  617. Title = x.Order.Title,
  618. HotspotId = x.Order.HotspotId,
  619. HotspotName = x.Order.HotspotName,
  620. HotspotSpliceName = x.Order.HotspotSpliceName,
  621. CreationTime = x.Order.CreationTime,
  622. IsProvince = x.Order.IsProvince,
  623. ProvinceNo = x.Order.ProvinceNo,
  624. ActualHandleStepName = x.Order.ActualHandleStepName,
  625. ActualHandleTime = x.Order.ActualHandleTime,
  626. ExpiredTime = x.Order.ExpiredTime,
  627. NearlyExpiredTime = x.Order.NearlyExpiredTime,
  628. FiledTime = x.Order.FiledTime,
  629. OrgLevelOneCode = x.Order.OrgLevelOneCode,
  630. OrgLevelOneName = x.Order.OrgLevelOneName,
  631. ActualHandlerName = x.Order.ActualHandlerName,
  632. StartTime = x.Order.StartTime,
  633. ActualHandleOrgName = x.Order.ActualHandleOrgName,
  634. ActualHandleOrgCode = x.Order.ActualHandleOrgCode,
  635. IsEnforcementOrder = x.IsEnforcementOrder,
  636. IsPassTheBuckOrder = x.IsPassTheBuckOrder,
  637. IsTheClueTrue = x.IsTheClueTrue,
  638. EventTypeName = x.EventTypeName,
  639. EventTypeId = x.EventTypeId,
  640. EventTypeSpliceName = x.EventTypeSpliceName,
  641. })
  642. .MergeTable()
  643. .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
  644. return new PagedDto<EnforcementOrgSatisfactionOrderListDto>(total, _mapper.Map<IReadOnlyList<EnforcementOrgSatisfactionOrderListDto>>(items));
  645. }
  646. }
  647. }