| | |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Linq.Expressions; |
| | | using Model.ModelDto.BllAsnDto; |
| | | using Utility.Tools; |
| | | using WMS.BLL.LogServer; |
| | | using WMS.DAL; |
| | | using WMS.Entity.BllAsnEntity; |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | //获取标签信息(生成标签) |
| | | public List<LabelBoxDto> AddLabelBoxReturn(int imId, string isReset, decimal arriveQty, string skuName, string standard, string packStandard, string skuNo, |
| | | string supplierLot, string productionTime, string expirationTime, string storeTime, int userId) |
| | | { |
| | | try |
| | | { |
| | | |
| | | #region 单据、物料、包装、标签信息获取 |
| | | |
| | | var asnList = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.Id == imId && m.IsDel == "0"); |
| | | if (asnList == null) |
| | | { |
| | | throw new Exception("未查询到单据明细信息"); |
| | | } |
| | | var asn = Db.Queryable<BllArrivalNotice>().First(m => m.ASNNo == asnList.ASNNo && m.IsDel == "0"); |
| | | if (asn == null) |
| | | { |
| | | throw new Exception("未查询到单据信息"); |
| | | } |
| | | //物料 |
| | | var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == asnList.SkuNo); |
| | | var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == asnList.PackagNo); |
| | | if (pack == null) |
| | | { |
| | | throw new Exception("未查询到当前单据中物料的包装信息"); |
| | | } |
| | | //标签表 |
| | | var label = Db.Queryable<BllLabelBoxNo>().Where(m => m.IsDel == "0" && m.ASNDetailNo == imId).ToList(); |
| | | |
| | | |
| | | #endregion |
| | | |
| | | #region 包装查询 |
| | | |
| | | var bNum = 0;//箱物品数量 |
| | | var zNum = 0;//支物品数量 |
| | | var packLevel = 0; |
| | | var isGo = true; |
| | | |
| | | if (pack.L5Num.HasValue) |
| | | { |
| | | if (pack.L5Name != "托") |
| | | { |
| | | isGo = false; |
| | | packLevel = 5; |
| | | bNum = Convert.ToInt32(pack.L5Num); |
| | | } |
| | | } |
| | | if (pack.L4Num.HasValue && isGo) |
| | | { |
| | | if (pack.L4Name != "托") |
| | | { |
| | | isGo = false; |
| | | packLevel = 4; |
| | | bNum = Convert.ToInt32(pack.L4Num); |
| | | } |
| | | } |
| | | if (pack.L3Num.HasValue && isGo) |
| | | { |
| | | if (pack.L4Name != "托") |
| | | { |
| | | isGo = false; |
| | | packLevel = 3; |
| | | bNum = Convert.ToInt32(pack.L3Num); |
| | | } |
| | | } |
| | | if (pack.L2Num.HasValue) |
| | | { |
| | | packLevel = 2; |
| | | bNum = Convert.ToInt32(pack.L2Num); |
| | | |
| | | } |
| | | if (pack.L1Num.HasValue) |
| | | { |
| | | if (packLevel == 0) |
| | | { |
| | | packLevel = 1; |
| | | bNum = Convert.ToInt32(pack.L1Num); |
| | | } |
| | | zNum = Convert.ToInt32(pack.L1Num); |
| | | } |
| | | |
| | | if (packLevel <= 1)//包装等级小于1,按照1级标签打印 |
| | | { |
| | | packLevel = 1; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | if (packLevel == 1) |
| | | { |
| | | #region 一级包装 |
| | | |
| | | // 根据用户输入的箱数量计算需要的条码数 |
| | | var labQty = label.Sum(m => m.Qty); |
| | | var qty = asnList.Qty - labQty;//当前单据剩余需要打印的物料数量(不是标签数量) |
| | | if (qty <= 0) |
| | | { |
| | | throw new Exception("当前单据物料标签已打印完毕,如有需要请补打"); |
| | | } |
| | | |
| | | #region 到货数量 |
| | | |
| | | if (arriveQty - qty > 0) |
| | | { |
| | | throw new Exception("到货数量大于未打标签数量,请重新输入到货数量并核实!"); |
| | | } |
| | | else |
| | | { |
| | | qty = arriveQty; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | int labelNum = 1; //生产条码数量 |
| | | if (zNum > 0) |
| | | { |
| | | labelNum = int.Parse(Math.Ceiling(qty / zNum).ToString());//标签数量 |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("当前单据物料是一级包装,未查询到一级包装信息"); |
| | | } |
| | | |
| | | #region 获取/生成批次号 |
| | | |
| | | string maxLotNoStr = ""; //批次号 |
| | | string maxBoxCode = ""; //箱码号 |
| | | // 生成自编批号 |
| | | string toDayTime = DateTime.Now.ToString("yyyyMMdd"); |
| | | var diJiJian = 0; |
| | | |
| | | var maxLotNo = label.Max(a => a.LotNo); |
| | | var maxBoxNo = label.Max(a => a.BoxNo); |
| | | if (isReset == "0") |
| | | { |
| | | |
| | | maxLotNoStr = maxLotNo; |
| | | maxBoxCode = maxBoxNo; |
| | | if (string.IsNullOrWhiteSpace(maxLotNoStr)) |
| | | { |
| | | maxLotNoStr = toDayTime.Substring(2, 6) + "0001"; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var maxCode = Db.Queryable<BllLabelBoxNo>().Max(a => a.LotNo); // 获取今天最大批次号 |
| | | if (string.IsNullOrWhiteSpace(maxCode)) |
| | | { |
| | | maxLotNoStr = toDayTime.Substring(2, 6) + "0001"; |
| | | } |
| | | else |
| | | { |
| | | var lotStr = maxCode.Substring(0, 6); |
| | | var timeStr = toDayTime.Substring(2, 6); |
| | | if (lotStr == timeStr) |
| | | { |
| | | maxLotNoStr = toDayTime.Substring(2, 6) + (int.Parse(maxCode.Substring(6, 4)) + 1).ToString().PadLeft(4, '0'); |
| | | } |
| | | else |
| | | { |
| | | maxLotNoStr = timeStr + "0001"; |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | var modelList = new List<LabelBoxDto>(); |
| | | |
| | | for (int i = 1; i <= labelNum; i++) |
| | | { |
| | | // 物料条码信息赋值 |
| | | LabelBoxDto model = new LabelBoxDto(); |
| | | model.AsnDetailNo = imId; |
| | | model.SkuNo = asnList.SkuNo; |
| | | model.SkuName = asnList.SkuName; |
| | | |
| | | model.SupplierName = asn.CustomerName; // 供应商 |
| | | |
| | | model.Standard = asnList.Standard; // 规格 |
| | | model.PackageStandard = packStandard; |
| | | model.SupplierLot = supplierLot; // 厂家批号 |
| | | model.LotNo = maxLotNoStr; //批次 |
| | | |
| | | model.ProductionTime = DateTime.Parse(productionTime); // 生产日期 |
| | | model.StoreTime = DateTime.Parse(storeTime); // 储存期至 |
| | | model.ExpirationTime = DateTime.Parse(expirationTime); // 有效期至/贮存期 |
| | | if (i == labelNum) |
| | | { |
| | | // 最后一个条码 |
| | | var s = zNum * (i - 1); |
| | | if (zNum > qty - s) |
| | | { |
| | | model.Qty = qty - s;// 数量 |
| | | } |
| | | else |
| | | { |
| | | model.Qty = zNum;// 数量 |
| | | } |
| | | } |
| | | else |
| | | { |
| | | model.Qty = zNum; // 数量 |
| | | } |
| | | |
| | | |
| | | if (maxBoxCode == "") |
| | | { |
| | | var str = model.LotNo + "000001"; |
| | | model.BoxNo = str; // 支号 批号+ 流水 2302010001000001 |
| | | maxBoxCode = model.BoxNo; |
| | | } |
| | | else |
| | | { |
| | | model.BoxNo = maxBoxCode.Substring(0, 10) + (int.Parse(maxBoxCode.Substring(10, 6)) + 1).ToString().PadLeft(6, '0'); |
| | | maxBoxCode = model.BoxNo; |
| | | } |
| | | model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 80, 50); |
| | | |
| | | // 添加到list集合 |
| | | modelList.Add(model); |
| | | |
| | | // 将条码保存到原料条码表 |
| | | var labelModel = new BllLabelBoxNo() |
| | | { |
| | | ASNNo = asnList.ASNNo, |
| | | ASNDetailNo = asnList.Id, |
| | | BoxNo = model.BoxNo, |
| | | ParentBoxNo = "", |
| | | Qty = model.Qty, |
| | | SkuNo = model.SkuNo, |
| | | SkuName = model.SkuName, |
| | | Standard = model.Standard, |
| | | PackageStandard = model.PackageStandard, |
| | | |
| | | LotNo = model.LotNo, |
| | | SupplierName = asn.CustomerName, |
| | | ProductionTime = model.ProductionTime, |
| | | SupplierLot = model.SupplierLot, |
| | | StoreTime = model.StoreTime, |
| | | ExpirationTime = model.ExpirationTime, |
| | | IsUse = "0", |
| | | Level = "1", |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = DateTime.Now, |
| | | }; |
| | | |
| | | Db.Insertable(labelModel).ExecuteCommand(); |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | } |
| | | else //(packLevel == 2) |
| | | { |
| | | #region 二级包装 |
| | | |
| | | // 根据用户输入的箱数量计算需要的条码数 |
| | | var labQty = label.Sum(m => m.Qty); |
| | | var qty2 = asnList.Qty - labQty; |
| | | if (qty2 <= 0) |
| | | { |
| | | throw new Exception("当前单据物料标签已打印完毕,如有需要请补打"); |
| | | } |
| | | |
| | | #region 增加到货数量 |
| | | |
| | | if (arriveQty - qty2 > 0) |
| | | { |
| | | throw new Exception("到货数量大于未打标签数量,请重新输入到货数量!"); |
| | | } |
| | | else |
| | | { |
| | | qty2 = arriveQty; |
| | | } |
| | | #endregion |
| | | |
| | | int labelNum2 = 1; //生产箱条码数量 |
| | | |
| | | labelNum2 = int.Parse(Math.Ceiling(qty2 / bNum).ToString()); |
| | | |
| | | |
| | | |
| | | var ss = bNum / zNum; //每箱支标签数量 |
| | | var labelNumZ2 = Math.Ceiling((decimal)ss); |
| | | |
| | | #region 获取/生成批次号 |
| | | |
| | | string maxCodestr2 = ""; //批次 |
| | | string maxboxcode2 = ""; //箱码 |
| | | string maxboxcode3 = ""; //支码 |
| | | // 生成自编批号 |
| | | string toDayTime2 = DateTime.Now.ToString("yyyyMMdd"); |
| | | if (isReset == "0") |
| | | { |
| | | var maxCode = label.Max(a => a.LotNo); |
| | | var boxCode1 = label.Where(m => m.Level == "1").Max(a => a.BoxNo);//箱号 |
| | | var boxCode2 = label.Where(m => m.Level == "2").Max(a => a.BoxNo);//支号 |
| | | maxCodestr2 = maxCode; |
| | | maxboxcode2 = boxCode1; |
| | | maxboxcode3 = boxCode2; |
| | | if (string.IsNullOrWhiteSpace(maxCodestr2)) |
| | | { |
| | | maxCodestr2 = toDayTime2.Substring(2, 6) + "0001"; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var maxCode = Db.Queryable<BllLabelBoxNo>().Max(a => a.LotNo); // 获取今天最大批次号 |
| | | if (string.IsNullOrWhiteSpace(maxCode)) |
| | | { |
| | | maxCodestr2 = toDayTime2.Substring(2, 6) + "0001"; |
| | | } |
| | | else |
| | | { |
| | | var lotStr = maxCode.Substring(0, 6); |
| | | var timeStr = toDayTime2.Substring(2, 6); |
| | | if (lotStr == timeStr) |
| | | { |
| | | maxCodestr2 = timeStr + (int.Parse(maxCode.Substring(6, 4)) + 1).ToString().PadLeft(4, '0'); |
| | | } |
| | | else |
| | | { |
| | | maxCodestr2 = timeStr + "0001"; |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | var modelList = new List<LabelBoxDto>(); |
| | | |
| | | for (int i = 1; i <= labelNum2; i++)//箱码标签 |
| | | { |
| | | // 物料条码信息赋值 |
| | | LabelBoxDto model = new LabelBoxDto(); |
| | | model.AsnDetailNo = imId; |
| | | model.SkuNo = asnList.SkuNo; |
| | | model.SkuName = asnList.SkuName; |
| | | |
| | | model.Standard = asnList.Standard; // 规格 |
| | | model.PackageStandard = packStandard; |
| | | |
| | | model.SupplierLot = supplierLot; // 厂家批号 |
| | | model.LotNo = maxCodestr2; //批次 |
| | | |
| | | model.ProductionTime = DateTime.Parse(productionTime); // 生产日期 |
| | | model.StoreTime = DateTime.Parse(storeTime); // 储存期至 |
| | | model.ExpirationTime = DateTime.Parse(expirationTime); // 有效期至/贮存期 |
| | | if (i == labelNum2) |
| | | { |
| | | // 最后一个条码 |
| | | var s = bNum * (i - 1); |
| | | if (bNum > qty2 - s) |
| | | { |
| | | model.Qty = qty2 - s;// 数量 |
| | | } |
| | | else |
| | | { |
| | | model.Qty = bNum;// 数量 |
| | | } |
| | | } |
| | | else |
| | | { |
| | | model.Qty = bNum; // 数量 |
| | | } |
| | | |
| | | if (maxboxcode2 == "") |
| | | { |
| | | maxboxcode2 = model.LotNo + "000001"; |
| | | model.BoxNo = maxboxcode2; // 箱号 批号+第几箱 |
| | | maxboxcode2 = model.BoxNo; |
| | | } |
| | | else |
| | | { |
| | | model.BoxNo = maxboxcode2.Substring(0, 10) + (int.Parse(maxboxcode2.Substring(10, 6)) + 1).ToString().PadLeft(6, '0'); |
| | | maxboxcode2 = model.BoxNo; |
| | | } |
| | | model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 80, 50); |
| | | |
| | | // 添加到list集合 |
| | | modelList.Add(model); |
| | | |
| | | if (i == labelNum2) |
| | | { |
| | | var isGo2 = false; |
| | | var sl = 0; |
| | | for (int j = 1; j <= labelNumZ2; j++) |
| | | { |
| | | if (isGo2) |
| | | { |
| | | break; |
| | | } |
| | | var d = zNum; |
| | | if (i == labelNum2) |
| | | { |
| | | var s = bNum * (i - 1); |
| | | var s2 = zNum * (j - 1); |
| | | if (zNum >= qty2 - s - s2) |
| | | { |
| | | d = (int)(qty2 - s - s2); // 数量 |
| | | isGo2 = true; |
| | | } |
| | | } |
| | | sl++; |
| | | } |
| | | labelNumZ2 = sl; |
| | | } |
| | | |
| | | for (int j = 1; j <= labelNumZ2; j++)//最小单位标签 |
| | | { |
| | | if (isGo) |
| | | { |
| | | break; |
| | | } |
| | | var d = zNum; |
| | | if (i == labelNum2) |
| | | { |
| | | var s = bNum * (i - 1); |
| | | var s2 = zNum * (j - 1); |
| | | if (zNum >= qty2 - s - s2) |
| | | { |
| | | d = (int)(qty2 - s - s2); // 数量 |
| | | isGo = true; |
| | | } |
| | | } |
| | | //// 物料条码信息赋值 |
| | | //LabelPrint5Model model2 = new LabelPrint5Model(); |
| | | //model2.ImportId = imId; |
| | | //model2.OuterBillCode = list.OuterBillCode; |
| | | //model2.ImportBillCode = list.ImportBillCode; |
| | | //model2.SkuNo = list.GoodsCode; |
| | | //model2.SkuName = list.GoodsName; |
| | | //model2.QtyCount = (int)labelNumZ2; // 总件数(int)labelNumZ2 |
| | | |
| | | //model2.SupplierName = supplierName; // 生产厂家 |
| | | //model2.ProductionDate = productionDate; // 生产日期 |
| | | //model2.SapSkuNo = sapNo; // SAP代码 |
| | | //model2.Standard = good.GoodsStandard; // 规格 |
| | | //model2.SupplierLot = supplierLot; // 厂家批号 |
| | | |
| | | //model2.LotNo = maxCodestr2; //批次 |
| | | |
| | | |
| | | //model2.InspectTime = inspectTime; // 复验期至 |
| | | //model2.ExpirationTime = expirationTime; // 有效期至/贮存期 |
| | | //model2.ExpirationType = good.GoodsTemp; // 贮存条件 |
| | | //model2.Qty = d; // 数量 |
| | | |
| | | //model2.QtyOrd = j; // 第几件 |
| | | //if (maxboxcode3 == "") |
| | | //{ |
| | | // var str = mesGood.PadRight(16, ' ') + model.LotNo.PadRight(12, ' ') + "0001"; |
| | | // model2.BoxCode = str; // 支号 批号+第几箱 |
| | | // maxboxcode3 = model2.BoxCode; |
| | | //} |
| | | //else |
| | | //{ |
| | | // model2.BoxCode = maxboxcode3.Substring(0, 28) + (int.Parse(maxboxcode3.Substring(28, 4)) + 1).ToString().PadLeft(4, '0'); |
| | | // maxboxcode3 = model2.BoxCode; |
| | | //} |
| | | |
| | | //model2.imageStr = Utility.Extra.BarcodeHelper.GetQrCodeBase64(model2.BoxCode, 85, 85); |
| | | //// 添加到list集合 |
| | | |
| | | //if (printModel.Count(m => m.BoxCode.Length > 17) <= 100)//排除待箱码判断支码是否小于100 |
| | | //{ |
| | | // printModel.Add(model2); |
| | | //} |
| | | //var guid = Guid.NewGuid().ToString("N"); |
| | | //// 将条码保存到原料条码表 |
| | | //var LabelModel2 = new LabelPrint |
| | | //{ |
| | | // LabelID = guid, |
| | | // LabelStream = model.BoxCode, |
| | | // BoxCode1 = model2.BoxCode, |
| | | // GoodsCode = model2.SkuNo, |
| | | // GoodsName = model2.SkuName, |
| | | // GoodsStandard = model2.Standard, |
| | | // ImportLotNo = model2.LotNo, |
| | | // SupplierName = model2.SupplierName, |
| | | // ImportId = model2.ImportId, |
| | | // OuterBillCode = model2.OuterBillCode, |
| | | // ImportBillCode = model2.ImportBillCode, |
| | | // ProductionDate = model2.ProductionDate, |
| | | // SapSkuNo = model2.SapSkuNo, |
| | | // Qty = model2.Qty, |
| | | // SupplierLot = model2.SupplierLot, |
| | | // InspectTime = model2.InspectTime, |
| | | // ExpirationTime = model2.ExpirationTime, |
| | | // QtyCount = model2.QtyCount, |
| | | // QtyOrd = model2.QtyOrd, |
| | | // ExpirationType = model2.ExpirationType, |
| | | // BoxNum = bNum,//model.Qty, |
| | | |
| | | // BulkTank = model.Qty == bNum ? 0 : 1,//零头箱 |
| | | // BulkCase = 0,//零头盒 |
| | | |
| | | // CreateUser = createUser, |
| | | // CreateTime = DateTime.Now, |
| | | // IsUse = 0 |
| | | //}; |
| | | |
| | | //DataContext.LabelPrint.InsertOnSubmit(LabelModel2); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | } |
| | | |
| | | //return printModel; |
| | | |
| | | |
| | | throw new NotImplementedException(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | } |