SnapshotOrderApplication.cs 33 KB

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