From 648f4270f4f56c5ca284dbcfa650de05e46a7052 Mon Sep 17 00:00:00 2001
From: cjs <2216046164@qq.com>
Date: 星期三, 16 七月 2025 17:20:59 +0800
Subject: [PATCH] 11111

---
 HH.WCS.Mobox3.NongFuLinZhi/core/Monitor.cs |  427 ++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 389 insertions(+), 38 deletions(-)

diff --git a/HH.WCS.Mobox3.NongFuLinZhi/core/Monitor.cs b/HH.WCS.Mobox3.NongFuLinZhi/core/Monitor.cs
index a6b6881..82ae89b 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/core/Monitor.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/core/Monitor.cs
@@ -2,12 +2,15 @@
 using HH.WCS.Mobox3.NFLZ.process;
 using HH.WCS.Mobox3.NFLZ.util;
 using HH.WCS.Mobox3.NFLZ.wms;
+using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
+using System.Configuration;
 using System.Linq;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
+using static HH.WCS.Mobox3.NFLZ.wms.WMSHelper.AddChangeModel;
 using static System.Runtime.CompilerServices.RuntimeHelpers;
 
 namespace HH.WCS.Mobox3.NFLZ.core
@@ -46,82 +49,430 @@
         }
 
         /// <summary>
-        /// 鐡剁洊杞繍
+        /// 杞繍浠诲姟
         /// </summary>
         internal static void BottleBlankTransportation()
         {
             var db = new SqlHelper<object>().GetInstance();
-            var jbwInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊鍏ュ簱鎺ラ┏浣� && a.enable == 1).FirstOrDefault();
-            if(jbwInfo != null)
+            #region 鐡剁洊绌烘墭鍏ュ簱
+            var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊闈炲嵆浜х┖妗� && a.enable == 1).FirstOrDefault();
+            if(areaInfo != null)
             {
-                var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == jbwInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).Includes(a => a.LocCntrRel).First();
+                var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == a.N_CAPACITY && a.S_LOCK_STATE == "鏃�).First();
                 if(locInfo != null)
                 {
-                    LogHelper.Info($"銆愮摱鐩栬浆杩愩�鐡跺澂鎺ラ┏浣嶆煡璇㈠埌闇�叆搴撶殑鐡跺澂锛岃揣浣嶇紪鐮侊細{locInfo.S_CODE}");
-                    if(locInfo.LocCntrRel != null)
+                    string cntrCode = getCntrCode(db, locInfo);
+                    if (string.IsNullOrEmpty(cntrCode))
                     {
                         //鍒涘缓浣滀笟
-                        WMSHelper.CreateOpTask(locInfo.S_CODE, "", "鍏ュ簱", "鐡剁洊杞繍", locInfo.LocCntrRel.S_CNTR_CODE,"鐡剁洊");
+                        WMSHelper.CreateOpTask(locInfo.S_CODE, "", "鍏ュ簱", "鐡剁洊绌烘墭鍏ュ簱", cntrCode, "鐡剁洊");
                     }
                     else
                     {
-                        LogHelper.Info($"銆愮摱鐩栬浆杩愩�褰撳墠璐т綅鏈粦瀹氭墭鐩樼爜锛岃揣浣嶇紪鐮侊細{locInfo.S_CODE}");
+                        LogHelper.Info($"銆愮摱鐩栫┖鎵樿浆杩愩�褰撳墠璐т綅鏈粦瀹氭墭鐩樼爜锛岃揣浣嶇紪鐮侊細{locInfo.S_CODE}");
                     }
                 }
             }
             else
             {
-                LogHelper.Info("銆愮摱鐩栬浆杩愩�鐡跺澂鎺ラ┏浣嶆湭閰嶇疆");
+                LogHelper.Info("銆愮摱鐩栫┖鎵樿浆杩愩�鐡剁洊闈炲嵆浜х┖妗�鏈厤缃�);
+            }
+            #endregion
+
+            #region 鐡跺澂婊℃墭鍏ュ簱
+            areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍏ュ簱鎺ラ┏" && a.enable == 1).FirstOrDefault();
+            if (areaInfo != null)
+            {
+                var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == a.N_CAPACITY && a.S_LOCK_STATE == "鏃�).First();
+                if (locInfo != null)
+                {
+                    string cntrCode = getCntrCode(db, locInfo);
+                    if (!string.IsNullOrEmpty(cntrCode))
+                    {
+                        //鍒涘缓浣滀笟
+                        WMSHelper.CreateOpTask(locInfo.S_CODE, "", "鍏ュ簱", "鐡跺澂鎺ラ┏浣嶅叆搴�, cntrCode, "鐡跺澂");
+                    }
+                    else
+                    {
+                        LogHelper.Info($"銆愮摱鍧弧鎵樿浆杩愩�褰撳墠璐т綅鏈粦瀹氭墭鐩樼爜锛岃揣浣嶇紪鐮侊細{locInfo.S_CODE}");
+                    }
+                }
+            }
+            else
+            {
+                LogHelper.Info("銆愮摱鍧弧鎵樿浆杩愩�鐡跺澂鍏ュ簱鎺ラ┏ 鏈厤缃�);
+            }
+
+            #endregion
+        }
+
+        /// <summary>
+        /// 鐡跺澂缈绘枟鏈洪潪鍗充骇婊℃鍖鸿ˉ婊℃墭
+        /// </summary>
+        internal static void PPFDFullIn()
+        {
+            //浜х嚎鍙�锛�鍐滃か鏋楄姖-1鍙风摱鍧炕鏂楁満
+            var db = new SqlHelper<object>().GetInstance();
+            var bcpWorkList = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("鐡跺澂缈绘枟鏈�) && a.S_UsingNow == "N" && a.S_WorkState == "鎵ц涓�).ToList();
+            if(bcpWorkList.Count > 0)
+            {
+                bcpWorkList.ForEach(a => 
+                {
+                    string areaName = a.S_PLineNo.Split('-')[1].Substring(0, 1) + "鍙风摱鍧炕鏂楁満闈炲嵆浜ф弧妗�;
+                    LogHelper.Info($"PPFDFullIn area:{areaName}");
+                    var areaInfo = Settings.areaInfos.Where(b => b.areaName == areaName && b.enable == 1).FirstOrDefault();
+                    if(areaInfo != null)
+                    {
+                        var locInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_CURRENT_NUM == 0 && b.S_LOCK_STATE == "鏃�).First();
+                        if(locInfo != null)
+                        {
+                            //鐢熸垚浠诲姟
+                            Location location = TaskProcess.BCPInOrOut(db, false, "鐡跺澂搴撳尯", a.S_ItemCode);
+                            if(location != null)
+                            {
+                                string cntrCode = getCntrCode(db,location);
+                                //鍒涘缓浣滀笟
+                                WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "鍏ュ簱", "鐡跺澂闈炲嵆浜цˉ婊℃", cntrCode, "鐡跺澂");
+                            }
+                        }
+                    }
+                    else
+                    {
+                        LogHelper.Info($"{areaName}鏈厤缃�);
+                    }
+                });
+            }
+        }
+
+        private static string getCntrCode(SqlSugar.SqlSugarClient db, Location location)
+        {
+            string cntr = "";
+            var cntrList = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == location.S_CODE).OrderBy(a => a.T_CREATE).ToList();
+            if(cntrList.Count > 0)
+            {
+                foreach(var a in cntrList)
+                {
+                    cntr = cntr + a.S_CNTR_CODE + ",";
+                }
+            }
+            cntr = cntr.TrimEnd(',');
+            return cntr;
+        }
+
+        internal static void PGFDFullIn()
+        {
+            //浜х嚎鍙�锛�鍐滃か鏋楄姖-1鍙风摱鐩栫炕鏂楁満
+            //鐡剁洊缈绘枟鏈哄叡鐢ㄤ竴涓簱鍖猴紝闇�鍖哄垎鍑犵鎯呭喌锛堟敞锛氱幇鍦哄凡纭锛屼笁涓炕鏂楁満涓嶄細鏈変笁绉嶇墿鏂欙級
+            //1銆佸鏋滀笁涓炕鏂楁満鐗╂枡鐩稿悓锛屽垯 鐡剁洊闈炲嵆浜ф弧妗�鏈夌┖璐т綅灏辫ˉ
+            //2銆佸鏋滀笁涓炕鏂楁満鏈変袱绉嶄笉鍚岀殑鐗╂枡锛屽垯 鐡剁洊闈炲嵆浜ф弧妗�鏈夌┖浣嶇殑琛ュ厖 鏀瑰簱鍖烘病鏈夌殑鐗╂枡
+            var db = new SqlHelper<object>().GetInstance();
+            string itemList = "";
+            var bcpWorkList = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("鐡剁洊缈绘枟鏈�) && a.S_UsingNow == "N" && a.S_WorkState == "鎵ц涓�).ToList();
+            if (bcpWorkList.Count > 0)
+            {
+                bcpWorkList.ForEach(a =>
+                {
+                    if (string.IsNullOrEmpty(itemList))
+                    {
+                        itemList = itemList + a.S_ItemCode + ",";
+                    }
+                    else
+                    {
+                        if (!itemList.Contains(a.S_ItemCode))
+                        {
+                            itemList = itemList + a.S_ItemCode + ",";
+                        }
+                    }
+                });
+            }
+            if (!string.IsNullOrEmpty(itemList))
+            {
+                itemList = itemList.TrimEnd(',');
+                List<string> itemCount = itemList.Split(',').ToList();
+                if(itemCount.Count > 0)
+                {
+                    var areaInfo = Settings.areaInfos.Where(b => b.areaName == "鐡剁洊闈炲嵆浜ф弧妗� && b.enable == 1).FirstOrDefault();
+                    if (areaInfo != null)
+                    {
+                        var locInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_CURRENT_NUM == 0 && b.S_LOCK_STATE == "鏃�).First();
+                        if (locInfo != null)
+                        {
+                            if (itemCount.Count == 1)
+                            {
+                                //鍙湁涓�鐗╂枡
+                                //鐢熸垚浠诲姟
+                                Location location = TaskProcess.BCPInOrOut(db, false, "鐡剁洊搴撳尯", itemCount[0]);
+                                if (location != null)
+                                {
+                                    string cntrCode = getCntrCode(db, location);
+                                    //鍒涘缓浣滀笟
+                                    WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "鍏ュ簱", "鐡剁洊闈炲嵆浜цˉ婊℃澶у寘瑁�, cntrCode, "鐡剁洊");
+                                }
+                            }
+                            if (itemCount.Count == 2)
+                            {
+                                //涓ょ鐗╂枡
+
+                                //鍒ゆ柇搴撳尯鏄惁鏈夎揣浣嶆暟閲忓ぇ浜�鎴栬�鏈夊叆搴撻攣鐨勶紝濡傛灉鏈夛紝鍒欏垽鏂墿鏂欙紝濡傛灉娌℃湁锛屽垯鐢熸垚绗竴涓墿鏂欑殑浠诲姟
+                                var locInfo2 = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && (b.N_CURRENT_NUM > 0 || b.S_LOCK_STATE == "鍏ュ簱閿�)).First();
+                                if(locInfo2 != null)
+                                {
+                                    string itemCode = "";
+                                    if(locInfo2.N_CURRENT_NUM > 0)
+                                    {
+                                        var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == locInfo2.S_CODE).First();
+                                        if(cntrInfo != null)
+                                        {
+                                            var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First();
+                                            if(itemInfo != null)
+                                            {
+                                                itemCode = itemInfo.S_ITEM_CODE;
+                                            }
+                                        }
+                                    }
+                                    if(locInfo2.S_LOCK_STATE == "鍏ュ簱閿�)
+                                    {
+                                        var taskInfo = db.Queryable<WMSTask>().Where(b => b.S_END_LOC == locInfo2.S_CODE && b.S_STATE != "瀹屾垚" && b.S_STATE != "鍙栨秷").First();
+                                        if(taskInfo != null)
+                                        {
+                                            string cntrCode = taskInfo.S_CNTR_CODE.Split(',')[0];
+                                            var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrCode).First();
+                                            if (itemInfo != null)
+                                            {
+                                                itemCode = itemInfo.S_ITEM_CODE;
+                                            }
+                                        }
+                                    }
+
+                                    if (itemCode != "")
+                                    {
+                                        itemCode = itemCode == itemCount[0] ? itemCount[1] : itemCount[0];
+                                        Location location = TaskProcess.BCPInOrOut(db, false, "鐡剁洊搴撳尯", itemCode);
+                                        if (location != null)
+                                        {
+                                            string cntrCode = getCntrCode(db, location);
+                                            //鍒涘缓浣滀笟
+                                            WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "鍏ュ簱", "鐡剁洊闈炲嵆浜цˉ婊℃澶у寘瑁�, cntrCode, "鐡剁洊");
+                                        }
+                                    }
+                                }
+                                else
+                                {
+                                    Location location = TaskProcess.BCPInOrOut(db, false, "鐡剁洊搴撳尯", itemCount[0]);
+                                    if (location != null)
+                                    {
+                                        string cntrCode = getCntrCode(db, location);
+                                        //鍒涘缓浣滀笟
+                                        WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "鍏ュ簱", "鐡剁洊闈炲嵆浜цˉ婊℃澶у寘瑁�, cntrCode, "鐡剁洊");
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    else
+                    {
+                        LogHelper.Info($"鐡剁洊闈炲嵆浜ф弧妗�鏈厤缃�);
+                    }
+                }
             }
         }
 
         /// <summary>
-        /// 鍗婃垚鍝佸伐鍗曠洃鎺�+        /// 鐡跺澂闈炲嵆浜у嵆鐢ㄥ簱鎵樺簱鍖鸿ˉ绌烘墭
         /// </summary>
-        /// <exception cref="NotImplementedException"></exception>
-        internal static void BCPWorkSurveillance()
+        internal static void PPFDFullInEmpty()
         {
-            //鍒ゆ柇褰撳墠鍗婃垚鍝佸伐鍗曟槸鍚︽湁鎵ц涓殑浠诲姟锛屽鏋滄病鏈夛紝鍒欒绾胯竟搴撶殑鐗╂枡鍏ュ簱
-            var db = new SqlHelper<object>().GetInstance();
-            var workList = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_WorkState == "鎵ц涓�).ToList();
-            if(workList.Count == 0)
-            {
-                var taskInfo = db.Queryable<WCSTask>().Where(a => a.S_TYPE == "鎺ラ┏浣嶇Щ搴� && a.S_B_STATE != "瀹屾垚" && a.S_B_STATE != "鍙栨秷" && a.S_B_STATE != "鍗歌揣瀹屾垚" && a.S_B_STATE != "寮�鍗歌揣" && a.S_B_STATE != "鍙栬揣瀹屾垚").First();
-                if(taskInfo == null)
-                {
-                    var areaInfo = Settings.areaInfos.Where(a => (a.areaName == "鐡跺澂闈炲嵆浜у嵆鐢� || a.areaName == "鐡跺澂鍗充骇鍗崇敤A") && a.enable == 1).ToList();
-                    if (areaInfo.Count > 0)
-                    {
-                        foreach (var a in areaInfo)
-                        {
-                            var locInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.areaCode && b.N_CURRENT_NUM > 0 && b.S_LOCK_STATE == "鏃�).Includes(b => b.LocCntrRel).First();
-                            if (locInfo != null)
-                            {
-                                //鍒涘缓浣滀笟
-                                WMSHelper.CreateOpTask(locInfo.S_CODE, "", "鍏ュ簱", "鎺ラ┏浣嶇Щ搴�, locInfo.LocCntrRel.S_CNTR_CODE);
-                            }
+            //鐡跺澂闈炲嵆浜х┖妗嗗尯鍫嗗彔搴撳尯涓�叡鍥涗釜璐т綅锛屽鏋滄湁涓変釜璐т綅鏄弧鐨勶紝灏卞紑濮嬭浆杩愬埌鐡跺澂搴撳尯
+            //濡傛灉婊¤揣浣嶅皬浜庣瓑浜庝竴灏卞紑濮嬩粠婊℃缂撳瓨鍖虹┖妗嗗尯鍩熻浆杩愶紝濡傛灉婊℃缂撳瓨鍖虹┖妗嗗尯鍩熸棤绌烘墭锛屽垯浠庣摱鍧簱杞繍
 
+            var db = new SqlHelper<object>().GetInstance();
+
+            var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂闈炲嵆浜х┖妗� && a.enable == 1).FirstOrDefault();
+            if (areaInfo != null)
+            {
+                var LocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).ToList();
+                if(LocList.Count <= 1)
+                {
+                    LogHelper.Info($"鐡跺澂闈炲嵆浜цˉ绌烘 {JsonConvert.SerializeObject(LocList)}");
+                    var taskInfo = db.Queryable<WCSTask>().Where(a => a.S_TYPE == "鐡跺澂闈炲嵆浜цˉ绌烘" && a.S_B_STATE != "瀹屾垚" && a.S_B_STATE != "鍙栨秷").First();
+                    if(taskInfo == null)
+                    {
+                        var wmsTask = db.Queryable<WMSTask>().Where(a => a.S_OP_DEF_NAME == "鐡跺澂闈炲嵆浜цˉ绌烘" && (a.N_B_STATE == 0 || a.N_B_STATE == 1)).First();
+                        if(wmsTask == null)
+                        {
+                            //闇�浠庡簱鍖鸿ˉ鍏呯┖鎵�+                            Location location = TaskProcess.FJCKTLoc();
+                            var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "鏃�).OrderBy(a => a.N_ROW).First();
+                            if (location != null && locInfo != null)
+                            {
+                                string cntrCode = getCntrCode(db, location);
+                                //鍒涘缓浣滀笟
+                                WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "鍏ュ簱", "鐡跺澂闈炲嵆浜цˉ绌烘", cntrCode, "鐡跺澂");
+                            }
                         }
                     }
+                }
 
-                    var areaInfoTwo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇鍗崇敤B" && a.enable == 1).First();
-                    if (areaInfoTwo != null)
+                LocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == a.N_CAPACITY).ToList();
+                if (LocList.Count > 2)
+                {
+                    //鍒ゆ柇浠诲姟鏄惁瀛樺湪
+                    LogHelper.Info($"鐡跺澂闈炲嵆浜х┖鎵樺叆搴�{JsonConvert.SerializeObject(LocList)}");
+                    var taskInfo = db.Queryable<WCSTask>().Where(a => a.S_TYPE == "鐡跺澂闈炲嵆浜х┖妗嗗叆搴� && a.S_B_STATE != "瀹屾垚" && a.S_B_STATE != "鍙栨秷" && a.S_B_STATE != "鍗歌揣瀹屾垚" && a.S_B_STATE != "寮�鍗歌揣" && a.S_B_STATE != "鍙栬揣瀹屾垚").First();
+                    if(taskInfo == null)
                     {
-                        var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfoTwo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList();
-                        if(locInfo.Count > 0)
+                        //鍒ゆ柇浣滀笟鏄惁瀛樺湪
+                        var wmsTask = db.Queryable<WMSTask>().Where(a => a.S_OP_DEF_NAME == "鐡跺澂闈炲嵆浜х┖妗嗗叆搴� && (a.N_B_STATE == 0 || a.N_B_STATE == 1)).First();
+                        if(wmsTask == null)
                         {
-                            foreach(var a in locInfo)
+                            //闇�灏嗙┖鎵樿浆杩愬埌搴撳尯
+                            foreach (var a in LocList)
                             {
-                                if(a.S_LOCK_STATE == "鏃�)
+                                if (a.S_LOCK_STATE == "鏃�)
                                 {
+                                    //鐢熸垚浠诲姟
+                                    string cntrCode = getCntrCode(db, a);
                                     //鍒涘缓浣滀笟
-                                    WMSHelper.CreateOpTask(a.S_CODE, "", "鍏ュ簱", "鎺ラ┏浣嶇Щ搴�, a.LocCntrRel.S_CNTR_CODE,"鐡跺澂");
+                                    WMSHelper.CreateOpTask(a.S_CODE, "", "鍏ュ簱", "鐡跺澂闈炲嵆浜х┖妗嗗叆搴�, cntrCode, "鐡跺澂");
                                     break;
                                 }
                             }
                         }
                     }
                 }
+
+            }
+            #region
+            //var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "鍐滃か鏋楄姖-鐡跺澂鏈� && a.S_UsingNow == "N" && a.S_WorkState == "鎵ц涓�).First();
+            //if(workInfo != null)
+            //{
+            //    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂闈炲嵆浜х┖妗� && a.enable == 1).FirstOrDefault();
+            //    if(areaInfo != null)
+            //    {
+            //        var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == 0 && a.S_LOCK_STATE == "鏃�).First();
+            //        if(locInfo != null)
+            //        {
+            //            //鐢熸垚浠诲姟
+            //            Location location = TaskProcess.BCPInOrOut(db, false, "鐡跺澂搴撳尯", "");
+            //            if (location != null)
+            //            {
+            //                string cntrCode = getCntrCode(db, location);
+            //                //鍒涘缓浣滀笟
+            //                WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "鍏ュ簱", "鐡跺澂闈炲嵆浜цˉ绌烘", cntrCode, "鐡跺澂");
+            //            }
+            //        }
+            //    }
+            //    else
+            //    {
+            //        LogHelper.Info("鐡跺澂闈炲嵆浜х┖妗�鏈厤缃�);
+            //    }
+            //}
+            #endregion
+
+        }
+
+        internal static void PPFDFullInJC()
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("鐡跺澂缈绘枟鏈�) && a.S_UsingNow == "Y" && a.S_WorkState == "鎵ц涓�).First();
+            if(workInfo != null)
+            {
+                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃" && a.enable == 1).FirstOrDefault();
+                if(areaInfo != null)
+                {
+                    //濡傛灉搴撳尯鏄┖鐨勶紝骞朵笖娌℃湁鏈夐攣鐨勫氨琛ュ厖绌烘墭
+                    var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == 0 && a.S_LOCK_STATE == "鏃�).First();
+                    if (locInfo != null)
+                    {
+                        //寮�杞繍
+                        Location startLoca = TaskProcess.BCPInOrOut(db, false, "鐡跺澂鍗充骇婊℃缂撳瓨", workInfo.S_ItemCode);
+                        if (startLoca != null)
+                        {
+                            //鍒涘缓浣滀笟
+                            string cntrCode = getCntrCode(db, startLoca);
+                            WMSHelper.CreateOpTask(startLoca.S_CODE, locInfo.S_CODE, "鍑哄簱", "鐡跺澂鍗充骇琛ユ弧妗�, cntrCode, "");
+                        }
+                    }
+                }
+
+                areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇绌烘" && a.enable == 1).FirstOrDefault();
+                if (areaInfo != null)
+                {
+                    var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == 0 && a.S_LOCK_STATE == "鏃�).ToList();
+                    if (locInfo.Count == 2)
+                    {
+                        //寮�杞繍
+                        Location startLoca = TaskProcess.BCPInOrOut(db, false, "鐡跺澂鍗充骇婊℃缂撳瓨", "");
+                        if (startLoca != null)
+                        {
+                            //鍒涘缓浣滀笟
+                            string cntrCode = getCntrCode(db, startLoca);
+                            WMSHelper.CreateOpTask(startLoca.S_CODE, locInfo[0].S_CODE, "鍑哄簱", "鐡跺澂鍗充骇琛ョ┖妗�, cntrCode, "");
+                        }
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 鐡剁洊灏忓寘瑁呯洊杞繍
+        /// </summary>
+        /// <exception cref="NotImplementedException"></exception>
+        internal static void PGXBZZY()
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            Location endLoca = null;
+            var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("鐡剁洊") && a.S_ITEM_TYPE == "灏忓寘瑁呯洊" && a.S_WorkState == "鎵ц涓�).ToList();
+            if(workInfo.Count > 0)
+            {
+                foreach(var it in workInfo)
+                {
+                    LogHelper.Info($"鐡剁洊灏忓寘瑁呯洊杞繍锛�鏌ヨ浜х嚎鍙凤細{it.S_PLineNo},鐗╂枡缂栫爜锛歿it.S_ItemCode}");
+                    //鏌ヨ缁堢偣璐т綅
+                    string endAreaName = it.S_PLineNo.Split('-')[1].Substring(0, 1) + "鍙风摱鐩栫炕鏂楁満灏忓寘瑁�;
+                    var areaInfo = Settings.areaInfos.Where(b => b.areaName == endAreaName && b.enable == 1).FirstOrDefault();
+                    if(areaInfo != null)
+                    {
+                        var taskInfo = db.Queryable<WCSTask>().Where(a => a.S_END_AREA == areaInfo.areaCode && a.S_B_STATE != "瀹屾垚" && a.S_B_STATE != "鍙栨秷").First();
+                        if(taskInfo != null)
+                        {
+                            //鎺у埗涓�釜搴撳尯鍙兘涓�涓�潯浠诲姟
+                            return;
+                        }
+
+                        var locInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_CURRENT_NUM == 0).OrderBy(b => b.N_ROW).OrderBy(b => b.N_COL).Take(1).PartitionBy(b => b.N_ROW).ToList();
+                        if(locInfo.Count > 0)
+                        {
+                            foreach(var endloc in locInfo)
+                            {
+                                var rowInfo = db.Queryable<RowLock>().Where(a => a.S_AREA_CODE == endloc.S_AREA_CODE && a.S_ROW == endloc.S_ROW).First();
+                                LogHelper.Info($"鐡剁洊灏忓寘瑁呯洊杞繍锛氭煡璇㈤攣淇℃伅锛岃揣浣嶉攣锛歿endloc.S_LOCK_STATE},鎺掗攣锛歿JsonConvert.SerializeObject(rowInfo)}");
+                                if(rowInfo != null && rowInfo.S_LOCK_STATE == "鏃� && endloc.S_LOCK_STATE == "鏃�)
+                                {
+                                    endLoca = endloc;
+                                    break;
+                                }
+
+                            }
+                        }
+                    }
+                    else
+                    {
+                        LogHelper.Info($"{endAreaName} 鏈厤缃�);
+                    }
+
+                    //鏌ヨ璧风偣璐т綅
+                    LogHelper.Info($"鐡剁洊灏忓寘瑁呯洊杞繍锛氳幏鍙栧埌缁堢偣璐т綅淇℃伅锛歿JsonConvert.SerializeObject(endLoca)}");
+                    if (endLoca != null)
+                    {
+                        Location startLoca = TaskProcess.BCPInOrOut(db,true,"鐡剁洊搴撳尯",it.S_ItemCode + it.S_ITEM_TYPE);
+                        if (startLoca != null)
+                        {
+                            string cntrCode = getCntrCode(db, startLoca);
+                            WMSHelper.CreateOpTask(startLoca.S_CODE, endLoca.S_CODE, "鍑哄簱", "鐡剁洊闈炲嵆浜цˉ婊℃灏忓寘瑁�, cntrCode, "");
+                        }
+                    }
+                }
             }
         }
     }

--
Gitblit v1.9.1