| | |
| | | using Model.ModelVm.BllCheckVm; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using SqlSugar.Extensions; |
| | | using Utility.Tools; |
| | | using WMS.BLL.LogServer; |
| | | using WMS.DAL; |
| | |
| | | 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() |
| | |
| | | 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 = (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; |
| | | } |
| | | 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) |
| | | { |
| | |
| | | } |
| | | #endregion |
| | | |
| | | } |
| | | } |
| | | } |