SnapshotOrderApplication.cs 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602
  1. using Hotline.Caching.Interfaces;
  2. using Hotline.File;
  3. using Hotline.FlowEngine.Notifications;
  4. using Hotline.FlowEngine.Workflows;
  5. using Hotline.Orders;
  6. using Hotline.Share.Attributes;
  7. using Hotline.Share.Dtos;
  8. using Hotline.Share.Dtos.File;
  9. using Hotline.Share.Dtos.FlowEngine;
  10. using Hotline.Share.Dtos.Order;
  11. using Hotline.Share.Dtos.Snapshot;
  12. using Hotline.Share.Enums.FlowEngine;
  13. using Hotline.Share.Enums.Order;
  14. using Hotline.Share.Enums.Snapshot;
  15. using Hotline.Share.Tools;
  16. using Hotline.Snapshot;
  17. using Hotline.Tools;
  18. using Mapster;
  19. using Novacode.NETCorePort;
  20. using NPOI.POIFS.Properties;
  21. using SqlSugar;
  22. using System;
  23. using System.Collections.Generic;
  24. using System.ComponentModel;
  25. using System.Linq;
  26. using System.Text;
  27. using System.Threading.Tasks;
  28. using Hotline.Share.Dtos.FlowEngine.Workflow;
  29. using XF.Domain.Authentications;
  30. using XF.Domain.Dependency;
  31. using XF.Domain.Exceptions;
  32. using XF.Utility.EnumExtensions;
  33. using Hotline.Snapshot.IRepository;
  34. using Hotline.Application.Snapshot.Contracts;
  35. namespace Hotline.Application.Snapshot;
  36. public class SnapshotOrderApplication : IOrderSnapshotApplication, IScopeDependency
  37. {
  38. private readonly IOrderSnapshotRepository _orderSnapshotRepository;
  39. private readonly IOrderRepository _orderRepository;
  40. private readonly ISnapshotOrderPublishRepository _snapshotOrderPublishRepository;
  41. private readonly ISessionContext _sessionContext;
  42. private readonly ISystemSettingCacheManager _systemSettingCacheManager;
  43. private readonly IIndustryCaseRepository _industryCaseRepository;
  44. private readonly ISystemDicDataCacheManager _systemDicDataCacheManager;
  45. private readonly IIndustryRepository _industryRepository;
  46. private readonly IFileRepository _fileRepository;
  47. private readonly ISnapshotLabelLogRepository _snapshotLabelLogRepository;
  48. private readonly IRedPackAuditRepository _redPackAuditRepository;
  49. public SnapshotOrderApplication(IOrderSnapshotRepository orderSnapshotRepository, IOrderRepository orderRepository, ISnapshotOrderPublishRepository snapshotOrderPublishRepository, ISessionContext sessionContext, ISystemSettingCacheManager systemSettingCacheManager, IIndustryCaseRepository industryCaseRepository, ISystemDicDataCacheManager systemDicDataCacheManager, IIndustryRepository industryRepository, IFileRepository fileRepository, ISnapshotLabelLogRepository snapshotLabelLogRepository, IRedPackAuditRepository redPackAuditRepository)
  50. {
  51. _orderSnapshotRepository = orderSnapshotRepository;
  52. _orderRepository = orderRepository;
  53. _snapshotOrderPublishRepository = snapshotOrderPublishRepository;
  54. _sessionContext = sessionContext;
  55. _systemSettingCacheManager = systemSettingCacheManager;
  56. _industryCaseRepository = industryCaseRepository;
  57. _systemDicDataCacheManager = systemDicDataCacheManager;
  58. _industryRepository = industryRepository;
  59. _fileRepository = fileRepository;
  60. _snapshotLabelLogRepository = snapshotLabelLogRepository;
  61. _redPackAuditRepository = redPackAuditRepository;
  62. }
  63. /// <summary>
  64. /// 添加公开工单
  65. /// </summary>
  66. /// <param name="addSnapshotOrderPublishInDto"></param>
  67. /// <param name="none"></param>
  68. /// <returns></returns>
  69. public async Task<string> AddOrderPublishAsync(AddSnapshotOrderPublishInDto dto, CancellationToken cancellation)
  70. {
  71. dto.ValidateObject();
  72. var snapshotOrder = await _orderSnapshotRepository.GetAsync(dto.OrderId)
  73. ?? throw UserFriendlyException.SameMessage("工单不存在");
  74. var order = await _orderRepository.Queryable()
  75. .Where(m => m.Id == dto.OrderId)
  76. .Select(m => new { m.Id, m.No })
  77. .FirstAsync(cancellation)
  78. ?? throw UserFriendlyException.SameMessage("工单不存在");
  79. var entity = dto.Adapt<SnapshotOrderPublish>();
  80. entity.Id = order.Id;
  81. entity.IndustryId = snapshotOrder.IndustryId;
  82. entity.IndustryName = snapshotOrder.IndustryName;
  83. entity.No = order.No;
  84. entity.Status = EOrderSnapshotPublishStatus.Pending;
  85. return await _snapshotOrderPublishRepository.AddAsync(entity, cancellation);
  86. }
  87. /// <summary>
  88. /// 获取网格员回复集合
  89. /// </summary>
  90. /// <param name="dto"></param>
  91. /// <returns></returns>
  92. public ISugarQueryable<GuiderReplyItemsOutDto> GetGuiderReplyItems(GuiderReplyItemsInDto dto)
  93. {
  94. var query = _orderSnapshotRepository.Queryable()
  95. .LeftJoin<Order>((snapshot, order) => snapshot.Id == order.Id)
  96. .Where((snapshot, order) => snapshot.ReplyResultType != null)
  97. .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order) => order.No.Contains(dto.No))
  98. .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order) => order.Title.Contains(dto.Title))
  99. .WhereIF(dto.GuiderName.NotNullOrEmpty(), (snapshot, order) => snapshot.MemberName.Contains(dto.GuiderName))
  100. .WhereIF(dto.GuiderPhoneNumber.NotNullOrEmpty(), (snapshot, order) => snapshot.MemberMobile.Contains(dto.GuiderPhoneNumber))
  101. .WhereIF(dto.NewtorkENumber.NotNullOrEmpty(), (snapshot, order) => snapshot.NetworkENumber.Contains(dto.NewtorkENumber))
  102. .WhereIF(dto.Satus.HasValue, (snapshot, order) => snapshot.ReplyResultType == dto.Satus)
  103. .WhereIF(dto.BeginCreationTime.HasValue && dto.EndCreationTime.HasValue, (snapshot, order) => order.CreationTime >= dto.BeginCreationTime && order.CreationTime <= dto.EndCreationTime)
  104. .Select((snapshot, order) => new GuiderReplyItemsOutDto
  105. {
  106. No = order.No,
  107. Title = order.Title
  108. }, true);
  109. return query;
  110. }
  111. /// <summary>
  112. /// 随手拍公开审批集合
  113. /// </summary>
  114. /// <returns></returns>
  115. public ISugarQueryable<GetOrderSnapshotPublishAuditItemsOutDto> GetOrderSnapshotPublishAuditItems(GetOrderSnapshotPublishAuditItemsInDto dto)
  116. {
  117. var query = _snapshotOrderPublishRepository.Queryable()
  118. .LeftJoin<Order>((publish, order) => publish.OrderId == order.Id)
  119. .WhereIF(dto.Status == 0, publish => publish.Status == EOrderSnapshotPublishStatus.Pending)
  120. .WhereIF(dto.Status == 1, publish => publish.Status == EOrderSnapshotPublishStatus.Agree)
  121. .WhereIF(dto.Status == 2, publish => publish.Status == EOrderSnapshotPublishStatus.Refuse)
  122. .OrderByDescending((publish, order) => new { publish.Status, publish.CreationTime })
  123. .Select((publish, order) => new GetOrderSnapshotPublishAuditItemsOutDto
  124. {
  125. Id = publish.Id,
  126. No = order.No,
  127. Title = order.Title
  128. }, true);
  129. return query;
  130. }
  131. /// <summary>
  132. /// 随手拍公开审批详情
  133. /// </summary>
  134. /// <param name="id"></param>
  135. /// <returns></returns>
  136. public async Task<GetOrderSnapshotPublishAuditDetailOutDto> GetOrderSnapshotPublishAuditDetailAsync(string id)
  137. {
  138. var publish = await _snapshotOrderPublishRepository.GetAsync(id);
  139. var order = await _orderRepository.Queryable()
  140. .Where(m => m.Id == publish.OrderId)
  141. .Select<GetOrderSnapshotPublishAuditDetailOutDto>()
  142. .FirstAsync();
  143. publish.Adapt(order);
  144. order.Id = publish.Id;
  145. return order;
  146. }
  147. /// <summary>
  148. /// 随手拍公开详情
  149. /// </summary>
  150. /// <param name="id">工单Id</param>
  151. /// <returns></returns>
  152. public async Task<GetOrderSnapshotPublishDetailOutDto> GetOrderSnapshotPublishDetailAsync(string id)
  153. {
  154. return await _orderRepository.Queryable()
  155. .Where(m => m.Id == id)
  156. .Select<GetOrderSnapshotPublishDetailOutDto>()
  157. .FirstAsync();
  158. }
  159. /// <summary>
  160. /// 随手拍公开集合
  161. /// </summary>
  162. /// <param name="dto"></param>
  163. /// <returns></returns>
  164. [ExportExcel("随手拍公开")]
  165. public ISugarQueryable<GetOrderSnapshotPublishItemsOutDto> GetOrderSnapshotPublishItems(GetOrderSnapshotPublishItemsInDto dto)
  166. {
  167. var query = _orderSnapshotRepository.Queryable(includeDeleted: true)
  168. .LeftJoin<Order>((snapshot, order) => snapshot.Id == order.Id)
  169. .LeftJoin<SnapshotOrderPublish>((snapshot, order, publish) => order.Id == publish.OrderId)
  170. .WhereIF(dto.IndustryId.NotNullOrEmpty(), snapshot => snapshot.IndustryId == dto.IndustryId)
  171. .WhereIF(dto.AreaCode.NotNullOrEmpty(), (snapshot, order) => order.AreaCode == dto.AreaCode)
  172. .WhereIF(dto.AcceptTypeCode.NotNullOrEmpty(), (snapshot, order) => order.AcceptTypeCode == dto.AcceptTypeCode)
  173. .WhereIF(dto.BeginCreationTime.HasValue && dto.EndCreationTime.HasValue, (snapshot, order) => order.CreationTime >= dto.BeginCreationTime && order.CreationTime <= dto.EndCreationTime)
  174. .WhereIF(dto.Contact.NotNullOrEmpty(), (snapshot, order) => order.Contact.Contains(dto.Contact))
  175. .WhereIF(dto.FromPhone.NotNullOrEmpty(), (snapshot, order) => order.FromPhone.Contains(dto.FromPhone))
  176. .WhereIF(dto.IsPublished.HasValue, (snapshot, order, publish) => publish.Status == EOrderSnapshotPublishStatus.Agree)
  177. .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order) => order.No.Contains(dto.No))
  178. .WhereIF(dto.OrderStatus.HasValue, (snapshot, order) => order.Status == dto.OrderStatus)
  179. .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order) => order.Title.Contains(dto.Title))
  180. .Where((snapshot, order, publish) => order.Status >= EOrderStatus.Filed)
  181. .OrderByDescending((snapshot, order, publish) => new { publish.Status, snapshot.CreationTime })
  182. .Select((snapshot, order, publish) =>
  183. new GetOrderSnapshotPublishItemsOutDto
  184. {
  185. PublishStatus = publish.Status
  186. }, true);
  187. return query;
  188. }
  189. /// <summary>
  190. /// 获取工单标记集合
  191. /// </summary>
  192. /// <param name="dto"></param>
  193. /// <returns></returns>
  194. [ExportExcel("工单标注")]
  195. public ISugarQueryable<SignOrderSnapshotItemsOutDto> GetSignOrderSnapshotItems(SignOrderSnapshotItemsInDto dto)
  196. {
  197. var query = _orderSnapshotRepository.Queryable()
  198. .LeftJoin<Order>((snapshot, order) => snapshot.Id == order.Id)
  199. .LeftJoin<WorkflowStep>((snapshot, order, step) => step.ExternalId == order.Id)
  200. .Where((snapshot, order, step) => snapshot.IndustryName == "安全隐患")
  201. .WhereIF(dto.Status == 0, (snapshot, order, step) => step.Tag == TagDefaults.OrderMark) // 全部
  202. .WhereIF(dto.Status == 1, (snapshot, order, step) => step.Tag == TagDefaults.OrderMark && step.Status != EWorkflowStepStatus.Handled && step.HandlerId == _sessionContext.UserId) // 待标记
  203. .WhereIF(dto.Status == 2, (snapshot, order, step) => step.Tag == TagDefaults.OrderMark && step.Status == EWorkflowStepStatus.Handled) // 已标记
  204. .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order, step) => order.No.Contains(dto.No))
  205. .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order, step) => order.Title.Contains(dto.Title))
  206. .OrderByDescending((snapshot, order, step) => snapshot.CreationTime)
  207. .Select((snapshot, order) => new SignOrderSnapshotItemsOutDto
  208. {
  209. OrderId = snapshot.Id,
  210. No = order.No,
  211. Title = order.Title,
  212. Content = order.Content,
  213. FullAddress = order.FullAddress,
  214. CreationTime = order.CreationTime,
  215. County = order.County,
  216. IsSafetyDepartment = snapshot.IsSafetyDepartment,
  217. NetworkENumber = snapshot.NetworkENumber,
  218. NetworkRemark = snapshot.NetworkRemark,
  219. ReplyDate = snapshot.ReplyDate,
  220. LabelTime = snapshot.SignTime,
  221. LabelUserName = snapshot.SignUserName
  222. });
  223. return query;
  224. }
  225. /// <summary>
  226. /// 批量设置随手拍公开申请不通过
  227. /// </summary>
  228. /// <returns></returns>
  229. public async Task UpdateOrderSnapshotPublishsStatusRefuseAsync(IList<string> ids)
  230. {
  231. await _snapshotOrderPublishRepository.Updateable()
  232. .SetColumns(m => m.Status, EOrderSnapshotPublishStatus.Refuse)
  233. .SetColumns(m => m.RefuseRemark, _sessionContext.UserName + "批量设置不公开")
  234. .SetColumns(m => m.RefuseAuditTime, DateTime.Now)
  235. .Where(m => ids.Contains(m.Id))
  236. .ExecuteCommandAsync();
  237. }
  238. /// <summary>
  239. /// 审核随手拍公开申请通过/不通过
  240. /// </summary>
  241. /// <returns></returns>
  242. public async Task UpdateOrderSnapshotPublishStatusAsync(UpdateOrderSnapshotPublishStatusInDto dto)
  243. {
  244. var audit = await _snapshotOrderPublishRepository.GetAsync(dto.Id)
  245. ?? throw UserFriendlyException.SameMessage("审核记录不存在");
  246. audit.Status = dto.Status;
  247. audit.AuditTime = DateTime.Now;
  248. await _snapshotOrderPublishRepository.UpdateAsync(audit);
  249. }
  250. /// <summary>
  251. /// 随手拍工单标记
  252. /// </summary>
  253. /// <param name="id"></param>
  254. /// <param name="snapshotLabels"></param>
  255. /// <returns></returns>
  256. public async Task UpdateLabelAsync(string id, IList<Kv>? labels)
  257. {
  258. if (_systemSettingCacheManager.Snapshot == false) return;
  259. var snapshot = await _orderSnapshotRepository.GetAsync(m => m.Id == id);
  260. if (snapshot == null) return;
  261. if (snapshot != null && labels.IsNullOrEmpty())
  262. {
  263. throw UserFriendlyException.SameMessage("随手拍工单标记不能为空");
  264. }
  265. snapshot!.Labels = labels;
  266. snapshot.LabelName = string.Join('|', labels!.Select(m => m.Value));
  267. //if (labels.Any(m => m.Key == "yzg"))
  268. // snapshot.IsRectifyDepartment = true;
  269. //if (labels.Any(m => m.Key == "wzg"))
  270. // snapshot.IsRectifyDepartment = false;
  271. if (labels!.Any(m => m.Key == "ss"))
  272. snapshot.IsTruthDepartment = true;
  273. if (labels!.Any(m => m.Key == "bss"))
  274. snapshot.IsTruthDepartment = false;
  275. snapshot.LabelTime = DateTime.Now;
  276. snapshot.LabelUserName = _sessionContext.UserName;
  277. snapshot.LabelUserId = _sessionContext.UserId;
  278. await _orderSnapshotRepository.UpdateAsync(snapshot);
  279. var entity = new SnapshotLabelLog
  280. {
  281. OrderId = snapshot.Id,
  282. LabelName = snapshot.LabelName,
  283. Labels = labels
  284. };
  285. await _snapshotLabelLogRepository.AddAsync(entity);
  286. }
  287. public async Task SaveOrderWorkflowInfo(NextWorkflowDto<OrderHandleFlowDto> dto)
  288. {
  289. var snapshot = await _orderSnapshotRepository.GetAsync(dto.Data.OrderId);
  290. if (snapshot is null) return;
  291. // 标记节点标记随手拍安全生产
  292. if (TagDefaults.OrderMark.ToLower() == dto.Workflow.CurrentTag?.ToLower())
  293. {
  294. snapshot.IsSafetyDepartment = dto.Data.IsSafetyDepartment;
  295. snapshot.SignUserId = _sessionContext.UserId;
  296. snapshot.SignUserName = _sessionContext.UserName;
  297. snapshot.SignTime = DateTime.Now;
  298. snapshot.SignRemark = dto.Workflow.Remark;
  299. await _orderSnapshotRepository.UpdateAsync(snapshot);
  300. return;
  301. }
  302. // 归档节点保存随手拍数据
  303. if (dto.Data.IsDangerDepartment.HasValue && dto.Data.IsRectifyDepartment.HasValue)
  304. {
  305. snapshot.IsDangerDepartment = dto.Data.IsDangerDepartment.Value;
  306. snapshot.IsRectifyDepartment = dto.Data.IsRectifyDepartment.Value;
  307. snapshot.IndustryCase = dto.Data.IndustryCase;
  308. snapshot.IsAward = dto.Data.IsAward;
  309. snapshot.AwardOpenBank = dto.Data.AwardOpenBank;
  310. snapshot.AwardName = dto.Data.AwardName;
  311. snapshot.AwardBankCardNo = dto.Data.AwardBankCardNo;
  312. snapshot.ReplenishTypeId = dto.Data.ReplenishTypeId;
  313. if (snapshot.ReplenishTypeId.NotNullOrEmpty())
  314. {
  315. snapshot.ReplenishTypeName = _systemDicDataCacheManager
  316. .SnapshotReplenishType
  317. .First(m => m.DicDataValue == snapshot.ReplenishTypeId).DicDataName;
  318. }
  319. snapshot.AwardAmount = dto.Data.AwardAmount;
  320. await _orderSnapshotRepository.UpdateAsync(snapshot);
  321. return;
  322. }
  323. // 电气焊工单办理
  324. if (dto.Data.VerifyType.NotNullOrEmpty() || dto.Data.IsCheckList.HasValue || dto.Data.CompliantType.HasValue)
  325. {
  326. snapshot.VerifyType = dto.Data.VerifyType;
  327. snapshot.IsCheckList = dto.Data.IsCheckList;
  328. snapshot.CompliantType = dto.Data.CompliantType;
  329. await _orderSnapshotRepository.UpdateAsync(snapshot);
  330. return;
  331. }
  332. }
  333. /// <summary>
  334. /// 获取工单标注日志集合
  335. /// </summary>
  336. /// <param name="dto"></param>
  337. /// <returns></returns>
  338. [ExportExcel("工单标注日志")]
  339. public ISugarQueryable<LabelOrderSnapshotLogItemsOutDto> GetLabelOrderSnapshotLogItems(LabelOrderSnapshotLogItemsInDto dto)
  340. {
  341. var query = _snapshotLabelLogRepository.Queryable()
  342. .LeftJoin<Order>((log, order) => log.OrderId == order.Id)
  343. .LeftJoin<OrderSnapshot>((log, order, snapshot) => log.OrderId == snapshot.Id)
  344. .WhereIF(dto.No.NotNullOrEmpty(), (log, order) => order.No.Contains(dto.No))
  345. .WhereIF(dto.Title.NotNullOrEmpty(), (log, order) => order.Title.Contains(dto.Title))
  346. .WhereIF(dto.Contact.NotNullOrEmpty(), (log, order) => order.Contact.Contains(dto.Contact))
  347. .WhereIF(dto.FromName.NotNullOrEmpty(), (log, order) => order.FromName.Contains(dto.FromName))
  348. .WhereIF(dto.Label.NotNullOrEmpty(), (log, order) => log.LabelName.Contains(dto.Label))
  349. .WhereIF(dto.LabelUserName.NotNullOrEmpty(), (log, order) => log.CreatorName.Contains(dto.LabelUserName))
  350. .WhereIF(dto.BeginSignTime.HasValue && dto.EndSignTime.HasValue, (log, order) => log.CreationTime >= dto.BeginSignTime && log.CreationTime <= dto.EndSignTime)
  351. .OrderByDescending((log, order, snapshot) => log.CreationTime)
  352. .Select((log, order, snapshot) => new LabelOrderSnapshotLogItemsOutDto
  353. {
  354. OrderId = order.Id,
  355. LabelUserName = log.CreatorName,
  356. LabelTime = log.CreationTime,
  357. IndustryName = snapshot.IndustryName
  358. }, true);
  359. return query;
  360. }
  361. /// <summary>
  362. /// 返回办理页面基础数据
  363. /// </summary>
  364. /// <param name="rsp"></param>
  365. /// <param name="orderId"></param>
  366. /// <returns></returns>
  367. public async Task GetNextStepsDatabaseAsync(NextStepsWithOpinionDto<RecommendStepOption> rsp, string orderId)
  368. {
  369. if (_systemSettingCacheManager.Snapshot == false) return;
  370. await _orderSnapshotRepository.Queryable()
  371. .Where(m => m.Id == orderId)
  372. .Select(m => new { m.Id, m.IndustryId, m.IsSafetyDepartment })
  373. .FirstAsync()
  374. .Then(async snapshot =>
  375. {
  376. if (snapshot.IsSafetyDepartment.HasValue && snapshot.IsSafetyDepartment == true)
  377. {
  378. rsp.IsSafetyDepartment = true;
  379. }
  380. await _industryRepository.Queryable()
  381. .Where(m => m.Id == snapshot.IndustryId)
  382. .Select(m => new { m.Id, m.IndustryType })
  383. .FirstAsync()
  384. .Then(async industry =>
  385. {
  386. await _fileRepository.Queryable()
  387. .Where(m => m.Classify == EIndustryType.Declare.ToString())
  388. .Select(m => new FileJson { Id = m.Id, FileName = m.Name, Path = m.Path, FileType = m.Type })
  389. .ToListAsync()
  390. .Then(async file =>
  391. {
  392. rsp.DocumentFiles = file;
  393. });
  394. });
  395. }
  396. );
  397. rsp.IndustryCase = await _industryCaseRepository.Queryable()
  398. .Where(m => m.IsEnable == true)
  399. .Select(m => new Kv { Key = m.Id, Value = m.Name })
  400. .ToListAsync();
  401. rsp.SnapshotReplenishType = _systemDicDataCacheManager.SnapshotReplenishType;
  402. rsp.CompliantType = EnumExts.GetDescriptions<ECompliantType>();
  403. }
  404. [ExportExcel("随手拍工单")]
  405. public ISugarQueryable<OrderSnapshotItemsOutDto> GetOrderSnapshotItems(OrderSnapshotItemsInDto dto)
  406. {
  407. var query = _orderSnapshotRepository.Queryable()
  408. .LeftJoin<Order>((snapshot, order) => snapshot.Id == order.Id)
  409. .LeftJoin<Industry>((snapshot, order, industry) => snapshot.IndustryId == industry.Id)
  410. .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order) => order.No.Contains(dto.No))
  411. .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order) => order.Title.Contains(dto.Title))
  412. .WhereIF(dto.ActualHandleOrgName.NotNullOrEmpty(), (snapshot, order) => order.ActualHandleOrgName.Contains(dto.ActualHandleOrgName))
  413. .WhereIF(dto.AcceptType.NotNullOrEmpty(), (snapshot, order) => order.AcceptType == dto.AcceptType)
  414. .WhereIF(dto.AcceptorName.NotNullOrEmpty(), (snapshot, order) => order.AcceptorName == dto.AcceptorName)
  415. .WhereIF(dto.FromPhone.NotNullOrEmpty(), (snapshot, order) => order.FromPhone == dto.FromPhone)
  416. .WhereIF(dto.FromName.NotNullOrEmpty(), (snapshot, order) => order.FromName == dto.FromName)
  417. .WhereIF(dto.BeginExpiredTime.HasValue && dto.EndExpiredTime.HasValue, (snapshot, order) => order.ExpiredTime >= dto.BeginExpiredTime && order.ExpiredTime <= dto.EndExpiredTime)
  418. .WhereIF(dto.BeginCreationTime.HasValue && dto.EndCreationTime.HasValue, (snapshot, order) => order.CreationTime >= dto.BeginCreationTime && order.CreationTime <= dto.EndCreationTime)
  419. .WhereIF(dto.Status.HasValue, (snapshot, order) => order.Status == dto.Status)
  420. .WhereIF(dto.County.NotNullOrEmpty(), (snapshot, order) => order.County == dto.County)
  421. .WhereIF(dto.IsScreen.HasValue && dto.IsScreen == true, (snapshot, order) => order.OrderScreens.Count() > 0)
  422. .WhereIF(dto.IsScreen.HasValue && dto.IsScreen == false, (snapshot, order) => order.OrderScreens.Count() == 0)
  423. .WhereIF(dto.CurrentStepName.NotNullOrEmpty(), (snapshot, order) => order.CurrentStepName == dto.CurrentStepName)
  424. .WhereIF(dto.BeginFiledTime.HasValue && dto.EndFiledTime.HasValue, (snapshot, order) => order.FiledTime >= dto.BeginFiledTime && order.FiledTime <= dto.EndFiledTime)
  425. .WhereIF(dto.HotspotName.NotNullOrEmpty(), (snapshot, order) => order.HotspotName.Contains(dto.HotspotName))
  426. .WhereIF(dto.OrderTagCode.NotNullOrEmpty(), (snapshot, order) => order.OrderTagCode.Contains(dto.OrderTagCode))
  427. .WhereIF(dto.IsUrgent.HasValue, (snapshot, order) => order.IsUrgent == dto.IsUrgent)
  428. .WhereIF(dto.TransferPhone.NotNullOrEmpty(), (snapshot, order) => order.TransferPhone.Contains(dto.TransferPhone))
  429. .WhereIF(dto.OrgLevelOneCode.NotNullOrEmpty(), (snapshot, order) => order.OrgLevelOneCode == dto.OrgLevelOneCode)
  430. //.WhereIF(dto.DiscontentTurnTo.HasValue, (snapshot, order) => order == dto.OrgLevelOneCode)
  431. .WhereIF(dto.IndustryId.NotNullOrEmpty(), (snapshot, order) => snapshot.IndustryId == dto.IndustryId)
  432. .Select((snapshot, order, industry) => new OrderSnapshotItemsOutDto
  433. {
  434. CreationTime = order.CreationTime
  435. }
  436. , true);
  437. return query;
  438. }
  439. [ExportExcel("电气焊作业申报工单")]
  440. public ISugarQueryable<OrderSnapshotElectrogasItemsOutDto> GetOrderSnapshotElectrogasItems(OrderSnapshotItemsInDto dto)
  441. {
  442. var query = _orderSnapshotRepository.Queryable()
  443. .LeftJoin<Order>((snapshot, order) => snapshot.Id == order.Id)
  444. .LeftJoin<Industry>((snapshot, order, industry) => snapshot.IndustryId == industry.Id)
  445. .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order) => order.No.Contains(dto.No))
  446. .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order) => order.Title.Contains(dto.Title))
  447. .WhereIF(dto.ActualHandleOrgName.NotNullOrEmpty(), (snapshot, order) => order.ActualHandleOrgName.Contains(dto.ActualHandleOrgName))
  448. .WhereIF(dto.AcceptType.NotNullOrEmpty(), (snapshot, order) => order.AcceptType == dto.AcceptType)
  449. .WhereIF(dto.AcceptorName.NotNullOrEmpty(), (snapshot, order) => order.AcceptorName == dto.AcceptorName)
  450. .WhereIF(dto.FromPhone.NotNullOrEmpty(), (snapshot, order) => order.FromPhone == dto.FromPhone)
  451. .WhereIF(dto.FromName.NotNullOrEmpty(), (snapshot, order) => order.FromName == dto.FromName)
  452. .WhereIF(dto.BeginExpiredTime.HasValue && dto.EndExpiredTime.HasValue, (snapshot, order) => order.ExpiredTime >= dto.BeginExpiredTime && order.ExpiredTime <= dto.EndExpiredTime)
  453. .WhereIF(dto.BeginCreationTime.HasValue && dto.EndCreationTime.HasValue, (snapshot, order) => order.CreationTime >= dto.BeginCreationTime && order.CreationTime <= dto.EndCreationTime)
  454. .WhereIF(dto.Status.HasValue, (snapshot, order) => order.Status == dto.Status)
  455. .WhereIF(dto.County.NotNullOrEmpty(), (snapshot, order) => order.County == dto.County)
  456. .WhereIF(dto.IsScreen.HasValue && dto.IsScreen == true, (snapshot, order) => order.OrderScreens.Count() > 0)
  457. .WhereIF(dto.IsScreen.HasValue && dto.IsScreen == false, (snapshot, order) => order.OrderScreens.Count() == 0)
  458. .WhereIF(dto.CurrentStepName.NotNullOrEmpty(), (snapshot, order) => order.CurrentStepName == dto.CurrentStepName)
  459. .WhereIF(dto.BeginFiledTime.HasValue && dto.EndFiledTime.HasValue, (snapshot, order) => order.FiledTime >= dto.BeginFiledTime && order.FiledTime <= dto.EndFiledTime)
  460. .WhereIF(dto.HotspotName.NotNullOrEmpty(), (snapshot, order) => order.HotspotName.Contains(dto.HotspotName))
  461. .WhereIF(dto.OrderTagCode.NotNullOrEmpty(), (snapshot, order) => order.OrderTagCode.Contains(dto.OrderTagCode))
  462. .WhereIF(dto.IsUrgent.HasValue, (snapshot, order) => order.IsUrgent == dto.IsUrgent)
  463. .WhereIF(dto.TransferPhone.NotNullOrEmpty(), (snapshot, order) => order.TransferPhone.Contains(dto.TransferPhone))
  464. .WhereIF(dto.OrgLevelOneCode.NotNullOrEmpty(), (snapshot, order) => order.OrgLevelOneCode == dto.OrgLevelOneCode)
  465. //.WhereIF(dto.DiscontentTurnTo.HasValue, (snapshot, order) => order == dto.OrgLevelOneCode)
  466. .WhereIF(dto.IndustryId.NotNullOrEmpty(), (snapshot, order) => snapshot.IndustryId == dto.IndustryId)
  467. .Where((snapshot, order, industry) => industry.IndustryType == EIndustryType.Declare)
  468. .Select((snapshot, order, industry) => new OrderSnapshotElectrogasItemsOutDto
  469. {
  470. CreationTime = order.CreationTime
  471. }
  472. , true);
  473. return query;
  474. }
  475. /// <summary>
  476. /// 获取工单已经标记集合
  477. /// </summary>
  478. /// <param name="dto"></param>
  479. /// <returns></returns>
  480. [ExportExcel("工单标注")]
  481. public ISugarQueryable<LabeledOrderSnapshotItemsOutDto> GetLabeledOrderSnapshotItems(LabeledOrderSnapshotItemsInDto dto)
  482. {
  483. var query = _orderSnapshotRepository.Queryable()
  484. .LeftJoin<Order>((snapshot, order) => order.Id == snapshot.Id)
  485. .Where((snapshot, order) => order.Status >= EOrderStatus.Published)
  486. .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order) => order.No.Contains(dto.No))
  487. .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order) => order.Title.Contains(dto.Title))
  488. .WhereIF(dto.FromName.NotNullOrEmpty(), (snapshot, order) => order.FromName.Contains(dto.FromName))
  489. .WhereIF(dto.FromPhone.NotNullOrEmpty(), (snapshot, order) => order.FromPhone.Contains(dto.FromPhone))
  490. .WhereIF(dto.Label.NotNullOrEmpty(), (snapshot, order) => snapshot.LabelName.Contains(dto.Label))
  491. .WhereIF(dto.BeginSignTime.HasValue && dto.EndSignTime.HasValue, (snapshot, order) => snapshot.SignTime >= dto.BeginSignTime && snapshot.SignTime <= dto.EndSignTime)
  492. .OrderByDescending((snapshot, order) => snapshot.CreationTime)
  493. .Select((snapshot, order) => new LabeledOrderSnapshotItemsOutDto
  494. {
  495. LabelName = snapshot.LabelName,
  496. OrderId = order.Id,
  497. LabelTime = snapshot.LabelTime,
  498. LabelUserName = snapshot.LabelUserName,
  499. SourceChannel = order.SourceChannel,
  500. }, true);
  501. return query;
  502. }
  503. public async Task<OrderSnapshot> UpdateSafetyAsync(string orderId, bool isSafetyDepartment, string remark)
  504. {
  505. // 红包已经审核通过的工单不允许修改
  506. if (await _redPackAuditRepository.Queryable().AnyAsync(m => m.OrderId == orderId && m.Status == ERedPackAuditStatus.Agree))
  507. {
  508. return await _orderSnapshotRepository.GetAsync(orderId);
  509. }
  510. return await _orderSnapshotRepository.UpdateSafetyAsync(orderId, isSafetyDepartment, remark);
  511. }
  512. public ISugarQueryable<CitizenRewardOutDto> GetCitizenRewardItems(CitizenRewardInDto dto)
  513. {
  514. var query = _orderSnapshotRepository.Queryable()
  515. .LeftJoin<Order>((snapshot, order) => snapshot.Id == order.Id)
  516. .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order) => order.No.Contains(dto.No))
  517. .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order) => order.Title.Contains(dto.Title))
  518. .WhereIF(dto.ActualHandleOrgName.NotNullOrEmpty(), (snapshot, order) => order.ActualHandleOrgName.Contains(dto.ActualHandleOrgName))
  519. .WhereIF(dto.AcceptType.NotNullOrEmpty(), (snapshot, order) => order.AcceptType == dto.AcceptType)
  520. .WhereIF(dto.AcceptorName.NotNullOrEmpty(), (snapshot, order) => order.AcceptorName == dto.AcceptorName)
  521. .WhereIF(dto.ActualHandlerName.NotNullOrEmpty(), (snapshot, order) => order.ActualHandlerName == dto.ActualHandlerName)
  522. .WhereIF(dto.FromPhone.NotNullOrEmpty(), (snapshot, order) => order.FromPhone == dto.FromPhone)
  523. .WhereIF(dto.FromName.NotNullOrEmpty(), (snapshot, order) => order.FromName == dto.FromName)
  524. .WhereIF(dto.BeginExpiredTime.HasValue && dto.EndExpiredTime.HasValue, (snapshot, order) => order.ExpiredTime >= dto.BeginExpiredTime && order.ExpiredTime <= dto.EndExpiredTime)
  525. .WhereIF(dto.BeginCreationTime.HasValue && dto.EndCreationTime.HasValue, (snapshot, order) => order.CreationTime >= dto.BeginCreationTime && order.CreationTime <= dto.EndCreationTime)
  526. .WhereIF(dto.Status.HasValue, (snapshot, order) => order.Status == dto.Status)
  527. .WhereIF(dto.County.NotNullOrEmpty(), (snapshot, order) => order.County == dto.County)
  528. .WhereIF(dto.IsScreen.HasValue && dto.IsScreen == true, (snapshot, order) => order.OrderScreens.Count() > 0)
  529. .WhereIF(dto.IsScreen.HasValue && dto.IsScreen == false, (snapshot, order) => order.OrderScreens.Count() == 0)
  530. .WhereIF(dto.CurrentStepName.NotNullOrEmpty(), (snapshot, order) => order.CurrentStepName == dto.CurrentStepName)
  531. .WhereIF(dto.BeginFiledTime.HasValue && dto.EndFiledTime.HasValue, (snapshot, order) => order.FiledTime >= dto.BeginFiledTime && order.FiledTime <= dto.EndFiledTime)
  532. .WhereIF(dto.HotspotName.NotNullOrEmpty(), (snapshot, order) => order.HotspotName.Contains(dto.HotspotName))
  533. .WhereIF(dto.OrderTagCode.NotNullOrEmpty(), (snapshot, order) => order.OrderTagCode.Contains(dto.OrderTagCode))
  534. .WhereIF(dto.IsUrgent.HasValue, (snapshot, order) => order.IsUrgent == dto.IsUrgent)
  535. .WhereIF(dto.TransferPhone.NotNullOrEmpty(), (snapshot, order) => order.TransferPhone.Contains(dto.TransferPhone))
  536. .WhereIF(dto.OrgLevelOneCode.NotNullOrEmpty(), (snapshot, order) => order.OrgLevelOneCode == dto.OrgLevelOneCode)
  537. .WhereIF(dto.IndustryId.NotNullOrEmpty(), (snapshot, order) => snapshot.IndustryId == dto.IndustryId)
  538. .Where((snapshot, order) => snapshot.IsAward == true)
  539. .Select((snapshot, order) => new CitizenRewardOutDto
  540. {
  541. CreationTime = order.CreationTime
  542. }
  543. , true);
  544. return query;
  545. }
  546. public async Task UpdateSpecialReasonAsync(string orderId, string errorId, string errorName)
  547. {
  548. await _orderSnapshotRepository.Updateable()
  549. .SetColumns(m => m.SpecialReasonId, errorId)
  550. .SetColumns(m => m.SpecialReasonName, errorName)
  551. .Where(m => m.Id == orderId)
  552. .ExecuteCommandAsync();
  553. }
  554. public async Task UpdateIsEmphasisAsync(UpdateIsEmphasisInDto dto)
  555. {
  556. await _orderSnapshotRepository.Updateable()
  557. .SetColumns(m => m.IsEmphasis == true)
  558. .Where(m => dto.Ids.Contains(m.Id))
  559. .ExecuteCommandAsync();
  560. }
  561. }