using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Text; using Model.ModelDto.BllAsnDto; using Model.ModelVm.BllAsnVm; using SqlSugar; using WMS.DAL; using WMS.Entity.BllAsnEntity; using WMS.Entity.Context; using WMS.Entity.SysEntity; using WMS.IBLL.IBllAsnServer; namespace WMS.BLL.BllAsnServer { public class BllLabelBoxNoServer : DbHelper, IBllLabelBoxNoServer { private static readonly SqlSugarScope Db = DataContext.Db; public BllLabelBoxNoServer() : base(Db) { } //获取标签箱码信息 public List GetLabelBoxList(LabelBoxVm model, out int count) { try { Expression> item = Expressionable.Create() .AndIF(!string.IsNullOrWhiteSpace(model.AsnNo), it => it.ASNNo.Contains(model.AsnNo.Trim())) .AndIF(!string.IsNullOrWhiteSpace(model.BoxNo), it => it.BoxNo.Contains(model.BoxNo.Trim())) //.AndIF(!string.IsNullOrWhiteSpace(model.StartTime), it => it.CreateTime >= Convert.ToDateTime(model.StartTime)) //.AndIF(!string.IsNullOrWhiteSpace(model.EndTime), it => it.CreateTime <= Convert.ToDateTime(model.EndTime).AddDays(1)) .And(it => it.IsDel == "0") .ToExpression(); var total = 0; var data = GetAllWhereAsync(item) .LeftJoin((a, b) => a.CreateUser == b.Id) .LeftJoin((a, b, c) => a.UpdateUser == c.Id) .Select((a, b, c) => new LabelBoxDto() { Id = a.Id, AsnNo = a.ASNNo, AsnDetailNo = a.ASNDetailNo, BoxNo = a.BoxNo, ParentBoxNo = a.ParentBoxNo, Qty = a.Qty, SkuNo = a.SkuNo, SkuName = a.SkuName, Standard = a.Standard, PackageStandard = a.PackageStandard, StoreTime = a.StoreTime, LotNo = a.LotNo, LotText = a.LotText, SupplierName = a.SupplierName, SupplierLot = a.SupplierLot, ProductionTime = a.ProductionTime, ExpirationTime = a.ExpirationTime, InspectTime = a.InspectTime, CompleteTime = a.CompleteTime, IsUse = a.IsUse, Level = a.Level, QtyCount = a.QtyCount, QtyOrd = a.QtyOrd, UDF1 = a.UDF1, UDF2 = a.UDF2, UDF3 = a.UDF3, UDF4 = a.UDF4, UDF5 = a.UDF5, CreateUserName = b.RealName, UpdateUserName = c.RealName, CreateTime = a.CreateTime, UpdateTime = a.UpdateTime }).OrderByDescending(a => a.CreateTime).OrderBy(a => a.BoxNo).ToOffsetPage(model.Page, model.Limit, ref total); count = total; return data; } catch (Exception e) { throw new Exception(e.Message); } } //获取标签模板根据入库单明细ID public LabelBoxDto GetLabelBoxModel(int id) { try { var asnDetail = Db.Queryable().First(m => m.Id == id && m.IsDel == "0"); if (asnDetail == null) { throw new Exception("未查询到单据明细信息,请核实"); } var packInfo = Db.Queryable().First(m => m.IsDel == "0" && m.PackagNo == asnDetail.PackagNo); if (packInfo == null) { throw new Exception("未查询到单据明细中的物料包装信息"); } var str = ""; if (!string.IsNullOrWhiteSpace(packInfo.L1Name)) { str += packInfo.L1Num + "/" + packInfo.L1Name; } if (!string.IsNullOrWhiteSpace(packInfo.L2Name)) { str += "-" + packInfo.L2Num + "/" + packInfo.L2Name; } if (!string.IsNullOrWhiteSpace(packInfo.L3Name)) { str += "-" + packInfo.L3Num + "/" + packInfo.L3Name; } if (!string.IsNullOrWhiteSpace(packInfo.L4Name)) { str += "-" + packInfo.L4Num + "/" + packInfo.L4Name; } if (!string.IsNullOrWhiteSpace(packInfo.L5Name)) { str += "-" + packInfo.L5Num + "/" + packInfo.L5Name; } var data = new LabelBoxDto(); data.SkuNo = asnDetail.SkuNo; data.SkuName = asnDetail.SkuName; data.Standard = asnDetail.Standard; data.SupplierLot = asnDetail.SupplierLot; data.PackageStandard = str; return data; } catch (Exception e) { throw new Exception(e.Message); } } ///// ///// 获取物料标签信息JC06 ///// ///// ///// 是否重新生成自有批次 0:否 1:是 ///// 创建人 ///// 箱内数量(一级标签必填) ///// 生产日期 ///// 生产厂家 ///// 生产厂家批号 ///// 有效期 ///// 保质期 ///// 外箱标签数量 ///// 到货数量 ///// //public List GetImport5Id(string imId, string isPrint, string createUser, decimal number, string productionDate, // string supplierName, string supplierLot, string inspectTime, string expirationTime, int? bQNum, string skuNum) //{ // try // { // using (LinqModelDataContext DataContext = new LinqModelDataContext(DataConnection.GetDataConnection)) // { // #region 必填验证 // if (string.IsNullOrWhiteSpace(productionDate)) // { // throw new Exception("生产日期需必填,不能为空"); // } // var twoSeletOne = true;//有效期、复验期二选一 // if (string.IsNullOrWhiteSpace(expirationTime)) // { // twoSeletOne = false; // } // if (string.IsNullOrWhiteSpace(inspectTime)) // { // twoSeletOne = false; // } // if (twoSeletOne) // { // throw new Exception("有效期、复验期最好填写一个"); // } // if (string.IsNullOrWhiteSpace(supplierName)) // { // throw new Exception("生产厂家需必填,不能为空"); // } // if (string.IsNullOrWhiteSpace(supplierLot)) // { // throw new Exception("厂家批号需必填,不能为空"); // } // if (bQNum <= 0) // { // throw new Exception("外箱标签数量不能为空或小于等于0"); // } // #endregion // #region MyRegion // var list = DataContext.View_ImportNotify.FirstOrDefault(a => a.ImportId == imId && a.IsDel == 0); // List printModel = new List(); // if (list == null) // { // throw new Exception("未查询到单据信息"); // } // var goodMap = DataContext.GoodMapAndMes.FirstOrDefault(m => m.WmsGoodCode == list.GoodsCode && m.IsDel == 0); // var mesGood = "AAAA"; // if (goodMap != null) // { // mesGood = goodMap.MesGoodCode; // } // //物料 // var good = DataContext.WmsBaseGoods.FirstOrDefault(m => m.GoodsDeleteFlag == 0 && m.GoodsCode == list.GoodsCode); // var pack = DataContext.WmsBasePackaging.FirstOrDefault(m => m.IsDel == 0 && m.Id == good.GoodsPackaging); // if (pack == null) // { // throw new Exception("未查询到当前单据中物料的包装信息"); // } // //标签表 // var labelData = DataContext.LabelPrint.Where(m => m.ImportId == imId).ToList(); // if (bQNum == null) // { // bQNum = 0; // } // var bNum = 0;//箱物品数量 // var zNum = 0;//支物品数量 // var packLevel = 0; // var isGo = false; // #endregion // #region 包装查询 // //if (!string.IsNullOrWhiteSpace(pack.FivelevelNum)) // //{ // // if (pack.FivelevelUnit != "托") // // { // // isGo = false; // // packLevel = 5; // // bNum = Convert.ToInt32(pack.FivelevelNum); // // } // //} // //if (!string.IsNullOrWhiteSpace(pack.FourlevelNum) && isGo) // //{ // // if (pack.FourlevelUnit != "托") // // { // // isGo = false; // // packLevel = 4; // // bNum = Convert.ToInt32(pack.FourlevelNum); // // } // //} // //if (!string.IsNullOrWhiteSpace(pack.ThreelevelNum) && isGo) // //{ // // if (pack.ThreelevelUnit != "托") // // { // // isGo = false; // // packLevel = 3; // // bNum = Convert.ToInt32(pack.ThreelevelNum); // // } // //} // if (!string.IsNullOrWhiteSpace(pack.TwolevelNum)) // { // packLevel = 2; // bNum = Convert.ToInt32(pack.TwolevelNum); // } // if (!string.IsNullOrWhiteSpace(pack.OnelevelNum)) // { // if (packLevel == 0) // { // packLevel = 1; // bNum = Convert.ToInt32(pack.OnelevelNum); // } // zNum = Convert.ToInt32(pack.OnelevelNum); // } // if (packLevel <= 1)//包装等级小于1,按照1级标签打印 // { // packLevel = 1; // } // #endregion // if (packLevel == 1) // { // #region 一级包装 // // 根据用户输入的箱数量计算需要的条码数 // var labQty = labelData.Sum(m => m.Qty); // var qty = Convert.ToDecimal(list.ImportQuantity) - (decimal)labQty;//当前单据剩余需要打印的数量 // if (qty <= 0) // { // throw new Exception("当前单据物料标签已打印完毕,如有需要请补打"); // } // #region 增加到货数量 // if (skuNum != "") // { // if (qty - Convert.ToDecimal(skuNum) < 0) // { // throw new Exception("到货数量大于未打标签数量,请重新输入到货数量!"); // } // else // { // qty = Convert.ToDecimal(skuNum); // } // } // #endregion // int labelNum = 1; //生产条码数量 // if (number > 0) // { // labelNum = int.Parse(Math.Ceiling(qty / number).ToString());//标签数量 // } // else // { // throw new Exception("当前单据物料是一级包装,请输入箱内数量且大于0"); // } // if (bQNum >= 1)//打印标签数量是否大于1 (有打印标签数量) // { // if (bQNum > 100) // { // throw new Exception("打印标签数量建议在100张以内"); // } // if (bQNum < labelNum) //打印的标签数量大于等于剩余能打印的张数量 // { // labelNum = (int)bQNum; // } // } // if (labelNum > 100) // { // labelNum = 100; // } // string maxCodestr = ""; // string maxboxcode = ""; // // 生成自编批号 // string toDayTime = DateTime.Now.ToString("yyyyMMdd"); // var diJiJian = 0; // if (isPrint == "0") // { // var maxCode = DataContext.LabelPrint.Where(b => b.ImportId == imId).ToList().Max(a => a.ImportLotNo); // var boxCode1 = DataContext.LabelPrint.Where(b => b.ImportId == imId).ToList().Max(a => a.LabelStream); // maxCodestr = maxCode; // maxboxcode = boxCode1; // if (string.IsNullOrWhiteSpace(maxCodestr)) // { // maxCodestr = toDayTime.Substring(2, 6) + "0001"; // } // else // { // var q = DataContext.LabelPrint // .Where(m => m.ImportId == imId && m.ImportLotNo == maxCodestr) // .GroupBy(m => m.LabelStream).ToList(); // diJiJian = q.Count; // } // } // else // { // var maxCode = DataContext.LabelPrint.Max(a => a.ImportLotNo); // 获取今天最大批次号 // if (string.IsNullOrWhiteSpace(maxCode)) // { // maxCodestr = toDayTime.Substring(2, 6) + "0001"; // } // else // { // var lotStr = maxCode.Substring(0, 6); // var timeStr = toDayTime.Substring(2, 6); // if (lotStr == timeStr) // { // maxCodestr = toDayTime.Substring(2, 6) + (int.Parse(maxCode.Substring(6, 4)) + 1).ToString().PadLeft(4, '0'); // } // else // { // maxCodestr = timeStr + "0001"; // } // } // } // var sapNo = ""; // if (!string.IsNullOrWhiteSpace(list.OuterBillCode) && !string.IsNullOrWhiteSpace(list.SequenceNo)) // { // sapNo = list.OuterBillCode + "-" + list.SequenceNo; // } // for (int i = 1; i <= labelNum; i++) // { // // 物料条码信息赋值 // LabelPrint5Model model = new LabelPrint5Model(); // model.ImportId = imId; // model.OuterBillCode = list.OuterBillCode; // model.ImportBillCode = list.ImportBillCode; // model.SkuNo = list.GoodsCode; // model.SkuName = list.GoodsName; // model.QtyCount = (int)bQNum; // 总件数 // model.SupplierName = supplierName; // 生产厂家 // model.ProductionDate = productionDate; // 生产日期 // model.SapSkuNo = sapNo; // SAP代码 SAP单号+行号 // model.Standard = good.GoodsStandard; // 规格 // model.SupplierLot = supplierLot; // 厂家批号 // model.LotNo = maxCodestr; //批次 // model.InspectTime = inspectTime; // 复验期至 // model.ExpirationTime = expirationTime; // 有效期至/贮存期 // model.ExpirationType = good.GoodsTemp; // 贮存条件 // if (i == labelNum) // { // // 最后一个条码 // var s = number * (i - 1); // if (number > qty - s) // { // model.Qty = qty - s;// 数量 // } // else // { // model.Qty = number;// 数量 // } // } // else // { // model.Qty = number; // 数量 // } // model.QtyOrd = i + diJiJian; // 第几件 // if (maxboxcode == "") // { // var str = mesGood.PadRight(16, ' ') + model.LotNo.PadRight(12, ' ') + "0001"; // model.BoxCode = str; // 支号 批号+第几箱 // maxboxcode = model.BoxCode; // } // else // { // model.BoxCode = maxboxcode.Substring(0, 28) + (int.Parse(maxboxcode.Substring(28, 4)) + 1).ToString().PadLeft(4, '0'); // maxboxcode = model.BoxCode; // } // model.imageStr = Utility.Extra.BarcodeHelper.GetQrCodeBase64(model.BoxCode, 85, 85); // // 添加到list集合 // printModel.Add(model); // //if (number <= 0) // //{ // // return printModel; // //} // var guid = Guid.NewGuid().ToString("N"); // // 将条码保存到原料条码表 // var LabelModel = new LabelPrint // { // LabelID = guid, // LabelStream = model.BoxCode, // GoodsCode = model.SkuNo, // GoodsName = model.SkuName, // GoodsStandard = model.Standard, // ImportLotNo = model.LotNo, // SupplierName = model.SupplierName, // ImportId = model.ImportId, // OuterBillCode = model.OuterBillCode, // ImportBillCode = model.ImportBillCode, // ProductionDate = model.ProductionDate, // SapSkuNo = model.SapSkuNo, // Qty = model.Qty, // SupplierLot = model.SupplierLot, // InspectTime = model.InspectTime, // ExpirationTime = model.ExpirationTime, // QtyCount = model.QtyCount, // QtyOrd = model.QtyOrd, // ExpirationType = model.ExpirationType, // BoxNum = number,// model.Qty, // BulkTank = model.Qty == number ? 0 : 1,//零头箱 // BulkCase = 0,//零头盒 // CreateUser = createUser, // CreateTime = DateTime.Now, // IsUse = 0 // }; // DataContext.LabelPrint.InsertOnSubmit(LabelModel); // } // DataContext.SubmitChanges(); // #endregion // } // else //(packLevel == 2) // { // #region 二级包装 // // 根据用户输入的箱数量计算需要的条码数 // var labQty = labelData.Sum(m => m.Qty); // var qty2 = Convert.ToDecimal(list.ImportQuantity) - (decimal)labQty; // if (qty2 <= 0) // { // throw new Exception("当前单据物料标签已打印完毕,如有需要请补打"); // } // #region 增加到货数量 // if (skuNum != "") // { // if (qty2 - Convert.ToDecimal(skuNum) < 0) // { // throw new Exception("到货数量大于未打标签数量,请重新输入到货数量!"); // } // else // { // qty2 = Convert.ToDecimal(skuNum); // } // } // #endregion // int labelNum2 = 1; //生产箱条码数量 // labelNum2 = int.Parse(Math.Ceiling(qty2 / bNum).ToString()); // if (bQNum >= 1)//打印标签数量是否大于1 (有打印标签数量) // { // if (bQNum > 100) // { // throw new Exception("打印标签数量建议在100张以内"); // } // if (bQNum < labelNum2) //打印的标签数量大于等于剩余能打印的张数量 // { // labelNum2 = (int)bQNum; // } // } // //var bCount = Math.Floor(qty2 / bNum); //整箱的数量 // //var zCount = qty2 - bCount* bNum; //剩余数量 // var ss = bNum / zNum; //每箱支标签数量 // var labelNumZ2 = Math.Ceiling((decimal)ss); // if (labelNum2 * labelNumZ2 > 100) // { // if (labelNumZ2 <= 100) // { // labelNum2 = (int)Math.Floor((decimal)(100 / labelNumZ2)); // } // else // { // labelNum2 = 1; // } // } // string maxCodestr2 = ""; //批次 // string maxboxcode2 = ""; //箱码 // string maxboxcode3 = ""; //支码 // // 生成自编批号 // string toDayTime2 = DateTime.Now.ToString("yyyyMMdd"); // var diJiJian = 0; // if (isPrint == "0") // { // var maxCode = DataContext.LabelPrint.Where(b => b.ImportId == imId).ToList().Max(a => a.ImportLotNo); // var boxCode1 = DataContext.LabelPrint.Where(b => b.ImportId == imId).ToList().Max(a => a.LabelStream); // var boxCode2 = DataContext.LabelPrint.Where(b => b.ImportId == imId).ToList().Max(a => a.BoxCode1);//支号 // maxCodestr2 = maxCode; // maxboxcode2 = boxCode1; // maxboxcode3 = boxCode2; // if (string.IsNullOrWhiteSpace(maxCodestr2)) // { // maxCodestr2 = toDayTime2.Substring(2, 6) + "0001"; // } // else // { // var q = DataContext.LabelPrint // .Where(m => m.ImportId == imId && m.ImportLotNo == maxCodestr2) // .GroupBy(m => m.LabelStream).ToList(); // diJiJian = q.Count; // } // } // else // { // var maxCode = DataContext.LabelPrint.Max(a => a.ImportLotNo); // 获取今天最大批次号 // 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"; // } // } // } // var sapNo = ""; // if (!string.IsNullOrWhiteSpace(list.OuterBillCode) && !string.IsNullOrWhiteSpace(list.SequenceNo)) // { // sapNo = list.OuterBillCode + "-" + list.SequenceNo; // } // for (int i = 1; i <= labelNum2; i++)//箱码标签 // { // // 物料条码信息赋值 // LabelPrint5Model model = new LabelPrint5Model(); // model.ImportId = imId; // model.OuterBillCode = list.OuterBillCode; // model.ImportBillCode = list.ImportBillCode; // model.SkuNo = list.GoodsCode; // model.SkuName = list.GoodsName; // model.QtyCount = (int)bQNum; // 总件数 // model.SupplierName = supplierName; // 生产厂家 // model.ProductionDate = productionDate; // 生产日期 // model.SapSkuNo = sapNo; // SAP代码 // model.Standard = good.GoodsStandard; // 规格 // model.SupplierLot = supplierLot; // 厂家批号 // model.LotNo = maxCodestr2; //批次 // model.InspectTime = inspectTime; // 复验期至 // model.ExpirationTime = expirationTime; // 有效期至/贮存期 // model.ExpirationType = good.GoodsTemp; // 贮存条件 // if (i == labelNum2) // { // // 最后一个条码 // var s = bNum * (i - 1); // if (bNum > qty2 - s) // { // model.Qty = qty2 - s;// 数量 // } // else // { // model.Qty = bNum;// 数量 // } // } // else // { // model.Qty = bNum; // 数量 // } // model.QtyOrd = i + diJiJian; // 第几件 // if (maxboxcode2 == "") // { // maxboxcode2 = "B" + model.LotNo + i.ToString().PadLeft(5, '0'); // model.BoxCode = maxboxcode2; // 箱号 批号+第几箱 // } // else // { // maxboxcode2 = maxboxcode2.Substring(0, 11) + (int.Parse(maxboxcode2.Substring(11, 5)) + 1).ToString().PadLeft(5, '0'); // model.BoxCode = maxboxcode2; // } // model.imageStr = Utility.Extra.BarcodeHelper.GetQrCodeBase64(model.BoxCode, 85, 85); // // 添加到list集合 // printModel.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); // } // } // DataContext.SubmitChanges(); // #endregion // } // return printModel; // } // } // catch (Exception ex) // { // throw new Exception(ex.Message); // } //} } }