From c7cc6a7851eb8c3caa697d3a8382a1ff09db2586 Mon Sep 17 00:00:00 2001
From: pulg <plg@Haninfo>
Date: 星期四, 26 六月 2025 18:55:08 +0800
Subject: [PATCH] 1

---
 HH.WCS.QingXiNongfu/core/Monitor.cs |  101 ++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 73 insertions(+), 28 deletions(-)

diff --git a/HH.WCS.QingXiNongfu/core/Monitor.cs b/HH.WCS.QingXiNongfu/core/Monitor.cs
index 84b0878..314be2c 100644
--- a/HH.WCS.QingXiNongfu/core/Monitor.cs
+++ b/HH.WCS.QingXiNongfu/core/Monitor.cs
@@ -1367,12 +1367,20 @@
                                            S_NOTE = cir.S_ITEM_CODE.Trim() + "&" + cir.S_ITEM_NAME.Trim(),
                                            S_ITEM_CODE = cir.S_ITEM_CODE,
                                            S_ITEM_NAME = cir.S_ITEM_NAME,
+                                           S_BATCH_NO = cir.S_BATCH_NO,
                                            S_CJ_NAME = cir.S_CJ_NAME,
                                            S_CNTR_CODE = cir.S_CNTR_CODE
                                        })
                                        .ToList();
             /// 浜哄伐鍫嗗彔鍖虹焊绠�鍜�鏍囩 鏄寜鏍囪瘑+鐗╂枡绛涢�杩涜鍏ュ簱杞繍銆�
             /// 鐗╂枡鍚嶇О鍖呭惈瀵瑰簲绉嶇被杩涜鍏ュ簱銆�+            foreach (var item in locsFirstA)
+            {
+                if (!string.IsNullOrEmpty(item.S_BATCH_NO))
+                {
+                    item.S_NOTE = item.S_NOTE + "&" + item.S_BATCH_NO;
+                }
+            }
             var locsFirst = locsFirstA.FindAll(x => x.S_NOTE.Contains("鏍囩-") && x.S_TYPE == WJ_BQ.RK_BBHJQ);
             var SlocsFirst = locsFirstA.FindAll(x => x.S_NOTE.Contains("鏍囩-") && x.S_TYPE == SX_BQ.RK_BBHJQ);
             var TKlocsFirst = locsFirstA.FindAll(x => x.S_NOTE.Contains("鎻愭墸-"));
@@ -1514,6 +1522,7 @@
                                 string v = "YWLTKMKQ";
                                 var rklist = LocationHelper.GetRowLock(v);
                                 int hof = (s_type == .5 ? 1 : (s_type == .75 ? 2 : 3));
+
                                 var inlock = rklist.Find(x => x.S_LOCK_SRC == (cir.S_ITEM_CODE.Trim() + "&" + cir.S_ITEM_NAME.Trim() + hof) && x.S_LOCK_STATE.Contains("鍏ュ簱閿�));
                                 Location EndBit = null;
                                 var NormalList = LocationHelper.GetAreaNormalLocList(v);
@@ -2076,7 +2085,10 @@
         private static void YwlPETK_CreInwork(List<locCntItem> klocsFirst, string v, string v2, int v1 = 3)
         {
             bool ord = v2.Contains("鎻愭墸");
-            foreach (var ptR in klocsFirst.GroupBy(x => x.N_ROW).OrderBy(x => x.Key))
+            var chi = new SqlHelper<object>().GetInstance();
+            var newDb = chi.CopyNew();
+            var yx = klocsFirst.GroupBy(x => x.N_ROW).OrderBy(x => x.Key).ToList();
+            foreach (var ptR in klocsFirst.GroupBy(x => x.N_ROW).OrderBy(x => x.Key).ToList())
             {
                 Location EndBit = null;
                 var rsfull = ptR.OrderBy(X => X.N_COL).ToList().FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault();
@@ -2100,11 +2112,40 @@
                     }
                     else
                     {
-                        var hasNum = NormalList.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct();
+                        var hasNum = NormalList.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct().ToList();
                         var EptRowlist = NormalList.FindAll(x => !hasNum.Contains(x.N_ROW));
                         if (EptRowlist.Any())
                         {
                             EndBit = EptRowlist.GroupBy(x => x.N_ROW).OrderBy(x => x.Key * (ord ? 1 : -1)).FirstOrDefault().ToList().OrderBy(x => x.N_COL).FirstOrDefault();
+                        }
+                        else
+                        {
+                            if (hasNum.Any())
+                            {
+                                //鏈夌浉鍚岀墿鏂�鐩稿悓鏍囩鐨勭户缁叆
+                                List<Location> lstCanOutL = new List<Location>();
+                                if (!string.IsNullOrEmpty(rsfull.S_BATCH_NO))
+                                {
+                                    lstCanOutL = newDb.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where((o, p, t) => o.S_AREA_CODE == v && o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && hasNum.Contains(o.N_ROW) && t.S_ITEM_CODE == rsfull.S_ITEM_CODE && t.S_ITEM_NAME == rsfull.S_ITEM_NAME && t.S_BATCH_NO == rsfull.S_BATCH_NO).ToList();
+
+                                }
+                                else
+                                {
+                                    lstCanOutL = newDb.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where((o, p, t) => o.S_AREA_CODE == v && o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && hasNum.Contains(o.N_ROW) && t.S_ITEM_CODE == rsfull.S_ITEM_CODE && t.S_ITEM_NAME == rsfull.S_ITEM_NAME && string.IsNullOrEmpty(t.S_BATCH_NO)).ToList();
+                                }
+                                if (lstCanOutL.Any())
+                                {
+                                    var loclist1 = NormalList.FindAll(x => lstCanOutL.Select(f => f.N_ROW).Distinct().ToList().Contains(x.N_ROW));
+                                    foreach (var rs in loclist1.GroupBy(x => x.N_ROW).OrderBy(x => x.Key * (ord ? 1 : -1)))
+                                    {
+                                        var srloclist = rs.OrderBy(x => x.N_COL).ToList();
+                                        var lastfull = srloclist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault();
+                                        EndBit = srloclist.Find(x => x.S_LOCK_STATE == "鏃� && x.N_CURRENT_NUM < Math.Min(x.N_CAPACITY, v1) && x.S_LOCK_STATE != "鎶ュ簾" && x.N_COL >= (lastfull?.N_COL ?? 0));
+                                        if (EndBit != null)
+                                            break;
+                                    }
+                                }
+                            }
                         }
                     }
                     if (EndBit != null)
@@ -2112,29 +2153,29 @@
                         var res = TaskProcess.CreateTransport("", rsfull.S_LOC_CODE.Trim(), EndBit.S_LOC_CODE, v2 + "-鍏ュ簱", new List<string> { rsfull.S_CNTR_CODE }, rsfull.N_CURRENT_NUM, EndBit.N_CURRENT_NUM + 1, 1, 62);
                         LogHelper.CSucessLog($"from {rsfull.S_LOC_CODE} to {EndBit.S_LOC_CODE} {(v2 + "-鍏ュ簱")} 锛屽垱寤簕res} ");
 
-                        if (res && inlock == null)
-                        {
-                            var r = new RowLock { S_LOCK_SRC = rsfull.S_NOTE + rsfull.HalfOrFull, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍏ュ簱閿�, S_AREA_CODE = EndBit.S_AREA_CODE, N_ROW = EndBit.N_ROW };
-                            var db = new SqlHelper<object>().GetInstance();
-                            db.Insertable(r).ExecuteCommand();
-                            //else
-                            //{
-                            //    if (inlock.N_ROW != EndBit.N_ROW)
-                            //    {
-                            //        db.Deleteable(inlock).ExecuteCommand();
-                            //        var row = db.Queryable<RowLock>().Where(x => x.S_AREA_CODE == r.S_AREA_CODE && r.N_ROW == x.N_ROW).First();
-                            //        if (row != null)
-                            //        {
-                            //            if (row.S_LOCK_SRC != r.S_LOCK_SRC)
-                            //            {
-                            //                db.Deleteable(row).ExecuteCommand();
-                            //                db.Insertable(r).ExecuteCommand();
-                            //            }
-                            //        }
-                            //        else db.Insertable(r).ExecuteCommand();
-                            //    }
-                            //}
-                        }
+                        //if (res && inlock == null)
+                        //{
+                        //    var r = new RowLock { S_LOCK_SRC = rsfull.S_NOTE + rsfull.HalfOrFull, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍏ュ簱閿�, S_AREA_CODE = EndBit.S_AREA_CODE, N_ROW = EndBit.N_ROW };
+                        //    var db = new SqlHelper<object>().GetInstance();
+                        //    db.Insertable(r).ExecuteCommand();
+                        //    //else
+                        //    //{
+                        //    //    if (inlock.N_ROW != EndBit.N_ROW)
+                        //    //    {
+                        //    //        db.Deleteable(inlock).ExecuteCommand();
+                        //    //        var row = db.Queryable<RowLock>().Where(x => x.S_AREA_CODE == r.S_AREA_CODE && r.N_ROW == x.N_ROW).First();
+                        //    //        if (row != null)
+                        //    //        {
+                        //    //            if (row.S_LOCK_SRC != r.S_LOCK_SRC)
+                        //    //            {
+                        //    //                db.Deleteable(row).ExecuteCommand();
+                        //    //                db.Insertable(r).ExecuteCommand();
+                        //    //            }
+                        //    //        }
+                        //    //        else db.Insertable(r).ExecuteCommand();
+                        //    //    }
+                        //    //}
+                        //}
                     }
                     Thread.Sleep(1000);
                 }
@@ -3670,7 +3711,7 @@
                             //鏌ヨ鍙敤璐т綅鏈夊灏�                             List<string> Ky = new List<string>() { "鏃�, "鍑哄簱閿�, "鍏ュ簱閿� };
                             var loclistK = loclist.FindAll(x => Ky.Contains(x.S_LOCK_STATE)).Count();
-                            var count = loclist.FindAll(x => x.N_CURRENT_NUM > 0 && x.S_LOCK_STATE == "鏃�).Sum(x => x.N_CURRENT_NUM);
+                            var count = loclist.FindAll(x => x.N_CURRENT_NUM > 0 && x.S_LOCK_STATE == "鏃�).Count();
                             LogHelper.Info("AutoRun13TSJ" + $"od.S_ROW 鍑哄簱浣欓噺鍒ゆ柇鏄惁闇�杞繍銆�{count}< 鎬诲叡鑳界敤鐨勮揣浣嶆暟{loclistK} -7");
                             if (count <= loclistK - 7)
                             {
@@ -3696,6 +3737,10 @@
 
                                     //ca.And((o, p, t) => o.S_AREA_CODE == area && o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && t.S_ITEM_CODE == od.SQL_ItemCode && t.S_ITEM_NAME == od.SQL_ItemName && t.S_CJ_NAME == od.S_CJ_NAME);
                                     var lstCanOutL = newDb.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where((o, p, t) => o.S_AREA_CODE == area && o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && t.S_ITEM_CODE == od.SQL_ItemCode && t.S_ITEM_NAME == od.SQL_ItemName && t.S_CJ_NAME == od.S_CJ_NAME).ToList();
+                                    if (!lstCanOutL.Any())
+                                    {
+                                        lstCanOutL = newDb.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where((o, p, t) => o.S_AREA_CODE == area && o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && t.S_ITEM_CODE == od.SQL_ItemCode && t.S_ITEM_NAME == od.SQL_ItemName).ToList();
+                                    }
                                     List<string> CRk = new List<string>() { "鍑哄簱閿�, "鍏ュ簱閿� };
                                     var EndMum = newDb.Queryable<Location>().Where(l => l.S_AREA_CODE == area && CRk.Contains(l.S_LOCK_STATE)).ToList();
                                     var RowLock = EndMum.GroupBy(e => e.N_ROW).Select(f => f.First()).ToList();
@@ -3851,7 +3896,7 @@
                             }
                             if (dsi.TryGetValue(area, out var dictitems1))
                             {
-                                foreach (var d in dictitems1.FindAll(x => x.ItemCode == od.SQL_ItemCode && x.ItemName == od.SQL_ItemName && x.S_CJ_NAME == od.S_CJ_NAME))
+                                foreach (var d in dictitems1.FindAll(x => x.ItemCode == od.SQL_ItemCode && x.ItemName == od.SQL_ItemName))
                                 {
                                     if (Lart == null)
                                         Lart = d;
@@ -3891,7 +3936,7 @@
                                         if (_clcntitem != null)
                                         {
                                             LogHelper.Info("AutoRun13TSJ" + "鐩镐簰鏄惁鍖归厤 _clcntitem S_ITEM_CODE:" + _clcntitem.S_ITEM_CODE + " od" + od.SQL_ItemCode + " _clcntitem S_ITEM_NAME:" + _clcntitem.S_ITEM_NAME + "od: " + od.SQL_ItemName + " od.S_CJ_NAME:" + od.S_CJ_NAME + "缁撴灉:" + (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName && _clcntitem.S_CJ_NAME == od.S_CJ_NAME));
-                                            if (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName && _clcntitem.S_CJ_NAME == od.S_CJ_NAME)
+                                            if (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName)
                                             {
                                                 StartBit = rl;
                                                 break;

--
Gitblit v1.9.1