| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 | 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{ /// <summary>  ///  库尾贴标  /// </summary>    [BelongTo(typeof(MainWorld))]    [Description("库尾贴标")]    public class 库尾贴标 : DeviceSystem<Device<IStation520, IStation521, IStation523, IBCR81>>    {        protected override bool ParallelDo => true;        protected override bool SaveLogsToFile => true;        private List<Station> devs = new List<Station>();        private List<SRM> srms = new List<SRM>();        public override void Do(Device<IStation520, IStation521, IStation523, IBCR81> 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<WCS_TaskInfo>().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<WCS_TaskInfo>().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<string>("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";        }    }}
 |