From 28cec6f80f1cf5c85ebafd2712b73761d92c2079 Mon Sep 17 00:00:00 2001
From: pulg <plg@Haninfo>
Date: 星期四, 24 七月 2025 17:38:53 +0800
Subject: [PATCH] 1

---
 HH.WCS.QingXiNongfu/core/Monitor.cs |  497 +++++++++++++++++++++++++++++++-----------------------
 1 files changed, 284 insertions(+), 213 deletions(-)

diff --git a/HH.WCS.QingXiNongfu/core/Monitor.cs b/HH.WCS.QingXiNongfu/core/Monitor.cs
index 29f31af..76404af 100644
--- a/HH.WCS.QingXiNongfu/core/Monitor.cs
+++ b/HH.WCS.QingXiNongfu/core/Monitor.cs
@@ -1049,7 +1049,6 @@
             {
                 try
                 {
-
                     var lolist = LocationHelper.GetAreaNormalLocList(area);// LocationHelper.GetList<Location>(x => x.S_AREA_CODE == area && x.S_LOCK_STATE != "鎶ュ簾");
                     var lgrow = lolist.GroupBy(x => x.N_ROW).OrderBy(x => x.Key).ToList();
                     Dictionary<string, List<Location>> dsll = new Dictionary<string, List<Location>>();
@@ -1120,25 +1119,38 @@
                                             //鏌ヨ浠诲姟鏁�
                                             List<string> AreaLi = new List<string>() { "YWLBQWJ", "YWLWJJB" };
                                             var db = new SqlHelper<object>().GetInstance();
-                                            //var list = db.Queryable<Location>().Where(a => AreaLi.Contains(a.S_AREA_CODE) && a.S_LOCK_STATE == "鍏ュ簱閿�).ToList();
-                                            //if (list.Count() >= 3)
-                                            //{
-                                            //    LogHelper.Info($"CreateTransport-  CreateTask Error" + $"缁堢偣搴撳尯涓篩WLRGDD鎴栬�YWLWJJB 鍒欐渶澶氬彧鑳界敓鎴愪袱涓换鍔�);
-                                            //    continue;
-                                            //}
-                                        }
-                                        string Last = string.Join(",", ccr.Skip(1));
-
-                                        if (ABlist.Contains(EdnRarea))
-                                        {
-                                            var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "鍏ュ簱閿� || x.S_LOCK_STATE == "鍑哄簱閿�));
-                                            //var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "鍏ュ簱閿�));
-                                            if (ls.Count() > 1)
+                                            var list = db.Queryable<Location>().Where(a => AreaLi.Contains(a.S_AREA_CODE) && a.S_LOCK_STATE == "鍏ュ簱閿�).ToList();
+                                            if (list.Count() >= 2)
                                             {
-                                                LogHelper.Info($"{EdnRarea}浠诲姟鏁�绠″埗2");
+                                                LogHelper.Info($"CreateTransport-  CreateTask Error" + $"缁堢偣搴撳尯涓篩WLRGDD鎴栬�YWLWJJB 鍒欐渶澶氬彧鑳界敓鎴愪袱涓换鍔�);
                                                 continue;
                                             }
                                         }
+
+                                        if (EdnRarea == "YWLRGDD")
+                                        {
+                                            //鏌ヨ浠诲姟鏁�
+                                            List<string> AreaLi = new List<string>() { "YWLRGDD" };
+                                            var db = new SqlHelper<object>().GetInstance();
+                                            var list = db.Queryable<Location>().Where(a => AreaLi.Contains(a.S_AREA_CODE) && a.S_LOCK_STATE == "鍏ュ簱閿�).ToList();
+                                            if (list.Count() > 2)
+                                            {
+                                                LogHelper.Info($"CreateTransport-  CreateTask Error" + $"缁堢偣搴撳尯涓篩WLRGDD 鍒欐渶澶氬彧鑳界敓鎴愪笁涓换鍔�);
+                                                continue;
+                                            }
+                                        }
+                                        string Last = string.Join(",", ccr.Skip(1));
+
+                                        //if (ABlist.Contains(EdnRarea))
+                                        //{
+                                        //    var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "鍏ュ簱閿� || x.S_LOCK_STATE == "鍑哄簱閿�));
+                                        //    //var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "鍏ュ簱閿�));
+                                        //    if (ls.Count() > 1)
+                                        //    {
+                                        //        LogHelper.Info($"{EdnRarea}浠诲姟鏁�绠″埗2");
+                                        //        continue;
+                                        //    }
+                                        //}
                                         if (CDlist.Contains(EdnRarea))
                                         {
                                             var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && x.S_LOCK_STATE == "鍏ュ簱閿�);
@@ -1190,7 +1202,6 @@
                                             else InworkLock = false;
 
                                             Location endbit = null;
-                                            //foreach (var rss in arloclist.GroupBy(x => x.N_ROW).OrderByDescending(x => x.Count(y => y.N_CURRENT_NUM > 0)).ThenBy(xx => xx.Key))
                                             RowLock inlock = null;
                                             List<RowLock> inlockLis = new List<RowLock>();
                                             bool isCd = false;
@@ -1231,31 +1242,46 @@
                                                     }
                                                 }
                                             }
-                                            foreach (var rss in arloclist.GroupBy(x => x.N_ROW).OrderByDescending(x => x.Count(y => y.N_CURRENT_NUM > 0)).ThenBy(x => x.Key))
+                                            if (area == "YWLTKKTQ")
                                             {
-                                                rowlist = rss.OrderBy(x => x.N_COL).ToList();
-                                                //if (rowlist.FindAll((Location x) => x.S_LOCK_STATE.Trim() == "绌洪棿閿�).Count > 0) { continue; }
-                                                //if (rowlist.FindAll((Location x) => x.S_LOCK_STATE.Trim() != "鏃� && x.S_LOCK_STATE.Trim() != "鎶ュ簾").Count > 0)
-                                                //{
-                                                //    continue;
-                                                //}
-                                                var _cl2 = rowlist.FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault();
-                                                endbit = rowlist.Find(x => x.N_COL > (_cl2?.N_COL ?? 0));
-                                                if (endbit == null) continue;
-
-                                                if (_cl2 != null && (EdnRarea == "YWLYLTKQ" || EdnRarea == "YWLKTDDQ")) //閫�簱鍖鸿繘琛屽爢鍙�+                                                foreach (var rss in arloclist.GroupBy(x => x.N_ROW).OrderByDescending(x => x.Count(y => y.N_CURRENT_NUM > 0)).ThenByDescending(x => x.Key))
                                                 {
-                                                    Last = "";
-                                                    var rr_clrel = LocationHelper.GetLocCntrRel(_cl2.S_LOC_CODE);
-                                                    var s_clrel0 = rr_clrel.OrderByDescending(xx => xx.T_CREATE).FirstOrDefault();
-                                                    if (s_clrel0 != null && string.IsNullOrEmpty(s_clrel0.S_TYPE))
+                                                    rowlist = rss.OrderBy(x => x.N_COL).ToList();
+                                                    var _cl2 = rowlist.FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault();
+                                                    endbit = rowlist.Find(x => x.N_COL > (_cl2?.N_COL ?? 0));
+                                                    if (endbit == null) continue;
+
+                                                    if (_cl2 != null && (EdnRarea == "YWLYLTKQ" || EdnRarea == "YWLKTDDQ")) //閫�簱鍖鸿繘琛屽爢鍙�                                                     {
-                                                        var cntrrel = ContainerHelper.GetCntrItemRel(rr_clrel.FirstOrDefault()?.S_CNTR_CODE).FirstOrDefault();
+                                                        Last = "";
+                                                        var rr_clrel = LocationHelper.GetLocCntrRel(_cl2.S_LOC_CODE);
+                                                        var s_clrel0 = rr_clrel.OrderByDescending(xx => xx.T_CREATE).FirstOrDefault();
+                                                        if (s_clrel0 != null && string.IsNullOrEmpty(s_clrel0.S_TYPE))
+                                                        {
+                                                            var cntrrel = ContainerHelper.GetCntrItemRel(rr_clrel.FirstOrDefault()?.S_CNTR_CODE).FirstOrDefault();
+                                                            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)
+                                                            {
+                                                                if (_cl2.N_CURRENT_NUM < _cl2.N_CAPACITY)
+                                                                    endbit = _cl2;
+                                                                else LogHelper.Info($"{EdnRarea}閫�簱銆嬩娇鐢▄endbit.S_LOC_CODE}");
+                                                            }
+                                                            else
+                                                            {
+                                                                endbit = null;
+                                                                continue;
+                                                            }
+                                                        }
+                                                    }
+
+                                                    else 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)
                                                         {
-                                                            if (_cl2.N_CURRENT_NUM < _cl2.N_CAPACITY)
-                                                                endbit = _cl2;
-                                                            else LogHelper.Info($"{EdnRarea}閫�簱銆嬩娇鐢▄endbit.S_LOC_CODE}");
+                                                            LogHelper.Info($"鍏ュ簱搴撱�浣跨敤{endbit.S_LOC_CODE}");
                                                         }
                                                         else
                                                         {
@@ -1263,55 +1289,65 @@
                                                             continue;
                                                         }
                                                     }
+                                                    if (endbit != null) break;
                                                 }
-
-                                                else 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)
-                                                    {
-                                                        LogHelper.Info($"鍏ュ簱搴撱�浣跨敤{endbit.S_LOC_CODE}");
-                                                    }
-                                                    else
-                                                    {
-                                                        endbit = null;
-                                                        continue;
-                                                    }
-                                                    //}
-                                                    //else
-                                                    //{
-                                                    //    endbit = null;
-                                                    //    continue;
-                                                    //}
-                                                }
-                                                if (endbit != null) break;
                                             }
+                                            else
+                                            {
+                                                foreach (var rss in arloclist.GroupBy(x => x.N_ROW).OrderByDescending(x => x.Count(y => y.N_CURRENT_NUM > 0)).ThenBy(x => x.Key))
+                                                {
+                                                    rowlist = rss.OrderBy(x => x.N_COL).ToList();
+                                                    var _cl2 = rowlist.FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault();
+                                                    endbit = rowlist.Find(x => x.N_COL > (_cl2?.N_COL ?? 0));
+                                                    if (endbit == null) continue;
+
+                                                    if (_cl2 != null && (EdnRarea == "YWLYLTKQ" || EdnRarea == "YWLKTDDQ")) //閫�簱鍖鸿繘琛屽爢鍙�+                                                    {
+                                                        Last = "";
+                                                        var rr_clrel = LocationHelper.GetLocCntrRel(_cl2.S_LOC_CODE);
+                                                        var s_clrel0 = rr_clrel.OrderByDescending(xx => xx.T_CREATE).FirstOrDefault();
+                                                        if (s_clrel0 != null && string.IsNullOrEmpty(s_clrel0.S_TYPE))
+                                                        {
+                                                            var cntrrel = ContainerHelper.GetCntrItemRel(rr_clrel.FirstOrDefault()?.S_CNTR_CODE).FirstOrDefault();
+                                                            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)
+                                                            {
+                                                                if (_cl2.N_CURRENT_NUM < _cl2.N_CAPACITY)
+                                                                    endbit = _cl2;
+                                                                else LogHelper.Info($"{EdnRarea}閫�簱銆嬩娇鐢▄endbit.S_LOC_CODE}");
+                                                            }
+                                                            else
+                                                            {
+                                                                endbit = null;
+                                                                continue;
+                                                            }
+                                                        }
+                                                    }
+
+                                                    else 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)
+                                                        {
+                                                            LogHelper.Info($"鍏ュ簱搴撱�浣跨敤{endbit.S_LOC_CODE}");
+                                                        }
+                                                        else
+                                                        {
+                                                            endbit = null;
+                                                            continue;
+                                                        }
+                                                    }
+                                                    if (endbit != null) break;
+                                                }
+                                            }
+
                                             if (endbit != null)
                                             {
                                                 var sign = Settings.GetTimeStamp();
                                                 var res = TaskProcess.CreateTransport(sign, _cl.S_LOC_CODE, endbit.S_LOC_CODE, "鍘熺墿鏂欐惉杩�绾哥", _clrel.Select(x => x.S_CNTR_CODE).ToList(), 1, endbit.N_CURRENT_NUM + 1, 1, 50, Last);///, EdnRarea == "YWLYLTKQ" ? _clrel0.S_TYPE : "");
                                                 LogHelper.Info($"{r.Key}鍘熺墿鏂欐惉杩�{sign} 浠诲姟 锛屽垱寤簕res} ");
-                                                //if (CDlist.Contains(endbit.S_AREA_CODE) && res)
-                                                //{
-                                                //    LogHelper.Info($"娣诲姞鍐呭瓨鎺掗攣");
-                                                //    var ggf = inlockLis.Find(e => e.S_LOCK_SRC == cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME && e.S_AREA_CODE == endbit.S_AREA_CODE && e.N_ROW == endbit.N_ROW);
-                                                //    LogHelper.Info($"娣诲姞鍐呭瓨鎺掗攣 鏄惁鏌ヨ鍒版暟鎹�{JsonConvert.SerializeObject(ggf)}");
-                                                //    if (ggf == null)
-                                                //    {
-                                                //        var rrrr = new RowLock { S_LOCK_SRC = cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍏ュ簱閿�, S_AREA_CODE = endbit.S_AREA_CODE, N_ROW = endbit.N_ROW };
-                                                //        inlockLis.Add(rrrr);
-                                                //        LogHelper.Info($"娣诲姞鍐呭瓨鎺掗攣 娣诲姞鏁版嵁鍒板唴瀛樻帓閿佷腑:{JsonConvert.SerializeObject(inlockLis)}");
-                                                //    }
-                                                //}
-                                                //if (res && inlock == null && isCd)
-                                                //{
-                                                //    var rrrr = new RowLock { S_LOCK_SRC = cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍏ュ簱閿�, S_AREA_CODE = endbit.S_AREA_CODE, N_ROW = endbit.N_ROW };
-                                                //    LogHelper.Info($"鍘熺墿鏂欏叆搴�娣诲姞鎺掗攣淇℃伅{JsonConvert.SerializeObject(rrrr)} ");
-                                                //    WCSHelper.Do(db => db.Insertable(rrrr).ExecuteCommand());
-                                                //}
                                                 if (EdnRarea == "YWLWJJB") InworkLock = false;
                                                 break;
                                             }
@@ -1470,11 +1506,10 @@
                 {
                     // 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 (LocLock(WJ_BQ.RK_BBHJQ))
-                    {
-                        //鏍囩鍏ュ簱
-                        YwlBQ_CreInwork(locsFirst, WJ_BQ.RK_BQDDQ, WJ_BQ.RK_BBHJQ);
-                    }
+
+                    //鏍囩鍏ュ簱
+                    YwlBQ_CreInwork(locsFirst, WJ_BQ.RK_BQDDQ, WJ_BQ.RK_BBHJQ);
+
                     if (yuworders.Any())
                     {
                         LogHelper.Info($" 鏃犺弻鍑哄簱  宸ュ崟寮�惎涓�");
@@ -1494,11 +1529,10 @@
                 {
                     // 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 (LocLock(SX_BQ.RK_BBHJQ))
-                    {
-                        //姘存爣鍏ュ簱
-                        YwlBQ_CreInwork(SblocsFirst, SX_BQ.RK_BQDDQ, SX_BQ.RK_BBHJQ);
-                    }
+
+                    //姘存爣鍏ュ簱
+                    YwlBQ_CreInwork(SblocsFirst, SX_BQ.RK_BQDDQ, SX_BQ.RK_BBHJQ);
+
                     if (yuworders.Any())
                     {
                         LogHelper.Info($" 鏃犺弻鍑哄簱  宸ュ崟寮�惎涓�");
@@ -1713,13 +1747,13 @@
                         }
                         if (order != null)
                         {
-                            var Porder = WCSHelper.GetWorkOrder(order.SQL_LinkLineNO);
-                            if (Porder == null)
-                            {
-                                LogHelper.CErrorLog("灏忔按鍑哄簱锛� + (order.SQL_LinkLineNO) + "娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟");
-                                yuworders.Remove(order);
-                                goto retuse;
-                            }
+                            // var Porder = WCSHelper.GetWorkOrder(order.SQL_LinkLineNO);
+                            //if (Porder == null)
+                            //{
+                            //    LogHelper.CErrorLog("灏忔按鍑哄簱锛� + (order.SQL_LinkLineNO) + "娌℃湁銆愭墽琛屼腑銆戠殑宸ュ崟");
+                            //    yuworders.Remove(order);
+                            //    goto retuse;
+                            //}
                             var oto = new List<string>();
                             //if (!string.IsNullOrEmpty(order.TagOver))
                             //    oto = order.TagOver.Split(',').ToList();
@@ -2001,18 +2035,26 @@
                             var cir = cirs.OrderByDescending(x => x.T_CREATE).FirstOrDefault();
                             if (CNTR.FirstOrDefault().S_TYPE == BQ_PRA.B)
                             {
-                                var s_type = ContainerHelper.GetCntrItemRel(CNTR.FirstOrDefault().S_CNTR_CODE).FirstOrDefault()?.N_BQ_TRAY_TYPE ?? 0;
-                                Location Endbit = null;
-                                //if (area == area/* WJ_BQ.RK_BQJBQ*/)
-                                //{
-                                var hjs = LocationHelper.GetAreaNormalLocList(WJ_BQ.RK_BBHJQ, false, false);
-                                var Type = s_type == .5 ? 1 : (s_type == .75 ? 2 : 3);
-                                Endbit = hjs.FindAll(x => x.N_CURRENT_NUM == 0 && x.N_LAYER == Type).OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault();
-                                if (Endbit != null)
+                                if (cirs.FirstOrDefault().S_ITEM_NAME.Contains("绌烘"))//绌烘 閫�埌绌烘缂撳瓨鍖�                                 {
-                                    var re = TaskProcess.CreateTransport("", lastfull.S_LOC_CODE.Trim(), Endbit.S_LOC_CODE, "鏍囩鍙夎繍-绾胯竟鏍囩閫�簱", CNTR.Select(x => x.S_CNTR_CODE).ToList(), 1, 1, 1, 62);
-                                    LogHelper.CSucessLog($"from {lastfull.S_LOC_CODE} to {Endbit.S_LOC_CODE} 鏍囩鍙夎繍-鎺ラ┏鏍囩閫�簱 锛屽垱寤簕re}");
+                                    var hjs = LocationHelper.GetAreaNormalLocList(WJ_BQ.RK_BBHJQ, false, false);
                                 }
+                                else
+                                {
+                                    var s_type = ContainerHelper.GetCntrItemRel(CNTR.FirstOrDefault().S_CNTR_CODE).FirstOrDefault()?.N_BQ_TRAY_TYPE ?? 0;
+                                    Location Endbit = null;
+                                    //if (area == area/* WJ_BQ.RK_BQJBQ*/)
+                                    //{
+                                    var hjs = LocationHelper.GetAreaNormalLocList(WJ_BQ.RK_BBHJQ, false, false);
+                                    var Type = s_type == .5 ? 1 : (s_type == .75 ? 2 : 3);
+                                    Endbit = hjs.FindAll(x => x.N_CURRENT_NUM == 0 && x.N_LAYER == Type).OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault();
+                                    if (Endbit != null)
+                                    {
+                                        var re = TaskProcess.CreateTransport("", lastfull.S_LOC_CODE.Trim(), Endbit.S_LOC_CODE, "鏍囩鍙夎繍-绾胯竟鏍囩閫�簱", CNTR.Select(x => x.S_CNTR_CODE).ToList(), 1, 1, 1, 62);
+                                        LogHelper.CSucessLog($"from {lastfull.S_LOC_CODE} to {Endbit.S_LOC_CODE} 鏍囩鍙夎繍-鎺ラ┏鏍囩閫�簱 锛屽垱寤簕re}");
+                                    }
+                                }
+
                                 // }
 
                                 //else
@@ -2052,7 +2094,6 @@
                 //鎵ц閫�簱銆傘�銆�
                 // Console.WriteLine($"{v.FirstOrDefault()?.S_LOC_CODE} 闇�閫�簱-- 鑷姩閫�簱-鏈疄鐜�);
             }
-
         }
 
         private static void YwlPETKOutOrder(string v, string v1, string v2, int v3 = 3)
@@ -4511,96 +4552,121 @@
             }
         }
 
+
+        /// <summary>
+        /// 鍦板爢鍑哄簱绠楁硶
+        /// </summary>
+        /// <param name="AreaCode"></param>
+        /// <param name="Row"></param>
+        /// <param name="InOutLock"></param>
+        /// <param name="ItemCode"></param>
+        /// <returns></returns>
+        public static List<Location> GetOutWorkZx(string AreaCode, bool InOutLock = true, string ItemCode = "")
+        {
+            var lstCanOutL = new List<Location>();
+            try
+            {
+                var chi = new SqlHelper<object>().GetInstance();
+                var newDb = chi.CopyNew();
+                var ca = Expressionable.Create<Location, LocCntrRel, CntrItemRel>();
+                if (string.IsNullOrEmpty(ItemCode))//绠楃┖鎵�
+                {
+                    ca.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && string.IsNullOrEmpty(t.S_ITEM_CODE) && o.S_AREA_CODE == AreaCode);
+                    lstCanOutL = newDb.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).LeftJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where(ca.ToExpression()).ToList();
+                }
+                else//绠楁弧鎵�+                {
+                    ca.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && t.S_ITEM_CODE == ItemCode && o.S_AREA_CODE == AreaCode);
+                    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(ca.ToExpression()).ToList();
+                }
+                //鍦板爢涓撻棬绠楁硶杩囨护
+                if (lstCanOutL.Count() > 0)
+                {
+                    var Inloca = Expressionable.Create<Location>();
+                    Inloca.And(it => it.S_AREA_CODE == AreaCode);
+                    var locationInLock = newDb.Queryable<Location>().Where(Inloca.ToExpression()).ToList();
+                    //绌洪棿閿�鎺掗櫎涓�暣鎺�+                    var KjLick = locationInLock.FindAll(e => e.S_LOCK_STATE == "绌洪棿閿�).ToList();
+                    if (KjLick.Count() > 0)
+                    {
+                        foreach (var item in KjLick)
+                        {
+                            lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW);
+                        }
+                    }
+                    if (InOutLock)
+                    {
+                        var CkLick = locationInLock.FindAll(e => e.S_LOCK_STATE == "鍑哄簱閿�).ToList();
+                        if (CkLick.Count() > 0)
+                        {
+                            foreach (var item in CkLick)
+                            {
+                                lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW);
+                            }
+                        }
+                        var OutLick = locationInLock.FindAll(e => e.S_LOCK_STATE == "鍏ュ簱閿�).ToList();
+                        if (OutLick.Count() > 0)
+                        {
+                            foreach (var item in OutLick)
+                            {
+                                lstCanOutL.RemoveAll(e => e.S_AREA_CODE == item.S_AREA_CODE && e.N_ROW == item.N_ROW);
+                            }
+                        }
+                    }
+
+
+                }
+                return lstCanOutL;
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info("T2绾哥鍑哄簱绠楁硶" + $" 鎶ラ敊: {ex.Message}");
+                return lstCanOutL;
+            }
+        }
         /// <summary>
         /// 鍘熺墿鏂欑焊绠卞嚭搴�         /// </summary>
         public static void AutoRun13TSJ()
         {
-
-            //Action<YWLWorkOrder> _sAB娌$墿鏂欐垨鑰呬綑閲忎笉瓒冲紑濮嬭Е鍙戣窡鏍规嵁鑷姩杞繍_鍚嶅瓧瓒婇暱瓒婂ソ = (od) =>
-            //{
-            //    LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}瀵瑰簲宸ュ崟鐨剓od.S_ROW} 鐗╂枡鏁伴噺涓嶈冻銆傝Е鍙戣浆杩愩�");
-            //    // 鍏堢湅鏄惁鏈夊埌璇ュ簱鍖虹殑杞繍浠诲姟銆�
-            //    var zxs = LocationHelper.GetList<YWLZXtake>(X => X.S_ZX_STATE == "鎵ц" && X.S_END_AREA == od.S_ROW);
-            //    //1.鏌ョ湅鐗╂枡鏄惁鍖归厤銆�-            //    var itemTRUN = zxs.Any(x => x.S_ITEM_CODE == od.SQL_ItemCode && x.S_ITEM_NAME == od.SQL_ItemName && x.S_CJ_NAME == od.S_CJ_NAME);
-            //    if (itemTRUN)
-            //    {  //鏈夊埌璇ュ簱鍖虹殑 鐗╂枡杞繍浠诲姟浜嗐� 涓嶉渶瑕佺户缁簡 銆�-
-            //        LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}宸茬粡瀛樺湪杞繍浜嗘棤闇�Е鍙戣浆杩愩�");
-            //        return;
-            //    }
-            //    //浜哄伐杞繍娌℃寚瀹氱墿鏂欙紝鎴戜細鑷姩鍐欏洖杞繍鍗�鐗╂枡鏁版嵁銆�-
-            //    //鎵綜D 鍖�鍝噷鏈夎繖涓墿鏂欍� 
-            //    Dictitems TrunStart = null;
-            //    foreach (var area in CDlist)
-            //    {
-            //        if (dsi.TryGetValue(area, out var dictitems1))
-            //        {
-            //            var arearowsloc = LocationHelper.GetAreaNormalLocList(area);
-            //            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))
-            //            {
-            //                if (arearowsloc.Exists(x => x.N_ROW == d.Row))
-            //                {
-            //                    TrunStart = d;
-            //                    break;
-            //                }
-            //            }
-            //        }
-            //    }
-
-            //    LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}瑙﹀彂杞繍銆傝浆杩愭潵婧愭槸{JsonConvert.SerializeObject(TrunStart)}");
-            //    if (TrunStart != null)
-            //        WCSHelper.Do(db =>
-            //        {
-            //            db.Insertable(new YWLZXtake
-            //            {
-            //                S_START_AREA = TrunStart.area,
-            //                N_START_ROW = TrunStart.Row,
-            //                S_END_AREA = od.S_ROW,
-            //                S_ZX_STATE = "鎵ц",
-            //                S_ITEM_CODE = od.SQL_ItemCode,
-            //                S_ITEM_NAME = od.SQL_ItemName,
-            //                S_CJ_NAME = od.S_CJ_NAME,
-            //                S_ZZ_AREA = (od.S_ROW == "YWLAQWJ" ? "YWLWJJB" : od.S_ROW)
-            //            }).ExecuteCommand();
-            //        });
-            //};
             foreach (var PLC in Settings.GetDeviceInfoList().FindAll(X => X.deviceType == 13 && X.enable == 1))
             {
                 string pline = PLC.deviceName;
                 if (PLC.deviceName.Contains("T2"))
                     pline = "T2鎻愬崌鏈�绾哥";
 
-                var orkOrd = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == pline && x.WorkType == 6 && x.SQL_State == "鎵ц涓�);
-                bool can = false;
+                var orkOrd = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == pline && x.WorkType == 6 && x.SQL_State == "鎵ц涓�).ToList();
+                if (orkOrd.Count == 0)
+                {
+                    continue;
+                }
+                bool can = true;
                 if (orkOrd.Any())
                 {
+                    // can = true;
                     string areaaaaa = PLC.areaPriy[0];
                     var locs = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == areaaaaa && x.S_LOCK_STATE != "鎶ュ簾");
                     if (locs.Find(x => x.S_LOCK_STATE != "鏃�) != null)//鏌村灈鏈夐攣 涓嶅垽鏂�                         continue;
                     if (locs.Find(x => x.N_CURRENT_NUM > 0) != null) //鎷嗗灈鏈夎揣 涓嶅垽鏂�                         continue;
-                    can = true;
                 }
-
-                orkOrd = orkOrd.FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10);
+                orkOrd = orkOrd.FindAll(x => x.OutNum > 0).ToList();
                 ReadCCK = can;
                 if (orkOrd.Any())
-                    foreach (var od in orkOrd.OrderBy(x => x.TagOverTime).ThenBy(x => x.OutNum))
-                    //foreach (var od in od2.ToList())
+                    foreach (var od in orkOrd.OrderBy(x => x.TagOverTime).ToList())
                     {
+                        LogHelper.Info($"AutoRun13TSJ 姝e湪鎵ц鐨勭焊绠卞嚭搴撳伐鍗曚负:{JsonConvert.SerializeObject(od)}");
                         var l2 = new List<string>() { "YWLAQWJ", "YWLBQWJ" };//, "YWLCQSX", "YWLDQWJ" };
+                        if (od.SQL_PLineNo.Contains("T2"))
+                        {
+                            l2 = new List<string>() { "YWLCQSX", "YWLDQWJ" };
+                        }
                         l2.Remove(od.S_ROW);
-                        //l2.Remove(od.TagOver);
-                        //var odsr = new List<string> { od.TagOver, od.S_ROW }.Concat(l2).Distinct().ToList();
                         var odsr = new List<string> { od.S_ROW }.Concat(l2).Distinct().ToList();
-
                         ///姹囨�浠撳簱閲屾渶澶у眰鏄嚑灞傘�
                         Dictitems Lart = null;
-                        foreach (var area in odsr)//od.S_ROW.Split('$'))
+                        foreach (var area in odsr)
                         {
                             if (string.IsNullOrEmpty(area))
                             {
@@ -4610,12 +4676,17 @@
                             {
                                 foreach (var d in dictitems1.FindAll(x => x.ItemCode == od.SQL_ItemCode && x.ItemName == od.SQL_ItemName))
                                 {
+
                                     if (Lart == null)
+                                    {
                                         Lart = d;
+                                    }
                                     else
                                     {
                                         if (Lart.ItemLayer < d.ItemLayer)
+                                        {
                                             Lart = d;
+                                        }
                                     }
                                 }
                             }
@@ -4631,16 +4702,13 @@
                                 var v = new List<string>() { Lart.area };
                                 Location StartBit = null;
                                 List<LocCntrRel> _clrel = new List<LocCntrRel>();
-
-                                foreach (var area in v) //.Concat(od.S_ROW.Split('$')).Distinct())
+                                foreach (var area in odsr)
                                 {
                                     if (ABlist.Contains(area))
                                     {
-                                        //AreaRowlist = LocationHelper.GetAreaNormalLocList(area);YWLBQWJ
-                                        //  var AreaRowlist = LocationHelper.GetAreaNormalLocList("YWLAQWJ").Union(LocationHelper.GetAreaNormalLocList("YWLBQWJ")).ToList();
                                         var db = new SqlHelper<object>().GetInstance();
                                         var ca = Expressionable.Create<Location, LocCntrRel, CntrItemRel>();
-                                        ca.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && t.S_ITEM_CODE == od.SQL_ItemCode && t.S_ITEM_NAME == od.SQL_ItemName && (o.S_AREA_CODE == "YWLAQWJ" || o.S_AREA_CODE == "YWLBQWJ"));
+                                        ca.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "鏃� && od.OutNum >= o.N_CURRENT_NUM && t.S_ITEM_CODE == od.SQL_ItemCode && t.S_ITEM_NAME == od.SQL_ItemName && (o.S_AREA_CODE == "YWLAQWJ" || o.S_AREA_CODE == "YWLBQWJ"));
                                         var lstCanOutL = db.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();
                                         if (lstCanOutL.Count() > 0)
                                         {
@@ -4657,49 +4725,52 @@
                                         {
                                             LogHelper.Info($"AutoRun13TSJ 鏈哄彴:{pline} 鐗╂枡缂栫爜:{od.SQL_ItemCode}鐗╂枡鍚嶇О:{od.SQL_ItemName} AB鍖虹己鏂�);
                                         }
-
-
-                                        //if (rl == null) continue;
-                                        //_clrel = LocationHelper.GetLocCntrRel(rl.S_LOC_CODE);
-                                        ////鏉垮瀷鐩稿悓
-                                        //var _clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).First();
-                                        //LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "璇嗗埆鎵樼洏绫诲瀷銆� + JsonConvert.SerializeObject(_clrel0));
-                                        //var _clcntitem = ContainerHelper.GetCntrItemRel(_clrel0.S_CNTR_CODE.Trim()).FirstOrDefault();
-                                        //LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "璇嗗埆鎵樼洏涓婄殑鐗╂枡淇℃伅銆� + JsonConvert.SerializeObject(_clcntitem));
-                                        //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)
-                                        //    {
-                                        //        StartBit = rl;
-                                        //        break;
-                                        //    }
-                                        //}
-
                                     }
                                     else
-                                    {
-                                        var AreaRowlist = LocationHelper.GetAreaNormalLocList(area);
-                                        foreach (var item in AreaRowlist.GroupBy(x => x.N_ROW))
+                                    { //T2鎻愬崌鏈轰笂绾哥 2025骞�鏈�4鏃� 閲嶅啓绠楁硶
+                                        var StaLoc = GetOutWorkZx(area, true, od.SQL_ItemCode);//鑾峰彇鍙嚭搴撶殑璐т綅淇℃伅
+                                        if (StaLoc.Count() > 0)
                                         {
-                                            var rl = item.ToList().FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault();
-                                            if (rl == null) continue;
-                                            _clrel = LocationHelper.GetLocCntrRel(rl.S_LOC_CODE);
-                                            //鏉垮瀷鐩稿悓
-                                            var _clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).First();
-                                            LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "璇嗗埆鎵樼洏绫诲瀷銆� + JsonConvert.SerializeObject(_clrel0));
-                                            var _clcntitem = ContainerHelper.GetCntrItemRel(_clrel0.S_CNTR_CODE.Trim()).FirstOrDefault();
-                                            LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "璇嗗埆鎵樼洏涓婄殑鐗╂枡淇℃伅銆� + JsonConvert.SerializeObject(_clcntitem));
-                                            if (_clcntitem != null)
+                                            var Fuff = StaLoc.OrderBy(e => e.T_FULL_TIME).ToList();//鎺掑簭 鏍规嵁鏈�棭缃弧鏃堕棿鎺掑簭
+                                            var GrRow = Fuff.Select(e => e.N_ROW).Distinct().ToList();//榛樿鍙栬兘鍙栧埌鐨勬帓
+                                            foreach (var item in GrRow)
                                             {
-                                                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)
+                                                var ZzStaLoc = StaLoc.FindAll(e => e.N_ROW == item).OrderByDescending(e => e.N_COL).ToList();
+                                                if (ZzStaLoc.Count() > 0)
                                                 {
-                                                    StartBit = rl;
+                                                    //榛樿鍙栨渶澶栦晶鐨勮揣浣�+                                                    StartBit = ZzStaLoc.FirstOrDefault();
+                                                }
+                                                if (StartBit != null)
+                                                {
                                                     break;
                                                 }
                                             }
                                         }
+
+                                        //var AreaRowlist = LocationHelper.GetAreaNormalLocList(area);
+                                        //foreach (var item in AreaRowlist.GroupBy(x => x.N_ROW))
+                                        //{
+                                        //    var rl = item.ToList().FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault();
+                                        //    if (rl == null) continue;
+                                        //    _clrel = LocationHelper.GetLocCntrRel(rl.S_LOC_CODE);
+                                        //    //鏉垮瀷鐩稿悓
+                                        //    var _clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).First();
+                                        //    LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "璇嗗埆鎵樼洏绫诲瀷銆� + JsonConvert.SerializeObject(_clrel0));
+                                        //    var _clcntitem = ContainerHelper.GetCntrItemRel(_clrel0.S_CNTR_CODE.Trim()).FirstOrDefault();
+                                        //    LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "璇嗗埆鎵樼洏涓婄殑鐗╂枡淇℃伅銆� + JsonConvert.SerializeObject(_clcntitem));
+                                        //    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)
+                                        //        {
+                                        //            StartBit = rl;
+                                        //            break;
+                                        //        }
+                                        //    }
+                                        //}
+
+
                                     }
                                     if (StartBit != null)
                                     {
@@ -4778,11 +4849,11 @@
                                         var db = new SqlHelper<object>().GetInstance();
                                         od.TagOverTime = DateTime.Now;
                                         od.TagOver = StartBit.S_AREA_CODE;
-                                        if (od.OutNum >= StartBit.N_CURRENT_NUM)
-                                        {
-                                            od.OutNum = od.OutNum - StartBit.N_CURRENT_NUM;
-                                        }
-                                        var ggf = db.Updateable(od).UpdateColumns(it => new { it.TagOverTime, it.TagOver, it.OutNum }).ExecuteCommand();
+                                        //if (od.OutNum >= StartBit.N_CURRENT_NUM)
+                                        //{
+                                        //    od.OutNum = od.OutNum - StartBit.N_CURRENT_NUM;
+                                        //}
+                                        var ggf = db.Updateable(od).UpdateColumns(it => new { it.TagOverTime, it.TagOver }).ExecuteCommand();
                                         LogHelper.Info($"涓婃彁鍗囨満浠诲姟 鏇存柊宸ュ崟鐨勬椂闂村奖鍝嶈鏁� {ggf}");
 
                                         // var r = new RowLock { S_LOCK_SRC = od.SQL_ItemCode, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "鍑哄簱閿�, S_AREA_CODE = StartBit.S_AREA_CODE, N_ROW = StartBit.N_ROW };

--
Gitblit v1.9.1