| | |
| | | { |
| | | try |
| | | { |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.Id == id&& m.IsDel == "0"); |
| | | var notice = Db.Queryable<BllExportNotice>().First(m => m.Id == id && m.IsDel == "0"); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("未查询到单据信息"); |
| | |
| | | .LeftJoin<SysLogisticsInfo>((a, b) => a.LogisticsId == b.Id) |
| | | .LeftJoin<SysUserInfor>((a, b, c) => a.CreateUser == c.Id) |
| | | .LeftJoin<SysUserInfor>((a, b, c, d) => a.CreateUser == d.Id) |
| | | .LeftJoin<SysUserInfor>((a, b, c, d,e) => a.CheckUser == e.Id) |
| | | .Select((a, b, c, d,e) => new ExportNoticeDto() |
| | | .LeftJoin<SysUserInfor>((a, b, c, d, e) => a.CheckUser == e.Id) |
| | | .Select((a, b, c, d, e) => new ExportNoticeDto() |
| | | { |
| | | Id = a.Id, |
| | | SONo = a.SONo, |
| | |
| | | IsWave = a.IsWave, |
| | | WaveNo = a.WaveNo, |
| | | IsDespatch = a.IsDespatch, |
| | | Demo=a.Demo, |
| | | Demo = a.Demo, |
| | | |
| | | CreateUserName = c.RealName, |
| | | UpdateUserName = c.RealName, |
| | | CreateTime = a.CreateTime, |
| | | UpdateTime = a.UpdateTime, |
| | | |
| | | CheckUserName=e.RealName, |
| | | CheckTime=a.CheckTime |
| | | CheckUserName = e.RealName, |
| | | CheckTime = a.CheckTime |
| | | }) |
| | | .OrderByDescending(a => a.CreateTime) |
| | | .ToOffsetPage(page, limit, ref total); |
| | |
| | | SkuName = it.SkuName, |
| | | LotNo = it.LotNo, |
| | | Standard = it.Standard, |
| | | Qty = type == "4" ? it.Qty : it.Qty - it.LockQty - it.FrozenQty |
| | | Qty = type == "4" ? it.Qty : it.Qty - it.LockQty - it.FrozenQty |
| | | |
| | | }).ToList(); |
| | | |
| | |
| | | var skuNos = model.Detail.Select(a => a.SkuNo).Distinct().ToList(); |
| | | //根据物料号获取物料信息、库存明细中获取批次描述供货批次等 |
| | | var skuList = Db.Queryable<SysMaterials>().Where(a => skuNos.Contains(a.SkuNo) && a.IsDel == "0").ToList(); |
| | | var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty-s.FrozenQty-s.LockQty) > 0).ToList(); |
| | | var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList(); |
| | | //var palletList = contextDb.Queryable<DataStockDetail>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList(); |
| | | //客户信息 |
| | | var customer = Db.Queryable<SysCustomer>().Where(m => m.IsDel == "0" && m.CustomerNo == model.CustomerNo).ToList(); |
| | |
| | | CompleteQty = 0, |
| | | PackagNo = sku.PackagNo, |
| | | Price = sku.Price, |
| | | Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price*d.Qty, |
| | | Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty, |
| | | IsBale = d.IsBale, |
| | | IsBelt = d.IsBelt, |
| | | SupplierLot = stocks.First().SupplierLot, |
| | | IsWave = "0", |
| | | WaveNo= "", |
| | | WaveNo = "", |
| | | |
| | | CreateUser = userId, |
| | | }; |
| | |
| | | LogisticsId = model.LogisticsId, |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | | IsDespatch="0", |
| | | IsDespatch = "0", |
| | | |
| | | CreateUser = userId, |
| | | }; |
| | |
| | | var stockCount = 0.00m; //st.StockQuantity.Value |
| | | if (s != null) |
| | | { |
| | | stockCount = s.Qty-s.FrozenQty-s.LockQty+d.Qty; |
| | | stockCount = s.Qty - s.FrozenQty - s.LockQty + d.Qty; |
| | | } |
| | | |
| | | var dm = new SelectStockSkuDto() |
| | |
| | | } |
| | | else if (old.Qty != d.Qty || old.IsBale != d.IsBale || old.IsBelt != d.IsBelt) |
| | | { |
| | | if (d.Qty > (stock.Qty-stock.FrozenQty-stock.LockQty) + old.Qty) |
| | | if (d.Qty > (stock.Qty - stock.FrozenQty - stock.LockQty) + old.Qty) |
| | | { |
| | | throw new Exception("物品库存数量不足"); |
| | | } |
| | |
| | | .AndIF(!string.IsNullOrWhiteSpace(skuName), m => m.SkuName.Contains(skuName.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => m.PalletNo.Contains(palletNo.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(lotNo), m => m.LotNo.Contains(lotNo.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(inspectMark), m => m.InspectMark==inspectMark) |
| | | .AndIF(!string.IsNullOrWhiteSpace(bitPalletMark), m => m.BitPalletMark== bitPalletMark) |
| | | .AndIF(!string.IsNullOrWhiteSpace(inspectMark), m => m.InspectMark == inspectMark) |
| | | .AndIF(!string.IsNullOrWhiteSpace(bitPalletMark), m => m.BitPalletMark == bitPalletMark) |
| | | .And(m => !string.IsNullOrWhiteSpace(m.WareHouseNo)) |
| | | .And(a => a.Status == "0") |
| | | .And(a => a.WareHouseNo == "W01") |
| | |
| | | var outDtoList = new List<OutCommandDto>(); //出库数据的集合 |
| | | str = ""; |
| | | var stockDetailList = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo && m.IsDel == "0").ToList(); |
| | | |
| | | |
| | | if (stockDetailList.Count == 0) |
| | | { |
| | | throw new Exception($"未在库内查询到该托盘信息"); |
| | |
| | | } |
| | | //判断托盘库存信息分组后是否大于1条 |
| | | var detailGroup = stockDetailList.GroupBy(m => new { m.SkuNo, m.PalletNo, m.WareHouseNo, m.LocatNo }).ToList(); |
| | | if (detailGroup.Count>1) |
| | | if (detailGroup.Count > 1) |
| | | { |
| | | throw new Exception($"未在库内查询到该托盘信息"); |
| | | } |
| | |
| | | throw new Exception($"当前托盘所在的储位已损坏,不能出库,请核实"); |
| | | } |
| | | |
| | | if (locate.Status !="1") |
| | | if (locate.Status != "1") |
| | | { |
| | | throw new Exception($"当前托盘所在的储位状态不是有物品,不能出库,请核实"); |
| | | } |
| | |
| | | Db.Updateable(de).ExecuteCommand(); |
| | | Db.Updateable(stocka).ExecuteCommand(); |
| | | } |
| | | |
| | | |
| | | locate.Status = "3"; //要出库的储位改变状态 正在出库 |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | |
| | | |
| | | |
| | | #endregion |
| | | |
| | |
| | | { |
| | | #region 集合 |
| | | |
| | | var outDtoList = new List<OutCommandDto>(); //出库数据的集合 |
| | | var outDto1 = new List<OutCommandDto>(); //先出库数据的集合(深度为1的储位) |
| | | var outDto2 = new List<OutCommandDto>(); //后出库数据的集合(深度为2的储位) |
| | | var moveDto = new List<OutCommandDto>(); //要移库数据的集合 |
| | | //记录错误信息的集合 |
| | | var flagList = new List<int>();//1:当前要出库的储位正在移出、2 出库的托盘储位信息错误(在储位表中未查询到)、3储位损坏不能出库、4 要出库的托盘正在入库 |
| | | |
| | |
| | | //循环分配的信息生成出库任务 |
| | | foreach (var item in list) |
| | | { |
| | | var taskNoStr = ""; |
| | | string toLocation = string.Empty;//目标位置 |
| | | string unstackingMode2 = unstackingMode;//拆垛方式,0:机器人拆垛 1:PDA拆垛 |
| | | #region 判断是否需要拆箱 |
| | |
| | | isChai = "1"; |
| | | unstackingMode2 = "1";//需要拆箱需走PDA拆垛 |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | if (unstackingMode2 == "0")//机器人拆垛 |
| | | { |
| | |
| | | if (locate.Status == "1") //有物品 |
| | | { |
| | | #region 添加出库任务 |
| | | |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask //出库任务 |
| | | if (locate.Depth == "01") //深度为1 |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask //出库任务 |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = locate.LocatNo,//起始位置 |
| | | EndLocat = toLocation,//outMode,//目标位置 |
| | | PalletNo = item.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | Msg = "从" + locate.LocatNo + "到" + toLocation + "的出库任务", //关键信息 |
| | | }; |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | logTaskList.Add(exTask); |
| | | StartLocat = locate.LocatNo,//起始位置 |
| | | EndLocat = toLocation,//outMode,//目标位置 |
| | | PalletNo = item.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | Msg = "从" + locate.LocatNo + "到" + toLocation + "的出库任务", //关键信息 |
| | | }; |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | logTaskList.Add(exTask); |
| | | |
| | | outDtoList.Add(new OutCommandDto() |
| | | outDto1.Add(new OutCommandDto() |
| | | { |
| | | PalletNo = item.PalletNo,//托盘号 |
| | | StartLocate = locate.LocatNo, // 起始位置 |
| | | StartRoadway = locate.RoadwayNo,//其实巷道 |
| | | EndLocate = toLocation,//outMode, // 目标位置 |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库) |
| | | OutMode = "", //目标地址 |
| | | Order = 1 |
| | | }); |
| | | } |
| | | else if (locate.Depth == "02") //深度为2 |
| | | { |
| | | PalletNo = item.PalletNo,//托盘号 |
| | | StartLocate = locate.LocatNo, // 起始位置 |
| | | StartRoadway = locate.RoadwayNo,//其实巷道 |
| | | EndLocate = toLocation,//outMode, // 目标位置 |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库) |
| | | OutMode = "", //目标地址 |
| | | Order = 1 |
| | | }); |
| | | //获取出库深度为2储位前面的储位信息 |
| | | var slotBefore = com.GetLocateNoDepth1(locate.WareHouseNo, locate.LocatNo); |
| | | if (slotBefore.Status == "1") //前面的储位有货物、进行移库操作 |
| | | { |
| | | //要出库深度为2的储位前面的储位中货物是否要出库 |
| | | var isout = outStockDetail.Count(m => m.LocatNo == slotBefore.LocatNo); |
| | | |
| | | if (isout <= 0) //进行移库 |
| | | { |
| | | //去库存表中找到储位对应的托盘码操作 |
| | | var stockNew = Db.Queryable<DataStockDetail>().First(m => m.LocatNo == slotBefore.LocatNo); |
| | | if (stockNew == null) |
| | | { |
| | | var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == slotBefore.LocatNo); |
| | | slotChange.Status = "0"; |
| | | Db.Updateable(slotChange).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | //获取移库的库位 |
| | | var newSlot = MoveAddress(slotBefore.LocatNo, slotBefore.RoadwayNo, item.SkuNo); |
| | | //当前移库库位的储位信息 |
| | | var locatey = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == newSlot && m.IsDel == "0"); |
| | | if (!string.IsNullOrEmpty(newSlot)) |
| | | { |
| | | #region 添加出库时发生的移库任务 |
| | | |
| | | var exYkTaskNo = new Common().GetMaxNo("TK"); |
| | | var exYkTask = new LogTask //出库时产生移库任务 |
| | | { |
| | | TaskNo = exYkTaskNo, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = stockNew.LocatNo,//起始位置 |
| | | EndLocat = newSlot,//目标位置 |
| | | PalletNo = stockNew.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "2",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | |
| | | Msg = stockNew.LocatNo + " ==>> " + newSlot + "的移库任务", |
| | | }; |
| | | Db.Insertable(exYkTask).ExecuteCommand(); |
| | | |
| | | moveDto.Add(new OutCommandDto() |
| | | { |
| | | StartRoadway = slotBefore.RoadwayNo, //起始巷道 |
| | | PalletNo = stockNew.PalletNo,//托盘号 |
| | | StartLocate = stockNew.LocatNo, // 起始位置 |
| | | EndLocate = newSlot, // 目标位置 |
| | | EndRoadway = locatey.RoadwayNo, // 目标巷道 |
| | | TaskNo = exYkTask.TaskNo, // 任务号 |
| | | TaskType = "2",// 任务类型 (移库) |
| | | OutMode = "", //目标地址 |
| | | Order = 1, |
| | | }); |
| | | #endregion |
| | | |
| | | #region 改变储位装填 |
| | | var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.Id == slotBefore.Id); |
| | | var slotChange2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == newSlot); |
| | | slotChange.Status = "5"; //改变状态(正在移出) |
| | | slotChange2.Status = "4"; // 改变状态(正在移入) |
| | | Db.Updateable(slotChange).ExecuteCommand(); |
| | | Db.Updateable(slotChange2).ExecuteCommand(); |
| | | #endregion |
| | | } |
| | | else |
| | | { |
| | | #region 添加出库任务 |
| | | |
| | | var exYkTaskNo1 = new Common().GetMaxNo("TK"); |
| | | var exYkTask1 = new LogTask //出库移库没有库位了进行出库任务 |
| | | { |
| | | TaskNo = exYkTaskNo1, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = stockNew.LocatNo,//起始位置 |
| | | EndLocat = "",//目标位置 |
| | | PalletNo = stockNew.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | Msg = locate.LocatNo + "的出库任务" |
| | | }; |
| | | Db.Insertable(exYkTask1).ExecuteCommand(); |
| | | |
| | | outDto1.Add(new OutCommandDto() |
| | | { |
| | | StartRoadway = slotBefore.RoadwayNo, //起始巷道 |
| | | PalletNo = stockNew.PalletNo,//托盘号 |
| | | StartLocate = stockNew.LocatNo, // 起始位置 |
| | | EndLocate = "", // 目标位置 |
| | | EndRoadway = "", // 目标巷道 |
| | | TaskNo = exYkTask1.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库) |
| | | OutMode = "", //目标地址 |
| | | Order = 1, |
| | | }); |
| | | #endregion |
| | | |
| | | #region MyRegion |
| | | |
| | | var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.Id == slotBefore.Id); |
| | | slotChange.Status = "3"; //改变状态(正在出库) |
| | | Db.Updateable(slotChange).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else if (slotBefore.Status == "2" || slotBefore.Status == "4") //前面储位状态是入库中或者移入中 |
| | | { |
| | | flagList.Add(5); |
| | | continue; |
| | | } |
| | | |
| | | #region 添加出库任务 |
| | | |
| | | var taskNo1 = new Common().GetMaxNo("TK"); |
| | | var exTask1 = new LogTask //出库任务 |
| | | { |
| | | TaskNo = taskNo1, |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = locate.LocatNo,//起始位置 |
| | | EndLocat = "",//目标位置 |
| | | PalletNo = item.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "0",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | Msg = locate.LocatNo + "的出库任务" |
| | | }; |
| | | Db.Insertable(exTask1).ExecuteCommand(); |
| | | |
| | | outDto2.Add(new OutCommandDto() |
| | | { |
| | | StartRoadway = locate.RoadwayNo, //起始巷道 |
| | | PalletNo = item.PalletNo,//托盘号 |
| | | StartLocate = locate.LocatNo, // 起始位置 |
| | | EndLocate = "", // 目标位置 |
| | | EndRoadway = locate.RoadwayNo, //目标巷道 |
| | | TaskNo = exTask1.TaskNo, // 任务号 |
| | | TaskType = "1",// 任务类型 (出库) |
| | | OutMode = "", //目标地址 |
| | | Order = 1, |
| | | }); |
| | | taskNoStr = exTask1.TaskNo; |
| | | #endregion |
| | | |
| | | } |
| | | #endregion |
| | | |
| | | #region 改变数据 |
| | |
| | | locate.Status = "3"; //要出库的储位改变状态 正在出库 |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | |
| | | item.TaskNo = exTask.TaskNo; // 出库分配信息中更新任务号 |
| | | item.TaskNo = taskNoStr; // 出库分配信息中更新任务号 |
| | | item.Status = "1"; // 出库分配信息状态改为正在执行 |
| | | item.UnstackingMode = unstackingMode2;//拆垛方式 |
| | | item.OutMode = unstackingMode2 == "1" ? outMode : "";//出库口 |
| | |
| | | } |
| | | } |
| | | } |
| | | var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType =="1"&& m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo==item.PalletNo); |
| | | var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType == "1" && m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo == item.PalletNo); |
| | | if (taskNo == null) |
| | | { |
| | | taskNo = logTaskList.First(m => m.PalletNo == item.PalletNo);//当前有同托盘不同物料出库 |
| | |
| | | { |
| | | str += "3.要出库的托盘正在入库、"; |
| | | } |
| | | if (outDtoList.Count > 0) |
| | | if (outDto1.Count > 0) |
| | | { |
| | | // 正式运行程序放开 |
| | | var list2 = outDtoList.Select(m => m.TaskNo).ToList(); |
| | | var jsonData = JsonConvert.SerializeObject(outDtoList); |
| | | var list2 = outDto1.Select(m => m.TaskNo).ToList(); |
| | | var jsonData = JsonConvert.SerializeObject(outDto1); |
| | | string response = ""; |
| | | |
| | | try |
| | |
| | | |
| | | } |
| | | |
| | | return outDtoList; |
| | | return outDto1; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | |
| | | } |
| | | foreach (var item in stockDetail) |
| | | { |
| | | if (item.SkuNo== "100099")//判断是否是空托出库 |
| | | if (item.SkuNo == "100099")//判断是否是空托出库 |
| | | { |
| | | //判断总库存是否为0,如果为0删除 否则减去数量 |
| | | var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099"); |
| | |
| | | if (noticeDetail.FactQty == 0) |
| | | { |
| | | var noticeDetail2 = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo && m.Id != noticeDetail.Id).ToList(); |
| | | var num = noticeDetail2.Count(m => m.FactQty>0); |
| | | var num = noticeDetail2.Count(m => m.FactQty > 0); |
| | | //判断出库单的所有明细是否都为0;如果为0变更出库单状态为已分配 |
| | | if (num == 0) |
| | | { |
| | |
| | | //修改库存明细 |
| | | stockDetail.LockQty -= stockDetail.Qty; //锁定数量 |
| | | stockDetail.Status = "0"; //库存状态 0:待分配 |
| | | |
| | | |
| | | //修改库存总表 |
| | | datastock.LockQty -= (int)stockDetail.Qty; //锁定数量 |
| | | |
| | |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | | Db.Updateable(allot).ExecuteCommand(); |
| | | } |
| | | |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", (int)userId); |
| | | Db.CommitTran(); |
| | |
| | | try |
| | | { |
| | | // 判断当前任务状态 Status 1:正在执行 3:异常结束 |
| | | var taskModel = Db.Queryable<LogTask>().First(m => m.TaskNo == model.TaskNo && m.IsDel == "0" && m.Status == "1"); |
| | | var taskModel = Db.Queryable<LogTask>().First(m => m.TaskNo == model.TaskNo && m.IsDel == "0" && m.Status == "1"); |
| | | if (taskModel == null) |
| | | { |
| | | throw new Exception("此任务不存在或任务状态已变更!"); |
| | |
| | | { |
| | | throw new Exception("获取失败,未找到指定出库单!"); |
| | | } |
| | | if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5") |
| | | if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5") |
| | | { |
| | | throw new Exception("获取失败,出库单状态不允许!"); |
| | | } |
| | |
| | | m => m.SkuNo.Contains(msg.Trim()) |
| | | || m.SkuName.Contains(msg.Trim()) |
| | | || m.LocatNo.Contains(msg.Trim())) |
| | | .And(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo &&(m.Status == "0" || m.Status == "1")) |
| | | .And(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && (m.Status == "0" || m.Status == "1")) |
| | | .ToExpression();//注意 这一句 不能少 |
| | | |
| | | var list = Db.Queryable<DataStockDetail>().Where(item).Select(a => new StockDetailDto |
| | |
| | | { |
| | | throw new Exception("操作失败,出库单已分配完成!"); |
| | | } |
| | | var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel =="0" && a.SONo == detail.SONo); |
| | | var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel == "0" && a.SONo == detail.SONo); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("操作失败,未找到指定出库单!"); |
| | |
| | | { |
| | | throw new Exception("操作失败,部分储位库存异常!"); |
| | | } |
| | | if (st.Qty > (stock.Qty-stock.LockQty-stock.FrozenQty -stock.InspectQty)) |
| | | if (st.Qty > (stock.Qty - stock.LockQty - stock.FrozenQty - stock.InspectQty)) |
| | | { |
| | | throw new Exception("操作失败,出库数量超出库存数量!"); |
| | | } |
| | |
| | | { |
| | | notice.Status = "2";//证明分配数量大于等于出库数量 修改为已分配 |
| | | } |
| | | else if (totalAllotQty< totalQty && totalAllotQty>0) |
| | | else if (totalAllotQty < totalQty && totalAllotQty > 0) |
| | | { |
| | | notice.Status = "1";//证明分配数量小于等于出库数量 修改为部分分配 |
| | | } |
| | |
| | | //物料编码表 |
| | | var skuList = Db.Queryable<SysMaterials>().Where(w => w.IsDel == "0"); |
| | | //包装表 |
| | | var packagList= Db.Queryable<SysPackag>().Where(w => w.IsDel == "0"); |
| | | var packagList = Db.Queryable<SysPackag>().Where(w => w.IsDel == "0"); |
| | | //出库分配信息 |
| | | var allotList = Db.Queryable<BllExportAllot>().Where(w => w.IsDel == "0" && w.SONo == soNo).ToList(); |
| | | foreach (var item in allotList) |
| | |
| | | result = "1";//需要拆箱 |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | catch (Exception ex) |
| | |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取移库目标库位 |
| | | /// </summary> |
| | | /// <param name="oldAddress">需要移动的库位地址</param> |
| | | /// <param name="roadWay">巷道</param> |
| | | /// <param name="skuNo">物料编码</param> |
| | | /// <returns>目标库位地址 为"" 直接下发两次出库指令</returns> |
| | | public string MoveAddress(string oldAddress, string roadWay, string skuNo)//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 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}' |
| | | order by distNum;"; |
| | | |
| | | var addressModels = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList(); |
| | | if (addressModels.Count > 0) // 判断同巷道内排空库位 |
| | | { |
| | | var listLocaete = new List<string>(); |
| | | foreach (var item in addressModels) |
| | | { |
| | | // 目标内库位对应的外库位 |
| | | string addressee = item.LocatNo.Substring(0, 6) + "01"; |
| | | |
| | | // 判断目标库位的外库位是否存在货物 (正常情况下正在移入情况不存在,因为移库先移入里面,后移入外面) |
| | | //SlotStatus 0: 空储位 1:有货 2:正在入库 3:正在出库 4:正在移入 5:正在移出 |
| | | sqlString = $"select count(*) from SysStorageLocat where LocatNo = '{addressee}' and Status = '0' and Flag in ('0','1') ; "; |
| | | var rowNum = Db.Ado.SqlQuery<int>(sqlString).First(); |
| | | if (rowNum == 0) |
| | | { |
| | | continue; |
| | | } |
| | | else |
| | | { |
| | | nowAddress = item.LocatNo; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if (nowAddress == "") |
| | | { |
| | | // 判断同巷道外排空库位 |
| | | 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 = '01' and RoadwayNo = '{roadWay}' and AreaNo in '{category}' |
| | | order by distNum;"; |
| | | var adderModeling = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList(); |
| | | if (adderModeling.Count > 0) |
| | | { |
| | | nowAddress = adderModeling[0].LocatNo; |
| | | } |
| | | else |
| | | { |
| | | // 库内不存在空储位 |
| | | nowAddress = ""; |
| | | } |
| | | } |
| | | |
| | | |
| | | return nowAddress; |
| | | } |
| | | } |
| | | } |