| | |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | } |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0) |
| | | { |
| | | throw new Exception("追溯条码和拣货数量不能同时输入"); |
| | | } |
| | |
| | | { |
| | | throw new Exception("未查询到该出库单的信息"); |
| | | } |
| | | if (notice.Status != "3") |
| | | var type1 = new List<string>() { "0", "4" }; //拣货不可多出 成品出库、不合格品出库 |
| | | var type2 = new List<string>() { "1", "2", "3", "5", "6", "7", "8" };//拣货可多出 领料出库、抽检出库、物料取样出库、中间品出库、代储出库、其他出库、寄存出库 |
| | | if (type1.Contains(notice.Type)) |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行,不能拣货"); |
| | | if (notice.Status != "3") |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行,不能拣货"); |
| | | } |
| | | } |
| | | if (type2.Contains(notice.Type)) |
| | | { |
| | | if (notice.Status != "3" && notice.Status != "4") |
| | | { |
| | | throw new Exception("出库单的状态不是正在执行或执行完成,不能拣货"); |
| | | } |
| | | } |
| | | //出库单明细 |
| | | var noticeDetail = Db.Queryable<BllExportNoticeDetail>() |
| | |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | noticeDetail.Status = "2"; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | noticeDetail.Status = "3"; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | } |
| | | |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | } |
| | |
| | | { |
| | | var biaoShi = "0";//0:整箱拣货、1:散支拣货、2:数量拣货 |
| | | 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.StockDetailId == stockDetail.Id); |
| | | if (boxInfo.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | |
| | | |
| | | biaoShi = "1"; |
| | | } |
| | | else if (!string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)//数量拣货 |
| | | else if (!string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)//数量拣货 |
| | | { |
| | | if (boxInfo.Count() > 1) |
| | | { |
| | | throw new Exception("该箱码内存在支码不能进行数量拣货"); |
| | | } |
| | | decimal boxQty = boxInfo.First().Qty; |
| | | if (Convert.ToInt32(pickQty1) > boxQty) |
| | | if (Convert.ToDecimal(pickQty1) > boxQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内数量"); |
| | | } |
| | | if (Convert.ToInt32(pickQty1) > needQty) |
| | | if (Convert.ToDecimal(pickQty1) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于剩余待拣数量"); |
| | | } |
| | |
| | | |
| | | if (biaoShi != "2") |
| | | { |
| | | pickQty += item.Qty; |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | } |
| | |
| | | { |
| | | if (decimal.Parse(pickQty1) == item.Qty) |
| | | { |
| | | pickQty += item.Qty; |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | |
| | | } |
| | | else |
| | | { |
| | | pickQty += decimal.Parse(pickQty1); |
| | | item.Qty -= decimal.Parse(pickQty1); |
| | | item.BitBoxMark = "1";//零箱标识 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | } |
| | | pickQty += item.Qty; |
| | | |
| | | } |
| | | //改变库内箱码是否零箱信息 |
| | | if (biaoShi == "1") |
| | |
| | | } |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | noticeDetail.Status = "2"; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | |
| | | noticeDetail.Status = "3"; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | |
| | | } |
| | | //剩余拣货数量(待拣减去已拣) |
| | | var needQty = allot.Qty - allot.CompleteQty; |
| | | if (int.Parse(PickQty) > needQty) |
| | | if (decimal.Parse(PickQty) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于托内剩余待拣数量"); |
| | | } |
| | |
| | | } |
| | | else if (isComplete == 1) |
| | | { |
| | | complete.CompleteQty += int.Parse(PickQty); |
| | | complete.CompleteQty += decimal.Parse(PickQty); |
| | | complete.UpdateUser = userId; |
| | | complete.UpdateTime = Db.GetDate(); |
| | | |
| | |
| | | } |
| | | |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += int.Parse(PickQty); |
| | | allot.CompleteQty += decimal.Parse(PickQty); |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | allot.UpdateTime = DateTime.Now; |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | |
| | | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | | stockDetail.Qty -= int.Parse(PickQty); |
| | | stockDetail.LockQty -= int.Parse(PickQty); |
| | | stockDetail.Qty -= decimal.Parse(PickQty); |
| | | stockDetail.LockQty -= decimal.Parse(PickQty); |
| | | if (stockDetail.Qty == stockDetail.LockQty) |
| | | { |
| | | stockDetail.Status = "2"; |
| | |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | } |
| | | //删除或修改库存 |
| | | stock.Qty -= int.Parse(PickQty); |
| | | stock.LockQty -= int.Parse(PickQty); |
| | | stock.Qty -= decimal.Parse(PickQty); |
| | | stock.LockQty -= decimal.Parse(PickQty); |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += int.Parse(PickQty); |
| | | noticeDetail.Status = "2"; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | noticeDetail.Status = "3"; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | |
| | | { |
| | | #region 分配 |
| | | |
| | | //添加分配表信息 |
| | | var allot = new BllExportAllot |
| | | { |
| | | SONo = "", |
| | | WaveNo = "", |
| | | SODetailNo = 0, |
| | | StockId = s.Id, |
| | | LotNo = "", |
| | | LotText = "", |
| | | SupplierLot = "", |
| | | SkuNo = s.SkuNo, |
| | | SkuName = s.SkuName, |
| | | Standard = s.Standard, |
| | | PalletNo = s.PalletNo, |
| | | IsBale = "0", //是否裹包 |
| | | IsBelt = "0", //是否打带 |
| | | ////添加分配表信息 |
| | | //var allot = new BllExportAllot |
| | | //{ |
| | | // SONo = "", |
| | | // WaveNo = "", |
| | | // SODetailNo = 0, |
| | | // StockId = s.Id, |
| | | // LotNo = "", |
| | | // LotText = "", |
| | | // SupplierLot = "", |
| | | // SkuNo = s.SkuNo, |
| | | // SkuName = s.SkuName, |
| | | // Standard = s.Standard, |
| | | // PalletNo = s.PalletNo, |
| | | // IsBale = "0", //是否裹包 |
| | | // IsBelt = "0", //是否打带 |
| | | |
| | | //BoxexQty = s.Qty, |
| | | Qty = (int)s.Qty, |
| | | CompleteQty = 0, |
| | | Status = "1", |
| | | LogisticsId = 0, |
| | | IsAdvance = "0", |
| | | OutMode = model.OutMode,//出库口 |
| | | // //BoxexQty = s.Qty, |
| | | // Qty = (int)s.Qty, |
| | | // CompleteQty = 0, |
| | | // Status = "1", |
| | | // LogisticsId = 0, |
| | | // IsAdvance = "0", |
| | | // OutMode = model.OutMode,//出库口 |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now |
| | | }; |
| | | Db.Insertable(allot).ExecuteCommand(); |
| | | // CreateUser = userId, |
| | | // CreateTime = DateTime.Now |
| | | //}; |
| | | //Db.Insertable(allot).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | #region 添加移库任务信息 |
| | | |
| | | var stkModel = Db.Queryable<DataStockDetail>().First(m => m.LocatNo == slotBefore.LocatNo); |
| | | string PalletNo = "LN000000"; // 默认演示托盘 |
| | | string SkuNo = ""; |
| | | if (stkModel != null) |
| | | { |
| | | PalletNo = stkModel.PalletNo; |
| | | SkuNo = stkModel.SkuNo; |
| | | } |
| | | //获取移库的库位 |
| | | var newSlot = MoveAddress(slotBefore.LocatNo, slotBefore.RoadwayNo, SkuNo, slotBefore.AreaNo); |
| | | if (string.IsNullOrWhiteSpace(newSlot)) |
| | | { |
| | | continue; |
| | | } |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask //出库任务 |
| | | { |
| | |
| | | Receiver = "PDA", |
| | | IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = locat == null ? "" : s.LocatNo,//起始位置 |
| | | EndLocat = model.OutMode,//目标位置 |
| | | PalletNo = s.PalletNo,//托盘码 |
| | | StartLocat = slotBefore.LocatNo,//起始位置 |
| | | EndLocat = newSlot,//目标位置 |
| | | PalletNo = PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | CreateTime = serverTime, //创建时间 |
| | | CreateUser = userId, //创建人 |
| | | Msg = "Pda空托从" + locat == null ? "" : s.LocatNo + "到" + model.OutMode + "的移库任务", //关键信息 |
| | | Msg = "Pda空托从" + locat == null ? "" : slotBefore.LocatNo + "到" + newSlot + "的移库任务", //关键信息 |
| | | //FinishDate = serverTime, //完成时间 |
| | | }; |
| | | moveDto.Add(new OutCommandDto() |
| | |
| | | PalletNo = exTask.PalletNo,//托盘号 |
| | | StartLocate = exTask.StartLocat, // 起始位置 |
| | | StartRoadway = locat.RoadwayNo, //所属巷道 |
| | | EndLocate = model.OutMode, // 目标位置 |
| | | EndLocate = exTask.EndLocat, // 目标位置 |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "2",// 任务类型 (出库) |
| | | OutMode = model.OutMode, //目标地址 |
| | | TaskType = "2",// 任务类型 (移库) |
| | | OutMode = "", //目标地址 |
| | | Order = 1 |
| | | }); |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | |
| | | //更改储位状态为移出中 |
| | | slotBefore.Status = "5"; //5 移出中 |
| | | Db.Updateable(slotBefore).ExecuteCommand();//修改储位信息 |
| | | var newSlot2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == newSlot && m.IsDel == "0"); |
| | | if (newSlot2!= null) |
| | | { |
| | | newSlot2.Status = "4";//移入中 |
| | | Db.Updateable(newSlot2).ExecuteCommand();//修改储位信息 |
| | | } |
| | | #endregion |
| | | } |
| | | else //出库 |
| | |
| | | #region 改变库存 |
| | | |
| | | //增加库存锁定数量 |
| | | stock.LockQty += (int)s.Qty; //锁定数量 |
| | | stock.LockQty += (int)pallSku.Qty; //锁定数量 |
| | | stock.UpdateTime = serverTime; //修改时间 |
| | | stock.UpdateUser = userId; //修改人 |
| | | Db.Updateable(stock).ExecuteCommand();//修改库存总表信息 |
| | | |
| | | //增加库存明细锁定数量 |
| | | s.LockQty += (int)s.Qty; //锁定数量 |
| | | s.UpdateTime = serverTime; //修改时间 |
| | | s.UpdateUser = userId; //修改人 |
| | | s.Status = "2"; //2 已分配 |
| | | Db.Updateable(s).ExecuteCommand();//修改库存明细信息 |
| | | pallSku.LockQty += (int)pallSku.Qty; //锁定数量 |
| | | pallSku.UpdateTime = serverTime; //修改时间 |
| | | pallSku.UpdateUser = userId; //修改人 |
| | | pallSku.Status = "2"; //2 已分配 |
| | | Db.Updateable(pallSku).ExecuteCommand();//修改库存明细信息 |
| | | |
| | | #endregion |
| | | |
| | |
| | | SONo = "", |
| | | WaveNo = "", |
| | | SODetailNo = 0, |
| | | StockId = s.Id, |
| | | StockId = pallSku.Id, |
| | | LotNo = "", |
| | | LotText = "", |
| | | SupplierLot = "", |
| | | SkuNo = s.SkuNo, |
| | | SkuName = s.SkuName, |
| | | Standard = s.Standard, |
| | | PalletNo = s.PalletNo, |
| | | SkuNo = pallSku.SkuNo, |
| | | SkuName = pallSku.SkuName, |
| | | Standard = pallSku.Standard, |
| | | PalletNo = pallSku.PalletNo, |
| | | IsBale = "0", //是否裹包 |
| | | IsBelt = "0", //是否打带 |
| | | |
| | | //BoxexQty = s.Qty, |
| | | Qty = (int)s.Qty, |
| | | Qty = (int)pallSku.Qty, |
| | | CompleteQty = 0, |
| | | Status = "1", |
| | | LogisticsId = 0, |
| | |
| | | Receiver = "PDA", |
| | | IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = locat == null ? "" : s.LocatNo,//起始位置 |
| | | StartLocat = locat == null ? "" : pallSku.LocatNo,//起始位置 |
| | | EndLocat = model.OutMode,//目标位置 |
| | | PalletNo = s.PalletNo,//托盘码 |
| | | PalletNo = pallSku.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | CreateTime = serverTime, //创建时间 |
| | | CreateUser = userId, //创建人 |
| | | Msg = "Pda空托从" + locat == null ? "" : s.LocatNo + "到" + model.OutMode + "的出库任务", //关键信息 |
| | | Msg = "Pda空托从" + locat == null ? "" : pallSku.LocatNo + "到" + model.OutMode + "的出库任务", //关键信息 |
| | | //FinishDate = serverTime, //完成时间 |
| | | }; |
| | | outDto2.Add(new OutCommandDto() |
| | |
| | | |
| | | } |
| | | |
| | | public string MoveAddress(string oldAddress, string roadWay, string skuNo)//01020201 排-列-层-深度 |
| | | /// <summary> |
| | | /// WCS申请空托出库 |
| | | /// </summary> |
| | | /// <param name="model"> </param> |
| | | /// <param name="userId"> </param> |
| | | /// <param name="url"> </param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public List<OutCommandDto> IssuePlnOutHouseWcs(OutModePalletVm model, int userId) |
| | | { |
| | | try |
| | | { |
| | | string strMsg = ""; |
| | | var outDto1 = new List<OutCommandDto>(); //先出库数据的集合(深度为1的储位) |
| | | var outDto2 = new List<OutCommandDto>(); //后出库数据的集合(深度为2的储位) |
| | | var moveDto = new List<OutCommandDto>(); //要移库数据的集合 |
| | | //获取当前时间 |
| | | DateTime serverTime = Db.GetDate(); |
| | | //获取库存明细是否小于等于该垛数 |
| | | string str = "select * from DataStockDetail where IsDel = '0' and SkuNo = '100099' and Status = '0' "; |
| | | var stockDetail = Db.Ado.SqlQuery<DataStockDetail>(str); |
| | | if (stockDetail.Count > 0) |
| | | { |
| | | //判断是否大于需要垛数 |
| | | if (stockDetail.Count < int.Parse(model.Num)) |
| | | { |
| | | throw new Exception("需要垛数大于库存垛数,请重新输入!"); |
| | | } |
| | | } |
| | | //获取库存总表信息 |
| | | var stock = Db.Queryable<DataStock>().First(s => s.IsDel == "0" && s.SkuNo == "100099"); |
| | | //验证库存总表是否为空 |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("库存信息不存在,请核查!"); |
| | | } |
| | | |
| | | var com = new Common(); |
| | | Db.BeginTran(); |
| | | |
| | | //遍历库存信息 |
| | | foreach (var s in stockDetail) |
| | | { |
| | | //if (outDto1.Contains(m=>m.PalletNo == s.PalletNo) >0) |
| | | //{ |
| | | // continue; |
| | | //} |
| | | //获取储位信息 |
| | | var locat = Db.Queryable<SysStorageLocat>().First(l => l.LocatNo == s.LocatNo && l.IsDel == "0" && l.WareHouseNo == "W01"); |
| | | if (locat == null) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | ////更改储位状态为出库中 |
| | | //locat.Status = "3"; // 1 有物品 |
| | | //locat.UpdateTime = serverTime; //修改时间 |
| | | //locat.UpdateUser = userId; //修改人 |
| | | ////修改储位信息 |
| | | //Db.Updateable(locat).ExecuteCommand(); |
| | | |
| | | if (locat.Status == "1") |
| | | { |
| | | if (locat.Depth == "01") //深度为1 |
| | | { |
| | | #region 改变库存 |
| | | |
| | | //增加库存锁定数量 |
| | | stock.LockQty += (int)s.Qty; //锁定数量 |
| | | stock.UpdateTime = serverTime; //修改时间 |
| | | stock.UpdateUser = 0; //修改人 |
| | | Db.Updateable(stock).ExecuteCommand();//修改库存总表信息 |
| | | |
| | | //增加库存明细锁定数量 |
| | | s.LockQty += (int)s.Qty; //锁定数量 |
| | | s.UpdateTime = serverTime; //修改时间 |
| | | s.UpdateUser = userId; //修改人 |
| | | s.Status = "2"; //2 已分配 |
| | | Db.Updateable(s).ExecuteCommand();//修改库存明细信息 |
| | | |
| | | #endregion |
| | | |
| | | #region 分配 |
| | | |
| | | //添加分配表信息 |
| | | var allot = new BllExportAllot |
| | | { |
| | | SONo = "", |
| | | WaveNo = "", |
| | | SODetailNo = 0, |
| | | StockId = s.Id, |
| | | LotNo = "", |
| | | LotText = "", |
| | | SupplierLot = "", |
| | | SkuNo = s.SkuNo, |
| | | SkuName = s.SkuName, |
| | | Standard = s.Standard, |
| | | PalletNo = s.PalletNo, |
| | | IsBale = "0", //是否裹包 |
| | | IsBelt = "0", //是否打带 |
| | | |
| | | //BoxexQty = s.Qty, |
| | | Qty = (int)s.Qty, |
| | | CompleteQty = 0, |
| | | Status = "1", |
| | | LogisticsId = 0, |
| | | IsAdvance = "0", |
| | | OutMode = model.OutMode,//出库口 |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now |
| | | }; |
| | | Db.Insertable(allot).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | #region 添加出库任务信息 |
| | | |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask //出库任务 |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = locat == null ? "" : s.LocatNo,//起始位置 |
| | | EndLocat = model.OutMode,//目标位置 |
| | | PalletNo = s.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "1",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | CreateTime = serverTime, //创建时间 |
| | | CreateUser = userId, //创建人 |
| | | Msg = "WCS空托从" + locat == null ? "" : s.LocatNo + "到" + model.OutMode + "的出库任务", //关键信息 |
| | | //FinishDate = serverTime, //完成时间 |
| | | }; |
| | | outDto1.Add(new OutCommandDto() |
| | | { |
| | | PalletNo = exTask.PalletNo,//托盘号 |
| | | StartLocate = exTask.StartLocat, // 起始位置 |
| | | StartRoadway = locat.RoadwayNo, //所属巷道 |
| | | EndLocate = model.OutMode, // 目标位置 |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库) |
| | | OutMode = model.OutMode, //目标地址 |
| | | Order = 1 |
| | | }); |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | #region 储位状态变更 |
| | | //更改储位状态为出库中 |
| | | locat.Status = "3"; //3 出库中 |
| | | Db.Updateable(locat).ExecuteCommand();//修改储位信息 |
| | | #endregion |
| | | } |
| | | else if (locat.Depth == "02") //深度为2 |
| | | { |
| | | //获取出库深度为2储位前面的储位信息 |
| | | var sql2 = $@"select * from SysStorageLocat where WareHouseNo = '{locat.WareHouseNo}' and row = {locat.Row} and [Column] = {locat.Column} and Layer = {locat.Layer} and Depth = '01'; "; |
| | | var slotBefore = Db.Ado.SqlQuery<SysStorageLocat>(sql2).First(); |
| | | if (slotBefore == null) |
| | | { |
| | | #region 改变库存 |
| | | |
| | | //增加库存锁定数量 |
| | | stock.LockQty += (int)s.Qty; //锁定数量 |
| | | stock.UpdateTime = serverTime; //修改时间 |
| | | //stock.UpdateUser = userId; //修改人 |
| | | Db.Updateable(stock).ExecuteCommand();//修改库存总表信息 |
| | | |
| | | //增加库存明细锁定数量 |
| | | s.LockQty += (int)s.Qty; //锁定数量 |
| | | s.UpdateTime = serverTime; //修改时间 |
| | | s.UpdateUser = userId; //修改人 |
| | | s.Status = "2"; //2 已分配 |
| | | Db.Updateable(s).ExecuteCommand();//修改库存明细信息 |
| | | |
| | | #endregion |
| | | |
| | | #region 分配 |
| | | |
| | | //添加分配表信息 |
| | | var allot = new BllExportAllot |
| | | { |
| | | SONo = "", |
| | | WaveNo = "", |
| | | SODetailNo = 0, |
| | | StockId = s.Id, |
| | | LotNo = "", |
| | | LotText = "", |
| | | SupplierLot = "", |
| | | SkuNo = s.SkuNo, |
| | | SkuName = s.SkuName, |
| | | Standard = s.Standard, |
| | | PalletNo = s.PalletNo, |
| | | IsBale = "0", //是否裹包 |
| | | IsBelt = "0", //是否打带 |
| | | |
| | | //BoxexQty = s.Qty, |
| | | Qty = (int)s.Qty, |
| | | CompleteQty = 0, |
| | | Status = "1", |
| | | LogisticsId = 0, |
| | | IsAdvance = "0", |
| | | OutMode = model.OutMode,//出库口 |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now |
| | | }; |
| | | Db.Insertable(allot).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | #region 添加出库任务信息 |
| | | |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask //出库任务 |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = locat == null ? "" : s.LocatNo,//起始位置 |
| | | EndLocat = model.OutMode,//目标位置 |
| | | PalletNo = s.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "1",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | CreateTime = serverTime, //创建时间 |
| | | CreateUser = userId, //创建人 |
| | | Msg = "WCS空托从" + locat == null ? "" : s.LocatNo + "到" + model.OutMode + "的出库任务", //关键信息 |
| | | //FinishDate = serverTime, //完成时间 |
| | | }; |
| | | outDto1.Add(new OutCommandDto() |
| | | { |
| | | PalletNo = exTask.PalletNo,//托盘号 |
| | | StartLocate = exTask.StartLocat, // 起始位置 |
| | | StartRoadway = locat.RoadwayNo, //所属巷道 |
| | | EndLocate = model.OutMode, // 目标位置 |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库) |
| | | OutMode = model.OutMode, //目标地址 |
| | | Order = 1 |
| | | }); |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | #region 储位状态变更 |
| | | //更改储位状态为出库中 |
| | | locat.Status = "3"; //3 出库中 |
| | | Db.Updateable(locat).ExecuteCommand();//修改储位信息 |
| | | #endregion |
| | | } |
| | | else |
| | | { |
| | | //判断储位状态 |
| | | if (slotBefore.Status == "0") |
| | | { |
| | | #region 改变库存 |
| | | |
| | | //增加库存锁定数量 |
| | | stock.LockQty += (int)s.Qty; //锁定数量 |
| | | stock.UpdateTime = serverTime; //修改时间 |
| | | //stock.UpdateUser = userId; //修改人 |
| | | Db.Updateable(stock).ExecuteCommand();//修改库存总表信息 |
| | | |
| | | //增加库存明细锁定数量 |
| | | s.LockQty += (int)s.Qty; //锁定数量 |
| | | s.UpdateTime = serverTime; //修改时间 |
| | | s.UpdateUser = userId; //修改人 |
| | | s.Status = "2"; //2 已分配 |
| | | Db.Updateable(s).ExecuteCommand();//修改库存明细信息 |
| | | |
| | | #endregion |
| | | |
| | | #region 分配 |
| | | |
| | | //添加分配表信息 |
| | | var allot = new BllExportAllot |
| | | { |
| | | SONo = "", |
| | | WaveNo = "", |
| | | SODetailNo = 0, |
| | | StockId = s.Id, |
| | | LotNo = "", |
| | | LotText = "", |
| | | SupplierLot = "", |
| | | SkuNo = s.SkuNo, |
| | | SkuName = s.SkuName, |
| | | Standard = s.Standard, |
| | | PalletNo = s.PalletNo, |
| | | IsBale = "0", //是否裹包 |
| | | IsBelt = "0", //是否打带 |
| | | |
| | | //BoxexQty = s.Qty, |
| | | Qty = (int)s.Qty, |
| | | CompleteQty = 0, |
| | | Status = "1", |
| | | LogisticsId = 0, |
| | | IsAdvance = "0", |
| | | OutMode = model.OutMode,//出库口 |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now |
| | | }; |
| | | Db.Insertable(allot).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | #region 添加出库任务信息 |
| | | |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask //出库任务 |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = locat == null ? "" : s.LocatNo,//起始位置 |
| | | EndLocat = model.OutMode,//目标位置 |
| | | PalletNo = s.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "1",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | CreateTime = serverTime, //创建时间 |
| | | CreateUser = userId, //创建人 |
| | | Msg = "WCS空托从" + locat == null ? "" : s.LocatNo + "到" + model.OutMode + "的出库任务", //关键信息 |
| | | //FinishDate = serverTime, //完成时间 |
| | | }; |
| | | outDto1.Add(new OutCommandDto() |
| | | { |
| | | PalletNo = exTask.PalletNo,//托盘号 |
| | | StartLocate = exTask.StartLocat, // 起始位置 |
| | | StartRoadway = locat.RoadwayNo, //所属巷道 |
| | | EndLocate = model.OutMode, // 目标位置 |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库) |
| | | OutMode = model.OutMode, //目标地址 |
| | | Order = 1 |
| | | }); |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | #region 储位状态变更 |
| | | //更改储位状态为出库中 |
| | | locat.Status = "3"; //3 出库中 |
| | | Db.Updateable(locat).ExecuteCommand();//修改储位信息 |
| | | #endregion |
| | | } |
| | | else if (slotBefore.Status == "1") |
| | | { |
| | | //判断托盘上物料 |
| | | var pallSku = Db.Queryable<DataStockDetail>().First(m => m.SkuNo == "100099" && m.LocatNo == slotBefore.LocatNo); |
| | | if (pallSku == null) //移库 |
| | | { |
| | | #region 分配 |
| | | |
| | | //添加分配表信息 |
| | | var allot = new BllExportAllot |
| | | { |
| | | SONo = "", |
| | | WaveNo = "", |
| | | SODetailNo = 0, |
| | | StockId = s.Id, |
| | | LotNo = "", |
| | | LotText = "", |
| | | SupplierLot = "", |
| | | SkuNo = s.SkuNo, |
| | | SkuName = s.SkuName, |
| | | Standard = s.Standard, |
| | | PalletNo = s.PalletNo, |
| | | IsBale = "0", //是否裹包 |
| | | IsBelt = "0", //是否打带 |
| | | |
| | | //BoxexQty = s.Qty, |
| | | Qty = (int)s.Qty, |
| | | CompleteQty = 0, |
| | | Status = "1", |
| | | LogisticsId = 0, |
| | | IsAdvance = "0", |
| | | OutMode = model.OutMode,//出库口 |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now |
| | | }; |
| | | Db.Insertable(allot).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | #region 添加移库任务信息 |
| | | var stkModel = Db.Queryable<DataStockDetail>().First(m=>m.LocatNo == slotBefore.LocatNo); |
| | | string PalletNo = "LN000000"; // 默认演示托盘 |
| | | string SkuNo = ""; |
| | | if (stkModel != null) |
| | | { |
| | | PalletNo = stkModel.PalletNo; |
| | | SkuNo= stkModel.SkuNo; |
| | | } |
| | | //获取移库的库位 |
| | | var newSlot = MoveAddress(slotBefore.LocatNo, slotBefore.RoadwayNo, SkuNo, slotBefore.AreaNo); |
| | | |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask // 移库任务 |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = slotBefore.LocatNo,//起始位置 |
| | | EndLocat = newSlot,//目标位置 |
| | | PalletNo = PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "2",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "1",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | CreateTime = serverTime, //创建时间 |
| | | CreateUser = userId, //创建人 |
| | | Msg = "WCS空托从" + locat == null ? "" : s.LocatNo + "到" + newSlot + "的移库任务", //关键信息 |
| | | //FinishDate = serverTime, //完成时间 |
| | | }; |
| | | moveDto.Add(new OutCommandDto() |
| | | { |
| | | PalletNo = exTask.PalletNo,//托盘号 |
| | | StartLocate = exTask.StartLocat, // 起始位置 |
| | | StartRoadway = locat.RoadwayNo, //所属巷道 |
| | | EndLocate = exTask.EndLocat, // 目标位置 |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "2",// 任务类型 (出库) |
| | | OutMode = "", //目标地址 |
| | | Order = 1 |
| | | }); |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | #region 储位状态变更 |
| | | //更改储位状态为移出中 |
| | | slotBefore.Status = "5"; //5 移出中 |
| | | Db.Updateable(slotBefore).ExecuteCommand();//修改储位信息 |
| | | #endregion |
| | | } |
| | | else //出库 |
| | | { |
| | | #region 改变库存 |
| | | |
| | | //增加库存锁定数量 |
| | | stock.LockQty += (int)s.Qty; //锁定数量 |
| | | stock.UpdateTime = serverTime; //修改时间 |
| | | //stock.UpdateUser = userId; //修改人 |
| | | Db.Updateable(stock).ExecuteCommand();//修改库存总表信息 |
| | | |
| | | //增加库存明细锁定数量 |
| | | s.LockQty += (int)s.Qty; //锁定数量 |
| | | s.UpdateTime = serverTime; //修改时间 |
| | | s.UpdateUser = userId; //修改人 |
| | | s.Status = "2"; //2 已分配 |
| | | Db.Updateable(s).ExecuteCommand();//修改库存明细信息 |
| | | |
| | | #endregion |
| | | |
| | | #region 分配 |
| | | |
| | | //添加分配表信息 |
| | | var allot = new BllExportAllot |
| | | { |
| | | SONo = "", |
| | | WaveNo = "", |
| | | SODetailNo = 0, |
| | | StockId = s.Id, |
| | | LotNo = "", |
| | | LotText = "", |
| | | SupplierLot = "", |
| | | SkuNo = s.SkuNo, |
| | | SkuName = s.SkuName, |
| | | Standard = s.Standard, |
| | | PalletNo = s.PalletNo, |
| | | IsBale = "0", //是否裹包 |
| | | IsBelt = "0", //是否打带 |
| | | |
| | | //BoxexQty = s.Qty, |
| | | Qty = (int)s.Qty, |
| | | CompleteQty = 0, |
| | | Status = "1", |
| | | LogisticsId = 0, |
| | | IsAdvance = "0", |
| | | OutMode = model.OutMode,//出库口 |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now |
| | | }; |
| | | Db.Insertable(allot).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | #region 添加出库任务信息 |
| | | |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask //出库任务 |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = locat == null ? "" : s.LocatNo,//起始位置 |
| | | EndLocat = model.OutMode,//目标位置 |
| | | PalletNo = s.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "1",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | CreateTime = serverTime, //创建时间 |
| | | CreateUser = userId, //创建人 |
| | | Msg = "WCS空托从" + locat == null ? "" : s.LocatNo + "到" + model.OutMode + "的出库任务", //关键信息 |
| | | //FinishDate = serverTime, //完成时间 |
| | | }; |
| | | outDto2.Add(new OutCommandDto() |
| | | { |
| | | PalletNo = exTask.PalletNo,//托盘号 |
| | | StartLocate = exTask.StartLocat, // 起始位置 |
| | | StartRoadway = locat.RoadwayNo, //所属巷道 |
| | | EndLocate = model.OutMode, // 目标位置 |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库) |
| | | OutMode = model.OutMode, //目标地址 |
| | | Order = 1 |
| | | }); |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | #region 储位状态变更 |
| | | //更改储位状态为出库中 |
| | | slotBefore.Status = "3"; //3 出库中 |
| | | Db.Updateable(slotBefore).ExecuteCommand();//修改储位信息 |
| | | #endregion |
| | | } |
| | | if (int.Parse(model.Num) == outDto1.Count + outDto2.Count) |
| | | { |
| | | break;//需求垛数已达到 可以出库了 |
| | | } |
| | | else |
| | | { |
| | | #region 改变库存 |
| | | |
| | | //增加库存锁定数量 |
| | | stock.LockQty += (int)s.Qty; //锁定数量 |
| | | stock.UpdateTime = serverTime; //修改时间 |
| | | //stock.UpdateUser = userId; //修改人 |
| | | Db.Updateable(stock).ExecuteCommand();//修改库存总表信息 |
| | | |
| | | //增加库存明细锁定数量 |
| | | s.LockQty += (int)s.Qty; //锁定数量 |
| | | s.UpdateTime = serverTime; //修改时间 |
| | | s.UpdateUser = userId; //修改人 |
| | | s.Status = "2"; //2 已分配 |
| | | Db.Updateable(s).ExecuteCommand();//修改库存明细信息 |
| | | |
| | | #endregion |
| | | |
| | | #region 分配 |
| | | |
| | | //添加分配表信息 |
| | | var allot = new BllExportAllot |
| | | { |
| | | SONo = "", |
| | | WaveNo = "", |
| | | SODetailNo = 0, |
| | | StockId = s.Id, |
| | | LotNo = "", |
| | | LotText = "", |
| | | SupplierLot = "", |
| | | SkuNo = s.SkuNo, |
| | | SkuName = s.SkuName, |
| | | Standard = s.Standard, |
| | | PalletNo = s.PalletNo, |
| | | IsBale = "0", //是否裹包 |
| | | IsBelt = "0", //是否打带 |
| | | |
| | | //BoxexQty = s.Qty, |
| | | Qty = (int)s.Qty, |
| | | CompleteQty = 0, |
| | | Status = "1", |
| | | LogisticsId = 0, |
| | | IsAdvance = "0", |
| | | OutMode = model.OutMode,//出库口 |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now |
| | | }; |
| | | Db.Insertable(allot).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | #region 添加出库任务信息 |
| | | |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask //出库任务 |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = locat == null ? "" : s.LocatNo,//起始位置 |
| | | EndLocat = model.OutMode,//目标位置 |
| | | PalletNo = s.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "1",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | CreateTime = serverTime, //创建时间 |
| | | CreateUser = userId, //创建人 |
| | | Msg = "WCS空托从" + locat == null ? "" : s.LocatNo + "到" + model.OutMode + "的出库任务", //关键信息 |
| | | //FinishDate = serverTime, //完成时间 |
| | | }; |
| | | outDto2.Add(new OutCommandDto() |
| | | { |
| | | PalletNo = exTask.PalletNo,//托盘号 |
| | | StartLocate = exTask.StartLocat, // 起始位置 |
| | | StartRoadway = locat.RoadwayNo, //所属巷道 |
| | | EndLocate = model.OutMode, // 目标位置 |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库) |
| | | OutMode = model.OutMode, //目标地址 |
| | | Order = 1 |
| | | }); |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | #region 储位状态变更 |
| | | |
| | | //更改储位状态为出库中 |
| | | locat.Status = "3"; //3 出库中 |
| | | Db.Updateable(locat).ExecuteCommand();//修改储位信息 |
| | | #endregion |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (int.Parse(model.Num) == outDto1.Count + outDto2.Count) |
| | | { |
| | | break;//需求垛数已达到 可以出库了 |
| | | } |
| | | } |
| | | outDto1.AddRange(moveDto); |
| | | outDto1.AddRange(outDto2); |
| | | if (outDto1.Count <= 0) |
| | | { |
| | | throw new Exception("暂无出库任务,请核查!"); |
| | | } |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "空托出库", int.Parse(model.Num) + "", "下发", $"WCS下发了 {int.Parse(model.Num)} 个空托垛", userId); |
| | | Db.CommitTran(); |
| | | |
| | | return outDto1; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | public string MoveAddress(string oldAddress, string roadWay, string skuNo,string areaNo="")//01020201 排-列-层-深度 |
| | | { |
| | | string nowAddress = ""; |
| | | |
| | | //根据物料编码获取对应区域 |
| | | var skuCategoryNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.SkuNo == skuNo).Select(a => a.CategoryNo).First(); |
| | | var category = Db.Queryable<SysMaterialCategory>().First(a => a.IsDel == "0" && a.CategoryNo == skuCategoryNo); |
| | | var category = new SysMaterialCategory(); |
| | | if (!string.IsNullOrEmpty(skuNo)) |
| | | { |
| | | //根据物料编码获取对应区域 |
| | | var skuCategoryNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.SkuNo == skuNo).Select(a => a.CategoryNo).First(); |
| | | category = Db.Queryable<SysMaterialCategory>().First(a => a.IsDel == "0" && a.CategoryNo == skuCategoryNo); |
| | | |
| | | areaNo = category.AreaNo; |
| | | } |
| | | else |
| | | { |
| | | //todo 待验证 |
| | | category = Db.Queryable<SysMaterialCategory>().First(a => a.IsDel == "0" && a.AreaNo == areaNo); |
| | | } |
| | | |
| | | // 获取移库目标储位 |
| | | var row = int.Parse(oldAddress.Substring(0, 2)); |
| | | var lie = int.Parse(oldAddress.Substring(2, 2)); |
| | | var ceng = int.Parse(oldAddress.Substring(4, 2)); |
| | | |
| | | var sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng})) as distNum from SysStorageLocat where Flag = '0' and Status = '0' and Depth = '02' and RoadwayNo = '{roadWay}' and AreaNo in ('{category.AreaNo}') order by distNum;"; |
| | | var sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng})) as distNum from SysStorageLocat where Flag = '0' and Status = '0' and Depth = '02' and RoadwayNo = '{roadWay}' and AreaNo in ('{areaNo}') order by distNum;"; |
| | | |
| | | var addressModels = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList(); |
| | | if (addressModels.Count > 0) // 判断同巷道内排空库位 |
| | |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | } |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0) |
| | | { |
| | | throw new Exception("追溯条码和拣货数量不能同时输入"); |
| | | } |
| | |
| | | } |
| | | biaoShi = "1"; |
| | | } |
| | | else if (!string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)//数量拣货 |
| | | else if (!string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)//数量拣货 |
| | | { |
| | | if (boxInfo.Count() > 1) |
| | | { |
| | |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | } |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0) |
| | | { |
| | | throw new Exception("追溯条码和拣货数量不能同时输入"); |
| | | } |
| | |
| | | } |
| | | biaoShi = "1"; |
| | | } |
| | | else if (!string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)//数量拣货 |
| | | else if (!string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)//数量拣货 |
| | | { |
| | | if (boxInfo.Count() > 1) |
| | | { |
| | | throw new Exception("该箱码内存在支码不能进行数量拣货"); |
| | | } |
| | | decimal boxQty = boxInfo.First().Qty; |
| | | if (Convert.ToInt32(pickQty1) > boxQty) |
| | | if (Convert.ToDecimal(pickQty1) > boxQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内数量"); |
| | | } |
| | | if (Convert.ToInt32(pickQty1) > needQty) |
| | | if (Convert.ToDecimal(pickQty1) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于剩余待拣数量"); |
| | | } |
| | |
| | | |
| | | if (biaoShi != "2") |
| | | { |
| | | pickQty += item.Qty; |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | } |
| | |
| | | { |
| | | if (decimal.Parse(pickQty1) == item.Qty) |
| | | { |
| | | pickQty += item.Qty; |
| | | //删除库存箱码明细 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | pickQty += decimal.Parse(pickQty1); |
| | | item.Qty -= decimal.Parse(pickQty1); |
| | | item.BitBoxMark = "1";//零箱标识 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | } |
| | | pickQty += item.Qty; |
| | | |
| | | } |
| | | //改变库内箱码是否零箱信息 |
| | | if (biaoShi == "1") |
| | |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | //取样出库拣货(无标签) |
| | | public void SampleSoSetQtyPick(string soType, string soNo, string soDetailId, string palletNo, string PickQty, string asnNo, int userId) |
| | |
| | | SkuName = allot2.SkuName, |
| | | Standard = allot2.Standard, |
| | | PalletNo = palletNo, |
| | | CompleteQty = int.Parse(PickQty), |
| | | CompleteQty = decimal.Parse(PickQty), |
| | | InspectMark = "1", |
| | | |
| | | CreateUser = userId |
| | |
| | | } |
| | | else if (isComplete == 1) |
| | | { |
| | | complete.CompleteQty += int.Parse(PickQty); |
| | | complete.CompleteQty += decimal.Parse(PickQty); |
| | | complete.UpdateUser = userId; |
| | | complete.UpdateTime = Db.GetDate(); |
| | | |
| | |
| | | |
| | | |
| | | //修改出库分配信息 |
| | | allot2.Qty += int.Parse(PickQty); |
| | | allot2.CompleteQty += int.Parse(PickQty); |
| | | allot2.Qty += decimal.Parse(PickQty); |
| | | allot2.CompleteQty += decimal.Parse(PickQty); |
| | | Db.Updateable(allot2).ExecuteCommand(); |
| | | |
| | | int isDel = 0; |
| | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | | stockDetail.InspectMark = "1";//修改为抽检托标识 |
| | | stockDetail.Qty -= int.Parse(PickQty); |
| | | stockDetail.Qty -= decimal.Parse(PickQty); |
| | | if (stockDetail.Qty == stockDetail.LockQty && stockDetail.Qty != 0) |
| | | { |
| | | stockDetail.Status = "2"; |
| | |
| | | } |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.Qty += int.Parse(PickQty); |
| | | noticeDetail.AllotQty += int.Parse(PickQty); |
| | | noticeDetail.FactQty += int.Parse(PickQty); |
| | | noticeDetail.CompleteQty += int.Parse(PickQty); |
| | | noticeDetail.Qty += decimal.Parse(PickQty); |
| | | noticeDetail.AllotQty += decimal.Parse(PickQty); |
| | | noticeDetail.FactQty += decimal.Parse(PickQty); |
| | | noticeDetail.CompleteQty += decimal.Parse(PickQty); |
| | | noticeDetail.Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * noticeDetail.Qty; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | |
| | |
| | | } |
| | | //剩余拣货数量(待拣减去已拣) |
| | | var needQty = allot.Qty - allot.CompleteQty; |
| | | if (int.Parse(PickQty) > needQty) |
| | | if (decimal.Parse(PickQty) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于托内剩余待拣数量"); |
| | | } |
| | |
| | | SkuName = allot.SkuName, |
| | | Standard = allot.Standard, |
| | | PalletNo = palletNo, |
| | | CompleteQty = int.Parse(PickQty), |
| | | CompleteQty = decimal.Parse(PickQty), |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = Db.GetDate(), |
| | |
| | | } |
| | | else if (isComplete == 1) |
| | | { |
| | | complete.CompleteQty += int.Parse(PickQty); |
| | | complete.CompleteQty += decimal.Parse(PickQty); |
| | | complete.UpdateUser = userId; |
| | | complete.UpdateTime = Db.GetDate(); |
| | | |
| | |
| | | |
| | | |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += int.Parse(PickQty); |
| | | allot.CompleteQty += decimal.Parse(PickQty); |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | |
| | | allot.UpdateTime = DateTime.Now; |
| | |
| | | |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | | stockDetail.Qty -= int.Parse(PickQty); |
| | | stockDetail.LockQty -= int.Parse(PickQty); |
| | | stockDetail.Qty -= decimal.Parse(PickQty); |
| | | stockDetail.LockQty -= decimal.Parse(PickQty); |
| | | if (stockDetail.Qty == stockDetail.LockQty) |
| | | { |
| | | stockDetail.Status = "2"; |
| | |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | } |
| | | //删除或修改库存 |
| | | stock.Qty -= int.Parse(PickQty); |
| | | stock.LockQty -= int.Parse(PickQty); |
| | | stock.Qty -= decimal.Parse(PickQty); |
| | | stock.LockQty -= decimal.Parse(PickQty); |
| | | if (stock.Qty <= 0) |
| | | { |
| | | Db.Deleteable(stock).ExecuteCommand(); |
| | |
| | | } |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += int.Parse(PickQty); |
| | | noticeDetail.CompleteQty += decimal.Parse(PickQty); |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | |
| | | { |
| | | throw new Exception("托盘码不能为空"); |
| | | } |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) |
| | | if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0) |
| | | { |
| | | throw new Exception("追溯条码和拣货数量不能同时输入"); |
| | | } |
| | |
| | | { |
| | | throw new Exception("未查询到该出库单的信息"); |
| | | } |
| | | if (notice.Status != "3") |
| | | if (notice.Type != "1" && notice.Type != "2" && notice.Type != "3") |
| | | { |
| | | 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)); |
| | |
| | | #region 拼托信息 |
| | | var sdId = 0; |
| | | bool isNew = false; |
| | | var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.SkuNo == allot.SkuNo && m.LotNo == allot.LotNo); |
| | | var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew); |
| | | if (pinStockDetail != null) |
| | | { |
| | | if (palletNo != palletNoNew)//非整托拣货 |
| | |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | noticeDetail.Status = "2"; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | noticeDetail.Status = "3"; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | |
| | | { |
| | | var biaoShi = "0";//0:整箱拣货、1:散支拣货、2:数量拣货 |
| | | 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.StockDetailId == stockDetail.Id); |
| | | if (boxInfo.Count() == 0) |
| | | { |
| | | throw new Exception("未查询到该箱码及追溯码的信息"); |
| | |
| | | |
| | | biaoShi = "1"; |
| | | } |
| | | else if (!string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)//数量拣货 |
| | | else if (!string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)//数量拣货 |
| | | { |
| | | if (boxInfo.Count() > 1) |
| | | { |
| | | throw new Exception("该箱码内存在支码不能进行数量拣货"); |
| | | } |
| | | decimal boxQty = boxInfo.First().Qty; |
| | | if (Convert.ToInt32(pickQty1) > boxQty) |
| | | if (decimal.Parse(pickQty1) > boxQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于箱内数量"); |
| | | } |
| | | if (Convert.ToInt32(pickQty1) > needQty) |
| | | if (decimal.Parse(pickQty1) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于剩余待拣数量"); |
| | | } |
| | |
| | | } |
| | | else//数量拣货 |
| | | { |
| | | var boxInfo2 = Db.Queryable<DataBoxInfo>().First(m => m.IsDel == "0" && m.BoxNo == boxNo && m.StockDetailId == sdId); |
| | | |
| | | if (decimal.Parse(pickQty1) == item.Qty) |
| | | { |
| | | //修改库存箱码明细 |
| | |
| | | } |
| | | else |
| | | { |
| | | if (boxInfo2 == null) |
| | | { |
| | | var dataBoxInfo = new DataBoxInfo() |
| | | { |
| | | StockDetailId = sdId, |
| | | BindNo = item.BindNo, |
| | | BoxNo = item.BoxNo, |
| | | BoxNo2 = item.BoxNo2, |
| | | BoxNo3 = item.BoxNo3, |
| | | PalletNo = item.PalletNo, |
| | | PalletNo2 = item.PalletNo2, |
| | | PalletNo3 = item.PalletNo3, |
| | | Qty = decimal.Parse(pickQty1), |
| | | FullQty = item.FullQty, |
| | | Status = "5", |
| | | LotNo = item.LotNo, |
| | | LotText = item.LotText, |
| | | SkuNo = item.SkuNo, |
| | | SkuName = item.SkuName, |
| | | Standard = item.Standard, |
| | | ProductionTime = item.ProductionTime, |
| | | SupplierLot = item.SupplierLot, |
| | | InspectMark = item.InspectMark, |
| | | BitBoxMark = "1", |
| | | InspectStatus = item.InspectStatus, |
| | | InspectTime = item.InspectTime, |
| | | }; |
| | | |
| | | Db.Insertable(dataBoxInfo).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | boxInfo2.Qty += decimal.Parse(pickQty1); |
| | | item.BitBoxMark = boxInfo2.Qty>= boxInfo2.FullQty? "0":"1" ;//零箱标识 |
| | | Db.Updateable(boxInfo2).ExecuteCommand(); |
| | | } |
| | | item.Qty -= decimal.Parse(pickQty1); |
| | | item.BitBoxMark = "1";//零箱标识 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | if (item.Qty<=0) |
| | | { |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | |
| | | } |
| | | |
| | | pickQty += int.Parse(pickQty1); |
| | | pickQty += decimal.Parse(pickQty1); |
| | | } |
| | | } |
| | | //改变库内箱码是否零箱信息 |
| | |
| | | } |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | noticeDetail.Status = "2"; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | noticeDetail.Status = "3"; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | } |
| | | |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | } |
| | | |
| | | if (isNew) |
| | | { |
| | | sd.Qty = pickQty; |
| | | sd.LockQty = pickQty; |
| | | var sd2 = Db.Queryable<DataStockDetail>().First(m=>m.Id == sdId); |
| | | sd2.Qty = pickQty; |
| | | sd2.LockQty = pickQty; |
| | | |
| | | Db.Updateable(sd).ExecuteCommand(); |
| | | Db.Updateable(sd2).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | //剩余拣货数量(待拣减去已拣) |
| | | var needQty = allot.Qty - allot.CompleteQty; |
| | | if (int.Parse(PickQty) > needQty) |
| | | if (decimal.Parse(PickQty) > needQty) |
| | | { |
| | | throw new Exception("拣货数量不能大于托内剩余待拣数量"); |
| | | } |
| | |
| | | } |
| | | if (palletNo == palletNoNew)//原托盘与新托盘一致 |
| | | { |
| | | if (int.Parse(PickQty) != stockDetail.Qty) |
| | | if (decimal.Parse(PickQty) != stockDetail.Qty) |
| | | { |
| | | throw new Exception("原托盘与新托盘一致,需要把托盘上所有数量拣货"); |
| | | } |
| | |
| | | sd.SkuName = stockDetail.SkuName; |
| | | sd.Standard = stockDetail.Standard; |
| | | |
| | | sd.Qty = int.Parse(PickQty); |
| | | sd.LockQty = int.Parse(PickQty); |
| | | sd.Qty = decimal.Parse(PickQty); |
| | | sd.LockQty = decimal.Parse(PickQty); |
| | | |
| | | sd.FrozenQty = 0; |
| | | sd.InspectQty = 0; |
| | |
| | | if (palletNo != palletNoNew) |
| | | { |
| | | //修改拼托托盘库存明细 |
| | | pinStockDetail.Qty += int.Parse(PickQty); |
| | | pinStockDetail.LockQty += int.Parse(PickQty); |
| | | pinStockDetail.Qty += decimal.Parse(PickQty); |
| | | pinStockDetail.LockQty += decimal.Parse(PickQty); |
| | | Db.Updateable(pinStockDetail).ExecuteCommand(); |
| | | } |
| | | else |
| | |
| | | SkuName = allot.SkuName, |
| | | Standard = allot.Standard, |
| | | PalletNo = palletNo, |
| | | CompleteQty = int.Parse(PickQty), |
| | | CompleteQty = decimal.Parse(PickQty), |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = Db.GetDate(), |
| | |
| | | } |
| | | else if (isComplete == 1) |
| | | { |
| | | complete.CompleteQty += int.Parse(PickQty); |
| | | complete.CompleteQty += decimal.Parse(PickQty); |
| | | complete.UpdateUser = userId; |
| | | complete.UpdateTime = Db.GetDate(); |
| | | |
| | |
| | | } |
| | | |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += int.Parse(PickQty); |
| | | allot.CompleteQty += decimal.Parse(PickQty); |
| | | allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; |
| | | allot.UpdateTime = DateTime.Now; |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | |
| | | { |
| | | //删除或修改库存明细 |
| | | stockDetail.BitPalletMark = "1";//修改为零托标识 |
| | | stockDetail.Qty -= int.Parse(PickQty); |
| | | stockDetail.LockQty -= int.Parse(PickQty); |
| | | stockDetail.Qty -= decimal.Parse(PickQty); |
| | | stockDetail.LockQty -= decimal.Parse(PickQty); |
| | | if (stockDetail.Qty == stockDetail.LockQty) |
| | | { |
| | | stockDetail.Status = "2"; |
| | |
| | | } |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += int.Parse(PickQty); |
| | | noticeDetail.CompleteQty += decimal.Parse(PickQty); |
| | | noticeDetail.Status = "2"; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | |
| | | var num = Db.Queryable<BllExportNoticeDetail>() |
| | |
| | | if (num <= 0) |
| | | { |
| | | notice.Status = "4"; //更改为执行完成 |
| | | noticeDetail.Status = "3"; |
| | | Db.Updateable(noticeDetail).ExecuteCommand(); |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |