库尾贴标.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. using ServiceCenter.Logs;
  2. using ServiceCenter.SqlSugars;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Linq;
  7. using System.Net.Sockets;
  8. using System.Net;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using WCS.Core;
  12. using WCS.WorkEngineering.Extensions;
  13. using WCS.WorkEngineering.Protocol.Station;
  14. using WCS.WorkEngineering.Worlds;
  15. using WCS.WorkEngineering.WebApi.Controllers;
  16. using ServiceCenter.Extensions;
  17. using Newtonsoft.Json.Linq;
  18. using WCS.Entity;
  19. using TaskStatus = WCS.Entity.TaskStatus;
  20. using WCS.WorkEngineering.Protocol.BCR;
  21. namespace WCS.WorkEngineering.Systems
  22. { /// <summary>
  23. /// 库尾贴标
  24. /// </summary>
  25. [BelongTo(typeof(MainWorld))]
  26. [Description("库尾贴标")]
  27. public class 库尾贴标 : DeviceSystem<Device<IStation520, IStation521, IStation523, IBCR81>>
  28. {
  29. protected override bool ParallelDo => true;
  30. protected override bool SaveLogsToFile => true;
  31. private List<Station> devs = new List<Station>();
  32. private List<SRM> srms = new List<SRM>();
  33. public override void Do(Device<IStation520, IStation521, IStation523, IBCR81> obj)
  34. {
  35. obj.入库站点是否满足执行条件();
  36. #region test
  37. //World.Log(bcr);
  38. ////test
  39. //var str1 = "LABLC";
  40. //string data = $"^XA\r\n^CI28\r\n^CW1,E:SIMSUN.TTF\r\n^XFE:{str1}^FS\r\n";
  41. //var fn1 = "FD1810204013";
  42. //var fn2 = "FD3x0.20+6x0.35 HT LC BS80/33-7000";
  43. //var fn3 = "FD1496.00KG";
  44. //var fn4 = "FD塑料隔板(中层)";
  45. //var fn5 = "FD62101201";
  46. //var fn6 = "FDBS80/33 绕向:R";
  47. //var fn7 = "FDLA,1810204013";
  48. //var fn8 = "FD1810204013";
  49. //{
  50. // data += $"^FN{1}^{fn1}^FS\r\n^FN{2}^{fn2}^FS\r\n^FN{3}^{fn3}^FS\r\n^FN{4}^{fn4}^FS\r\n^FN{5}^{fn5}^FS\r\n^FN{6}^{fn6}^FS\r\n^FN{7}^{fn7}^FS\r\n^FN{8}^{fn8}^FS\r\n";
  51. //}
  52. //if (data.Contains("FDLA"))
  53. //{
  54. // data += "^PQ1,0,1,Y\r\n^XZ";
  55. //}
  56. //else
  57. //{
  58. // data += "^XZ";
  59. //}
  60. //Send(data);
  61. #endregion
  62. SqlSugarHelper.Do(db =>
  63. {
  64. WCS_TaskInfo taskInfo = null;
  65. //找到对应任务
  66. taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskNumber && v.Status == Entity.TaskStatus.ConveyorExecution);
  67. //未找到对应任务
  68. if (taskInfo == null)
  69. {
  70. throw new KnownException($"未找到对应WCS任务{obj.Data2.TaskNumber}", LogLevelEnum.High);
  71. }
  72. //非正常箱、铁托不贴标不扫码
  73. else if (!taskInfo.TaskGroupKey.StartsWith("181") || taskInfo.BarCode.Length == 13 || taskInfo.BusType == "空托盘出库")
  74. {
  75. obj.Data.TaskNumber = taskInfo.ID;
  76. obj.Data.GoodsStart = obj.Entity.Code.ToShort();
  77. obj.Data.VoucherNo++;
  78. World.Log($"箱号{taskInfo.TaskGroupKey}");
  79. }
  80. else
  81. {
  82. var bcr = obj.Data4.GetBCRCode();
  83. if (string.IsNullOrEmpty(bcr))
  84. {
  85. throw new KnownException($"条码为空,条码值[{bcr}]", LogLevelEnum.High);
  86. }
  87. //找到对应任务
  88. taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskNumber && v.Status == Entity.TaskStatus.ConveyorExecution && v.BarCode == bcr);
  89. //未找到对应任务
  90. if (taskInfo == null)
  91. {
  92. throw new KnownException($"未找到对应WCS任务{obj.Data2.TaskNumber}条码{bcr}", LogLevelEnum.High);
  93. }
  94. obj.Data.TaskNumber = taskInfo.ID;
  95. obj.Data.GoodsStart = obj.Entity.Code.ToShort();
  96. obj.Data.VoucherNo++;
  97. //跟贴标机交互
  98. //{
  99. // World.Log($"{obj.Entity.Code},贴标控埋点1,任务号:{taskInfo.ID}", LogLevelEnum.High);
  100. // string cleardata = "~JA";// 清除打印
  101. // Send(cleardata);
  102. // var labelResponse = WmsApi.GetLabelData(taskInfo.ID).JsonToString();
  103. // var jsonObj = JObject.Parse(labelResponse);
  104. // string data = $"^XA\r\n^CI28\r\n^CW1,E:SIMSUN.TTF\r\n^XFE:{jsonObj["LabelName"]}^FS\r\n";
  105. // for (int i = 1; i < jsonObj.Count; i++)
  106. // {
  107. // data += $"^FN{i}^{jsonObj[$"FN{i}"]}^FS\r\n";
  108. // }
  109. // if (data.Contains("FDLA"))
  110. // {
  111. // data += "^PQ1,0,1,Y\r\n^XZ";
  112. // }
  113. // else
  114. // {
  115. // data += "^XZ";
  116. // }
  117. // Send(data);
  118. //}
  119. }
  120. taskInfo.Status = Entity.TaskStatus.Finish;
  121. taskInfo.EditTime = DateTime.Now;
  122. taskInfo.EedTime = DateTime.Now;
  123. taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, taskInfo.AddrNext, $"出库任务完成");
  124. db.Default.Updateable(taskInfo).ExecuteCommand();
  125. if (taskInfo.Status == TaskStatus.Finish)
  126. {
  127. WmsApi.CompleteTask(taskInfo.ID);
  128. taskInfo.CompleteOrCancelTasks(db);
  129. }
  130. World.Log($"{obj.Entity.Code},贴标控埋点2,任务号:{taskInfo.ID}", LogLevelEnum.High);
  131. });
  132. }
  133. public void Send(string data)
  134. {
  135. try
  136. {
  137. IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("10.30.43.8"), 9100);
  138. Socket client = new(iPEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
  139. client.Connect(iPEndPoint);
  140. byte[] databyte = Encoding.UTF8.GetBytes(data);
  141. client.Send(databyte, SocketFlags.None);
  142. client.Close();
  143. }
  144. catch (Exception ex)
  145. {
  146. throw new KnownException($"贴标机打印数据发送失败,原因:{ex.Message}", LogLevelEnum.High);
  147. }
  148. }
  149. public override bool Select(Device dev)
  150. {
  151. return dev.Code == "8278";
  152. }
  153. }
  154. }