| | |
| | | using WMS.Entity.Context; |
| | | using WMS.Entity.SysEntity; |
| | | using WMS.IBLL.IBllAsnServer; |
| | | using WMS.Entity.DataEntity; |
| | | using Dm; |
| | | using System.Reflection; |
| | | |
| | | namespace WMS.BLL.BllAsnServer |
| | | { |
| | |
| | | CreateTime = a.CreateTime, |
| | | UpdateTime = a.UpdateTime |
| | | |
| | | }).OrderByDescending(a => a.CreateTime).OrderBy(a => a.BoxNo).ToOffsetPage(model.Page, model.Limit, ref total); |
| | | }).OrderByDescending(a => a.ASNNo).OrderBy(a => a.BoxNo).ToOffsetPage(model.Page, model.Limit, ref total); |
| | | count = total; |
| | | return data; |
| | | } |
| | |
| | | { |
| | | throw new Exception("未查询到单据明细信息,请核实"); |
| | | } |
| | | var skuInfo = Db.Queryable<SysMaterials>().First(w => w.IsDel == "0" && w.SkuNo == asnDetail.SkuNo); |
| | | if (skuInfo == null) |
| | | { |
| | | throw new Exception("未查询到物料信息,请核实"); |
| | | } |
| | | if (string.IsNullOrEmpty(skuInfo.PackagNo)) |
| | | { |
| | | throw new Exception("未查询到物料的包装信息,请核实"); |
| | | } |
| | | |
| | | var packInfo = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == asnDetail.PackagNo); |
| | | var packInfo = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == skuInfo.PackagNo); |
| | | if (packInfo == null) |
| | | { |
| | | throw new Exception("未查询到单据明细中的物料包装信息"); |
| | |
| | | { |
| | | throw new Exception("单据数量不能小于等于0"); |
| | | } |
| | | if (string.IsNullOrWhiteSpace(asnList.LotNo)) |
| | | //if (string.IsNullOrWhiteSpace(asnList.LotNo)) |
| | | //{ |
| | | // throw new Exception("单据批次号不能为空"); |
| | | //} |
| | | if (string.IsNullOrWhiteSpace(asnList.BoxCodeStr)) |
| | | { |
| | | throw new Exception("单据批次号不能为空"); |
| | | throw new Exception("单据箱码常值不能为空"); |
| | | } |
| | | var asn = Db.Queryable<BllArrivalNotice>().First(m => m.ASNNo == asnList.ASNNo && m.IsDel == "0"); |
| | | if (asn == null) |
| | | { |
| | | throw new Exception("未查询到单据信息"); |
| | | } |
| | | |
| | | var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == asnList.PackagNo); |
| | | //包装编码 |
| | | var packagNo = asnList.PackagNo; |
| | | if (string.IsNullOrEmpty(packagNo)) |
| | | { |
| | | var skuInfo = Db.Queryable<SysMaterials>().First(w => w.IsDel == "0" && w.SkuNo == asnList.SkuNo); |
| | | if (skuInfo == null) |
| | | { |
| | | throw new Exception("未查询到物料信息"); |
| | | } |
| | | packagNo = skuInfo.PackagNo; |
| | | } |
| | | var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == packagNo); |
| | | if (pack == null) |
| | | { |
| | | throw new Exception("未查询到当前单据中物料的包装信息"); |
| | |
| | | |
| | | #region 包装查询 |
| | | |
| | | var bNum = 0;//箱物品数量 |
| | | var zNum = 0;//支物品数量 |
| | | var bNum = 0m;//箱物品数量 |
| | | var zNum = 0m;//支物品数量 |
| | | var packLevel = 0; |
| | | |
| | | if (pack.L2Num.HasValue) |
| | |
| | | if (pack.L2Name != "托") |
| | | { |
| | | packLevel = 1;//JC34项目只有一级标签 |
| | | bNum = Convert.ToInt32(pack.L2Num); |
| | | bNum = Convert.ToDecimal(pack.L2Num); |
| | | } |
| | | } |
| | | if (pack.L1Num.HasValue) |
| | |
| | | if (packLevel == 0) |
| | | { |
| | | packLevel = 1; |
| | | bNum = Convert.ToInt32(pack.L1Num); |
| | | bNum = Convert.ToDecimal(pack.L1Num); |
| | | } |
| | | zNum = Convert.ToInt32(pack.L1Num); |
| | | zNum = Convert.ToDecimal(pack.L1Num); |
| | | } |
| | | |
| | | if (packLevel < 1)//包装等级小于1,按照1级标签打印 |
| | |
| | | |
| | | string maxLotNoStr = ""; //批次号 |
| | | string maxBoxCode = ""; //箱码号 |
| | | |
| | | maxLotNoStr = asnList.LotNo; |
| | | maxBoxCode = label.Where(m => m.LotNo == maxLotNoStr).Max(a => a.BoxNo); |
| | | |
| | | maxLotNoStr = asnList.BoxCodeStr;//asnList.LotNo; |
| | | if (string.IsNullOrEmpty(asnList.LotNo)) |
| | | { |
| | | maxBoxCode = label.Where(m => m.ASNDetailNo == asnList.Id).Max(a => a.BoxNo); |
| | | } |
| | | else |
| | | { |
| | | maxBoxCode = label.Where(m => m.LotNo == maxLotNoStr).Max(a => a.BoxNo); |
| | | } |
| | | #endregion |
| | | |
| | | for (int i = 1; i <= labelNum; i++) |
| | |
| | | maxBoxCode = maxBoxCode.Substring(0, maxBoxCode.Length-6) + (int.Parse(maxBoxCode.Substring(maxBoxCode.Length - 6, 6)) + 1).ToString().PadLeft(6, '0'); |
| | | } |
| | | |
| | | DateTime? storeTime2 = null; |
| | | // 将条码保存到原料条码表 |
| | | var labelModel = new BllBoxInfo() |
| | | { |
| | |
| | | Status = "0", |
| | | SkuNo = asnList.SkuNo, |
| | | SkuName = asnList.SkuName, |
| | | LotNo = maxLotNoStr, |
| | | LotNo = asnList.LotNo,//maxLotNoStr, |
| | | Standard = asnList.Standard, |
| | | PackageStandard = packStr, |
| | | SupplierLot = supplierLot, |
| | |
| | | BitBoxMark = bNum > boxQty ? "1" : "0", |
| | | InspectStatus = "0", |
| | | |
| | | ProductionTime = DateTime.Parse(productionTime), |
| | | StoreTime = string.IsNullOrWhiteSpace(storeTime) ? storeTime2 : DateTime.Parse(storeTime ), |
| | | ExpirationTime = DateTime.Parse(expirationTime), |
| | | ProductionTime = null, |
| | | StoreTime = null, |
| | | ExpirationTime = null, |
| | | |
| | | Origin = "WMS生成", |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now, |
| | | }; |
| | | if (!string.IsNullOrEmpty(productionTime)) |
| | | { |
| | | labelModel.ProductionTime = DateTime.Parse(productionTime); |
| | | } |
| | | if (!string.IsNullOrEmpty(storeTime)) |
| | | { |
| | | labelModel.StoreTime = DateTime.Parse(storeTime); |
| | | } |
| | | if (!string.IsNullOrEmpty(expirationTime)) |
| | | { |
| | | labelModel.ExpirationTime = DateTime.Parse(expirationTime); |
| | | } |
| | | |
| | | Db.Insertable(labelModel).ExecuteCommand(); |
| | | modelList.Add(labelModel); |
| | |
| | | BitBoxMark = bNum > boxQty ? "1" : "0", |
| | | InspectStatus = "0", |
| | | |
| | | ProductionTime = DateTime.Parse(productionTime), |
| | | StoreTime = DateTime.Parse(storeTime), |
| | | ExpirationTime = DateTime.Parse(expirationTime), |
| | | ProductionTime = null, |
| | | StoreTime = null, |
| | | ExpirationTime = null, |
| | | |
| | | Origin = "WMS生成", |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now, |
| | | }; |
| | | if (!string.IsNullOrEmpty(productionTime)) |
| | | { |
| | | labelModel.ProductionTime = DateTime.Parse(productionTime); |
| | | } |
| | | if (!string.IsNullOrEmpty(storeTime)) |
| | | { |
| | | labelModel.StoreTime = DateTime.Parse(storeTime); |
| | | } |
| | | if (!string.IsNullOrEmpty(expirationTime)) |
| | | { |
| | | labelModel.ExpirationTime = DateTime.Parse(expirationTime); |
| | | } |
| | | |
| | | Db.Insertable(labelModel).ExecuteCommand(); |
| | | modelList.Add(labelModel); |
| | |
| | | |
| | | model.ExpirationTime = data.ExpirationTime; // 有效期至 |
| | | model.StoreTime = data.StoreTime; // 储存期至 |
| | | model.ProductionTime = data.ProductionTime;//生产日期 |
| | | |
| | | model.Qty = dataList.Sum(m => m.Qty);// 数量 |
| | | |
| | |
| | | |
| | | model.ExpirationTime = data.ExpirationTime; // 有效期至 |
| | | model.StoreTime = data.StoreTime; // 储存期至 |
| | | model.ProductionTime = data.ProductionTime;//生产日期 |
| | | |
| | | model.Qty = data1.Sum(m => m.Qty);// 数量 |
| | | |
| | |
| | | |
| | | model.ExpirationTime = data.ExpirationTime; // 有效期至 |
| | | model.StoreTime = data.StoreTime; // 储存期至 |
| | | model.ProductionTime = data.ProductionTime;//生产日期 |
| | | |
| | | model.Qty = data.Qty;// 数量 |
| | | |
| | |
| | | |
| | | model.ExpirationTime = data.ExpirationTime; // 有效期至 |
| | | model.StoreTime = data.StoreTime; // 储存期至 |
| | | model.ProductionTime = data.ProductionTime;//生产日期 |
| | | |
| | | model.Qty = data.Qty;// 数量 |
| | | |
| | |
| | | |
| | | model1.ExpirationTime = data.ExpirationTime; // 有效期至 |
| | | model1.StoreTime = data.StoreTime; // 储存期至 |
| | | model1.ProductionTime = data.ProductionTime;//生产日期 |
| | | model1.Qty = dataList.Sum(m => m.Qty);// 数量 |
| | | model1.BoxNo = data.BoxNo; // 箱号 |
| | | |
| | |
| | | |
| | | model.ExpirationTime = data.ExpirationTime; // 有效期至 |
| | | model.StoreTime = data.StoreTime; // 储存期至 |
| | | model.ProductionTime = data.ProductionTime;//生产日期 |
| | | model.Qty = data.Qty;// 数量 |
| | | model.BoxNo = data.BoxNo3; // 支号 |
| | | |
| | |
| | | |
| | | model.ExpirationTime = boxData.ExpirationTime; // 有效期至 |
| | | model.StoreTime = boxData.StoreTime; // 储存期至 |
| | | model.ProductionTime = boxData.ProductionTime;//生产日期 |
| | | model.Qty = data.Sum(m => m.Qty); // 数量 |
| | | model.BoxNo = boxData.BoxNo; // 支号 |
| | | |
| | |
| | | |
| | | model1.ExpirationTime = item.ExpirationTime; // 有效期至 |
| | | model1.StoreTime = item.StoreTime; // 储存期至 |
| | | model1.ProductionTime = item.ProductionTime;//生产日期 |
| | | model1.Qty = item.Qty;// 数量 |
| | | model1.BoxNo = item.BoxNo3; // 支号 |
| | | |
| | |
| | | |
| | | model.ExpirationTime = boxData.ExpirationTime; // 有效期至 |
| | | model.StoreTime = boxData.StoreTime; // 储存期至 |
| | | model.ProductionTime = boxData.ProductionTime;//生产日期 |
| | | model.Qty = data.Sum(m => m.Qty); // 数量 |
| | | model.BoxNo = boxData.BoxNo; // 支号 |
| | | |
| | |
| | | |
| | | model1.ExpirationTime = item.ExpirationTime; // 有效期至 |
| | | model1.StoreTime = item.StoreTime; // 储存期至 |
| | | model.ProductionTime = item.ProductionTime;//生产日期 |
| | | model1.Qty = item.Qty; // 数量 |
| | | model1.BoxNo = item.BoxNo3; // 支号 |
| | | |
| | |
| | | |
| | | model.ExpirationTime = boxData.ExpirationTime; // 有效期至 |
| | | model.StoreTime = boxData.StoreTime; // 储存期至 |
| | | model.ProductionTime = boxData.ProductionTime;//生产日期 |
| | | model.Qty = data.Sum(m => m.Qty); // 数量 |
| | | model.BoxNo = boxData.BoxNo; // 支号 |
| | | |
| | |
| | | |
| | | model1.ExpirationTime = item.ExpirationTime; // 有效期至 |
| | | model1.StoreTime = item.StoreTime; // 储存期至 |
| | | model.ProductionTime = item.ProductionTime;//生产日期 |
| | | model1.Qty = item.Qty;// 数量 |
| | | model1.BoxNo = item.BoxNo3; // 支号 |
| | | |
| | |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 拆分箱码标签 |
| | | /// </summary> |
| | | /// <param name="boxNo"></param> |
| | | /// <param name="chaiQty"></param> |
| | | /// <param name="userId"></param> |
| | | /// <exception cref="Exception"></exception> |
| | | public void ChaiLableBox(string boxNo,decimal chaiQty, int userId) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrEmpty(boxNo)) |
| | | { |
| | | throw new Exception("请输入拆箱箱码"); |
| | | } |
| | | if (chaiQty <= 0) |
| | | { |
| | | throw new Exception("请输入拆分数量"); |
| | | } |
| | | //标签信息 |
| | | var boxList = Db.Queryable<BllBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo).ToList(); |
| | | if (boxList.Count < 1) |
| | | { |
| | | throw new Exception("该箱码信息错误,未查到此箱码信息"); |
| | | } |
| | | if (boxList.Count > 1) |
| | | { |
| | | throw new Exception("该箱码信息错误,存在多个此箱码信息"); |
| | | } |
| | | var boxInfo = boxList.First(); |
| | | if (boxInfo.Qty <= chaiQty) |
| | | { |
| | | throw new Exception("拆箱数量大等于当前箱内数量"); |
| | | } |
| | | if (boxInfo.Status != "0") |
| | | { |
| | | throw new Exception("该箱码不是未组托状态,不允许拆箱!"); |
| | | } |
| | | |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | |
| | | boxInfo.Qty -= chaiQty; |
| | | boxInfo.BitBoxMark = "1"; |
| | | //更新箱码库存表 |
| | | Db.Updateable(boxInfo).ExecuteCommand(); |
| | | |
| | | var boxStr = boxInfo.BoxNo.Substring(0, boxInfo.BoxNo.Length - 6);//获取箱码前缀-除后六位流水外 |
| | | var maxBoxCode1 = Db.Queryable<BllBoxInfo>().Where(m => m.BoxNo.Contains(boxStr) && m.IsDel == "0" && m.Origin == "WMS生成").Max(a => a.BoxNo); |
| | | |
| | | var maxBoxCode2 = Db.Queryable<DataBoxInfo>().Where(m => m.BoxNo.Contains(boxStr) && m.IsDel == "0").Max(a => a.BoxNo); |
| | | //如果结果为0,则说明两个字符串相等; ABC BCE |
| | | //如果结果小于0,则说明第一个字符串小于第二个字符串; |
| | | //如果结果大于0,则说明第一个字符串大于第二个字符串。 |
| | | var maxBoxCode = maxBoxCode1; |
| | | var bol = String.CompareOrdinal(maxBoxCode1, maxBoxCode2); |
| | | if (bol < 0) |
| | | { |
| | | maxBoxCode = maxBoxCode2; |
| | | } |
| | | var boxNoNew = maxBoxCode.Substring(0, maxBoxCode.Length - 6) + (int.Parse(maxBoxCode.Substring(maxBoxCode.Length - 6, 6)) + 1).ToString().PadLeft(6, '0'); |
| | | |
| | | // 添加新箱码信息 |
| | | var boxModel = new BllBoxInfo() |
| | | { |
| | | ASNNo = boxInfo.ASNNo, |
| | | ASNDetailNo = boxInfo.ASNDetailNo, |
| | | BoxNo = boxNoNew, |
| | | BoxNo2 = "", |
| | | BoxNo3 = "", |
| | | Qty = chaiQty, |
| | | FullQty = boxInfo.FullQty, |
| | | Status = "0",//待组托 |
| | | BindNo = null, |
| | | PalletNo = "", |
| | | SkuNo = boxInfo.SkuNo, |
| | | SkuName = boxInfo.SkuName, |
| | | LotNo = boxInfo.LotNo, |
| | | Standard = boxInfo.Standard, |
| | | PackageStandard = boxInfo.PackageStandard, |
| | | SupplierLot = boxInfo.SupplierLot, |
| | | InspectMark = boxInfo.InspectMark, |
| | | BitBoxMark = "1", |
| | | InspectStatus = "0", |
| | | |
| | | ProductionTime = boxInfo.ProductionTime, |
| | | StoreTime = boxInfo.StoreTime, |
| | | ExpirationTime = boxInfo.ExpirationTime, |
| | | |
| | | Origin = "WMS生成", |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now, |
| | | }; |
| | | Db.Insertable(boxModel).ExecuteCommand(); |
| | | |
| | | //添加操作日志 |
| | | new OperationASNServer().AddLogOperationAsn("入库作业", "物料标签", boxNo, "编辑", $"拆分了箱码{boxNo}数量{chaiQty}到新箱码{boxNoNew}", userId); |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | //回滚事务 |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 合并箱码标签 |
| | | /// </summary> |
| | | /// <param name="boxNo"></param> |
| | | /// <param name="boxNo2"></param> |
| | | /// <param name="userId"></param> |
| | | public void MergeLableBox(string boxNo,string boxNo2, int userId) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrEmpty(boxNo) || string.IsNullOrEmpty(boxNo2)) |
| | | { |
| | | throw new Exception("请输入要合并的箱码"); |
| | | } |
| | | //标签信息 |
| | | var boxList = Db.Queryable<BllBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo).ToList(); |
| | | if (boxList.Count < 1) |
| | | { |
| | | throw new Exception($"{boxNo}该箱码信息错误,未查到此箱码信息"); |
| | | } |
| | | if (boxList.Count > 1) |
| | | { |
| | | throw new Exception($"{boxNo}该箱码信息错误,存在多个此箱码信息"); |
| | | } |
| | | var boxInfo = boxList.First(); |
| | | if (boxInfo.Status != "0") |
| | | { |
| | | throw new Exception($"{boxNo}该箱码不是未组托状态,不允许合并!"); |
| | | } |
| | | var boxList2 = Db.Queryable<BllBoxInfo>().Where(w => w.IsDel == "0" && w.BoxNo == boxNo2).ToList(); |
| | | if (boxList2.Count < 1) |
| | | { |
| | | throw new Exception($"{boxNo2}该箱码信息错误,未查到此箱码信息"); |
| | | } |
| | | if (boxList2.Count > 1) |
| | | { |
| | | throw new Exception($"{boxNo2}该箱码信息错误,存在多个此箱码信息"); |
| | | } |
| | | var boxInfo2 = boxList2.First(); |
| | | if (boxInfo2.Status != "0") |
| | | { |
| | | throw new Exception($"{boxNo2}该箱码不是未组托状态,不允许合并!"); |
| | | } |
| | | if (boxInfo.SkuNo != boxInfo2.SkuNo || boxInfo.LotNo != boxInfo2.LotNo) |
| | | { |
| | | throw new Exception($"两个箱码物料批次信息不一致,不允许合并!"); |
| | | } |
| | | if (boxInfo.ASNNo != boxInfo2.ASNNo || boxInfo.ASNDetailNo != boxInfo2.ASNDetailNo) |
| | | { |
| | | throw new Exception($"两个箱码所属入库单信息不一致,不允许合并!"); |
| | | } |
| | | if (boxInfo.Qty + boxInfo2.Qty > boxInfo.FullQty) |
| | | { |
| | | throw new Exception($"两个箱码合并后数量超过满箱数量,不允许合并!"); |
| | | } |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | |
| | | boxInfo.Qty += boxInfo2.Qty; |
| | | //更新箱码库存表 |
| | | Db.Updateable(boxInfo).ExecuteCommand(); |
| | | //删除被合并箱码信息 |
| | | Db.Deleteable(boxInfo2).ExecuteCommand(); |
| | | |
| | | //添加操作日志 |
| | | new OperationASNServer().AddLogOperationAsn("入库作业", "物料标签", boxNo, "编辑", $"将{boxNo2}箱码合并到了{boxNo}箱码中", userId); |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | //回滚事务 |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 数据归档 |