| | |
| | | foreach (var item in noticeDetail) |
| | | { |
| | | //验证先进先出原则 |
| | | |
| | | var forData = data.Where(m => m.SkuNo == item.SkuNo && m.LotNo != item.LotNo && (m.Qty - m.FrozenQty - m.LockQty) > 0 && dataDetail.Contains(m.LotNo)).Select(m=>m.LotNo).ToList(); //获取当前物料的所有批次信息(排除单据的批次,防止单据所在批次锁定数量后验证小于等于0) |
| | | //获取当前物料的所有批次信息(排除单据的批次,防止单据所在批次锁定数量后验证小于等于0) |
| | | var forData = data.Where(m => m.SkuNo == item.SkuNo |
| | | && m.LotNo != item.LotNo && (m.Qty - m.FrozenQty - m.LockQty) > 0 |
| | | && dataDetail.Contains(m.LotNo)).Select(m=>m.LotNo).ToList(); |
| | | |
| | | forData.Add(item.LotNo); //集合添加单据的批次 |
| | | //获取排序后的第一个批次 |
| | |
| | | |
| | | //验证效期优先原则 |
| | | var forDataBox = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo && m.LotNo != item.LotNo && m.Qty > 0).ToList(); |
| | | var expirationTime = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.Qty > 0).OrderBy(m=>m.ExpirationTime).Select(m=>m.ExpirationTime).First(); //获取当前单据批次的最近效期 |
| | | var num = forDataBox.Count(m => m.ExpirationTime > expirationTime); //获取库存中其它批次效期大于当前单据批次的效期数量 |
| | | //判断是否大于0 |
| | | if (num>0) |
| | | //获取当前单据批次的最近效期 |
| | | var expirationTimedt = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo |
| | | && m.LotNo == item.LotNo && m.Qty > 0).ToList(); |
| | | if (expirationTimedt.Count > 0) |
| | | { |
| | | bl = false; |
| | | break; |
| | | var expirationTime = expirationTimedt.OrderBy(m => m.ExpirationTime).Select(m => m.ExpirationTime).First(); |
| | | //获取库存中其它批次效期大于当前单据批次的效期数量 |
| | | var num = forDataBox.Count(m => m.ExpirationTime > expirationTime); |
| | | //判断是否大于0 |
| | | if (num > 0) |
| | | { |
| | | bl = false; |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var dataDetailtime = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.InspectStatus == "1"). |
| | | Where(m => m.SkuNo == item.SkuNo |
| | | && m.LotNo == item.LotNo && m.Qty > 0) |
| | | .OrderBy(m => m.ExpirationTime) |
| | | .Select(m => m.ExpirationTime).First(); |
| | | |
| | | var num = forDataBox.Count(m => m.ExpirationTime > dataDetailtime); |
| | | //判断是否大于0 |
| | | if (num > 0) |
| | | { |
| | | bl = false; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | var exAllotList = new List<BllExportAllot>(); |
| | | var assign = new AllotSku(); |
| | | var specialSku = new List<string>();//特殊物料集合, 无需托盘上全部分配的 |
| | | Db.BeginTran(); |
| | | try |
| | | { |
| | |
| | | { |
| | | stockDetail = stockDetail.Where(m => m.InspectStatus == "2").ToList(); |
| | | } |
| | | if (notice.Type == "1" && !specialSku.Contains(detail.SkuNo)) |
| | | { |
| | | //分配整个托盘上的物料 只查询未分配的托盘 |
| | | stockDetail = stockDetail.Where(m => m.Status == "0").ToList(); |
| | | |
| | | } |
| | | if (stockDetail.Sum(m=>m.Qty-m.LockQty) < needQty) |
| | | { |
| | | throw new Exception("库存明细数量不足"); |
| | |
| | | Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//托出库物品数 |
| | | var qty = 0m; |
| | | //分配货物 |
| | | if (notice.Type == "1" && !specialSku.Contains(detail.SkuNo))//判断是否未领料出库 |
| | | { |
| | | //分配四楼备料投料的物料 |
| | | qty += assign.LingLiaoAllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic); |
| | | } |
| | | else |
| | | { |
| | | qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic); |
| | | } |
| | | |
| | | qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic, detail.LotNo, detail.IsMixBox); |
| | | foreach (var sc in stockQtyDic) |
| | | { |
| | | var s = stockDetail.FirstOrDefault(m => m.Id == sc.Key); |
| | |
| | | if (qty > detail.Qty) |
| | | { |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(d => d.IsDel == "0" && d.SkuNo == detail.SkuNo && d.LotNo == detail.LotNo); |
| | | var stock = Db.Queryable<DataStock>().First(d => d.IsDel == "0" |
| | | && d.SkuNo == detail.SkuNo |
| | | && d.LotNo == detail.LotNo); |
| | | stock.LockQty += qty-detail.Qty; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | |
| | |
| | | var zd = Db.Updateable(notice).ExecuteCommand(); |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库单据", notice.SONo, "分配", $"自动分配了单据号为{notice.SONo}的单据信息", userId); |
| | | var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库单据", |
| | | notice.SONo, "分配", $"自动分配了单据号为{notice.SONo}的单据信息", userId); |
| | | |
| | | if (zd > 0 && mx > 0 && fp > 0 && k) |
| | | { |