| | |
| | | WaveNo = a.WaveNo, |
| | | IsDespatch = a.IsDespatch, |
| | | Demo = a.Demo, |
| | | OrderCode = a.OrderCode, |
| | | |
| | | CreateUserName = c.RealName, |
| | | UpdateUserName = c.RealName, |
| | |
| | | inspectStatus = "1"; |
| | | break; |
| | | case "1"://领料出库 |
| | | if (house != "W02") |
| | | { |
| | | throw new Exception("领料出库只能选择原料库"); |
| | | } |
| | | //if (house != "W02") |
| | | //{ |
| | | // throw new Exception("领料出库只能选择原料库"); |
| | | //} |
| | | skuType = "(0,1,3)"; |
| | | inspectStatus = "1"; |
| | | break; |
| | |
| | | skuList = skuList.Where(m => m.SkuNo == "100088").ToList(); |
| | | } |
| | | skuStrList = skuList.Select(m => m.SkuNo).ToList(); |
| | | var areaStr = new List<string>() { "B06", "B07", "B09" }; |
| | | var areaStr = new List<string>() { "B06", "B07", "B09", "B24" }; |
| | | var stockRst = new StockServer(); |
| | | var stockDetailRst = new StockDetailServer(); |
| | | Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() |
| | |
| | | //} |
| | | break; |
| | | case "W02"://原料库 |
| | | if (skuList.Any(m => m.Type == "2")) |
| | | { |
| | | throw new Exception("仓库与出库物料不符"); |
| | | } |
| | | break; |
| | | case "W04"://平库 |
| | | if (skuList.Any(m => m.Type == "2")) |
| | | { |
| | | throw new Exception("仓库与出库物料不符"); |
| | |
| | | { |
| | | throw new Exception("未查询到出库单据信息"); |
| | | } |
| | | if (notice.Origin != "WMS" || notice.Status != "0") |
| | | if (notice.Status != "0")//notice.Origin != "WMS" || |
| | | { |
| | | throw new Exception("参数异常,请检查状态是否未等待执行或来源是否是WMS"); |
| | | throw new Exception("参数异常,请检查状态是否未等待执行"); |
| | | } |
| | | |
| | | //总库存信息 |
| | |
| | | //还需要分配的数量 |
| | | decimal needQty = detail.Qty - (detail.AllotQty == null ? 0 : decimal.Parse(detail.AllotQty.ToString())); |
| | | //库存明细 Status 0:待分配 1:部分分配 2:已分配 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == detail.SkuNo && (m.Qty - m.FrozenQty - m.LockQty + m.InspectQty) > 0 && (m.Status == "0" || m.Status == "1") && m.IsDel == "0").ToList(); |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == detail.SkuNo && (m.Qty - m.FrozenQty - m.LockQty + m.InspectQty) > 0 && (m.Status == "0" || m.Status == "1") && m.IsDel == "0" |
| | | && m.AreaNo != "B06" && m.AreaNo != "B07" && m.AreaNo != "B09" && m.AreaNo != "B24")//排除车间库存 |
| | | .ToList(); |
| | | |
| | | |
| | | //判断单号是否指定批次 |
| | |
| | | } |
| | | #region 包装信息 |
| | | |
| | | var pNum = 0;//托盘物品数量 |
| | | var bNum = 0;//箱物品数量 |
| | | var pNum = 0m;//托盘物品数量 |
| | | var bNum = 0m;//箱物品数量 |
| | | //公共方法获取包装数量 |
| | | new Common().GetPackQtyInfo(detail.PackagNo, ref pNum, ref bNum); |
| | | |
| | |
| | | |
| | | //取合适库存商品 |
| | | Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//托出库物品数 |
| | | var qty = 0m; |
| | | var qty = 0m;//分配数量 |
| | | var xQty = 0m;//下架数量 |
| | | var house = ""; |
| | | |
| | | //分配货物 |
| | |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now |
| | | }; |
| | | if (s.WareHouseNo == "W04") |
| | | { |
| | | allot.Status = "2";//待拣货 |
| | | xQty += allot.Qty; |
| | | } |
| | | exAllotList.Add(allot); |
| | | |
| | | s.LockQty += stockQtyDic[s.Id]; |
| | |
| | | { |
| | | s.Status = "1"; |
| | | } |
| | | |
| | | |
| | | var sd = Db.Updateable(s).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand(); |
| | | |
| | | } |
| | | detail.AllotQty += qty; |
| | | detail.AllotQty += qty;//分配数量 |
| | | detail.FactQty += xQty;//下架数量 |
| | | detail.UpdateUser = userId; |
| | | detail.UpdateTime = DateTime.Now; |
| | | if (detail.Status == "0") |
| | |
| | | //证明所有分配数量全部小于等于出库数量 不做修改 |
| | | break; |
| | | } |
| | | |
| | | var outPalletCount = exAllotList.Where(w => w.Status == "0").Count();//查找有无需要出库的托盘 |
| | | if (outPalletCount <= 0) |
| | | { |
| | | notice.Status = "3";//正在执行 |
| | | } |
| | | } |
| | | |
| | | notice.UpdateUser = userId; |
| | | notice.UpdateTime = DateTime.Now; |
| | | var zd = Db.Updateable(notice).ExecuteCommand(); |
| | |
| | | soDetailList.Add(soDetail); |
| | | } |
| | | d.AllotQty = 0; |
| | | d.FactQty = 0; |
| | | d.Status = "0"; |
| | | d.UpdateUser = userId; |
| | | d.UpdateTime = DateTime.Now; |
| | |
| | | m => m.SkuNo.Contains(msg.Trim()) |
| | | || m.SkuName.Contains(msg.Trim()) |
| | | || m.LocatNo.Contains(msg.Trim())) |
| | | .And(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && (m.Status == "0" || m.Status == "1")) |
| | | .And(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && (m.Status == "0" || m.Status == "1") |
| | | && m.AreaNo != "B06" && m.AreaNo != "B07" && m.AreaNo != "B09" && m.AreaNo != "B24")//排除车间库存 |
| | | .ToExpression();//注意 这一句 不能少 |
| | | |
| | | var list = Db.Queryable<DataStockDetail>().Where(item).Select(a => new StockDetailDto |
| | |
| | | //var stockz = Db.Queryable<DataStock>().First(d => d.IsDel == "0" && d.SkuNo == detail.SkuNo && d.LotNo == detail.LotNo); |
| | | |
| | | var allotList = new List<BllExportAllot>(); |
| | | decimal outQtys = 0; |
| | | decimal outQtys = 0;//分配数量 |
| | | decimal xQty = 0;//下架数量 |
| | | foreach (var st in model.StockList) |
| | | { |
| | | var stock = stockList.First(a => a.Id == st.StockId); |
| | |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now |
| | | }; |
| | | if (stock.WareHouseNo == "W04") |
| | | { |
| | | allot.Status = "2";//待拣货 |
| | | xQty += allot.Qty; |
| | | } |
| | | allotList.Add(allot); |
| | | } |
| | | else |
| | |
| | | } |
| | | Db.Insertable(allotList).ExecuteCommand(); |
| | | //修改单据明细 |
| | | detail.AllotQty += outQtys; |
| | | detail.AllotQty += outQtys;//分配数量 |
| | | detail.FactQty += xQty;//下架数量 |
| | | detail.UpdateUser = userId; |
| | | detail.UpdateTime = DateTime.Now; |
| | | if (detail.Status == "0") |
| | |
| | | else if (totalAllotQty < totalQty && totalAllotQty > 0) |
| | | { |
| | | notice.Status = "1";//证明分配数量小于等于出库数量 修改为部分分配 |
| | | } |
| | | |
| | | var outPalletCount = allotList.Where(w => w.Status == "0").Count();//查找有无需要出库的托盘 |
| | | if (outPalletCount <= 0) |
| | | { |
| | | notice.Status = "3";//正在执行 |
| | | } |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | } |
| | |
| | | |
| | | var tray2 = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == item2.SkuNo |
| | | && m.LotNo == item2.LotNo && !slotList.Contains(m.LocatNo) && m.PalletTags == item2.PalletTags && okLan.Contains(m.RoadwayNo)).ToList(); |
| | | foreach (var s in tray2) |
| | | if (tray2.Count > 0) |
| | | { |
| | | if (string.IsNullOrWhiteSpace(s.RoadwayNo))//判断是否在库外,如是跳过 |
| | | foreach (var s in tray2) |
| | | { |
| | | continue; |
| | | } |
| | | var lan = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == s.RoadwayNo).OrderBy(m => m.LocatNo).ToList(); |
| | | //判断是否有入库中、出库中、移入中、移出中 |
| | | if (lan.Count(m => m.Status == "2" || m.Status == "3" || m.Status == "4" || m.Status == "5") > 0) |
| | | { |
| | | continue; |
| | | } |
| | | if (lan.Count(m => m.Status == "0") > 0) |
| | | { |
| | | |
| | | var bol = GetBecomingLocation(s.RoadwayNo, ref location); |
| | | if (bol && !string.IsNullOrWhiteSpace(location)) |
| | | if (string.IsNullOrWhiteSpace(s.RoadwayNo))//判断是否在库外,如是跳过 |
| | | { |
| | | newAddress = location; |
| | | return newAddress; |
| | | continue; |
| | | } |
| | | var lan = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == s.RoadwayNo).OrderBy(m => m.LocatNo).ToList(); |
| | | //判断是否有入库中、出库中、移入中、移出中 |
| | | if (lan.Count(m => m.Status == "2" || m.Status == "3" || m.Status == "4" || m.Status == "5") > 0) |
| | | { |
| | | continue; |
| | | } |
| | | if (lan.Count(m => m.Status == "0") > 0) |
| | | { |
| | | |
| | | var bol = GetBecomingLocation(s.RoadwayNo, ref location); |
| | | if (bol && !string.IsNullOrWhiteSpace(location)) |
| | | { |
| | | newAddress = location; |
| | | return newAddress; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | } |
| | | if(string.IsNullOrEmpty(newAddress)) |
| | | { |
| | | //已有物品的巷道 |
| | | var roadwayHave = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.WareHouseNo == "W01").GroupBy(g => g.RoadwayNo).Select(s => s.RoadwayNo).ToList(); |
| | | //查找没有物品的巷道 |
| | | var roadwayNull = Db.Queryable<SysStorageRoadway>().Where(w => w.IsDel == "0" && w.WareHouseNo == "W01" && w.Status == "0" && okLan.Contains(w.RoadwayNo) && !roadwayHave.Contains(w.RoadwayNo)).Select(s => s.RoadwayNo).ToList(); |
| | | if (roadwayNull.Count > 0) |
| | | { |
| | | foreach (var itemRoad in roadwayNull) |
| | | { |
| | | var bol = GetBecomingLocation(itemRoad, ref location); |
| | | if (bol && !string.IsNullOrWhiteSpace(location)) |
| | | { |
| | | newAddress = location; |
| | | return newAddress; |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | foreach (var itemRoad in roadwayHave) |
| | | { |
| | | var bol = GetBecomingLocation(itemRoad, ref location); |
| | | if (bol && !string.IsNullOrWhiteSpace(location)) |
| | | { |
| | | newAddress = location; |
| | | return newAddress; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | if (slotModel[0].Column > aisleRow) |
| | | { |
| | | // 取最上面一排 |
| | | location = slotModel[0].LocatNo; |
| | | |
| | | } |
| | | else |
| | | { |
| | | // 取最下面一排 |
| | | |
| | | location = slotModel[slotModel.Count - 1].LocatNo; |
| | | } |
| | | else |
| | | { |
| | | // 取最上面一排 |
| | | location = slotModel[0].LocatNo; |
| | | } |
| | | |
| | | bl = true; |
| | | } |