| | |
| | | using Model.ModelVm.BllCheckVm; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using SqlSugar.Extensions; |
| | | using Utility.Tools; |
| | | using WMS.BLL.LogServer; |
| | | using WMS.DAL; |
| | |
| | | LotNo = m.LotNo, |
| | | LotText = m.LotText, |
| | | SupplierLot = m.SupplierLot, |
| | | Qty = (int)m.Qty, |
| | | Qty = m.Qty, |
| | | |
| | | PalletNo = m.PalletNo |
| | | }).ToList(); |
| | |
| | | //循环盘点记录 |
| | | foreach (var l in demo) |
| | | { |
| | | var sku = Db.Queryable<SysMaterials>().First(a => a.IsDel == "0" && a.SkuNo == l.SkuNo); |
| | | if (l.CheckResult == 0)//正常 |
| | | { |
| | | var de3 = stockBox.First(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3); |
| | | if (de3 == null) |
| | | if (sku.Type != "4") |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息"); |
| | | var de3 = stockBox.First(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3); |
| | | if (de3 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息"); |
| | | } |
| | | var de2 = stockDetail.First(m => m.Id == de3.StockDetailId); |
| | | if (de2 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息"); |
| | | } |
| | | de2.Status = "0";//将库存明细状态改为待分配 |
| | | Db.Updateable(de2).ExecuteCommand(); |
| | | } |
| | | var de2 = stockDetail.First(m => m.Id == de3.StockDetailId); |
| | | if (de2 == null) |
| | | else |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息"); |
| | | var de2 = stockDetail.First(m => m.PalletNo == l.PalletNo && m.SkuNo == l.SkuNo); |
| | | if (de2 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.PalletNo}的库存明细的信息"); |
| | | } |
| | | de2.Status = "0";//将库存明细状态改为待分配 |
| | | Db.Updateable(de2).ExecuteCommand(); |
| | | } |
| | | de2.Status = "0";//将库存明细状态改为待分配 |
| | | Db.Updateable(de2).ExecuteCommand(); |
| | | |
| | | } |
| | | else if (l.CheckResult == 1)//盘亏 |
| | | { |
| | | var de3 = stockBox.First(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3); |
| | | if (de3 == null) |
| | | if (sku.Type != "4") |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息"); |
| | | } |
| | | var de3 = stockBox.First(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3); |
| | | if (de3 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息"); |
| | | } |
| | | |
| | | var de2 = stockDetail.First(m => m.Id == de3.StockDetailId); |
| | | if (de2 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息"); |
| | | } |
| | | de2.Status = "0"; |
| | | de2.Qty -= de3.Qty; |
| | | var de = stock.First(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo); |
| | | if (de == null) |
| | | { |
| | | throw new Exception($"未查询到物料{l.SkuNo}批次{l.LotNo}的总库存的信息"); |
| | | } |
| | | de.Qty -= de3.Qty; |
| | | var de2 = stockDetail.First(m => m.Id == de3.StockDetailId); |
| | | if (de2 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息"); |
| | | } |
| | | de2.Status = "0"; |
| | | de2.Qty -= de3.Qty; |
| | | var de = stock.First(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo); |
| | | if (de == null) |
| | | { |
| | | throw new Exception($"未查询到物料{l.SkuNo}批次{l.LotNo}的总库存的信息"); |
| | | } |
| | | de.Qty -= de3.Qty; |
| | | |
| | | Db.Updateable(de).ExecuteCommand(); |
| | | Db.Updateable(de2).ExecuteCommand(); |
| | | Db.Deleteable(de3).ExecuteCommand(); |
| | | Db.Updateable(de).ExecuteCommand(); |
| | | Db.Updateable(de2).ExecuteCommand(); |
| | | Db.Deleteable(de3).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | var de2 = stockDetail.First(m => m.PalletNo == l.PalletNo && m.SkuNo == l.SkuNo); |
| | | if (de2 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.PalletNo}的库存明细的信息"); |
| | | } |
| | | de2.Status = "0"; |
| | | de2.Qty = l.RealQty; |
| | | var de = stock.First(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo); |
| | | if (de == null) |
| | | { |
| | | throw new Exception($"未查询到物料{l.SkuNo}批次{l.LotNo}的总库存的信息"); |
| | | } |
| | | de.Qty -= Convert.ToDecimal(l.Qty - l.RealQty); |
| | | |
| | | Db.Updateable(de).ExecuteCommand(); |
| | | Db.Updateable(de2).ExecuteCommand(); |
| | | } |
| | | |
| | | } |
| | | else if (l.CheckResult == 2)//盘盈 |
| | | { |
| | | var sku = Db.Queryable<SysMaterials>().First(a => a.IsDel == "0" && a.SkuNo == l.SkuNo); |
| | | |
| | | var stockDetailInfo = stockDetail.First(m => m.PalletNo == d.PalletNo && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo);//库存明细 |
| | | |
| | | |
| | | if (sku.Type != "4") |
| | | { |
| | | var stockBoxInfo = stockBox.First(m => m.StockDetailId == stockDetailInfo.Id);//库存箱支明细 |
| | |
| | | BoxNo2 = l.BoxNo2, |
| | | BoxNo3 = l.BoxNo3, |
| | | PalletNo = l.PalletNo, |
| | | Qty = (int)l.RealQty, |
| | | Qty = (decimal)l.RealQty, |
| | | FullQty = stockBoxInfo.FullQty,//满箱数量 |
| | | Status = "2", |
| | | SkuNo = l.SkuNo, |
| | |
| | | { |
| | | de.Qty += (int)(l.RealQty - l.Qty); |
| | | } |
| | | |
| | | |
| | | Db.Updateable(de).ExecuteCommand(); |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | //AGV移库完成 |
| | | public void MoveSuccess(string taskNo, int userId) |
| | | { |
| | | try |
| | | { |
| | | //当前任务信息 |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw new Exception($"未查询到任务号为:‘{taskNo}’的任务信息"); |
| | | } |
| | | if (task.Status == "2") |
| | | { |
| | | throw new Exception("当前任务已完成"); |
| | | } |
| | | Db.BeginTran(); |
| | | //库存中当前托盘的信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); |
| | | var locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault(); |
| | | |
| | | //当前任务中的储位信息 |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo); |
| | | |
| | | //更改任务 |
| | | task.Status = "2";//任务状态 |
| | | task.IsSend = 0; |
| | | task.IsCancel = 0; |
| | | task.IsFinish = 0; |
| | | task.FinishDate = DateTime.Now;//完成时间 |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | // 更改当前任务中的储位状态(改为0空储位) |
| | | locate.Status = "0"; |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | |
| | | //目标储位信息 |
| | | var endLocate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat); |
| | | if (endLocate != null) |
| | | { |
| | | if (endLocate.Status != "4") |
| | | { |
| | | throw new Exception("目标储位状态非移入中"); |
| | | } |
| | | } |
| | | //更改库存明细 |
| | | foreach (var item in stockDetail) |
| | | { |
| | | //item.Status = "0";//待分配 |
| | | //item.LockQty = 0;//锁定数量改为0 |
| | | if (endLocate != null)//有目标储位说明移到其他区域储位 |
| | | { |
| | | item.LocatNo = endLocate.LocatNo;//储位更改 |
| | | item.WareHouseNo = endLocate.WareHouseNo;//所属仓库更改 |
| | | item.RoadwayNo = endLocate.RoadwayNo;//所属巷道更改 |
| | | item.AreaNo = endLocate.AreaNo;//所属区域更改 |
| | | |
| | | } |
| | | else//没有目标储位说明移到入库口 |
| | | { |
| | | item.LocatNo = "";//储位更改(改为空) |
| | | item.WareHouseNo = "";//所属仓库更改(改为空) |
| | | item.RoadwayNo = "";//所属巷道更改(改为空) |
| | | item.AreaNo = "";//所属区域更改(改为空) |
| | | } |
| | | if (item.Qty == item.LockQty && item.LockQty>0) |
| | | { |
| | | item.Status = "2"; |
| | | } |
| | | else if (item.Qty > item.LockQty && item.LockQty > 0) |
| | | { |
| | | item.Status = "1"; |
| | | } |
| | | else if (item.Qty > item.LockQty && item.LockQty == 0) |
| | | { |
| | | item.Status = "0"; |
| | | } |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | |
| | | |
| | | |
| | | |
| | | if (endLocate != null && endLocate.AreaNo == "B12") //是否是3楼缓存区 是:删除库存 |
| | | { |
| | | //库存箱码明细删除 |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).ToList(); |
| | | Db.Deleteable(boxInfo).ExecuteCommand(); |
| | | //删除库存托盘信息 |
| | | Db.Deleteable(item).ExecuteCommand(); |
| | | //更改库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo); |
| | | stock.LockQty -= (decimal)item.Qty; |
| | | stock.Qty -= (decimal)item.Qty; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | //更改托盘状态 |
| | | var pallet = Db.Queryable<SysPallets>().First(m=>m.IsDel =="0" && m.PalletNo == task.PalletNo); |
| | | if (pallet != null) |
| | | { |
| | | pallet.Status = "0"; |
| | | Db.Updateable(pallet).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | | if (endLocate != null) |
| | | { |
| | | //更改目标储位状态 |
| | | endLocate.Status = "1";//有物品 |
| | | Db.Updateable(endLocate).ExecuteCommand(); |
| | | } |
| | | |
| | | if (userId != 0) |
| | | { |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId); |
| | | } |
| | | Db.CommitTran(); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception("完成反馈失败:" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | //重新下发盘点出库任务 |
| | | public OutCommandDto AgainSendCheckTask(string taskNo, int userId, string url) |
| | | { |
| | |
| | | checkLog.IsDel = "1"; |
| | | Db.Updateable(checkLog).ExecuteCommand(); |
| | | //修改储位信息 |
| | | var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat); |
| | | var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.StartLocat); |
| | | if (locat == null) |
| | | { |
| | | throw new Exception("未查询到储位信息,请核实!"); |
| | |
| | | } |
| | | } |
| | | |
| | | //取消AGV移库任务 |
| | | public void CancelMoveTask(string taskNo, int userId) |
| | | { |
| | | try |
| | | { |
| | | Db.BeginTran(); |
| | | |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw new Exception("未查询到任务信息"); |
| | | } |
| | | //修改任务 |
| | | task.IsSuccess = 0; |
| | | task.IsSend = 0; |
| | | task.IsCancel = 0; |
| | | task.IsFinish = 0; |
| | | task.Status = "4"; |
| | | task.CancelDate = DateTime.Now; |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | |
| | | //修改起始储位信息 |
| | | var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.StartLocat); |
| | | if (locat == null) |
| | | { |
| | | throw new Exception("未查询到储位信息,请核实!"); |
| | | } |
| | | locat.Status = "1"; //有物品 |
| | | Db.Updateable(locat).ExecuteCommand(); |
| | | |
| | | //修改目标储位信息 |
| | | var locatEnd = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.EndLocat); |
| | | if (locatEnd != null) |
| | | { |
| | | locatEnd.Status = "0"; //空储位 |
| | | Db.Updateable(locatEnd).ExecuteCommand(); |
| | | } |
| | | |
| | | //修改库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == task.PalletNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("托盘上物料库存明细信息不存在,请检查!"); |
| | | } |
| | | stockDetail.Status = "0";//待分配 |
| | | stockDetail.LockQty = 0;//锁定数量 |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | |
| | | //修改库存 |
| | | var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == stockDetail.SkuNo && w.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("托盘上物料库存信息不存在,请检查!"); |
| | | } |
| | | stock.LockQty -= (decimal)stockDetail.Qty; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId); |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | #region 上游系统接口 |
| | | |
| | | //盘点结果返回erp |