using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Linq.Expressions;
|
using System.Text;
|
using Model.ModelDto.BllAsnDto;
|
using Model.ModelVm.BllAsnVm;
|
using SqlSugar;
|
using Utility.Tools;
|
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<BllLabelBoxNo>, IBllLabelBoxNoServer
|
{
|
private static readonly SqlSugarScope Db = DataContext.Db;
|
|
public BllLabelBoxNoServer() : base(Db)
|
{
|
}
|
|
//获取标签箱码信息
|
public List<LabelBoxDto> GetLabelBoxList(LabelBoxVm model, out int count)
|
{
|
try
|
{
|
Expression<Func<BllLabelBoxNo, bool>> item = Expressionable.Create<BllLabelBoxNo>()
|
.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<SysUserInfor>((a, b) => a.CreateUser == b.Id)
|
.LeftJoin<SysUserInfor>((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<BllArrivalNoticeDetail>().First(m => m.Id == id && m.IsDel == "0");
|
if (asnDetail == null)
|
{
|
throw new Exception("未查询到单据明细信息,请核实");
|
}
|
|
var packInfo = Db.Queryable<SysPackag>().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);
|
}
|
}
|
|
//获取标签信息(生成标签)
|
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 必填验证
|
|
//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 单据、物料、包装、标签信息获取
|
|
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);
|
}
|
}
|
|
|
}
|
}
|