SnapshotOrderController.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. using Amazon.Runtime.Internal.Transform;
  2. using Hotline.Application.FlowEngine;
  3. using Hotline.Application.Snapshot.Contracts;
  4. using Hotline.Application.Snapshot;
  5. using Hotline.Application.Snapshot.Contracts;
  6. using Hotline.Caching.Interfaces;
  7. using Hotline.Caching.Services;
  8. using Hotline.Configurations;
  9. using Hotline.FlowEngine.Definitions;
  10. using Hotline.FlowEngine.Workflows;
  11. using Hotline.Orders;
  12. using Hotline.Repository.SqlSugar.Extensions;
  13. using Hotline.Repository.SqlSugar.Snapshot;
  14. using Hotline.Settings;
  15. using Hotline.Share.Dtos;
  16. using Hotline.Share.Dtos.Snapshot;
  17. using Hotline.Share.Enums.FlowEngine;
  18. using Hotline.Share.Enums.Order;
  19. using Hotline.Share.Enums.Snapshot;
  20. using Hotline.Share.Tools;
  21. using Hotline.Snapshot;
  22. using Hotline.Snapshot.IRepository;
  23. using Mapster;
  24. using Microsoft.AspNetCore.Mvc;
  25. using Microsoft.Extensions.Options;
  26. using System.ComponentModel;
  27. using System.Text;
  28. using Hotline.Application.OrderApp;
  29. using XF.Domain.Authentications;
  30. using XF.Domain.Exceptions;
  31. using XF.Domain.Repository;
  32. using XF.Utility.EnumExtensions;
  33. namespace Hotline.Api.Controllers.Snapshot;
  34. /// <summary>
  35. /// 随手拍工单
  36. /// </summary>
  37. [Description("随手拍工单")]
  38. public class SnapshotOrderController : BaseController
  39. {
  40. private readonly IOrderSnapshotRepository _orderSnapshotRepository;
  41. private readonly IOrderSnapshotApplication _orderSnapshotApplication;
  42. private readonly ISystemDicDataCacheManager _systemDicDataCacheManager;
  43. private readonly ISystemAreaDomainService _systemAreaDomainService;
  44. private readonly IIndustryRepository _industryRepository;
  45. private readonly ISessionContext _sessionContext;
  46. private readonly IWorkflowDomainService _workflowDomainService;
  47. private readonly IOrderRepository _orderRepository;
  48. private readonly IWorkflowApplication _workflowApplication;
  49. private readonly IRepository<WorkflowDefinition> _workflowDefinitionRepository;
  50. private readonly IOrderApplication _orderApplication;
  51. private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
  52. public SnapshotOrderController(IOrderSnapshotRepository orderSnapshotRepository, IOrderSnapshotApplication orderSnapshotApplication, ISystemAreaDomainService systemAreaDomainService, ISystemDicDataCacheManager systemDicDataCacheManager, IIndustryRepository industryRepository, ISessionContext sessionContext, IWorkflowDomainService workflowDomainService, IOrderRepository orderRepository, IWorkflowApplication workflowApplication, IRepository<WorkflowDefinition> workflowDefinitionRepository, IOrderApplication orderApplication, IOptionsSnapshot<AppConfiguration> appOptions)
  53. {
  54. _orderSnapshotRepository = orderSnapshotRepository;
  55. _orderSnapshotApplication = orderSnapshotApplication;
  56. _systemAreaDomainService = systemAreaDomainService;
  57. _systemDicDataCacheManager = systemDicDataCacheManager;
  58. _industryRepository = industryRepository;
  59. _sessionContext = sessionContext;
  60. _workflowDomainService = workflowDomainService;
  61. _orderRepository = orderRepository;
  62. _workflowApplication = workflowApplication;
  63. _workflowDefinitionRepository = workflowDefinitionRepository;
  64. _orderApplication = orderApplication;
  65. _appOptions = appOptions;
  66. }
  67. /// <summary>
  68. /// 随手拍所有工单集合
  69. /// </summary>
  70. /// <param name="dto"></param>
  71. /// <returns></returns>
  72. [HttpGet("order")]
  73. public async Task<PagedDto<OrderSnapshotItemsOutDto>> GetOrderSnapshotItems([FromQuery] OrderSnapshotItemsInDto dto)
  74. => (await _orderSnapshotApplication.GetOrderSnapshotItems(dto).ToPagedListAsync(dto)).ToPaged();
  75. /// <summary>
  76. /// 设为重点
  77. /// </summary>
  78. /// <param name="dto"></param>
  79. /// <returns></returns>
  80. [HttpPut("isemphasis")]
  81. public async Task UpdateIsEmphasisAsync([FromBody] UpdateIsEmphasisInDto dto)
  82. => await _orderSnapshotApplication.UpdateIsEmphasisAsync(dto);
  83. /// <summary>
  84. /// 电气焊作业申报工单集合
  85. /// </summary>
  86. /// <param name="dto"></param>
  87. /// <returns></returns>
  88. [HttpGet("order/electrogas")]
  89. public async Task<PagedDto<OrderSnapshotElectrogasItemsOutDto>> GetOrderSnapshotElectrogasItems([FromQuery] OrderSnapshotItemsInDto dto)
  90. => (await _orderSnapshotApplication.GetOrderSnapshotElectrogasItems(dto).ToPagedListAsync(dto)).ToPaged();
  91. /// <summary>
  92. /// 随手拍所有工单页面基础信息
  93. /// </summary>
  94. [HttpGet("order/basedata")]
  95. public async Task<Dictionary<string, object>> GetOrderSnapshotItemsDatabaseAsync()
  96. {
  97. IList<Kv> steps = new List<Kv>();
  98. await _workflowDefinitionRepository.Queryable()
  99. .Where(m => m.Status == EDefinitionStatus.Enable && m.Code == "gdbl")
  100. .OrderByDescending(m => m.Version)
  101. .Select(m => new { m.Id, m.Steps })
  102. .FirstAsync().Then(async workflowSteps =>
  103. {
  104. steps = workflowSteps.Steps.Adapt<IList<NameCodeDto>>()
  105. .ToList().Select(m => new Kv
  106. {
  107. Key = m.Code,
  108. Value = m.Name,
  109. }).ToList();
  110. });
  111. return new Dictionary<string, object>
  112. {
  113. { "orderStatus", EnumExts.GetDescriptions<EOrderStatus>()},
  114. { "area", await _systemAreaDomainService.GetAreaKeyValue(parentId: _appOptions.Value.AreaCode)},
  115. { "steps", steps},
  116. { "orderTags", _systemDicDataCacheManager.OrderTag},
  117. { "industry", await _industryRepository.Queryable().Select(d => new { d.Id, d.Name, }).ToListAsync()},
  118. { "acceptType", _systemDicDataCacheManager.AcceptType.Adapt<List<Kv>>() }
  119. };
  120. }
  121. /// <summary>
  122. /// 获取网格员回复集合
  123. /// </summary>
  124. /// <param name="dto"></param>
  125. /// <returns></returns>
  126. [HttpGet("guider/reply")]
  127. public async Task<PagedDto<GuiderReplyItemsOutDto>> GetGuiderReplyItems([FromQuery] GuiderReplyItemsInDto dto)
  128. => (await _orderSnapshotApplication.GetGuiderReplyItems(dto).ToPagedListAsync(dto)).ToPaged();
  129. /// <summary>
  130. /// 获取工单标注集合
  131. /// </summary>
  132. /// <param name="dto"></param>
  133. /// <returns></returns>
  134. [HttpGet("label")]
  135. public async Task<PagedDto<SignOrderSnapshotItemsOutDto>> GetSignOrderSnapshotItems([FromQuery] SignOrderSnapshotItemsInDto dto)
  136. => (await _orderSnapshotApplication.GetSignOrderSnapshotItems(dto).ToPagedListAsync(dto)).ToPaged();
  137. /// <summary>
  138. /// 获取工单已经标签集合
  139. /// </summary>
  140. /// <param name="dto"></param>
  141. /// <returns></returns>
  142. [HttpGet("labeled")]
  143. public async Task<PagedDto<LabeledOrderSnapshotItemsOutDto>> GetLabeledOrderSnapshotItems([FromQuery] LabeledOrderSnapshotItemsInDto dto)
  144. => (await _orderSnapshotApplication.GetLabeledOrderSnapshotItems(dto).ToPagedListAsync(dto)).ToPaged();
  145. /// <summary>
  146. /// 标签详情
  147. /// </summary>
  148. /// <param name="id"></param>
  149. /// <returns></returns>
  150. [HttpGet("label/{id}")]
  151. public async Task<LabelOrderSnapshotDetailOutDto> GetLabelOrderSnapshotDetailAsync(string id)
  152. {
  153. var order = await _orderRepository.Queryable()
  154. .LeftJoin<OrderSnapshot>((order, snapshot) => order.Id == snapshot.Id)
  155. .Where((order, snapshot) => order.Id == id)
  156. .Select((order, snapshot) => new LabelOrderSnapshotDetailOutDto { Id = order.Id, Title = order.Title, Lables = snapshot.Labels })
  157. .FirstAsync();
  158. var snapshot = await _orderSnapshotRepository.GetAsync(id, HttpContext.RequestAborted);
  159. order.Lables = snapshot.Labels;
  160. order.LabelsBaseData = _systemDicDataCacheManager.SnapshotOrderLabel;
  161. return order;
  162. }
  163. /// <summary>
  164. /// 修改工单标签
  165. /// </summary>
  166. /// <param name="dto"></param>
  167. /// <returns></returns>
  168. [HttpPut("label")]
  169. public async Task UpdateLabelOrderSnapshotAsync([FromBody] UpdateLabelOrderSnapshotInDto dto)
  170. => await _orderSnapshotApplication.UpdateLabelAsync(dto.Id, dto.SnapshotLabels);
  171. /// <summary>
  172. /// 获取工单标签日志集合
  173. /// </summary>
  174. /// <param name="dto"></param>
  175. /// <returns></returns>
  176. [HttpGet("label/log")]
  177. public async Task<PagedDto<LabelOrderSnapshotLogItemsOutDto>> GetLabelOrderSnapshotLogItems([FromQuery] LabelOrderSnapshotLogItemsInDto dto)
  178. => (await _orderSnapshotApplication.GetLabelOrderSnapshotLogItems(dto).ToPagedListAsync(dto)).ToPaged();
  179. /// <summary>
  180. /// 随手拍公开集合
  181. /// </summary>
  182. /// <param name="dto"></param>
  183. /// <returns></returns>
  184. [HttpGet("publish")]
  185. public async Task<PagedDto<GetOrderSnapshotPublishItemsOutDto>> GetOrderSnapshotPublishItems([FromQuery] GetOrderSnapshotPublishItemsInDto dto)
  186. => (await _orderSnapshotApplication.GetOrderSnapshotPublishItems(dto).ToPagedListAsync(dto)).ToPaged();
  187. /// <summary>
  188. /// 随手拍公开详情
  189. /// </summary>
  190. /// <param name="id">工单Id</param>
  191. /// <returns></returns>
  192. [HttpGet("publish/{id}")]
  193. public async Task<GetOrderSnapshotPublishDetailOutDto> GetOrderSnapshotPublishDetailAsync(string id)
  194. => await _orderSnapshotApplication.GetOrderSnapshotPublishDetailAsync(id);
  195. /// <summary>
  196. /// 添加公开审核
  197. /// </summary>
  198. /// <returns></returns>
  199. [HttpPost("publish")]
  200. public async Task AddOrderSnapshotPublishItemsAsync([FromBody] AddSnapshotOrderPublishInDto dto)
  201. => await _orderSnapshotApplication.AddOrderPublishAsync(dto, HttpContext.RequestAborted);
  202. /// <summary>
  203. /// 随手拍公开审批集合
  204. /// </summary>
  205. /// <returns></returns>
  206. [HttpGet("publish/audit")]
  207. public async Task<PagedDto<GetOrderSnapshotPublishAuditItemsOutDto>> GetOrderSnapshotPublishAuditItems([FromQuery] GetOrderSnapshotPublishAuditItemsInDto dto)
  208. => (await _orderSnapshotApplication.GetOrderSnapshotPublishAuditItems(dto).ToPagedListAsync(dto)).ToPaged();
  209. /// <summary>
  210. /// 审核随手拍公开申请通过/不通过
  211. /// </summary>
  212. /// <returns></returns>
  213. [HttpPut("publish/status")]
  214. public async Task UpdateOrderSnapshotPublishStatusAsync([FromBody] UpdateOrderSnapshotPublishStatusInDto dto)
  215. => await _orderSnapshotApplication.UpdateOrderSnapshotPublishStatusAsync(dto);
  216. /// <summary>
  217. /// 随手拍公开审批详情
  218. /// </summary>
  219. /// <param name="id"></param>
  220. /// <returns></returns>
  221. [HttpGet("publish/audit/{id}")]
  222. public async Task<GetOrderSnapshotPublishAuditDetailOutDto> GetOrderSnapshotPublishAuditDetailAsync(string id)
  223. => await _orderSnapshotApplication.GetOrderSnapshotPublishAuditDetailAsync(id);
  224. /// <summary>
  225. /// 批量设置随手拍公开申请不通过
  226. /// </summary>
  227. /// <returns></returns>
  228. [HttpPut("publishs/status/refuse")]
  229. public async Task UpdateOrderSnapshotPublishsStatusRefuseAsync(IList<string> ids)
  230. => await _orderSnapshotApplication.UpdateOrderSnapshotPublishsStatusRefuseAsync(ids);
  231. /// <summary>
  232. /// 随手拍公开集合基础数据
  233. /// </summary>
  234. /// <returns></returns>
  235. [HttpGet("publish/basedata")]
  236. public async Task<Dictionary<string, object>> GetOrderSnapshotPublishItemsBasedataAsync()
  237. {
  238. var industry = await _industryRepository.Queryable()
  239. .Select(d => new { d.Id, d.Name, })
  240. .ToListAsync();
  241. return new Dictionary<string, object>
  242. {
  243. { "publishStatus", EnumExts.GetDescriptions<EOrderSnapshotPublishStatus>()},
  244. { "acceptCode", _systemDicDataCacheManager.AcceptType.Adapt<List<Kv>>() },
  245. { "orderStatus", EnumExts.GetDescriptions<EOrderStatus>()},
  246. { "area", await _systemAreaDomainService.GetAreaKeyValue(parentId: _appOptions.Value.AreaCode)},
  247. { "industry", industry}
  248. };
  249. }
  250. /// <summary>
  251. /// 网格员超时未回复, 处理工单
  252. /// </summary>
  253. /// <param name="id">工单Id</param>
  254. /// <returns></returns>
  255. [HttpPut("guider/timeout/{id}")]
  256. public async Task HandleFromWanggeyuanToMaskAsync(string id)
  257. {
  258. await _orderApplication.HandleFromWanggeyuanToMaskAsync(id, string.Empty, HttpContext.RequestAborted);
  259. }
  260. /// <summary>
  261. /// 市民追加奖励集合
  262. /// </summary>
  263. /// <param name="dto"></param>
  264. /// <returns></returns>
  265. [HttpGet("citizen/reward")]
  266. public async Task<PagedDto<CitizenRewardOutDto>> GetCitizenRewardItemsAsync([FromQuery] CitizenRewardInDto dto)
  267. => (await _orderSnapshotApplication.GetCitizenRewardItems(dto).ToPagedListAsync(dto)).ToPaged();
  268. }