装箱区贴标.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. using Microsoft.AspNetCore.Http;
  2. using NetTaste;
  3. using Newtonsoft.Json;
  4. using Newtonsoft.Json.Linq;
  5. using PlcSiemens.Core.Extension;
  6. using PlcSiemens.O;
  7. using ServiceCenter.Extensions;
  8. using ServiceCenter.Logs;
  9. using ServiceCenter.SqlSugars;
  10. using SqlSugar;
  11. using System;
  12. using System.Collections;
  13. using System.Collections.Generic;
  14. using System.ComponentModel;
  15. using System.Linq;
  16. using System.Net;
  17. using System.Net.Sockets;
  18. using System.Text;
  19. using System.Text.Encodings.Web;
  20. using System.Text.Json;
  21. using System.Text.Json.Nodes;
  22. using System.Threading.Tasks;
  23. using System.Xml.Linq;
  24. using WCS.Core;
  25. using WCS.Entity;
  26. using WCS.WorkEngineering.Extensions;
  27. using WCS.WorkEngineering.Protocol.BCR;
  28. using WCS.WorkEngineering.Protocol.SRM;
  29. using WCS.WorkEngineering.Protocol.Station;
  30. using WCS.WorkEngineering.WebApi.Controllers;
  31. using WCS.WorkEngineering.Worlds;
  32. using static System.Runtime.InteropServices.JavaScript.JSType;
  33. using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
  34. namespace WCS.WorkEngineering.Systems
  35. {
  36. /// <summary>
  37. /// 装箱区贴标
  38. /// </summary>
  39. [BelongTo(typeof(MainWorld))]
  40. [Description("装箱区贴标")]
  41. public class 装箱区贴标 : DeviceSystem<Device<IStation520, IStation521, IStation523, IStation91>>
  42. {
  43. protected override bool ParallelDo => true;
  44. protected override bool SaveLogsToFile => true;
  45. private List<Station> devs = new List<Station>();
  46. private List<SRM> srms = new List<SRM>();
  47. public override void Do(Device<IStation520, IStation521, IStation523, IStation91> obj)
  48. {
  49. obj.入库站点是否满足执行条件();
  50. SqlSugarHelper.Do(db =>
  51. {
  52. //找到对应任务
  53. var taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskNumber || (v.ID == obj.Data2.TaskNumber && v.BusType == "砝码出库"));
  54. //未找到对应任务
  55. if (taskInfo == null)
  56. {
  57. obj.Data.TaskNumber = obj.Data2.TaskNumber;
  58. obj.Data.GoodsStart = obj.Entity.Code.ToShort();
  59. obj.Data.GoodsEnd = 8148;
  60. obj.Data.VoucherNo++;
  61. throw new KnownException($"未找到对应WCS任务{obj.Data2.TaskNumber}", LogLevelEnum.High);
  62. }
  63. else
  64. {
  65. if (taskInfo.AddrNext == "8300")
  66. {
  67. //更新任务下一地址
  68. taskInfo.AddrNext = "8161";
  69. taskInfo.EditTime = DateTime.Now;
  70. taskInfo.EedTime = DateTime.Now;
  71. taskInfo.Weight = (float)Math.Round(obj.Data4.Weight, 2);
  72. try { WmsApi.WcsUploadInfo(taskInfo.ID,decimal.Parse(taskInfo.Weight.ToString()), taskInfo.BarCode); }
  73. catch (Exception ex) { throw new KnownException(ex.Message, LogLevelEnum.Mid); }
  74. db.Default.Updateable(taskInfo).ExecuteCommand();
  75. }
  76. else//跟贴标机交互
  77. {
  78. World.Log($"{obj.Entity.Code},贴标控埋点1,任务号:{taskInfo.ID}", LogLevelEnum.High);
  79. string cleardata = "~JA";// 清除打印
  80. Send(cleardata);
  81. var labelResponse = WmsApi.GetLabelData(taskInfo.ID).JsonToString();
  82. var jsonObj = JObject.Parse(labelResponse);
  83. string js = $"{jsonObj["FN7"]}";
  84. string jsR = $"{jsonObj["FN6"]}";
  85. if (string.IsNullOrEmpty(js) || string.IsNullOrEmpty(jsR))
  86. {
  87. throw new KnownException($"贴标机打印数据不可为空", LogLevelEnum.High);
  88. }
  89. var a = js.Split(",");
  90. var b = jsR.ToArray();
  91. var rx = " " + b[jsR.Length - 1].ToString();
  92. if (string.IsNullOrEmpty(a[1]) || string.IsNullOrEmpty(rx))
  93. {
  94. throw new KnownException($"贴标机打印箱号数据或绕向不可为空", LogLevelEnum.High);
  95. }
  96. //var conf = db.Default.Ado.SqlQuery<string>("SELECT scontent FROM [WMS_ZT_01CP].[dbo].[sys_config] where code = 'ForbidBoxStockIn'").First();
  97. string data = $"^XA\r\n^CI27\r\n^FT70,356^BQN,2,20\r\n";
  98. data += $"^FH\\^{js}^FS\r\n^FT85,500^A0N,71,71^FH\\^CI28^FD{a[1]}{rx}^FS^CI27\r\n^PQ1,0,1,Y\r\n^XZ";
  99. #region old
  100. //string data = $"^XA\r\n^CI28\r\n^CW1,E:SIMSUN.TTF\r\n^XFE:{jsonObj["LabelName"]}^FS\r\n";
  101. //for (int i = 1; i < jsonObj.Count; i++)
  102. //{
  103. // data += $"^FN{i}^{jsonObj[$"FN{i}"]}^FS\r\n";
  104. //}
  105. //if (data.Contains("FDLA"))
  106. //{
  107. // data += "^PQ1,0,1,Y\r\n^XZ";
  108. //}
  109. //else
  110. //{
  111. // data += "^XZ";
  112. //}
  113. #endregion
  114. Send(data);
  115. World.Log($"{obj.Entity.Code},贴标控埋点2,任务号:{taskInfo.ID}", LogLevelEnum.High);
  116. obj.Data.TaskNumber = obj.Data2.TaskNumber;
  117. obj.Data.GoodsStart = obj.Entity.Code.ToShort();
  118. obj.Data.GoodsEnd = taskInfo.AddrNext.ToShort();
  119. obj.Data.VoucherNo++;
  120. World.Log($"{obj.Entity.Code},贴标控埋点3,任务号:{taskInfo.ID}", LogLevelEnum.High);
  121. }
  122. }
  123. });
  124. }
  125. public void Send(string data)
  126. {
  127. try
  128. {
  129. IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("10.30.43.81"), 9100);
  130. Socket client = new(iPEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
  131. client.Connect(iPEndPoint);
  132. byte[] databyte = Encoding.UTF8.GetBytes(data);
  133. client.Send(databyte, SocketFlags.None);
  134. client.Close();
  135. }
  136. catch (Exception ex)
  137. {
  138. throw new KnownException($"贴标机打印数据发送失败,原因:{ex.Message}", LogLevelEnum.High);
  139. }
  140. }
  141. public override bool Select(Device dev)
  142. {
  143. return dev.Code == "8300";
  144. }
  145. }
  146. }