1
pulg
2025-07-06 44fe437ed95b89a38fc78b2905073e085eeebf51
HH.WCS.QingXiNongfu/core/Monitor.cs
@@ -1197,71 +1197,38 @@
                                            if (CDlist.Contains(EdnRarea))
                                            {
                                                isCd = true;
                                                //inlockLis = LocationHelper.GetList<RowLock>(x => x.S_AREA_CODE == EdnRarea && x.S_LOCK_SRC == cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME && x.S_LOCK_STATE == "入库锁").ToList();
                                                //if (inlockLis.Count() > 0)
                                                //{
                                                //    inlock = inlockLis.FirstOrDefault();
                                                //}
                                                inlock = RGRow.FirstOrDefault();
                                                if (inlock != null)
                                                {
                                                    //当入库的任务能放满一排并且还有余的时候 开第二排
                                                    //先判断起点有多少相同的 能入的物料
                                                    if (_cl.S_AREA_CODE == "YWLRGDD")//判断起点是否是人工堆叠区
                                                    {
                                                        inlockLis = RGRow.FindAll(e => e.S_AREA_CODE == EdnRarea && e.S_LOCK_SRC == cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME).ToList();
                                                        //然后判断人工堆叠区需要入库多少托同品种物料 startMum
                                                        //货位 托盘 物料表联查
                                                        LogHelper.Info($"查起点有多少同品种的物料 开始");
                                                        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 == 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 == _clrel0.S_TYPE);
                                                        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($"起点要入CD的有多少托盘数量为{lstCanOutL.Count()}");
                                                        //判断终点排能入多少  少于入库托盘数则多开一排 EndMum
                                                        var EndMum = dbll.Queryable<Location>().Where(l => l.S_AREA_CODE == EdnRarea && l.N_CURRENT_NUM == 0 && l.S_LOCK_STATE == "无" && inlockLis.Select(e => e.N_ROW).ToList().Contains(l.N_ROW)).ToList();
                                                        LogHelper.Info($"终点CD排有多少空托能入{lstCanOutL.Count()}");
                                                        if (lstCanOutL.Count <= EndMum.Count())
                                                        {
                                                            arloclist = arloclist.FindAll(x => inlockLis.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList();
                                                        }
                                                        else
                                                        {
                                                            arloclist = arloclist.FindAll(x => !inlockLis.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList();
                                                            inlock = null;
                                                        }
                                                        LogHelper.Info($"查起点有多少同品种的物料 结束");
                                                    }
                                                    else
                                                    {
                                                        arloclist = arloclist.FindAll(x => x.N_ROW == inlock.N_ROW).ToList();
                                                    }
                                                }
                                                else
                                                {
                                                    if (_cl.S_AREA_CODE == "YWLRGDD")
                                                    {
                                                        //查询是否有已经入了的排
                                                        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 == 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)
                                                if (_cl.S_AREA_CODE == "YWLRGDD")
                                                {
                                                    //查询是否有已经入了的排
                                                    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 == 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 ProRow = lstCanOutLSta.GroupBy(e => e.N_ROW).Select(f => f.First()).ToList();
                                                        //这些排能入的货位数
                                                        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();
                                                        //查询每一排最大的列 小于这些列的 不允许入
                                                        foreach (var item in ProRow)
                                                        {
                                                            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)
                                                            var MaxCol = lstCanOutLSta.FindAll(d => d.N_ROW == item.N_ROW).OrderByDescending(f => f.N_COL).First();
                                                            EndMum.RemoveAll(f => f.N_ROW == item.N_ROW && f.N_COL < MaxCol.N_COL);
                                                        }
                                                        if (EndMum.Count() > 0)
                                                        {
                                                            if (lstCanOutL.Count() <= EndMum.Count())
                                                            {
                                                                if (lstCanOutL.Count() <= EndMum.Count())
                                                                {
                                                                    arloclist = arloclist.FindAll(x => lstCanOutL.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList();
                                                                }
                                                                arloclist = arloclist.FindAll(x => lstCanOutL.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList();
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            foreach (var rss in arloclist.GroupBy(x => x.N_ROW).OrderByDescending(x => x.Count(y => y.N_CURRENT_NUM > 0)).ThenBy(x => x.Key))
@@ -1485,6 +1452,7 @@
                    }
                }
                var locsFirst = locsFirstA.FindAll(x => x.S_NOTE.Contains("标签-") && x.S_TYPE == WJ_BQ.RK_BBHJQ);
                var SblocsFirst = locsFirstA.FindAll(x => x.S_NOTE.Contains("标签-") && x.S_NOTE.Contains("水") && x.S_TYPE == WJ_BQ.RK_BBHJQ);
                var SlocsFirst = locsFirstA.FindAll(x => x.S_NOTE.Contains("标签-") && x.S_TYPE == SX_BQ.RK_BBHJQ);
                var TKlocsFirst = locsFirstA.FindAll(x => x.S_NOTE.Contains("提扣-"));
                var PElocsFirst = locsFirstA.FindAll(x => x.S_NOTE.Contains("收缩膜-"));
@@ -1513,7 +1481,6 @@
                            // 标签出库。货架直接出到线边
                            YwlBQ_CreWJOutOrder();
                        }
                        // 标签无菌退库。 
                        YwlBQ_CreWJTK();
                    }
@@ -1531,7 +1498,8 @@
                        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(locsFirst, SX_BQ.RK_BQDDQ, SX_BQ.RK_BBHJQ);
                            //水标入库
                            YwlBQ_CreInwork(SblocsFirst, SX_BQ.RK_BQDDQ, SX_BQ.RK_BBHJQ);
                        }
                        if (yuworders.Any())
                        {
@@ -1562,7 +1530,7 @@
                        if (LocLock(SX_BQ.RK_BBHJQ))
                        {
                            //水线标签入库
                            YwlBQ_CreInwork(SlocsFirst, SX_BQ.RK_BQDDQ, SX_BQ.RK_BBHJQ);
                            YwlBQ_CreInwork(SblocsFirst, SX_BQ.RK_BQDDQ, SX_BQ.RK_BBHJQ);
                        }
                        if (tklist.Count() > 0)
                        {
@@ -1784,8 +1752,8 @@
                                        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)
                                        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)}");
                                        if (cir.S_ITEM_CODE == order.SQL_ItemCode && cir.S_ITEM_NAME == order.SQL_ItemName)
                                        {
                                            //plg 2025年6月13日 09:08:10 
                                            Temp = new locCntItem
@@ -1829,15 +1797,15 @@
                                        {
                                            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)
                                                {
                                                    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();
                                                }
                                            }
                                            //if (re)
                                            //{
                                            //    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();
                                            //    }
                                            //}
                                        }
                                    }
                                }