| | |
| | | using Model.ModelVm.BllCheckVm; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using SqlSugar.Extensions; |
| | | using Utility.Tools; |
| | | using WMS.BLL.LogServer; |
| | | using WMS.BLL.SysServer; |
| | | using WMS.DAL; |
| | | using WMS.Entity.BllAsnEntity; |
| | | using WMS.Entity.BllCheckEntity; |
| | |
| | | try |
| | | { |
| | | var total = 0; |
| | | var list = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel =="0" && m.CRNo == crNo) |
| | | var list = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == crNo) |
| | | .LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id) |
| | | .LeftJoin<SysUserInfor>((a, b, c) => a.UpdateUser == c.Id) |
| | | .Select((a, b, c) => new StockCheckDetailDto() |
| | |
| | | } |
| | | |
| | | //获取库存明细信息(盘点选择明细数据源) |
| | | public List<StockDetailDto> GetCheckStockDetailList(string houseNo, string roadwayNo, string locateNo, string msg) |
| | | public List<StockDetailDto> GetCheckStockDetailList(string houseNo, string roadwayNo, string locateNo, string msg, int page, int limit, out int count) |
| | | { |
| | | try |
| | | { |
| | |
| | | .And(m => m.IsDel == "0" && m.SkuNo != "100099" && m.Status == "0") |
| | | .ToExpression();//注意 这一句 不能少 |
| | | |
| | | |
| | | var total = 0; |
| | | var list = Db.Queryable<DataStockDetail>().Where(item).GroupBy(m => new { m.SkuNo, m.SkuName, m.Standard, m.LotNo, m.LotText, m.SupplierLot, m.LocatNo, m.PalletNo }) |
| | | .Select(a => new StockDetailDto() |
| | | { |
| | |
| | | Qty = SqlFunc.AggregateSum(a.Qty), |
| | | LocatNo = a.LocatNo, |
| | | PalletNo = a.PalletNo |
| | | }).ToList(); |
| | | }).ToOffsetPage(page, limit, ref total); |
| | | count = total; |
| | | |
| | | return list; |
| | | } |
| | |
| | | LotNo = m.LotNo, |
| | | LotText = m.LotText, |
| | | SupplierLot = m.SupplierLot, |
| | | Qty = (int)m.Qty, |
| | | Qty = m.Qty, |
| | | |
| | | PalletNo = m.PalletNo |
| | | }).ToList(); |
| | |
| | | if (string.IsNullOrWhiteSpace(model.CrNo)) |
| | | { |
| | | var num = Db.Queryable<BllStockCheck>().Count(m => m.IsDel == "0" && (m.Status == 0 || m.Status == 1)); |
| | | if (num>0) |
| | | if (num > 0) |
| | | { |
| | | throw new Exception("已有等待执行的盘点单据请先完成或删除"); |
| | | } |
| | |
| | | CreateTime = time |
| | | }; |
| | | list.Add(detail); |
| | | var sd = Db.Queryable<DataStockDetail>().Where(m => m.IsDel =="0" && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo && m.Status == "0").ToList(); |
| | | var sd = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo && m.Status == "0").ToList(); |
| | | foreach (var s in sd) |
| | | { |
| | | s.Status = "3"; |
| | |
| | | |
| | | } |
| | | |
| | | if (list.Count>0) |
| | | if (list.Count > 0) |
| | | { |
| | | Db.Insertable(list).ExecuteCommand(); |
| | | } |
| | |
| | | d.IsDel = "1"; |
| | | d.UpdateTime = time; |
| | | d.UpdateUser = userId; |
| | | var item = Db.Queryable<DataStockDetail>().Where(m => m.IsDel =="0" && m.PalletNo == d.PalletNo && m.SkuNo ==d.SkuNo && m.LotNo == d.LotNo && m.Status == "3").ToList(); |
| | | var item = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == d.PalletNo && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo && m.Status == "3").ToList(); |
| | | foreach (var i in item) |
| | | { |
| | | i.Status = "0"; |
| | |
| | | //循环盘点记录 |
| | | 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 stockDetailInfo = stockDetail.First(m => m.PalletNo == d.PalletNo && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo);//库存明细 |
| | | var stockBoxInfo = stockBox.First(m => m.StockDetailId == stockDetailInfo.Id);//库存箱支明细 |
| | | var boxInfo = boxQtyList.First(m => m.boxNo == l.BoxNo);//找到对应箱子是否零箱 |
| | | //添加库存箱支信息 |
| | | var databox = new DataBoxInfo |
| | | { |
| | | StockDetailId = stockDetailInfo.Id, |
| | | BindNo= stockBoxInfo.BindNo, |
| | | BoxNo = l.BoxNo, |
| | | BoxNo2 = l.BoxNo2, |
| | | BoxNo3 = l.BoxNo3, |
| | | PalletNo = l.PalletNo, |
| | | Qty = (int)l.RealQty, |
| | | FullQty = stockBoxInfo.FullQty,//满箱数量 |
| | | Status = "2", |
| | | SkuNo = l.SkuNo, |
| | | SkuName = l.SkuName, |
| | | LotNo = l.LotNo, |
| | | LotText = l.LotText, |
| | | Standard = l.Standard, |
| | | SupplierLot = l.SupplierLot, |
| | | { |
| | | |
| | | InspectMark = stockBoxInfo.InspectMark, |
| | | InspectStatus = stockBoxInfo.InspectStatus, |
| | | ProductionTime = stockBoxInfo.ProductionTime, |
| | | BitBoxMark = boxInfo.bitBoxMark, |
| | | }; |
| | | Db.Insertable<DataBoxInfo>(databox).ExecuteCommand(); |
| | | //库存明细增加数量 |
| | | stockDetailInfo.Qty += (int)l.RealQty; |
| | | 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);//库存箱支明细 |
| | | var boxInfo = boxQtyList.First(m => m.boxNo == l.BoxNo);//找到对应箱子是否零箱 |
| | | //添加库存箱支信息 |
| | | var databox = new DataBoxInfo |
| | | { |
| | | StockDetailId = stockDetailInfo.Id, |
| | | BindNo = stockBoxInfo.BindNo, |
| | | BoxNo = l.BoxNo, |
| | | BoxNo2 = l.BoxNo2, |
| | | BoxNo3 = l.BoxNo3, |
| | | PalletNo = l.PalletNo, |
| | | Qty = (decimal)l.RealQty, |
| | | FullQty = stockBoxInfo.FullQty,//满箱数量 |
| | | Status = "2", |
| | | SkuNo = l.SkuNo, |
| | | SkuName = l.SkuName, |
| | | LotNo = l.LotNo, |
| | | LotText = l.LotText, |
| | | Standard = l.Standard, |
| | | SupplierLot = l.SupplierLot, |
| | | |
| | | InspectMark = stockBoxInfo.InspectMark, |
| | | InspectStatus = stockBoxInfo.InspectStatus, |
| | | ProductionTime = stockBoxInfo.ProductionTime, |
| | | BitBoxMark = boxInfo.bitBoxMark, |
| | | }; |
| | | Db.Insertable<DataBoxInfo>(databox).ExecuteCommand(); |
| | | //库存明细增加数量 |
| | | stockDetailInfo.Qty += (int)l.RealQty; |
| | | } |
| | | else |
| | | { |
| | | //库存明细增加数量 |
| | | stockDetailInfo.Qty = (int)l.RealQty; |
| | | } |
| | | stockDetailInfo.Status = "0"; |
| | | |
| | | Db.Updateable(stockDetailInfo).ExecuteCommand(); |
| | | //库存增加数量 |
| | | var de = stock.First(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo); |
| | |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存的信息"); |
| | | } |
| | | de.Qty += (int)l.RealQty; |
| | | if (sku.Type != "4") |
| | | { |
| | | de.Qty += (int)l.RealQty; |
| | | } |
| | | else |
| | | { |
| | | de.Qty += (int)(l.RealQty - l.Qty); |
| | | } |
| | | |
| | | Db.Updateable(de).ExecuteCommand(); |
| | | } |
| | | } |
| | |
| | | if (d.Qty == d.RealQty) |
| | | { |
| | | d.CheckResult = 0; |
| | | if (demo.Count(m=>m.CheckResult == 1 || m.CheckResult == 2)>0) |
| | | if (demo.Count(m => m.CheckResult == 1 || m.CheckResult == 2) > 0) |
| | | { |
| | | d.CheckResult = 3; |
| | | } |
| | |
| | | d.CheckResult = 1; |
| | | } |
| | | Db.Updateable(d).ExecuteCommand(); |
| | | |
| | | |
| | | #region 添加判断盘点完托盘是否是零托 |
| | | var material = materialList.FirstOrDefault(m => m.SkuNo == d.SkuNo); |
| | | if (material == null) |
| | |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "调整单据", $"调整了单据号为{notice.CRNo}的盘点单信息", userId); |
| | | |
| | | |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | return true; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | { |
| | | //回滚事务 |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | |
| | | //要出库的明细集合 |
| | | var outStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList(); |
| | | var outStockBox = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList(); |
| | | //获取物料信息 |
| | | var skuNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.Type == "4").Select(a => a.SkuNo).ToList(); |
| | | var time = DateTime.Now; |
| | | Db.BeginTran(); |
| | | try |
| | |
| | | { |
| | | if (item.Status == 0) |
| | | { |
| | | var de = outStockDetail.Where(m => |
| | | m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo).Select(m => m.Id).ToList(); |
| | | var bo = outStockBox.Where(m => de.Contains(m.StockDetailId)).ToList(); |
| | | var logList = new List<BllStockCheckLog>(); |
| | | foreach (var b in bo) |
| | | //判断是否为无码物料 |
| | | if (skuNo.Contains(item.SkuNo)) |
| | | { |
| | | var de = outStockDetail.First(m => m.IsDel == "0" && |
| | | m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo); |
| | | |
| | | var checkLog = new BllStockCheckLog() |
| | | { |
| | | CRNo = item.CRNo, |
| | | PalletNo = item.PalletNo, |
| | | BoxNo = b.BoxNo, |
| | | BoxNo2 = b.BoxNo2, |
| | | BoxNo3 = b.BoxNo3, |
| | | Qty = b.Qty, |
| | | SkuNo = b.SkuNo, |
| | | SkuName = b.SkuName, |
| | | Standard = b.Standard, |
| | | LotNo = b.LotNo, |
| | | LotText = b.LotText, |
| | | SupplierLot = b.SupplierLot, |
| | | BoxNo = "", |
| | | BoxNo2 = "", |
| | | BoxNo3 = "", |
| | | Qty = (int?)de.Qty, |
| | | SkuNo = de.SkuNo, |
| | | SkuName = de.SkuName, |
| | | Standard = de.Standard, |
| | | LotNo = de.LotNo, |
| | | LotText = de.LotText, |
| | | SupplierLot = de.SupplierLot, |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = time |
| | | }; |
| | | logList.Add(checkLog); |
| | | } |
| | | //生成盘点记录 |
| | | |
| | | } |
| | | else |
| | | { |
| | | var de = outStockDetail.Where(m => |
| | | m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo).Select(m => m.Id).ToList(); |
| | | var bo = outStockBox.Where(m => de.Contains(m.StockDetailId)).ToList(); |
| | | foreach (var b in bo) |
| | | { |
| | | var checkLog = new BllStockCheckLog() |
| | | { |
| | | CRNo = item.CRNo, |
| | | PalletNo = item.PalletNo, |
| | | BoxNo = b.BoxNo, |
| | | BoxNo2 = b.BoxNo2, |
| | | BoxNo3 = b.BoxNo3, |
| | | Qty = b.Qty, |
| | | SkuNo = b.SkuNo, |
| | | SkuName = b.SkuName, |
| | | Standard = b.Standard, |
| | | LotNo = b.LotNo, |
| | | LotText = b.LotText, |
| | | SupplierLot = b.SupplierLot, |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = time |
| | | }; |
| | | logList.Add(checkLog); |
| | | } |
| | | } |
| | | |
| | | //生成盘点记录 |
| | | Db.Insertable(logList).ExecuteCommand(); |
| | | } |
| | | // 储位号 |
| | |
| | | { |
| | | var de = outStockDetail.First(m => m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo); |
| | | //判断是否是零箱库,当前明细信息直接更新出库完成 |
| | | if (de!= null && de.WareHouseNo=="W02") |
| | | if (de != null && de.WareHouseNo == "W02") |
| | | { |
| | | //盘点明细状态改为待盘点 |
| | | item.Status = 2; |
| | | item.Status = 2; |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | //盘点信息修改 |
| | | if (notice.Status == 0) |
| | |
| | | #region 添加出库任务 |
| | | var taskNo = new Common().GetMaxNo("TK"); |
| | | //添加出库任务 |
| | | var exTask = new LogTask |
| | | var exTask = new LogTask |
| | | { |
| | | TaskNo = taskNo, |
| | | Sender = "WMS", |
| | |
| | | try |
| | | { |
| | | var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); |
| | | //response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); //正式版本放开 |
| | | var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss") |
| | | |
| | | ////解析返回数据 |
| | | var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); |
| | | if (wcsModel.StatusCode == 0) |
| | | { |
| | | // //更改任务的发送返回时间// |
| | | new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | str += "下发成功"; |
| | | } |
| | | if (wcsModel.StatusCode == -1) |
| | | { |
| | | new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); |
| | | throw new Exception(wcsModel.Msg); |
| | | } |
| | | //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); |
| | | //if (wcsModel.StatusCode == 0) |
| | | //{ |
| | | // //更改任务的发送返回时间// |
| | | // new TaskServer().EditTaskIssueOk(list2, time1, time2); |
| | | //str += "下发成功"; |
| | | //} |
| | | //if (wcsModel.StatusCode == -1) |
| | | //{ |
| | | // new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); |
| | | // throw new Exception(wcsModel.Msg); |
| | | //} |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | |
| | | if (userId != 0) |
| | | { |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId); |
| | | } |
| | | Db.CommitTran(); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception("完成反馈失败:" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | //AGV移库完成 |
| | | public void MoveSuccess(string taskNo,string mesTokenUrl, string mesUrl, 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("目标储位状态非移入中"); |
| | | } |
| | | } |
| | | var data = new List<RequertBeiliaoInfoModel>(); |
| | | //更改库存明细 |
| | | 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楼缓存区 是:删除库存 |
| | | { |
| | | if (string.IsNullOrWhiteSpace(item.SONo)) |
| | | { |
| | | throw new Exception("当前托盘不是拼托出库托盘"); |
| | | } |
| | | //记录托盘上信息给MES |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).ToList(); |
| | | if (boxInfo.Count == 0) |
| | | { |
| | | throw new Exception("托盘上物料箱码信息不存在,请检查!"); |
| | | } |
| | | foreach (var item2 in boxInfo) |
| | | { |
| | | data.Add(new RequertBeiliaoInfoModel() |
| | | { |
| | | no = item2.BoxNo, |
| | | materiel_no = item.SkuNo, |
| | | materiel_name = item.SkuName, |
| | | qty = item.Qty, |
| | | batch = item.LotNo, |
| | | producttime = item2.ProductionTime.ToString().Substring(1, 8), |
| | | expiry = item2.ExpirationTime.ToString().Substring(1, 8) |
| | | |
| | | }); |
| | | } |
| | | //库存箱码明细删除 |
| | | 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 (endLocate != null && endLocate.AreaNo == "B12") |
| | | { |
| | | //获取令牌 |
| | | var token = new Token().GetMesToken(mesTokenUrl); |
| | | Dictionary<string, string> mesDic = new Dictionary<string, string>() |
| | | { |
| | | {"Authorization",token } |
| | | }; |
| | | var mesData = new RequertBeiliaoModel() |
| | | { |
| | | morder_no = stockDetail.First().SONo, |
| | | pallet = stockDetail.First().PalletNo, |
| | | layer_no = endLocate.LocatNo, |
| | | items = data |
| | | }; |
| | | var jsonData = JsonConvert.SerializeObject(mesData); |
| | | //调用接口 |
| | | var response = HttpHelper.DoPost(mesUrl, jsonData, "备料完成运至缓存区反馈至MES", "MES", mesDic); |
| | | |
| | | var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据 |
| | | if (obj.status != "0") |
| | | { |
| | | throw new Exception("备料同步MES失败:" + obj.message); |
| | | } |
| | | |
| | | } |
| | | if (userId != 0) |
| | | { |
| | | //添加操作日志记录 |
| | |
| | | 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("未查询到储位信息,请核实!"); |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | //取消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); |
| | | } |
| | | } |
| | |
| | | } |
| | | #endregion |
| | | |
| | | } |
| | | } |
| | | } |