From 7afc439ba32e234ebc455c98fa084ae6eef8a621 Mon Sep 17 00:00:00 2001
From: lss <2538410689@qq.com>
Date: 星期四, 03 七月 2025 17:24:04 +0800
Subject: [PATCH] 优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/TaskProcess.cs |  501 +++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 315 insertions(+), 186 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/TaskProcess.cs
index a4abc4b..e0d65e5 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/TaskProcess.cs
+++ b/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.UnlockLocDeleteCntrs(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,21 +84,18 @@
             }
             else
             {
-
                 //璧风偣缁堢偣瑙i攣
                 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>
+        /// <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
@@ -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,16 +154,33 @@
                         else
                         {
                             //浜曟澗鍙犵洏鏈哄畨鍏ㄤ氦浜�-                            if (TN_Task.Z_TYPE == 2 && TN_Task.S_NOTE == "绌烘墭鍥炲簱")
+                            if (TN_Task.S_NOTE == "绌烘墭鍥炲簱")
                             {
-                                if (S7Helper.WriteDpj(1002, 1))
+                                var Device = Settings.deviceInfos.Where(a => a.TN_Location == TN_Task.S_START_LOC).FirstOrDefault();
+                                if (Device != null)
                                 {
-                                    if (S7Helper.ReadDpj(2004, S7.Net.VarType.Byte) == 1)
+                                    if (S7Helper.WriteDpj(Device.address, 1002, 1))
                                     {
-                                        NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "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鍊�澶辫触");
                                     }
                                 }
-                              
+                                else
+                                {
+                                    LogHelper.Info($"鍙犵洏鏈哄畨鍏ㄤ氦浜掑け璐ワ紝鏍规嵁浠诲姟璧风偣{TN_Task.S_START_LOC},鏈壘鍒板彔鐩樻満閰嶇疆鏂囦欢");
+                                }
+
                             }
                             else
                             {
@@ -138,10 +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(1001, 1);
-                            S7Helper.WriteDpj(1002, 0);
+                            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)
@@ -149,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);
@@ -169,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))
@@ -223,6 +381,7 @@
                 else
                 {
                     LogHelper.Info($"瀹夊叏璇锋眰澶辫触=>msg:{result.msg}");
+                    ApiHelper.AddErrorInfo("瀹夊叏浜や簰澶辫触", result.msg, "", tasknum);
                 }
                 return permit;
             }
@@ -272,6 +431,7 @@
                 else
                 {
                     LogHelper.Info($"瀹夊叏璇锋眰澶辫触=>msg:{result.err_msg}");
+                    ApiHelper.AddErrorInfo("瀹夊叏浜や簰澶辫触", result.err_msg, "", no);
                 }
                 return permit;
             }
@@ -293,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)
             {
@@ -318,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;
                     }
                 }
@@ -378,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>
@@ -524,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;
+
             // 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)
@@ -571,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
                 {
@@ -767,7 +831,29 @@
                 //鑾峰彇鏃堕棿鎴�                 var time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
                 statusarrive.RequestId = "鏉弶AGV" + time;
-
+                string info = "";
+                switch (status)
+                {
+                    case 1:
+                        info = "agv宸叉帴鍙楀師鏂欏簱涓嬪彂鐨勪换鍔�;
+                        break;
+                    case 4:
+                        info = "agv宸插彇璐у畬鎴�;
+                        break;
+                    case 6:
+                        info = "agv宸插嵏璐у埌鎸囧畾浣嶇疆";
+                        break;
+                    case 2:
+                        info = "agv宸插畬鎴愰�鏂欎换鍔�;
+                        break;
+                }
+                string message = "1";
+                if (status == 7) { message = "agv浠诲姟宸插彇娑�; }
+                int flag = 0;
+                if (mst.S_NOTE == "绮夋枡")
+                {
+                    flag = 1;
+                }
                 //List<StatusArrive> statusArrives = new List<StatusArrive>();
                 StatusArrive statusArrive = new StatusArrive();
                 statusarrive.UseToken = "iFQ5fExGrLYLXliHYWzs";
@@ -775,6 +861,11 @@
                 statusArrive.LocationNum = mst.S_END_LOC;
                 statusArrive.Time = DateTime.Now.ToString();
                 statusArrive.Status = status.ToString();
+                statusArrive.Rfid = mst.S_CNTR_CODE;
+                statusArrive.Flag = flag;
+                statusArrive.Info = info;
+                statusArrive.Message = message;
+
                 //statusArrives.Add(statusArrive);
                 statusarrive.data = statusArrive;
                 //寮�鍥炴姤
@@ -806,9 +897,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($"------------寮�鐗╂枡淇℃伅鍥炴姤-----------");
@@ -816,37 +906,74 @@
             {
                 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锛屼负浜嗗尯鍒唅d锛岀墿鏂欏埌浣嶉暱搴﹀姞涓�尯鍒�-                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;
+                    string curBagNum = null;
+                    string weightBag = null;
+                    if (cntritem.F_QTY > 0)
+                    {
+                        curBagNum = cntritem.F_QTY.ToString();
+                    }
+                    if (!string.IsNullOrEmpty(cntritem.F_WEIGHT1) && int.Parse(cntritem.F_WEIGHT1) > 0)
+                    {
+                        weightBag = cntritem.F_WEIGHT1;
+                    }
+                    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,
+                        WeightBag = weightBag,
+                        CurBagNum = curBagNum,
+                        InitBagNum = cntritem.F_QTY1
+                    });
+
 
                 }
-                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);
@@ -868,6 +995,8 @@
             }
 
         }
+
+
         /// <summary>
         /// 鍒涘缓鎼繍浠诲姟
         /// </summary>

--
Gitblit v1.9.1