| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | 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{    /// <summary>    ///  装箱区贴标    /// </summary>    [BelongTo(typeof(MainWorld))]    [Description("装箱区贴标")]    public class 装箱区贴标 : DeviceSystem<Device<IStation520, IStation521, IStation523, IStation91>>    {        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, IStation91> obj)        {            obj.入库站点是否满足执行条件();            SqlSugarHelper.Do(db =>            {                               //找到对应任务                var taskInfo = db.Default.Queryable<WCS_TaskInfo>().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<string>("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";        }    }}
 |