| | |
| | | { |
| | | throw new Exception("单据类型不可为空!"); |
| | | } |
| | | if (string.IsNullOrEmpty(model.Customer)) |
| | | { |
| | | throw new Exception("客户不可为空!"); |
| | | } |
| | | if (string.IsNullOrEmpty(model.OrderCode)) |
| | | //if (string.IsNullOrEmpty(model.Customer)) |
| | | //{ |
| | | // throw new Exception("客户不可为空!"); |
| | | //} |
| | | if (string.IsNullOrEmpty(model.OrderNo)) |
| | | { |
| | | throw new Exception("系统单号不可为空!"); |
| | | } |
| | |
| | | |
| | | //客户信息 |
| | | var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.Customer); |
| | | if (customer == null) |
| | | { |
| | | throw new Exception("客户不可为空!"); |
| | | } |
| | | //if (customer == null) |
| | | //{ |
| | | // throw new Exception("客户不可为空!"); |
| | | //} |
| | | var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo); |
| | | int? logisticsId = null; |
| | | if (logistics != null) |
| | |
| | | } |
| | | if (qty > d.Qty - q1) |
| | | { |
| | | q1 += d.Qty - q1; |
| | | dic.Add(stocks.First().Id, d.Qty - q1); |
| | | |
| | | q1 += d.Qty - q1; |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | var q2 = demo.Qty - demo.LockQty - demo.FrozenQty; |
| | | |
| | | if (q2 > d.Qty - q1) |
| | | if (q2 >= d.Qty - q1) |
| | | { |
| | | q1 += d.Qty - q1; |
| | | dic.Add(demo.Id, d.Qty - q1); |
| | | |
| | | q1 += d.Qty - q1; |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | |
| | | } |
| | | if (d.Qty >= q1) |
| | | if (d.Qty > q1) |
| | | { |
| | | stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); |
| | | if (stocks.Count == 0) |
| | |
| | | throw new Exception($"总库存中出库物料信息:{d.SkuNo}库存数量不足"); |
| | | } |
| | | var q2 = stocks.First().Qty - stocks.First().LockQty - stocks.First().FrozenQty; |
| | | if (q2 > d.Qty - q1) |
| | | if (q2 >= d.Qty - q1) |
| | | { |
| | | q1 += d.Qty - q1; |
| | | dic.Add(stocks.First().Id, d.Qty - q1); |
| | | |
| | | q1 += d.Qty - q1; |
| | | } |
| | | else |
| | | { |
| | |
| | | Type = model.SoType, |
| | | Status = "0", |
| | | Origin = model.Origin, |
| | | CustomerNo = model.Customer, |
| | | CustomerName = customer.CustomerName, |
| | | //CustomerNo = model.Customer, |
| | | //CustomerName = customer.CustomerName, |
| | | LogisticsId = logisticsId, |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | |
| | | } |
| | | var soInfo = new SoInfo() |
| | | { |
| | | OrderCode = notice.OrderCode, |
| | | OrderNo = notice.OrderCode, |
| | | SoDetails = list |
| | | }; |
| | | #region 通过接口发送至erp |
| | |
| | | break; |
| | | case "5"://中间品出库 |
| | | skuType = "(4)"; |
| | | inspectStatus = "1"; |
| | | inspectStatus = "0,1"; |
| | | break; |
| | | case "6"://代储出库 |
| | | skuType = "(0,1,2,3,4)"; |
| | |
| | | { |
| | | throw new Exception("未查询到出库单据信息"); |
| | | } |
| | | if (notice.Status != "4") |
| | | if (notice.Status != "4" && notice.Status != "3") |
| | | { |
| | | throw new Exception("参数异常,请检查状态是否为执行完成或订单关闭"); |
| | | throw new Exception("参数异常,请检查状态是否为正在执行或执行完成"); |
| | | } |
| | | //总库存信息 |
| | | var stockList = Db.Queryable<DataStock>().ToList(); |
| | |
| | | |
| | | foreach (var d in noticeDetail) |
| | | { |
| | | //更改库存明细锁定数量 |
| | | //var orders = dataContext.WmsExportOrder.Where(o => o.ExportDetailId == d.Id |
| | | // && o.ExportExecuteFlag != "4" && o.ExportExecuteFlag == "3" && o.pickingType == 0).ToList(); |
| | | //foreach (var o in orders) |
| | | //{ |
| | | // if (o.ExportQuantity > o.PickedNum) //判断拣货是否已拣完 |
| | | // { |
| | | // var pq = dataContext.WmsStockTray.Where(t => t.StockGoodId == o.ExportGoodsCode && t.StockStockCode == o.ExportStockCode); |
| | | |
| | | // if (string.IsNullOrWhiteSpace(o.ExportLotNo)) |
| | | // { |
| | | // pq = pq.Where(t => t.StockLotNo == null || t.StockLotNo == ""); |
| | | // } |
| | | // else |
| | | // { |
| | | // pq = pq.Where(t => t.StockLotNo == o.ExportLotNo); |
| | | // } |
| | | // var pallet = pq.FirstOrDefault(); |
| | | // //库存托盘信息锁定数量还原为未锁定 |
| | | // if (pq != null) |
| | | // { |
| | | // pallet.LockQuantity -= o.ExportQuantity.Value - o.PickedNum; |
| | | // pallet.StockQuantity += o.ExportQuantity.Value - o.PickedNum; |
| | | // } |
| | | // } |
| | | //} |
| | | |
| | | if (d.Qty != d.CompleteQty) |
| | | if (notice.Type == "0")//成品出库 |
| | | { |
| | | throw new Exception("当前单据明细中计划数量与拣货数量不符,请核实"); |
| | | } |
| | | #region 库存表减去锁定数量与总数量(PDA拣货的时候已经减去数量了) |
| | | /*var sq = stocks.Where(s => s.SkuNo == d.SkuNo); |
| | | if (!string.IsNullOrWhiteSpace(d.LotNo)) |
| | | { |
| | | sq = sq.Where(s => s.LotNo == d.LotNo); |
| | | } |
| | | else |
| | | { |
| | | sq = sq.Where(s => string.IsNullOrWhiteSpace(s.LotNo)); |
| | | } |
| | | var st = sq.FirstOrDefault(); |
| | | if (st != null) |
| | | { |
| | | if (d.CompleteQty <= d.Qty) |
| | | if (d.Qty != d.CompleteQty) |
| | | { |
| | | st.Qty += d.Qty - d.CompleteQty.Value; |
| | | throw new Exception("当前单据明细中计划数量与拣货数量不符,请核实"); |
| | | } |
| | | } |
| | | if (d.Qty < d.CompleteQty) |
| | | { |
| | | //更改库存明细锁定数量 |
| | | var allotList = Db.Queryable<BllExportAllot>().Where(o => o.SODetailNo == d.Id && o.Status == "3" && o.IsDel == "0").ToList(); |
| | | foreach (var o in allotList) |
| | | { |
| | | if (o.Qty > o.CompleteQty) //判断拣货是否已拣完 |
| | | { |
| | | var pq = Db.Queryable<DataStockDetail>().Where(t => t.IsDel == "0" && t.Id == o.StockId && t.SkuNo == o.SkuNo); |
| | | |
| | | if (string.IsNullOrWhiteSpace(o.LotNo)) |
| | | { |
| | | pq = pq.Where(t => string.IsNullOrWhiteSpace(t.LotNo)); |
| | | } |
| | | else |
| | | { |
| | | pq = pq.Where(t => t.LotNo == o.LotNo); |
| | | } |
| | | var pallet = pq.First(); |
| | | //库存托盘信息锁定数量还原为未锁定 |
| | | if (pq != null) |
| | | { |
| | | //pallet.Qty -= o.CompleteQty.Value - o.Qty; |
| | | pallet.LockQty -= o.Qty - o.CompleteQty.Value; |
| | | Db.Updateable(pallet).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | #region 库存表减去锁定数量与总数量(PDA拣货的时候已经减去数量了) |
| | | var sq = stocks.Where(s => s.SkuNo == d.SkuNo); |
| | | if (!string.IsNullOrWhiteSpace(d.LotNo)) |
| | | { |
| | | sq = sq.Where(s => s.LotNo == d.LotNo); |
| | | } |
| | | else |
| | | { |
| | | st.Qty -= d.CompleteQty.Value - d.Qty; |
| | | sq = sq.Where(s => string.IsNullOrWhiteSpace(s.LotNo)); |
| | | } |
| | | st.LockQty -= d.Qty; |
| | | st.Qty -= d.Qty; |
| | | //修改总库存表 |
| | | Db.Updateable(st).UpdateColumns(it => new { it.Qty, it.LockQty }).ExecuteCommand(); |
| | | }*/ |
| | | #endregion |
| | | if (notice.Type == "6")//代储 |
| | | { |
| | | sq = sq.Where(s => s.OwnerNo == notice.CustomerNo); |
| | | } |
| | | var st = sq.FirstOrDefault(); |
| | | if (st != null) |
| | | { |
| | | st.LockQty -= d.Qty - d.CompleteQty.Value; |
| | | //修改总库存表 |
| | | Db.Updateable(st).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); |
| | | } |
| | | #endregion |
| | | } |
| | | |
| | | } |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库单据", notice.SONo, "关单", $"关闭了单据号为{notice.SONo}的单据信息", userId); |
| | |
| | | var needQty = detail.Qty - detail.AllotQty; |
| | | //分配的出库数量 |
| | | var outQty = model.StockList.Select(s => s.Qty).ToList().Sum(); |
| | | if (outQty != needQty) |
| | | if (outQty < needQty) |
| | | { |
| | | throw new Exception("操作失败,出库数量与计划数量不一致!"); |
| | | throw new Exception("操作失败,出库数量不能大于计划数量!"); |
| | | } |
| | | } |
| | | |