| | |
| | | return allotList2; |
| | | } |
| | | |
| | | //获取托盘中含有的执行中的单据 |
| | | public async Task<List<string>> GetRunNoticeList(string type) |
| | | { |
| | | if (type == "1")//平库出库获取单据 |
| | | { |
| | | var allotList = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "1" || m.Status =="0")).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); |
| | | return allotList; |
| | | } |
| | | //获取状态为待拣货或者部分拣货的出库单 |
| | | var allotList2 = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3")).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); |
| | | |
| | | //var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToList(); |
| | | //获取出库单据不为待拣货 执行完毕 订单关闭 等待执行的单据 |
| | | //var export = Db.Queryable<BllExportNotice>().Where(a => a.IsDel == "0" && a.Status == "1" || a.Status == "2" || a.Status == "3").Select(a => a.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToList(); |
| | | |
| | | return allotList2; |
| | | } |
| | | |
| | | //获取出库托盘上的物料批次(根据托盘码) |
| | | public async Task<List<DetailIdSkuLotNo>> GetSoSkuLotNoListByPallet(string palletNo, string soNo) |
| | | { |
| | |
| | | } |
| | | |
| | | //出库pda拣货 |
| | | public void SoSetPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string pickQty1, int userId) |
| | | public async Task SoSetPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string pickQty1, int userId) |
| | | { |
| | | Db.BeginTran(); |
| | | try |
| | |
| | | |
| | | if (string.IsNullOrWhiteSpace(soNo)) |
| | | { |
| | | throw new Exception("出库单据不能为空"); |
| | | throw Oops.Bah("出库单据不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(soDetailId)) |
| | | { |
| | | throw new Exception("出库物料-批次不能为空"); |
| | | throw Oops.Bah("出库物料-批次不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | throw Oops.Bah("托盘码不能为空"); |
| | | } |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) |
| | | { |
| | | throw new Exception("追溯条码和拣货数量不能同时输入"); |
| | | throw Oops.Bah("追溯条码和拣货数量不能同时输入"); |
| | | } |
| | | |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); |
| | | var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.SONo == soNo); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("未查询到该出库单的信息"); |
| | | throw Oops.Bah("未查询到该出库单的信息"); |
| | | } |
| | | if (notice.Status != "3") |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行,不能拣货"); |
| | | throw Oops.Bah("出库单的状态不是正在执行,不能拣货"); |
| | | } |
| | | //出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>() |
| | | .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | var noticeDetail = await Db.Queryable<BllExportNoticeDetail>() |
| | | .FirstAsync(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | if (noticeDetail == null) |
| | | { |
| | | throw new Exception("未查询到该出库单明细的信息"); |
| | | throw Oops.Bah("未查询到该出库单明细的信息"); |
| | | } |
| | | //出库分配信息 |
| | | var allot = Db.Queryable<BllExportAllot>().First(m => |
| | | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => |
| | | m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo && |
| | | m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); |
| | | if (allot == null) |
| | | { |
| | | throw new Exception("未查询到该托盘的分配信息"); |
| | | throw Oops.Bah("未查询到该托盘的分配信息"); |
| | | } |
| | | //剩余拣货数量(待拣减去已拣) |
| | | var needQty = allot.Qty - allot.CompleteQty; |
| | | |
| | | //库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存明细信息!"); |
| | | throw Oops.Bah("未查询到该托盘分配的库存明细信息!"); |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存信息!"); |
| | | throw Oops.Bah("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | #endregion |
| | | |
| | |
| | | { |
| | | List<DataBoxInfo> boxInfos; |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo);//找到托盘上所有箱码 |
| | | boxInfos = boxInfo.ToList(); |
| | | boxInfos = await boxInfo.ToListAsync(); |
| | | if (boxInfo.Count() <= 0) |
| | | { |
| | | throw new Exception("该托盘上没有可拣货的箱子"); |
| | | throw Oops.Bah("该托盘上没有可拣货的箱子"); |
| | | } |
| | | var boxQty = boxInfo.GroupBy(m => m.PalletNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList(); |
| | | var boxQty = await boxInfo.GroupBy(m => m.PalletNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); |
| | | if (boxQty[0] > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内剩余待拣数量"); |
| | | throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); |
| | | } |
| | | decimal pickQty = 0;//拣货的数量 |
| | | var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList(); |
| | | var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToListAsync(); |
| | | var comList = new List<BllCompleteDetail>(); |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3) && item.BoxNo3 != null) |
| | | { |
| | | throw new Exception($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | } |
| | | if (item.SkuNo != allot.SkuNo || item.LotNo != allot.LotNo) |
| | | { |
| | | throw new Exception("当前托盘上有其他不同物料批次,拣货失败"); |
| | | throw Oops.Bah("当前托盘上有其他不同物料批次,拣货失败"); |
| | | } |
| | | //添加拣货明细 |
| | | var completeDetail = new BllCompleteDetail() |
| | |
| | | comList.Add(completeDetail); |
| | | |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | await Db.Deleteable(item).ExecuteCommandAsync(); |
| | | pickQty += item.Qty; |
| | | } |
| | | //添加拣货明细 |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | await Db.Insertable(comList).ExecuteCommandAsync(); |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += pickQty; |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | allot.UpdateTime = DateTime.Now; |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | await Db.Updateable(allot).ExecuteCommandAsync(); |
| | | //删除库存明细 |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | //删除或修改库存 |
| | | stock.Qty -= pickQty; |
| | | stock.LockQty -= pickQty; |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | await Db.Deleteable(stock).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | //改变托盘状态为:未使用 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | throw Oops.Bah("未在托盘表中查询到托盘信息"); |
| | | } |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | | .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | var num = await Db.Queryable<BllExportNoticeDetail>() |
| | | .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | if (notice.IsWave == "1") |
| | | { |
| | | var waveNum = Db.Queryable<BllExportNotice>().Count(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo && m.Status != "4"); |
| | | var waveNum = await Db.Queryable<BllExportNotice>().CountAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo && m.Status != "4"); |
| | | if (waveNum == 0) |
| | | { |
| | | var wave = Db.Queryable<BllWaveMage>().First(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo); |
| | | var wave = await Db.Queryable<BllWaveMage>().FirstAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo); |
| | | if (wave != null) |
| | | { |
| | | wave.Status = "4"; |
| | | wave.UpdateUser = userId; |
| | | wave.UpdateTime = DateTime.Now; |
| | | Db.Updateable(wave).ExecuteCommand(); |
| | | await Db.Updateable(wave).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | } |
| | |
| | | var biaoShi = "0";//0:整箱拣货、1:散支拣货、2:数量拣货 |
| | | List<DataBoxInfo> boxInfos; |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); |
| | | if (boxInfo.Count() == 0) |
| | | if (await boxInfo.CountAsync() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | | throw Oops.Bah("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | boxInfos = boxInfo.ToList(); |
| | | boxInfos = await boxInfo.ToListAsync(); |
| | | |
| | | var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList(); |
| | | if (!string.IsNullOrWhiteSpace(boxNo3)) //散支拣货 |
| | |
| | | |
| | | if (boxInfos.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | | throw Oops.Bah("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | if (boxInfos.Count() > 1) |
| | | { |
| | | throw new Exception("该追溯支码的信息大于1条,信息错误,请核实!"); |
| | | throw Oops.Bah("该追溯支码的信息大于1条,信息错误,请核实!"); |
| | | } |
| | | |
| | | if (boxInfos.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw new Exception("该托盘与箱码没有绑定关系"); |
| | | throw Oops.Bah("该托盘与箱码没有绑定关系"); |
| | | } |
| | | var boxQty = boxInfos.First().Qty; |
| | | if (boxQty > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于剩余待拣数量"); |
| | | throw Oops.Bah("拣货数量不能大于剩余待拣数量"); |
| | | } |
| | | |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) |
| | | { |
| | | throw new Exception($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | if (boxInfo.Count() > 1) |
| | | { |
| | | throw new Exception("该箱码内存在支码不能进行数量拣货"); |
| | | throw Oops.Bah("该箱码内存在支码不能进行数量拣货"); |
| | | } |
| | | decimal boxQty = boxInfo.First().Qty; |
| | | if (Convert.ToInt32(pickQty1) > boxQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内数量"); |
| | | throw Oops.Bah("拣货数量不能大于箱内数量"); |
| | | } |
| | | if (Convert.ToInt32(pickQty1) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于剩余待拣数量"); |
| | | throw Oops.Bah("拣货数量不能大于剩余待拣数量"); |
| | | } |
| | | |
| | | biaoShi = "2"; |
| | |
| | | { |
| | | if (boxInfo.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码的信息"); |
| | | throw Oops.Bah("未查询到该箱码的信息"); |
| | | } |
| | | if (boxInfo.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw new Exception("该托盘与箱码没有绑定关系"); |
| | | throw Oops.Bah("该托盘与箱码没有绑定关系"); |
| | | } |
| | | var boxQty = boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList(); |
| | | var boxQty = await boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); |
| | | if (boxQty[0] > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内剩余待拣数量"); |
| | | throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); |
| | | } |
| | | |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo == item.BoxNo)) |
| | | { |
| | | throw new Exception($"当前{item.BoxNo}已拣货完成,请勿重复拣货"); |
| | | throw Oops.Bah($"当前{item.BoxNo}已拣货完成,请勿重复拣货"); |
| | | } |
| | | } |
| | | } |
| | |
| | | if (biaoShi != "2") |
| | | { |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | await Db.Deleteable(item).ExecuteCommandAsync(); |
| | | } |
| | | else//数量拣货 |
| | | { |
| | | if (decimal.Parse(pickQty1) == item.Qty) |
| | | { |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | await Db.Deleteable(item).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | item.Qty -= decimal.Parse(pickQty1); |
| | | item.BitBoxMark = "1";//零箱标识 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | pickQty += item.Qty; |
| | |
| | | foreach (var item in boxSurplusList) |
| | | { |
| | | item.BitBoxMark = "1"; |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | await Db.Insertable(comList).ExecuteCommandAsync(); |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += pickQty; |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | |
| | | { |
| | | //判断该托盘是否还存在物料 存在改为待回库 待回库完成后改为已完成 |
| | | } |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | await Db.Updateable(allot).ExecuteCommandAsync(); |
| | | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | |
| | | |
| | | if (stockDetail.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | stock.Qty -= pickQty; |
| | | stock.LockQty -= pickQty; |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | await Db.Deleteable(stock).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | var num2 = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | var num2 = await Db.Queryable<DataStockDetail>().CountAsync(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (num2 <= 0) |
| | | { |
| | | //改变托盘状态 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | throw Oops.Bah("未在托盘表中查询到托盘信息"); |
| | | } |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | } |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | | .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | var num = await Db.Queryable<BllExportNoticeDetail>() |
| | | .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | if (notice.IsWave == "1") |
| | | { |
| | | var waveNum = Db.Queryable<BllExportNotice>() |
| | | .Count(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo && m.Status != "4"); |
| | | var waveNum = await Db.Queryable<BllExportNotice>() |
| | | .CountAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo && m.Status != "4"); |
| | | if (waveNum == 0) |
| | | { |
| | | var wave = Db.Queryable<BllWaveMage>().First(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo); |
| | | var wave = await Db.Queryable<BllWaveMage>().FirstAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo); |
| | | if (wave != null) |
| | | { |
| | | wave.Status = "4"; |
| | | wave.UpdateUser = userId; |
| | | wave.UpdateTime = DateTime.Now; |
| | | Db.Updateable(wave).ExecuteCommand(); |
| | | await Db.Updateable(wave).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | } |
| | |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "拣货出库", soNo, "拣货", $"在PDA上对出库单号为:{soNo}的托盘码为:{palletNo}的拣货操作", userId); |
| | | Db.CommitTran(); |
| | | } |
| | | catch (AppFriendlyException e) |
| | | { |
| | | Db.RollbackTran(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | |
| | | } |
| | | |
| | | //出库pda拣货 |
| | | public void SoSetQtyPick(string soNo, string soDetailId, string palletNo, string PickQty, int userId) |
| | | public async Task SoSetQtyPick(string soNo, string soDetailId, string palletNo, string PickQty, int userId) |
| | | { |
| | | Db.BeginTran(); |
| | | try |
| | |
| | | |
| | | if (string.IsNullOrWhiteSpace(soNo)) |
| | | { |
| | | throw new Exception("出库单据不能为空"); |
| | | throw Oops.Bah("出库单据不能为空"); |
| | | } |
| | | //if (string.IsNullOrWhiteSpace(soDetailId)) |
| | | //{ |
| | |
| | | //} |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | throw Oops.Bah("托盘码不能为空"); |
| | | } |
| | | |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); |
| | | var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.SONo == soNo); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("未查询到该出库单的信息"); |
| | | throw Oops.Bah("未查询到该出库单的信息"); |
| | | } |
| | | if (notice.Status != "3") |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行,不能拣货"); |
| | | throw Oops.Bah("出库单的状态不是正在执行,不能拣货"); |
| | | } |
| | | //出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>() |
| | | .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | var noticeDetail = await Db.Queryable<BllExportNoticeDetail>() |
| | | .FirstAsync(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | if (noticeDetail == null) |
| | | { |
| | | throw new Exception("未查询到该出库单明细的信息"); |
| | | throw Oops.Bah("未查询到该出库单明细的信息"); |
| | | } |
| | | //出库分配信息 |
| | | var allot = Db.Queryable<BllExportAllot>().First(m => |
| | | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => |
| | | m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo && |
| | | m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); |
| | | if (allot == null) |
| | | { |
| | | throw new Exception("未查询到该托盘的分配信息"); |
| | | throw Oops.Bah("未查询到该托盘的分配信息"); |
| | | } |
| | | //剩余拣货数量(待拣减去已拣) |
| | | var needQty = allot.Qty - allot.CompleteQty; |
| | | if (int.Parse(PickQty) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于托内剩余待拣数量"); |
| | | throw Oops.Bah("拣货数量不能大于托内剩余待拣数量"); |
| | | } |
| | | |
| | | //库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存明细信息!"); |
| | | throw Oops.Bah("未查询到该托盘分配的库存明细信息!"); |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存信息!"); |
| | | throw Oops.Bah("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | #endregion |
| | | //获取当前托盘拣货明细 |
| | | var complete = Db.Queryable<BllCompleteDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.ExportAllotId == allot.Id && a.StockId == stockDetail.Id); |
| | | var complete = await Db.Queryable<BllCompleteDetail>().FirstAsync(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.ExportAllotId == allot.Id && a.StockId == stockDetail.Id); |
| | | |
| | | //判读是否存在拣货明细 |
| | | int isComplete = 0; |
| | |
| | | comList.Add(completeDetail); |
| | | |
| | | //添加拣货明细 |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | await Db.Insertable(comList).ExecuteCommandAsync(); |
| | | } |
| | | else if (isComplete == 1) |
| | | { |
| | |
| | | complete.UpdateUser = userId; |
| | | complete.UpdateTime = Db.GetDate(); |
| | | |
| | | Db.Updateable(complete).ExecuteCommand(); |
| | | await Db.Updateable(complete).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += int.Parse(PickQty); |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | allot.UpdateTime = DateTime.Now; |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | await Db.Updateable(allot).ExecuteCommandAsync(); |
| | | |
| | | int isDel = 0; |
| | | |
| | |
| | | } |
| | | if (stockDetail.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | isDel = 1; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | //删除或修改库存 |
| | | stock.Qty -= int.Parse(PickQty); |
| | | stock.LockQty -= int.Parse(PickQty); |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | await Db.Deleteable(stock).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //改变托盘状态为:未使用 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | throw Oops.Bah("未在托盘表中查询到托盘信息"); |
| | | } |
| | | |
| | | //判断托盘上物料是否拣货完毕 |
| | | if (isDel == 0) |
| | | { |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += int.Parse(PickQty); |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | | .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | var num = await Db.Queryable<BllExportNoticeDetail>() |
| | | .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | if (notice.IsWave == "1") |
| | | { |
| | | var waveNum = Db.Queryable<BllExportNotice>().Count(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo && m.Status != "4"); |
| | | var waveNum = await Db.Queryable<BllExportNotice>().CountAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo && m.Status != "4"); |
| | | if (waveNum <= 0) |
| | | { |
| | | var wave = Db.Queryable<BllWaveMage>().First(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo); |
| | | var wave = await Db.Queryable<BllWaveMage>().FirstAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo); |
| | | if (wave != null) |
| | | { |
| | | wave.Status = "4"; |
| | | wave.UpdateUser = userId; |
| | | wave.UpdateTime = DateTime.Now; |
| | | Db.Updateable(wave).ExecuteCommand(); |
| | | await Db.Updateable(wave).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | } |
| | |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | throw e; |
| | | } |
| | | } |
| | | |
| | |
| | | /// <param name="url"> </param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public string IssuePlnOutHouse(OutModePalletVm model, int userId, string url) |
| | | public async Task<string> IssuePlnOutHouse(OutModePalletVm model, int userId, string url) |
| | | { |
| | | try |
| | | { |
| | | string strMsg = ""; |
| | | var outDtoList = new List<OutCommandDto>(); //出库数据的集合 |
| | | //获取当前时间 |
| | | DateTime serverTime = Db.GetDate(); |
| | | //获取库存明细是否小于等于该垛数 |
| | | string str = "select * from DataStockDetail where IsDel = '0' and SkuNo = '100099' and Status = '0' "; |
| | | var stockDetail = Db.Ado.SqlQuery<DataStockDetail>(str); |
| | | //string str = "select * from DataStockDetail where IsDel = '0' and SkuNo = '100099' and Status = '0' "; |
| | | //var stockDetail = Db.Ado.SqlQuery<DataStockDetail>(str); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.SkuNo == "100099" && s.Status == "0").ToListAsync(); |
| | | if (stockDetail.Count > 0) |
| | | { |
| | | //判断是否大于需要垛数 |
| | | if (stockDetail.Count < int.Parse(model.Num)) |
| | | { |
| | | strMsg = "需要垛数大于库存垛数,请重新输入!"; |
| | | return strMsg; |
| | | throw Oops.Bah("需要垛数大于库存垛数,请重新输入!"); |
| | | } |
| | | } |
| | | //获取库存总表信息 |
| | | var stock = Db.Queryable<DataStock>().First(s => s.IsDel == "0" && s.SkuNo == "100099"); |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(s => s.IsDel == "0" && s.SkuNo == "100099"); |
| | | //验证库存总表是否为空 |
| | | if (stock == null) |
| | | { |
| | | strMsg = "库存信息不存在,请核查!"; |
| | | return strMsg; |
| | | throw Oops.Bah("库存信息不存在,请核查!"); |
| | | } |
| | | |
| | | int i = 0; |
| | |
| | | foreach (var s in stockDetail) |
| | | { |
| | | //获取储位信息 |
| | | var locat = Db.Queryable<SysStorageLocat>().First(l => l.LocatNo == s.LocatNo && l.IsDel == "0" && l.WareHouseNo == "W01"); |
| | | var locat = await Db.Queryable<SysStorageLocat>().FirstAsync(l => l.LocatNo == s.LocatNo && l.IsDel == "0" && l.WareHouseNo == "W01"); |
| | | |
| | | if (locat != null) |
| | | { |
| | |
| | | locat.UpdateTime = serverTime; //修改时间 |
| | | locat.UpdateUser = userId; //修改人 |
| | | //修改储位信息 |
| | | Db.Updateable(locat).ExecuteCommand(); |
| | | await Db.Updateable(locat).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //增加库存锁定数量 |
| | |
| | | stock.UpdateTime = serverTime; //修改时间 |
| | | stock.UpdateUser = userId; //修改人 |
| | | //修改库存总表信息 |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | |
| | | //增加库存明细锁定数量 |
| | | //s.AllotQty += |
| | |
| | | s.UpdateUser = userId; //修改人 |
| | | s.Status = "2"; //2 已分配 |
| | | //修改库存明细信息 |
| | | Db.Updateable(s).ExecuteCommand(); |
| | | await Db.Updateable(s).ExecuteCommandAsync(); |
| | | |
| | | #region 分配 |
| | | |
| | |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now |
| | | }; |
| | | Db.Insertable(allot).ExecuteCommand(); |
| | | await Db.Insertable(allot).ExecuteCommandAsync(); |
| | | |
| | | #endregion |
| | | |
| | |
| | | OutMode = model.OutMode, //目标地址 |
| | | Order = 1 |
| | | }); |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | await Db.Insertable(exTask).ExecuteCommandAsync(); |
| | | |
| | | #endregion |
| | | i += 1; |
| | |
| | | { |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | str += "下发成功"; |
| | | //str += "下发成功"; |
| | | } |
| | | if (wcsModel.StatusCode == -1) |
| | | { |
| | | new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); |
| | | throw new Exception(wcsModel.Msg); |
| | | throw Oops.Bah(wcsModel.Msg); |
| | | } |
| | | } |
| | | catch (AppFriendlyException e) |
| | | { |
| | | throw Oops.Bah(e.Message); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | return ""; |
| | | } |
| | | |
| | | } |
| | | |
| | | //获取平库托盘信息 |
| | | public List<Model.ModelDto.BoxInfo> GetPingKuInfoByPallet(string soNo, string palletNo) |
| | | public async Task<List<BoxInfo>> GetPingKuInfoByPallet(string soNo, string palletNo) |
| | | { |
| | | try |
| | | { |
| | | var info = Db.Queryable<BllExportAllot>().Where(m => m.SONo == soNo && m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (info.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到托盘分配下发的信息"); |
| | | } |
| | | |
| | | var data = info.GroupBy(m => new { m.SkuNo, m.SkuName, m.LotNo }).Select(m => new BoxInfo() |
| | | var info = Db.Queryable<BllExportAllot>() |
| | | .LeftJoin<DataStockDetail>((a, b) => a.PalletNo == b.PalletNo) |
| | | .Where(a=>a.IsDel == "0" && (a.Status == "0"||a.Status =="1") && a.SONo == soNo) |
| | | .GroupBy((a,b) => new { a.SkuNo, a.SkuName, a.LotNo}).Select((a,b) => new BoxInfo() |
| | | { |
| | | SkuNo = m.SkuNo, |
| | | SkuName = m.SkuName, |
| | | LotNo = m.LotNo |
| | | }).ToList(); |
| | | SkuNo = a.SkuNo, |
| | | SkuName = a.SkuName, |
| | | LotNo = a.LotNo |
| | | }).ToListAsync(); |
| | | var data = await info; |
| | | |
| | | return data; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | /*v var info = Db.Queryable<BllExportAllot>() |
| | | .LeftJoin<DataStockDetail>((a, b) => a.PalletNo == b.PalletNo) |
| | | .Where(a=>a.IsDel == "0" && (a.Status == "0"||a.Status =="1") && a.SONo == soNo) |
| | | .GroupBy((a,b) => new { a.SkuNo, a.SkuName, a.LotNo, a.PalletNo,b.LocatNo }).Select((a,b) => new BoxInfo() |
| | | { |
| | | PalletNo = a.PalletNo, |
| | | SkuNo = a.SkuNo, |
| | | SkuName = a.SkuName, |
| | | LotNo = a.LotNo, |
| | | LocatNo = b.LocatNo |
| | | }).ToListAsync(); |
| | | var data = await info;*/ |
| | | |
| | | return data; |
| | | } |
| | | |
| | | //获取平库单据中托盘位置信息 |
| | | public async Task<List<BoxInfo>> GetPingKuLocationInfo(string soNo,string skuno,string lotno) |
| | | { |
| | | |
| | | var info = Db.Queryable<BllExportAllot>() |
| | | .LeftJoin<DataStockDetail>((a, b) => a.PalletNo == b.PalletNo) |
| | | .LeftJoin<SysWareHouse>((a,b,c)=>b.WareHouseNo == c.WareHouseNo) |
| | | .LeftJoin<SysStorageArea>((a,b,c,d)=>b.AreaNo == d.AreaNo) |
| | | .Where(a => a.IsDel == "0" && (a.Status == "0" || a.Status == "1") && a.SONo == soNo && a.SkuNo == skuno && a.LotNo == lotno) |
| | | .GroupBy((a, b,c,d) => new { a.PalletNo, b.LocatNo,c.WareHouseName,d.AreaName }).Select((a, b,c,d) => new BoxInfo() |
| | | { |
| | | PalletNo = a.PalletNo, |
| | | LocatNo = b.LocatNo, |
| | | WareHouseName = c.WareHouseName, |
| | | AreaName = d.AreaName |
| | | }).ToListAsync(); |
| | | var data = await info; |
| | | |
| | | /*v var info = Db.Queryable<BllExportAllot>() |
| | | .LeftJoin<DataStockDetail>((a, b) => a.PalletNo == b.PalletNo) |
| | | .Where(a=>a.IsDel == "0" && (a.Status == "0"||a.Status =="1") && a.SONo == soNo) |
| | | .GroupBy((a,b) => new { a.SkuNo, a.SkuName, a.LotNo, a.PalletNo,b.LocatNo }).Select((a,b) => new BoxInfo() |
| | | { |
| | | PalletNo = a.PalletNo, |
| | | SkuNo = a.SkuNo, |
| | | SkuName = a.SkuName, |
| | | LotNo = a.LotNo, |
| | | LocatNo = b.LocatNo |
| | | }).ToListAsync(); |
| | | var data = await info;*/ |
| | | |
| | | return data; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <param name="soNo">单据号</param> |
| | | /// <param name="palletNo">托盘码</param> |
| | | /// <param name="userId">操作人</param> |
| | | public void PlaneExportSuccess(string soNo, string palletNo, int userId) |
| | | public async Task PlaneExportSuccess(string soNo, string palletNo, int userId) |
| | | { |
| | | #region 托盘信息 |
| | | |
| | | //获取托盘信息 |
| | | var pallet = await Db.Queryable<SysPallets>().FirstAsync(p => p.IsDel == "0" && p.PalletNo == palletNo); |
| | | //验证托盘信息是否为空 |
| | | if (pallet == null) |
| | | { |
| | | throw Oops.Bah("托盘信息不存在,请检查!"); |
| | | } |
| | | if (pallet.Status == "0") |
| | | { |
| | | throw Oops.Bah("托盘未使用,请检查!"); |
| | | } |
| | | #endregion |
| | | |
| | | #region 托盘是否在平库验证 |
| | | |
| | | var result = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.PalletNo == palletNo); |
| | | if (result == null) |
| | | { |
| | | throw Oops.Bah("库存信息中不存在该托盘信息,请检查!"); |
| | | } |
| | | |
| | | //if (result.WareHouseNo != "W02")//W02:零箱库 |
| | | //{ |
| | | // throw Oops.Bah("该托盘未在零箱库,请检查!"); |
| | | //} |
| | | |
| | | #endregion |
| | | |
| | | #region 验证储位状态是否正常 |
| | | |
| | | var locat = await Db.Queryable<SysStorageLocat>().FirstAsync(a => a.IsDel == "0" && a.LocatNo == result.LocatNo); |
| | | if (locat == null) |
| | | { |
| | | throw Oops.Bah("未获取到对应储位信息,请检查!"); |
| | | } |
| | | if (locat.Status != "3") |
| | | { |
| | | throw Oops.Bah("当前储位不是有物品,请检查!"); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | //获取库存明细信息 |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.PalletNo == palletNo).ToListAsync(); |
| | | //验证库存明细信息是否存在 |
| | | if (stockDetail == null) |
| | | { |
| | | throw Oops.Bah("库存明细不存在,请检查库存信息!"); |
| | | } |
| | | |
| | | Db.BeginTran(); |
| | | |
| | | try |
| | | { |
| | | #region 托盘信息 |
| | | |
| | | //获取托盘信息 |
| | | var pallet = Db.Queryable<SysPallets>().First(p => p.IsDel == "0" && p.PalletNo == palletNo); |
| | | //验证托盘信息是否为空 |
| | | if (pallet == null) |
| | | foreach (var item in stockDetail) |
| | | { |
| | | throw new Exception("托盘信息不存在,请检查!"); |
| | | } |
| | | if (pallet.Status == "0") |
| | | { |
| | | throw new Exception("托盘未使用,请检查!"); |
| | | } |
| | | #endregion |
| | | |
| | | #region 托盘是否在平库验证 |
| | | |
| | | var result = Db.Queryable<DataStockDetail>().First(m => m.PalletNo == palletNo); |
| | | if (result == null) |
| | | { |
| | | throw new Exception("库存信息中不存在该托盘信息,请检查!"); |
| | | } |
| | | |
| | | if (result.WareHouseNo != "W02")//W02:零箱库 |
| | | { |
| | | throw new Exception("该托盘未在零箱库,请检查!"); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 验证储位状态是否正常 |
| | | |
| | | var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.LocatNo == result.LocatNo); |
| | | if (locat == null) |
| | | { |
| | | throw new Exception("未获取到对应储位信息,请检查!"); |
| | | } |
| | | if (locat.Status != "1") |
| | | { |
| | | throw new Exception("当前储位不是有物品,请检查!"); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | //获取库存明细信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.PalletNo == palletNo).ToList(); |
| | | //验证库存明细信息是否存在 |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("库存明细不存在,请检查库存信息!"); |
| | | } |
| | | |
| | | Db.BeginTran(); |
| | | |
| | | try |
| | | { |
| | | foreach (var item in stockDetail) |
| | | if (item.SkuNo == "100099")//判断是否是空托出库 |
| | | { |
| | | if (item.SkuNo == "100099")//判断是否是空托出库 |
| | | //判断总库存是否为0,如果为0删除 否则减去数量 |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(m => m.SkuNo == "100099"); |
| | | |
| | | if (stock != null) |
| | | { |
| | | //判断总库存是否为0,如果为0删除 否则减去数量 |
| | | var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099"); |
| | | |
| | | if (stock != null) |
| | | if (item.LockQty != null) |
| | | { |
| | | if (item.LockQty != null) |
| | | { |
| | | stock.Qty -= item.LockQty.Value; |
| | | stock.LockQty -= item.LockQty.Value; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | } |
| | | |
| | | if (stock.Qty == 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | } |
| | | stock.Qty -= item.LockQty.Value; |
| | | stock.LockQty -= item.LockQty.Value; |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //托盘状态改为未使用 |
| | | var sCode = Db.Queryable<SysPallets>().First(m => m.PalletNo == item.PalletNo); |
| | | if (sCode != null) |
| | | if (stock.Qty == 0) |
| | | { |
| | | sCode.Status = "0"; |
| | | Db.Updateable(sCode).ExecuteCommand(); |
| | | await Db.Deleteable(stock).ExecuteCommandAsync(); |
| | | } |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | |
| | | continue; |
| | | } |
| | | item.LocatNo = "";//储位更改(改为空) |
| | | item.WareHouseNo = "";//所属仓库更改(改为空) |
| | | item.RoadwayNo = "";//所属巷道更改(改为空) |
| | | item.AreaNo = "";//所属区域更改(改为空) |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | //变更储位状态 |
| | | locat.Status = "0";//储位更改(改为空储位) |
| | | Db.Updateable(locat).ExecuteCommand(); |
| | | |
| | | //出库流水(更改状态) |
| | | var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "1" && m.PalletNo == palletNo && m.SONo == soNo).ToList(); |
| | | |
| | | foreach (var item in allot) |
| | | { |
| | | if (item.SkuNo == "100099") |
| | | //托盘状态改为未使用 |
| | | var sCode = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == item.PalletNo); |
| | | if (sCode != null) |
| | | { |
| | | item.Status = "5"; |
| | | item.CompleteQty += stockDetail[0].Qty; |
| | | sCode.Status = "0"; |
| | | await Db.Updateable(sCode).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | item.Status = "2"; |
| | | } |
| | | await Db.Deleteable(item).ExecuteCommandAsync(); |
| | | |
| | | continue; |
| | | } |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | |
| | | #region 添加出库操作日志记录信息 |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("出库作业", "拣货明细", soNo, "完成", $"用PDA完成了单据号为{soNo}的平库出库", userId); |
| | | |
| | | #endregion |
| | | |
| | | Db.CommitTran(); |
| | | item.LocatNo = "";//储位更改(改为空) |
| | | item.WareHouseNo = "";//所属仓库更改(改为空) |
| | | item.RoadwayNo = "";//所属巷道更改(改为空) |
| | | item.AreaNo = "";//所属区域更改(改为空) |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | catch (Exception e) |
| | | //变更储位状态 |
| | | locat.Status = "0";//储位更改(改为空储位) |
| | | await Db.Updateable(locat).ExecuteCommandAsync(); |
| | | |
| | | //出库流水(更改状态) |
| | | var allot = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "1" && m.PalletNo == palletNo && m.SONo == soNo).ToListAsync(); |
| | | |
| | | foreach (var item in allot) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | if (item.SkuNo == "100099") |
| | | { |
| | | item.Status = "5"; |
| | | item.CompleteQty += stockDetail[0].Qty; |
| | | } |
| | | else |
| | | { |
| | | item.Status = "2"; |
| | | } |
| | | |
| | | } |
| | | await Db.Updateable(allot).ExecuteCommandAsync(); |
| | | |
| | | #region 添加出库操作日志记录信息 |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("出库作业", "拣货明细", soNo, "完成", $"用PDA完成了单据号为{soNo}的平库出库", userId); |
| | | |
| | | #endregion |
| | | |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | Db.RollbackTran(); |
| | | throw e; |
| | | } |
| | | } |
| | | |
| | | //根据托盘号获取取样类型 |
| | | public string GetSampleType(string palletNo) |
| | | public async Task<string> GetSampleType(string palletNo) |
| | | { |
| | | try |
| | | var type = ""; |
| | | var detail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (detail == null) |
| | | { |
| | | var type = ""; |
| | | var detail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (detail == null) |
| | | { |
| | | throw new Exception("当前托盘未在库存中"); |
| | | } |
| | | //怎么判断当前托盘是库外要取样的托盘,正常出库剩余托盘目前这种情况也能拣货啊,也没有分配信息 |
| | | var allot = Db.Queryable<BllExportAllot>().First(m => |
| | | m.IsDel == "0" && m.PalletNo == palletNo && m.Status != "5" && m.Status != "6"); |
| | | if (allot != null) |
| | | { |
| | | var soNo = Db.Queryable<BllExportNotice>() |
| | | .First(m => m.IsDel == "0" && m.SONo == allot.SONo); |
| | | if (soNo == null) |
| | | { |
| | | throw new Exception("未找到托盘上出库单据信息"); |
| | | } |
| | | if (soNo.Type != "3") |
| | | { |
| | | throw new Exception("该托盘不是取样托盘"); |
| | | } |
| | | type = "0";//库内取样 |
| | | } |
| | | else |
| | | { |
| | | //判断当前托盘是否是在平库或库外 |
| | | type = "1";//库前取样 |
| | | } |
| | | return type; |
| | | throw Oops.Bah("当前托盘未在库存中"); |
| | | } |
| | | catch (Exception e) |
| | | //怎么判断当前托盘是库外要取样的托盘,正常出库剩余托盘目前这种情况也能拣货啊,也没有分配信息 |
| | | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => |
| | | m.IsDel == "0" && m.PalletNo == palletNo && m.Status != "5" && m.Status != "6"); |
| | | if (allot != null) |
| | | { |
| | | throw new Exception(e.Message); |
| | | var soNo = await Db.Queryable<BllExportNotice>() |
| | | .FirstAsync(m => m.IsDel == "0" && m.SONo == allot.SONo); |
| | | if (soNo == null) |
| | | { |
| | | throw Oops.Bah("未找到托盘上出库单据信息"); |
| | | } |
| | | if (soNo.Type != "3") |
| | | { |
| | | throw Oops.Bah("该托盘不是取样托盘"); |
| | | } |
| | | type = "0";//库内取样 |
| | | } |
| | | else |
| | | { |
| | | //判断当前托盘是否是在平库或库外 |
| | | type = "1";//库前取样 |
| | | } |
| | | return type; |
| | | } |
| | | |
| | | //根据托盘号获取入库单据 |
| | | public List<string> GetAsnNoByPallet(string palletNo) |
| | | public async Task<List<string>> GetAsnNoByPallet(string palletNo) |
| | | { |
| | | try |
| | | var type = ""; |
| | | var detail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (detail == null) |
| | | { |
| | | var type = ""; |
| | | var detail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (detail == null) |
| | | { |
| | | throw new Exception("当前托盘未在库存中"); |
| | | } |
| | | throw Oops.Bah("当前托盘未在库存中"); |
| | | } |
| | | |
| | | var list = new List<string>(); |
| | | if (string.IsNullOrWhiteSpace(detail.ASNNo)) |
| | | { |
| | | throw new Exception("未查询到该托盘的入库单信息"); |
| | | } |
| | | list.Add(detail.ASNNo); |
| | | return list; |
| | | } |
| | | catch (Exception e) |
| | | var list = new List<string>(); |
| | | if (string.IsNullOrWhiteSpace(detail.ASNNo)) |
| | | { |
| | | throw new Exception(e.Message); |
| | | throw Oops.Bah("未查询到该托盘的入库单信息"); |
| | | } |
| | | list.Add(detail.ASNNo); |
| | | return list; |
| | | } |
| | | |
| | | //取样出库拣货(标签) |
| | | public void SampleSoSetPick(string soType, string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string pickQty1, string asnNo, int userId) |
| | | public async Task SampleSoSetPick(string soType, string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, |
| | | string pickQty1, string asnNo, int userId) |
| | | { |
| | | Db.BeginTran(); |
| | | try |
| | | { |
| | | if (string.IsNullOrWhiteSpace(soType)) |
| | | { |
| | | throw new Exception("取样标识不能为空"); |
| | | throw Oops.Bah("取样标识不能为空"); |
| | | } |
| | | |
| | | //soType: 0库内取样,有出库单及分配信息; 1库前取样,反向添加出库单及分配信息 |
| | |
| | | |
| | | if (string.IsNullOrWhiteSpace(asnNo)) |
| | | { |
| | | throw new Exception("入库单不能为空"); |
| | | throw Oops.Bah("入库单不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | throw Oops.Bah("托盘码不能为空"); |
| | | } |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) |
| | | { |
| | | throw new Exception("追溯条码和拣货数量不能同时输入"); |
| | | throw Oops.Bah("追溯条码和拣货数量不能同时输入"); |
| | | } |
| | | //先判断是否是库外取样托盘 |
| | | var allot = Db.Queryable<BllExportAllot>().First(m => |
| | | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => |
| | | m.IsDel == "0" && m.PalletNo == palletNo && m.Status != "5" && m.Status != "6"); |
| | | if (allot != null) |
| | | { |
| | | throw new Exception("当前托盘不属于库前取样"); |
| | | throw Oops.Bah("当前托盘不属于库前取样"); |
| | | } |
| | | |
| | | |
| | | //库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.ASNNo == asnNo && m.PalletNo == palletNo); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == asnNo && m.PalletNo == palletNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未查询到该托盘的库存明细信息!"); |
| | | throw Oops.Bah("未查询到该托盘的库存明细信息!"); |
| | | } |
| | | |
| | | var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == stockDetail.SkuNo); |
| | | if (sku == null) |
| | | { |
| | | throw new Exception("未查询到当前托盘上的物料信息"); |
| | | throw Oops.Bah("未查询到当前托盘上的物料信息"); |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存信息!"); |
| | | throw Oops.Bah("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.AsnSampleNo == asnNo); |
| | | var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.AsnSampleNo == asnNo); |
| | | //创建出库单 |
| | | if (notice == null || notice.Status == "6") |
| | | { |
| | |
| | | //获取自增单据号 |
| | | billNo = new Common().GetMaxNo("SO"); |
| | | var no = billNo; |
| | | bl = Db.Queryable<BllExportNotice>().Any(m => m.SONo == no); |
| | | bl = await Db.Queryable<BllExportNotice>().AnyAsync(m => m.SONo == no); |
| | | } while (bl); |
| | | |
| | | |
| | |
| | | CreateUser = userId, |
| | | }; |
| | | |
| | | var n = Db.Insertable(addNotice).ExecuteReturnEntity(); |
| | | var n = await Db.Insertable(addNotice).ExecuteReturnEntityAsync(); |
| | | notice = n; |
| | | } |
| | | |
| | | //创建出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.SONo == notice.SONo && m.SkuNo == stockDetail.SkuNo && m.LotNo.Contains(stockDetail.LotNo)); |
| | | var noticeDetail = await Db.Queryable<BllExportNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.SONo == notice.SONo && m.SkuNo == stockDetail.SkuNo && m.LotNo.Contains(stockDetail.LotNo)); |
| | | if (noticeDetail == null) |
| | | { |
| | | var addNoticeDetail = new BllExportNoticeDetail() |
| | |
| | | CreateUser = userId, |
| | | |
| | | }; |
| | | var m = Db.Insertable(addNoticeDetail).ExecuteReturnEntity(); |
| | | var m = await Db.Insertable(addNoticeDetail).ExecuteReturnEntityAsync(); |
| | | noticeDetail = m; |
| | | } |
| | | //出库分配信息 |
| | | var allot2 = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.Status == "5" && m.SONo == notice.SONo && m.PalletNo == palletNo); |
| | | var allot2 = await Db.Queryable<BllExportAllot>().FirstAsync(m => m.IsDel == "0" && m.Status == "5" && m.SONo == notice.SONo && m.PalletNo == palletNo); |
| | | if (allot2 == null) |
| | | { |
| | | //添加分配表信息 |
| | |
| | | UpdateTime = DateTime.Now |
| | | }; |
| | | |
| | | var fp = Db.Insertable(addAllot).ExecuteReturnEntity(); |
| | | var fp = await Db.Insertable(addAllot).ExecuteReturnEntityAsync(); |
| | | allot2 = fp; |
| | | } |
| | | |
| | |
| | | var biaoShi = "0";//0:整箱拣货、1:散支拣货、2:数量拣货 |
| | | List<DataBoxInfo> boxInfos; |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); |
| | | if (boxInfo.Count() == 0) |
| | | if (await boxInfo.CountAsync() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | | throw Oops.Bah("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | boxInfos = boxInfo.ToList(); |
| | | var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot2.Id && m.PalletNo == palletNo).ToList(); |
| | | boxInfos = await boxInfo.ToListAsync(); |
| | | var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot2.Id && m.PalletNo == palletNo).ToListAsync(); |
| | | if (!string.IsNullOrWhiteSpace(boxNo3)) //散支拣货 |
| | | { |
| | | boxInfos = boxInfos.Where(m => m.BoxNo3 == boxNo3).ToList(); |
| | | |
| | | if (boxInfos.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | | throw Oops.Bah("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | if (boxInfos.Count() > 1) |
| | | { |
| | | throw new Exception("该追溯支码的信息大于1条,信息错误,请核实!"); |
| | | throw Oops.Bah("该追溯支码的信息大于1条,信息错误,请核实!"); |
| | | } |
| | | |
| | | if (boxInfos.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw new Exception("该托盘与箱码没有绑定关系"); |
| | | throw Oops.Bah("该托盘与箱码没有绑定关系"); |
| | | } |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) |
| | | { |
| | | throw new Exception($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | } |
| | | } |
| | | biaoShi = "1"; |
| | |
| | | { |
| | | if (boxInfo.Count() > 1) |
| | | { |
| | | throw new Exception("该箱码内存在支码不能进行数量拣货"); |
| | | throw Oops.Bah("该箱码内存在支码不能进行数量拣货"); |
| | | } |
| | | decimal boxQty = boxInfo.First().Qty; |
| | | if (Convert.ToInt32(pickQty1) > boxQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内数量"); |
| | | throw Oops.Bah("拣货数量不能大于箱内数量"); |
| | | } |
| | | |
| | | biaoShi = "2"; |
| | |
| | | { |
| | | if (boxInfo.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码的信息"); |
| | | throw Oops.Bah("未查询到该箱码的信息"); |
| | | } |
| | | if (boxInfo.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw new Exception("该托盘与箱码没有绑定关系"); |
| | | throw Oops.Bah("该托盘与箱码没有绑定关系"); |
| | | } |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo == item.BoxNo)) |
| | | { |
| | | throw new Exception($"当前{item.BoxNo}已拣货完成,请勿重复拣货"); |
| | | throw Oops.Bah($"当前{item.BoxNo}已拣货完成,请勿重复拣货"); |
| | | } |
| | | } |
| | | } |
| | |
| | | if (biaoShi != "2") |
| | | { |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | await Db.Deleteable(item).ExecuteCommandAsync(); |
| | | } |
| | | else//数量拣货 |
| | | { |
| | | if (decimal.Parse(pickQty1) == item.Qty) |
| | | { |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | await Db.Deleteable(item).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | item.Qty -= decimal.Parse(pickQty1); |
| | | item.BitBoxMark = "1";//零箱标识 |
| | | item.InspectMark = "1";//抽检箱标识 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | pickQty += biaoShi == "2" ? decimal.Parse(pickQty1) : item.Qty; |
| | |
| | | { |
| | | item.BitBoxMark = "1"; |
| | | item.InspectMark = "1"; |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | await Db.Insertable(comList).ExecuteCommandAsync(); |
| | | //修改出库分配信息 |
| | | allot2.Qty += pickQty; |
| | | allot2.CompleteQty += pickQty; |
| | | Db.Updateable(allot2).ExecuteCommand(); |
| | | await Db.Updateable(allot2).ExecuteCommandAsync(); |
| | | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | |
| | | |
| | | if (stockDetail.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | stock.Qty -= pickQty; |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | await Db.Deleteable(stock).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | var num2 = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | var num2 = await Db.Queryable<DataStockDetail>().CountAsync(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (num2 <= 0) |
| | | { |
| | | //改变托盘状态 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | throw Oops.Bah("未在托盘表中查询到托盘信息"); |
| | | } |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | } |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.Qty += pickQty; |
| | |
| | | noticeDetail.FactQty += pickQty; |
| | | noticeDetail.CompleteQty += pickQty; |
| | | noticeDetail.Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * noticeDetail.Qty; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | | |
| | | } |
| | | else if (soType == "0") |
| | |
| | | |
| | | if (string.IsNullOrWhiteSpace(soNo)) |
| | | { |
| | | throw new Exception("出库单据不能为空"); |
| | | throw Oops.Bah("出库单据不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(soDetailId)) |
| | | { |
| | | throw new Exception("出库物料-批次不能为空"); |
| | | throw Oops.Bah("出库物料-批次不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | throw Oops.Bah("托盘码不能为空"); |
| | | } |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) |
| | | { |
| | | throw new Exception("追溯条码和拣货数量不能同时输入"); |
| | | throw Oops.Bah("追溯条码和拣货数量不能同时输入"); |
| | | } |
| | | |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); |
| | | var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.SONo == soNo); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("未查询到该出库单的信息"); |
| | | throw Oops.Bah("未查询到该出库单的信息"); |
| | | } |
| | | if (notice.Status != "3") |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行,不能拣货"); |
| | | throw Oops.Bah("出库单的状态不是正在执行,不能拣货"); |
| | | } |
| | | //出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>() |
| | | .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | var noticeDetail = await Db.Queryable<BllExportNoticeDetail>() |
| | | .FirstAsync(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | if (noticeDetail == null) |
| | | { |
| | | throw new Exception("未查询到该出库单明细的信息"); |
| | | throw Oops.Bah("未查询到该出库单明细的信息"); |
| | | } |
| | | //出库分配信息 |
| | | var allot = Db.Queryable<BllExportAllot>().First(m => |
| | | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => |
| | | m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo && |
| | | m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); |
| | | if (allot == null) |
| | | { |
| | | throw new Exception("未查询到该托盘的分配信息"); |
| | | throw Oops.Bah("未查询到该托盘的分配信息"); |
| | | } |
| | | //剩余拣货数量(待拣减去已拣) |
| | | var needQty = allot.Qty - allot.CompleteQty; |
| | | |
| | | //库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存明细信息!"); |
| | | throw Oops.Bah("未查询到该托盘分配的库存明细信息!"); |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存信息!"); |
| | | throw Oops.Bah("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | var biaoShi = "0";//0:整箱拣货、1:散支拣货、2:数量拣货 |
| | | List<DataBoxInfo> boxInfos; |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); |
| | | if (boxInfo.Count() == 0) |
| | | if (await boxInfo.CountAsync() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | | throw Oops.Bah("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | boxInfos = boxInfo.ToList(); |
| | | var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList(); |
| | | boxInfos = await boxInfo.ToListAsync(); |
| | | var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToListAsync(); |
| | | if (!string.IsNullOrWhiteSpace(boxNo3)) //散支拣货 |
| | | { |
| | | boxInfos = boxInfos.Where(m => m.BoxNo3 == boxNo3).ToList(); |
| | | |
| | | if (boxInfos.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | | throw Oops.Bah("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | if (boxInfos.Count() > 1) |
| | | { |
| | | throw new Exception("该追溯支码的信息大于1条,信息错误,请核实!"); |
| | | throw Oops.Bah("该追溯支码的信息大于1条,信息错误,请核实!"); |
| | | } |
| | | |
| | | if (boxInfos.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw new Exception("该托盘与箱码没有绑定关系"); |
| | | throw Oops.Bah("该托盘与箱码没有绑定关系"); |
| | | } |
| | | var boxQty = boxInfos.First().Qty; |
| | | if (boxQty > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于剩余待拣数量"); |
| | | throw Oops.Bah("拣货数量不能大于剩余待拣数量"); |
| | | } |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) |
| | | { |
| | | throw new Exception($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | } |
| | | } |
| | | biaoShi = "1"; |
| | |
| | | { |
| | | if (boxInfo.Count() > 1) |
| | | { |
| | | throw new Exception("该箱码内存在支码不能进行数量拣货"); |
| | | throw Oops.Bah("该箱码内存在支码不能进行数量拣货"); |
| | | } |
| | | decimal boxQty = boxInfo.First().Qty; |
| | | if (Convert.ToInt32(pickQty1) > boxQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内数量"); |
| | | throw Oops.Bah("拣货数量不能大于箱内数量"); |
| | | } |
| | | if (Convert.ToInt32(pickQty1) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于剩余待拣数量"); |
| | | throw Oops.Bah("拣货数量不能大于剩余待拣数量"); |
| | | } |
| | | |
| | | biaoShi = "2"; |
| | |
| | | { |
| | | if (boxInfo.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码的信息"); |
| | | throw Oops.Bah("未查询到该箱码的信息"); |
| | | } |
| | | if (boxInfo.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw new Exception("该托盘与箱码没有绑定关系"); |
| | | throw Oops.Bah("该托盘与箱码没有绑定关系"); |
| | | } |
| | | var boxQty = boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList(); |
| | | if (boxQty[0] > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内剩余待拣数量"); |
| | | throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); |
| | | } |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo == item.BoxNo)) |
| | | { |
| | | throw new Exception($"当前{item.BoxNo}已拣货完成,请勿重复拣货"); |
| | | throw Oops.Bah($"当前{item.BoxNo}已拣货完成,请勿重复拣货"); |
| | | } |
| | | } |
| | | } |
| | |
| | | if (biaoShi != "2") |
| | | { |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | await Db.Deleteable(item).ExecuteCommandAsync(); |
| | | } |
| | | else//数量拣货 |
| | | { |
| | | if (decimal.Parse(pickQty1) == item.Qty) |
| | | { |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | await Db.Deleteable(item).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | item.Qty -= decimal.Parse(pickQty1); |
| | | item.BitBoxMark = "1";//零箱标识 |
| | | item.InspectMark = "1"; //抽检箱标识 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | pickQty += item.Qty; |
| | |
| | | foreach (var item in boxSurplusList) |
| | | { |
| | | item.BitBoxMark = "1"; |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | await Db.Insertable(comList).ExecuteCommandAsync(); |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += pickQty; |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | |
| | | { |
| | | //判断该托盘是否还存在物料 存在改为待回库 待回库完成后改为已完成 |
| | | } |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | await Db.Updateable(allot).ExecuteCommandAsync(); |
| | | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | |
| | | |
| | | if (stockDetail.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | stock.Qty -= pickQty; |
| | | stock.LockQty -= pickQty; |
| | | stock.IsSampling = "1"; |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | await Db.Deleteable(stock).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | var num2 = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | var num2 = await Db.Queryable<DataStockDetail>().CountAsync(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (num2 <= 0) |
| | | { |
| | | //改变托盘状态 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | throw Oops.Bah("未在托盘表中查询到托盘信息"); |
| | | } |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | } |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | | .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | var num = await Db.Queryable<BllExportNoticeDetail>() |
| | | .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | } |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "拣货出库", soNo, "拣货", $"在PDA上对出库单号为:{soNo}的托盘码为:{palletNo}的拣货操作", userId); |
| | |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | throw e; |
| | | } |
| | | } |
| | | |
| | | //取样出库拣货(无标签) |
| | | public void SampleSoSetQtyPick(string soType, string soNo, string soDetailId, string palletNo, string PickQty, string asnNo, int userId) |
| | | public async Task SampleSoSetQtyPick(string soType, string soNo, string soDetailId, string palletNo, string PickQty, string asnNo, int userId) |
| | | { |
| | | Db.BeginTran(); |
| | | try |
| | | { |
| | | if (string.IsNullOrWhiteSpace(soType)) |
| | | { |
| | | throw new Exception("取样标识不能为空"); |
| | | throw Oops.Bah("取样标识不能为空"); |
| | | } |
| | | |
| | | if (soType == "1") |
| | | { |
| | | if (string.IsNullOrWhiteSpace(asnNo)) |
| | | { |
| | | throw new Exception("入库单据不能为空"); |
| | | throw Oops.Bah("入库单据不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | throw Oops.Bah("托盘码不能为空"); |
| | | } |
| | | //先判断是否是库外取样托盘 |
| | | var allot = Db.Queryable<BllExportAllot>().First(m => |
| | | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => |
| | | m.IsDel == "0" && m.PalletNo == palletNo && m.Status != "5" && m.Status != "6"); |
| | | if (allot != null) |
| | | { |
| | | throw new Exception("当前托盘不属于库前取样"); |
| | | throw Oops.Bah("当前托盘不属于库前取样"); |
| | | } |
| | | |
| | | |
| | | //库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.ASNNo == asnNo && m.PalletNo == palletNo); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == asnNo && m.PalletNo == palletNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未查询到该托盘的库存明细信息!"); |
| | | throw Oops.Bah("未查询到该托盘的库存明细信息!"); |
| | | } |
| | | |
| | | var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == stockDetail.SkuNo); |
| | | var sku = await Db.Queryable<SysMaterials>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == stockDetail.SkuNo); |
| | | if (sku == null) |
| | | { |
| | | throw new Exception("未查询到当前托盘上的物料信息"); |
| | | throw Oops.Bah("未查询到当前托盘上的物料信息"); |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存信息!"); |
| | | throw Oops.Bah("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.AsnSampleNo == asnNo); |
| | | var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.AsnSampleNo == asnNo); |
| | | //创建出库单 |
| | | if (notice == null || notice.Status == "6") |
| | | { |
| | |
| | | //获取自增单据号 |
| | | billNo = new Common().GetMaxNo("SO"); |
| | | var no = billNo; |
| | | bl = Db.Queryable<BllExportNotice>().Any(m => m.SONo == no); |
| | | bl = await Db.Queryable<BllExportNotice>().AnyAsync(m => m.SONo == no); |
| | | } while (bl); |
| | | |
| | | var addNotice = new BllExportNotice() |
| | |
| | | CreateUser = userId, |
| | | }; |
| | | |
| | | var n = Db.Insertable(addNotice).ExecuteReturnEntity(); |
| | | var n = await Db.Insertable(addNotice).ExecuteReturnEntityAsync(); |
| | | notice = n; |
| | | } |
| | | |
| | | //创建出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.SONo == notice.SONo && m.SkuNo == stockDetail.SkuNo && m.LotNo.Contains(stockDetail.LotNo)); |
| | | var noticeDetail = await Db.Queryable<BllExportNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.SONo == notice.SONo && m.SkuNo == stockDetail.SkuNo && m.LotNo.Contains(stockDetail.LotNo)); |
| | | if (noticeDetail == null) |
| | | { |
| | | var addNoticeDetail = new BllExportNoticeDetail() |
| | |
| | | CreateUser = userId, |
| | | |
| | | }; |
| | | var m = Db.Insertable(addNoticeDetail).ExecuteReturnEntity(); |
| | | var m = await Db.Insertable(addNoticeDetail).ExecuteReturnEntityAsync(); |
| | | noticeDetail = m; |
| | | } |
| | | //出库分配信息 |
| | | var allot2 = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.Status == "5" && m.SONo == notice.SONo && m.PalletNo == palletNo); |
| | | var allot2 = await Db.Queryable<BllExportAllot>().FirstAsync(m => m.IsDel == "0" && m.Status == "5" && m.SONo == notice.SONo && m.PalletNo == palletNo); |
| | | if (allot2 == null) |
| | | { |
| | | //添加分配表信息 |
| | |
| | | UpdateTime = DateTime.Now |
| | | }; |
| | | |
| | | var fp = Db.Insertable(addAllot).ExecuteReturnEntity(); |
| | | var fp = await Db.Insertable(addAllot).ExecuteReturnEntityAsync(); |
| | | allot2 = fp; |
| | | } |
| | | |
| | | //获取当前托盘拣货明细 |
| | | var complete = Db.Queryable<BllCompleteDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.ExportAllotId == allot2.Id && a.StockId == stockDetail.Id); |
| | | var complete = await Db.Queryable<BllCompleteDetail>().FirstAsync(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.ExportAllotId == allot2.Id && a.StockId == stockDetail.Id); |
| | | |
| | | //判读是否存在拣货明细 |
| | | int isComplete = 0; |
| | |
| | | comList.Add(completeDetail); |
| | | |
| | | //添加拣货明细 |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | await Db.Insertable(comList).ExecuteCommandAsync(); |
| | | } |
| | | else if (isComplete == 1) |
| | | { |
| | |
| | | complete.UpdateUser = userId; |
| | | complete.UpdateTime = Db.GetDate(); |
| | | |
| | | Db.Updateable(complete).ExecuteCommand(); |
| | | await Db.Updateable(complete).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | |
| | |
| | | //修改出库分配信息 |
| | | allot2.Qty += int.Parse(PickQty); |
| | | allot2.CompleteQty += int.Parse(PickQty); |
| | | Db.Updateable(allot2).ExecuteCommand(); |
| | | await Db.Updateable(allot2).ExecuteCommandAsync(); |
| | | |
| | | int isDel = 0; |
| | | |
| | |
| | | } |
| | | if (stockDetail.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | isDel = 1; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | //删除或修改库存 |
| | | stock.Qty -= int.Parse(PickQty); |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | await Db.Deleteable(stock).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //改变托盘状态为:未使用 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | throw Oops.Bah("未在托盘表中查询到托盘信息"); |
| | | } |
| | | |
| | | //判断托盘上物料是否拣货完毕 |
| | | if (isDel == 0) |
| | | { |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //修改出库单明细拣货数量 |
| | |
| | | noticeDetail.FactQty += int.Parse(PickQty); |
| | | noticeDetail.CompleteQty += int.Parse(PickQty); |
| | | noticeDetail.Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * noticeDetail.Qty; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | | |
| | | } |
| | | else if (soType == "0") |
| | |
| | | |
| | | if (string.IsNullOrWhiteSpace(soNo)) |
| | | { |
| | | throw new Exception("出库单据不能为空"); |
| | | throw Oops.Bah("出库单据不能为空"); |
| | | } |
| | | //if (string.IsNullOrWhiteSpace(soDetailId)) |
| | | //{ |
| | |
| | | //} |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | throw Oops.Bah("托盘码不能为空"); |
| | | } |
| | | |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("未查询到该出库单的信息"); |
| | | throw Oops.Bah("未查询到该出库单的信息"); |
| | | } |
| | | if (notice.Status != "3") |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行,不能拣货"); |
| | | throw Oops.Bah("出库单的状态不是正在执行,不能拣货"); |
| | | } |
| | | //出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>() |
| | | .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | if (noticeDetail == null) |
| | | { |
| | | throw new Exception("未查询到该出库单明细的信息"); |
| | | throw Oops.Bah("未查询到该出库单明细的信息"); |
| | | } |
| | | //出库分配信息 |
| | | var allot = Db.Queryable<BllExportAllot>().First(m => |
| | | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => |
| | | m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo && |
| | | m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); |
| | | if (allot == null) |
| | | { |
| | | throw new Exception("未查询到该托盘的分配信息"); |
| | | throw Oops.Bah("未查询到该托盘的分配信息"); |
| | | } |
| | | //剩余拣货数量(待拣减去已拣) |
| | | var needQty = allot.Qty - allot.CompleteQty; |
| | | if (int.Parse(PickQty) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于托内剩余待拣数量"); |
| | | throw Oops.Bah("拣货数量不能大于托内剩余待拣数量"); |
| | | } |
| | | |
| | | //库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存明细信息!"); |
| | | throw Oops.Bah("未查询到该托盘分配的库存明细信息!"); |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存信息!"); |
| | | throw Oops.Bah("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | #endregion |
| | | //获取当前托盘拣货明细 |
| | | var complete = Db.Queryable<BllCompleteDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.ExportAllotId == allot.Id && a.StockId == stockDetail.Id); |
| | | var complete = await Db.Queryable<BllCompleteDetail>().FirstAsync(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.ExportAllotId == allot.Id && a.StockId == stockDetail.Id); |
| | | |
| | | //判读是否存在拣货明细 |
| | | int isComplete = 0; |
| | |
| | | comList.Add(completeDetail); |
| | | |
| | | //添加拣货明细 |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | await Db.Insertable(comList).ExecuteCommandAsync(); |
| | | } |
| | | else if (isComplete == 1) |
| | | { |
| | |
| | | complete.UpdateUser = userId; |
| | | complete.UpdateTime = Db.GetDate(); |
| | | |
| | | Db.Updateable(complete).ExecuteCommand(); |
| | | await Db.Updateable(complete).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | |
| | |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | |
| | | allot.UpdateTime = DateTime.Now; |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | await Db.Updateable(allot).ExecuteCommandAsync(); |
| | | |
| | | int isDel = 0; |
| | | |
| | |
| | | } |
| | | if (stockDetail.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | isDel = 1; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | //删除或修改库存 |
| | | stock.Qty -= int.Parse(PickQty); |
| | |
| | | stock.IsSampling = "1"; //是否取样 |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | await Db.Deleteable(stock).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //改变托盘状态为:未使用 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | throw Oops.Bah("未在托盘表中查询到托盘信息"); |
| | | } |
| | | |
| | | //判断托盘上物料是否拣货完毕 |
| | | if (isDel == 0) |
| | | { |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += int.Parse(PickQty); |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | | .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | var num = await Db.Queryable<BllExportNoticeDetail>() |
| | | .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | |
| | | } |
| | | |
| | |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | throw e; |
| | | } |
| | | } |
| | | |
| | |
| | | /// <param name="pickQty1"></param> |
| | | /// <param name="palletNoNew"></param> |
| | | /// <param name="userId"></param> |
| | | public void SoSetPinPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string pickQty1, string palletNoNew, int userId) |
| | | public async Task SoSetPinPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string pickQty1, string palletNoNew, int userId) |
| | | { |
| | | Db.BeginTran(); |
| | | try |
| | |
| | | |
| | | if (string.IsNullOrWhiteSpace(soNo)) |
| | | { |
| | | throw new Exception("出库单据不能为空"); |
| | | throw Oops.Bah("出库单据不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(soDetailId)) |
| | | { |
| | | throw new Exception("出库物料-批次不能为空"); |
| | | throw Oops.Bah("出库物料-批次不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | throw Oops.Bah("托盘码不能为空"); |
| | | } |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) |
| | | { |
| | | throw new Exception("追溯条码和拣货数量不能同时输入"); |
| | | throw Oops.Bah("追溯条码和拣货数量不能同时输入"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(palletNoNew)) |
| | | { |
| | | throw new Exception("新托盘码不能为空"); |
| | | throw Oops.Bah("新托盘码不能为空"); |
| | | } |
| | | if (palletNo == palletNoNew)//原托盘与新托盘一致 |
| | | { |
| | | if (!string.IsNullOrEmpty(boxNo)) |
| | | { |
| | | throw new Exception("原托盘与新托盘一致,请选择整托出库"); |
| | | throw Oops.Bah("原托盘与新托盘一致,请选择整托出库"); |
| | | } |
| | | } |
| | | |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); |
| | | var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.SONo == soNo); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("未查询到该出库单的信息"); |
| | | throw Oops.Bah("未查询到该出库单的信息"); |
| | | } |
| | | if (notice.Status != "3") |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行,不能拣货"); |
| | | throw Oops.Bah("出库单的状态不是正在执行,不能拣货"); |
| | | } |
| | | //出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>() |
| | | .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | var noticeDetail = await Db.Queryable<BllExportNoticeDetail>() |
| | | .FirstAsync(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | if (noticeDetail == null) |
| | | { |
| | | throw new Exception("未查询到该出库单明细的信息"); |
| | | throw Oops.Bah("未查询到该出库单明细的信息"); |
| | | } |
| | | //出库分配信息 |
| | | var allot = Db.Queryable<BllExportAllot>().First(m => |
| | | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => |
| | | m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo && |
| | | m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); |
| | | if (allot == null) |
| | | { |
| | | throw new Exception("未查询到该托盘的分配信息"); |
| | | throw Oops.Bah("未查询到该托盘的分配信息"); |
| | | } |
| | | //剩余拣货数量(待拣减去已拣) |
| | | var needQty = allot.Qty - allot.CompleteQty; |
| | | |
| | | //库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存明细信息!"); |
| | | throw Oops.Bah("未查询到该托盘分配的库存明细信息!"); |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存信息!"); |
| | | throw Oops.Bah("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | #region 拼托信息 |
| | | var sdId = 0; |
| | | bool isNew = false; |
| | | var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew); |
| | | var pinStockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew); |
| | | if (pinStockDetail != null) |
| | | { |
| | | if (palletNo != palletNoNew)//非整托拣货 |
| | | { |
| | | if (pinStockDetail.SONo != notice.SONo) |
| | | { |
| | | throw new Exception("拼托托盘上只能放同一个出库单下的物料!"); |
| | | throw Oops.Bah("拼托托盘上只能放同一个出库单下的物料!"); |
| | | } |
| | | if (pinStockDetail.SkuName != stockDetail.SkuName || pinStockDetail.LotNo != stockDetail.LotNo) |
| | | { |
| | |
| | | { |
| | | isNew = true; |
| | | |
| | | var newPalletInfo = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); |
| | | var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); |
| | | if (newPalletInfo == null) |
| | | { |
| | | throw new Exception("新托盘信息不存在或已被使用!"); |
| | | throw Oops.Bah("新托盘信息不存在或已被使用!"); |
| | | } |
| | | //修改新托盘状态 |
| | | newPalletInfo.Status = "1"; |
| | | Db.Updateable(newPalletInfo).ExecuteCommand(); |
| | | await Db.Updateable(newPalletInfo).ExecuteCommandAsync(); |
| | | } |
| | | var sd = new DataStockDetail(); |
| | | if (isNew) |
| | |
| | | sd.CreateTime = nowDate; |
| | | |
| | | //新增拼托库存明细信息 |
| | | sdId = Db.Insertable(sd).ExecuteReturnIdentity(); |
| | | sdId = await Db.Insertable(sd).ExecuteReturnIdentityAsync(); |
| | | } |
| | | #endregion |
| | | |
| | |
| | | { |
| | | List<DataBoxInfo> boxInfos; |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo);//找到托盘上所有箱码 |
| | | boxInfos = boxInfo.ToList(); |
| | | boxInfos = await boxInfo.ToListAsync(); |
| | | if (boxInfo.Count() <= 0) |
| | | { |
| | | throw new Exception("该托盘上没有可拣货的箱子"); |
| | | throw Oops.Bah("该托盘上没有可拣货的箱子"); |
| | | } |
| | | var boxQty = boxInfo.GroupBy(m => m.PalletNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList(); |
| | | var boxQty = await boxInfo.GroupBy(m => m.PalletNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); |
| | | if (boxQty[0] > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内剩余待拣数量"); |
| | | throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); |
| | | } |
| | | |
| | | var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList(); |
| | | var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToListAsync(); |
| | | var comList = new List<BllCompleteDetail>(); |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) |
| | | { |
| | | throw new Exception($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | } |
| | | if (item.SkuNo != allot.SkuNo || item.LotNo != allot.LotNo) |
| | | { |
| | | throw new Exception("当前托盘上有其他不同物料批次,拣货失败"); |
| | | throw Oops.Bah("当前托盘上有其他不同物料批次,拣货失败"); |
| | | } |
| | | //添加拣货明细 |
| | | var completeDetail = new BllCompleteDetail() |
| | |
| | | } |
| | | item.Status = "5";//箱支状态,0:未组托 1:已组托 2:已入库 3:已出库 4:已分配 5:已拣货 |
| | | //修改库存箱码明细 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | |
| | | pickQty += item.Qty; |
| | | } |
| | | //添加拣货明细 |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | await Db.Insertable(comList).ExecuteCommandAsync(); |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += pickQty; |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | allot.UpdateTime = DateTime.Now; |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | await Db.Updateable(allot).ExecuteCommandAsync(); |
| | | |
| | | if (palletNo != palletNoNew) |
| | | { |
| | | //删除原托盘库存明细 |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | |
| | | //改变原托盘状态为:未使用 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | throw Oops.Bah("未在托盘表中查询到托盘信息"); |
| | | } |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | stockDetail.SONo = soNo; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | | .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | |
| | | notice.Status = "4"; //更改为执行完成 |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | var biaoShi = "0";//0:整箱拣货、1:散支拣货、2:数量拣货 |
| | | List<DataBoxInfo> boxInfos; |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); |
| | | if (boxInfo.Count() == 0) |
| | | if (await boxInfo.CountAsync() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | | throw Oops.Bah("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | boxInfos = boxInfo.ToList(); |
| | | boxInfos = await boxInfo.ToListAsync(); |
| | | |
| | | var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList(); |
| | | var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToListAsync(); |
| | | if (!string.IsNullOrWhiteSpace(boxNo3)) //散支拣货 |
| | | { |
| | | boxInfos = boxInfos.Where(m => m.BoxNo3 == boxNo3).ToList(); |
| | | |
| | | if (boxInfos.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | | throw Oops.Bah("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | if (boxInfos.Count() > 1) |
| | | { |
| | | throw new Exception("该追溯支码的信息大于1条,信息错误,请核实!"); |
| | | throw Oops.Bah("该追溯支码的信息大于1条,信息错误,请核实!"); |
| | | } |
| | | |
| | | if (boxInfos.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw new Exception("该托盘与箱码没有绑定关系"); |
| | | throw Oops.Bah("该托盘与箱码没有绑定关系"); |
| | | } |
| | | var boxQty = boxInfos.First().Qty; |
| | | if (boxQty > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于剩余待拣数量"); |
| | | throw Oops.Bah("拣货数量不能大于剩余待拣数量"); |
| | | } |
| | | |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) |
| | | { |
| | | throw new Exception($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | if (boxInfo.Count() > 1) |
| | | { |
| | | throw new Exception("该箱码内存在支码不能进行数量拣货"); |
| | | throw Oops.Bah("该箱码内存在支码不能进行数量拣货"); |
| | | } |
| | | decimal boxQty = boxInfo.First().Qty; |
| | | if (Convert.ToInt32(pickQty1) > boxQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内数量"); |
| | | throw Oops.Bah("拣货数量不能大于箱内数量"); |
| | | } |
| | | if (Convert.ToInt32(pickQty1) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于剩余待拣数量"); |
| | | throw Oops.Bah("拣货数量不能大于剩余待拣数量"); |
| | | } |
| | | |
| | | biaoShi = "2"; |
| | |
| | | { |
| | | if (boxInfo.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码的信息"); |
| | | throw Oops.Bah("未查询到该箱码的信息"); |
| | | } |
| | | if (boxInfo.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw new Exception("该托盘与箱码没有绑定关系"); |
| | | throw Oops.Bah("该托盘与箱码没有绑定关系"); |
| | | } |
| | | var boxQty = boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList(); |
| | | var boxQty = await boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); |
| | | if (boxQty[0] > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内剩余待拣数量"); |
| | | throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); |
| | | } |
| | | |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo == item.BoxNo)) |
| | | { |
| | | throw new Exception($"当前{item.BoxNo}已拣货完成,请勿重复拣货"); |
| | | throw Oops.Bah($"当前{item.BoxNo}已拣货完成,请勿重复拣货"); |
| | | } |
| | | } |
| | | } |
| | |
| | | item.BindNo = null;//托盘绑定号 |
| | | item.PalletNo = palletNoNew; |
| | | item.Status = "5";//箱支状态,0:未组托 1:已组托 2:已入库 3:已出库 4:已分配 5:已拣货 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | |
| | | pickQty += item.Qty; |
| | | } |
| | |
| | | item.BoxNo = item.BoxNo3;//将支码赋给箱码 |
| | | item.BitBoxMark = "1";//零箱标记 |
| | | item.Status = "5";//箱支状态,0:未组托 1:已组托 2:已入库 3:已出库 4:已分配 5:已拣货 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | |
| | | pickQty += item.Qty; |
| | | } |
| | |
| | | item.BindNo = null;//托盘绑定号 |
| | | item.PalletNo = palletNoNew; |
| | | item.Status = "5";//箱支状态,0:未组托 1:已组托 2:已入库 3:已出库 4:已分配 5:已拣货 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | item.Qty -= decimal.Parse(pickQty1); |
| | | item.BitBoxMark = "1";//零箱标识 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | pickQty += int.Parse(pickQty1); |
| | |
| | | foreach (var item in boxSurplusList) |
| | | { |
| | | item.BitBoxMark = "1"; |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | await Db.Insertable(comList).ExecuteCommandAsync(); |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += pickQty; |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | |
| | | { |
| | | //判断该托盘是否还存在物料 存在改为待回库 待回库完成后改为已完成 |
| | | } |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | await Db.Updateable(allot).ExecuteCommandAsync(); |
| | | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | |
| | | |
| | | if (stockDetail.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | var num2 = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | var num2 = await Db.Queryable<DataStockDetail>().CountAsync(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (num2 <= 0) |
| | | { |
| | | //改变托盘状态 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | throw Oops.Bah("未在托盘表中查询到托盘信息"); |
| | | } |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | } |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | | .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | var num = await Db.Queryable<BllExportNoticeDetail>() |
| | | .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | if (isNew) |
| | |
| | | //修改拼托托盘库存明细 |
| | | pinStockDetail.Qty += pickQty; |
| | | pinStockDetail.LockQty += pickQty; |
| | | Db.Updateable(pinStockDetail).ExecuteCommand(); |
| | | await Db.Updateable(pinStockDetail).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | |
| | |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | throw e; |
| | | } |
| | | } |
| | | /// <summary> |
| | |
| | | /// <param name="PickQty"></param> |
| | | /// <param name="palletNoNew"></param> |
| | | /// <param name="userId"></param> |
| | | public void SoSetQtyPinPick(string soNo, string soDetailId, string palletNo, string PickQty, string palletNoNew, int userId) |
| | | public async Task SoSetQtyPinPick(string soNo, string soDetailId, string palletNo, string PickQty, string palletNoNew, int userId) |
| | | { |
| | | Db.BeginTran(); |
| | | try |
| | |
| | | |
| | | if (string.IsNullOrWhiteSpace(soNo)) |
| | | { |
| | | throw new Exception("出库单据不能为空"); |
| | | throw Oops.Bah("出库单据不能为空"); |
| | | } |
| | | //if (string.IsNullOrWhiteSpace(soDetailId)) |
| | | //{ |
| | |
| | | //} |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | throw Oops.Bah("托盘码不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(palletNoNew)) |
| | | { |
| | | throw new Exception("新托盘码不能为空"); |
| | | throw Oops.Bah("新托盘码不能为空"); |
| | | } |
| | | |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); |
| | | var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.SONo == soNo); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("未查询到该出库单的信息"); |
| | | throw Oops.Bah("未查询到该出库单的信息"); |
| | | } |
| | | if (notice.Status != "3") |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行,不能拣货"); |
| | | throw Oops.Bah("出库单的状态不是正在执行,不能拣货"); |
| | | } |
| | | //出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>() |
| | | .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | var noticeDetail = await Db.Queryable<BllExportNoticeDetail>() |
| | | .FirstAsync(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | if (noticeDetail == null) |
| | | { |
| | | throw new Exception("未查询到该出库单明细的信息"); |
| | | throw Oops.Bah("未查询到该出库单明细的信息"); |
| | | } |
| | | //出库分配信息 |
| | | var allot = Db.Queryable<BllExportAllot>().First(m => |
| | | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => |
| | | m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo && |
| | | m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); |
| | | if (allot == null) |
| | | { |
| | | throw new Exception("未查询到该托盘的分配信息"); |
| | | throw Oops.Bah("未查询到该托盘的分配信息"); |
| | | } |
| | | //剩余拣货数量(待拣减去已拣) |
| | | var needQty = allot.Qty - allot.CompleteQty; |
| | | if (int.Parse(PickQty) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于托内剩余待拣数量"); |
| | | throw Oops.Bah("拣货数量不能大于托内剩余待拣数量"); |
| | | } |
| | | |
| | | //库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存明细信息!"); |
| | | throw Oops.Bah("未查询到该托盘分配的库存明细信息!"); |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存信息!"); |
| | | throw Oops.Bah("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | if (palletNo == palletNoNew)//原托盘与新托盘一致 |
| | | { |
| | | if (int.Parse(PickQty) != stockDetail.Qty) |
| | | { |
| | | throw new Exception("原托盘与新托盘一致,需要把托盘上所有数量拣货"); |
| | | throw Oops.Bah("原托盘与新托盘一致,需要把托盘上所有数量拣货"); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 拼托信息 |
| | | bool isNew = false; |
| | | var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew); |
| | | var pinStockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew); |
| | | if (pinStockDetail != null) |
| | | { |
| | | if (palletNo != palletNoNew)//非整托拣货 |
| | | { |
| | | if (pinStockDetail.SONo != notice.SONo) |
| | | { |
| | | throw new Exception("拼托托盘上只能放同一个出库单下的物料!"); |
| | | throw Oops.Bah("拼托托盘上只能放同一个出库单下的物料!"); |
| | | } |
| | | if (pinStockDetail.SkuName != stockDetail.SkuName || pinStockDetail.LotNo != stockDetail.LotNo) |
| | | { |
| | |
| | | { |
| | | isNew = true; |
| | | |
| | | var newPalletInfo = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); |
| | | var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); |
| | | if (newPalletInfo == null) |
| | | { |
| | | throw new Exception("新托盘信息不存在或已被使用!"); |
| | | throw Oops.Bah("新托盘信息不存在或已被使用!"); |
| | | } |
| | | //修改新托盘状态 |
| | | newPalletInfo.Status = "1"; |
| | | Db.Updateable(newPalletInfo).ExecuteCommand(); |
| | | await Db.Updateable(newPalletInfo).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | if (isNew) |
| | |
| | | sd.CreateTime = nowDate; |
| | | |
| | | //新增拼托库存明细信息 |
| | | Db.Insertable(sd).ExecuteReturnIdentity(); |
| | | await Db.Insertable(sd).ExecuteReturnIdentityAsync(); |
| | | } |
| | | else |
| | | { |
| | |
| | | //修改拼托托盘库存明细 |
| | | pinStockDetail.Qty += int.Parse(PickQty); |
| | | pinStockDetail.LockQty += int.Parse(PickQty); |
| | | Db.Updateable(pinStockDetail).ExecuteCommand(); |
| | | await Db.Updateable(pinStockDetail).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | pinStockDetail.SONo = soNo; |
| | | Db.Updateable(pinStockDetail).ExecuteCommand(); |
| | | await Db.Updateable(pinStockDetail).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | //获取当前托盘拣货明细 |
| | | var complete = Db.Queryable<BllCompleteDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.ExportAllotId == allot.Id && a.StockId == stockDetail.Id); |
| | | var complete = await Db.Queryable<BllCompleteDetail>().FirstAsync(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.ExportAllotId == allot.Id && a.StockId == stockDetail.Id); |
| | | |
| | | //判读是否存在拣货明细 |
| | | int isComplete = 0; |
| | |
| | | comList.Add(completeDetail); |
| | | |
| | | //添加拣货明细 |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | await Db.Insertable(comList).ExecuteCommandAsync(); |
| | | } |
| | | else if (isComplete == 1) |
| | | { |
| | |
| | | complete.UpdateUser = userId; |
| | | complete.UpdateTime = Db.GetDate(); |
| | | |
| | | Db.Updateable(complete).ExecuteCommand(); |
| | | await Db.Updateable(complete).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += int.Parse(PickQty); |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | allot.UpdateTime = DateTime.Now; |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | await Db.Updateable(allot).ExecuteCommandAsync(); |
| | | |
| | | int isDel = 0; |
| | | |
| | |
| | | } |
| | | if (stockDetail.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | isDel = 1; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | else |
| | |
| | | if (isDel == 0) |
| | | { |
| | | //改变托盘状态为:未使用 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | throw Oops.Bah("未在托盘表中查询到托盘信息"); |
| | | } |
| | | |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += int.Parse(PickQty); |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | | .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | var num = await Db.Queryable<BllExportNoticeDetail>() |
| | | .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "拣货拼托", soNo, "拣货", $"在PDA上对出库单号为:{soNo}的托盘码为:{palletNo},新托盘码为:{palletNoNew}的拣货操作", userId); |
| | |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | throw e; |
| | | } |
| | | } |
| | | #endregion |
| | |
| | | #region JC23版取样 |
| | | |
| | | //根据托盘号获取取样类型 |
| | | public string GetSampleType2(string palletNo) |
| | | public async Task<string> GetSampleType2(string palletNo) |
| | | { |
| | | try |
| | | var type = ""; |
| | | var detail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (detail == null) |
| | | { |
| | | var type = ""; |
| | | var detail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (detail == null) |
| | | { |
| | | throw new Exception("当前托盘未在库存中"); |
| | | } |
| | | |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Count(m => m.IsDel == "0" && m.StockDetailId == detail.Id); |
| | | |
| | | //判断托盘上是否有箱码信息 |
| | | if (boxInfo > 0) |
| | | { |
| | | type = "0";//标签取样 |
| | | } |
| | | else |
| | | { |
| | | type = "1";//数量取样 |
| | | } |
| | | return type; |
| | | throw Oops.Bah("当前托盘未在库存中"); |
| | | } |
| | | catch (Exception e) |
| | | |
| | | var boxInfo = await Db.Queryable<DataBoxInfo>().CountAsync(m => m.IsDel == "0" && m.StockDetailId == detail.Id); |
| | | |
| | | //判断托盘上是否有箱码信息 |
| | | if (boxInfo > 0) |
| | | { |
| | | throw new Exception(e.Message); |
| | | type = "0";//标签取样 |
| | | } |
| | | else |
| | | { |
| | | type = "1";//数量取样 |
| | | } |
| | | return type; |
| | | } |
| | | |
| | | //获取待出库或待取样的请验单 |
| | | public List<string> GetInspectionNo() |
| | | public async Task<List<string>> GetInspectionNo() |
| | | { |
| | | try |
| | | { |
| | | var data = Db.Queryable<BllQualityInspectionRequest>().Where(m => m.IsDel == "0" && (m.Status == "1" || m.Status == "2")).OrderByDescending(m => m.QcNo).Select(m => m.QcNo).ToList(); |
| | | return data; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | return await Db.Queryable<BllQualityInspectionRequest>().Where(m => m.IsDel == "0" && (m.Status == "1" || m.Status == "2")).OrderByDescending(m => m.QcNo).Select(m => m.QcNo).ToListAsync(); |
| | | } |
| | | |
| | | //获取请验单相关信息 |
| | | public InspectionRequestDto GetInspectionRequestInfo(string qcNo) |
| | | public async Task<InspectionRequestDto> GetInspectionRequestInfo(string qcNo) |
| | | { |
| | | try |
| | | { |
| | | var data = new InspectionRequestDto(); |
| | | var inspectionRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.QcNo == qcNo); |
| | | var samplingQty = Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).Sum(m => m.CompleteQty); |
| | | var data = new InspectionRequestDto(); |
| | | var inspectionRequest = await Db.Queryable<BllQualityInspectionRequest>().FirstAsync(m => m.IsDel == "0" && m.QcNo == qcNo); |
| | | var samplingQty = await Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).SumAsync(m => m.CompleteQty); |
| | | |
| | | data.QcNo = qcNo; |
| | | data.Sku = inspectionRequest.SkuNo; |
| | | data.LotNo = inspectionRequest.LotNo; |
| | | data.Qty = inspectionRequest.SamplingQty.ToString(); |
| | | data.SamplingQty = samplingQty == null ? "0" : samplingQty.ToString(); |
| | | data.QcNo = qcNo; |
| | | data.Sku = inspectionRequest.SkuNo + "-" + inspectionRequest.SkuName; |
| | | data.LotNo = inspectionRequest.LotNo; |
| | | data.Qty = inspectionRequest.SamplingQty.ToString(); |
| | | data.SamplingQty = samplingQty == null ? "0" : samplingQty.ToString(); |
| | | |
| | | return data; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | return data; |
| | | } |
| | | |
| | | //取样出库拣货(标签) |
| | | public void SampleSetPick(string qcNo, string palletNo, string boxNo, string boxNo3, string pickQty, int userId) |
| | | public async Task SampleSetPick(string qcNo, string palletNo, string boxNo, string boxNo3, string pickQty, int userId) |
| | | { |
| | | try |
| | | { |
| | |
| | | |
| | | if (string.IsNullOrWhiteSpace(qcNo)) |
| | | { |
| | | throw new Exception("请验单据不能为空"); |
| | | throw Oops.Bah("请验单据不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘号不能为空"); |
| | | throw Oops.Bah("托盘号不能为空"); |
| | | } |
| | | var type = GetSampleType2(palletNo); |
| | | var type = await GetSampleType2(palletNo); |
| | | if (type != "0") |
| | | { |
| | | throw new Exception("当前托盘请在数量页签取样"); |
| | | throw Oops.Bah("当前托盘请在数量页签取样"); |
| | | } |
| | | if (string.IsNullOrEmpty(boxNo)) |
| | | { |
| | | throw new Exception("外箱条码不能为空"); |
| | | throw Oops.Bah("外箱条码不能为空"); |
| | | } |
| | | //if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty) && int.Parse(pickQty) > 0) |
| | | //{ |
| | |
| | | //} |
| | | |
| | | //请验单 |
| | | var inspecd = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.QcNo == qcNo); |
| | | var inspecd = await Db.Queryable<BllQualityInspectionRequest>().FirstAsync(m => m.IsDel == "0" && m.QcNo == qcNo); |
| | | if (inspecd == null) |
| | | { |
| | | throw new Exception("未查询到请验单信息"); |
| | | throw Oops.Bah("未查询到请验单信息"); |
| | | } |
| | | if (inspecd.Status == "0" || inspecd.Status == "3") |
| | | { |
| | | throw new Exception("请验单状态错误,请核实"); |
| | | throw Oops.Bah("请验单状态错误,请核实"); |
| | | } |
| | | //库存明细信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未在库存中查询出当前托盘信息"); |
| | | throw Oops.Bah("未在库存中查询出当前托盘信息"); |
| | | } |
| | | if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo)) |
| | | { |
| | | throw new Exception("当前托盘不是库外托盘,请核实"); |
| | | throw Oops.Bah("当前托盘不是库外托盘,请核实"); |
| | | } |
| | | //箱支信息 |
| | | var boxInfoList = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToList(); |
| | | var boxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToListAsync(); |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询出库存总信息"); |
| | | throw Oops.Bah("未查询出库存总信息"); |
| | | } |
| | | //入库单 |
| | | var notice = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo); |
| | | var notice = await Db.Queryable<BllArrivalNotice>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("未查询到入库单信息"); |
| | | throw Oops.Bah("未查询到入库单信息"); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | //取样明细记录表 |
| | | var sampld = Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToList(); |
| | | var sampld = await Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToListAsync(); |
| | | |
| | | var isAddSampld = false; |
| | | var PickType = ""; //0数量拣货 1 箱支拣货 |
| | |
| | | { |
| | | if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) == 0) |
| | | { |
| | | throw new Exception("未查询到支码信息"); |
| | | throw Oops.Bah("未查询到支码信息"); |
| | | } |
| | | if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) > 1) |
| | | { |
| | | throw new Exception("支码信息数据信息错误,请核实"); |
| | | throw Oops.Bah("支码信息数据信息错误,请核实"); |
| | | } |
| | | EditboxInfo = Db.Queryable<DataBoxInfo>().First(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3); |
| | | EditboxInfo = await Db.Queryable<DataBoxInfo>().FirstAsync(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3); |
| | | if (EditboxInfo.Qty < decimal.Parse(pickQty)) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内数量"); |
| | | throw Oops.Bah("拣货数量不能大于箱内数量"); |
| | | } |
| | | isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo && m.BoxNo3 == EditboxInfo.BoxNo3) == 0; |
| | | } |
| | |
| | | |
| | | if (boxInfoList.Count == 0) |
| | | { |
| | | throw new Exception("未在托盘上查询到箱码信息,请核实"); |
| | | throw Oops.Bah("未在托盘上查询到箱码信息,请核实"); |
| | | } |
| | | if (boxInfoList.Count > 1) |
| | | { |
| | | throw new Exception("箱码数据信息错误,请核实"); |
| | | throw Oops.Bah("箱码数据信息错误,请核实"); |
| | | } |
| | | if (boxInfoList.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0) |
| | | { |
| | | throw new Exception("当前箱码中含有支码,请输入支码信息取样"); |
| | | throw Oops.Bah("当前箱码中含有支码,请输入支码信息取样"); |
| | | } |
| | | EditboxInfo = Db.Queryable<DataBoxInfo>().First(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo); |
| | | EditboxInfo = await Db.Queryable<DataBoxInfo>().FirstAsync(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo); |
| | | |
| | | if (EditboxInfo.Qty < decimal.Parse(pickQty)) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内数量"); |
| | | throw Oops.Bah("拣货数量不能大于箱内数量"); |
| | | } |
| | | isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo) == 0; |
| | | |
| | | } |
| | | if (sampld.Sum(m => m.CompleteQty) + decimal.Parse(pickQty) > inspecd.SamplingQty) |
| | | { |
| | | throw new Exception("取样总拣货数量大于请验单取样数量"); |
| | | throw Oops.Bah("取样总拣货数量大于请验单取样数量"); |
| | | } |
| | | //判断箱中是否含有支码,有:不让拣数量 |
| | | if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < decimal.Parse(pickQty)) |
| | | { |
| | | throw new Exception("托盘上可用数量小于取样数量,请核实锁定、冻结数量"); |
| | | throw Oops.Bah("托盘上可用数量小于取样数量,请核实锁定、冻结数量"); |
| | | } |
| | | } |
| | | else //箱支拣货 |
| | |
| | | |
| | | if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) == 0) |
| | | { |
| | | throw new Exception("未查询到支码信息"); |
| | | throw Oops.Bah("未查询到支码信息"); |
| | | } |
| | | if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) > 1) |
| | | { |
| | | throw new Exception("支码数据信息错误,请核实"); |
| | | throw Oops.Bah("支码数据信息错误,请核实"); |
| | | } |
| | | EditboxInfoList = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3).ToList(); |
| | | EditboxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3).ToListAsync(); |
| | | if (EditboxInfoList.Sum(m => m.Qty) + sampld.Sum(m => m.CompleteQty) > inspecd.SamplingQty) |
| | | { |
| | | throw new Exception("取样总拣货数量大于请验单取样数量"); |
| | | throw Oops.Bah("取样总拣货数量大于请验单取样数量"); |
| | | } |
| | | qty = EditboxInfoList.Sum(m => m.Qty); |
| | | //isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo && m.BoxNo3 == EditboxInfo.BoxNo3) == 0; |
| | |
| | | |
| | | if (boxInfoList.Count == 0) |
| | | { |
| | | throw new Exception("未在托盘上查询到箱码信息,请核实"); |
| | | throw Oops.Bah("未在托盘上查询到箱码信息,请核实"); |
| | | } |
| | | if (boxInfoList.Count > 1) |
| | | { |
| | | throw new Exception("箱码数据信息错误,请核实"); |
| | | throw Oops.Bah("箱码数据信息错误,请核实"); |
| | | } |
| | | if (boxInfoList.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0) |
| | | { |
| | | throw new Exception("当前箱码中含有支码,请输入支码信息取样"); |
| | | throw Oops.Bah("当前箱码中含有支码,请输入支码信息取样"); |
| | | } |
| | | EditboxInfoList = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToList(); |
| | | EditboxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToListAsync(); |
| | | |
| | | if (EditboxInfo.Qty < decimal.Parse(pickQty)) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内数量"); |
| | | throw Oops.Bah("拣货数量不能大于箱内数量"); |
| | | } |
| | | qty = EditboxInfoList.Sum(m => m.Qty); |
| | | //isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo) == 0; |
| | | } |
| | | if (sampld.Sum(m => m.CompleteQty) + qty > inspecd.SamplingQty) |
| | | { |
| | | throw new Exception("取样总拣货数量大于请验单取样数量"); |
| | | throw Oops.Bah("取样总拣货数量大于请验单取样数量"); |
| | | } |
| | | if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < qty) |
| | | { |
| | | throw new Exception("托盘上可用数量小于取样数量,请核实锁定、冻结数量"); |
| | | throw Oops.Bah("托盘上可用数量小于取样数量,请核实锁定、冻结数量"); |
| | | } |
| | | } |
| | | #endregion |
| | |
| | | CreateTime = DateTime.Now, |
| | | CreateUser = userId |
| | | }; |
| | | Db.Insertable(sampleDetail).ExecuteCommand(); |
| | | await Db.Insertable(sampleDetail).ExecuteCommandAsync(); |
| | | //} |
| | | //else |
| | | //{ |
| | |
| | | #region 修改库存三表 |
| | | |
| | | //拆包有效期更改 |
| | | var unpackWarranty = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo).UnpackWarranty; |
| | | var unpackWarranty = (await Db.Queryable<SysMaterials>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo)).UnpackWarranty; |
| | | |
| | | foreach (var item in boxInfoList) |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | Db.Updateable(boxInfoList).ExecuteCommand(); |
| | | await Db.Updateable(boxInfoList).ExecuteCommandAsync(); |
| | | |
| | | //库存箱码 |
| | | |
| | | Db.Deleteable(boxInfo).ExecuteCommand(); |
| | | await Db.Deleteable(boxInfo).ExecuteCommandAsync(); |
| | | |
| | | //库存明细 |
| | | stockDetail.Qty -= boxInfo.Qty; |
| | | if (stockDetail.Qty == 0) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | //库存总表 |
| | | stock.Qty -= boxInfo.Qty; |
| | | if (stock.Qty == 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | await Db.Deleteable(stock).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | //不是上传完毕的修改取样状态 |
| | | if (notice.Status != "4") |
| | | { |
| | | var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); |
| | | var noticeDetail = await Db.Queryable<BllArrivalNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); |
| | | if (noticeDetail.IsSampling == "0") |
| | | { |
| | | noticeDetail.IsSampling = "1"; |
| | | |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | } |
| | |
| | | inspecd.Status = "3"; |
| | | } |
| | | |
| | | Db.Updateable(inspecd).ExecuteCommand(); |
| | | await Db.Updateable(inspecd).ExecuteCommandAsync(); |
| | | #endregion |
| | | } |
| | | |
| | |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | throw e; |
| | | } |
| | | } |
| | | |
| | | |
| | | //取样出库拣货(数量) |
| | | public void SampleSetQtyPick(string qcNo, string palletNo, string pickQty, int userId) |
| | | public async Task SampleSetQtyPick(string qcNo, string palletNo, string pickQty, int userId) |
| | | { |
| | | try |
| | | { |
| | |
| | | |
| | | if (string.IsNullOrWhiteSpace(qcNo)) |
| | | { |
| | | throw new Exception("请验单据不能为空"); |
| | | throw Oops.Bah("请验单据不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘号不能为空"); |
| | | throw Oops.Bah("托盘号不能为空"); |
| | | } |
| | | var type = GetSampleType2(palletNo); |
| | | var type = await GetSampleType2(palletNo); |
| | | if (type != "1") |
| | | { |
| | | throw new Exception("当前托盘请在标签页签取样"); |
| | | throw Oops.Bah("当前托盘请在标签页签取样"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(pickQty)) |
| | | { |
| | | throw new Exception("拣货数量不能为空"); |
| | | throw Oops.Bah("拣货数量不能为空"); |
| | | } |
| | | if (decimal.Parse(pickQty) <= 0) |
| | | { |
| | | throw new Exception("拣货数量不能小于等于0"); |
| | | throw Oops.Bah("拣货数量不能小于等于0"); |
| | | } |
| | | |
| | | //请验单 |
| | | var inspecd = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.QcNo == qcNo); |
| | | var inspecd = await Db.Queryable<BllQualityInspectionRequest>().FirstAsync(m => m.IsDel == "0" && m.QcNo == qcNo); |
| | | if (inspecd == null) |
| | | { |
| | | throw new Exception("未查询到请验单信息"); |
| | | throw Oops.Bah("未查询到请验单信息"); |
| | | } |
| | | if (inspecd.Status == "0" || inspecd.Status == "3") |
| | | { |
| | | throw new Exception("请验单状态错误,请核实"); |
| | | throw Oops.Bah("请验单状态错误,请核实"); |
| | | } |
| | | //库存明细信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo |
| | | && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未在库存中查询出当前托盘信息"); |
| | | throw Oops.Bah("未在库存中查询出当前托盘信息"); |
| | | } |
| | | // 判断托盘是否在库内 |
| | | if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo)) |
| | | { |
| | | throw new Exception("当前托盘不是库外托盘,请核实"); |
| | | var wareHouseData = await Db.Queryable<SysWareHouse>().FirstAsync(m => m.IsDel == "0" && m.WareHouseNo == stockDetail.WareHouseNo); |
| | | if (wareHouseData.Type != "2") |
| | | { |
| | | throw Oops.Bah("当前托盘不是库外托盘,请核实"); |
| | | } |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询出库存总信息"); |
| | | throw Oops.Bah("未查询出库存总信息"); |
| | | } |
| | | //入库单 |
| | | var notice = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo); |
| | | var notice = await Db.Queryable<BllArrivalNotice>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("未查询到入库单信息"); |
| | | throw Oops.Bah("未查询到入库单信息"); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | //取样明细记录表 |
| | | var sampld = Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToList(); |
| | | var sampld = await Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToListAsync(); |
| | | var qty = decimal.Parse(pickQty); |
| | | //var isAddSampld = sampld.Count(m => m.PalletNo == palletNo) == 0; |
| | | |
| | |
| | | |
| | | if (sampld.Sum(m => m.CompleteQty) + qty > inspecd.SamplingQty) |
| | | { |
| | | throw new Exception("取样总拣货数量大于请验单取样数量"); |
| | | throw Oops.Bah("取样总拣货数量大于请验单取样数量"); |
| | | } |
| | | //判断箱中是否含有支码,有:不让拣数量 |
| | | if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < qty) |
| | | { |
| | | throw new Exception("托盘上可用数量小于取样数量,请核实锁定、冻结数量"); |
| | | throw Oops.Bah("托盘上可用数量小于取样数量,请核实锁定、冻结数量"); |
| | | } |
| | | |
| | | |
| | |
| | | CreateTime = DateTime.Now, |
| | | CreateUser = userId |
| | | }; |
| | | Db.Insertable(sampleDetail).ExecuteCommand(); |
| | | await Db.Insertable(sampleDetail).ExecuteCommandAsync(); |
| | | //} |
| | | //else |
| | | //{ |
| | |
| | | stockDetail.Qty -= qty; |
| | | if (stockDetail.Qty == 0) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | stockDetail.BitPalletMark = "1"; |
| | | stockDetail.InspectMark = "1"; |
| | | |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | //库存总表 |
| | | stock.Qty -= qty; |
| | | if (stock.Qty == 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | await Db.Deleteable(stock).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | #endregion |
| | |
| | | //不是上传完毕的修改取样状态 |
| | | if (notice.Status != "4") |
| | | { |
| | | var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); |
| | | var noticeDetail = await Db.Queryable<BllArrivalNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); |
| | | if (noticeDetail.IsSampling == "0") |
| | | { |
| | | noticeDetail.IsSampling = "1"; |
| | | |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | } |
| | |
| | | { |
| | | inspecd.Status = "3"; |
| | | } |
| | | Db.Updateable(inspecd).ExecuteCommand(); |
| | | await Db.Updateable(inspecd).ExecuteCommandAsync(); |
| | | #endregion |
| | | |
| | | |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "取样拣货", qcNo, "拣货", $"在PDA上对请验单号为:{qcNo}的托盘码为:{palletNo}的拣货操作", userId); |
| | |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | throw e; |
| | | } |
| | | } |
| | | |