TaskExtension.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. using Newtonsoft.Json;
  2. using ServiceCenter.Logs;
  3. using ServiceCenter.Redis;
  4. using ServiceCenter.SqlSugars;
  5. using WCS.Entity;
  6. namespace WCS.WorkEngineering.Extensions
  7. {
  8. /// <summary>
  9. /// 任务扩展
  10. /// </summary>
  11. public static class TaskExtension
  12. {
  13. /// <summary>
  14. /// 更新任务执行记录
  15. /// </summary>
  16. /// <param name="task">任务信息</param>
  17. /// <param name="db">数据库上下文</param>
  18. /// <param name="curPoint">当前地址</param>
  19. /// <param name="desc">描述</param>
  20. public static void AddWCS_TASK_DTL(this WCS_TaskInfo task, SqlSugarHelper db, string curPoint, string desc) => task.AddWCS_TASK_DTL(db, curPoint, "", desc);
  21. /// <summary>
  22. /// 更新任务执行记录
  23. /// </summary>
  24. /// <param name="task">任务信息</param>
  25. /// <param name="db">数据库上下文</param>
  26. /// <param name="curPoint">当前地址</param>
  27. /// <param name="NextPoint">下一个地址</param>
  28. /// <param name="desc">描述</param>
  29. public static void AddWCS_TASK_DTL(this WCS_TaskInfo task, SqlSugarHelper db, string curPoint, string NextPoint, string desc)
  30. {
  31. db.Default.Insertable(new WCS_TaskDtl
  32. {
  33. ID = Guid.NewGuid(),
  34. ParentTaskCode = task.ID,
  35. CurPoint = curPoint,
  36. NextPoint = NextPoint,
  37. Desc = desc,
  38. AddWho = "WCS"
  39. }).SplitTable().ExecuteCommand();
  40. }
  41. /// <summary>
  42. /// 完成或取消任务
  43. /// </summary>
  44. /// <param name="taskInfo"></param>
  45. /// <param name="db"></param>
  46. /// <param name="world"></param>
  47. public static void CompleteOrCancelTasks(this WCS_TaskInfo taskInfo, SqlSugarHelper db)
  48. {
  49. if (taskInfo.Status is not Entity.TaskStatus.Finish and not Entity.TaskStatus.Cancel) throw new KnownException("任务未完成或取消,无法执行WCS_TaskInfo与WCS_TaskOld同步动作", LogLevelEnum.Mid);
  50. else // 任务完成或取消,进行相关同步动作
  51. {
  52. WCS_TaskOld taskOld = db.Default.Queryable<WCS_TaskOld>().SplitTable(tabs => tabs.Take(2)).Where(v => v.ID == taskInfo.ID).OrderByDescending(v => v.AddTime).First();
  53. if (taskOld is null) throw new KnownException($"WCS_TaskOld表中不存在任务:{taskInfo.ID},无法执行WCS_TaskInfo与WCS_TaskOld同步动作", LogLevelEnum.Mid);
  54. else
  55. {
  56. //状态
  57. taskOld.Status = taskInfo.Status;
  58. taskOld.Uploaded = taskInfo.Uploaded;
  59. //任务号
  60. taskOld.WmsTask = taskInfo.WmsTask;
  61. taskOld.AgvTaskID = taskInfo.AgvTaskID;
  62. taskOld.TaskGroupKey = taskInfo.TaskGroupKey;
  63. taskOld.Priority = taskInfo.Priority;
  64. //时间与用户
  65. taskOld.AddTime = taskInfo.AddTime;
  66. taskOld.AddWho = taskInfo.AddWho;
  67. taskOld.StartTime = taskInfo.StartTime;
  68. taskOld.EndTime = taskInfo.EedTime;
  69. taskOld.EditWho = taskInfo.EditWho;
  70. taskOld.EditTime = taskInfo.EditTime;
  71. //条码与地址
  72. taskOld.BarCode = taskInfo.BarCode;
  73. taskOld.MaterialCode = taskInfo.MaterialCode;
  74. taskOld.AddrFrom = taskInfo.AddrFrom;
  75. taskOld.AddrTo = taskInfo.AddrTo;
  76. taskOld.LastInteractionPoint = taskInfo.LastInteractionPoint;
  77. taskOld.AddrNext = taskInfo.AddrNext;
  78. taskOld.Tunnel = taskInfo.Tunnel;
  79. taskOld.Floor = taskInfo.Floor;
  80. taskOld.Device = taskInfo.Device;
  81. taskOld.SrmStation = taskInfo.SrmStation;
  82. //码垛信息
  83. taskOld.DocID = taskInfo.DocID;
  84. taskOld.PalletType = taskInfo.PalletType;
  85. taskOld.ProdLine = taskInfo.ProdLine;
  86. taskOld.FullQty = taskInfo.FullQty;
  87. //外形信息
  88. taskOld.Height = taskInfo.Height;
  89. taskOld.Length = taskInfo.Length;
  90. taskOld.Weight = taskInfo.Weight;
  91. //手动处理备注
  92. taskOld.ManualRemarks = taskInfo.ManualRemarks;
  93. //更新任务历史表,删除任务当前表
  94. db.Default.Updateable(taskOld).SplitTable().ExecuteCommand();
  95. db.Default.Deleteable(taskInfo).ExecuteCommand();
  96. }
  97. }
  98. }
  99. ///// <summary>
  100. ///// 获取出库任务
  101. ///// </summary>
  102. ///// <param name="taskInfo">任务</param>
  103. ///// <param name="db">db</param>
  104. ///// <param name="allOutCode">可用出库站台</param>
  105. ///// <param name="floor">楼层</param>
  106. ///// <param name="obj">堆垛机</param>
  107. ///// <param name="index">递归次数</param>
  108. ///// <returns></returns>
  109. ///// <exception cref="KnownException"></exception>
  110. //public static WCS_TaskInfo GetOutTask(this WCS_TaskInfo taskInfo, SqlSugarHelper db, List<string> allOutCode, int floor, SRM obj, int index = 1)
  111. //{
  112. // return task;
  113. //}
  114. /// <summary>
  115. /// 获取AGV任务ID
  116. /// </summary>
  117. /// <param name="db">db</param>
  118. /// <returns></returns>
  119. public static int GetAGVTaskId(this SqlSugarHelper db)
  120. {
  121. var id = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(v => v.Take(1)).Max(v => v.ID);
  122. return id + 1;
  123. }
  124. /// <summary>
  125. /// 更新任务执行记录
  126. /// </summary>
  127. /// <param name="task">任务信息</param>
  128. public static void updateRedisHash(this WCS_TaskInfo task)
  129. {
  130. RedisHub.Default.HSet($"Hash:{task.ID}", task.ToDic());
  131. }
  132. public static Dictionary<string, string> ToDic<T>(this T obj) where T : class
  133. {
  134. Dictionary<string, string> map = new Dictionary<string, string>();
  135. var objSte = JsonConvert.SerializeObject(obj);
  136. map = JsonConvert.DeserializeObject<Dictionary<string, string>>(objSte);
  137. return map;
  138. }
  139. }
  140. }