| | |
| | | foreach (var demo in list) |
| | | { |
| | | var com = comInfo.FirstOrDefault(m => m.IsDel == "0" && m.BoxNo3 == demo.BoxNo); |
| | | if (com!=null) |
| | | if (com != null) |
| | | { |
| | | demo.PickedQty = com.CompleteQty; |
| | | } |
| | |
| | | } |
| | | |
| | | //获取库内无箱码的托盘分配信息 |
| | | public List<OutPdaInfo> GetAllotPlnInfo(string soDetailId, string palletNo) |
| | | public List<BoxInfo> GetAllotPlnInfo(string soDetailId, string palletNo) |
| | | { |
| | | try |
| | | { |
| | | #region 判断 |
| | | |
| | | //根据id及托盘获取出库单和托盘拣货信息 |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘号不能为空"); |
| | | } |
| | | //获取对应托盘下是否存在箱码信息 |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().First(b => b.IsDel == "0" && b.PalletNo == palletNo); |
| | | if (boxInfo != null) |
| | | { |
| | | throw new Exception($"{palletNo}托盘上存在箱码信息,无法在数量拣货进行操作!"); |
| | | } |
| | | //出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(a => a.Id == int.Parse(soDetailId) && a.IsDel == "0"); |
| | | if (noticeDetail == null) |
| | | { |
| | | throw new Exception($"未查询到对应出库单明细信息,请核实!"); |
| | | } |
| | | //出库单总单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel == "0" && a.SONo == noticeDetail.SONo); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception($"未查询到对应出库单总单信息,请核实!"); |
| | | } |
| | | //分配信息 |
| | | var allot = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.PalletNo == palletNo && a.Status == "2" || a.Status == "3"); |
| | | if (allot == null) |
| | | { |
| | | throw new Exception($"未查询到对应分配信息,请核实!"); |
| | | } |
| | | //库存明细 |
| | | var detail = Db.Queryable<DataStockDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo); |
| | | if (detail == null) |
| | | { |
| | | throw new Exception($"未查询到库存明细信息,请核实!"); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | List<BoxInfo> pdaInfo = new List<BoxInfo>(); |
| | | |
| | | BoxInfo info = new BoxInfo() |
| | | { |
| | | SkuNo = detail.SkuNo, |
| | | BoxNo = detail.SkuNo, |
| | | Qty = (int)allot.Qty, |
| | | PickedQty = (int)allot.CompleteQty, |
| | | }; |
| | | |
| | | pdaInfo.Add(info); |
| | | return pdaInfo; |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | throw new NotImplementedException(); |
| | | } |
| | | |
| | | //出库pda拣货 |
| | | public void SoSetPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, int userId) |
| | | public void SoSetPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string pickQty1, int userId) |
| | | { |
| | | Db.BeginTran(); |
| | | try |
| | |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) |
| | | { |
| | | throw new Exception("追溯条码和拣货数量不能同时输入"); |
| | | } |
| | | |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); |
| | | if (notice == null) |
| | |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += pickQty; |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | allot.UpdateTime = DateTime.Now; |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | //删除库存明细 |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | |
| | | } |
| | | else |
| | | { |
| | | var biaoShi = "0";//0:整箱拣货、1:散支拣货 |
| | | 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) |
| | |
| | | |
| | | biaoShi = "1"; |
| | | } |
| | | else if (!string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)//数量拣货 |
| | | { |
| | | if (boxInfo.Count() > 1) |
| | | { |
| | | throw new Exception("该箱码内存在支码不能进行数量拣货"); |
| | | } |
| | | int boxQty = boxInfo.First().Qty; |
| | | if (Convert.ToInt32(pickQty1) > boxQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内数量"); |
| | | } |
| | | if (Convert.ToInt32(pickQty1) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于剩余待拣数量"); |
| | | } |
| | | |
| | | biaoShi = "2"; |
| | | } |
| | | else //整箱拣货 |
| | | { |
| | | if (boxInfo.Count() == 0) |
| | |
| | | var comList = new List<BllCompleteDetail>(); |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) |
| | | if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) |
| | | { |
| | | throw new Exception($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | } |
| | |
| | | SkuName = allot.SkuName, |
| | | Standard = allot.Standard, |
| | | PalletNo = palletNo, |
| | | CompleteQty = item.Qty, |
| | | CompleteQty = biaoShi == "2" ? int.Parse(pickQty1) : item.Qty, |
| | | |
| | | CreateUser = userId |
| | | }; |
| | | comList.Add(completeDetail); |
| | | |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | if (biaoShi != "2") |
| | | { |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | } |
| | | else//数量拣货 |
| | | { |
| | | if (int.Parse(pickQty1) == item.Qty) |
| | | { |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | item.Qty -= int.Parse(pickQty1); |
| | | item.BitBoxMark = "1";//零箱标识 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | } |
| | | pickQty += item.Qty; |
| | | } |
| | | //改变库内箱码是否零箱信息 |
| | |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += pickQty; |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | allot.UpdateTime = DateTime.Now; |
| | | if (allot.Status == "5") |
| | | { |
| | | //判断该托盘是否还存在物料 存在改为待回库 待回库完成后改为已完成 |
| | |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | } |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "拣货出库", soNo, "拣货", $"在PDA上对出库单号为:{soNo}的托盘码为:{palletNo}的拣货操作", userId); |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | //出库pda拣货 |
| | | public void SoSetQtyPick(string soNo, string soDetailId, string palletNo, string PickQty, int userId) |
| | | { |
| | | Db.BeginTran(); |
| | | try |
| | | { |
| | | #region 判断 |
| | | |
| | | if (string.IsNullOrWhiteSpace(soNo)) |
| | | { |
| | | throw new Exception("出库单据不能为空"); |
| | | } |
| | | //if (string.IsNullOrWhiteSpace(soDetailId)) |
| | | //{ |
| | | // throw new Exception("出库物料-批次不能为空"); |
| | | //} |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | } |
| | | |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("未查询到该出库单的信息"); |
| | | } |
| | | if (notice.Status != "3") |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行,不能拣货"); |
| | | } |
| | | //出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>() |
| | | .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | if (noticeDetail == null) |
| | | { |
| | | throw new Exception("未查询到该出库单明细的信息"); |
| | | } |
| | | //出库分配信息 |
| | | var allot = Db.Queryable<BllExportAllot>().First(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("未查询到该托盘的分配信息"); |
| | | } |
| | | //剩余拣货数量(待拣减去已拣) |
| | | var needQty = allot.Qty - allot.CompleteQty; |
| | | if (int.Parse(PickQty) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于托内剩余待拣数量"); |
| | | } |
| | | |
| | | //库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存明细信息!"); |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | #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); |
| | | |
| | | //判读是否存在拣货明细 |
| | | int isComplete = 0; |
| | | if (complete != null) |
| | | { |
| | | isComplete = 1; |
| | | } |
| | | |
| | | var comList = new List<BllCompleteDetail>(); |
| | | //判断是否存在拣货明细 |
| | | if (isComplete == 0) |
| | | { |
| | | //添加拣货明细 |
| | | var completeDetail = new BllCompleteDetail() |
| | | { |
| | | SONo = soNo, |
| | | SODetailNo = int.Parse(soDetailId), |
| | | ExportAllotId = allot.Id, |
| | | StockId = allot.StockId, |
| | | BoxNo = "", |
| | | BoxNo2 = "", |
| | | BoxNo3 = "", |
| | | |
| | | LotNo = allot.LotNo, |
| | | LotText = allot.LotText, |
| | | SupplierLot = allot.SupplierLot, |
| | | SkuNo = allot.SkuNo, |
| | | SkuName = allot.SkuName, |
| | | Standard = allot.Standard, |
| | | PalletNo = palletNo, |
| | | CompleteQty = int.Parse(PickQty), |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = Db.GetDate(), |
| | | }; |
| | | comList.Add(completeDetail); |
| | | |
| | | //添加拣货明细 |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | } |
| | | else if (isComplete == 1) |
| | | { |
| | | complete.CompleteQty += int.Parse(PickQty); |
| | | complete.UpdateUser = userId; |
| | | complete.UpdateTime = Db.GetDate(); |
| | | |
| | | Db.Updateable(complete).ExecuteCommand(); |
| | | } |
| | | |
| | | |
| | | |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += int.Parse(PickQty); |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | allot.UpdateTime = DateTime.Now; |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | |
| | | int isDel = 0; |
| | | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | | stockDetail.Qty -= int.Parse(PickQty); |
| | | stockDetail.LockQty -= int.Parse(PickQty); |
| | | 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) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | isDel = 1; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | } |
| | | //删除或修改库存 |
| | | stock.Qty -= int.Parse(PickQty); |
| | | stock.LockQty -= int.Parse(PickQty); |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | } |
| | | |
| | | //改变托盘状态为:未使用 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | } |
| | | |
| | | //判断托盘上物料是否拣货完毕 |
| | | if (isDel == 0) |
| | | { |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | } |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += int.Parse(PickQty); |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | | .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "拣货出库", soNo, "拣货", $"在PDA上对出库单号为:{soNo}的托盘码为:{palletNo}的拣货操作", userId); |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception e) |
| | |
| | | /// <param name="url"> </param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public string IssuePlnOutHouse(OutModePalletVm model, int userId,string url) |
| | | public string IssuePlnOutHouse(OutModePalletVm model, int userId, string url) |
| | | { |
| | | try |
| | | { |
| | |
| | | if (stockDetail.Count > 0) |
| | | { |
| | | //判断是否大于需要垛数 |
| | | if (stockDetail.Count< int.Parse(model.Num)) |
| | | if (stockDetail.Count < int.Parse(model.Num)) |
| | | { |
| | | strMsg = "需要垛数大于库存垛数,请重新输入!"; |
| | | return strMsg; |
| | |
| | | s.Status = "2"; //2 已分配 |
| | | //修改库存明细信息 |
| | | Db.Updateable(s).ExecuteCommand(); |
| | | |
| | | |
| | | #region 分配 |
| | | |
| | | //添加分配表信息 |
| | |
| | | Db.Insertable(allot).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | |
| | | #region 添加出库任务信息 |
| | | |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | |
| | | { |
| | | //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | str += "下发成功"; |
| | | str += "下发成功"; |
| | | } |
| | | if (wcsModel.StatusCode == -1) |
| | | { |
| | |
| | | } |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "空托出库", i+"", "下发", $"用PDA下发了 {i} 个空托垛", userId); |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "空托出库", i + "", "下发", $"用PDA下发了 {i} 个空托垛", userId); |
| | | Db.CommitTran(); |
| | | |
| | | return ""; |
| | |
| | | throw new Exception("库存信息中不存在该托盘信息,请检查!"); |
| | | } |
| | | |
| | | if (result.WareHouseNo!="W02")//W02:零箱库 |
| | | if (result.WareHouseNo != "W02")//W02:零箱库 |
| | | { |
| | | throw new Exception("该托盘未在零箱库,请检查!"); |
| | | } |
| | |
| | | #endregion |
| | | |
| | | //获取库存明细信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.PalletNo == palletNo).ToList(); |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.PalletNo == palletNo).ToList(); |
| | | //验证库存明细信息是否存在 |
| | | if (stockDetail == null) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | //根据托盘号获取取样类型 |
| | | public string GetSampleType(string palletNo) |
| | | { |
| | | try |
| | | { |
| | | 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; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | //根据托盘号获取入库单据 |
| | | public List<string> GetAsnNoByPallet(string palletNo) |
| | | { |
| | | try |
| | | { |
| | | var type = ""; |
| | | var detail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (detail == null) |
| | | { |
| | | throw new Exception("当前托盘未在库存中"); |
| | | } |
| | | |
| | | var list = new List<string>(); |
| | | if (string.IsNullOrWhiteSpace(detail.ASNNo)) |
| | | { |
| | | throw new Exception("未查询到该托盘的入库单信息"); |
| | | } |
| | | list.Add(detail.ASNNo); |
| | | return list; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | //取样出库拣货(标签) |
| | | public void 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("取样标识不能为空"); |
| | | } |
| | | |
| | | //soType: 0库内取样,有出库单及分配信息; 1库前取样,反向添加出库单及分配信息 |
| | | if (soType == "1") |
| | | { |
| | | |
| | | #region 判断 |
| | | |
| | | if (string.IsNullOrWhiteSpace(asnNo)) |
| | | { |
| | | throw new Exception("入库单不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | } |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) |
| | | { |
| | | 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) |
| | | { |
| | | throw new Exception("当前托盘不属于库前取样"); |
| | | } |
| | | |
| | | |
| | | //库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.ASNNo == asnNo && m.PalletNo == palletNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未查询到该托盘的库存明细信息!"); |
| | | } |
| | | |
| | | var sku = Db.Queryable<SysMaterials>().First(m=>m.IsDel == "0" && m.SkuNo == stockDetail.SkuNo); |
| | | if (sku == null) |
| | | { |
| | | throw new Exception("未查询到当前托盘上的物料信息"); |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.AsnSampleNo == asnNo); |
| | | //创建出库单 |
| | | if (notice == null || notice.Status == "6") |
| | | { |
| | | var billNo = ""; |
| | | var bl = true; |
| | | do |
| | | { |
| | | //获取自增单据号 |
| | | billNo = new Common().GetMaxNo("SO"); |
| | | var no = billNo; |
| | | bl = Db.Queryable<BllExportNotice>().Any(m => m.SONo == no); |
| | | } while (bl); |
| | | |
| | | |
| | | var addNotice = new BllExportNotice() |
| | | { |
| | | SONo = billNo, |
| | | Type = "3", |
| | | Status = "4", |
| | | Origin = "WMS", |
| | | AsnSampleNo = asnNo, |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | | IsDespatch = "0", |
| | | CompleteTime = DateTime.Now, |
| | | CreateUser = userId, |
| | | }; |
| | | |
| | | var n = Db.Insertable(addNotice).ExecuteReturnEntity(); |
| | | 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)); |
| | | if (noticeDetail == null) |
| | | { |
| | | var addNoticeDetail = new BllExportNoticeDetail() |
| | | { |
| | | SONo = notice.SONo, |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | Standard = sku.Standard, |
| | | LotNo = stockDetail.LotNo, |
| | | LotText = "", |
| | | Qty = 0, |
| | | AllotQty = 0, |
| | | FactQty = 0, |
| | | CompleteQty = 0, |
| | | PackagNo = sku.PackagNo, |
| | | Price = sku.Price, |
| | | //Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * pickQty, |
| | | IsBale = "", |
| | | IsBelt = "", |
| | | SupplierLot = stock.SupplierLot, |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | | IsIssueLotNo = "0", |
| | | Status = "3", |
| | | CreateUser = userId, |
| | | |
| | | }; |
| | | var m = Db.Insertable(addNoticeDetail).ExecuteReturnEntity(); |
| | | noticeDetail = m; |
| | | } |
| | | //出库分配信息 |
| | | var allot2 = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.Status == "5" && m.SONo == notice.SONo && m.PalletNo == palletNo); |
| | | if (allot2 == null) |
| | | { |
| | | //添加分配表信息 |
| | | var addAllot = new BllExportAllot |
| | | { |
| | | SONo = notice.SONo, |
| | | WaveNo = "", |
| | | SODetailNo = noticeDetail.Id, |
| | | StockId = stockDetail.Id, |
| | | LotNo = stockDetail.LotNo, |
| | | LotText = stockDetail.LotText, |
| | | SupplierLot = stockDetail.SupplierLot, |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | Standard = sku.Standard, |
| | | PalletNo = palletNo, |
| | | IsBale = "0" , //是否裹包 |
| | | IsBelt = "0" , //是否打带 |
| | | |
| | | Qty = 0, |
| | | CompleteQty = 0, |
| | | |
| | | Status = "5", |
| | | LogisticsId = notice.LogisticsId, |
| | | IsAdvance = "0", |
| | | OutMode = "",//出库口 |
| | | |
| | | CreateUser = userId, |
| | | UpdateTime = DateTime.Now |
| | | }; |
| | | |
| | | var fp = Db.Insertable(addAllot).ExecuteReturnEntity(); |
| | | allot2 = fp; |
| | | } |
| | | |
| | | |
| | | #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) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | boxInfos = boxInfo.ToList(); |
| | | |
| | | if (!string.IsNullOrWhiteSpace(boxNo3)) //散支拣货 |
| | | { |
| | | boxInfos = boxInfos.Where(m => m.BoxNo3 == boxNo3).ToList(); |
| | | |
| | | if (boxInfos.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | if (boxInfos.Count() > 1) |
| | | { |
| | | throw new Exception("该追溯支码的信息大于1条,信息错误,请核实!"); |
| | | } |
| | | |
| | | if (boxInfos.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw new Exception("该托盘与箱码没有绑定关系"); |
| | | } |
| | | |
| | | biaoShi = "1"; |
| | | } |
| | | else if (!string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)//数量拣货 |
| | | { |
| | | if (boxInfo.Count() > 1) |
| | | { |
| | | throw new Exception("该箱码内存在支码不能进行数量拣货"); |
| | | } |
| | | int boxQty = boxInfo.First().Qty; |
| | | if (Convert.ToInt32(pickQty1) > boxQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内数量"); |
| | | } |
| | | |
| | | biaoShi = "2"; |
| | | } |
| | | else //整箱拣货 |
| | | { |
| | | if (boxInfo.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码的信息"); |
| | | } |
| | | if (boxInfo.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw new Exception("该托盘与箱码没有绑定关系"); |
| | | } |
| | | |
| | | } |
| | | var pickQty = 0;//拣货的数量 |
| | | var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot2.Id && m.PalletNo == palletNo).ToList(); |
| | | var comList = new List<BllCompleteDetail>(); |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) |
| | | { |
| | | throw new Exception($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | } |
| | | //添加拣货明细 |
| | | var completeDetail = new BllCompleteDetail() |
| | | { |
| | | SONo = notice.SONo, |
| | | SODetailNo = noticeDetail.Id, |
| | | ExportAllotId = allot2.Id, |
| | | StockId = allot2.StockId, |
| | | BoxNo = item.BoxNo, |
| | | BoxNo2 = item.BoxNo2, |
| | | BoxNo3 = item.BoxNo3, |
| | | |
| | | LotNo = allot2.LotNo, |
| | | LotText = allot2.LotText, |
| | | SupplierLot = allot2.SupplierLot, |
| | | SkuNo = allot2.SkuNo, |
| | | SkuName = allot2.SkuName, |
| | | Standard = allot2.Standard, |
| | | PalletNo = palletNo, |
| | | CompleteQty = biaoShi == "2" ? int.Parse(pickQty1) : item.Qty, |
| | | InspectMark = "1", |
| | | |
| | | CreateUser = userId |
| | | }; |
| | | comList.Add(completeDetail); |
| | | |
| | | if (biaoShi != "2") |
| | | { |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | } |
| | | else//数量拣货 |
| | | { |
| | | if (int.Parse(pickQty1) == item.Qty) |
| | | { |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | item.Qty -= int.Parse(pickQty1); |
| | | item.BitBoxMark = "1";//零箱标识 |
| | | item.InspectMark = "1";//抽检箱标识 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | } |
| | | pickQty += biaoShi == "2" ? int.Parse(pickQty1) : item.Qty; |
| | | } |
| | | |
| | | |
| | | //改变库内箱码是否零箱信息 |
| | | if (biaoShi == "1") |
| | | { |
| | | var boxSurplusList = boxInfo.Where(m => m.BoxNo3 != boxNo3).ToList(); |
| | | foreach (var item in boxSurplusList) |
| | | { |
| | | item.BitBoxMark = "1"; |
| | | item.InspectMark = "1"; |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | } |
| | | |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | //修改出库分配信息 |
| | | allot2.Qty += pickQty; |
| | | allot2.CompleteQty += pickQty; |
| | | Db.Updateable(allot2).ExecuteCommand(); |
| | | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | | stockDetail.Qty -= pickQty; |
| | | |
| | | if (stockDetail.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | } |
| | | stock.Qty -= pickQty; |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | } |
| | | var num2 = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (num2 <= 0) |
| | | { |
| | | //改变托盘状态 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | } |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | } |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.Qty += pickQty; |
| | | noticeDetail.AllotQty += pickQty; |
| | | noticeDetail.FactQty += pickQty; |
| | | noticeDetail.CompleteQty += pickQty; |
| | | noticeDetail.Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * noticeDetail.Qty; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | |
| | | } |
| | | else if(soType == "0") |
| | | { |
| | | #region 判断 |
| | | |
| | | if (string.IsNullOrWhiteSpace(soNo)) |
| | | { |
| | | throw new Exception("出库单据不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(soDetailId)) |
| | | { |
| | | throw new Exception("出库物料-批次不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | } |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) |
| | | { |
| | | throw new Exception("追溯条码和拣货数量不能同时输入"); |
| | | } |
| | | |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("未查询到该出库单的信息"); |
| | | } |
| | | if (notice.Status != "3") |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行,不能拣货"); |
| | | } |
| | | //出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>() |
| | | .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | if (noticeDetail == null) |
| | | { |
| | | throw new Exception("未查询到该出库单明细的信息"); |
| | | } |
| | | //出库分配信息 |
| | | var allot = Db.Queryable<BllExportAllot>().First(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("未查询到该托盘的分配信息"); |
| | | } |
| | | //剩余拣货数量(待拣减去已拣) |
| | | var needQty = allot.Qty - allot.CompleteQty; |
| | | |
| | | //库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存明细信息!"); |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | |
| | | #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) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | boxInfos = boxInfo.ToList(); |
| | | if (!string.IsNullOrWhiteSpace(boxNo3)) //散支拣货 |
| | | { |
| | | boxInfos = boxInfos.Where(m => m.BoxNo3 == boxNo3).ToList(); |
| | | |
| | | if (boxInfos.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | | } |
| | | if (boxInfos.Count() > 1) |
| | | { |
| | | throw new Exception("该追溯支码的信息大于1条,信息错误,请核实!"); |
| | | } |
| | | |
| | | if (boxInfos.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw new Exception("该托盘与箱码没有绑定关系"); |
| | | } |
| | | var boxQty = boxInfos.First().Qty; |
| | | if (boxQty > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于剩余待拣数量"); |
| | | } |
| | | |
| | | biaoShi = "1"; |
| | | } |
| | | else if (!string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)//数量拣货 |
| | | { |
| | | if (boxInfo.Count() > 1) |
| | | { |
| | | throw new Exception("该箱码内存在支码不能进行数量拣货"); |
| | | } |
| | | int boxQty = boxInfo.First().Qty; |
| | | if (Convert.ToInt32(pickQty1) > boxQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内数量"); |
| | | } |
| | | if (Convert.ToInt32(pickQty1) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于剩余待拣数量"); |
| | | } |
| | | |
| | | biaoShi = "2"; |
| | | } |
| | | else //整箱拣货 |
| | | { |
| | | if (boxInfo.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码的信息"); |
| | | } |
| | | if (boxInfo.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw new Exception("该托盘与箱码没有绑定关系"); |
| | | } |
| | | var boxQty = boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList(); |
| | | if (boxQty[0] > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内剩余待拣数量"); |
| | | } |
| | | } |
| | | var pickQty = 0;//拣货的数量 |
| | | var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList(); |
| | | var comList = new List<BllCompleteDetail>(); |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) |
| | | { |
| | | throw new Exception($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货"); |
| | | } |
| | | //添加拣货明细 |
| | | 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 == "2" ? int.Parse(pickQty1) : item.Qty, |
| | | |
| | | CreateUser = userId |
| | | }; |
| | | comList.Add(completeDetail); |
| | | |
| | | if (biaoShi != "2") |
| | | { |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | } |
| | | else//数量拣货 |
| | | { |
| | | if (int.Parse(pickQty1) == item.Qty) |
| | | { |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | item.Qty -= int.Parse(pickQty1); |
| | | item.BitBoxMark = "1";//零箱标识 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | } |
| | | pickQty += item.Qty; |
| | | } |
| | | //改变库内箱码是否零箱信息 |
| | | if (biaoShi == "1") |
| | | { |
| | | var boxSurplusList = boxInfo.Where(m => m.BoxNo3 != boxNo3).ToList(); |
| | | foreach (var item in boxSurplusList) |
| | | { |
| | | item.BitBoxMark = "1"; |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | } |
| | | |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += pickQty; |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | allot.UpdateTime = DateTime.Now; |
| | | if (allot.Status == "5") |
| | | { |
| | | //判断该托盘是否还存在物料 存在改为待回库 待回库完成后改为已完成 |
| | | } |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | | stockDetail.Qty -= pickQty; |
| | | stockDetail.LockQty -= pickQty; |
| | | 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) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | } |
| | | stock.Qty -= pickQty; |
| | | stock.LockQty -= pickQty; |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | } |
| | | var num2 = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == palletNo); |
| | | if (num2 <= 0) |
| | | { |
| | | //改变托盘状态 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | } |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | } |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | | .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | } |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "拣货出库", soNo, "拣货", $"在PDA上对出库单号为:{soNo}的托盘码为:{palletNo}的拣货操作", userId); |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | //取样出库拣货(无标签) |
| | | public void 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("取样标识不能为空"); |
| | | } |
| | | |
| | | if (soType == "1") |
| | | { |
| | | if (string.IsNullOrWhiteSpace(asnNo)) |
| | | { |
| | | throw new Exception("入库单据不能为空"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | 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) |
| | | { |
| | | throw new Exception("当前托盘不属于库前取样"); |
| | | } |
| | | |
| | | |
| | | //库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.ASNNo == asnNo && m.PalletNo == palletNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未查询到该托盘的库存明细信息!"); |
| | | } |
| | | |
| | | var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == stockDetail.SkuNo); |
| | | if (sku == null) |
| | | { |
| | | throw new Exception("未查询到当前托盘上的物料信息"); |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.AsnSampleNo == asnNo); |
| | | //创建出库单 |
| | | if (notice == null || notice.Status == "6") |
| | | { |
| | | var billNo = ""; |
| | | var bl = true; |
| | | do |
| | | { |
| | | //获取自增单据号 |
| | | billNo = new Common().GetMaxNo("SO"); |
| | | var no = billNo; |
| | | bl = Db.Queryable<BllExportNotice>().Any(m => m.SONo == no); |
| | | } while (bl); |
| | | |
| | | var addNotice = new BllExportNotice() |
| | | { |
| | | SONo = billNo, |
| | | Type = "3", |
| | | Status = "4", |
| | | Origin = "WMS", |
| | | AsnSampleNo = asnNo, |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | | IsDespatch = "0", |
| | | CompleteTime = DateTime.Now, |
| | | CreateUser = userId, |
| | | }; |
| | | |
| | | var n = Db.Insertable(addNotice).ExecuteReturnEntity(); |
| | | 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)); |
| | | if (noticeDetail == null) |
| | | { |
| | | var addNoticeDetail = new BllExportNoticeDetail() |
| | | { |
| | | SONo = notice.SONo, |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | Standard = sku.Standard, |
| | | LotNo = stockDetail.LotNo, |
| | | LotText = "", |
| | | Qty = 0, |
| | | AllotQty = 0, |
| | | FactQty = 0, |
| | | CompleteQty = 0, |
| | | PackagNo = sku.PackagNo, |
| | | Price = sku.Price, |
| | | //Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * pickQty, |
| | | IsBale = "", |
| | | IsBelt = "", |
| | | SupplierLot = stock.SupplierLot, |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | | IsIssueLotNo = "0", |
| | | Status = "3", |
| | | CreateUser = userId, |
| | | |
| | | }; |
| | | var m = Db.Insertable(addNoticeDetail).ExecuteReturnEntity(); |
| | | noticeDetail = m; |
| | | } |
| | | //出库分配信息 |
| | | var allot2 = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.Status == "5" && m.SONo == notice.SONo && m.PalletNo == palletNo); |
| | | if (allot2 == null) |
| | | { |
| | | //添加分配表信息 |
| | | var addAllot = new BllExportAllot |
| | | { |
| | | SONo = notice.SONo, |
| | | WaveNo = "", |
| | | SODetailNo = noticeDetail.Id, |
| | | StockId = stockDetail.Id, |
| | | LotNo = stockDetail.LotNo, |
| | | LotText = stockDetail.LotText, |
| | | SupplierLot = stockDetail.SupplierLot, |
| | | SkuNo = sku.SkuNo, |
| | | SkuName = sku.SkuName, |
| | | Standard = sku.Standard, |
| | | PalletNo = palletNo, |
| | | IsBale = "0", //是否裹包 |
| | | IsBelt = "0", //是否打带 |
| | | |
| | | Qty = 0, |
| | | CompleteQty = 0, |
| | | |
| | | Status = "5", |
| | | LogisticsId = notice.LogisticsId, |
| | | IsAdvance = "0", |
| | | OutMode = "",//出库口 |
| | | |
| | | CreateUser = userId, |
| | | UpdateTime = DateTime.Now |
| | | }; |
| | | |
| | | var fp = Db.Insertable(addAllot).ExecuteReturnEntity(); |
| | | 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); |
| | | |
| | | //判读是否存在拣货明细 |
| | | int isComplete = 0; |
| | | if (complete != null) |
| | | { |
| | | isComplete = 1; |
| | | } |
| | | |
| | | var comList = new List<BllCompleteDetail>(); |
| | | //判断是否存在拣货明细 |
| | | if (isComplete == 0) |
| | | { |
| | | //添加拣货明细 |
| | | var completeDetail = new BllCompleteDetail() |
| | | { |
| | | SONo = notice.SONo, |
| | | SODetailNo = noticeDetail.Id, |
| | | ExportAllotId = allot2.Id, |
| | | StockId = allot2.StockId, |
| | | BoxNo = "", |
| | | BoxNo2 = "", |
| | | BoxNo3 = "", |
| | | |
| | | LotNo = allot2.LotNo, |
| | | LotText = allot2.LotText, |
| | | SupplierLot = allot2.SupplierLot, |
| | | SkuNo = allot2.SkuNo, |
| | | SkuName = allot2.SkuName, |
| | | Standard = allot2.Standard, |
| | | PalletNo = palletNo, |
| | | CompleteQty = int.Parse(PickQty) , |
| | | InspectMark = "1", |
| | | |
| | | CreateUser = userId |
| | | }; |
| | | comList.Add(completeDetail); |
| | | |
| | | //添加拣货明细 |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | } |
| | | else if (isComplete == 1) |
| | | { |
| | | complete.CompleteQty += int.Parse(PickQty); |
| | | complete.UpdateUser = userId; |
| | | complete.UpdateTime = Db.GetDate(); |
| | | |
| | | Db.Updateable(complete).ExecuteCommand(); |
| | | } |
| | | |
| | | |
| | | |
| | | //修改出库分配信息 |
| | | allot2.Qty += int.Parse(PickQty); |
| | | allot2.CompleteQty += int.Parse(PickQty); |
| | | Db.Updateable(allot2).ExecuteCommand(); |
| | | |
| | | int isDel = 0; |
| | | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | | stockDetail.InspectMark = "1";//修改为抽检托标识 |
| | | stockDetail.Qty -= int.Parse(PickQty); |
| | | if (stockDetail.Qty == stockDetail.LockQty&& stockDetail.Qty != 0) |
| | | { |
| | | stockDetail.Status = "2"; |
| | | } |
| | | else if (stockDetail.Qty > stockDetail.LockQty && stockDetail.LockQty > 0) |
| | | { |
| | | stockDetail.Status = "1"; |
| | | } |
| | | else |
| | | { |
| | | stockDetail.Status = "0"; |
| | | } |
| | | if (stockDetail.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | isDel = 1; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | } |
| | | //删除或修改库存 |
| | | stock.Qty -= int.Parse(PickQty); |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | } |
| | | |
| | | //改变托盘状态为:未使用 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | } |
| | | |
| | | //判断托盘上物料是否拣货完毕 |
| | | if (isDel == 0) |
| | | { |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | } |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.Qty += int.Parse(PickQty); |
| | | noticeDetail.AllotQty += int.Parse(PickQty); |
| | | 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(); |
| | | |
| | | } |
| | | else if (soType == "0") |
| | | { |
| | | #region 判断 |
| | | |
| | | if (string.IsNullOrWhiteSpace(soNo)) |
| | | { |
| | | throw new Exception("出库单据不能为空"); |
| | | } |
| | | //if (string.IsNullOrWhiteSpace(soDetailId)) |
| | | //{ |
| | | // throw new Exception("出库物料-批次不能为空"); |
| | | //} |
| | | if (string.IsNullOrWhiteSpace(palletNo)) |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | } |
| | | |
| | | //出库单 |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("未查询到该出库单的信息"); |
| | | } |
| | | if (notice.Status != "3") |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行,不能拣货"); |
| | | } |
| | | //出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>() |
| | | .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); |
| | | if (noticeDetail == null) |
| | | { |
| | | throw new Exception("未查询到该出库单明细的信息"); |
| | | } |
| | | //出库分配信息 |
| | | var allot = Db.Queryable<BllExportAllot>().First(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("未查询到该托盘的分配信息"); |
| | | } |
| | | //剩余拣货数量(待拣减去已拣) |
| | | var needQty = allot.Qty - allot.CompleteQty; |
| | | if (int.Parse(PickQty) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于托内剩余待拣数量"); |
| | | } |
| | | |
| | | //库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存明细信息!"); |
| | | } |
| | | //库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("未查询到该托盘分配的库存信息!"); |
| | | } |
| | | #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); |
| | | |
| | | //判读是否存在拣货明细 |
| | | int isComplete = 0; |
| | | if (complete != null) |
| | | { |
| | | isComplete = 1; |
| | | } |
| | | |
| | | var comList = new List<BllCompleteDetail>(); |
| | | //判断是否存在拣货明细 |
| | | if (isComplete == 0) |
| | | { |
| | | //添加拣货明细 |
| | | var completeDetail = new BllCompleteDetail() |
| | | { |
| | | SONo = soNo, |
| | | SODetailNo = int.Parse(soDetailId), |
| | | ExportAllotId = allot.Id, |
| | | StockId = allot.StockId, |
| | | BoxNo = "", |
| | | BoxNo2 = "", |
| | | BoxNo3 = "", |
| | | |
| | | LotNo = allot.LotNo, |
| | | LotText = allot.LotText, |
| | | SupplierLot = allot.SupplierLot, |
| | | SkuNo = allot.SkuNo, |
| | | SkuName = allot.SkuName, |
| | | Standard = allot.Standard, |
| | | PalletNo = palletNo, |
| | | CompleteQty = int.Parse(PickQty), |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = Db.GetDate(), |
| | | }; |
| | | comList.Add(completeDetail); |
| | | |
| | | //添加拣货明细 |
| | | Db.Insertable(comList).ExecuteCommand(); |
| | | } |
| | | else if (isComplete == 1) |
| | | { |
| | | complete.CompleteQty += int.Parse(PickQty); |
| | | complete.UpdateUser = userId; |
| | | complete.UpdateTime = Db.GetDate(); |
| | | |
| | | Db.Updateable(complete).ExecuteCommand(); |
| | | } |
| | | |
| | | |
| | | |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += int.Parse(PickQty); |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | |
| | | allot.UpdateTime = DateTime.Now; |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | |
| | | int isDel = 0; |
| | | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | | stockDetail.Qty -= int.Parse(PickQty); |
| | | stockDetail.LockQty -= int.Parse(PickQty); |
| | | 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) |
| | | { |
| | | Db.Deleteable(stockDetail).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | isDel = 1; |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | } |
| | | //删除或修改库存 |
| | | stock.Qty -= int.Parse(PickQty); |
| | | stock.LockQty -= int.Parse(PickQty); |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | } |
| | | |
| | | //改变托盘状态为:未使用 |
| | | var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); |
| | | if (pallet == null) |
| | | { |
| | | throw new Exception("未在托盘表中查询到托盘信息"); |
| | | } |
| | | |
| | | //判断托盘上物料是否拣货完毕 |
| | | if (isDel == 0) |
| | | { |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | } |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += int.Parse(PickQty); |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | | .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | |
| | | } |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "拣货出库", soNo, "拣货", $"在PDA上对出库单号为:{soNo}的托盘码为:{palletNo}的拣货操作", userId); |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | } |
| | | } |