TaskInfoService.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. using SqlSugar;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using wms.sqlsugar.model.fj;
  8. using WMS.BZModels;
  9. using WMS.Info;
  10. using WMS.BZSqlSugar;
  11. using NPOI.SS.Formula.Functions;
  12. using WMS.BZModels.Dto.FJ.TaskDtos;
  13. using WMS.Util;
  14. namespace WMS.BZServices.FJ
  15. {
  16. public class TaskInfoService
  17. {
  18. private readonly Repository<WCSTaskInfo> _wcstaskinforepository;
  19. private readonly Repository<WCS_TaskOld> _wcstaskoldrepository;
  20. private readonly Repository<BillBomsetgrp> _billBomsetgrprepository;
  21. public TaskInfoService(Repository<WCSTaskInfo> wcstaskinforepository, Repository<WCS_TaskOld> wcstaskoldrepository, Repository<BillBomsetgrp> billBomsetgrprepository)
  22. {
  23. _wcstaskinforepository = wcstaskinforepository;
  24. _wcstaskoldrepository = wcstaskoldrepository;
  25. _billBomsetgrprepository = billBomsetgrprepository;
  26. }
  27. public PagedInfo<WCSTaskinfoDto> GetPageList(Pagination pagination, WCSTaskinfoQueryDto wCSTaskinfoQueryDto)
  28. {
  29. var predicate = Expressionable.Create<WCS_TaskOld>().And(o => o.Status < 99);
  30. predicate = predicate.Or(o => o.ManualRemarks.Contains("手动变更状态") && o.EditTime>=DateTime.Now.AddDays(-3) );
  31. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.ID), m => m.ID.ToString().Contains(wCSTaskinfoQueryDto.ID));
  32. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.KeyWord), m => m.ID.ToString().Contains(wCSTaskinfoQueryDto.KeyWord) || m.BarCode.Contains(wCSTaskinfoQueryDto.KeyWord) || m.AddrTo.Contains(wCSTaskinfoQueryDto.KeyWord) || m.AddrFrom.Contains(wCSTaskinfoQueryDto.KeyWord)
  33. || m.Floor.ToString() == wCSTaskinfoQueryDto.KeyWord || m.Tunnel.Contains(wCSTaskinfoQueryDto.KeyWord) || m.Device.Contains(wCSTaskinfoQueryDto.KeyWord) || m.MaterialCode.Contains(wCSTaskinfoQueryDto.KeyWord));
  34. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.BarCode), m => m.BarCode.Contains(wCSTaskinfoQueryDto.BarCode));
  35. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.Grade), m => m.Grade.Contains(wCSTaskinfoQueryDto.Grade));
  36. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.MaterialCode), m => m.MaterialCode.Contains(wCSTaskinfoQueryDto.MaterialCode));
  37. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.AddrFrom), m => m.AddrFrom.Contains(wCSTaskinfoQueryDto.AddrFrom));
  38. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.AddrTo), m => m.AddrTo.Contains(wCSTaskinfoQueryDto.AddrTo));
  39. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.AddrNext), m => m.AddrNext.Contains(wCSTaskinfoQueryDto.AddrNext));
  40. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.WmsTask), m => m.WmsTask.ToString().Contains(wCSTaskinfoQueryDto.WmsTask));
  41. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.AgvTaskID), m => m.AgvTaskID.ToString().Contains(wCSTaskinfoQueryDto.AgvTaskID));
  42. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.Type), m => m.Type.Equals(wCSTaskinfoQueryDto.Type));
  43. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.Status), m => m.Status.Equals(wCSTaskinfoQueryDto.Status));
  44. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.BusType), m => m.BusType.Equals(wCSTaskinfoQueryDto.BusType));
  45. predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.AddTimeFrom.HasValue, m => m.AddTime >= wCSTaskinfoQueryDto.AddTimeFrom);
  46. predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.AddTimeTo.HasValue, m => m.AddTime <= wCSTaskinfoQueryDto.AddTimeTo);
  47. predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.StartTimeBegin.HasValue, m => m.StartTime >= wCSTaskinfoQueryDto.StartTimeBegin);
  48. predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.StartTimeEnd.HasValue, m => m.StartTime <= wCSTaskinfoQueryDto.StartTimeEnd);
  49. predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.EndTimeBegin.HasValue, m => m.EndTime >= wCSTaskinfoQueryDto.EndTimeBegin);
  50. predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.EndTimeEnd.HasValue, m => m.EndTime <= wCSTaskinfoQueryDto.EndTimeEnd);
  51. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.Tunnel), m => m.Tunnel.Contains(wCSTaskinfoQueryDto.Tunnel));
  52. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.Floor), m => m.Floor.ToString().Contains(wCSTaskinfoQueryDto.Floor));
  53. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.Device), m => m.Device.Contains(wCSTaskinfoQueryDto.Device));
  54. predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.OutType.HasValue, m => m.OutType.Equals(wCSTaskinfoQueryDto.OutType));
  55. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.WorkBench), m => m.WorkBench.Contains(wCSTaskinfoQueryDto.WorkBench));
  56. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.WarehouseCode), m => m.WarehouseCode.Equals(wCSTaskinfoQueryDto.WarehouseCode));
  57. predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.MatCode), m => m.MatCode.Contains(wCSTaskinfoQueryDto.MatCode));
  58. #region "连表查询"
  59. //var taskQueryable = _wcstaskoldrepository.Queryable().Where(predicate.ToExpression()).SplitTable(o => o.Take(3));
  60. //var lists = taskQueryable.LeftJoin(_billBomsetgrprepository.Queryable(), (taskold, bomset) => taskold.PalletType == bomset.ShortCode)
  61. // .Select((taskold, bomset) => new WCSTaskinfoDto
  62. // {
  63. // ID = taskold.ID.ToString(),
  64. // BarCode = taskold.BarCode,
  65. // Type = taskold.Type,
  66. // Status = taskold.Status,
  67. // AddrFrom = taskold.AddrFrom,
  68. // AddrTo = taskold.AddrTo,
  69. // AddrNext = taskold.AddrNext,
  70. // Tunnel = taskold.Tunnel,
  71. // Floor = taskold.Floor,
  72. // Device = taskold.Device,
  73. // LastInteractionPoint = taskold.LastInteractionPoint,
  74. // SrmStation = taskold.SrmStation,
  75. // WorkBench = taskold.WorkBench,
  76. // WarehouseCode = taskold.WarehouseCode,
  77. // WmsTask = taskold.WmsTask,
  78. // TaskGroupKey = taskold.TaskGroupKey,
  79. // WorkOrder = taskold.WorkOrder,
  80. // PalletType = taskold.PalletType,
  81. // ProdLine = taskold.ProdLine,
  82. // FullQty = taskold.FullQty,
  83. // Height = taskold.Height,
  84. // Weight = taskold.Weight,
  85. // Length = taskold.Length,
  86. // AddTime = taskold.AddTime,
  87. // AddWho = taskold.AddWho,
  88. // StartTime = taskold.StartTime,
  89. // EditWho = taskold.EditWho,
  90. // EditTime = taskold.EditTime,
  91. // EndTime = taskold.EndTime,
  92. // MatCode = taskold.MatCode,
  93. // InvBarCode = taskold.InvBarCode,
  94. // IsFast = taskold.IsFast,
  95. // Grade = taskold.Grade,
  96. // IsSurplus = taskold.IsSurplus,
  97. // IsRework = taskold.IsRework,
  98. // Uploaded = taskold.Uploaded,
  99. // AgvTaskID = taskold.AgvTaskID,
  100. // Priority = taskold.Priority,
  101. // ManualRemarks = taskold.ManualRemarks,
  102. // OutType = taskold.OutType,
  103. // MaterialCode = taskold.MaterialCode,
  104. // BusType = taskold.BusType,
  105. // GoodsType = taskold.GoodsType,
  106. // Line = taskold.Line,
  107. // Col = taskold.Col,
  108. // Layer = taskold.Layer,
  109. // Depth = taskold.Depth,
  110. // SetGrpCode= bomset.Code
  111. // }).MergeTable().ToPage(pagination);
  112. #endregion
  113. var list = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(o => o.Take(3))
  114. .ToPage<WCS_TaskOld, WCSTaskinfoDto>(pagination);
  115. return list;
  116. }
  117. public void UpdateTaskState(List<string> ids, string userId, int state)
  118. {
  119. if (!ids.Any())
  120. {
  121. throw new ArgumentException("没有选择任务!");
  122. }
  123. var list = _wcstaskinforepository.Queryable().With(SqlWith.NoLock).Where(o => ids.Contains(o.ID.ToString())).ToList();
  124. if (!list.Any())
  125. {
  126. throw new ArgumentException("没有找到该任务!");
  127. }
  128. foreach (var id in list)
  129. {
  130. _wcstaskinforepository.UseTranAction(() =>
  131. {
  132. _wcstaskinforepository.AsUpdateable().With("WITH(ROWLOCK,UPDLOCK)").SetColumns(p => new WCSTaskInfo()
  133. {
  134. Status = state,
  135. EditTime = DateTime.Now,
  136. ManualRemarks = "手动变更状态"
  137. }).Where(p => p.ID == id.ID).ExecuteCommand();
  138. _wcstaskoldrepository.AsUpdateable().With("WITH(ROWLOCK,UPDLOCK)").SetColumns(p => new WCS_TaskOld()
  139. {
  140. Status = state,
  141. EditTime = DateTime.Now,
  142. ManualRemarks = "手动变更状态"
  143. }).Where(p => p.ID == id.ID).SplitTable(p => p.Take(3)).ExecuteCommand();
  144. });
  145. }
  146. }
  147. public List<int> ReRgvTask(List<int> ids, string userId,string mark)
  148. {
  149. if (!ids.Any())
  150. {
  151. throw new ArgumentException("没有选择任务!");
  152. }
  153. var list = _wcstaskinforepository.Queryable().With(SqlWith.NoLock).Where(o => ids.Contains(o.ID) && o.BusType=="码垛入库" && o.Type==1).ToList();
  154. if (!list.Any())
  155. {
  156. throw new ArgumentException("没有找到入库任务、码垛入库业务和RGV执行的状态的数据!");
  157. }
  158. foreach (var item in list)
  159. {
  160. _wcstaskinforepository.UseTranAction(() =>
  161. {
  162. _wcstaskinforepository.AsUpdateable().With("WITH(ROWLOCK,UPDLOCK)").SetColumns(p => new WCSTaskInfo()
  163. {
  164. Status = (int)FJTaskStatus.ConveyorExecution,
  165. EditTime = DateTime.Now,
  166. ManualRemarks = item.ManualRemarks+ mark
  167. }).Where(p => p.ID == item.ID).ExecuteCommand();
  168. _wcstaskoldrepository.AsUpdateable().With("WITH(ROWLOCK,UPDLOCK)").SetColumns(p => new WCS_TaskOld()
  169. {
  170. Status = (int)FJTaskStatus.ConveyorExecution,
  171. EditTime = DateTime.Now,
  172. ManualRemarks = item.ManualRemarks + mark
  173. }).Where(p => p.ID == item.ID).SplitTable(p => p.Take(3)).ExecuteCommand();
  174. });
  175. }
  176. var excepts= ids.Except(list.Select(o => o.ID).ToList()).ToList();
  177. return excepts;
  178. }
  179. }
  180. }