TaskExtension.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. using NetTaste;
  2. using ServiceCenter.Extensions;
  3. using ServiceCenter.Logs;
  4. using ServiceCenter.Redis;
  5. using ServiceCenter.SqlSugars;
  6. using SqlSugar;
  7. using WCS.Entity;
  8. using TaskStatus = WCS.Entity.TaskStatus;
  9. namespace WCS.WorkEngineering.Extensions
  10. {
  11. /// <summary>
  12. /// 任务扩展
  13. /// </summary>
  14. public static class TaskExtension
  15. {
  16. /// <summary>
  17. /// 更新任务执行记录
  18. /// 同步更新历史任务
  19. /// </summary>
  20. /// <param name="task">任务信息</param>
  21. /// <param name="db">数据库上下文</param>
  22. /// <param name="curPoint">当前地址</param>
  23. /// <param name="desc">描述</param>
  24. public static void AddWCS_TASK_DTL(this WCS_TaskInfo task, SqlSugarScopeProvider db, string curPoint, string desc) => task.AddWCS_TASK_DTL(db, curPoint, "", desc);
  25. /// <summary>
  26. /// 更新任务执行记录
  27. /// 同步更新历史任务
  28. /// </summary>
  29. /// <param name="task">任务信息</param>
  30. /// <param name="db">数据库上下文</param>
  31. /// <param name="curPoint">当前地址</param>
  32. /// <param name="nextPoint">下一个地址</param>
  33. /// <param name="desc">描述</param>
  34. public static void AddWCS_TASK_DTL(this WCS_TaskInfo task, SqlSugarScopeProvider db, string curPoint, string nextPoint, string desc)
  35. {
  36. db.Insertable(new WCS_TaskDtl
  37. {
  38. ID = Guid.NewGuid(),
  39. ParentTaskCode = task.ID,
  40. CurPoint = curPoint,
  41. NextPoint = nextPoint,
  42. Desc = desc,
  43. AddWho = "WCS"
  44. }).SplitTable().ExecuteCommand();
  45. task.UpdateableOldTask(db);
  46. }
  47. /// <summary>
  48. /// 更新历史表数据
  49. /// </summary>
  50. /// <param name="taskInfo"></param>
  51. /// <param name="db"></param>
  52. public static void UpdateableOldTask(this WCS_TaskInfo taskInfo, SqlSugarScopeProvider db)
  53. {
  54. if (taskInfo.Status == TaskStatus.NewBuild) return;
  55. // 同步任务信息
  56. var taskOld = db.Queryable<WCS_TaskOld>().SplitTable(tabs => tabs.Take(2)).Where(v => v.Id == taskInfo.ID).OrderByDescending(v => v.AddTime).First();
  57. if (taskOld is not null)
  58. {
  59. if (taskInfo.Status >= TaskStatus.Finish) taskInfo.CompleteOrCancelTasks(db);
  60. else
  61. {
  62. taskOld = taskInfo.Mapper<WCS_TaskOld, WCS_TaskInfo>();
  63. taskOld.Id = taskInfo.ID;
  64. db.Updateable(taskOld).Where(x => x.Id == taskOld.Id).SplitTable(x => x.Take(2)).ExecuteCommand();
  65. }
  66. }
  67. else
  68. {
  69. throw new KnownException($"WCS_TaskOld表中不存在任务:{taskInfo.ID},无法执行WCS_TaskInfo与WCS_TaskOld同步动作", LogLevelEnum.Mid);
  70. }
  71. }
  72. /// <summary>
  73. /// 完成或取消任务
  74. /// </summary>
  75. /// <param name="taskInfo"></param>
  76. /// <param name="db"></param>
  77. public static void CompleteOrCancelTasks(this WCS_TaskInfo taskInfo, SqlSugarScopeProvider db)
  78. {
  79. if (taskInfo.Status < Entity.TaskStatus.Finish)
  80. throw new KnownException("任务未完成或取消,无法执行WCS_TaskInfo与WCS_TaskOld同步动作", LogLevelEnum.Mid);
  81. // 任务完成或取消,进行相关同步动作
  82. var taskOld = db.Queryable<WCS_TaskOld>().SplitTable(tabs => tabs.Take(2)).Where(v => v.Id == taskInfo.ID).OrderByDescending(v => v.AddTime).First();
  83. if (taskOld is not null)
  84. {
  85. taskOld = taskInfo.Mapper<WCS_TaskOld, WCS_TaskInfo>();
  86. taskOld.Id = taskInfo.ID;
  87. //更新任务历史表,删除任务当前表
  88. db.Updateable(taskOld).SplitTable(x => x.Take(2)).ExecuteCommand();
  89. db.Deleteable(taskInfo).ExecuteCommand();
  90. }
  91. else
  92. {
  93. throw new KnownException($"WCS_TaskOld表中不存在任务:{taskInfo.ID},无法执行WCS_TaskInfo与WCS_TaskOld同步动作", LogLevelEnum.Mid);
  94. }
  95. }
  96. /// <summary>
  97. /// 更新表数据
  98. /// </summary>
  99. /// <param name="taskInfo"></param>
  100. /// <param name="db"></param>
  101. public static void Updateable(this WCS_TaskInfo taskInfo, SqlSugarScopeProvider db)
  102. {
  103. taskInfo.EditTime = DateTime.Now;
  104. taskInfo.EditWho = "WCS";
  105. db.Updateable(taskInfo).ExecuteCommand();
  106. }
  107. ///// <summary>
  108. ///// 获取出库任务
  109. ///// </summary>
  110. ///// <param name="taskInfo">任务</param>
  111. ///// <param name="db">db</param>
  112. ///// <param name="allOutCode">可用出库站台</param>
  113. ///// <param name="floor">楼层</param>
  114. ///// <param name="obj">堆垛机</param>
  115. ///// <param name="index">递归次数</param>
  116. ///// <returns></returns>
  117. ///// <exception cref="KnownException"></exception>
  118. //public static WCS_TaskInfo GetOutTask(this WCS_TaskInfo taskInfo, SqlSugarHelper db, List<string> allOutCode, int floor, SRM obj, int index = 1)
  119. //{
  120. // return task;
  121. //}
  122. /// <summary>
  123. /// 获取AGV任务ID
  124. /// </summary>
  125. /// <param name="db">db</param>
  126. /// <returns></returns>
  127. public static int GetAgvTaskId(this SqlSugarHelper db)
  128. {
  129. var id = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(v => v.Take(1)).Max(v => v.ID);
  130. return id + 1;
  131. }
  132. /// <summary>
  133. /// 更新任务执行记录
  134. /// </summary>
  135. /// <param name="task">任务信息</param>
  136. public static void UpdateRedisHash(this WCS_TaskInfo task)
  137. {
  138. var key = $"Hash:{task.ID}";
  139. if (task.Status >= TaskStatus.Finish)
  140. {
  141. RedisHub.WMS.Del(key);
  142. }
  143. else
  144. {
  145. RedisHub.WMS.HMSet(key, task.ToDic());
  146. }
  147. }
  148. #region 工字轮支线分流
  149. public static string GetMatList(this List<string> matList)
  150. {
  151. return matList.Distinct().Aggregate("", (current, mat) => current + $"[{mat}]");
  152. }
  153. #endregion 工字轮支线分流
  154. /// <summary>
  155. /// 去除转义字符
  156. /// </summary>
  157. /// <param name="value"></param>
  158. /// <returns></returns>
  159. public static string RemoveEscapeCharacters(this string? value)
  160. {
  161. return value.Trim('\0', '\a', '\b', '\f', '\n', '\r', '\t', '\v').Replace("�\u0012", "").Replace("\\0", "").Replace("\\r", "").Replace("\0", "").Trim();
  162. }
  163. public static void UpdataErrorinfo(this BaseErrorinfoWcs error)
  164. {
  165. SqlSugarHelper.Do(db =>
  166. {
  167. var errorinfoWcs = db.Default.Queryable<BaseErrorinfoWcs>().With(SqlWith.NoLock).Where(v => v.ContBarCode == error.ContBarCode && v.Message == error.Message).First();
  168. if (errorinfoWcs != null)
  169. {
  170. errorinfoWcs.Count = errorinfoWcs.Count+1;
  171. db.Default.Updateable(errorinfoWcs).ExecuteCommand();
  172. }
  173. else
  174. {
  175. db.Default.Insertable(error).ExecuteCommand();
  176. }
  177. });
  178. }
  179. }
  180. /// <summary>
  181. /// 垛形位信息
  182. /// </summary>
  183. public class StackPosInfo
  184. {
  185. /// <summary>
  186. /// 任务号
  187. /// </summary>
  188. public int TaskNumber { get; set; }
  189. /// <summary>
  190. /// 是否空置
  191. /// </summary>
  192. public bool IsEmpty { get; set; }
  193. /// <summary>
  194. /// 坐标号
  195. /// </summary>
  196. public string XYNo { get; set; }
  197. /// <summary>
  198. /// 物料编码
  199. /// </summary>
  200. public string MatCode { get; set; }
  201. /// <summary>
  202. /// 正反面
  203. /// </summary>
  204. public int SideNum { get; set; }
  205. /// <summary>
  206. /// 工字轮类型
  207. /// </summary>
  208. public string SpoolType { get; set; }
  209. /// <summary>
  210. /// 是否结束
  211. /// </summary>
  212. public bool Finish { get; set; }
  213. }
  214. }