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<BllBoxInfo>, 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<BoxInfoVm>(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<SysMaterials>().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<BoxInfoVm>(str);
|
if (box.Qty == null)
|
{
|
box.Qty = 0;
|
}
|
box.Qty = box.Qty + model.Qty;
|
var package = Db.Queryable<SysPackag>().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<BllBoxInfo>().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<BllBoxInfo>().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<BoxInfoDto> 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<Func<BllBoxInfo, bool>> item = Expressionable.Create<BllBoxInfo>()
|
.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<SysUserInfor>((a, b) => a.CreateUser == b.Id)
|
.LeftJoin<SysUserInfor>((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<string> boxList = new List<string>();
|
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<BoxInfoDto> 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<BoxInfoDto>(sql);
|
return data;
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
|
|
//获取标签箱码信息
|
public List<BoxInfoDto> GetLabelBoxList(LabelBoxInfoVm model, out int count)
|
{
|
try
|
{
|
Expression<Func<BllBoxInfo, bool>> item = Expressionable.Create<BllBoxInfo>()
|
.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<SysUserInfor>((a, b) => a.CreateUser == b.Id)
|
.LeftJoin<SysUserInfor>((a, b, c) => a.UpdateUser == c.Id)
|
.LeftJoin<SysMaterials>((a, b, c,d) => a.SkuNo == d.SkuNo)
|
.LeftJoin<SysUnit>((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<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 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<BllBoxInfo> 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<BllArrivalNoticeDetail>().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<BllArrivalNotice>().First(m => m.ASNNo == asnList.ASNNo && m.IsDel == "0");
|
if (asn == null)
|
{
|
throw new Exception("未查询到单据信息");
|
}
|
|
var pack = Db.Queryable<SysPackag>().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<BllBoxInfo>().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<BllBoxInfo>();
|
|
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<BllBoxInfo>().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<BllBoxInfo>().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<BoxInfoDto> GetBuDaLabelList(string boxNo, string endBoxNo, string boxNo2, string endBoxNo2, string type, int userId)
|
{
|
try
|
{
|
//打印数据集合
|
var printList = new List<BoxInfoDto>();
|
|
List<BoxInfoDto> printModelList = new List<BoxInfoDto>();
|
//List<WmsLabelPrintLog> printlog = new List<WmsLabelPrintLog>();
|
//标签表数据信息
|
var list = Db.Queryable<BllBoxInfo>().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<BoxInfoDto>(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<BllBoxInfo>(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<BoxInfoDto>(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<BoxInfoDto>(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<BllBoxInfo>(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<BoxInfoDto>(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<BoxInfoDto>(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<BllBoxInfo>(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<BoxInfoDto>(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<BoxInfoDto>(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<BoxInfoDto>(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<BoxInfoDto>(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<BllBoxInfo>(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<BoxInfoDto>(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<BoxInfoDto>(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<string> GetLotNoListByAsn(string asnNo)
|
{
|
try
|
{
|
var data = new List<string>();
|
var asnList = Db.Queryable<BllArrivalNoticeDetail>().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<BllArrivalNoticeDetail>().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<BllBoxInfo>().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<BllBoxInfo>().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<BllBoxInfo>().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);
|
}
|
}
|
|
|
}
|
}
|