using Microsoft.AspNetCore.Http; using NetTaste; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PlcSiemens.Core.Extension; using PlcSiemens.O; using ServiceCenter.Extensions; using ServiceCenter.Logs; using ServiceCenter.SqlSugars; using SqlSugar; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; using System.Xml.Linq; using WCS.Core; using WCS.Entity; using WCS.WorkEngineering.Extensions; using WCS.WorkEngineering.Protocol.BCR; using WCS.WorkEngineering.Protocol.SRM; using WCS.WorkEngineering.Protocol.Station; using WCS.WorkEngineering.WebApi.Controllers; using WCS.WorkEngineering.Worlds; using static System.Runtime.InteropServices.JavaScript.JSType; using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags; namespace WCS.WorkEngineering.Systems { /// /// 装箱区贴标 /// [BelongTo(typeof(MainWorld))] [Description("装箱区贴标")] public class 装箱区贴标 : DeviceSystem> { protected override bool ParallelDo => true; protected override bool SaveLogsToFile => true; private List devs = new List(); private List srms = new List(); public override void Do(Device obj) { obj.入库站点是否满足执行条件(); SqlSugarHelper.Do(db => { //找到对应任务 var taskInfo = db.Default.Queryable().First(v => v.ID == obj.Data2.TaskNumber); //未找到对应任务 if (taskInfo == null) { obj.Data.TaskNumber = obj.Data2.TaskNumber; obj.Data.GoodsStart = obj.Entity.Code.ToShort(); obj.Data.GoodsEnd = 8148; obj.Data.VoucherNo++; throw new KnownException($"未找到对应WCS任务{obj.Data2.TaskNumber}", LogLevelEnum.High); } else { if (taskInfo.AddrNext == "8300") { //更新任务下一地址 taskInfo.AddrNext = "8161"; taskInfo.EditTime = DateTime.Now; taskInfo.EedTime = DateTime.Now; taskInfo.Weight = (float)Math.Round(obj.Data4.Weight, 2); try { WmsApi.WcsUploadInfo(taskInfo.ID,decimal.Parse(taskInfo.Weight.ToString()), taskInfo.BarCode); } catch (Exception ex) { throw new KnownException(ex.Message, LogLevelEnum.Mid); } db.Default.Updateable(taskInfo).ExecuteCommand(); } else//跟贴标机交互 { World.Log($"{obj.Entity.Code},贴标控埋点1,任务号:{taskInfo.ID}", LogLevelEnum.High); string cleardata = "~JA";// 清除打印 Send(cleardata); var labelResponse = WmsApi.GetLabelData(taskInfo.ID).JsonToString(); var jsonObj = JObject.Parse(labelResponse); string js = $"{jsonObj["FN7"]}"; string jsR = $"{jsonObj["FN6"]}"; if (string.IsNullOrEmpty(js) || string.IsNullOrEmpty(jsR)) { throw new KnownException($"贴标机打印数据不可为空", LogLevelEnum.High); } var a = js.Split(","); var b = jsR.ToArray(); var rx = " " + b[jsR.Length - 1].ToString(); if (string.IsNullOrEmpty(a[1]) || string.IsNullOrEmpty(rx)) { throw new KnownException($"贴标机打印箱号数据或绕向不可为空", LogLevelEnum.High); } //var conf = db.Default.Ado.SqlQuery("SELECT scontent FROM [WMS_ZT_01CP].[dbo].[sys_config] where code = 'ForbidBoxStockIn'").First(); string data = $"^XA\r\n^CI27\r\n^FT70,356^BQN,2,20\r\n"; 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"; #region old //string data = $"^XA\r\n^CI28\r\n^CW1,E:SIMSUN.TTF\r\n^XFE:{jsonObj["LabelName"]}^FS\r\n"; //for (int i = 1; i < jsonObj.Count; i++) //{ // data += $"^FN{i}^{jsonObj[$"FN{i}"]}^FS\r\n"; //} //if (data.Contains("FDLA")) //{ // data += "^PQ1,0,1,Y\r\n^XZ"; //} //else //{ // data += "^XZ"; //} #endregion Send(data); World.Log($"{obj.Entity.Code},贴标控埋点2,任务号:{taskInfo.ID}", LogLevelEnum.High); obj.Data.TaskNumber = obj.Data2.TaskNumber; obj.Data.GoodsStart = obj.Entity.Code.ToShort(); obj.Data.GoodsEnd = taskInfo.AddrNext.ToShort(); obj.Data.VoucherNo++; World.Log($"{obj.Entity.Code},贴标控埋点3,任务号:{taskInfo.ID}", LogLevelEnum.High); } } }); } public void Send(string data) { try { IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("10.30.43.81"), 9100); Socket client = new(iPEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); client.Connect(iPEndPoint); byte[] databyte = Encoding.UTF8.GetBytes(data); client.Send(databyte, SocketFlags.None); client.Close(); } catch (Exception ex) { throw new KnownException($"贴标机打印数据发送失败,原因:{ex.Message}", LogLevelEnum.High); } } public override bool Select(Device dev) { return dev.Code == "8300"; } } }