1
pulg
2025-07-05 aa9f03add1c43871c1fa7ad66d8122c8c8d161e0
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)
                        {