From 8953f14db850deaf66782197a5d2bff35fe41e1a Mon Sep 17 00:00:00 2001
From: pulg <plg@Haninfo>
Date: 星期三, 02 七月 2025 18:02:09 +0800
Subject: [PATCH] Merge branch 'master' of http://121.37.118.194:8000/r/WMSPrjInstance/HH-0014_NongFu_QingXi

---
 HH.WCS.QingXiNongfu/core/Monitor.cs |  230 +++++++++++++++++++++++++++++++++------------------------
 1 files changed, 133 insertions(+), 97 deletions(-)

diff --git a/HH.WCS.QingXiNongfu/core/Monitor.cs b/HH.WCS.QingXiNongfu/core/Monitor.cs
index c825c89..3b7bdac 100644
--- a/HH.WCS.QingXiNongfu/core/Monitor.cs
+++ b/HH.WCS.QingXiNongfu/core/Monitor.cs
@@ -430,13 +430,17 @@
                 var orders = WCSHelper.GetWorkOrder2();
                 var thisOrder = orders.Find(x => x.SQL_WorkNo == WorkNo);
                 LogHelper.Info("绉诲簱瑙i攣 --褰撳墠宸ュ崟 sid:" + thisOrder?.S_ID);
-                if (thisOrder != null)
-                {
-                    var other = orders.Find(x => x.SQL_WorkNo != WorkNo && x.start_area == thisOrder.start_area && x.start_row == thisOrder.start_row);
-                    LogHelper.Info($"绉诲簱瑙i攣 --鍏朵粬宸ュ崟 x.start_area == {thisOrder.start_area} start_row == {thisOrder.start_row} SID:" + other?.S_ID);
-                    if (other != null)
-                        j瑙i攣璧风偣搴撳尯鎺�= false;
-                }
+                var allarea_rows = orders.FindAll(x => x.S_ID != thisOrder.S_ID && x.start_area == thisOrder.start_area && x.start_row == thisOrder.start_row);
+                LogHelper.Info("绉诲簱瑙i攣 --褰撳墠宸ュ崟 鐨勫悓搴撳尯鎺�鍏朵粬宸ュ崟:" + JsonConvert.SerializeObject(allarea_rows));
+                if (allarea_rows.Any())
+                    j瑙i攣璧风偣搴撳尯鎺�= false;
+                //if (thisOrder != null)
+                //{
+                //    var other = orders.Find(x => x.SQL_WorkNo != WorkNo && x.start_area == thisOrder.start_area && x.start_row == thisOrder.start_row);
+                //    LogHelper.Info($"绉诲簱瑙i攣 --鍏朵粬宸ュ崟 x.start_area == {thisOrder.start_area} start_row == {thisOrder.start_row} SID:" + other?.S_ID);
+                //    if (other != null)
+                //        j瑙i攣璧风偣搴撳尯鎺�= false;
+                //}
             }
             //if (sign == 1)
             //{
@@ -1135,6 +1139,17 @@
                                                 continue;
                                             }
                                         }
+                                        if (CDlist.Contains(EdnRarea))
+                                        {
+                                            var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && x.S_LOCK_STATE == "鍏ュ簱閿�);
+                                            //var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "鍏ュ簱閿�));
+                                            if (ls.Count() > 2)
+                                            {
+                                                LogHelper.Info($"{EdnRarea}浠诲姟鏁�绠″埗3");
+                                                continue;
+                                            }
+                                        }
+
                                         //else if (CDlist.Contains(EdnRarea))
                                         //{
                                         //    var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "鍏ュ簱閿�)).ToList();
@@ -1230,12 +1245,19 @@
                                                         ca.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && t.S_ITEM_CODE == cir1.S_ITEM_CODE && t.S_ITEM_NAME == cir1.S_ITEM_NAME && t.S_CJ_NAME == cir1.S_CJ_NAME && o.S_AREA_CODE == EdnRarea);
                                                         var lstCanOutL = dbll.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(ca.ToExpression()).ToList();
                                                         LogHelper.Info($"缁堢偣鏈夌浉鍚岀殑鐗╂枡鐨勮揣浣嶆湁{lstCanOutL.Count()}");
+
+                                                        var ca1 = Expressionable.Create<Location, LocCntrRel, CntrItemRel>();
+                                                        ca1.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && t.S_ITEM_CODE == cir1.S_ITEM_CODE && t.S_ITEM_NAME == cir1.S_ITEM_NAME && t.S_CJ_NAME == cir1.S_CJ_NAME && o.S_AREA_CODE == "YWLRGDD" && p.S_TYPE == EdnRarea);
+                                                        var lstCanOutLSta = dbll.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(ca1.ToExpression()).ToList();
                                                         if (lstCanOutL.Count() > 0)
                                                         {
                                                             var EndMum = dbll.Queryable<Location>().Where(l => l.S_AREA_CODE == EdnRarea && l.N_CURRENT_NUM == 0 && l.S_LOCK_STATE == "鏃� && lstCanOutL.Select(e => e.N_ROW).ToList().Contains(l.N_ROW)).ToList();
                                                             if (EndMum.Count() > 0)
                                                             {
-                                                                arloclist = arloclist.FindAll(x => lstCanOutL.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList();
+                                                                if (lstCanOutL.Count() <= EndMum.Count())
+                                                                {
+                                                                    arloclist = arloclist.FindAll(x => lstCanOutL.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList();
+                                                                }
                                                             }
                                                         }
                                                     }
@@ -1448,7 +1470,7 @@
                 try
                 {
                     // var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "鏃犺弻鏍囩鍑哄簱" && x.WorkType == 6 && x.SQL_State == "鎵ц涓�).FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => x.TagOverTime).ToList();
-                    var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "鏃犺弻鏍囩鍑哄簱" && x.WorkType == 6 && x.SQL_State == "鎵ц涓�).FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => x.TagOverTime).ToList();
+                    var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "鏃犺弻鏍囩鍑哄簱" && x.WorkType == 6 && x.SQL_State == "鎵ц涓�).FindAll(x => x.OutNum > 0).OrderBy(x => x.TagOverTime).ToList();
                     if (!yuworders.Any())
                     {
                         YwlBQ_CreInwork(locsFirst, WJ_BQ.RK_BQDDQ, WJ_BQ.RK_BBHJQ);
@@ -1487,7 +1509,6 @@
                     if (tklist.Count() > 0)
                     {
                         var tk = tklist.FirstOrDefault();
-
                         var loc = LocationHelper.GetLoc(plc.location[0]);
                         if (loc.N_CURRENT_NUM > 0 && loc.S_LOCK_STATE == "鏃�)
                         {
@@ -2128,7 +2149,6 @@
             }
         }
 
-
         /// <summary>
         /// 鍏ュ簱閫�簱銆�鐭ラ亾 闆跺ご婊℃墭銆傛甯稿尮閰嶃�
         /// </summary>
@@ -2139,15 +2159,14 @@
         private static void YwlPETK_CreInwork(List<locCntItem> klocsFirst, string v, string v2, int v1 = 3)
         {
             bool ord = v2.Contains("鎻愭墸");
-            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())
+            foreach (var ptR in klocsFirst.GroupBy(x => x.N_ROW).OrderBy(x => x.Key))
             {
                 Location EndBit = null;
-                var rsfull = ptR.OrderBy(X => X.N_COL).ToList().FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault();//璧风偣
+                var ptrlist = ptR.OrderBy(X => X.N_COL).ToList();
+                var rsfull = ptrlist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault();
                 if (rsfull != null)
                 {
+                    var cntrlist = ptrlist.FindAll(x => x.S_LOC_CODE == rsfull.S_LOC_CODE).Select(x => x.S_CNTR_CODE);
                     var rklist = LocationHelper.GetRowLock(v);
                     var inlock = rklist.Find(x => x.S_AREA_CODE == v && x.S_LOCK_SRC == (rsfull.S_NOTE + rsfull.HalfOrFull) && x.S_LOCK_STATE.Contains("鍏ュ簱閿�));
                     var NormalList = LocationHelper.GetAreaNormalLocList(v);
@@ -2159,82 +2178,54 @@
                         {
                             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));
+                            EndBit = srloclist.Find(x => x.S_LOCK_STATE == "鏃� && (x.N_CURRENT_NUM + cntrlist.Count()) <= Math.Min(x.N_CAPACITY, v1) && x.S_LOCK_STATE != "鎶ュ簾" && x.N_COL >= (lastfull?.N_COL ?? 0));
                             if (EndBit != null)
                                 break;
                         }
                     }
                     else
                     {
-                        var hasNum = NormalList.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct().ToList();
+                        var hasNum = NormalList.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct();
                         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)
                     {
-                        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);
+                        var res = TaskProcess.CreateTransport("", rsfull.S_LOC_CODE.Trim(), EndBit.S_LOC_CODE, v2 + "-鍏ュ簱", cntrlist.ToList(), rsfull.N_CURRENT_NUM + 1 - cntrlist.Count(), 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);
                 }
             }
         }
+
 
         private static void YwlBQ_CreSXOutOrder(Settings.deviceInfo plc, List<YWLWorkOrder> yuworders)
         {
@@ -2301,12 +2292,12 @@
             if (order != null)
             {
                 var Porder = WCSHelper.GetWorkOrder(order.SQL_LinkLineNO);
-                if (Porder == null)
-                {
-                    LogHelper.CErrorLog("SX鏍囩鍑哄簱锛� + (order.SQL_LinkLineNO) + "娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟");
-                    yuworders.Remove(order);
-                    goto retuse;
-                }
+                //if (Porder == null)
+                //{
+                //    LogHelper.CErrorLog("SX鏍囩鍑哄簱锛� + (order.SQL_LinkLineNO) + "娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟");
+                //    yuworders.Remove(order);
+                //    goto retuse;
+                //}
                 var oto = new List<string>();
                 //if (!string.IsNullOrEmpty(order.TagOver))
                 //    oto = order.TagOver.Split(',').ToList();
@@ -2795,12 +2786,12 @@
             if (order != null)
             {
                 var Porder = WCSHelper.GetWorkOrder(order.SQL_LinkLineNO);
-                if (Porder == null)
-                {
-                    LogHelper.CErrorLog("鏃犺弻鏍囩鍑哄簱锛� + (order.SQL_LinkLineNO) + "娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟");
-                    yuworders.Remove(order);
-                    goto retuse;
-                }
+                //if (Porder == null)
+                //{
+                //    LogHelper.CErrorLog("鏃犺弻鏍囩鍑哄簱锛� + (order.SQL_LinkLineNO) + "娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟");
+                //    yuworders.Remove(order);
+                //    goto retuse;
+                //}
 
                 var oto = new List<string>();
                 //if (!string.IsNullOrEmpty(order.TagOver))
@@ -4354,6 +4345,8 @@
         /// </summary>
         internal static void YWL_ZX_Turn()
         {
+            var dbcd = new SqlHelper<object>().GetInstance();
+
             foreach (var ODs in LocationHelper.GetList<YWLZXtake>(X => X.S_ZX_STATE == "鎵ц").GroupBy(x => x.S_START_AREA))
             {
                 var locS = LocationHelper.GetAreaNormalLocList(ODs.Key);
@@ -4389,6 +4382,26 @@
                         }
                         else
                         {
+                            if (od.N_END_ROW > 0)
+                            {
+                                var EndRow = dbcd.Queryable<Location>().Where(l => l.S_AREA_CODE == od.S_END_AREA && l.N_ROW == od.N_END_ROW && l.N_CURRENT_NUM == 0).ToList();
+                                if (EndRow.Count() == 0)
+                                {
+                                    //缃负瀹屾垚銆�
+                                    od.S_ZX_STATE = "瀹屾垚";
+                                    WCSHelper.Do(db => db.Updateable(od).UpdateColumns(x => new { x.S_ZX_STATE }).ExecuteCommand());
+                                }
+                            }
+                            else
+                            {
+                                var EndRow = dbcd.Queryable<Location>().Where(l => l.S_AREA_CODE == od.S_END_AREA && l.N_CURRENT_NUM == 0).ToList();
+                                if (EndRow.Count() == 0)
+                                {
+                                    //缃负瀹屾垚銆�
+                                    od.S_ZX_STATE = "瀹屾垚";
+                                    WCSHelper.Do(db => db.Updateable(od).UpdateColumns(x => new { x.S_ZX_STATE }).ExecuteCommand());
+                                }
+                            }
                             var lastful = rows.FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault();
                             if (lastful != null)
                             {
@@ -4419,27 +4432,49 @@
                                 string nextarea = !string.IsNullOrEmpty(od.S_ZZ_AREA) ? od.S_ZZ_AREA : od.S_END_AREA;
                                 var zzlocs = LocationHelper.GetAreaNormalLocList(nextarea);
                                 Location Endbit = null;
-                                foreach (var zzrs in zzlocs.GroupBy(x => x.N_ROW).OrderBy(x => x.Key))
+                                if (od.N_END_ROW == 0 && zzlocs.Any())
                                 {
-                                    var zzrloclist = zzrs.ToList();
-                                    var _cl2 = zzrloclist.FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault();
-                                    if (_cl2 != null)
+                                    foreach (var zzrs in zzlocs.GroupBy(x => x.N_ROW).OrderBy(x => x.Key))
                                     {
-                                        var rel = LocationHelper.GetLocCntrRel(_cl2.S_LOC_CODE);
-                                        var cntrrel = ContainerHelper.GetCntrItemRel(rel.FirstOrDefault()?.S_CNTR_CODE).FirstOrDefault();
-                                        if (cntrrel == null)
-                                            continue;
-                                        if (cntrrel.S_ITEM_CODE == cir1.S_ITEM_CODE && cntrrel.S_ITEM_NAME == cir1.S_ITEM_NAME && cntrrel.S_CJ_NAME == cir1.S_CJ_NAME)
+                                        var zzrloclist = zzrs.ToList();
+                                        var _cl2 = zzrloclist.FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault();
+                                        if (_cl2 != null)
                                         {
+                                            var rel = LocationHelper.GetLocCntrRel(_cl2.S_LOC_CODE);
+                                            var cntrrel = ContainerHelper.GetCntrItemRel(rel.FirstOrDefault()?.S_CNTR_CODE).FirstOrDefault();
+                                            if (cntrrel == null)
+                                                continue;
+                                            if (cntrrel.S_ITEM_CODE == cir1.S_ITEM_CODE && cntrrel.S_ITEM_NAME == cir1.S_ITEM_NAME && cntrrel.S_CJ_NAME == cir1.S_CJ_NAME)
+                                            {
+                                                Endbit = zzrloclist.Find(x => x.N_COL > (_cl2?.N_COL ?? 0));
+                                            }
+                                        }
+                                        else
                                             Endbit = zzrloclist.Find(x => x.N_COL > (_cl2?.N_COL ?? 0));
+                                        if (Endbit != null)
+                                        {
+                                            LogHelper.Info($"鍏ヤ腑杞尯{nextarea}浣跨敤{Endbit.S_LOC_CODE}");
+                                            break;
                                         }
                                     }
-                                    else
-                                        Endbit = zzrloclist.Find(x => x.N_COL > (_cl2?.N_COL ?? 0));
-                                    if (Endbit != null)
+                                }
+                                else
+                                {
+                                    if (zzlocs.Any() && od.N_END_ROW > 0)//鐢ㄤ簬搴撳唴 姣斿A搴撴煇鎺掔Щ鍒癆搴撶殑鍙︿竴鎺�                                     {
-                                        LogHelper.Info($"鍏ヤ腑杞尯{nextarea}浣跨敤{Endbit.S_LOC_CODE}");
-                                        break;
+                                        zzlocs = zzlocs.FindAll(e => e.N_ROW == od.N_END_ROW);
+                                        //
+                                        var EndMt = dbcd.Queryable<Location>().Where(l => l.S_AREA_CODE == od.S_END_AREA && l.N_ROW == od.N_END_ROW && l.N_CURRENT_NUM > 0).ToList();
+                                        if (EndMt.Any())
+                                        {
+                                            var ggh = EndMt.OrderByDescending(e => e.N_COL).FirstOrDefault();
+                                            zzlocs = zzlocs.FindAll(e => e.N_COL > ggh.N_COL).ToList();
+                                        }
+                                        if (zzlocs.Any())
+                                        {
+                                            Endbit = zzlocs.OrderBy(e => e.N_COL).FirstOrDefault();
+                                        }
+
                                     }
                                 }
                                 LogHelper.Info($"YWL_ZX_Turn from{od.S_START_AREA} mid:{od.S_ZZ_AREA} to{od.S_END_AREA} 鎵惧埌绉诲簱缁堢偣銆媨Endbit?.S_LOC_CODE}");
@@ -4454,6 +4489,7 @@
                             }
                         }
                     }
+
                 }
             }
         }

--
Gitblit v1.9.1