| | |
| | | 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) |
| | |
| | | #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) |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | else LogHelper.Info($"未获取到空排,库区编码:{areaInfo.areaCode}"); |
| | | else LogHelper.Info($"未获取到空排,库区编码:{it.areaCode}"); |
| | | #endregion |
| | | } |
| | | |
| | | if(result != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | |
| | | LogHelper.Error("GetLocationIn:" + ex.Message, ex); |
| | | } |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"入库任务:{areaName}未配置"); |
| | |
| | | } |
| | | 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}"); |
| | |
| | | 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; |
| | |
| | | } |
| | | } |
| | | } |
| | | if(result != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |