库尾贴标.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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},任务{taskInfo.ID},目标地址{obj.Entity.Code.ToShort()}");
  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.GoodsEnd = obj.Entity.Code.ToShort();
  96. obj.Data.VoucherNo++;
  97. World.Log($"id{taskInfo.ID},end{obj.Entity.Code.ToShort()},voucherno{obj.Data.VoucherNo}");
  98. //是否启用贴标机
  99. var isUse = db.Default.Ado.SqlQuery<string>("SELECT scontent FROM [WMS_ZT_01CP].[dbo].[sys_config] where code = 'LabellerEnabled'").First();
  100. if (!string.IsNullOrEmpty(isUse) && isUse == "0")
  101. {
  102. World.Log("贴标机已禁用");
  103. }
  104. //跟贴标机交互
  105. else{
  106. //World.Log($"{obj.Entity.Code},贴标控埋点1,任务号:{taskInfo.ID}", LogLevelEnum.High);
  107. string cleardata = "~JA";// 清除打印
  108. Send(cleardata);
  109. var labelResponse = WmsApi.GetLabelData(taskInfo.ID).JsonToString();
  110. var jsonObj = JObject.Parse(labelResponse);
  111. string data = $"^XA\r\n^CI28\r\n^CW1,E:SIMSUN.TTF\r\n^XFE:{jsonObj["LabelName"]}^FS\r\n";
  112. for (int i = 1; i < jsonObj.Count; i++)
  113. {
  114. data += $"^FN{i}^{jsonObj[$"FN{i}"]}^FS\r\n";
  115. }
  116. if (data.Contains("FDLA"))
  117. {
  118. data += "^PQ1,0,1,Y\r\n^XZ";
  119. }
  120. else
  121. {
  122. data += "^XZ";
  123. }
  124. Send(data);
  125. }
  126. World.Log($"贴标机是否禁用{isUse}");
  127. }
  128. taskInfo.Status = Entity.TaskStatus.Finish;
  129. taskInfo.EditTime = DateTime.Now;
  130. taskInfo.EedTime = DateTime.Now;
  131. taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, taskInfo.AddrNext, $"出库任务完成");
  132. db.Default.Updateable(taskInfo).ExecuteCommand();
  133. if (taskInfo.Status == TaskStatus.Finish)
  134. {
  135. WmsApi.CompleteTask(taskInfo.ID);
  136. taskInfo.CompleteOrCancelTasks(db);
  137. }
  138. World.Log($"{obj.Entity.Code},贴标控埋点2,任务号:{taskInfo.ID}", LogLevelEnum.High);
  139. });
  140. }
  141. public void Send(string data)
  142. {
  143. try
  144. {
  145. IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("10.30.43.8"), 9100);
  146. Socket client = new(iPEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
  147. client.Connect(iPEndPoint);
  148. byte[] databyte = Encoding.UTF8.GetBytes(data);
  149. client.Send(databyte, SocketFlags.None);
  150. client.Close();
  151. }
  152. catch (Exception ex)
  153. {
  154. throw new KnownException($"贴标机打印数据发送失败,原因:{ex.Message}", LogLevelEnum.High);
  155. }
  156. }
  157. public override bool Select(Device dev)
  158. {
  159. return dev.Code == "8278";
  160. }
  161. }
  162. }