|  |  |  | 
|---|
|  |  |  | using System.Threading.Tasks; | 
|---|
|  |  |  | using Utility; | 
|---|
|  |  |  | using WMS.BLL.Logic; | 
|---|
|  |  |  | using System.Web; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | namespace WMS.BLL.BllPdaServer | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //出库分配信息 | 
|---|
|  |  |  | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => | 
|---|
|  |  |  | m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo && | 
|---|
|  |  |  | m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.SONo == soNo && | 
|---|
|  |  |  | m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); | 
|---|
|  |  |  | if (allot == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | throw Oops.Bah("该托盘上没有可拣货的箱子"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var boxQty = await boxInfo.GroupBy(m => m.PalletNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); | 
|---|
|  |  |  | if (boxQty[0] > needQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //if (boxQty[0] > needQty) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToListAsync(); | 
|---|
|  |  |  | var comList = new List<BllCompleteDetail>(); | 
|---|
|  |  |  | 
|---|
|  |  |  | await Db.Insertable(comList).ExecuteCommandAsync(); | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += pickQty; | 
|---|
|  |  |  | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | await Db.Updateable(allot).ExecuteCommandAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | List<DataBoxInfo> boxInfos; | 
|---|
|  |  |  | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); | 
|---|
|  |  |  | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo && m.Status == "2"); | 
|---|
|  |  |  | if (await boxInfo.CountAsync() == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该箱码的信息"); | 
|---|
|  |  |  | 
|---|
|  |  |  | throw Oops.Bah("该托盘与箱码没有绑定关系"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var boxQty = await boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); | 
|---|
|  |  |  | if (boxQty[0] > needQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //if (boxQty[0] > needQty) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | foreach (var item in boxInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | await Db.Insertable(comList).ExecuteCommandAsync(); | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += pickQty; | 
|---|
|  |  |  | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | await Db.Updateable(allot).ExecuteCommandAsync(); | 
|---|
|  |  |  | 
|---|
|  |  |  | stockDetail.BitPalletMark = "1";//修改为零托标识 | 
|---|
|  |  |  | stockDetail.Qty -= pickQty; | 
|---|
|  |  |  | stockDetail.LockQty -= pickQty; | 
|---|
|  |  |  | if (stockDetail.LockQty < 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.LockQty = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | stockDetail.UDF5 = "1"; | 
|---|
|  |  |  | if (stockDetail.Qty == stockDetail.LockQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += int.Parse(PickQty); | 
|---|
|  |  |  | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | await Db.Updateable(allot).ExecuteCommandAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | var allotList = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "1" && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); | 
|---|
|  |  |  | return allotList; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var noticeList = Db.Queryable<BllExportNotice>().Where(w => w.IsDel == "0" && (w.Status == "3" || w.Status == "4")).Select(s => s.SONo).ToList(); | 
|---|
|  |  |  | //获取状态为待拣货或者部分拣货的出库单 | 
|---|
|  |  |  | var allotList2 = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); | 
|---|
|  |  |  | var allotList2 = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.PalletNo == palletNo && noticeList.Contains(m.SONo)).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(); | 
|---|
|  |  |  | //获取出库单据不为待拣货 执行完毕 订单关闭 等待执行的单据 | 
|---|
|  |  |  | 
|---|
|  |  |  | throw Oops.Bah("托盘码为空,请输入托盘码"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //获取状态为待拣货或者部分拣货的出库单 | 
|---|
|  |  |  | var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.PalletNo == palletNo); | 
|---|
|  |  |  | var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.PalletNo == palletNo); | 
|---|
|  |  |  | //var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SONo == soNo && m.Status != "4" && m.Status != "5"); | 
|---|
|  |  |  | if (!string.IsNullOrWhiteSpace(soNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | //获取出库口、规格、待拣及已拣数量(根据出库单明细ID、托盘号) | 
|---|
|  |  |  | public async Task<OutPdaInfo> GetOutlets(string soDetailId, string palletNo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var allotInfo = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3")).ToListAsync(); | 
|---|
|  |  |  | var allotInfo = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3" || m.Status == "5")).ToListAsync(); | 
|---|
|  |  |  | if (allotInfo.Count == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah($"{palletNo}托盘上未查询到分配信息,请核实"); | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | OutModel = data.OutMode, | 
|---|
|  |  |  | Standard = data.Standard, | 
|---|
|  |  |  | PickQty = data.Qty, | 
|---|
|  |  |  | PickQty = data.Qty - data.CompleteQty, | 
|---|
|  |  |  | PickedQty = data.CompleteQty | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | return data2; | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到出库单的明细"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.SONo == detail.SONo && m.IsDel == "0"); | 
|---|
|  |  |  | if (notice == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到出库单信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var data = new OutPdaInfo() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | PlanQty = detail.Qty, | 
|---|
|  |  |  | FinishQty = detail.CompleteQty | 
|---|
|  |  |  | FinishQty = detail.CompleteQty, | 
|---|
|  |  |  | OrderCode = notice.OrderCode, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | return data; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!string.IsNullOrWhiteSpace(soDetailId)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var allotInfos = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3")).ToListAsync(); | 
|---|
|  |  |  | var allotInfos = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3" || m.Status == "5")).ToListAsync(); | 
|---|
|  |  |  | if (allotInfos.Count == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah($"{palletNo}托盘上未查询到分配信息,请核实"); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return list; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 出库拣货获取扫描标签数量 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="palletNo"></param> | 
|---|
|  |  |  | /// <param name="boxNo"></param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | /// <exception cref="Exception"></exception> | 
|---|
|  |  |  | public decimal CheckBoxForPick(string palletNo ,string boxNo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | decimal boxNum = 0; | 
|---|
|  |  |  | if (string.IsNullOrEmpty(palletNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("托盘条码不可为空!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (string.IsNullOrEmpty(boxNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var boxInfo = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.PalletNo == palletNo).ToList(); | 
|---|
|  |  |  | boxNum = boxInfo.Sum(s => s.Qty); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var boxInfo = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo && w.PalletNo == palletNo).ToList(); | 
|---|
|  |  |  | if (boxInfo.Count <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | boxInfo = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo2 == boxNo && w.PalletNo == palletNo).ToList(); | 
|---|
|  |  |  | if (boxInfo.Count <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | boxInfo = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo3 == boxNo && w.PalletNo == palletNo).ToList(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (boxInfo == null || boxInfo.Count <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("标签条码未在该托盘内!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boxNum = boxInfo.Sum(s => s.Qty); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return boxNum; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception(ex.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取库内无箱码的托盘分配信息 | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该出库单的信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (notice.Status != "3") | 
|---|
|  |  |  | if (notice.Status != "3" && notice.Status != "4") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("出库单的状态不是正在执行,不能拣货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //出库分配信息 | 
|---|
|  |  |  | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => | 
|---|
|  |  |  | m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo && | 
|---|
|  |  |  | m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.SONo == soNo && | 
|---|
|  |  |  | m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); | 
|---|
|  |  |  | if (allot == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | await Db.Insertable(comList).ExecuteCommandAsync(); | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += pickQty; | 
|---|
|  |  |  | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | await Db.Updateable(allot).ExecuteCommandAsync(); | 
|---|
|  |  |  | //删除库存明细 | 
|---|
|  |  |  | 
|---|
|  |  |  | //删除或修改库存 | 
|---|
|  |  |  | stock.Qty -= pickQty; | 
|---|
|  |  |  | stock.LockQty -= pickQty; | 
|---|
|  |  |  | if (stock.LockQty < 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stock.LockQty = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (stock.Qty <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | await Db.Deleteable(stock).ExecuteCommandAsync(); | 
|---|
|  |  |  | 
|---|
|  |  |  | throw Oops.Bah("该托盘与箱码没有绑定关系"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var boxQty = boxInfos.First().Qty; | 
|---|
|  |  |  | if (boxQty > needQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("拣货数量不能大于剩余待拣数量"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //if (boxQty > needQty) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw Oops.Bah("拣货数量不能大于剩余待拣数量"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | foreach (var item in boxInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("拣货数量不能大于箱内数量"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (Convert.ToInt32(pickQty1) > needQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("拣货数量不能大于剩余待拣数量"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //if (Convert.ToInt32(pickQty1) > needQty) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw Oops.Bah("拣货数量不能大于剩余待拣数量"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | biaoShi = "2"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | throw Oops.Bah("该托盘与箱码没有绑定关系"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var boxQty = await boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); | 
|---|
|  |  |  | if (boxQty[0] > needQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //if (boxQty[0] > needQty) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | foreach (var item in boxInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | await Db.Insertable(comList).ExecuteCommandAsync(); | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += pickQty; | 
|---|
|  |  |  | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | if (allot.Status == "5") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | stockDetail.BitPalletMark = "1";//修改为零托标识 | 
|---|
|  |  |  | stockDetail.Qty -= pickQty; | 
|---|
|  |  |  | stockDetail.LockQty -= pickQty; | 
|---|
|  |  |  | if (stockDetail.LockQty < 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.LockQty = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (stockDetail.Qty == stockDetail.LockQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.Status = "2"; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | stock.Qty -= pickQty; | 
|---|
|  |  |  | stock.LockQty -= pickQty; | 
|---|
|  |  |  | if (stock.LockQty < 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stock.LockQty = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (stock.Qty <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | await Db.Deleteable(stock).ExecuteCommandAsync(); | 
|---|
|  |  |  | 
|---|
|  |  |  | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "拣货出库", soNo, "拣货", $"在PDA上对出库单号为:{soNo}的托盘码为:{palletNo}的拣货操作", userId); | 
|---|
|  |  |  | Db.CommitTran(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (AppFriendlyException e) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Db.RollbackTran(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //catch (AppFriendlyException e) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    Db.RollbackTran(); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | catch (Exception e) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Db.RollbackTran(); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 出库pda拣货-JC34 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="soNo"></param> | 
|---|
|  |  |  | /// <param name="soDetailId"></param> | 
|---|
|  |  |  | /// <param name="palletNo"></param> | 
|---|
|  |  |  | /// <param name="boxNo">箱码/盒码/支码</param> | 
|---|
|  |  |  | /// <param name="pickQty1"></param> | 
|---|
|  |  |  | /// <param name="userId"></param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | /// <exception cref="Exception"></exception> | 
|---|
|  |  |  | public async Task SoSetPick34(string soNo, string soDetailId, string palletNo, string boxNo, string pickQty1, int userId) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Db.BeginTran(); | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | #region 判断 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (string.IsNullOrWhiteSpace(soNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("出库单据不能为空"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (string.IsNullOrWhiteSpace(soDetailId)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("出库物料-批次不能为空"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (string.IsNullOrWhiteSpace(palletNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("托盘码不能为空"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw Oops.Bah("追溯条码和拣货数量不能同时输入"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //出库单 | 
|---|
|  |  |  | var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.SONo == soNo); | 
|---|
|  |  |  | if (notice == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该出库单的信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (notice.Status != "3" && notice.Status != "4") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("出库单的状态不是正在执行,不能拣货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //出库单明细 | 
|---|
|  |  |  | var noticeDetail = await Db.Queryable<BllExportNoticeDetail>() | 
|---|
|  |  |  | .FirstAsync(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); | 
|---|
|  |  |  | if (noticeDetail == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该出库单明细的信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //出库分配信息 | 
|---|
|  |  |  | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => | 
|---|
|  |  |  | m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.SONo == soNo && | 
|---|
|  |  |  | m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); | 
|---|
|  |  |  | if (allot == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该托盘的分配信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //剩余拣货数量(待拣减去已拣) | 
|---|
|  |  |  | var needQty = allot.Qty - allot.CompleteQty; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //库存明细 | 
|---|
|  |  |  | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId); | 
|---|
|  |  |  | if (stockDetail == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该托盘分配的库存明细信息!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //库存总表 | 
|---|
|  |  |  | var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); | 
|---|
|  |  |  | if (stock == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该托盘分配的库存信息!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (string.IsNullOrWhiteSpace(boxNo))//整托拣货 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | List<DataBoxInfo> boxInfos; | 
|---|
|  |  |  | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == stockDetail.SkuNo && m.LotNo == stockDetail.LotNo);//找到托盘上所有箱码 | 
|---|
|  |  |  | boxInfos = await boxInfo.ToListAsync(); | 
|---|
|  |  |  | if (boxInfo.Count() <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("该托盘上没有可拣货的箱子"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var boxQty = await boxInfo.GroupBy(m => m.PalletNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); | 
|---|
|  |  |  | if (boxQty[0] > needQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | decimal pickQty = 0;//拣货的数量 | 
|---|
|  |  |  | 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 Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (item.SkuNo != allot.SkuNo || item.LotNo != allot.LotNo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("当前托盘上有其他不同物料批次,拣货失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //添加拣货明细 | 
|---|
|  |  |  | var completeDetail = new BllCompleteDetail() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | SONo = soNo, | 
|---|
|  |  |  | SODetailNo = int.Parse(soDetailId), | 
|---|
|  |  |  | ExportAllotId = allot.Id, | 
|---|
|  |  |  | StockId = allot.StockId, | 
|---|
|  |  |  | BoxNo = item.BoxNo, | 
|---|
|  |  |  | BoxNo2 = item.BoxNo2, | 
|---|
|  |  |  | BoxNo3 = item.BoxNo3, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LotNo = allot.LotNo, | 
|---|
|  |  |  | LotText = allot.LotText, | 
|---|
|  |  |  | SupplierLot = allot.SupplierLot, | 
|---|
|  |  |  | SkuNo = allot.SkuNo, | 
|---|
|  |  |  | SkuName = allot.SkuName, | 
|---|
|  |  |  | Standard = allot.Standard, | 
|---|
|  |  |  | PalletNo = palletNo, | 
|---|
|  |  |  | CompleteQty = item.Qty, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | CreateUser = userId | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | comList.Add(completeDetail); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //删除库存箱码明细 | 
|---|
|  |  |  | await Db.Deleteable(item).ExecuteCommandAsync(); | 
|---|
|  |  |  | pickQty += item.Qty; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //添加拣货明细 | 
|---|
|  |  |  | await Db.Insertable(comList).ExecuteCommandAsync(); | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += pickQty; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | await Db.Updateable(allot).ExecuteCommandAsync(); | 
|---|
|  |  |  | //删除库存明细 | 
|---|
|  |  |  | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); | 
|---|
|  |  |  | //删除或修改库存 | 
|---|
|  |  |  | stock.Qty -= pickQty; | 
|---|
|  |  |  | stock.LockQty -= pickQty; | 
|---|
|  |  |  | if (stock.LockQty < 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stock.LockQty = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (stock.Qty <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | await Db.Deleteable(stock).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | await Db.Updateable(stock).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //判断托盘上还有没有其他物料 | 
|---|
|  |  |  | var palletData = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo && w.Id != stockDetail.Id); | 
|---|
|  |  |  | if (palletData == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //改变托盘状态为:未使用 | 
|---|
|  |  |  | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); | 
|---|
|  |  |  | if (pallet == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未在托盘表中查询到托盘信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | pallet.Status = "0"; | 
|---|
|  |  |  | await Db.Updateable(pallet).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //修改出库单明细拣货数量 | 
|---|
|  |  |  | noticeDetail.CompleteQty += pickQty; | 
|---|
|  |  |  | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var num = await Db.Queryable<BllExportNoticeDetail>() | 
|---|
|  |  |  | .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); | 
|---|
|  |  |  | if (num <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | notice.Status = "4"; //更改为执行完成 | 
|---|
|  |  |  | //修改出库单信息 | 
|---|
|  |  |  | await Db.Updateable(notice).ExecuteCommandAsync(); | 
|---|
|  |  |  | if (notice.IsWave == "1") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var waveNum = await Db.Queryable<BllExportNotice>().CountAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo && m.Status != "4"); | 
|---|
|  |  |  | if (waveNum == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | await Db.Updateable(wave).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var biaoShi = "0";//0:整箱拣货、1:整盒拣货、 2:散支拣货、3:数量拣货 | 
|---|
|  |  |  | List<DataBoxInfo> boxInfos; | 
|---|
|  |  |  | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); | 
|---|
|  |  |  | if (await boxInfo.CountAsync() == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | biaoShi = "1"; | 
|---|
|  |  |  | boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo2 == boxNo); | 
|---|
|  |  |  | if (await boxInfo.CountAsync() == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | biaoShi = "2"; | 
|---|
|  |  |  | boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo3 == boxNo); | 
|---|
|  |  |  | if (await boxInfo.CountAsync() == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该箱码及追溯码的信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (biaoShi == "0" && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | biaoShi = "3"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (biaoShi == "2" && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("追溯条码和拣货数量不能同时输入"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boxInfos = await boxInfo.ToListAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (boxInfos[0].SkuNo != allot.SkuNo || boxInfos[0].LotNo != allot.LotNo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("箱码物料批次和选择物料批次不一致!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList(); | 
|---|
|  |  |  | if (biaoShi == "2") //散支拣货 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | boxInfos = boxInfos.Where(m => m.BoxNo3 == boxNo).ToList(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (boxInfos.Count() == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该箱码及追溯码的信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (boxInfos.Count() > 1) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("该追溯支码的信息大于1条,信息错误,请核实!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (boxInfos.Any(m => m.PalletNo != palletNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("该托盘与箱码没有绑定关系"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var boxQty = boxInfos.First().Qty; | 
|---|
|  |  |  | //if (boxQty > needQty) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw Oops.Bah("拣货数量不能大于剩余待拣数量"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | foreach (var item in boxInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (biaoShi == "1")//整盒拣货 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (boxInfo.Count() == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该盒码的信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (boxInfo.Any(m => m.PalletNo != palletNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("该托盘与盒码没有绑定关系"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var boxQty = await boxInfo.GroupBy(m => m.BoxNo2).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); | 
|---|
|  |  |  | //if (boxQty[0] > needQty) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | foreach (var item in boxInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (biaoShi == "3")//数量拣货 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (boxInfo.Count() > 1) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("该箱码内存在支码不能进行数量拣货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | decimal boxQty = boxInfo.First().Qty; | 
|---|
|  |  |  | if (Convert.ToDecimal(pickQty1) > boxQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("拣货数量不能大于箱内数量"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //if (Convert.ToInt32(pickQty1) > needQty) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw Oops.Bah("拣货数量不能大于剩余待拣数量"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else //整箱拣货 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (boxInfo.Count() == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该箱码的信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (boxInfo.Any(m => m.PalletNo != palletNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("该托盘与箱码没有绑定关系"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var boxQty = await boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); | 
|---|
|  |  |  | //if (boxQty[0] > needQty) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | foreach (var item in boxInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (comDetailList.Any(m => m.BoxNo == item.BoxNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah($"当前{item.BoxNo}已拣货完成,请勿重复拣货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | decimal pickQty = 0;//拣货的数量 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var comList = new List<BllCompleteDetail>(); | 
|---|
|  |  |  | foreach (var item in boxInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //添加拣货明细 | 
|---|
|  |  |  | var completeDetail = new BllCompleteDetail() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | SONo = soNo, | 
|---|
|  |  |  | SODetailNo = int.Parse(soDetailId), | 
|---|
|  |  |  | ExportAllotId = allot.Id, | 
|---|
|  |  |  | StockId = allot.StockId, | 
|---|
|  |  |  | BoxNo = item.BoxNo, | 
|---|
|  |  |  | BoxNo2 = item.BoxNo2, | 
|---|
|  |  |  | BoxNo3 = item.BoxNo3, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LotNo = allot.LotNo, | 
|---|
|  |  |  | LotText = allot.LotText, | 
|---|
|  |  |  | SupplierLot = allot.SupplierLot, | 
|---|
|  |  |  | SkuNo = allot.SkuNo, | 
|---|
|  |  |  | SkuName = allot.SkuName, | 
|---|
|  |  |  | Standard = allot.Standard, | 
|---|
|  |  |  | PalletNo = palletNo, | 
|---|
|  |  |  | CompleteQty = biaoShi == "3" ? decimal.Parse(pickQty1) : item.Qty, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | CreateUser = userId | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | comList.Add(completeDetail); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (biaoShi != "3") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //删除库存箱码明细 | 
|---|
|  |  |  | await Db.Deleteable(item).ExecuteCommandAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | pickQty += item.Qty; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else//数量拣货 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (decimal.Parse(pickQty1) == item.Qty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //删除库存箱码明细 | 
|---|
|  |  |  | await Db.Deleteable(item).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | item.Qty -= decimal.Parse(pickQty1); | 
|---|
|  |  |  | item.BitBoxMark = "1";//零箱标识 | 
|---|
|  |  |  | await Db.Updateable(item).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | pickQty += decimal.Parse(pickQty1); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //改变库内箱码是否零箱信息 | 
|---|
|  |  |  | if (biaoShi == "1" || biaoShi == "2") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var boxSurplusList = new List<DataBoxInfo>(); | 
|---|
|  |  |  | if (biaoShi == "1") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | boxSurplusList = boxInfo.Where(m => m.BoxNo2 != boxNo).ToList(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | boxSurplusList = boxInfo.Where(m => m.BoxNo3 != boxNo).ToList(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | foreach (var item in boxSurplusList) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | item.BitBoxMark = "1"; | 
|---|
|  |  |  | await Db.Updateable(item).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | await Db.Insertable(comList).ExecuteCommandAsync(); | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += pickQty; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | if (allot.Status == "5") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //判断该托盘是否还存在物料 存在改为待回库 待回库完成后改为已完成 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | await Db.Updateable(allot).ExecuteCommandAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //删除或修改库存明细 | 
|---|
|  |  |  | stockDetail.BitPalletMark = "1";//修改为零托标识 | 
|---|
|  |  |  | stockDetail.Qty -= pickQty; | 
|---|
|  |  |  | stockDetail.LockQty -= pickQty; | 
|---|
|  |  |  | if (stockDetail.LockQty < 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.LockQty = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (stockDetail.Qty == stockDetail.LockQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.Status = "2"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (stockDetail.Qty > stockDetail.LockQty && stockDetail.LockQty > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.Status = "1"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.Status = "0"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (stockDetail.Qty <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | await Db.Updateable(stockDetail).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | stock.Qty -= pickQty; | 
|---|
|  |  |  | stock.LockQty -= pickQty; | 
|---|
|  |  |  | if (stock.LockQty < 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stock.LockQty = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (stock.Qty <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | await Db.Deleteable(stock).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | await Db.Updateable(stock).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var num2 = await Db.Queryable<DataStockDetail>().CountAsync(m => m.IsDel == "0" && m.PalletNo == palletNo); | 
|---|
|  |  |  | if (num2 <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //改变托盘状态 | 
|---|
|  |  |  | var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); | 
|---|
|  |  |  | if (pallet == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未在托盘表中查询到托盘信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | pallet.Status = "0"; | 
|---|
|  |  |  | await Db.Updateable(pallet).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //修改出库单明细拣货数量 | 
|---|
|  |  |  | noticeDetail.CompleteQty += pickQty; | 
|---|
|  |  |  | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var num = await Db.Queryable<BllExportNoticeDetail>() | 
|---|
|  |  |  | .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); | 
|---|
|  |  |  | if (num <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | notice.Status = "4"; //更改为执行完成 | 
|---|
|  |  |  | //修改出库单信息 | 
|---|
|  |  |  | await Db.Updateable(notice).ExecuteCommandAsync(); | 
|---|
|  |  |  | if (notice.IsWave == "1") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var waveNum = await Db.Queryable<BllExportNotice>() | 
|---|
|  |  |  | .CountAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo && m.Status != "4"); | 
|---|
|  |  |  | if (waveNum == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | 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(); | 
|---|
|  |  |  | throw new Exception(e.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 成品出库pda拣货-JC34 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="soNo"></param> | 
|---|
|  |  |  | /// <param name="soDetailId"></param> | 
|---|
|  |  |  | /// <param name="palletNo"></param> | 
|---|
|  |  |  | /// <param name="boxNoList"></param> | 
|---|
|  |  |  | /// <param name="userId"></param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | /// <exception cref="Exception"></exception> | 
|---|
|  |  |  | public async Task SoSetPickCode34(string soNo, string soDetailId, string palletNo, List<string> boxNoList, int userId) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | #region 判断 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (string.IsNullOrWhiteSpace(soNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("出库单据不能为空"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (string.IsNullOrWhiteSpace(soDetailId)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("出库物料-批次不能为空"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (string.IsNullOrWhiteSpace(palletNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("托盘码不能为空"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //开启事务 | 
|---|
|  |  |  | Db.BeginTran(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //出库单 | 
|---|
|  |  |  | var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.SONo == soNo); | 
|---|
|  |  |  | if (notice == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该出库单的信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (notice.Status != "3") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("出库单的状态不是正在执行,不能拣货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //出库单明细 | 
|---|
|  |  |  | var noticeDetail = await Db.Queryable<BllExportNoticeDetail>() | 
|---|
|  |  |  | .FirstAsync(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); | 
|---|
|  |  |  | if (noticeDetail == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该出库单明细的信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //出库分配信息 | 
|---|
|  |  |  | 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 Oops.Bah("未查询到该托盘的分配信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //剩余拣货数量(待拣减去已拣) | 
|---|
|  |  |  | var needQty = allot.Qty - allot.CompleteQty; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //库存明细 | 
|---|
|  |  |  | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId); | 
|---|
|  |  |  | if (stockDetail == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该托盘分配的库存明细信息!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //库存总表 | 
|---|
|  |  |  | var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); | 
|---|
|  |  |  | if (stock == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该托盘分配的库存信息!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (boxNoList == null || boxNoList.Count <= 0)//整托拣货 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | List<DataBoxInfo> boxInfos; | 
|---|
|  |  |  | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == stockDetail.SkuNo && m.LotNo == stockDetail.LotNo);//找到托盘上所有箱码 | 
|---|
|  |  |  | boxInfos = await boxInfo.ToListAsync(); | 
|---|
|  |  |  | if (boxInfo.Count() <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("该托盘上没有可拣货的箱子"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var boxQty = await boxInfo.GroupBy(m => m.PalletNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); | 
|---|
|  |  |  | if (boxQty[0] > needQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | decimal pickQty = 0;//拣货的数量 | 
|---|
|  |  |  | 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 Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (item.SkuNo != allot.SkuNo || item.LotNo != allot.LotNo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("当前托盘上有其他不同物料批次,拣货失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //添加拣货明细 | 
|---|
|  |  |  | var completeDetail = new BllCompleteDetail() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | SONo = soNo, | 
|---|
|  |  |  | SODetailNo = int.Parse(soDetailId), | 
|---|
|  |  |  | ExportAllotId = allot.Id, | 
|---|
|  |  |  | StockId = allot.StockId, | 
|---|
|  |  |  | BoxNo = item.BoxNo, | 
|---|
|  |  |  | BoxNo2 = item.BoxNo2, | 
|---|
|  |  |  | BoxNo3 = item.BoxNo3, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LotNo = allot.LotNo, | 
|---|
|  |  |  | LotText = allot.LotText, | 
|---|
|  |  |  | SupplierLot = allot.SupplierLot, | 
|---|
|  |  |  | SkuNo = allot.SkuNo, | 
|---|
|  |  |  | SkuName = allot.SkuName, | 
|---|
|  |  |  | Standard = allot.Standard, | 
|---|
|  |  |  | PalletNo = palletNo, | 
|---|
|  |  |  | CompleteQty = item.Qty, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | CreateUser = userId | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | comList.Add(completeDetail); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //删除库存箱码明细 | 
|---|
|  |  |  | await Db.Deleteable(item).ExecuteCommandAsync(); | 
|---|
|  |  |  | pickQty += item.Qty; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //添加拣货明细 | 
|---|
|  |  |  | await Db.Insertable(comList).ExecuteCommandAsync(); | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += pickQty; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | await Db.Updateable(allot).ExecuteCommandAsync(); | 
|---|
|  |  |  | //删除库存明细 | 
|---|
|  |  |  | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); | 
|---|
|  |  |  | //删除或修改库存 | 
|---|
|  |  |  | stock.Qty -= pickQty; | 
|---|
|  |  |  | stock.LockQty -= pickQty; | 
|---|
|  |  |  | if (stock.LockQty < 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stock.LockQty = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (stock.Qty <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | await Db.Deleteable(stock).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | await Db.Updateable(stock).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //判断托盘上还有没有其他物料 | 
|---|
|  |  |  | var palletData = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo && w.Id != stockDetail.Id); | 
|---|
|  |  |  | if (palletData == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //改变托盘状态为:未使用 | 
|---|
|  |  |  | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); | 
|---|
|  |  |  | if (pallet == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未在托盘表中查询到托盘信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | pallet.Status = "0"; | 
|---|
|  |  |  | await Db.Updateable(pallet).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //修改出库单明细拣货数量 | 
|---|
|  |  |  | noticeDetail.CompleteQty += pickQty; | 
|---|
|  |  |  | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var num = await Db.Queryable<BllExportNoticeDetail>() | 
|---|
|  |  |  | .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); | 
|---|
|  |  |  | if (num <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | notice.Status = "4"; //更改为执行完成 | 
|---|
|  |  |  | //修改出库单信息 | 
|---|
|  |  |  | await Db.Updateable(notice).ExecuteCommandAsync(); | 
|---|
|  |  |  | if (notice.IsWave == "1") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var waveNum = await Db.Queryable<BllExportNotice>().CountAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo && m.Status != "4"); | 
|---|
|  |  |  | if (waveNum == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | await Db.Updateable(wave).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | foreach (var boxNo in boxNoList) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var biaoShi = "0";//0:整箱拣货、1:整盒拣货、 2:散支拣货 | 
|---|
|  |  |  | List<DataBoxInfo> boxInfos; | 
|---|
|  |  |  | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); | 
|---|
|  |  |  | if (await boxInfo.CountAsync() == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | biaoShi = "1"; | 
|---|
|  |  |  | boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo2 == boxNo); | 
|---|
|  |  |  | if (await boxInfo.CountAsync() == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | biaoShi = "2"; | 
|---|
|  |  |  | boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo3 == boxNo); | 
|---|
|  |  |  | if (await boxInfo.CountAsync() == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该箱码及追溯码的信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boxInfos = await boxInfo.ToListAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (boxInfos[0].SkuNo != allot.SkuNo || boxInfos[0].LotNo != allot.LotNo) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("箱码物料批次和选择物料批次不一致!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList(); | 
|---|
|  |  |  | if (biaoShi == "2") //散支拣货 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | boxInfos = boxInfos.Where(m => m.BoxNo3 == boxNo).ToList(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (boxInfos.Count() == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该箱码及追溯码的信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (boxInfos.Count() > 1) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("该追溯支码的信息大于1条,信息错误,请核实!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (boxInfos.Any(m => m.PalletNo != palletNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("该托盘与箱码没有绑定关系"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var boxQty = boxInfos.First().Qty; | 
|---|
|  |  |  | //if (boxQty > needQty) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw Oops.Bah("拣货数量不能大于剩余待拣数量"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | foreach (var item in boxInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (biaoShi == "1")//整盒拣货 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (boxInfo.Count() == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该盒码的信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (boxInfo.Any(m => m.PalletNo != palletNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("该托盘与盒码没有绑定关系"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var boxQty = await boxInfo.GroupBy(m => m.BoxNo2).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); | 
|---|
|  |  |  | //if (boxQty[0] > needQty) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | foreach (var item in boxInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else //整箱拣货 | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (boxInfo.Count() == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未查询到该箱码的信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (boxInfo.Any(m => m.PalletNo != palletNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("该托盘与箱码没有绑定关系"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var boxQty = await boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); | 
|---|
|  |  |  | //if (boxQty[0] > needQty) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | foreach (var item in boxInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (comDetailList.Any(m => m.BoxNo == item.BoxNo)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah($"当前{item.BoxNo}已拣货完成,请勿重复拣货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | decimal pickQty = 0;//拣货的数量 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var comList = new List<BllCompleteDetail>(); | 
|---|
|  |  |  | foreach (var item in boxInfos) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //添加拣货明细 | 
|---|
|  |  |  | var completeDetail = new BllCompleteDetail() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | SONo = soNo, | 
|---|
|  |  |  | SODetailNo = int.Parse(soDetailId), | 
|---|
|  |  |  | ExportAllotId = allot.Id, | 
|---|
|  |  |  | StockId = allot.StockId, | 
|---|
|  |  |  | BoxNo = item.BoxNo, | 
|---|
|  |  |  | BoxNo2 = item.BoxNo2, | 
|---|
|  |  |  | BoxNo3 = item.BoxNo3, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LotNo = allot.LotNo, | 
|---|
|  |  |  | LotText = allot.LotText, | 
|---|
|  |  |  | SupplierLot = allot.SupplierLot, | 
|---|
|  |  |  | SkuNo = allot.SkuNo, | 
|---|
|  |  |  | SkuName = allot.SkuName, | 
|---|
|  |  |  | Standard = allot.Standard, | 
|---|
|  |  |  | PalletNo = palletNo, | 
|---|
|  |  |  | CompleteQty = item.Qty, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | CreateUser = userId | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | comList.Add(completeDetail); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (biaoShi != "3") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //删除库存箱码明细 | 
|---|
|  |  |  | await Db.Deleteable(item).ExecuteCommandAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | pickQty += item.Qty; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //改变库内箱码是否零箱信息 | 
|---|
|  |  |  | if (biaoShi == "1" || biaoShi == "2") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var boxSurplusList = new List<DataBoxInfo>(); | 
|---|
|  |  |  | if (biaoShi == "1") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | boxSurplusList = boxInfo.Where(m => m.BoxNo2 != boxNo).ToList(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | boxSurplusList = boxInfo.Where(m => m.BoxNo3 != boxNo).ToList(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | foreach (var item in boxSurplusList) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | item.BitBoxMark = "1"; | 
|---|
|  |  |  | await Db.Updateable(item).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | await Db.Insertable(comList).ExecuteCommandAsync(); | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += pickQty; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | if (allot.Status == "5") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //判断该托盘是否还存在物料 存在改为待回库 待回库完成后改为已完成 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | await Db.Updateable(allot).ExecuteCommandAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //删除或修改库存明细 | 
|---|
|  |  |  | stockDetail.BitPalletMark = "1";//修改为零托标识 | 
|---|
|  |  |  | stockDetail.Qty -= pickQty; | 
|---|
|  |  |  | stockDetail.LockQty -= pickQty; | 
|---|
|  |  |  | if (stockDetail.LockQty < 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.LockQty = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (stockDetail.Qty == stockDetail.LockQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.Status = "2"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (stockDetail.Qty > stockDetail.LockQty && stockDetail.LockQty > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.Status = "1"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.Status = "0"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (stockDetail.Qty <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | await Db.Updateable(stockDetail).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | stock.Qty -= pickQty; | 
|---|
|  |  |  | stock.LockQty -= pickQty; | 
|---|
|  |  |  | if (stock.LockQty < 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stock.LockQty = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (stock.Qty <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | await Db.Deleteable(stock).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | await Db.Updateable(stock).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | var num2 = await Db.Queryable<DataStockDetail>().CountAsync(m => m.IsDel == "0" && m.PalletNo == palletNo); | 
|---|
|  |  |  | if (num2 <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //改变托盘状态 | 
|---|
|  |  |  | var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); | 
|---|
|  |  |  | if (pallet == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未在托盘表中查询到托盘信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | pallet.Status = "0"; | 
|---|
|  |  |  | await Db.Updateable(pallet).ExecuteCommandAsync(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //修改出库单明细拣货数量 | 
|---|
|  |  |  | noticeDetail.CompleteQty += pickQty; | 
|---|
|  |  |  | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var num = await Db.Queryable<BllExportNoticeDetail>() | 
|---|
|  |  |  | .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); | 
|---|
|  |  |  | if (num <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | notice.Status = "4"; //更改为执行完成 | 
|---|
|  |  |  | //修改出库单信息 | 
|---|
|  |  |  | await Db.Updateable(notice).ExecuteCommandAsync(); | 
|---|
|  |  |  | if (notice.IsWave == "1") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var waveNum = await Db.Queryable<BllExportNotice>() | 
|---|
|  |  |  | .CountAsync(m => m.IsDel == "0" && m.WaveNo == notice.WaveNo && m.Status != "4"); | 
|---|
|  |  |  | if (waveNum == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | 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(); | 
|---|
|  |  |  | throw new Exception(e.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //出库pda拣货 | 
|---|
|  |  |  | public async Task SoSetQtyPick(string soNo, string soDetailId, string palletNo, string PickQty, int userId) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //出库分配信息 | 
|---|
|  |  |  | var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m => | 
|---|
|  |  |  | m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo && | 
|---|
|  |  |  | m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.SONo == soNo && | 
|---|
|  |  |  | m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); | 
|---|
|  |  |  | if (allot == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += int.Parse(PickQty); | 
|---|
|  |  |  | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | await Db.Updateable(allot).ExecuteCommandAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | stockDetail.BitPalletMark = "1";//修改为零托标识 | 
|---|
|  |  |  | stockDetail.Qty -= int.Parse(PickQty); | 
|---|
|  |  |  | stockDetail.LockQty -= int.Parse(PickQty); | 
|---|
|  |  |  | if (stockDetail.LockQty < 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.LockQty = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (stockDetail.Qty == stockDetail.LockQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.Status = "2"; | 
|---|
|  |  |  | 
|---|
|  |  |  | throw Oops.Bah("需要垛数大于库存垛数,请重新输入!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | stockDetail = new AllotSku().GetDataListOrder(stockDetail); | 
|---|
|  |  |  | //stockDetail = new AllotSku().GetDataListOrder(stockDetail); | 
|---|
|  |  |  | //获取库存总表信息 | 
|---|
|  |  |  | var stock = await Db.Queryable<DataStock>().FirstAsync(s => s.IsDel == "0" && s.SkuNo == "100099"); | 
|---|
|  |  |  | //验证库存总表是否为空 | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("未获取到对应储位信息,请检查!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (locat.Status != "3") | 
|---|
|  |  |  | if (locat.Status != "1") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw Oops.Bah("当前储位不是有物品,请检查!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | #region 添加出库操作日志记录信息 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //添加操作日志记录 | 
|---|
|  |  |  | var k = new OperationSOServer().AddLogOperationSo("出库作业", "拣货明细", soNo, "完成", $"用PDA完成了单据号为{soNo}的平库出库", userId); | 
|---|
|  |  |  | var k = new OperationSOServer().AddLogOperationSo("出库作业", "拣货明细", palletNo, "完成", $"用PDA完成了托盘号为{palletNo}的平库出库", userId); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | await Db.Insertable(comList).ExecuteCommandAsync(); | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += pickQty; | 
|---|
|  |  |  | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | if (allot.Status == "5") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | stockDetail.InspectMark = "1"; //抽检托标识 | 
|---|
|  |  |  | stockDetail.Qty -= pickQty; | 
|---|
|  |  |  | stockDetail.LockQty -= pickQty; | 
|---|
|  |  |  | if (stockDetail.LockQty < 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.LockQty = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (stockDetail.Qty == stockDetail.LockQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockDetail.Status = "2"; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | stock.Qty -= pickQty; | 
|---|
|  |  |  | stock.LockQty -= pickQty; | 
|---|
|  |  |  | if (stock.LockQty < 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stock.LockQty = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | stock.IsSampling = "1"; | 
|---|
|  |  |  | if (stock.Qty <= 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += int.Parse(PickQty); | 
|---|
|  |  |  | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | await Db.Updateable(allot).ExecuteCommandAsync(); | 
|---|
|  |  |  | 
|---|
|  |  |  | await Db.Insertable(comList).ExecuteCommandAsync(); | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += pickQty; | 
|---|
|  |  |  | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | await Db.Updateable(allot).ExecuteCommandAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | await Db.Insertable(comList).ExecuteCommandAsync(); | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += pickQty; | 
|---|
|  |  |  | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | if (allot.Status == "5") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //修改出库分配信息 | 
|---|
|  |  |  | allot.CompleteQty += int.Parse(PickQty); | 
|---|
|  |  |  | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; | 
|---|
|  |  |  | allot.UpdateTime = DateTime.Now; | 
|---|
|  |  |  | await Db.Updateable(allot).ExecuteCommandAsync(); | 
|---|
|  |  |  |  | 
|---|