using Model.InterFaceModel; using Model.ModelDto; using Model.ModelVm; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using Model.ModelDto.BllAsnDto; using Model.ModelVm.BllAsnVm; using Utility.Tools; using WMS.BLL.LogServer; using WMS.DAL; using WMS.Entity.BllAsnEntity; using WMS.Entity.Context; using WMS.Entity.SysEntity; using WMS.IBLL.IBllAsnServer; using ZXing; using Model.ModelDto.BllCheckDto; using WMS.Entity.BllCheckEntity; using System.Data.SqlTypes; namespace WMS.BLL.BllAsnServer { public class BllBoxInfoServer : DbHelper, IBllBoxInfoServer { private static readonly SqlSugarScope Db = DataContext.Db; public BllBoxInfoServer() : base(Db) { } //添加箱码信息 public string AddBoxInfo(BoxInfoVm model) { string strMessage = ""; string sqlString = string.Empty; try { if (string.IsNullOrEmpty(model.BoxNo)) { strMessage = "-1:箱码不可为空!"; return strMessage; } //if (string.IsNullOrEmpty(model.BoxNo2)) //{ // strMessage = "-1:盒码不可为空!"; // return strMessage; //} if (string.IsNullOrEmpty(model.BoxNo3)) { strMessage = "-1:支码不可为空!"; return strMessage; } if (string.IsNullOrEmpty(model.SkuNo)) { strMessage = "-1:物料编码不可为空!"; return strMessage; } if (string.IsNullOrEmpty(model.LotNo)) { strMessage = "-1:批次号不可为空!"; return strMessage; } if (model.Qty == null || model.Qty <= 0) { strMessage = "-1:实际数量必须大于0!"; return strMessage; } if (string.IsNullOrEmpty(model.ProductionTime)) { strMessage = "-1:生产日期不可为空!"; return strMessage; } // 验证是否重复 支/袋码 sqlString += $@"select count(id) from BllBoxInfo where BoxNo3 = '{model.BoxNo3}' and IsDel = 0 "; int rowCount = Db.Ado.GetInt(sqlString); if (rowCount > 0) { strMessage = "-1:重复数据!"; return strMessage; } // 获取物料信息 sqlString = "select tb1.SkuNo,tb1.SkuName,tb1.Warranty, "; sqlString += "case tb2.level when 5 then tb2.L4Num when 4 then tb2.L3Num when 3 then tb2.L2Num else 0 end as FullQty "; sqlString += "from SysMaterials as tb1 left join SysPackag as tb2 on tb1.PackagNo = tb2.PackagNo "; sqlString += $"where SkuNo = '{model.SkuNo}' and tb1.IsDel = '0';"; var materialModel = Db.Ado.SqlQuery(sqlString); if (materialModel.Count <= 0) { strMessage = "-1:该物料信息不存在!"; return strMessage; } DateTime Ptime = DateTime.Parse(model.ProductionTime); double dayNum = (int)materialModel[0].Warranty; model.ExpirationTime = Ptime.AddDays(dayNum); if (string.IsNullOrEmpty(model.InspectMark)) { model.InspectMark = "0"; } if (string.IsNullOrEmpty(model.BitBoxMark)) { model.BitBoxMark = "0"; } var sku = Db.Queryable().First(m => m.SkuNo == model.SkuNo); if (sku == null) { throw new Exception("未查询到物料信息"); } #region 包装信息 string str = $"select SUM(Qty) Qty from BllBoxInfo where IsDel = '0' and BoxNo = '{model.BoxNo}'"; //获取箱码信息 var box = Db.Ado.SqlQuerySingle(str); if (box.Qty == null) { box.Qty = 0; } box.Qty = box.Qty + model.Qty; var package = Db.Queryable().Where(m => m.IsDel == "0"); var pack = package.First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo); var pNum = 0;//物品包装数量 if (pack.L5Num.HasValue) { pNum = (int)pack.L5Num; } if (pack.L4Num.HasValue) { pNum = (int)pack.L4Num; } if (pack.L3Num.HasValue) { pNum = (int)pack.L3Num; } if (pack.L2Num.HasValue) { pNum = (int)pack.L2Num; if (pack.L2Name == "箱") { if (box.Qty > (int)pack.L2Num) { throw new Exception($"绑定失败,箱支{model.BoxNo}实际数量大于物品包装数量!"); } } } if (pack.L1Num.HasValue) { pNum = (int)pack.L1Num; if (pack.L1Name == "支" || pack.L1Name == "盒" || pack.L1Name == "袋" || pack.L1Name == "根" || pack.L1Name == "块") { if (model.Qty > (int)pack.L1Num) { throw new Exception($"绑定失败,箱支{model.BoxNo3}实际数量大于物品包装数量!"); } } } if (pNum == 0) { throw new Exception($"绑定失败,{sku.SkuNo}物品包装未找到!"); } #endregion // 插入信息 sqlString = "Insert into BllBoxInfo (BoxNo,BoxNo2,BoxNo3,SkuNo,SkuName,LotNo,LotText,"; sqlString += "Qty,FullQty,ProductionTime,ExpirationTime,InspectMark,InspectStatus,BitBoxMark,Origin,Status,CreateUser) values ( "; sqlString += $"'{model.BoxNo}','{model.BoxNo2}','{model.BoxNo3}','{model.SkuNo}', "; sqlString += $"'{materialModel[0].SkuName}','{model.LotNo}','{model.LotText}','{model.Qty}','{materialModel[0].FullQty}',"; sqlString += $"'{model.ProductionTime}','{model.ExpirationTime}','{model.InspectMark}','{sku.IsInspect}','{model.BitBoxMark}','{model.Origin}','0','{model.CreateUser}');"; rowCount = Db.Ado.ExecuteCommand(sqlString); if (rowCount <= 0) { strMessage = "-1:添加失败!"; } else { if (model.Origin == "录入") { new OperationASNServer().AddLogOperationAsn("入库作业", "箱支录入", model.BoxNo3, "添加", $"添加了箱码:{model.BoxNo}、追溯码:{model.BoxNo3}的箱支物料信息", Convert.ToInt32(model.CreateUser)); } } return strMessage; } catch (Exception ex) { throw new Exception(ex.Message); } } //删除箱码信息 public string DelBoxInfo(BoxInfoVm model) { string sqlString = string.Empty; try { var boxInfo = Db.Queryable().First(m => m.IsDel == "0" && m.Id == model.Id); if (boxInfo == null) { throw new Exception("未查询到信息"); } //开启事务 Db.Ado.BeginTran(); // 删除明细单 sqlString += $"UPDATE BllBoxInfo SET IsDel = '1',"; sqlString += $"UpdateTime = GETDATE(),UpdateUser = '{model.CreateUser}' "; sqlString += $"WHERE Id = '{model.Id}' and Status = '0';"; int rowCount = Db.Ado.ExecuteCommand(sqlString); if (rowCount <= 0) { return "-1:状态已变更无法删除!"; } var boxInfoList = Db.Queryable().Where(m => m.IsDel == "0" && m.BoxNo == boxInfo.BoxNo && m.Id != model.Id).ToList(); if (boxInfoList.Count != 0) { foreach (var item in boxInfoList) { if (item.BitBoxMark == "1" || item.Status != "0") { continue; } var sql = $"update BllBoxInfo SET BitBoxMark = '1' Where id = {item.Id}"; int rowCount2 = Db.Ado.ExecuteCommand(sql); if (rowCount2 <= 0) { throw new Exception("-1:状态已变更无法删除!"); } } } Db.Ado.CommitTran(); new OperationASNServer().AddLogOperationAsn("入库作业", "箱支录入", boxInfo.BoxNo3, "删除", $"删除了箱码:{boxInfo.BoxNo}、追溯码:{boxInfo.BoxNo3}的箱支物料信息", Convert.ToInt32(model.CreateUser)); return ""; } catch (Exception ex) { Db.Ado.RollbackTran(); throw new Exception(ex.Message); } } //获取箱码信息(未绑定托盘的箱码) public List GetBoxInfoList(BoxInfoVm model, out int count) { string sqlString = string.Empty; string sqlCount = string.Empty; string sqlPub = string.Empty; try { if (model.Page == 0) { model.Page = 1; } Expression> item = Expressionable.Create() .AndIF(!string.IsNullOrWhiteSpace(model.BoxNo), it => it.BoxNo.Contains(model.BoxNo.Trim())) .AndIF(!string.IsNullOrWhiteSpace(model.BoxNo2), it => it.BoxNo2.Contains(model.BoxNo2.Trim())) .AndIF(!string.IsNullOrWhiteSpace(model.BoxNo3), it => it.BoxNo3.Contains(model.BoxNo3.Trim())) .AndIF(!string.IsNullOrWhiteSpace(model.SkuNo), it => it.SkuNo.Contains(model.SkuNo.Trim())) .AndIF(!string.IsNullOrWhiteSpace(model.LotNo), it => it.LotNo.Contains(model.LotNo.Trim())) .AndIF(!string.IsNullOrWhiteSpace(model.LotText), it => it.LotText.Contains(model.LotText.Trim())) .AndIF(!string.IsNullOrWhiteSpace(model.ProductionTime), it => it.ProductionTime >= Convert.ToDateTime(model.ProductionTime)) .AndIF(!string.IsNullOrWhiteSpace(model.InspectMark), it => it.InspectMark == model.InspectMark.Trim()) .AndIF(!string.IsNullOrWhiteSpace(model.BitBoxMark), it => it.BitBoxMark == model.BitBoxMark.Trim()) .AndIF(!string.IsNullOrWhiteSpace(model.Origin), it => model.Origin.Trim().Contains(it.Origin)) .And(m => m.SkuNo != "100099" && m.IsDel == "0" && m.Status == "0") .ToExpression();//注意 这一句 不能少 var total = 0; var data = GetAllWhereAsync(item) .LeftJoin((a, b) => a.CreateUser == b.Id) .LeftJoin((a, b, c) => a.CreateUser == c.Id) .Select((a, b, c) => new BoxInfoDto() { Id = a.Id, BoxNo = a.BoxNo, BoxNo2 = a.BoxNo2, BoxNo3 = a.BoxNo3, Status = a.Status, Origin = a.Origin, SkuNo = a.SkuNo, SkuName = a.SkuName, Qty = a.Qty, FullQty = a.FullQty, LotNo = a.LotNo, LotText = a.LotText, SupplierLot = a.SupplierLot, BitBoxMark = a.BitBoxMark, InspectStatus = a.InspectStatus, InspectMark = a.InspectMark, ProductionTime = a.ProductionTime, ExpirationTime = a.ExpirationTime, CreateUserName = b.RealName, UpdateUserName = c.RealName, CreateTime = a.CreateTime, UpdateTime = a.UpdateTime }) .OrderByDescending(a=>a.BoxNo) .OrderByDescending(a => a.CreateTime) .ToOffsetPage(model.Page, model.Limit, ref total); count = total; return data; } catch (Exception ex) { throw ex; } } //导入箱码信息 public string ImportBoxInfo(BoxInfoVms models) { string strMessage = ""; try { if (models.ListBoxInfo.Count <= 0) { strMessage = "-1:文件内无数据请核实!"; } var num = 0; int CreateUser = Convert.ToInt32(models.CreateUser); List boxList = new List(); foreach (BoxInfoVm model in models.ListBoxInfo) { try { model.CreateUser = models.CreateUser; model.Origin = "导入"; var msg = AddBoxInfo(model); strMessage += msg; if (msg == "") { num += 1; var hasBoxItem = boxList.Exists(x => x == model.BoxNo); if (!hasBoxItem) { boxList.Add(model.BoxNo); } } } catch { // ignored } } if (num > 0) { new OperationASNServer().AddLogOperationAsn("入库作业", "箱支录入", $"共导入了{boxList.Count}箱", "导入", $"共导入了{boxList.Count}箱,共导入了{num}支", CreateUser); } if (strMessage.Contains("-1") && num > 0) { return "部分导入成功" + strMessage; } if (num>0) { return "导入成功" + strMessage; } return strMessage; } catch (Exception ex) { throw new Exception(ex.Message); } } //根据箱码获取未组盘的箱码信息 public List GetBoxInfoList(string boxCode, string isContinue, string boxCode2) { try { if (string.IsNullOrWhiteSpace(boxCode)) { return null; } var sql = $@" select BoxNo,SkuNo,SkuName,LotNo,sum(Qty) as Qty,Status from BllBoxInfo group by BoxNo,SkuNo,SkuName,LotNo,Status,IsDel "; if (isContinue == "1") { if (string.IsNullOrWhiteSpace(boxCode2)) { throw new Exception("开启连续组托时,尾箱码信息不可为空!"); } sql += $"having BoxNo >= '{boxCode}' and BoxNo <= '{boxCode2}' and Status = '0' and IsDel = '0' "; } else { sql += $"having BoxNo = '{boxCode}' and Status = '0' and IsDel = '0' "; } var data = Db.Ado.SqlQuery(sql); return data; } catch (Exception e) { throw new Exception(e.Message); } } //获取标签箱码信息 public List GetLabelBoxList(LabelBoxInfoVm 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.SkuNo), it => it.SkuNo.Contains(model.SkuNo.Trim())) .AndIF(!string.IsNullOrWhiteSpace(model.LotNo), it => it.LotNo.Contains(model.LotNo.Trim())) .AndIF(!string.IsNullOrWhiteSpace(model.SupplierLot), it => it.SupplierLot.Contains(model.SupplierLot.Trim())) .AndIF(!string.IsNullOrWhiteSpace(model.Status), it => it.Status == model.Status) .AndIF(!string.IsNullOrWhiteSpace(model.ProductionTime), it => it.ProductionTime >= Convert.ToDateTime(model.ProductionTime)) .AndIF(!string.IsNullOrWhiteSpace(model.ProductionTime), it => it.ProductionTime <= Convert.ToDateTime(model.ProductionTime).AddDays(1)) .And(it => it.IsDel == "0" && it.Origin == "WMS生成") .ToExpression(); var total = 0; var data = GetAllWhereAsync(item) .LeftJoin((a, b) => a.CreateUser == b.Id) .LeftJoin((a, b, c) => a.UpdateUser == c.Id) .LeftJoin((a, b, c,d) => a.SkuNo == d.SkuNo) .LeftJoin((a, b, c, d,e) => d.UnitNo == e.UnitNo) .Select((a, b, c,d,e) => new BoxInfoDto() { Id = a.Id, ASNNo = a.ASNNo, ASNDetailNo = a.ASNDetailNo, BoxNo = a.BoxNo, BoxNo2 = a.BoxNo2, BoxNo3 = a.BoxNo3, Qty = a.Qty, FullQty = a.FullQty, SkuNo = a.SkuNo, SkuName = a.SkuName, Standard = a.Standard, PackageStandard = a.PackageStandard, LotNo = a.LotNo, LotText = a.LotText, unit = e.UnitName, Status = a.Status, SupplierLot = a.SupplierLot, ProductionTime = a.ProductionTime, ExpirationTime = a.ExpirationTime, StoreTime = a.StoreTime, CompleteTime = a.CompleteTime, InspectMark = a.InspectMark, BitBoxMark = a.BitBoxMark, InspectStatus = a.InspectStatus, Origin = a.Origin, QtyCount = a.QtyCount, QtyOrd = a.QtyOrd, CreateUserName = b.RealName, UpdateUserName = c.RealName, CreateTime = a.CreateTime, UpdateTime = a.UpdateTime }).OrderBy(a => a.BoxNo).OrderByDescending(a => a.CreateTime).ToOffsetPage(model.Page, model.Limit, ref total); count = total; return data; } catch (Exception e) { throw new Exception(e.Message); } } //获取标签模板根据入库单明细ID public BoxInfoDto 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 BoxInfoDto(); data.SkuNo = asnDetail.SkuNo; data.SkuName = asnDetail.SkuName; data.Standard = asnDetail.Standard; data.SupplierLot = asnDetail.SupplierLot; data.PackageStandard = str; data.SupplierLot = asnDetail.SupplierLot; return data; } catch (Exception e) { throw new Exception(e.Message); } } //获取标签信息(生成标签) public List AddLabelBox(int imId, string isReset, decimal arriveQty, string productionTime, string expirationTime, string storeTime,string supplierLot, int userId) { try { #region 单据、物料、包装、标签信息获取 if (string.IsNullOrWhiteSpace(productionTime)) { throw new Exception("生产日期不能为空"); } if (!string.IsNullOrWhiteSpace(expirationTime) && !string.IsNullOrWhiteSpace(storeTime)) { throw new Exception("有效期和储存期不能同时填写"); } if (isReset != "0") { throw new Exception("不可重置批次"); } DateTime proTime; DateTime expTime; DateTime stoTime; var bl1= DateTime.TryParse(productionTime, out proTime); var bl2= DateTime.TryParse(expirationTime, out expTime); var bl3= DateTime.TryParse(storeTime, out stoTime); if (!bl1) { throw new Exception("生产日期转换失败"); } if (!bl2 && !string.IsNullOrWhiteSpace(expirationTime)) { throw new Exception("有效期转换失败"); } if (!bl3 && !string.IsNullOrWhiteSpace(storeTime)) { throw new Exception("储存期转换失败"); } var asnList = Db.Queryable().First(m => m.Id == imId && m.IsDel == "0"); if (asnList == null) { throw new Exception("未查询到单据明细信息"); } //if (asnList.LotNo.Length != 10 && asnList.LotNo.Length != 11 && asnList.LotNo.Length != 12) //{ // throw new Exception("单据进厂编号位数长度错误"); //} var asn = Db.Queryable().First(m => m.ASNNo == asnList.ASNNo && m.IsDel == "0"); if (asn == null) { throw new Exception("未查询到单据信息"); } var pack = Db.Queryable().First(m => m.IsDel == "0" && m.PackagNo == asnList.PackagNo); if (pack == null) { throw new Exception("未查询到当前单据中物料的包装信息"); } var packStr = ""; if (!string.IsNullOrWhiteSpace(pack.L1Name)) { packStr += pack.L1Num + "/" + pack.L1Name; } if (!string.IsNullOrWhiteSpace(pack.L2Name)) { packStr += "-" + pack.L2Num + "/" + pack.L2Name; } if (!string.IsNullOrWhiteSpace(pack.L3Name)) { packStr += "-" + pack.L3Num + "/" + pack.L3Name; } if (!string.IsNullOrWhiteSpace(pack.L4Name)) { packStr += "-" + pack.L4Num + "/" + pack.L4Name; } if (!string.IsNullOrWhiteSpace(pack.L5Name)) { packStr += "-" + pack.L5Num + "/" + pack.L5Name; } //标签表 var label = Db.Queryable().Where(m => m.IsDel == "0" && m.Origin == "WMS生成").ToList(); #endregion #region 包装查询 var bNum = 0;//箱物品数量 var zNum = 0;//支物品数量 var packLevel = 0; if (pack.L2Num.HasValue) { if (pack.L2Name != "托") { 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级标签打印 { throw new Exception("包装信息有误,小于一级"); } #endregion var modelList = new List(); var addLotNo = ""; if (arriveQty <= 0) { throw new Exception("到货数量不能小于等于0!"); } Db.BeginTran(); 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; //} var 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"); if (isReset == "0") { //判断单据是否是余料退回单 if (asn.Type == "4") { maxLotNoStr = asnList.LotNo; maxBoxCode = label.Where(m=>m.LotNo == maxLotNoStr).Max(a => a.BoxNo); if (string.IsNullOrWhiteSpace(maxLotNoStr)) { throw new Exception("车间余料退回单据批次不能为空"); } } else { //var labelCount = label.Where(m => m.ASNDetailNo == imId).ToList(); //if (labelCount.Count <= 0) //{ // throw new Exception("当前单据明细还未生成标签,请选择重置批次选项为‘是’;"); //} //maxLotNoStr = labelCount.Max(a => a.LotNo); maxLotNoStr = asnList.LotNo; //if (string.IsNullOrWhiteSpace(maxLotNoStr)) //{ // maxLotNoStr = toDayTime.Substring(2, 6) + "0001"; //} maxBoxCode = label.Where(m => m.LotNo == maxLotNoStr).Max(a => a.BoxNo); } } else { var maxCode = Db.Queryable().Where(m=>m.Origin == "WMS生成").Max(a => a.LotNo); // 获取今天最大批次号 20241013 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(maxCode.Length - 4, 4)) + 1).ToString().PadLeft(4, '0'); } else { maxLotNoStr = timeStr + "0001"; } } } addLotNo = maxLotNoStr; #endregion for (int i = 1; i <= labelNum; i++) { decimal boxQty = 0; if (i == labelNum) { // 最后一个条码 var s = zNum * (i - 1); if (zNum > qty - s) { boxQty = qty - s;// 数量 } else { boxQty = zNum;// 数量 } } else { boxQty = zNum; // 数量 } //获取箱码 if (string.IsNullOrWhiteSpace(maxBoxCode)) { var str = "B"+maxLotNoStr + "000001"; //批号+ 流水 2302010001000001 maxBoxCode = str; } else { maxBoxCode = maxBoxCode.Substring(0, maxBoxCode.Length - 6) + (int.Parse(maxBoxCode.Substring(maxBoxCode.Length - 6, 6)) + 1).ToString().PadLeft(6, '0'); } // 将条码保存到原料条码表 var labelModel = new BllBoxInfo() { ASNNo = asnList.ASNNo, ASNDetailNo = asnList.Id, BoxNo = maxBoxCode, Qty = boxQty, FullQty = bNum, Status = "0", SkuNo = asnList.SkuNo, SkuName = asnList.SkuName, LotNo = maxLotNoStr, Standard = asnList.Standard, PackageStandard = packStr, SupplierLot = supplierLot, InspectMark = "0", BitBoxMark = bNum > boxQty ? "1":"0", InspectStatus = "0", ProductionTime = proTime, Origin = "WMS生成", CreateUser = userId, CreateTime = DateTime.Now, }; if (bl2) { labelModel.ExpirationTime = expTime; } if (bl3) { labelModel.ExpirationTime = stoTime; labelModel.StoreTime = stoTime; } Db.Insertable(labelModel).ExecuteCommand(); modelList.Add(labelModel); } #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 var qty2 = arriveQty; 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") { //判断单据是否是余料退回单 if (asn.Type == "4") { maxCodestr2 = asnList.LotNo; maxboxcode2 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo); maxboxcode3 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo3);//支号 if (string.IsNullOrWhiteSpace(maxCodestr2)) { throw new Exception("车间余料退回单据批次不能为空"); } } else { //var labelCount = label.Where(m => m.ASNDetailNo == imId).ToList(); //if (labelCount.Count <= 0) //{ // throw new Exception("当前单据明细还未生成标签,请选择重置批次选项为‘是’;"); //} //maxCodestr2 = labelCount.Max(a => a.LotNo); ; maxCodestr2 = asnList.LotNo; //if (string.IsNullOrWhiteSpace(maxCodestr2)) //{ // maxCodestr2 = toDayTime2.Substring(2, 6) + "0001"; //} maxboxcode2 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo);//箱号; maxboxcode3 = label.Where(m => m.LotNo == maxCodestr2).Max(a => a.BoxNo3);//支号; } } else { var maxCode = Db.Queryable().Where(m => m.Origin == "WMS生成").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"; } } } addLotNo = maxCodestr2; #endregion for (int i = 1; i <= labelNum2; i++)//箱码标签 { //箱内数量 decimal boxQty = 0; if (i == labelNum2) { // 最后一个条码 var s = bNum * (i - 1); if (bNum > qty2 - s) { boxQty = qty2 - s;// 数量 } else { boxQty = bNum;// 数量 } } else { boxQty = bNum; // 数量 } //获取箱码 if (string.IsNullOrWhiteSpace(maxboxcode2)) { maxboxcode2 = "B"+maxCodestr2 + "000001"; // 箱号 批号+第几箱 } else { maxboxcode2 = maxboxcode2.Substring(0, maxboxcode2.Length - 6) + (int.Parse(maxboxcode2.Substring(maxboxcode2.Length-6, 6)) + 1).ToString().PadLeft(6, '0'); } //获取箱内支标签数量 if (i == labelNum2) { var isGo2 = false; var sl = 0; for (int j = 1; j <= labelNumZ2; j++) { if (isGo2) { break; } var s = bNum * (i - 1); var s2 = zNum * (j - 1); if (zNum >= qty2 - s - s2) { isGo2 = true; } sl++; } labelNumZ2 = sl; } for (int j = 1; j <= labelNumZ2; j++)//最小单位标签 { decimal d = zNum; if (i == labelNum2) { var s = bNum * (i - 1); var s2 = zNum * (j - 1); if (zNum >= qty2 - s - s2) { d = qty2 - s - s2; // 数量 } } if (string.IsNullOrWhiteSpace(maxboxcode3)) { maxboxcode3 = "Z"+maxCodestr2 + "0001"; // 支号 批号+第几箱 } else { maxboxcode3 = maxboxcode3.Substring(0, maxboxcode3.Length - 4) + (int.Parse(maxboxcode3.Substring(maxboxcode3.Length - 4, 4)) + 1).ToString().PadLeft(4, '0'); } //var ssss = d.ToString("0"); //var sss = int.Parse(ssss); // 将条码保存到原料条码表 var labelModel = new BllBoxInfo() { ASNNo = asnList.ASNNo, ASNDetailNo = asnList.Id, BoxNo = maxboxcode2, BoxNo3 = maxboxcode3, Qty = d, FullQty = bNum, Status = "0", SkuNo = asnList.SkuNo, SkuName = asnList.SkuName, LotNo = maxCodestr2, Standard = asnList.Standard, PackageStandard = packStr, SupplierLot = supplierLot, InspectMark = "0", BitBoxMark = bNum > boxQty ? "1" : "0", InspectStatus = "0", ProductionTime = proTime, Origin = "WMS生成", CreateUser = userId, CreateTime = DateTime.Now, }; if (bl2) { labelModel.ExpirationTime = expTime; } if (bl3) { labelModel.ExpirationTime = stoTime; labelModel.StoreTime = stoTime; } Db.Insertable(labelModel).ExecuteCommand(); modelList.Add(labelModel); } } #endregion } if (string.IsNullOrWhiteSpace(asnList.LotNo)) { asnList.LotNo = addLotNo; Db.Updateable(asnList).ExecuteCommand(); } else { if (!asnList.LotNo.Contains(addLotNo)) { asnList.LotNo += ";" + addLotNo; Db.Updateable(asnList).ExecuteCommand(); } } Db.CommitTran(); return modelList; //throw new NotImplementedException(); } catch (Exception e) { Db.RollbackTran(); throw new Exception(e.Message); } } // 补打标签 public List GetBuDaLabelList(string boxNo, string endBoxNo, string boxNo2, string endBoxNo2, string type, int userId) { try { //打印数据集合 var printList = new List(); List printModelList = new List(); //List printlog = new List(); //标签表数据信息 var list = Db.Queryable().Where(m => m.IsDel == "0" && m.Origin == "WMS生成").ToList(); #region MyRegion switch (type) { case "1": if (string.IsNullOrWhiteSpace(endBoxNo)) { #region 单个箱码标签 if (string.IsNullOrWhiteSpace(boxNo)) { throw new Exception($"起始箱码不能为空"); } var dataList = list.Where(m => m.BoxNo == boxNo); var data = list.FirstOrDefault(m => m.BoxNo == boxNo); if (data == null) { throw new Exception($"未查询到{boxNo}信息"); } //单位 var sqlString = "select a.UnitName as unit from SysUnit a left join SysMaterials b on a.UnitNo = b.UnitNo where b.SkuNo = '" + data.SkuNo + "'"; var unitname = Db.Ado.SqlQuery(sqlString).FirstOrDefault() ; // 物料条码信息赋值 BoxInfoDto model = new BoxInfoDto(); model.SkuNo = data.SkuNo; model.SkuName = data.SkuName; model.LotNo = data.LotNo; //批次 model.SupplierLot = data.SupplierLot; // 原厂批号 model.Standard = data.Standard; // 规格/型号 model.PackageStandard = data.PackageStandard; // 包装规格 model.ExpirationTime = data.ExpirationTime; // 有效期至 model.StoreTime = data.StoreTime; // 储存期至 model.Qty = dataList.Sum(m=>m.Qty);// 数量 model.unit = unitname.unit; model.BoxNo = data.BoxNo; // 箱号 model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo,160, 40,false); // 添加到list集合 printModelList.Add(model); //添加打印记录 //WmsLabelPrintLog log = new WmsLabelPrintLog(); //log.BoxCode = data.LabelStream; //log.CreateTime = DateTime.Now; //log.Demo = Demo; //log.Isdel = 0; //log.CreateUser = userId; //printlog.Add(log); #endregion } else { #region 多个箱码标签 开始-结束 if (string.IsNullOrWhiteSpace(boxNo)) { throw new Exception("起始箱码不能为空"); } var sql = $@"select * from BllBoxInfo where IsDel = '0' and Origin = 'WMS生成' and BoxNo >='{boxNo}' and BoxNo <= '{endBoxNo}'"; var data2 = Db.Ado.SqlQuery(sql); var data3 = data2.GroupBy(m => m.BoxNo).Select(m => m.Key).OrderBy(m => m).ToList(); if (data3.Count == 0) { throw new Exception($"未查询到{boxNo}-{endBoxNo}中信息"); } var i = 0; foreach (var item in data3) { var data1 = data2.Where(m => m.BoxNo == item); var data = data2.FirstOrDefault(m => m.BoxNo == item); if (data == null) { throw new Exception($"未查询到{item}信息"); } //单位 var sqlString = "select a.UnitName as unit from SysUnit a left join SysMaterials b on a.UnitNo = b.UnitNo where b.SkuNo = '" + data.SkuNo + "'"; var unitname = Db.Ado.SqlQuery(sqlString).FirstOrDefault(); // 物料条码信息赋值 BoxInfoDto model = new BoxInfoDto(); model.SkuNo = data.SkuNo; model.SkuName = data.SkuName; model.LotNo = data.LotNo; //批次 model.SupplierLot = data.SupplierLot; // 原厂批号 model.Standard = data.Standard; // 规格/型号 model.PackageStandard = data.PackageStandard; // 包装规格 model.ExpirationTime = data.ExpirationTime; // 有效期至 model.StoreTime = data.StoreTime; // 储存期至 model.Qty = data1.Sum(m => m.Qty);// 数量 model.unit = unitname.unit; model.BoxNo = data.BoxNo; // 箱号 model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false); // 添加到list集合 printModelList.Add(model); i++; ////添加打印记录 //WmsLabelPrintLog log = new WmsLabelPrintLog(); //log.BoxCode = data.LabelStream; //log.CreateTime = DateTime.Now; //log.Demo = Demo; //log.Isdel = 0; //log.CreateUser = userId; //printlog.Add(log); if (i >= 100) { break; } } #endregion } break; case "2": if (string.IsNullOrWhiteSpace(endBoxNo2)) { #region 单个支码标签 if (string.IsNullOrWhiteSpace(boxNo2)) { throw new Exception($"起始支码不能为空"); } var data = list.FirstOrDefault(m => m.BoxNo3 == boxNo2); if (data == null) { throw new Exception($"未查询到{boxNo2}信息"); } //单位 var sqlString = "select a.UnitName as unit from SysUnit a left join SysMaterials b on a.UnitNo = b.UnitNo where b.SkuNo = '" + data.SkuNo + "'"; var unitname = Db.Ado.SqlQuery(sqlString).FirstOrDefault(); // 物料条码信息赋值 BoxInfoDto model = new BoxInfoDto(); model.SkuNo = data.SkuNo; model.SkuName = data.SkuName; model.LotNo = data.LotNo; //批次 model.SupplierLot = data.SupplierLot; // 原厂批号 model.Standard = data.Standard; // 规格/型号 model.PackageStandard = data.PackageStandard; // 包装规格 model.ExpirationTime = data.ExpirationTime; // 有效期至 model.StoreTime = data.StoreTime; // 储存期至 model.Qty = data.Qty;// 数量 model.unit = unitname.unit; model.BoxNo = data.BoxNo3; // 支号 model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false); // 添加到list集合 printModelList.Add(model); ////添加打印记录 //WmsLabelPrintLog log = new WmsLabelPrintLog(); //log.BoxCode = data.BoxCode1; //log.CreateTime = DateTime.Now; //log.Demo = Demo; //log.Isdel = 0; //log.CreateUser = userId; //printlog.Add(log); #endregion } else { #region 多个支码标签 开始-结束 if (string.IsNullOrWhiteSpace(boxNo2)) { throw new Exception("起始支码不能为空"); } var sql = $@"select * from BllBoxInfo where IsDel = '0' and Origin = 'WMS生成' and BoxNo3 >='{boxNo2}' and BoxNo3 <= '{endBoxNo2}'"; var data2 = Db.Ado.SqlQuery(sql); if (data2.Count == 0) { throw new Exception($"未查询到{boxNo2}-{endBoxNo2}中信息"); } var i = 0; foreach (var data in data2) { //单位 var sqlString = "select a.UnitName as unit from SysUnit a left join SysMaterials b on a.UnitNo = b.UnitNo where b.SkuNo = '" + data.SkuNo + "'"; var unitname = Db.Ado.SqlQuery(sqlString).FirstOrDefault(); // 物料条码信息赋值 BoxInfoDto model = new BoxInfoDto(); model.SkuNo = data.SkuNo; model.SkuName = data.SkuName; model.LotNo = data.LotNo; //批次 model.SupplierLot = data.SupplierLot; // 原厂批号 model.Standard = data.Standard; // 规格/型号 model.PackageStandard = data.PackageStandard; // 包装规格 model.ExpirationTime = data.ExpirationTime; // 有效期至 model.StoreTime = data.StoreTime; // 储存期至 model.Qty = data.Qty;// 数量 model.unit = unitname.unit; model.BoxNo = data.BoxNo3; // 箱号 model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false); // 添加到list集合 printModelList.Add(model); i++; ////添加打印记录 //WmsLabelPrintLog log = new WmsLabelPrintLog(); //log.BoxCode = data.BoxCode1; //log.CreateTime = DateTime.Now; //log.Demo = Demo; //log.Isdel = 0; //log.CreateUser = userId; //printlog.Add(log); if (i >= 100) { break; } } #endregion } break; case "3": if (string.IsNullOrWhiteSpace(endBoxNo)) { if (string.IsNullOrWhiteSpace(boxNo)) { throw new Exception("起始箱码不能为空"); } #region 箱码和箱码内的支码 if (!string.IsNullOrWhiteSpace(boxNo2)) { if (string.IsNullOrWhiteSpace(endBoxNo2)) //单个支码和箱码 { #region 单个支码和箱码 var dataList = list.Where(m => m.BoxNo == boxNo); var data = list.FirstOrDefault(m => m.BoxNo3 == boxNo2); if (data == null) { throw new Exception($"未查询到{boxNo2}信息"); } if (data.BoxNo != boxNo)//判断箱码是否相同 { throw new Exception($"当前支码不是箱码内"); } //单位 var sqlString = "select a.UnitName as unit from SysUnit a left join SysMaterials b on a.UnitNo = b.UnitNo where b.SkuNo = '" + data.SkuNo + "'"; var unitname = Db.Ado.SqlQuery(sqlString).FirstOrDefault(); // 物料条码信息赋值 箱码 BoxInfoDto model1 = new BoxInfoDto(); model1.SkuNo = data.SkuNo; model1.SkuName = data.SkuName; model1.LotNo = data.LotNo; //批次 model1.SupplierLot = data.SupplierLot; // 原厂批号 model1.Standard = data.Standard; // 规格/型号 model1.PackageStandard = data.PackageStandard; // 包装规格 model1.ExpirationTime = data.ExpirationTime; // 有效期至 model1.StoreTime = data.StoreTime; // 储存期至 model1.Qty = dataList.Sum(m=>m.Qty);// 数量 model1.unit = unitname.unit; model1.BoxNo = data.BoxNo; // 箱号 model1.ImgStr = BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 160, 40, false); // 添加到list集合 printModelList.Add(model1); // 物料条码信息赋值 支码 BoxInfoDto model = new BoxInfoDto(); model.SkuNo = data.SkuNo; model.SkuName = data.SkuName; model.LotNo = data.LotNo; //批次 model.SupplierLot = data.SupplierLot; // 原厂批号 model.Standard = data.Standard; // 规格/型号 model.PackageStandard = data.PackageStandard; // 包装规格 model.ExpirationTime = data.ExpirationTime; // 有效期至 model.StoreTime = data.StoreTime; // 储存期至 model.Qty = data.Qty;// 数量 model.unit = unitname.unit; model.BoxNo = data.BoxNo3; // 支号 model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false); // 添加到list集合 printModelList.Add(model); ////添加打印记录 //WmsLabelPrintLog log = new WmsLabelPrintLog(); //log.BoxCode = data.BoxCode1; //log.CreateTime = DateTime.Now; //log.Demo = Demo; //log.Isdel = 0; //log.CreateUser = userId; //printlog.Add(log); #endregion } else//一箱内某几个支码 { #region 单个箱码和多个支码 var sql = $@"select * from BllBoxInfo where IsDel = '0' and Origin = 'WMS生成' and BoxNo3 >='{boxNo2}' and BoxNo3 <= '{endBoxNo2}'"; var data2 = Db.Ado.SqlQuery(sql); if (data2.Count == 0) { throw new Exception($"未查询到{boxNo2}-{endBoxNo2}中信息"); } if (data2.Count(m => m.BoxNo != boxNo) > 0) { throw new Exception($"{boxNo2}-{endBoxNo2}中信息有不属于{boxNo}箱码内的"); } var data = list.Where(m => m.BoxNo == boxNo); var boxData = data2.FirstOrDefault(); //单位 var sqlString = "select a.UnitName as unit from SysUnit a left join SysMaterials b on a.UnitNo = b.UnitNo where b.SkuNo = '" + boxData.SkuNo + "'"; var unitname = Db.Ado.SqlQuery(sqlString).FirstOrDefault(); // 物料条码信息赋值 BoxInfoDto model = new BoxInfoDto(); model.SkuNo = boxData.SkuNo; model.SkuName = boxData.SkuName; model.LotNo = boxData.LotNo; //批次 model.SupplierLot = boxData.SupplierLot; // 原厂批号 model.Standard = boxData.Standard; // 规格/型号 model.PackageStandard = boxData.PackageStandard; // 包装规格 model.ExpirationTime = boxData.ExpirationTime; // 有效期至 model.StoreTime = boxData.StoreTime; // 储存期至 model.Qty = data.Sum(m => m.Qty); // 数量 model.unit = unitname.unit; model.BoxNo = boxData.BoxNo; // 支号 model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false); // 添加到list集合 printModelList.Add(model); var i = 0; foreach (var item in data2) { //单位 sqlString = "select a.UnitName as unit from SysUnit a left join SysMaterials b on a.UnitNo = b.UnitNo where b.SkuNo = '" + item.SkuNo + "'"; unitname = Db.Ado.SqlQuery(sqlString).FirstOrDefault(); // 物料条码信息赋值 BoxInfoDto model1 = new BoxInfoDto(); model1.SkuNo = item.SkuNo; model1.SkuName = item.SkuName; model1.LotNo = item.LotNo; //批次 model1.SupplierLot = item.SupplierLot; // 原厂批号 model1.Standard = item.Standard; // 规格/型号 model1.PackageStandard = item.PackageStandard; // 包装规格 model1.ExpirationTime = item.ExpirationTime; // 有效期至 model1.StoreTime = item.StoreTime; // 储存期至 model1.Qty = item.Qty;// 数量 model1.unit = unitname.unit; model1.BoxNo = item.BoxNo3; // 支号 model.ImgStr = BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 160, 40, false); // 添加到list集合 printModelList.Add(model); i++; ////添加打印记录 //WmsLabelPrintLog log = new WmsLabelPrintLog(); //log.BoxCode = item.BoxCode1; //log.CreateTime = DateTime.Now; //log.Demo = Demo; //log.Isdel = 0; //log.CreateUser = userId; //printlog.Add(log); if (i >= 100) { break; } } #endregion } } else //整箱支码和一个箱码 { #region 整箱支码和一个箱码 var data = list.Where(m => m.BoxNo == boxNo).ToList(); var boxData = data.FirstOrDefault(); if (boxData == null) { throw new Exception($"未查询到{boxNo}箱码信息"); } //单位 var sqlString = "select a.UnitName as unit from SysUnit a left join SysMaterials b on a.UnitNo = b.UnitNo where b.SkuNo = '" + boxData.SkuNo + "'"; var unitname = Db.Ado.SqlQuery(sqlString).FirstOrDefault(); // 物料条码信息赋值 BoxInfoDto model = new BoxInfoDto(); model.SkuNo = boxData.SkuNo; model.SkuName = boxData.SkuName; model.LotNo = boxData.LotNo; //批次 model.SupplierLot = boxData.SupplierLot; // 原厂批号 model.Standard = boxData.Standard; // 规格/型号 model.PackageStandard = boxData.PackageStandard; // 包装规格 model.ExpirationTime = boxData.ExpirationTime; // 有效期至 model.StoreTime = boxData.StoreTime; // 储存期至 model.Qty = data.Sum(m => m.Qty); // 数量 model.unit = unitname.unit; model.BoxNo = boxData.BoxNo; // 支号 model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false); // 添加到list集合 printModelList.Add(model); if (data.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0) //判断是否有支码 { var i = 0; foreach (var item in data) { //单位 sqlString = "select a.UnitName as unit from SysUnit a left join SysMaterials b on a.UnitNo = b.UnitNo where b.SkuNo = '" + item.SkuNo + "'"; unitname = Db.Ado.SqlQuery(sqlString).FirstOrDefault(); // 物料条码信息赋值 BoxInfoDto model1 = new BoxInfoDto(); model1.SkuNo = item.SkuNo; model1.SkuName = item.SkuName; model1.LotNo = item.LotNo; //批次 model1.SupplierLot = item.SupplierLot; // 原厂批号 model1.Standard = item.Standard; // 规格/型号 model1.PackageStandard = item.PackageStandard; // 包装规格 model1.ExpirationTime = item.ExpirationTime; // 有效期至 model1.StoreTime = item.StoreTime; // 储存期至 model1.Qty = item.Qty; // 数量 model1.unit = unitname.unit; model1.BoxNo = item.BoxNo3; // 支号 model1.ImgStr = BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 160, 40, false); // 添加到list集合 printModelList.Add(model1); i++; ////添加打印记录 //WmsLabelPrintLog log = new WmsLabelPrintLog(); //log.BoxCode = item.BoxCode1; //log.CreateTime = DateTime.Now; //log.Demo = Demo; //log.Isdel = 0; //log.CreateUser = userId; //printlog.Add(log); if (i >= 100) { break; } } } else { throw new Exception("当前箱内没有支码"); } #endregion } #endregion } else { if (string.IsNullOrWhiteSpace(boxNo)) { throw new Exception("起始箱码不能为空"); } #region 多个箱码和内支码 var sql = $@"select * from BllBoxInfo where IsDel = '0' and Origin = 'WMS生成' and BoxNo >='{boxNo}' and BoxNo <= '{endBoxNo}'"; var data2 = Db.Ado.SqlQuery(sql); var data3 = data2.GroupBy(m => m.BoxNo).Select(m => m.Key).OrderBy(m => m).ToList(); if (data3.Count == 0) { throw new Exception($"未查询到{boxNo}-{endBoxNo}中信息"); } var i = 0; var j = 0; foreach (var demo in data3) { var data = list.Where(m => m.BoxNo == demo).ToList(); var boxData = data.FirstOrDefault(); if (boxData == null) { throw new Exception($"未查询到{demo}箱码信息"); } //单位 var sqlString = "select a.UnitName as unit from SysUnit a left join SysMaterials b on a.UnitNo = b.UnitNo where b.SkuNo = '" + boxData.SkuNo + "'"; var unitname = Db.Ado.SqlQuery(sqlString).FirstOrDefault(); // 物料条码信息赋值 BoxInfoDto model = new BoxInfoDto(); model.SkuNo = boxData.SkuNo; model.SkuName = boxData.SkuName; model.LotNo = boxData.LotNo; //批次 model.SupplierLot = boxData.SupplierLot; // 原厂批号 model.Standard = boxData.Standard; // 规格/型号 model.PackageStandard = boxData.PackageStandard; // 包装规格 model.ExpirationTime = boxData.ExpirationTime; // 有效期至 model.StoreTime = boxData.StoreTime; // 储存期至 model.Qty = data.Sum(m => m.Qty); // 数量 model.unit = unitname.unit; model.BoxNo = boxData.BoxNo; // 支号 model.ImgStr = BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false); // 添加到list集合 printModelList.Add(model); j++; if (j >= 100) { break; } if (data.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0) //判断是否有支码 { foreach (var item in data.OrderBy(m => m.BoxNo3).ToList()) { //单位 sqlString = "select a.UnitName as unit from SysUnit a left join SysMaterials b on a.UnitNo = b.UnitNo where b.SkuNo = '" + item.SkuNo + "'"; unitname = Db.Ado.SqlQuery(sqlString).FirstOrDefault(); // 物料条码信息赋值 BoxInfoDto model1 = new BoxInfoDto(); model1.SkuNo = item.SkuNo; model1.SkuName = item.SkuName; model1.LotNo = item.LotNo; //批次 model1.SupplierLot = item.SupplierLot; // 原厂批号 model1.Standard = item.Standard; // 规格/型号 model1.PackageStandard = item.PackageStandard; // 包装规格 model1.ExpirationTime = item.ExpirationTime; // 有效期至 model1.StoreTime = item.StoreTime; // 储存期至 model1.Qty = item.Qty;// 数量 model1.unit = unitname.unit; model1.BoxNo = item.BoxNo3; // 支号 model1.ImgStr = BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 160, 40, false); // 添加到list集合 printModelList.Add(model1); i++; ////添加打印记录 //WmsLabelPrintLog log = new WmsLabelPrintLog(); //log.BoxCode = item.BoxCode1; //log.CreateTime = DateTime.Now; //log.Demo = Demo; //log.Isdel = 0; //log.CreateUser = userId; //printlog.Add(log); if (i >= 100) { break; } } } } #endregion } break; default: throw new Exception("请选择补打类型"); } #endregion return printModelList; } catch (Exception e) { throw new Exception(e.Message); } } //根据入库单号过去单据下所有批次号 public List GetLotNoListByAsn(string asnNo) { try { var data = new List(); var asnList = Db.Queryable().Where(m => m.IsDel == "0" && m.ASNNo == asnNo).ToList(); if (asnList.Count == 0) { throw new Exception("未查询到该单据号的信息"); } foreach (var item in asnList) { if (string.IsNullOrWhiteSpace(item.LotNo)) { continue; } var strList = item.LotNo.Split(";"); foreach (var str in strList) { if (string.IsNullOrWhiteSpace(str)) { continue; } data.Add(str); } } return data; } catch (Exception e) { throw new Exception(e.Message); } } //删除单据下单个或多个批次的标签 public void DelLabelByAsnNo(string asnNo,string lotNo, int userId) { try { var asnList = Db.Queryable().Where(m => m.IsDel == "0" && m.ASNNo == asnNo).ToList(); if (asnList.Count == 0) { throw new Exception("未查询到该单据号的信息"); } Db.BeginTran(); //批次为空:当前单据下所有批次的标签全部删除; 有批次:伤处当前单据下当前批次的标签 if (string.IsNullOrWhiteSpace(lotNo)) //删除全部标签 { var labelList = Db.Queryable().Where(m => m.IsDel == "0" && m.ASNNo == asnNo).ToList(); if (labelList.Count(m => m.Status != "0") >= 1) { throw new Exception("当前单据批次的标签已有已使用,不能删除"); } //foreach (var item in asnList) //{ // if (string.IsNullOrWhiteSpace(item.LotNo)) // { // continue; // } // item.LotNo = ""; // Db.Updateable(item).ExecuteCommand(); //} Db.Deleteable(labelList).ExecuteCommand(); } else //删除固定批次标签 { var labelList = Db.Queryable().Where(m => m.IsDel == "0" && m.ASNNo == asnNo && m.LotNo == lotNo).ToList(); if (labelList.Count(m=>m.Status != "0") >= 1 ) { throw new Exception("当前单据批次的标签已有已使用,不能删除"); } //foreach (var item in asnList) //{ // if (string.IsNullOrWhiteSpace(item.LotNo) || item.LotNo!=lotNo) // { // continue; // } // var strList = item.LotNo.Split(";"); // var updateLotNo = ""; // foreach (var str in strList) // { // if (string.IsNullOrWhiteSpace(str) || str == lotNo) // { // continue; // } // if (string.IsNullOrWhiteSpace(updateLotNo)) // { // updateLotNo = str; // } // else // { // updateLotNo += ";" + str; // } // } // item.LotNo = updateLotNo; // Db.Updateable(item).ExecuteCommand(); //} Db.Deleteable(labelList).ExecuteCommand(); } Db.CommitTran(); var msg = $"删除了单据号:{asnNo}"; if (!string.IsNullOrWhiteSpace(lotNo)) { msg += $"、批次号:{lotNo}"; } msg += "的标签信息"; new OperationASNServer().AddLogOperationAsn("入库作业", "物料标签", asnNo, "删除", msg, userId); } catch (Exception e) { Db.RollbackTran(); throw new Exception(e.Message); } } //编辑标签数量 public void EditLabelQty(int id, string qty, int userId) { try { if (string.IsNullOrWhiteSpace(qty)) { throw new Exception("编辑数量不可为空"); } var qtyData = 0m; var isOk = decimal.TryParse(qty, out qtyData); var boxInfo = Db.Queryable().First(m => m.IsDel == "0" && m.Id == id); if (boxInfo == null) { throw new Exception("未查询到该标签信息"); } if (isOk) { if (qtyData <= 0) { throw new Exception("数量不能小于等于0"); } boxInfo.Qty = qtyData; Db.Updateable(boxInfo).ExecuteCommand(); } else { throw new Exception("数量转换失败"); } var msg = $"编辑了箱号:{boxInfo.BoxNo}"; if (!string.IsNullOrWhiteSpace(boxInfo.BoxNo3)) { msg += $"、支号:{boxInfo.BoxNo3}"; } msg += "的标签数量信息"; new OperationASNServer().AddLogOperationAsn("入库作业", "物料标签", boxInfo.BoxNo, "编辑", msg, userId); } catch (Exception e) { throw new Exception(e.Message); } } } }