lss
2025-06-27 e3ee006de3ccd8940ad2a600c03675cd2ac5e2cb
HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/TaskProcess.cs
@@ -2,10 +2,13 @@
using HH.WCS.JiaTong.core;
using HH.WCS.JiaTong.device;
using HH.WCS.JiaTong.dispatch;
using HH.WCS.JiaTong.LISTA.models;
using HH.WCS.JiaTong.LISTA.process;
using HH.WCS.JiaTong.util;
using HH.WCS.JiaTong.wms;
using Microsoft.Owin.BuilderProperties;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar;
using System;
using System.Collections.Generic;
@@ -13,6 +16,8 @@
using System.IdentityModel.Protocols.WSTrust;
using System.Linq;
using System.Security.Cryptography;
using System.Threading;
using System.Threading.Tasks;
using static HH.WCS.JiaTong.api.ApiModel;
using static HH.WCS.JiaTong.LISTA.process.HttpModel;
@@ -32,15 +37,33 @@
            var trayCarryCount = mst.N_CNTR_COUNT > 0 ? mst.N_CNTR_COUNT : 1;
            if (load)
            {
                Console.WriteLine($"任务{mst.S_CODE} 货位{mst.S_START_LOC}取货完成,起点解绑容器{mst.S_CNTR_CODE}");
                LogHelper.Info($"任务{mst.S_CODE} 货位{mst.S_START_LOC}取货完成,起点解绑容器{mst.S_CNTR_CODE}");
                LocationHelper.UnBindingLoc(mst.S_START_LOC, mst.S_CNTR_CODE.Split(',').ToList());
                //Console.WriteLine($"任务{mst.S_CODE} 货位{mst.S_START_LOC}取货完成,起点解绑容器{mst.S_CNTR_CODE}");
                if (!string.IsNullOrEmpty(mst.S_CNTR_CODE))
                {
                    LogHelper.Info($"任务{mst.S_CODE} 货位{mst.S_START_LOC}取货完成,起点解绑容器{mst.S_CNTR_CODE}");
                    LocationHelper.UnBindingLoc(mst.S_START_LOC, mst.S_CNTR_CODE.Split(',').ToList());
                }
                else
                {
                    LogHelper.Info($"任务{mst.S_CODE} 托盘为空 ,只解锁货位");
                    LocationHelper.UnlockLoc(mst.S_START_LOC);
                }
            }
            else
            {
                Console.WriteLine($"任务{mst.S_CODE} 货位{mst.S_END_LOC}卸货完成,终点绑定容器{mst.S_CNTR_CODE}");
                LogHelper.Info($"任务{mst.S_CODE} 货位{mst.S_END_LOC}卸货完成,起点解绑容器{mst.S_CNTR_CODE}");
                LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList());
                // Console.WriteLine($"任务{mst.S_CODE} 货位{mst.S_END_LOC}卸货完成,终点绑定容器{mst.S_CNTR_CODE}");
                if (!string.IsNullOrEmpty(mst.S_CNTR_CODE))
                {
                    LogHelper.Info($"任务{mst.S_CODE} 货位{mst.S_END_LOC}卸货完成,终点绑定容器{mst.S_CNTR_CODE}");
                    LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList());
                }
                else
                {
                    LogHelper.Info($"任务{mst.S_CODE} 托盘为空 ,只解锁货位");
                    LocationHelper.UnlockLoc(mst.S_END_LOC);
                }
            }
        }
@@ -61,27 +84,24 @@
            }
            else
            {
                //起点终点解锁
                LocationHelper.UnLockLoc(mst.S_START_LOC);
                LocationHelper.UnLockLoc(mst.S_END_LOC);
            }
        }
        /// <summary>
        /// 安全请求
        /// </summary>
        /// <param name="model"></param>
        /// <param name="url"></param>
        /// <param name="wcs"></param>
        internal static void OperateReq(AgvTaskState model,  string url, WCSTask TN_Task)
        /// <param name="model">请求参数</param>
        /// <param name="url">地址</param>
        /// <param name="TN_Task">任务</param>
        internal static void OperateReq(AgvTaskState model, string url, WCSTask TN_Task)
        {
            try
            {
                LogHelper.Info($"-------开始安全请求------");
                if (TN_Task != null)
                {
                    int type = 0;
@@ -92,7 +112,38 @@
                        //请求取货,
                        type = 1;
                        loc = TN_Task.S_START_LOC;
                        if (TN_Task.Z_TYPE == 4)//原材料库国自安全交互
                        if (TN_Task.S_TYPE.Contains("电梯2"))
                        {
                            var device = Settings.deviceInfos.Where(a => a.TN_Location == TN_Task.S_START_LOC).FirstOrDefault();
                            var EndLoc = LocationHelper.GetLocByLoc(TN_Task.S_END_LOC);
                            if (device == null)
                            {
                                LogHelper.Info($"根据任务起点:{TN_Task.S_START_LOC},未找到对应电梯配置文件");
                            }
                            if (EndLoc == null)
                            {
                                LogHelper.Info($"根据任务终点:{TN_Task.S_END_LOC},未找到对应货位");
                            }
                            var value = ModbusHelper.ReadHoldingRegisters(40005, 1, device.address, 1024);
                            var value2 = ModbusHelper.ReadHoldingRegisters(40101, 1, device.address, 1024);
                            if (value[0] == EndLoc.N_LAYER && value2[0] == 2)
                            {
                                NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                            }
                            else
                            {
                                int layerValue = 0;
                                if (EndLoc.N_LAYER == 1) layerValue = 1;
                                else if (EndLoc.N_LAYER == 2) layerValue = 3;
                                else if (EndLoc.N_LAYER == 3) layerValue = 5;
                                ModbusHelper.WriteSingleRegister(40089, layerValue, device.address, 1024);
                                ModbusHelper.WriteSingleRegister(40101, 2, device.address, 1024);
                                ModbusHelper.WriteSingleRegister(40003, 2, device.address, 1024);
                                ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024);
                            }
                        }
                        else if (TN_Task.Z_TYPE == 4)//原材料库国自安全交互
                        {
                            if (GZOperateReqByPost(url, TN_Task.S_EQ_NO, loc, type))
                            {
@@ -103,12 +154,33 @@
                        else
                        {
                            //井松叠盘机安全交互
                            if (TN_Task.Z_TYPE == 2&& TN_Task.S_NOTE=="空托回库")
                            if (TN_Task.S_NOTE == "空托回库")
                            {
                                if (S7Helper.ReadDpj("DB200.DBX0.4")==1)
                                var Device = Settings.deviceInfos.Where(a => a.TN_Location == TN_Task.S_START_LOC).FirstOrDefault();
                                if (Device != null)
                                {
                                    NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                                }
                                    if (S7Helper.WriteDpj(Device.address, 1002, 1))
                                    {
                                        int value = S7Helper.ReadDpj(Device.address, 2004, S7.Net.VarType.Byte);
                                        if (value == 1)
                                        {
                                            NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                                        }
                                        else
                                        {
                                            LogHelper.Info("叠盘机安全交互失败,读取VB2004的值为{2004}");
                                        }
                                    }
                                    else
                                    {
                                        LogHelper.Info("叠盘机安全交互失败,写入VB1002值1失败");
                                    }
                                }
                                else
                                {
                                    LogHelper.Info($"叠盘机安全交互失败,根据任务起点{TN_Task.S_START_LOC},未找到叠盘机配置文件");
                                }
                            }
                            else
                            {
@@ -118,7 +190,7 @@
                                    NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                                }
                            }
                        }
@@ -134,9 +206,37 @@
                                //NDCHelper.ChangeParam(TN_Task.S_CODE.Trim(), 1101, 18);
                            }
                        }
                        if (TN_Task.Z_TYPE == 2 && TN_Task.S_NOTE == "空托回库")
                        if (TN_Task.S_NOTE == "空托回库")
                        {
                            S7Helper.WriteDpj("DB100.DBX0.1",1);
                            var Device = Settings.deviceInfos.Where(a => a.TN_Location == TN_Task.S_START_LOC).FirstOrDefault();
                            if (Device != null)
                            {
                                //写入失败重新写入
                                if (!S7Helper.WriteDpj(Device.address, 1001, 1))
                                {
                                    Task.Run(() =>
                                    {
                                        while (!S7Helper.WriteDpj(Device.address, 1001, 1))
                                        {
                                            Thread.Sleep(1000);
                                        }
                                    });
                                }
                                if (!S7Helper.WriteDpj(Device.address, 1002, 0))
                                {
                                    Task.Run(() =>
                                    {
                                        while (!S7Helper.WriteDpj(Device.address, 1002, 0))
                                        {
                                            Thread.Sleep(1000);
                                        }
                                    });
                                }
                            }
                            else
                            {
                                LogHelper.Info($"叠盘机安全交互失败,根据任务起点{TN_Task.S_START_LOC},未找到叠盘机配置文件");
                            }
                        }
                    }
                    if (model.state == 1103)
@@ -144,9 +244,41 @@
                        //请求卸货
                        type = 2;
                        loc = TN_Task.S_END_LOC;
                        if (TN_Task.Z_TYPE == 4)//原材料库国自安全交互
                        if (TN_Task.S_TYPE.Contains("电梯1"))
                        {
                            loc = TN_Task.S_END_LOC;
                            var device = Settings.deviceInfos.Where(a => a.TN_Location == TN_Task.S_END_LOC).FirstOrDefault();
                            var startloc = LocationHelper.GetLocByLoc(TN_Task.S_START_LOC);
                            if (device == null)
                            {
                                LogHelper.Info($"根据任务终点:{TN_Task.S_END_LOC},未找到对应电梯配置文件");
                            }
                            if (startloc == null)
                            {
                                LogHelper.Info($"根据任务起点:{TN_Task.S_START_LOC},未找到对应货位");
                            }
                            var value = ModbusHelper.ReadHoldingRegisters(40005, 1, device.address, 1024);
                            var value2 = ModbusHelper.ReadHoldingRegisters(40101, 1, device.address, 1024);
                            if (value[0] == startloc.N_LAYER && value2[0] == 2)
                            {
                                NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1");
                            }
                            else
                            {
                                int layerValue = 0;
                                if (startloc.N_LAYER == 1) layerValue = 1;
                                else if (startloc.N_LAYER == 2) layerValue = 3;
                                else if (startloc.N_LAYER == 3) layerValue = 5;
                                ModbusHelper.WriteSingleRegister(40101, 2, device.address, 1024);
                                ModbusHelper.WriteSingleRegister(40003, 2, device.address, 1024);
                                ModbusHelper.WriteSingleRegister(40089, layerValue, device.address, 1024);
                                ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024);
                            }
                        }
                        else if (TN_Task.Z_TYPE == 4)//原材料库国自安全交互
                        {
                            // loc = TN_Task.S_END_LOC;
                            if (GZOperateReqByPost(url, TN_Task.S_EQ_NO, loc, type))
                            {
                                // NDCHelper.ChangeParam(TN_Task.S_CODE.Trim(), 1103, 18);
@@ -164,7 +296,38 @@
                    if (model.state == 1104)
                    {
                        type = 4;
                        if (TN_Task.Z_TYPE == 4)//原材料库国自安全交互
                        if (TN_Task.S_TYPE.Contains("电梯1"))
                        {
                            var db = new SqlHelper<object>().GetInstance();
                            var device = Settings.deviceInfos.Where(a => a.TN_Location == TN_Task.S_END_LOC).FirstOrDefault();
                            var mstbyEqno = db.Queryable<WCSTask>().Where(a => a.S_EQ_NO == TN_Task.S_EQ_NO && a.S_TYPE.Contains("电梯2")).First();
                            if (mstbyEqno != null)
                            {
                                var Endloc = LocationHelper.GetLocByLoc(mstbyEqno.S_END_LOC);
                                // var startloc = LocationHelper.GetLocByLoc(TN_Task.S_START_LOC);
                                if (device == null)
                                {
                                    LogHelper.Info($"根据任务终点:{TN_Task.S_END_LOC},未找到对应电梯配置文件");
                                }
                                if (Endloc == null)
                                {
                                    LogHelper.Info($"根据任务终点:{mstbyEqno.S_END_LOC},未找到对应货位");
                                }
                                int value = 0;
                                if (Endloc.N_LAYER == 1) value = 1;
                                else if (Endloc.N_LAYER == 2) value = 3;
                                else if (Endloc.N_LAYER == 3) value = 5;
                                ModbusHelper.WriteSingleRegister(40089, value, device.address, 1024);
                                ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024);
                            }
                            else
                            {
                                LogHelper.Info($"根据任务来源:{TN_Task.S_EQ_NO},未找到电梯2任务");
                            }
                        }
                        else if (TN_Task.Z_TYPE == 4)//原材料库国自安全交互
                        {
                            loc = TN_Task.S_END_LOC;
                            if (GZOperateReqByPost(url, TN_Task.S_EQ_NO, loc, type))
@@ -174,7 +337,7 @@
                        }
                    }
                }
            }
            catch (Exception ex)
            {
@@ -218,6 +381,7 @@
                else
                {
                    LogHelper.Info($"安全请求失败=>msg:{result.msg}");
                    ApiHelper.AddErrorInfo("安全交互失败", result.msg, "", tasknum);
                }
                return permit;
            }
@@ -267,6 +431,7 @@
                else
                {
                    LogHelper.Info($"安全请求失败=>msg:{result.err_msg}");
                    ApiHelper.AddErrorInfo("安全交互失败", result.err_msg, "", no);
                }
                return permit;
            }
@@ -288,6 +453,14 @@
        {
            var result = true;
            var db = new SqlHelper<object>().GetInstance();
            //根据起点仓库编码判断是否可以推送
            var taskLimit = db.Queryable<TASK_LIMIT>().Where(a => a.S_WH_CODE == mst.S_START_WH && a.OPEN == "1").First();
            if (taskLimit != null)
            {
                Console.WriteLine($"任务:{mst.S_CODE},起点仓库:{mst.S_START_WH}已经禁用推送");
                return false;
            }
            var mstbyEqno = db.Queryable<WCSTask>().Where(a => a.S_EQ_NO == mst.S_EQ_NO).ToList();
            if (mstbyEqno.Count() == 1)
            {
@@ -313,12 +486,16 @@
                else if (mst.S_TYPE == "电梯2")
                {
                    var mst2 = mstbyEqno.Where(a => a.S_TYPE == "电梯1").First();
                    if (mst2.S_B_STATE == "卸货完成" || mst2.S_B_STATE == "完成")
                    {
                    if (mst2 == null)
                    {
                        return result;
                    }
                    else
                    {
                        if (mst2.S_B_STATE == "卸货完成" || mst2.S_B_STATE == "完成")
                        {
                            return result;
                        }
                        result = false;
                    }
                }
@@ -373,145 +550,7 @@
        }
        private static object locLocker = new object();
        /// <summary>
        /// 堆叠库区出入库任务申请
        /// </summary>
        /// <param name="ls"></param>
        /// <param name="cntrs"></param>
        /// <param name="area"></param>
        /// <param name="itemCode"></param>
        /// <param name="itemBatch"></param>
        /// <param name="taskType"></param>
        /// <param name="insStock"></param>
        /// <returns></returns>
        internal static bool ApplyTN_Task(Location ls, ref List<string> cntrs, string area, string itemCode, string itemBatch, string taskType, bool insStock = true)
        {
            var result = false;
            lock (locLocker)
            {
                try
                {
                    if (insStock)
                    {
                        Console.WriteLine($"MoboxHelperCreateTask: {area}-{itemCode}-{itemBatch}-{taskType}");
                        var endTN_Location = GetLocation4In(area, itemCode, itemBatch, 3);
                        if (endTN_Location != null)
                        {
                            var endLayer = endTN_Location.N_CURRENT_NUM == 0 ? 1 : 2;
                            var taskNo = DateTime.Now.Ticks.ToString();
                            result = TaskProcess.CreateTransport(ls.S_CODE, endTN_Location.S_CODE, taskType, cntrs, 1, endLayer, 3, 70);
                        }
                        else
                        {
                            Console.WriteLine($"MoboxHelperCreateTask: 未找到终点货位");
                        }
                    }
                    else
                    {
                        var startTN_Location = GetLocation4Out(area, itemCode, itemBatch, 3);
                        if (startTN_Location != null)
                        {
                            var startLayer = startTN_Location.N_CURRENT_NUM <= 3 ? 1 : 2;
                            var taskNo = DateTime.Now.Ticks.ToString();
                            var carryCount = startTN_Location.N_CURRENT_NUM > 3 ? startTN_Location.N_CURRENT_NUM - 3 : startTN_Location.N_CURRENT_NUM;
                            //出库要从起点获取托盘
                            var cntrList = LocationHelper.GetLocCntr(startTN_Location.S_CODE);
                            if (cntrList.Count == startTN_Location.N_CURRENT_NUM)
                            {
                                cntrs = cntrList.OrderByDescending(a => a.T_CREATE).Take(carryCount).Select(a => a.S_CNTR_CODE.Trim()).ToList();
                                result = TaskProcess.CreateTransport(startTN_Location.S_CODE, ls.S_CODE, taskType, cntrs, startLayer, 1, carryCount, 65);
                            }
                            else
                            {
                                Console.WriteLine($"起点托盘数量和货位容器表不符合,请检查【货位表】和【货位容器表】");
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("MoboxHelperCreateTask:" + ex.Message);
                    LogHelper.Error("MoboxHelperCreateTask:" + ex.Message, ex);
                }
            }
            return result;
        }
        private static Location GetLocation4Out(string area, string itemCode, string itemBatch, int v)
        {
            throw new NotImplementedException();
        }
        private static Location GetLocation4In(string area, string itemCode, string itemBatch, int v)
        {
            throw new NotImplementedException();
        }
        /// <summary>
        /// 普通货架区的出入库申请
        /// </summary>
        /// <param name="ls"></param>
        /// <param name="cntrs"></param>
        /// <param name="area"></param>
        /// <param name="taskType"></param>
        /// <param name="itemCode"></param>
        /// <param name="insStock"></param>
        /// <returns></returns>
        internal static bool ApplyNormalTN_Task(Location ls, ref List<string> cntrs, string area, string taskType, string itemCode, bool insStock = true)
        {
            var result = false;
            lock (locLocker)
            {
                try
                {
                    if (insStock)
                    {
                        Console.WriteLine($"MoboxHelperCreateTask: {area}-{taskType}");
                        var endTN_Location = new Location();
                        if (endTN_Location != null)
                        {
                            var taskNo = DateTime.Now.Ticks.ToString();
                            result = TaskProcess.CreateTransport(ls.S_CODE, endTN_Location.S_CODE, taskType, cntrs, 70);
                        }
                        else
                        {
                            Console.WriteLine($"MoboxHelperCreateTask: 未找到终点货位");
                        }
                    }
                    else
                    {
                        var startTN_Location = new Location();
                        if (startTN_Location != null)
                        {
                            //出库要从起点获取托盘
                            var cntrList = LocationHelper.GetLocCntr(startTN_Location.S_CODE);
                            if (cntrList.Count == startTN_Location.N_CURRENT_NUM)
                            {
                                result = TaskProcess.CreateTransport(startTN_Location.S_CODE, ls.S_CODE, taskType, new List<string> { cntrList[0].S_CNTR_CODE }, 65);
                            }
                            else
                            {
                                Console.WriteLine($"起点托盘数量和货位容器表不符合,请检查【货位表】和【货位容器表】");
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("MoboxHelperCreateTask:" + ex.Message);
                    LogHelper.Error("MoboxHelperCreateTask:" + ex.Message, ex);
                }
            }
            return result;
        }
        /// <summary>
        /// 推送任务
        /// </summary>
@@ -519,14 +558,22 @@
        internal static bool SendTask(WCSTask mst)
        {
            var db = new SqlHelper<object>().GetInstance();
            var result = false;
            var start = "0"; var end = "0";
            var taskType = mst.S_TYPE.Trim();
            var list = db.Queryable<Location>().ToList().Count;
            //LogHelper.Info($"查询全部货位数据{list}");
            // if (mst.N_B_STATE == 0) {
            if (mst.N_SCHEDULE_TYPE == 1)
            {
                LogHelper.Info($"任务推送数据:{JsonConvert.SerializeObject(mst)}");
                if (string.IsNullOrEmpty(mst.S_START_LOC)|| string.IsNullOrEmpty(mst.S_END_LOC))
                {
                    LogHelper.Info($"任务{mst.S_CODE},起点终点有空参数,不推送任务");
                }
                start = LocationHelper.GetAgvSite(mst.S_START_LOC);
                end = LocationHelper.GetAgvSite(mst.S_END_LOC);
                //if (mst.N_START_LAYER > 1)
@@ -566,6 +613,28 @@
                    WCSHelper.UpdateStatus(mst);//更新任务状态
                    result = true;
                    LogHelper.Info($"NDC推送任务成功 {mst.S_CODE}start= {mst.S_START_LOC} + end = {mst.S_END_LOC}");
                    if (mst.S_TYPE.Contains("电梯1"))
                    {
                        var device = Settings.deviceInfos.Where(a => a.TN_Location == mst.S_END_LOC).FirstOrDefault();
                        var loc = LocationHelper.GetLocByLoc(mst.S_START_LOC);
                        if (device == null)
                        {
                            LogHelper.Info($"根据任务终点:{mst.S_END_LOC},未找到对应电梯配置文件");
                        }
                        if (loc == null)
                        {
                            LogHelper.Info($"根据任务起点:{mst.S_START_LOC},未找到对应货位");
                        }
                        int value = 0;
                        if (loc.N_LAYER == 1) value = 1;
                        else if (loc.N_LAYER == 2) value = 3;
                        else if (loc.N_LAYER == 3) value = 5;
                        ModbusHelper.WriteSingleRegister(40089, value, device.address, 1024);
                        ModbusHelper.WriteSingleRegister(40102, 1, device.address, 1024);
                    }
                }
                else
                {
@@ -763,6 +832,11 @@
                var time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
                statusarrive.RequestId = "杭叉AGV" + time;
                int flag = 0;
                if (mst.S_NOTE == "粉料")
                {
                    flag = 1;
                }
                //List<StatusArrive> statusArrives = new List<StatusArrive>();
                StatusArrive statusArrive = new StatusArrive();
                statusarrive.UseToken = "iFQ5fExGrLYLXliHYWzs";
@@ -770,6 +844,9 @@
                statusArrive.LocationNum = mst.S_END_LOC;
                statusArrive.Time = DateTime.Now.ToString();
                statusArrive.Status = status.ToString();
                statusArrive.Rfid = mst.S_CNTR_CODE;
                statusArrive.Flag = flag;
                //statusArrives.Add(statusArrive);
                statusarrive.data = statusArrive;
                //开始回报
@@ -801,9 +878,8 @@
        /// <summary>
        /// mes物料到位同步
        /// </summary>
        /// <param name="taskNum"></param>
        /// <param name="orderNum"></param>
        /// <param name="taskStatus"></param>
        /// <param name="mst">任务</param>
        /// <param name="url">地址</param>
        public static void MESIteminfoback(WCSTask mst, string url)
        {
            LogHelper.Info($"------------开始物料信息回报-----------");
@@ -811,37 +887,60 @@
            {
                var cntritem = ContainerHelper.GetCntrItemRel(mst.S_CNTR_CODE).FirstOrDefault();
                //回报数据
                Request<iteminfoArrive> statusarrive = new Request<iteminfoArrive>();
                List<LotListh> lotLists = new List<LotListh>();
                string TaskNumber = mst.S_EQ_NO;
                if (!string.IsNullOrEmpty(mst.S_WMS_NO))
                Request<MesItemBackModel> request = new Request<MesItemBackModel>();
                List<MesItemBackInfoModel> list = new List<MesItemBackInfoModel>();
                string MesNo = mst.S_EQ_NO;
                if (!string.IsNullOrEmpty(mst.S_MES_NO))
                {
                    TaskNumber = mst.S_WMS_NO;
                    MesNo = mst.S_MES_NO;
                }
                //粉料回库不需要回报
                if (cntritem != null && mst.S_TYPE == "余料返回" && cntritem.S_ITEM_CODE.StartsWith("4X"))
                {
                    return;
                }
                //获取时间戳
                var time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
                //物料到位接口和状态反馈同时调IIOT,为了区分id,物料到位长度加一区分
                statusarrive.RequestId = "杭叉AGV" + time + "1";
                statusarrive.UseToken = "iFQ5fExGrLYLXliHYWzs";
                request.RequestId = "杭叉AGV" + time + "1";
                request.UseToken = "iFQ5fExGrLYLXliHYWzs";
                iteminfoArrive iteminfoArrive = new iteminfoArrive();
                iteminfoArrive.TaskNumber = TaskNumber;
                iteminfoArrive.LocationNum = mst.S_END_LOC;
                iteminfoArrive.Rfid = mst.S_CNTR_CODE;
                iteminfoArrive.ArricalTime = DateTime.Now.ToString("yyyy-MM-dd");
                MesItemBackModel mesItemBackModel = new MesItemBackModel();
                mesItemBackModel.TaskNumber = MesNo;
                mesItemBackModel.WmsTaskNumber = mst.S_WMS_NO;
                mesItemBackModel.Rfid = mst.S_CNTR_CODE;
                mesItemBackModel.LocationNum = mst.S_END_LOC;
                mesItemBackModel.Result = "1";
                mesItemBackModel.ArricalTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
                if (cntritem != null)
                {
                    lotLists.Add(new LotListh() { LotNumber = cntritem.S_BATCH_NO, Weight = double.Parse(cntritem.F_WEIGHT) });
                    iteminfoArrive.PartDesc = cntritem.S_ITEM_NAME;
                    iteminfoArrive.PartNumber = cntritem.S_ITEM_CODE;
                    list.Add(new MesItemBackInfoModel()
                    {
                        LotNumber = cntritem.S_BATCH_NO,
                        PartNumber = cntritem.S_ITEM_CODE,
                        Subpool = cntritem.Subpool,
                        ReceiveLot = cntritem.ReceiveLot,
                        Supplier = cntritem.S_SUPPLIER_NO,
                        TyreType = cntritem.TyreType,
                        ProduceTime = cntritem.D_PRD_DATE,
                        Rfid = cntritem.S_CNTR_CODE,
                        Qty = cntritem.F_WEIGHT,
                        PartLevel = cntritem.LEV,
                        WmsLot = cntritem.WmsLot
                    });
                }
                iteminfoArrive.LotList = lotLists;
                statusarrive.data = iteminfoArrive;
                mesItemBackModel.List = list;
                request.data = mesItemBackModel;
                //任务上报
                HttpHelper httpHelper = new HttpHelper();
                MesResult result = new MesResult();
                string date = JsonConvert.SerializeObject(statusarrive);
                string date = JsonConvert.SerializeObject(request);
                LogHelper.Info($"物料到位回报:地址:{url},内容:{date}");
                var r = httpHelper.MesWebPost(url, date);
@@ -863,6 +962,8 @@
            }
        }
        /// <summary>
        /// 创建搬运任务
        /// </summary>