using ServiceCenter.Logs; using ServiceCenter.SqlSugars; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Net.Sockets; using System.Net; using System.Text; using System.Threading.Tasks; using WCS.Core; using WCS.WorkEngineering.Extensions; using WCS.WorkEngineering.Protocol.Station; using WCS.WorkEngineering.Worlds; using WCS.WorkEngineering.WebApi.Controllers; using ServiceCenter.Extensions; using Newtonsoft.Json.Linq; using WCS.Entity; using TaskStatus = WCS.Entity.TaskStatus; using WCS.WorkEngineering.Protocol.BCR; 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.入库站点是否满足执行条件(); #region test //World.Log(bcr); ////test //var str1 = "LABLC"; //string data = $"^XA\r\n^CI28\r\n^CW1,E:SIMSUN.TTF\r\n^XFE:{str1}^FS\r\n"; //var fn1 = "FD1810204013"; //var fn2 = "FD3x0.20+6x0.35 HT LC BS80/33-7000"; //var fn3 = "FD1496.00KG"; //var fn4 = "FD塑料隔板(中层)"; //var fn5 = "FD62101201"; //var fn6 = "FDBS80/33 绕向:R"; //var fn7 = "FDLA,1810204013"; //var fn8 = "FD1810204013"; //{ // 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"; //} //if (data.Contains("FDLA")) //{ // data += "^PQ1,0,1,Y\r\n^XZ"; //} //else //{ // data += "^XZ"; //} //Send(data); #endregion SqlSugarHelper.Do(db => { WCS_TaskInfo taskInfo = null; //找到对应任务 taskInfo = db.Default.Queryable().First(v => v.ID == obj.Data2.TaskNumber && v.Status == Entity.TaskStatus.ConveyorExecution); //未找到对应任务 if (taskInfo == null) { throw new KnownException($"未找到对应WCS任务{obj.Data2.TaskNumber}", LogLevelEnum.High); } //非正常箱、铁托不贴标不扫码 else if (!taskInfo.TaskGroupKey.StartsWith("181") || taskInfo.BarCode.Length == 13 || taskInfo.BusType == "空托盘出库") { obj.Data.TaskNumber = taskInfo.ID; obj.Data.GoodsStart = obj.Entity.Code.ToShort(); obj.Data.VoucherNo++; World.Log($"箱号{taskInfo.TaskGroupKey},任务{taskInfo.ID},目标地址{obj.Entity.Code.ToShort()}"); } else { var bcr = obj.Data4.GetBCRCode(); if (string.IsNullOrEmpty(bcr)) { throw new KnownException($"条码为空,条码值[{bcr}]", LogLevelEnum.High); } //找到对应任务 taskInfo = db.Default.Queryable().First(v => v.ID == obj.Data2.TaskNumber && v.Status == Entity.TaskStatus.ConveyorExecution && v.BarCode == bcr); //未找到对应任务 if (taskInfo == null) { throw new KnownException($"未找到对应WCS任务{obj.Data2.TaskNumber}条码{bcr}", LogLevelEnum.High); } obj.Data.TaskNumber = taskInfo.ID; obj.Data.GoodsEnd = obj.Entity.Code.ToShort(); obj.Data.VoucherNo++; World.Log($"id{taskInfo.ID},end{obj.Entity.Code.ToShort()},voucherno{obj.Data.VoucherNo}"); //是否启用贴标机 var isUse = db.Default.Ado.SqlQuery("SELECT scontent FROM [WMS_ZT_01CP].[dbo].[sys_config] where code = 'LabellerEnabled'").First(); if (!string.IsNullOrEmpty(isUse) && isUse == "0") { World.Log("贴标机已禁用"); } //跟贴标机交互 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 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"; } Send(data); } World.Log($"贴标机是否禁用{isUse}"); } taskInfo.Status = Entity.TaskStatus.Finish; taskInfo.EditTime = DateTime.Now; taskInfo.EedTime = DateTime.Now; taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, taskInfo.AddrNext, $"出库任务完成"); db.Default.Updateable(taskInfo).ExecuteCommand(); if (taskInfo.Status == TaskStatus.Finish) { WmsApi.CompleteTask(taskInfo.ID); taskInfo.CompleteOrCancelTasks(db); } World.Log($"{obj.Entity.Code},贴标控埋点2,任务号:{taskInfo.ID}", LogLevelEnum.High); }); } public void Send(string data) { try { IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("10.30.43.8"), 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 == "8278"; } } }