czw
2025-06-17 74a352255e4a8d7cd10eaaab8cb44f568f88b6c2
HH.WCS.QingXiNongfu/core/Monitor.cs
@@ -850,7 +850,7 @@
                {
                    var locs = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == item.S_AREA_CODE && x.N_ROW == item.N_ROW);
                    if (locs.Find(x => x.N_CURRENT_NUM > 0) == null)
                        LocationHelper.SetRowLock(item, 0);
                        WCSHelper.Do(db => db.Deleteable(item).ExecuteCommand());
                }
            }
            Rlock = Rlocks.FindAll(x => x.S_LOCK_STATE.Contains("入库锁"));
@@ -867,11 +867,11 @@
                    //            LocationHelper.SetRowLock(item, 0);
                    //}
                    //如果一排内无货。也无锁。  可能是物料的入库取消了。 取消当前排锁,防止后续不入这个物料了依然占着排。
                    if (locs.Find(x => x.N_CURRENT_NUM > 0) == null && locs.Find(x => x.S_LOCK_STATE != "无") == null) LocationHelper.SetRowLock(item, 0);
                    if (locs.Find(x => x.N_CURRENT_NUM > 0) == null && locs.Find(x => x.S_LOCK_STATE != "无") == null) WCSHelper.Do(db => db.Deleteable(item).ExecuteCommand());
                    else
                    {
                        var lastloC = locs.OrderByDescending(x => x.N_COL).FirstOrDefault();
                        if (lastloC.N_CURRENT_NUM == lastloC.N_CAPACITY) LocationHelper.SetRowLock(item, 0);
                        if (lastloC.N_CURRENT_NUM == lastloC.N_CAPACITY) WCSHelper.Do(db => db.Deleteable(item).ExecuteCommand());
                    }
                }
            }
@@ -3544,7 +3544,7 @@
        public static void AutoRun13TSJ()
        {
            var list = new List<string>() { "YWLAQWJ", "YWLBQWJ", "YWLCQSX", "YWLDQWJ" };
            var WorkOrder = new List<YWLWorkOrder>();
            //var WorkOrder = new List<YWLWorkOrder>();
            foreach (var PLC in Settings.GetDeviceInfoList().FindAll(X => X.deviceType == 13 && X.enable == 1))
            {
                string pline = PLC.deviceName;
@@ -3552,7 +3552,6 @@
                    pline = "T2提升机-纸箱";
                var orkOrd = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == pline && x.WorkType == 6 && x.SQL_State == "执行中");
                orkOrd = orkOrd.FindAll(x => DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10);
                bool can = false;
                if (orkOrd.Any())
                {
@@ -3564,42 +3563,46 @@
                        continue;
                    can = true;
                    foreach (var item in list)
                    {
                        YWLWorkOrder source = new YWLWorkOrder();
                        var source1 = orkOrd.FirstOrDefault();
                        source.SQL_PLineNo = source1.SQL_PLineNo;
                        source.FuLe_PLine_No = source1.FuLe_PLine_No;
                        source.SQL_LinkLineNO = source1.SQL_LinkLineNO;
                        source.SQL_Area = item;
                        source.SQL_UsingNow = source1.SQL_UsingNow;
                        source.SQL_State = source1.SQL_State;
                        source.SQL_WorkNo = source1.SQL_WorkNo;
                        source.SQL_ItemCode = source1.SQL_ItemCode;
                        source.SQL_ItemName = source1.SQL_ItemName;
                        source.SQL_charge = source1.SQL_charge;
                        source.SQL_Total = source1.SQL_Total;
                        source.SQL_PLAN_END = source1.SQL_PLAN_END;
                        source.SQL_Modify_TIme = source1.SQL_Modify_TIme;
                        source.OutNum = source1.OutNum;
                        source.WorkType = source1.WorkType;
                        source.MidArea = source1.MidArea;
                        source.TagOver = source1.TagOver;
                        source.TagOverTime = source1.TagOverTime;
                        source.S_BQ_TRAY_TYPE = source1.S_BQ_TRAY_TYPE;
                        source.S_CJ_NAME = source1.S_CJ_NAME;
                        source.S_ROW = item;
                        WorkOrder.Add(source);
                    //var source1 = orkOrd.FirstOrDefault();
                    //foreach (var item in list)
                    //{
                    //    YWLWorkOrder source = new YWLWorkOrder();
                    //    source.SQL_PLineNo = source1.SQL_PLineNo;
                    //    source.FuLe_PLine_No = source1.FuLe_PLine_No;
                    //    source.SQL_LinkLineNO = source1.SQL_LinkLineNO;
                    //    source.SQL_Area = item;
                    //    source.SQL_UsingNow = source1.SQL_UsingNow;
                    //    source.SQL_State = source1.SQL_State;
                    //    source.SQL_WorkNo = source1.SQL_WorkNo;
                    //    source.SQL_ItemCode = source1.SQL_ItemCode;
                    //    source.SQL_ItemName = source1.SQL_ItemName;
                    //    source.SQL_charge = source1.SQL_charge;
                    //    source.SQL_Total = source1.SQL_Total;
                    //    source.SQL_PLAN_END = source1.SQL_PLAN_END;
                    //    source.SQL_Modify_TIme = source1.SQL_Modify_TIme;
                    //    source.OutNum = source1.OutNum;
                    //    source.WorkType = source1.WorkType;
                    //    source.MidArea = source1.MidArea;
                    //    source.TagOver = source1.TagOver;
                    //    source.TagOverTime = source1.TagOverTime;
                    //    source.S_BQ_TRAY_TYPE = source1.S_BQ_TRAY_TYPE;
                    //    source.S_CJ_NAME = source1.S_CJ_NAME;
                    //    source.S_ROW = item;
                    //    WorkOrder.Add(source);
                    //}
                    }
                }
                orkOrd = orkOrd.FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10);
                ReadCCK = can;
                if (orkOrd.Any())
                    //  foreach (var od in orkOrd.OrderByDescending(x => x.OutNum))
                    foreach (var od in WorkOrder)
                    foreach (var od in orkOrd.OrderBy(x => x.TagOverTime).ThenBy(x => x.OutNum))
                    //foreach (var od in od2.ToList())
                    {
                        list.Remove(od.S_ROW);
                        var odsr = new List<string> { od.S_ROW }.Concat(list).Distinct().ToList();
                        ///汇总仓库里最大层是几层。
                        Dictitems Lart = null;
                        foreach (var area in od.S_ROW.Split('$'))
                        foreach (var area in odsr)//od.S_ROW.Split('$'))
                        {
                            if (dsi.TryGetValue(area, out var dictitems1))
                            {
@@ -3616,7 +3619,9 @@
                            }
                        }
                        LogHelper.Info($"AutoRun13TSJ 筛选物料 库区排数据.  {od.SQL_PLineNo} >>{od.OutNum}> {JsonConvert.SerializeObject(Lart)}");
                        // 需要数量 >= 仓库最大数量。 就开始出库。
                        if (Lart != null)
                        if (od.OutNum >= Lart?.ItemLayer)
                        {
                            var v = new List<string>() { Lart.area };
@@ -3653,6 +3658,7 @@
                            if (StartBit == null)
                                continue;
                            Location Endbit = null;
                            var loc = LocationHelper.GetLoc(PLC.location[0]);
                            if (loc?.N_CURRENT_NUM == 0 && StartBit.N_CURRENT_NUM == 1 && DeviceProcess.doorStatus.ContainsKey(PLC.location[0]))
                            {
@@ -3708,8 +3714,10 @@
                                        }
                                    }
                                    else db.Insertable(r).ExecuteCommand();
                                }
                                        od.TagOverTime = DateTime.Now;
                                        db.Updateable(od).UpdateColumns(it => new { it.TagOverTime }).ExecuteCommand();
                                break;
                                    }
                            }
                        }
                    }
@@ -3717,6 +3725,7 @@
        }
        public static void AutoRunABD()
        {
            LogHelper.Info($"AutoRunABD abcd物料汇总  >>{ReadCCK}|| {dsi.Count}");
            if (!ReadCCK)
            {
                Thread.Sleep(3000);
@@ -3747,8 +3756,13 @@
                    var rl = item.ToList().FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault();
                    var _clrel = LocationHelper.GetLocCntrRel(rl.S_LOC_CODE);
                    if (!_clrel.Any())
                    {
                        LogHelper.Info($"{area}>> {rl.S_LOC_CODE}有数量, 没托盘");
                        continue;
                    }
                    //板型相同
                    var _clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).First();
                    var _clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).FirstOrDefault();
                    LogHelper.Info(rl.S_LOC_CODE + "识别托盘类型。");
                    var _clcntitem = ContainerHelper.GetCntrItemRel(_clrel0.S_CNTR_CODE.Trim()).FirstOrDefault();
@@ -3796,6 +3810,7 @@
                    }
                }
            }
            LogHelper.Info($"AutoRunABD abcd物料汇总完成  >>{ReadCCK}|| {dsi.Count}");
        }
        public static void chargeCCD()