qx
czw
2025-06-17 63b7c5764a2b567a1aeaf939e0edabf98aba2378
HH.WCS.QingXiNongfu/core/Monitor.cs
@@ -1302,8 +1302,7 @@
            {
                try
                {
                    LogHelper.Info($" 无菌出库  查工单");
                    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 => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(x => x.TagOverTime).ToList();
                    var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "无菌标签出库" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(x => x.TagOverTime).ToList();
                    if (!yuworders.Any())
                    {
                        YwlBQ_CreInwork(locsFirst, WJ_BQ.RK_BQDDQ, WJ_BQ.RK_BBHJQ);
@@ -1327,7 +1326,7 @@
                try
                {
                    string pline = "T2提升机-标签";
                    var Syuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == pline && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(x => x.TagOverTime).ToList();
                    var Syuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == pline && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(x => x.TagOverTime).ToList();
                    //yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == plc.deviceName && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(x => x.TagOverTime).ToList();
                    var tklist = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == pline && x.WorkType == 1 && x.SQL_State == "执行中");
@@ -1363,7 +1362,7 @@
                    }
                    else if (Syuworders.Any())
                    {
                        YwlBQ_CreSXOutOrder(plc, Syuworders);
                        YwlBQ_CreSXOutOrder(plc, Syuworders.FindAll(x => x.OutNum > 0));
                    }
                }
                catch (Exception ex)
@@ -1394,11 +1393,12 @@
                    YwlPETK_CreInwork(TKlocsFirst, "YWLTKMKQ", "收缩膜叉运", 1); // PE入库 --提扣
                    //YwlPETKtkOrder("YWLZSXBKQ", "YWLTKMKQ", "收缩膜叉运");
                    //YwlPETKOutOrder("YWLTKMKQ", "YWLZSXBKQ", "收缩膜叉运");// PE中出库
                    var tklist = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "T2提升机-收缩膜" && x.WorkType == 1 && x.SQL_State == "执行中");
                    if (tklist.Count() > 0)
                    {
                        LogHelper.Info("-收缩膜  退库!");
                        var tk = tklist.FirstOrDefault();
                        var loc = LocationHelper.GetLoc(plc.location[0]);
                        if (loc.N_CURRENT_NUM > 0 && loc.S_LOCK_STATE == "无")
@@ -1477,8 +1477,13 @@
                    else
                    //YwlPETKOutOrder("YWLTKMKQ", "", "PE叉运");// PE小出库
                    {
                        LogHelper.Info("-收缩膜  出库!");
                        var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "T2提升机-收缩膜" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(x => x.TagOverTime).ToList();
                        if (!yuworders.Any()) return;
                        if (!yuworders.Any())
                        {
                            LogHelper.Info("-收缩膜  出库!没有出库单。");
                            return;
                        }
                        var ploc = plc.location[0];
                    retuse:
                        var order = yuworders.FirstOrDefault();
@@ -1510,6 +1515,7 @@
                                LogHelper.CErrorLog("小水出库:" + (order.SQL_WorkNo) + "没有【指定物料;");
                                goto retuse;
                            }
                            LogHelper.Info("-收缩膜  出库!" + oic + oin);
                            string v = "YWLTKMKQ";
                            int ord = -1;
@@ -1536,9 +1542,9 @@
                                    var cirs = ContainerHelper.GetCntrItemRel(CNTR.FirstOrDefault().S_CNTR_CODE);
                                    if (!cirs.Any()) continue;
                                    cir = cirs.OrderByDescending(x => x.T_CREATE).FirstOrDefault();
                                    LogHelper.Info($"收缩膜 出库!{item.Key}排 [{cir.S_ITEM_CODE}-{order.SQL_ItemCode}]   [{cir.S_ITEM_NAME}-{order.SQL_ItemName}]  [{cir.S_CJ_NAME}-{order.S_CJ_NAME}]  {(cir.S_ITEM_CODE == order.SQL_ItemCode && cir.S_ITEM_NAME == order.SQL_ItemName && cir.S_CJ_NAME == order.S_CJ_NAME)}");
                                    if (cir.S_ITEM_CODE == order.SQL_ItemCode && cir.S_ITEM_NAME == order.SQL_ItemName && cir.S_CJ_NAME == order.S_CJ_NAME)
                                    {
                                        //plg 2025年6月13日 09:08:10 
                                        Temp = new locCntItem
                                        {
@@ -1570,30 +1576,32 @@
                            if (StartBit != null)
                            {
                                var tagLoc = StartBit;
                                if (tagLoc.N_LAYER == 1 || tagLoc.N_CURRENT_NUM == 1)
                                {
                                    // 直接出提升机位
                                    //var pc = Settings.GetDeviceInfoList().Where(a => a.deviceName == "水线标签提升机").FirstOrDefault();
                                // 直接出提升机位
                                    if (!string.IsNullOrEmpty(ploc) && plc != null && DeviceProcess.doorStatus[ploc]?.info == "1")
                                LogHelper.Info(order.SQL_PLineNo + $"-收缩膜出库!终点{ploc}-{DeviceProcess.doorStatus[ploc]?.info}");
                                if (!string.IsNullOrEmpty(ploc) && plc != null && DeviceProcess.doorStatus[ploc]?.info == "1")
                                {
                                    var loc = LocationHelper.GetLoc(ploc);
                                    LogHelper.Info(order.SQL_PLineNo + $"-收缩膜出库!终点{loc.N_CURRENT_NUM}-{loc.S_LOCK_STATE}");
                                    if (loc.N_CURRENT_NUM == 0 && loc.S_LOCK_STATE == "无")
                                    {
                                        var loc = LocationHelper.GetLoc(ploc);
                                        if (loc.N_CURRENT_NUM == 0 && loc.S_LOCK_STATE == "无")
                                        var re = TaskProcess.CreateTransport("", tagLoc.S_LOC_CODE.Trim(), loc.S_LOC_CODE, "收缩膜叉运-货架出提升机", new List<string> { tagLoc.S_CNTR_CODE }, StartBit.N_CURRENT_NUM, 1, 1, 62);
                                        LogHelper.CSucessLog($"from {tagLoc.S_LOC_CODE} to {loc.S_LOC_CODE} 收缩膜叉运-货架出提升机 ,创建{re} ");
                                        if (re)
                                        {
                                            var re = TaskProcess.CreateTransport("", tagLoc.S_LOC_CODE.Trim(), loc.S_LOC_CODE, "收缩膜叉运-货架出提升机", new List<string> { tagLoc.S_CNTR_CODE }, StartBit.N_CURRENT_NUM, 1, 1, 62);
                                            LogHelper.CSucessLog($"from {tagLoc.S_LOC_CODE} to {loc.S_LOC_CODE} 收缩膜叉运-货架出提升机 ,创建{re} ");
                                            if (re)
                                            oto.Add(oic);
                                            if (outlock == null)
                                            {
                                                oto.Add(oic);
                                                if (outlock == null)
                                                {
                                                    var r = new RowLock { S_LOCK_SRC = (StartBit.S_NOTE /*+ StartBit.HalfOrFull*/), T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "出库锁", S_AREA_CODE = StartBit.S_AREA_CODE, N_ROW = StartBit.N_ROW };
                                                    db.Insertable(r).ExecuteCommand();
                                                }
                                                var r = new RowLock { S_LOCK_SRC = (StartBit.S_NOTE /*+ StartBit.HalfOrFull*/), T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "出库锁", S_AREA_CODE = StartBit.S_AREA_CODE, N_ROW = StartBit.N_ROW };
                                                db.Insertable(r).ExecuteCommand();
                                            }
                                        }
                                    }
                                }
                            }
                            else
                            {
                                LogHelper.Info(order.SQL_PLineNo + "-收缩膜  出库! 没有可用物料");
                            }
                            var set1 = new HashSet<string>(oto);
@@ -2280,11 +2288,11 @@
            return;
            //1 半托直接上货架一层。
            lgrx = locsFirst.GroupBy(X => X.N_ROW).Select(x =>
           {
               var y11 = x.OrderBy(y => y.N_COL).ToList();
               var y1 = y11.FindAll(z => z.N_CURRENT_NUM > 0).LastOrDefault();
               return y1;
           }).ToList();
            {
                var y11 = x.OrderBy(y => y.N_COL).ToList();
                var y1 = y11.FindAll(z => z.N_CURRENT_NUM > 0).LastOrDefault();
                return y1;
            }).ToList();
            foreach (var lastfull in lgrx.FindAll(x => x.HalfOrFull == 2).OrderBy(x => x.HalfOrFull).ThenBy(x => x.N_ROW))
            {
                //var y = item.OrderBy(x => x.N_COL).ToList();
@@ -2581,7 +2589,7 @@
                }
            }
            ///第一段:出库 -到拆垛或者 接驳。
            var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "无菌标签出库" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(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 => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(x => x.TagOverTime).ToList();
        //foreach (var order in yuworders)
        retuse:
@@ -3138,22 +3146,22 @@
                        }
                        else
                            WCSHelper.Do(db =>
                        {
                            //var LCRLIST = db.Queryable<LocCntrRel>().Includes(x => x.CntrItemRel).Where(x => x.S_LOC_CODE.StartsWith("QX-") && (x.CntrItemRel.S_ITEM_CODE == outOer.S_ITEM_CODE || x.CntrItemRel.S_ITEM_CODE == outOer.S_ITEM_NAME)).ToList();
                            List = db.Queryable<LocCntrRel>()
                            .LeftJoin<CntrItemRel>((lcr, cir) => lcr.S_CNTR_CODE == cir.S_CNTR_CODE)
                            .LeftJoin<Location>((lcr, cir, lo) => lcr.S_LOC_CODE == lo.S_LOC_CODE)
                            .Where((lcr, cir) => lcr.S_LOC_CODE.StartsWith("QX-") && (cir.S_ITEM_CODE == outOer.S_ITEM_CODE || cir.S_ITEM_CODE == outOer.S_ITEM_NAME))
                            .Select((lcr, cir, lo) => new Location
                            {
                                S_AREA_CODE = lo.S_AREA_CODE,
                                S_WH_CODE = lcr.S_TYPE,
                                T_CREATE = lcr.T_CREATE,
                                N_ROW = lo.N_ROW,
                                N_COL = lcr.S_CNTR_CODE.StartsWith("TP") ? 0 : 1
                            }).ToList();
                                //var LCRLIST = db.Queryable<LocCntrRel>().Includes(x => x.CntrItemRel).Where(x => x.S_LOC_CODE.StartsWith("QX-") && (x.CntrItemRel.S_ITEM_CODE == outOer.S_ITEM_CODE || x.CntrItemRel.S_ITEM_CODE == outOer.S_ITEM_NAME)).ToList();
                                List = db.Queryable<LocCntrRel>()
                                .LeftJoin<CntrItemRel>((lcr, cir) => lcr.S_CNTR_CODE == cir.S_CNTR_CODE)
                                .LeftJoin<Location>((lcr, cir, lo) => lcr.S_LOC_CODE == lo.S_LOC_CODE)
                                .Where((lcr, cir) => lcr.S_LOC_CODE.StartsWith("QX-") && (cir.S_ITEM_CODE == outOer.S_ITEM_CODE || cir.S_ITEM_CODE == outOer.S_ITEM_NAME))
                                .Select((lcr, cir, lo) => new Location
                                {
                                    S_AREA_CODE = lo.S_AREA_CODE,
                                    S_WH_CODE = lcr.S_TYPE,
                                    T_CREATE = lcr.T_CREATE,
                                    N_ROW = lo.N_ROW,
                                    N_COL = lcr.S_CNTR_CODE.StartsWith("TP") ? 0 : 1
                                }).ToList();
                        });
                            });
                        if (!List.Any())
                        {
                            LogHelper.Info($"备货单:{outOer.S_Work_NO} 库区中没有找到可用物料。");