码垛位.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. using Microsoft.Data.SqlClient.Server;
  2. using Newtonsoft.Json;
  3. using Org.BouncyCastle.Bcpg;
  4. using PlcSiemens.Core.Extension;
  5. using ServiceCenter.SqlSugars;
  6. using SqlSugar;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.ComponentModel;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using WCS.Core;
  14. using WCS.Entity;
  15. using WCS.Entity.Protocol.Protocol.Robot;
  16. using WCS.Entity.Protocol.Robot;
  17. using WCS.Entity.Protocol.Station;
  18. using WCS.WorkEngineering.Extensions;
  19. using WCS.WorkEngineering.WebApi.Models.WCS.Request;
  20. using WCS.WorkEngineering.Worlds;
  21. namespace WCS.WorkEngineering.Systems
  22. {
  23. [BelongTo(typeof(MainWorld))]
  24. [Description("码垛位")]
  25. public class 码垛位 : DeviceSystem<Device<IRobot530, IRobot531,IStation521>>
  26. {
  27. protected override bool ParallelDo => true;
  28. public override void Do(Device<IRobot530, IRobot531, IStation521> obj)
  29. {
  30. if (obj.Data.VoucherNo != obj.Data2.VoucherNo)
  31. return;
  32. if (obj.Entity.Code == "8090" && obj.Data.PalletID == 485161 && obj.Data.VoucherNo == -32601 && obj.Data.Cmd != 0)
  33. {
  34. obj.Data.Cmd = 0;
  35. }
  36. if (obj.Data2.Rqst == RobotStationRqst.完成码垛)
  37. {
  38. World.Log($"码垛位{obj.Entity.Code}整垛完成交互开始时间: " + DateTime.Now.ToString("yyyyMMddHHmmss"));
  39. //调WMS接口
  40. var res = WMS.码垛完成(obj.Entity.Code);
  41. long leftPalletizingID = 0;
  42. if (!res.Success)
  43. {
  44. //兼容wms处理成功,wcs处理失败的情况
  45. if (!string.IsNullOrEmpty(res.Memo1))
  46. {
  47. leftPalletizingID = long.Parse(res.Memo1);
  48. }
  49. else
  50. {
  51. MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = obj.Entity.Code + res.ResMsg, Time = DateTime.Now }));
  52. throw new Exception(res.ResMsg);
  53. }
  54. }
  55. SqlSugarHelper.Do(db =>
  56. {
  57. var pallet = db.Default.Queryable<Palletizing>().With(SqlWith.NoLock).Where(v => v.TaskNum == obj.Data2.PalletID).First();
  58. if (pallet == null && leftPalletizingID == 0)
  59. {
  60. MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"{obj.Entity.Code},{obj.Data2.PalletID}无码垛位信息", Time = DateTime.Now }));
  61. throw new Exception("无码垛位信息");
  62. }
  63. var tempPalletizingID = pallet.ID;
  64. if (leftPalletizingID > 0)
  65. {
  66. tempPalletizingID = leftPalletizingID;
  67. }
  68. db.Default.Updateable<WCS_TaskOld>()
  69. .SetColumns(v => new WCS_TaskOld { Status = Entity.TaskStatus.Finish, EditTime = SqlFunc.GetDate() })
  70. .Where(v => v.Type == TaskType.OutDepot && v.BusType == "装箱码垛")
  71. .Where(v => v.Status == Entity.TaskStatus.码垛抓取完成)
  72. .Where(v => v.PalletizingID == tempPalletizingID)
  73. .SplitTable(v => v.Take(2))
  74. .ExecuteCommand();
  75. db.Default.Deleteable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.BusType == "装箱码垛")
  76. .Where(v => v.Status == Entity.TaskStatus.码垛抓取完成)
  77. .Where(v => v.PalletizingID == tempPalletizingID)
  78. .ExecuteCommand();
  79. if (obj.Data.VoucherNo == -1)
  80. {
  81. obj.Data.Cmd = RobotStationCmd.完成确认;
  82. obj.Data.VoucherNo = 1;
  83. }
  84. else
  85. {
  86. obj.Data.Cmd = RobotStationCmd.完成确认;
  87. obj.Data.VoucherNo++;
  88. }
  89. });
  90. World.Log($"码垛位{obj.Entity.Code}整垛完成交互结束时间: " + DateTime.Now.ToString("yyyyMMddHHmmss"));
  91. return;
  92. }
  93. if (obj.Data2.PalletID == 0)
  94. {
  95. SqlSugarHelper.Do(db =>
  96. {
  97. var pallet = db.Default.Queryable<Palletizing>().Where(v => v.PalletizState == 0)
  98. .Where(v => v.TaskNum == obj.Data3.TaskNumber).First();
  99. if (pallet == null)
  100. return;
  101. obj.Data.PalletID = pallet.TaskNum;
  102. obj.Data.Type = (short)pallet.GoodsType;
  103. obj.Data.MaxQty = (short)pallet.PalletMax;
  104. obj.Data.Cmd = RobotStationCmd.开始码垛;
  105. if (obj.Data.VoucherNo == -1)
  106. {
  107. obj.Data.VoucherNo = 1;
  108. }
  109. else
  110. {
  111. obj.Data.VoucherNo++;
  112. }
  113. });
  114. }
  115. else
  116. {
  117. if (obj.Data3.TaskNumber == 0)
  118. {
  119. World.Log("托盘未到位");
  120. MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"{obj.Entity.Code},{obj.Data3.TaskNumber}请检查托盘是否到位以及电控触摸屏上的任务号是否被清掉", Time = DateTime.Now }));
  121. return;
  122. }
  123. SqlSugarHelper.Do(db =>
  124. {
  125. var pallet = db.Default.Queryable<Palletizing>().Where(v => v.PalletizState == 0 && v.Count < v.Finish)
  126. .Where(v => v.TaskNum == obj.Data3.TaskNumber).First();
  127. if (pallet == null)
  128. {
  129. MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"{obj.Entity.Code},{obj.Data3.TaskNumber}未找到对应的码垛信息", Time = DateTime.Now }));
  130. return;
  131. }
  132. var flag = db.Default.Queryable<WCS_TaskInfo>()
  133. .Where(v => v.PalletizingID == pallet.ID)
  134. .Where(v => v.Status == Entity.TaskStatus.码垛抓取扫码 || v.Status == Entity.TaskStatus.码垛抓取中)
  135. .Any();
  136. if (flag)
  137. throw new Exception("有等待抓取的货物,无法执行强制完成");
  138. pallet.Count = pallet.Finish;
  139. db.Default.Updateable(pallet).ExecuteCommand();
  140. obj.Data.Cmd = RobotStationCmd.强制完成;
  141. if (obj.Data.VoucherNo == -1)
  142. {
  143. obj.Data.VoucherNo = 1;
  144. }
  145. else
  146. {
  147. obj.Data.VoucherNo++;
  148. }
  149. });
  150. }
  151. }
  152. public override bool Select(Device dev)
  153. {
  154. return true;// "" dev.Code == "8090" || dev.Code == "8092"||dev.Code=="8096";
  155. }
  156. }
  157. }