111
cjs
2025-06-24 470d5135f9cb53898e167eeb4c7f74a80bb5f4dc
HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
@@ -1285,16 +1285,18 @@
            if (action)
            {
                //瓶盖库区,两层密集型库区  空满在同一个库区,需要区分不同排
                var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).First();
                if (areaInfo != null)
                var areaInfo = Settings.areaInfos.Where(a => a.areaName.Contains(areaName) && a.enable == 1).OrderBy(a => a.pri).ToList();
                if (areaInfo.Count > 0)
                {
                    foreach(var it in areaInfo)
                {
                    //库区货位约定:列号越小越靠里
                    LogHelper.Info($"入库算法01:area:{areaInfo.areaCode},itemCode:{itemCode}");
                        LogHelper.Info($"入库算法01:area:{it.areaCode},itemCode:{itemCode}");
                    try
                    {
                        if (result == null)
                        {
                            var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL)
                                var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == it.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL)
                                .PartitionBy(a => a.N_ROW).Take(1)
                                .ToList();
                            if (locInfo.Count > 0)
@@ -1360,7 +1362,7 @@
                                #region 查找所有数量是空的排
                                LogHelper.Info($"入库算法06:无可用货位,获取空排货位。", "WMSAlgoRithm");
                                //2.0 简化查询只查每一排第一列
                                var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).PartitionBy(a => a.N_ROW).ToList().Where(a => a.N_CURRENT_NUM == 0).ToList();
                                    var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == it.areaCode).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).PartitionBy(a => a.N_ROW).ToList().Where(a => a.N_CURRENT_NUM == 0).ToList();
                                //2.1 选一个空排
                                if (list.Count > 0)
                                {
@@ -1396,8 +1398,13 @@
                                        }
                                    }
                                }
                                else LogHelper.Info($"未获取到空排,库区编码:{areaInfo.areaCode}");
                                    else LogHelper.Info($"未获取到空排,库区编码:{it.areaCode}");
                                #endregion
                                }
                                if(result != null)
                                {
                                    break;
                            }
                        }
                    }
@@ -1407,6 +1414,8 @@
                        LogHelper.Error("GetLocationIn:" + ex.Message, ex);
                    }
                }
                }
                else
                {
                    LogHelper.Info($"入库任务:{areaName}未配置");
@@ -1414,11 +1423,13 @@
            }
            else
            {
                LogHelper.Info($"出库算法01:area:{areaName},itemCode:{itemCode}");
                var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).FirstOrDefault();
                if(areaInfo != null)
                var areaInfo = Settings.areaInfos.Where(a => a.areaName.Contains(areaName) && a.enable == 1).OrderBy(a => a.pri).ToList();
                if(areaInfo.Count > 0)
                {
                    var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList();
                    foreach(var it in areaInfo)
                    {
                        LogHelper.Info($"出库算法01:area:{it.areaName},itemCode:{itemCode}");
                        var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == it.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList();
                    if(locList.Count > 0)
                    {
                        LogHelper.Info($"出库算法02:查询到可出货位数量:{locList.Count}");
@@ -1440,7 +1451,7 @@
                                    if(endItemCode == itemCode)
                                    {
                                        //判断当前排有无锁
                                        var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "入库锁" || b.S_LOCK_STATE == "出库锁")).First();
                                            var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == it.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "入库锁" || b.S_LOCK_STATE == "出库锁")).First();
                                        if (lockInfo == null)
                                        {
                                            result = a;
@@ -1455,6 +1466,12 @@
                            }
                        }
                    }
                        if(result != null)
                        {
                            break;
                        }
                    }
                }
                else
                {