| | |
| | | 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 |
| | | { |
| | |
| | | |
| | | #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级标签打印 |
| | |
| | | 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 数据归档 |