From 7cc26b2202675a4ef2189a60c275bc9345bc9856 Mon Sep 17 00:00:00 2001
From: cjs <2216046164@qq.com>
Date: 星期二, 08 七月 2025 17:04:24 +0800
Subject: [PATCH] 111

---
 HH.WCS.Mobox3.NongFuLinZhi/process/DeviceProcess.cs |  599 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 537 insertions(+), 62 deletions(-)

diff --git a/HH.WCS.Mobox3.NongFuLinZhi/process/DeviceProcess.cs b/HH.WCS.Mobox3.NongFuLinZhi/process/DeviceProcess.cs
index dba413b..4826fa9 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/process/DeviceProcess.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/process/DeviceProcess.cs
@@ -2,6 +2,7 @@
 using HH.WCS.Mobox3.NFLZ.dispatch;
 using HH.WCS.Mobox3.NFLZ.util;
 using HH.WCS.Mobox3.NFLZ.wms;
+using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -50,12 +51,442 @@
         private static void LinZhiAnalysisDeviceChange(string data, Settings.deviceInfo plc)
         {
             if (plc.deviceType == 1) AnalysisDoor(data, plc);//鑷姩闂ㄥ鐞�-            //if (plc.deviceType == 2) LinJiangAnalysisProductLine(data, plc);//杈撻�绾垮鐞�-- 鎴愬搧涓嬬嚎
-            //if (plc.deviceType == 3) LinJiangAnalysisProductLine(data, plc);//杈撻�绾垮鐞�-- 绌烘墭涓婄嚎
+            if (plc.deviceType == 2) LinZhiAnalysisProductLine(data, plc);//杈撻�绾垮鐞�-- 鎴愬搧涓嬬嚎
+            if (plc.deviceType == 3) LinZhiAnalysisProductLine(data, plc);//杈撻�绾垮鐞�-- 绌烘墭涓婄嚎
             if (plc.deviceType == 4) LinZhiAnalysisPreform(data, plc);//鐡跺澂鏈�             if (plc.deviceType == 5) LinZhiAnalysisPGDump(data, plc);//鐡剁洊缈绘枟鏈�             if (plc.deviceType == 6) LinZhiAnalysisPPDump(data, plc);//鐡跺澂缈绘枟鏈�         }
+
+
+
+        private static void LinZhiAnalysisProductLine(string data, Settings.deviceInfo plc)
+        {
+            LogHelper.Info($"{plc.deviceName}-{plc.address}-{data}", "杈撻�绾�);
+
+            if (LineState.Keys.Contains(plc.TN_Location[0]))
+            {
+                LineState[plc.TN_Location[0]].status = data;
+                LineState[plc.TN_Location[0]].modify = DateTime.Now;
+            }
+            else
+            {
+                LineState.Add(plc.TN_Location[0], new statemodel { status = data, modify = DateTime.Now });
+            }
+
+            //鐘舵�1	婊℃墭涓嬬嚎鎴栫┖鎵樹笂绾匡紝鍏蜂綋浠诲姟绫诲瀷闇�鏍规嵁TCP娑堟伅浣嶆暟鍒ゆ柇 11-婊℃墭涓嬬嚎  21-绌烘墭涓婄嚎
+            //婊℃墭涓嬬嚎锛氶渶瑕佹牴鎹墿鏂欙紝鍝佺浉锛屾壒娆″叆搴�      绌烘墭涓婄嚎锛氱┖鎵樻槸鍚﹀崟鐙瓨鍦ㄧ┖鎵樺簱鍖猴紝寰呯‘瀹�+            //涓嶅悓浜х嚎涓嬬嚎搴撳尯涓嶅悓锛岄儴鍒嗕骇绾夸笅绾垮簱鍖虹浉鍚岋紝浣嗘湁鍏堝悗椤哄簭
+            //涓嬬嚎搴撳尯鍏堝悗椤哄簭锛氬叆搴撳尯鍩熼『搴忥細3-6-2-5-4-1
+            //B1~B6  鍙屾墭涓嬬嚎--鍙兘瀛樺湪灏炬墭涓哄崟鎵樼殑鎯呭喌--灏炬墭(鍗曟墭)浜哄伐PDA涓嬪彂(鍏ラ浂澶村簱)----婊℃墭涓嬬嚎
+            //B1~B5  鍗曟墭涓婄嚎   B6  鍙屾墭涓婄嚎------------------------------------------------绌烘墭涓婄嚎
+            if (data.Length == 4)
+            {
+                if (data.Substring(0, 4) == "1220")
+                {
+                    //婊℃墭涓嬬嚎
+                    ConveryInfoFull(plc, plc.TN_Location[0]);
+                }
+                if (data.Substring(0, 4) == "1021")
+                {
+                    //绌烘墭涓婄嚎
+                    ConveryInfoEmpty(plc, plc.TN_Location[0]);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 杈撻�绾跨┖鎵樹笂绾�+        /// </summary>
+        /// <param name="plc"></param>
+        /// <param name="location"></param>
+        private static void ConveryInfoEmpty(Settings.deviceInfo plc, string location)
+        {
+            //try
+            //{
+            //    if (location != "")
+            //    {
+            //        if (LocationHelper.CheckLocFree(location))
+            //        {
+            //            var db = new SqlHelper<object>().GetInstance();
+            //            bool flag = true;
+            //            var cgInfo = db.Queryable<CGTTable>().Where(a => a.Bit == location).First();
+            //            if (cgInfo != null)
+            //            {
+            //                if (cgInfo.time.AddSeconds(5) > DateTime.Now)
+            //                {
+            //                    flag = false;
+            //                }
+            //
+            //            }
+            //            if (flag)
+            //            {
+            //                LogHelper.Info($"杈撻�绾匡細{plc.deviceName}, {location}琛ョ┖淇″彿 鏌ヨ宸ュ崟", "杈撻�绾�);
+            //                var workorder = WCSHelper.GetLinZhiWorkOrder(plc.deviceName);
+            //                if (workorder != null && workorder.S_WorkState.Trim() == "鎵ц涓�)
+            //                {
+            //                    LogHelper.Info($"杈撻�绾匡細{plc.deviceName}, {location}涓嬬嚎淇″彿 鎵惧埌宸ュ崟", "杈撻�绾�);
+            //                    ProductLineempty(plc, location, workorder);
+            //                }
+            //                else
+            //                {
+            //                    LogHelper.Info($"杈撻�绾匡細{plc.deviceName} ,{location}涓嬬嚎淇″彿 鏈壘鍒板伐鍗�, "杈撻�绾�);
+            //                }
+            //            }
+            //        }
+            //        else
+            //        {
+            //            LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 褰撳墠浣嶇疆{location}鏈変换鍔★紝涓嶅彲瑙﹀彂绌烘墭涓婄嚎", "杈撻�绾�);
+            //        }
+            //    }
+            //}
+            //catch (Exception ex)
+            //{
+            //    Console.WriteLine($"杈撻�绾垮懠鍙┖鎵樺紓甯� 寮傚父淇℃伅={ex.Message}");
+            //}
+        }
+
+        /// <summary>
+        /// 杈撻�绾挎弧鎵樹笅绾�+        /// </summary>
+        /// <param name="plc"></param>
+        /// <param name="location"></param>
+        private static bool ConveryInfoFull(Settings.deviceInfo plc, string location)
+        {
+            var result = false;
+            try
+            {
+                if (location != "")
+                {
+                    //鍙栨弧锛岄渶瑕佹牴鎹伐鍗曚互鍙婁骇绾夸俊鎭紝鍒ゆ柇褰撳墠浜х嚎搴旇涓嬪彂鍒板摢涓簱鍖猴紝浠ュ強鏄粈涔堟墭鐩樼被鍨嬩笅绾�+                    if (LocationHelper.CheckLocFree(location))
+                    {
+                        var db = new SqlHelper<object>().GetInstance();
+                        LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location} 鏌ヨ宸ュ崟", "杈撻�绾�);
+                        //1.鏌ヨ褰撳墠浜х嚎宸ュ崟淇℃伅
+                        var workOrder = WCSHelper.GetLinZhiWorkOrder(plc.deviceName);
+                        if (workOrder != null)
+                        {
+                            //workOrder.S_BatchNo = DateTime.Now.ToString("yyyy-MM-dd");
+                            //db.Updateable(workOrder).UpdateColumns(a => new { a.S_BatchNo }).ExecuteCommand();
+                            //
+                            //workOrder = WCSHelper.GetLinJiangWorkOrder(plc.deviceName);
+                            string DeviceStartTime = DateTime.Now.ToString();//褰撳墠璁惧绗竴娆℃敹鍒颁笅绾夸俊鍙锋椂闂�+                            string TrayCode = "";//鎵樼洏缂栫爜--澶氫釜缂栫爜鐢�鑻辨枃閫楀彿闅斿紑
+                            string BatchNo = string.IsNullOrEmpty(workOrder.S_BatchNo) ? "" : workOrder.S_BatchNo.Trim();//鎵规鍙�+                            string ItemLayer = string.IsNullOrEmpty(workOrder.S_ItemLayer) ? "" : workOrder.S_ItemLayer.Trim();//鐗╂枡灞傛暟
+                            string ItemTrayType = workOrder.S_TrayType;//璐х墿澶у皬鏉�-澶ф澘銆佸皬鏉裤�闆嗗寲鏉�鎵樼洏绫诲瀷闇�鍙樺姩)
+                            string StartBit = plc.TN_Location[0];
+                            string workNo = "";
+                            //浠ヤ笅涓変釜瀛楁鏆傛湭浣跨敤
+                            //string EndBit = "";
+                            //string StartLayer = "1";//鐢熶骇涓嬬嚎-璧风偣灞傛暟榛樿涓�
+                            //string EndLayer = "";
+
+                            //浜х嚎涓嬬嚎娴佺▼----姝e父娴佺▼涓嬬嚎
+                            if (workOrder.S_ORDER_TYPE.Trim() != "鏃犵爜鍏ュ簱")
+                            {
+                                bool full = true;
+                                //鍒ゆ柇褰撳墠璐т綅鏄惁瀛樺湪鎵樼洏锛屽鏋滃瓨鍦ㄥ垯 鏃犻渶浠庢墭鐩樹俊鎭腑闂磋〃鑾峰彇
+                                var trayInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == StartBit).ToList();
+                                if (trayInfo.Count() > 0)
+                                {
+                                    BatchNo = workOrder.S_BatchNo.Trim();
+                                    ItemLayer = workOrder.S_ItemLayer.Trim();
+                                    trayInfo.ForEach(a =>
+                                    {
+                                        TrayCode = TrayCode + a.S_CNTR_CODE + ",";
+                                        workNo = a.S_SRC;
+                                    });
+                                }
+                                else
+                                {
+                                    //2.鑾峰彇璁惧绗竴娆′笅绾挎椂闂�+                                    bool IsTime = true;
+                                    DeviceStartTime = ConveryInfoFullTwo(plc, DeviceStartTime);
+
+                                    if (IsTime)
+                                    {
+                                        //3.澶勭悊 宸ュ崟淇℃伅琛ㄦ暟鎹�-鎵樿銆佹壒娆″彿銆佺墿鏂欏眰鏁�+                                        full = ConveryInfoFullThree(plc, location, workOrder, DeviceStartTime, ref TrayCode, ref BatchNo, ref ItemLayer, ref workNo);
+                                    }
+                                    else full = false;
+                                }
+
+                                if (full)
+                                {
+                                    //5.姝e父浜х嚎涓嬬嚎
+                                    ProductLineFull(plc, location, workOrder, TrayCode, BatchNo, ItemLayer, ItemTrayType, StartBit, workNo);
+                                }
+                                else LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location},涓嬬嚎鏃堕棿锛歿DeviceStartTime}锛屾墭鐩樹俊鎭瓨鍦ㄥ紓甯革紝璇锋煡璇㈠紓甯告棩蹇楋紒", "杈撻�绾�);
+                            }
+                            //鏃犵爜鍏ュ簱娴佺▼----浜哄伐鍒涘缓宸ュ崟鏃�---宸ュ崟绫诲瀷 搴旈�鎷�鏃犵爜鍏ュ簱
+                            else
+                            {
+                                //鍒ゆ柇褰撳墠璁惧鍙f槸鍚﹀瓨鍦ㄦ墭鐩�浠诲姟鏈彇璐у畬鎴愶紝鎵樼洏杩樻槸缁戝畾鍦ㄨ澶囧彛鐨�锛屾湁娌跨敤锛屾棤鐢熸垚鏂版墭鐩�+                                var trayInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == location).ToList();
+                                if (trayInfo.Count() == 0) TrayCode = Guid.NewGuid().ToString("N") + "," + Guid.NewGuid().ToString("N");
+                                else
+                                {
+                                    TrayCode = "";
+                                    trayInfo.ForEach(a => { TrayCode = TrayCode + "," + a.S_CNTR_CODE.Trim(); });
+                                }
+                                LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location} 鏃犵爜鍏ュ簱锛�, "杈撻�绾�);
+                                Console.WriteLine($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location} 鏃犵爜鍏ュ簱锛�);
+                                ProductLineFull(plc, location, workOrder, TrayCode, BatchNo, ItemLayer, workOrder.S_TrayType, StartBit, workOrder.S_WorkNo);
+                            }
+                        }
+                        else LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location} 鏈壘鍒板伐鍗�, "杈撻�绾�);
+                    }
+                    else LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 褰撳墠浣嶇疆{location}鏈変换鍔★紝涓嶅彲瑙﹀彂婊℃墭涓嬬嚎", "杈撻�绾�);
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info($"杈撻�绾垮鐞嗗紓甯革細{ex.Message}", "杈撻�绾�);
+            }
+
+            return result;
+        }
+
+        private static void ProductLineFull(Settings.deviceInfo plc, string location, LinZhiWorkOrder workOrder, string TrayCode, string BatchNo, string ItemLayer, string ItemTrayType, string StartBit, string workNo = "", bool ProType = true)
+        {
+            //5.鏍规嵁閰嶇疆鏂囦欢鑾峰彇褰撳墠浜х嚎浼樺厛涓嬪彂搴撳尯锛屽啀杩炲悓鐗╂枡銆佸ぇ灏忔澘銆佹壒娆★紝鑾峰彇姝ゅ簱鍖�鍙敤璐т綅
+            //      閬嶅巻搴撳尯鏌ヨ-鍒ゆ柇鎺掗攣-琛ㄥ悕锛�RowLock 
+            var creResult = false;
+            LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 鏌ヨ鍏ュ簱缁堢偣璐т綅", "杈撻�绾�);
+            ////Console.WriteLine($"杈撻�绾匡細{plc.deviceName} 鏌ヨ鍏ュ簱缁堢偣璐т綅");
+            //string ItemNameLayer = workOrder.S_ItemCode.Trim() + workOrder.S_ItemLayer.Trim();
+            //var PriProLineInfo = Settings.GetDaMingShanPriProLineList().Where(a => a.deviceName == plc.deviceName && a.ItemTrayType == "婊� && a.ItemName == workOrder.S_ItemCode.Trim()).FirstOrDefault();
+            var db = new SqlHelper<object>().GetInstance();
+            LogHelper.Info($"itemtrayType锛歿ItemTrayType}");
+            var ipl = db.Queryable<itemPrecedenceLine>().Where(a => a.S_ITEM_CODE == workOrder.S_ItemCode.Trim() && a.S_TRAY_TYPE.Trim() == ItemTrayType.Trim()).OrderByDescending(a => a.S_PRIORITY).ToList();
+            if (ipl.Count() > 0)
+            {
+                if (ProType)
+                {
+                    LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 鏌ヨ鍒拌〃鏁版嵁", "杈撻�绾�);
+                    ////Console.WriteLine($"杈撻�绾匡細{plc.deviceName} 鏌ヨ鍒伴厤缃枃浠�);
+                    for (int i = 0; i < ipl.Count(); i++)
+                    {
+                        string areaCode = ipl[i].S_AREA_CODE;
+                        if (!creResult) creResult = TaskProcess.LinZhiPlcTask(StartBit, "鎴愬搧涓嬬嚎", TrayCode, areaCode, workOrder.S_ItemCode.Trim(), BatchNo, ItemLayer, ItemTrayType, plc.deviceName, true, workNo);
+                    }
+                }
+                else
+                {
+                    for (int i = 0; i < ipl.Count(); i++)
+                    {
+                        string areaCode = ipl[i].S_AREA_CODE;
+                        if (!creResult) creResult = TaskProcess.LinZhiPlcTask(StartBit, "闆跺ご涓嬬嚎", TrayCode, areaCode, workOrder.S_ItemCode.Trim(), BatchNo, ItemLayer, ItemTrayType, plc.deviceName, true, workOrder.S_WorkNo.Trim());
+                    }
+                }
+
+                if (creResult)
+                {
+                    LogHelper.Info("缁戝畾鎵樼洏琛ㄥ拰鎵樼洏鐗╂枡琛�);
+                    //浠诲姟鍒涘缓鎴愬姛 缁戝畾璧风偣鎵樼洏琛紝鎵樼洏鐗╂枡琛�+                    TaskProcess.BindLocCntr(StartBit, TrayCode, workOrder.S_ItemCode.Trim(), BatchNo, workNo, ItemLayer);
+                }
+            }
+            else LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location} 鏈幏鍙栧埌褰撳墠浜х嚎鐨勪紭鍏堜笅绾垮簱鍖�itemPrecedenceLine 鏁版嵁銆傝鐗╂枡涓嶅瓨鍦細{workOrder.S_ItemCode.Trim()}", "杈撻�绾�);
+        }
+
+
+        private static bool ConveryInfoFullThree(Settings.deviceInfo plc, string location, LinZhiWorkOrder workOrder, string DeviceStartTime, ref string TrayCode, ref string BatchNo, ref string ItemLayer, ref string workNo)
+        {
+            bool result = true;
+            var db = new SqlHelper<object>().GetInstance();
+            //3.浠�瀵屽嫆鎵樼洏淇℃伅涓棿琛�鑾峰彇 dateTime < DeviceStartTime 鐨勬暟鎹�  ChunAnTrayInfo
+            //      鏈変袱鏉★細杩涘叆绗�3-1 姝�+            //      灏忎簬涓ゆ潯锛氬紓甯�杩炴帴 鎶ヨ鍣�杩涜澹板厜鎶ヨ
+            //3-1.鍒ゆ柇鎵樼洏淇℃伅涓�鎵樿銆佹壒娆″彿銆佺墿鏂欏眰鏁�鏄惁鏈夊�---------鏍规嵁 鎵樿 鍒ゆ柇褰撳墠鎵樼洏鏄惁涓洪浂澶�+            //      鏈夊�锛氬垽鏂綋鍓嶅�鏄惁涓�宸ュ崟淇℃伅 鐩稿悓锛屼笉鍚屼唬琛�褰撳墠浜х嚎鍒囨崲浜嗙敓浜х被鍨嬫垨棣栨涓嬬嚎锛岄渶鍚屾鏇存柊 宸ュ崟淇℃伅
+            //      鏃犲�锛氬垽鏂伐鍗曟槸鍚﹀瓨鍦ㄥ搴斿�锛屼笉瀛樺湪 鍗�寮傚父
+            if (!string.IsNullOrEmpty(DeviceStartTime))
+            {
+                var trayTableInfo = WCSHelper.GetLinZhiTrayInfoList(DeviceStartTime, plc.deviceName);
+                if (trayTableInfo != null)
+                {
+                    if (trayTableInfo.Count == 2)// || trayTableInfo.Count == 1
+                    {
+                        workNo = trayTableInfo[0].workNo;
+                        LogHelper.Info($"杈撻�绾匡細鑾峰彇褰撳墠涓嬬嚎鏃堕棿鍓嶇殑涓や釜鎵樼洏鏁版嵁锛屾寜鏃堕棿鍗囧簭銆備骇绾垮彿锛歿plc.deviceName},涓嬬嚎鏃堕棿锛歿DeviceStartTime}.", "杈撻�绾�);
+                        trayTableInfo = db.Queryable<LinZhiTrayInfo>().Where(a => Convert.ToDateTime(a.dateTime.Trim()) < Convert.ToDateTime(DeviceStartTime) && a.deviceName == plc.deviceName).OrderBy(a => a.dateTime).Take(2).ToList();
+                        LogHelper.Info($"杈撻�绾匡細鑾峰彇褰撳墠涓嬬嚎鏃堕棿鍓嶇殑涓や釜鎵樼洏鏁版嵁涓猴細{JsonConvert.SerializeObject(trayTableInfo)}銆倇plc.deviceName},涓嬬嚎鏃堕棿锛歿DeviceStartTime}.", "杈撻�绾�);
+                        string trayCode = ""; string batchNo = ""; string itemLayer = "";
+                        //1-棣栧厛鍒ゆ柇宸ュ崟 鎵樿銆佹壒娆″彿銆佺墿鏂欏眰鏁�涓変釜鍙傛暟鏄惁鏈夊� 
+                        //      鏈夊�锛氬垽鏂拰褰撳墠鍊兼槸鍚︾浉鍚岋紝涓嶅悓 鍗�鏇存柊   UpdateWorkInfo
+                        //      鏃犲�锛氭洿鏂板伐鍗曞搴斾俊鎭�+                        trayTableInfo.ForEach(a =>
+                        {
+                            trayCode = trayCode + "," + a.trayCode;
+                            string TrayRule = "";
+                            string UpdateWorkOn = "";//鏇存柊宸ュ崟淇℃伅寮�叧 榛樿涓虹┖ 1-闇�鏇存柊 鎵樿銆佹壒娆″彿銆佺墿鏂欏眰鏁�淇℃伅
+
+
+                            //鐢熶骇涓嬬嚎锛氶鎵樹笅绾�蹇呴』 浼犺緭鍏ㄩ儴淇℃伅-鎵樿銆佹壒娆″彿銆佺墿鏂欏眰鏁帮紱鍚﹀垯 绗竴鎵樺氨鏃犳硶涓嬬嚎
+                            //          涔嬪悗濡傛灉缂哄皯淇℃伅锛屽彲浠ヤ粠宸ュ崟鑾峰彇
+                            //宸ュ崟鍒濆鐘舵�锛氭墭瑙勩�鎵规鍙枫�鐗╂枡灞傛暟 蹇呯劧鏈変竴涓�涓虹┖锛涘悗缁細涓�洿鏈夊�
+                            Console.WriteLine($"鏇存敼宸ュ崟鎵樼洏鏁版嵁锛氬伐鍗曞彿锛歿workOrder.S_WorkNo},鎵樿锛歿a.trayRule},鎵规鍙凤細{a.batchNo},鐗╂枡灞傛暟锛歿a.itemLayer}");
+                            if (string.IsNullOrEmpty(workOrder.S_TrayRules) || string.IsNullOrEmpty(workOrder.S_BatchNo) || string.IsNullOrEmpty(workOrder.S_ItemLayer))
+                            {
+                                WCSHelper.UpdateWorkInfo(workOrder, a.trayRule, a.batchNo, a.itemLayer);
+                                batchNo = a.batchNo; itemLayer = a.itemLayer;
+                            }
+                            //澶勭悊 褰撳墠鎵樼洏 鎵樿銆佹壒娆″彿銆佺墿鏂欏眰鏁�淇℃伅
+                            ConveryInfoFullThreeS(plc, location, a, workOrder, DeviceStartTime, ref batchNo, ref itemLayer, ref TrayRule, ref UpdateWorkOn);
+                            if (UpdateWorkOn == "1") WCSHelper.UpdateWorkInfo(workOrder, TrayRule, batchNo, itemLayer);
+                            //闆跺ご鐗╂枡鍒ゆ柇
+                            //if (TrayRule != a.trayNum)
+                            //{
+                            //    result = false;
+                            //    LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location},涓嬬嚎鏃堕棿锛歿DeviceStartTime}锛岀敓浜т笅绾�褰撳墠鐗╂枡绠辨暟锛歿a.itemLayer}涓庢爣鍑嗘墭瑙勶細{TrayRule}涓嶇锛屾爣鍑嗘墭瑙勪俊鎭紓甯革紒", "杈撻�绾�);
+                            //    //姝e父涓嬬嚎-涓嶆槸鏁存墭涓嬬嚎  杩炴帴鎶ヨ鍣� 鎶ヨ
+                            //    Console.WriteLine($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location},涓嬬嚎鏃堕棿锛歿DeviceStartTime}锛岀敓浜т笅绾�褰撳墠鐗╂枡绠辨暟锛歿a.itemLayer}涓庢爣鍑嗘墭瑙勶細{TrayRule}涓嶇锛屾爣鍑嗘墭瑙勪俊鎭紓甯革紒");
+                            //    SendErrorTcpMsg(plc, DeviceStartTime);
+                            //}
+                        });
+                        var trayAll = WCSHelper.GetLinJiangTrayInfoAllList(plc.deviceName);
+                        if (trayTableInfo.Count != trayAll.Count && trayTableInfo.Count == 1)
+                        {
+                            result = false;
+                            LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location},涓嬬嚎鏃堕棿锛歿DeviceStartTime}锛岀涓�涓嬬嚎鏃堕棿涔嬪墠鍙幏寰梴trayTableInfo.Count}鏉℃墭鐩樹俊鎭紝璁板綍鎵樼洏淇℃伅涓簕trayAll.Count}鏉★紝鎵樼洏淇℃伅寮傚父锛�, "杈撻�绾�);
+                            //杩炴帴鎶ヨ鍣� 杩涜寮傚父鎶ヨ
+                            Console.WriteLine($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location},涓嬬嚎鏃堕棿锛歿DeviceStartTime}锛岀涓�涓嬬嚎鏃堕棿涔嬪墠鍙幏寰梴trayTableInfo.Count}鏉℃墭鐩樹俊鎭紝璁板綍鎵樼洏淇℃伅涓簕trayAll.Count}鏉★紝鎵樼洏淇℃伅寮傚父锛�);
+                            SendErrorTcpMsg(plc, DeviceStartTime);
+                            db.Deleteable<LinZhiDeviceState>().Where(a => a.DeviceName == plc.deviceName).ExecuteCommand();
+                        }
+                        TrayCode = trayCode; BatchNo = batchNo; ItemLayer = itemLayer;
+                    }
+                    else
+                    {
+                        result = false;
+                        LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location},涓嬬嚎鏃堕棿锛歿DeviceStartTime}锛岀涓�涓嬬嚎鏃堕棿涔嬪墠鍙幏寰梴trayTableInfo.Count}鏉℃墭鐩樹俊鎭紝鎵樼洏淇℃伅寮傚父锛�, "杈撻�绾�);
+                        //杩炴帴鎶ヨ鍣� 杩涜寮傚父鎶ヨ
+                        Console.WriteLine($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location},涓嬬嚎鏃堕棿锛歿DeviceStartTime}锛岀涓�涓嬬嚎鏃堕棿涔嬪墠鍙幏寰梴trayTableInfo.Count}鏉℃墭鐩樹俊鎭紝鎵樼洏淇℃伅寮傚父锛�);
+                        SendErrorTcpMsg(plc, DeviceStartTime);
+                        db.Deleteable<LinZhiDeviceState>().Where(a => a.DeviceName == plc.deviceName).ExecuteCommand();
+                    }
+                }
+                else
+                {
+                    result = false;
+                    LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location},涓嬬嚎鏃堕棿锛歿DeviceStartTime}锛岀涓�涓嬬嚎鏃堕棿涔嬪墠鍙幏寰梴trayTableInfo.Count}鏉℃墭鐩樹俊鎭紝鎵樼洏淇℃伅寮傚父锛�, "杈撻�绾�);
+                    SendErrorTcpMsg(plc, DeviceStartTime);
+                    db.Deleteable<LinZhiDeviceState>().Where(a => a.DeviceName == plc.deviceName).ExecuteCommand();
+
+                }
+            }
+            else LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location} ,DeviceStartTime 璁惧绗竴娆′笅绾挎椂闂翠负绌猴紝绋嬪簭寮傚父锛�, "杈撻�绾�);
+            return result;
+        }
+
+        /// <summary>
+        /// 杈撻�绾挎墭鐩樹俊鎭紓甯�鍚戣緭閫佺嚎鍙戦�寮傚父淇″彿
+        /// 1銆佷笅绾挎椂闂村墠鐨勬墭鐩樻暟灏忎簬2
+        /// 2銆佹墭瑙勪笉绛変簬褰撳墠鏁伴噺
+        /// </summary>
+        /// <param name="plc"></param>
+        public static void SendErrorTcpMsg(Settings.deviceInfo plc, string deviceStartTime)
+        {
+            if (DateTime.Now >= Convert.ToDateTime(deviceStartTime)) PlcHelper.SendHex(plc.address, "3F00600d0a");
+        }
+
+        private static void ConveryInfoFullThreeS(Settings.deviceInfo plc, string location, LinZhiTrayInfo a, LinZhiWorkOrder workOrder, string DeviceStartTime, ref string BatchNo, ref string ItemLayer, ref string TrayRule, ref string UpdateWorkOn)
+        {
+            if (string.IsNullOrEmpty(a.trayRule))
+            {
+                //浼犺緭缂哄皯 鏍囧噯鎵樿淇℃伅锛岄渶瑕佷粠宸ュ崟鑾峰彇
+                if (!string.IsNullOrEmpty(workOrder.S_TrayRules)) TrayRule = workOrder.S_TrayRules;
+                else LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location},涓嬬嚎鏃堕棿锛歿DeviceStartTime}锛屾墭鐩樹俊鎭〃鏃犳爣鍑嗘墭瑙勪俊鎭笖宸ュ崟:{workOrder.S_WorkNo}涔熸病鏈夋爣鍑嗘墭瑙勪俊鎭紝鏍囧噯鎵樿淇℃伅寮傚父锛�, "杈撻�绾�);
+            }
+            else
+            {
+                //涓�鍒囨崲浜�鐢熶骇鐗╂枡锛岄渶瑕佹洿鏂�宸ュ崟淇℃伅
+                if (workOrder.S_TrayRules != a.trayRule)
+                {
+                    TrayRule = a.trayRule;
+                    UpdateWorkOn = "1";
+                }
+                else TrayRule = a.trayRule;
+            }
+            if (string.IsNullOrEmpty(a.batchNo))
+            {
+                //浼犺緭缂哄皯 鎵规鍙蜂俊鎭紝闇�浠庡伐鍗曡幏鍙�+                if (!string.IsNullOrEmpty(workOrder.S_BatchNo)) BatchNo = workOrder.S_BatchNo;
+                else LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location},涓嬬嚎鏃堕棿锛歿DeviceStartTime}锛屾墭鐩樹俊鎭〃鏃犳壒娆″彿淇℃伅涓斿伐鍗�{workOrder.S_WorkNo}涔熸病鏈夋壒娆″彿淇℃伅锛屾壒娆″彿淇℃伅寮傚父锛�, "杈撻�绾�);
+            }
+            else
+            {
+                //涓�鍒囨崲浜�鐢熶骇鐗╂枡锛岄渶瑕佹洿鏂�宸ュ崟淇℃伅
+                if (workOrder.S_BatchNo != a.batchNo)
+                {
+                    BatchNo = a.batchNo;
+                    UpdateWorkOn = "1";
+                }
+                else BatchNo = a.batchNo;
+            }
+            if (string.IsNullOrEmpty(a.itemLayer))
+            {
+                //浼犺緭缂哄皯 鎵规鍙蜂俊鎭紝闇�浠庡伐鍗曡幏鍙�+                if (!string.IsNullOrEmpty(workOrder.S_ItemLayer)) ItemLayer = workOrder.S_ItemLayer;
+                else LogHelper.Info($"杈撻�绾匡細{plc.deviceName} 涓嬬嚎淇″彿锛歿location},涓嬬嚎鏃堕棿锛歿DeviceStartTime}锛屾墭鐩樹俊鎭〃鏃犵墿鏂欏眰鏁颁俊鎭笖宸ュ崟:{workOrder.S_WorkNo}涔熸病鏈夌墿鏂欏眰鏁颁俊鎭紝鐗╂枡灞傛暟淇℃伅寮傚父锛�, "杈撻�绾�);
+            }
+            else
+            {
+                //涓�鍒囨崲浜�鐢熶骇鐗╂枡锛岄渶瑕佹洿鏂�宸ュ崟淇℃伅
+                if (workOrder.S_ItemLayer != a.itemLayer)
+                {
+                    ItemLayer = a.itemLayer;
+                    UpdateWorkOn = "1";
+                }
+                else ItemLayer = a.itemLayer;
+            }
+        }
+
+
+        private static string ConveryInfoFullTwo(Settings.deviceInfo plc, string DeviceStartTime)
+        {
+            //2.鑾峰彇褰撳墠浜х嚎 璁惧涓棿琛�瀵瑰簲淇℃伅   LinJiangDeviceState 
+            //2-1.鏈夋暟鎹紝鍒ゆ柇褰撳墠鏄惁涓虹涓�鏀跺埌涓嬬嚎淇″彿
+            //      绗竴娆★細鏇存柊 DeviceState = 1锛孌eviceStartTime = 褰撳墠鏃堕棿
+            //      绗琋娆★細鍒ゆ柇褰撳墠 DeviceState 鏄惁涓�锛屼笉涓�锛屾洿鏂�DeviceState 浠ュ強 DeviceStartTime
+            //2-2.鏃犳暟鎹紝鎻掑叆 DeviceName 锛孌eviceState = 1锛孌eviceStartTime = 褰撳墠鏃堕棿 鏁版嵁
+            //浠诲姟鍒涘缓鎴愬姛浼氬垹闄ゆ琛ㄦ暟鎹�+
+            var db = new SqlHelper<object>().GetInstance();
+            var workInfo = db.Queryable<LinZhiWorkOrder>().Where(a => a.S_PLineNo == plc.deviceName && a.S_ORDER_TYPE == "浜х嚎涓嬬嚎" && a.S_WorkState == "鎵ц涓�).First();
+            if (workInfo != null)
+            {
+                var deviceTableInfo = WCSHelper.GetLinJiangDeviceState(plc.deviceName);
+                if (deviceTableInfo != null)
+                {
+                    if (deviceTableInfo.DeviceState.Trim() != "1")
+                    {
+                        WCSHelper.UpdateLinJiangDeviceState(deviceTableInfo, "1", DeviceStartTime);
+                        //isTime = false;
+                    }
+                    else
+                    {
+                        DeviceStartTime = deviceTableInfo.DeviceTime;
+                    }
+                }
+                else
+                {
+                    DateTime dateTime = Convert.ToDateTime(DeviceStartTime).AddMinutes(1);
+                    DeviceStartTime = dateTime.ToString();
+                    WCSHelper.LinJiangInsertDeviceState(new LinZhiDeviceState
+                    {
+                        DeviceName = plc.deviceName,
+                        DeviceTime = DeviceStartTime,
+                        DeviceState = "1"
+                    });
+                }
+            }
+            return DeviceStartTime;
+        }
+
         /// <summary>
         /// 鐡跺澂缈绘枟鏈虹┖鎵樹笅绾�         /// </summary>
@@ -83,14 +514,13 @@
             {
                 LogHelper.Info($"鏌ヨ鍒版墽琛屼腑鐨勫伐鍗曪紝宸ュ崟绫诲瀷锛歿workInfo.S_PLineNo}");
                 string startArea = "";
-                string endArea = "";
                 string fullTaskType = "";
                 string emptyTaskType = "";
                 if (workInfo.S_UsingNow == "Y")
                 {
                     LogHelper.Info("鍗充骇鍗崇敤宸ュ崟");
                     //鍗充骇鍗崇敤鍦ㄨ捣鐐逛负绾胯竟
-                    var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇鍗崇敤A" && a.enable == 1).FirstOrDefault();
+                    var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃" && a.enable == 1).FirstOrDefault();
                     if (bcpInfo != null)
                     {
                         startArea = bcpInfo.areaCode;
@@ -102,7 +532,8 @@
                 {
                     LogHelper.Info("闈炲嵆浜у嵆鐢ㄥ伐鍗�);
                     //闈炲嵆浜у嵆鐢ㄨ捣鐐逛负搴撳尯
-                    var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault();
+                    string areaName = plc.deviceName.Split('-')[1].Substring(0, 1) + "鍙风摱鍧炕鏂楁満闈炲嵆浜ф弧妗�;
+                    var bcpInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).FirstOrDefault();
                     if (bcpInfo != null)
                     {
                         startArea = bcpInfo.areaCode;
@@ -111,11 +542,9 @@
                     emptyTaskType = "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡跺澂锛�;
                 }
 
-                endArea = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂缈绘枟鏈虹┖鎵� && a.enable == 1).FirstOrDefault().areaCode;
-
                 if (data.Length == 6)
                 {
-                    if (data.Substring(0, 2) == "11")
+                    if (data.Substring(2, 2) == "22")
                     {
                         if (LocationHelper.CheckLocFree(plc.TN_Location[0]))
                         {
@@ -138,30 +567,26 @@
                                 //鍒ゆ柇褰撳墠缈绘枟鏈烘槸鍚︽湁閫佽繃婊℃墭 S_NOTE 瀛楁榛樿绌哄瓧绗︿覆锛屾弧鎵樺嵏璐у畬鎴愪箣鍚庝細鏍囪涓烘弧鎵橈紝绌烘墭鍙栬揣瀹屾垚澶嶄綅涓虹┖瀛楃涓�                                 Location startLoca = null;
                                 var locCode = plc.TN_Location[0];
-                                var plcLoca = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == locCode).ToList();
-                                if (plcLoca.Count <= 0)
+                                var plcLoca = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == locCode).First();
+                                if (plcLoca == null)
                                 {
                                     LogHelper.Info($"鐡跺澂缈绘枟鏈轰笂鏃犳墭鐩橈紝鐢熸垚婊℃墭涓婄嚎浠诲姟锛岀摱鍧炕鏂楁満鐐逛綅锛歿plc.TN_Location[0]}");
                                     //鍒濆鐘舵�锛屾棤鎵樼洏锛岀洿鎺ヤ笂婊℃墭(闈炲嵆浜у嵆鐢ㄩ渶瑕佹牎楠�濂楄瀹屾垚锛屽嵆浜у嵆鐢ㄧ洿鎺ヤ娇鐢�
                                     if (workInfo.S_UsingNow == "Y")
                                     {
-                                        LogHelper.Info($"鐡跺澂鍗充骇鍗崇敤A搴撳尯鏌ユ壘");
+                                        LogHelper.Info($"鐡跺澂鍗充骇婊℃ 鏌ユ壘");
                                         startLoca = getFDSXArea(db, workInfo, startArea);
-                                        if (startLoca == null)
-                                        {
-                                            LogHelper.Info($"鐡跺澂鍗充骇鍗崇敤A搴撳尯鏈壘鍒版弧鎵橈紝鍘荤摱鍧嵆浜у嵆鐢˙搴撳尯鏌ユ壘");
-                                            startLoca = TaskProcess.BCPInOrOut(db, true, "鐡跺澂鍗充骇鍗崇敤B", workInfo.S_ItemCode);
-                                        }
                                     }
                                     else
                                     {
+                                        LogHelper.Info($"鐡跺澂缈绘枟鏈洪潪鍗充骇婊℃ 鏌ユ壘");
                                         startLoca = getFDSXArea(db, workInfo, startArea);
                                     }
 
                                     if (startLoca != null)
                                     {
                                         //鍒涘缓浣滀笟
-                                        WMSHelper.CreateOpTask(startLoca.S_CODE, locCode, "鍑哄簱", fullTaskType, startLoca.LocCntrRel.S_CNTR_CODE);
+                                        WMSHelper.CreateOpTask(startLoca.S_CODE, locCode, "鍑哄簱", fullTaskType, startLoca.LocCntrRel.S_CNTR_CODE, "", "", workInfo.S_WorkNo);
                                     }
                                 }
                                 else
@@ -169,7 +594,7 @@
                                     LogHelper.Info($"鐡跺澂缈绘枟鏈轰笂鏈夌┖鎵樼洏锛岀敓鎴愮┖鎵樹笅绾夸换鍔★紝鐡跺澂缈绘枟鏈虹偣浣嶏細{plc.TN_Location[0]}");
 
                                     //鍒涘缓浣滀笟
-                                    WMSHelper.CreateOpTask(locCode, "", "鍏ュ簱", emptyTaskType, plcLoca[0].S_CNTR_CODE);
+                                    WMSHelper.CreateOpTask(locCode, "", "鍏ュ簱", emptyTaskType, plcLoca.S_CNTR_CODE, "", "", workInfo.S_WorkNo);
                                 }
                             }
                         }
@@ -212,12 +637,11 @@
             {
                 LogHelper.Info($"鏌ヨ鍒版墽琛屼腑鐨勫伐鍗曪紝宸ュ崟绫诲瀷锛歿workInfo.S_PLineNo}");
                 string startArea = "";
-                string endArea = "";
                 string fullTaskType = "";
                 string emptyTaskType = "";
                 LogHelper.Info("闈炲嵆浜у嵆鐢ㄥ伐鍗�);
                 //闈炲嵆浜у嵆鐢ㄨ捣鐐逛负搴撳尯
-                var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault();
+                var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊闈炲嵆浜ф弧妗� && a.enable == 1).FirstOrDefault();
                 if (bcpInfo != null)
                 {
                     startArea = bcpInfo.areaCode;
@@ -226,16 +650,13 @@
                 fullTaskType = "缈绘枟鏈哄簱瀛樻弧鎵樹笂绾匡紙鐡剁洊锛�;
                 emptyTaskType = "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡剁洊锛�;
 
-                endArea = Settings.areaInfos.Where(a => a.areaCode == "鐡剁洊绌烘墭" && a.enable == 1).FirstOrDefault().areaCode;
-
                 if (data.Length == 6)
                 {
-                    if (data.Substring(0, 2) == "11")
+                    if (data.Substring(2, 2) == "22")
                     {
                         if (LocationHelper.CheckLocFree(plc.TN_Location[0]))
                         {
                             var bit = plc.TN_Location[0];
-
                             bool flag = true;
                             var cgInfo = db.Queryable<CGTTable>().Where(a => a.Bit == bit).First();
                             if (cgInfo != null)
@@ -251,8 +672,8 @@
                                 Location startLoca = null;
 
                                 var locCode = plc.TN_Location[0];
-                                var plcLoca = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == locCode).ToList();
-                                if (plcLoca.Count <= 0)
+                                var plcLoca = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == locCode).First();
+                                if (plcLoca == null)
                                 {
                                     LogHelper.Info($"鐡剁洊缈绘枟鏈轰笂鏃犳墭鐩橈紝鐢熸垚婊℃墭涓婄嚎浠诲姟锛岀摱鐩栫炕鏂楁満鐐逛綅锛歿plc.TN_Location[0]}");
                                     //鍒濆鐘舵�锛屾棤鎵樼洏锛岀洿鎺ヤ笂婊℃墭(闈炲嵆浜у嵆鐢ㄩ渶瑕佹牎楠�濂楄瀹屾垚锛屽嵆浜у嵆鐢ㄧ洿鎺ヤ娇鐢�
@@ -261,14 +682,14 @@
                                     if (startLoca != null)
                                     {
                                         //鍒涘缓浣滀笟
-                                        WMSHelper.CreateOpTask(startLoca.S_CODE, locCode, "鍑哄簱", fullTaskType, startLoca.LocCntrRel.S_CNTR_CODE);
+                                        WMSHelper.CreateOpTask(startLoca.S_CODE, locCode, "鍑哄簱", fullTaskType, startLoca.LocCntrRel.S_CNTR_CODE,"","",workInfo.S_WorkNo);
                                     }
                                 }
                                 else
                                 {
-                                    LogHelper.Info($"鐡剁洊缈绘枟鏈轰笂鏈夌┖鎵樼洏锛岀敓鎴愮┖鎵樹笅绾夸换鍔★紝鐡剁洊缈绘枟鏈虹偣浣嶏細{plc.TN_Location[0]}");
+                                    LogHelper.Info($"鐡剁洊缈绘枟鏈轰笂鏈夌┖鎵樼洏锛岀敓鎴愮┖鎵樹笅绾夸换鍔★紝鐡剁洊缈绘枟鏈虹偣浣嶏細{locCode}");
                                     //鍒涘缓浣滀笟
-                                    WMSHelper.CreateOpTask(plc.TN_Location[0],"", "鍏ュ簱", emptyTaskType, startLoca.LocCntrRel.S_CNTR_CODE);
+                                    WMSHelper.CreateOpTask(locCode, "", "鍏ュ簱", emptyTaskType, plcLoca.S_CNTR_CODE,"","",workInfo.S_WorkNo);
                                 }
                             }
                         }
@@ -287,6 +708,7 @@
             {
                 foreach(var a in locList)
                 {
+                    LogHelper.Info($"getFDSXArea:鏌ヨ鍒板綋鍓嶈揣浣嶉攣鐘舵�锛歿a.S_LOCK_STATE},璐т綅缂栫爜锛歿a.S_CODE}");
                     if(a.S_LOCK_STATE == "鏃�)
                     {
                         var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
@@ -295,16 +717,28 @@
                             var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First();
                             if(itemInfo != null)
                             {
-                                if(itemInfo.S_ITEM_CODE == workInfo.S_ItemCode)
+                                LogHelper.Info($"getFDSXArea:鏌ヨ鍒扮墿鏂欑紪鐮侊細{itemInfo.S_ITEM_CODE}");
+                                if (itemInfo.S_ITEM_CODE == workInfo.S_ItemCode)
                                 {
                                     result = a;
                                     break;
                                 }
                             }
-
+                            else
+                            {
+                                LogHelper.Info($"getFDSXArea:褰撳墠鎵樼洏鏈粦瀹氱墿鏂欙紝鎵樼洏缂栫爜锛歿cntrInfo.S_CNTR_CODE}");
+                            }
+                        }
+                        else
+                        {
+                            LogHelper.Info($"getFDSXArea:褰撳墠璐т綅鏈粦瀹氭墭鐩�);
                         }
                     }
                 }
+            }
+            else
+            {
+                LogHelper.Info($"getFDSXArea:鏈煡璇㈠埌鍙敤婊℃墭锛屽簱鍖虹紪鐮侊細{startArea}");
             }
             return result;
         }
@@ -319,6 +753,21 @@
         {
             LogHelper.Info($"{plc.deviceName}-{plc.address}-{data}", "鐡跺澂鏈�);
             var db = new SqlHelper<object>().GetInstance();
+
+            LogHelper.Info($"鐡跺澂鏈猴紝鏌ヨ浠诲姟缁堢偣锛歿plc.TN_Location[0]}");
+            if (LineState.Keys.Contains(plc.TN_Location[0]))
+            {
+                LogHelper.Info("鐡跺澂鏈哄寘鍚浠诲姟缁堢偣");
+                LineState[plc.TN_Location[0]].status = data;
+                LineState[plc.TN_Location[0]].modify = DateTime.Now;
+            }
+            else
+            {
+                LogHelper.Info("鐡跺澂鏈烘湭鍖呭惈璇ヤ换鍔$粓鐐�);
+                LineState.Add(plc.TN_Location[0], new statemodel { status = data, modify = DateTime.Now });
+            }
+
+
             var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == plc.deviceName).First();
             if (workInfo != null && workInfo.S_WorkState == "鎵ц涓�)
             {
@@ -336,12 +785,11 @@
                     taskType = "娉ㄥ搴撳瓨婊℃墭涓嬬嚎锛堢摱鍧級";
                 }
                 //endArea = Settings.GetLinJiangBCPAreaList().Where(a => a.AreaName == "鐡跺澂婊℃墭" && a.Enable == "1").FirstOrDefault().AreaNo;
-
-                if (data.Length == 4)
+                if (data.Length == 8)
                 {
-                    if (data == "1122") LinZhialysisBottleCapAndPreformTwo(plc, db, workInfo, endArea, taskType, plc.TN_Location[0], "鐡跺澂鏈�);
+                    if (data.Substring(0,2) == "12") LinZhialysisBottleCapAndPreformTwo(plc, db, workInfo, endArea, taskType, plc.TN_Location[0], "鐡跺澂鏈�);
 
-                    if (data == "1221") LinZhialysisBottleCapAndPreformTwo(plc, db, workInfo, endArea, taskType, plc.TN_Location[1], "鐡跺澂鏈�);
+                    if (data.Substring(2,2) == "22") LinZhialysisBottleCapAndPreformTwo(plc, db, workInfo, endArea, taskType, plc.TN_Location[1], "鐡跺澂鏈�);
                 }
             }
             else LogHelper.Info($"鐡跺澂鏈猴細{plc.deviceName} 鏈紑鍚伐鍗曪紝涓嶅彲瑙﹀彂婊℃墭涓嬬嚎", "鐡跺澂鏈�);
@@ -394,36 +842,35 @@
                                 taskType = $"娉ㄥ搴撳瓨绌烘墭涓婄嚎({machine})";
                             }
                             
-                            Location startLoca = TaskProcess.getMStartLoc(db);
-                            //鍒涘缓浣滀笟
-                            WMSHelper.CreateOpTask(startLoca.S_CODE, deviceBit, "鍑哄簱", taskType, startLoca.LocCntrRel.S_CNTR_CODE);
+                            Location startLoca = TaskProcess.getMStartLoc(db,workInfo.S_UsingNow);
+                            if (startLoca != null)
+                            {
+                                //鍒涘缓浣滀笟
+                                WMSHelper.CreateOpTask(startLoca.S_CODE, deviceBit, "鍑哄簱", taskType, startLoca.LocCntrRel.S_CNTR_CODE, "", "", workInfo.S_WorkNo);
+                            }
+                            else
+                            {
+                                LogHelper.Info("鏈煡璇㈠埌鍙嚭绌烘墭");
+                            }
+                            
                         }
                         else
                         {
-                            LogHelper.Info($"{type}娉ㄥ鏈轰笂鏈粦瀹氭墭鐩�鑷姩缁戝畾鎵樼洏");
                             string cntrCode = Guid.NewGuid().ToString("N");
                             var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == deviceBit).First();
                             if(cntrInfo == null)
                             {
-                                LocCntrRel cntr = new LocCntrRel
-                                {
-                                    S_LOC_CODE = deviceBit,
-                                    S_CNTR_CODE = cntrCode,
-                                };
-                                if (db.Insertable(cntr).ExecuteCommand() > 0)
-                                {
-                                    locInfo.N_CURRENT_NUM = locInfo.N_CURRENT_NUM + 1;
-                                    db.Updateable(locInfo).UpdateColumns(a => a.N_CURRENT_NUM).ExecuteCommand();
-                                    LogHelper.Info($"璧风偣鎴愬姛缁戝畾鎵樼洏锛岃捣鐐癸細{deviceBit}锛屾墭鐩樺彿锛歿cntrCode}");
-                                    
-                                }
+                                LogHelper.Info($"{type}娉ㄥ鏈轰笂鏈粦瀹氭墭鐩�鑷姩缁戝畾鎵樼洏");
+
+                                TaskProcess.BindLocCntr(deviceBit, cntrCode, workInfo.S_ItemCode, "");
                             }
                             else
                             {
                                 cntrCode = cntrInfo.S_CNTR_CODE;
+                                TaskProcess.BindCntrItem(cntrCode, workInfo.S_ItemCode, "", "");
                             }
                             //鍒涘缓浣滀笟
-                            WMSHelper.CreateOpTask(deviceBit, "", "鍏ュ簱", taskType, cntrCode);
+                            WMSHelper.CreateOpTask(deviceBit, "", "鍏ュ簱", taskType, cntrCode,"","",workInfo.S_WorkNo);
                         }
                     }
                 }
@@ -482,19 +929,32 @@
                 if (mst.S_TYPE.Contains("缈绘枟鏈�))
                 {
                     LogHelper.Info($"鏌ヨ缈绘枟鏈哄厑璁稿彇绌轰俊鍙�鍏佽鍙栫┖淇″彿={LineState[mst.S_START_LOC.Trim()].status} 鏃堕棿闂撮殧={DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds}", "瀹夊叏浜や簰");
-                    if (LineState[mst.S_START_LOC.Trim()].status == "112100" && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
+                    if (LineState[mst.S_START_LOC.Trim()].status.Substring(4,2) == "00" && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
                     {
-                        NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1101, 18);
+                        //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1101, 18);
+                        NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1101");
                         TaskProcess.sendSing(mst, 1101);
                     }
                 }
                 else
                 {
                     LogHelper.Info($"鏌ヨ杈撻�绾垮厑璁稿彇婊′俊鍙�鍏佽鍙栨弧淇″彿={LineState[mst.S_START_LOC.Trim()].status} 鏃堕棿闂撮殧={DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds}", "瀹夊叏浜や簰");
-                    if (LineState[mst.S_START_LOC.Trim()].status == "1220" && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
+                    if (mst.S_TYPE.Contains("婊℃墭涓嬬嚎"))
                     {
-                        NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1101, 18);
-                        TaskProcess.sendSing(mst, 1101);
+                        if ((LineState[mst.S_START_LOC.Trim()].status.Substring(4,2) == "00" || LineState[mst.S_START_LOC.Trim()].status.Substring(4,2) == "02") && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
+                        {
+                            //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1101, 18);
+                            NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1101");
+                        }
+                    }
+                    else
+                    {
+                        if (LineState[mst.S_START_LOC.Trim()].status == "1220" && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
+                        {
+                            //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1101, 18);
+                            NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1101");
+                            TaskProcess.sendSing(mst, 1101);
+                        }
                     }
                 }
             }
@@ -512,20 +972,35 @@
                     if (mst.S_TYPE.Contains("缈绘枟鏈�))
                     {
                         LogHelper.Info($"鏌ヨ缈绘枟鏈哄厑璁镐笂婊′俊鍙�鍏佽涓婃弧淇″彿={LineState[mst.S_END_LOC.Trim()].status} 鏃堕棿闂撮殧={DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds}", "瀹夊叏浜や簰");
-                        if (LineState[mst.S_END_LOC.Trim()].status == "112100" && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
+                        if (LineState[mst.S_END_LOC.Trim()].status.Substring(4,2) == "00" && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
                         {
-                            NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1103, 18);
+                            //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1103, 18);
+                            NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1103");
                             TaskProcess.sendSing(mst, 1103);
                         }
                     }
                     else
                     {
                         LogHelper.Info($"鏌ヨ杈撻�绾垮厑璁歌ˉ绌轰俊鍙�鍏佽琛ョ┖淇″彿={LineState[mst.S_END_LOC.Trim()].status} 鏃堕棿闂撮殧={DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds}", "瀹夊叏浜や簰");
-                        if (LineState[mst.S_END_LOC.Trim()].status == "1021" && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
+                        if (mst.S_TYPE.Contains("绌烘墭涓婄嚎"))
                         {
-                            NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1103, 18);
-                            TaskProcess.sendSing(mst, 1103);
+                            if ((LineState[mst.S_END_LOC.Trim()].status.Substring(4,2) == "00" || LineState[mst.S_END_LOC.Trim()].status.Substring(4,2) == "02") && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
+                            {
+                                //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1103, 18);
+                                NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1103");
+                                TaskProcess.sendSing(mst, 1103);
+                            }
                         }
+                        else
+                        {
+                            if (LineState[mst.S_END_LOC.Trim()].status == "1021" && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
+                            {
+                                //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1103, 18);
+                                NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1103");
+                                TaskProcess.sendSing(mst, 1103);
+                            }
+                        }
+                        
                     }
                 }
                 else LogHelper.Info($"瀛楀吀涓湭鍖呭惈缁堢偣鐨勫叧閿瓧锛岀粓鐐硅揣浣嶏細{mst.S_END_LOC}");

--
Gitblit v1.9.1