SnapshotOrderController.cs 11 KB

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