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;
|
|
namespace WMS.BLL.BllAsnServer
|
{
|
public class BllBoxInfoServer : DbHelper<BllBoxInfo>, IBllBoxInfoServer
|
{
|
private static readonly SqlSugarScope Db = DataContext.Db;
|
|
public BllBoxInfoServer() : base(Db)
|
{
|
}
|
|
#region 箱支关系函数
|
//添加箱码信息
|
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);
|
var box1 = Db.Queryable<BllBoxInfo>().First(m => m.BoxNo3 == model.BoxNo3 && m.IsDel == "0");
|
if (box1 != null)
|
{
|
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);
|
|
var materialModel = Db.Queryable<SysMaterials>()
|
.LeftJoin<SysPackag>((tb1, tb2) => tb1.PackagNo == tb2.PackagNo)
|
.Where(tb1 => tb1.SkuNo == model.SkuNo && tb1.IsDel == "0")
|
.Select((tb1, tb2) => new BoxInfoVm
|
{
|
SkuNo = tb1.SkuNo,
|
SkuName = tb1.SkuName,
|
Warranty = tb1.Warranty,
|
FullQty = SqlFunc.IF(tb2.Level == 5).Return(tb2.L4Num)
|
.ElseIF(tb2.Level == 4).Return(tb2.L3Num)
|
.ElseIF(tb2.Level == 3).Return(tb2.L2Num).End(0)
|
}).ToList();
|
|
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);
|
|
var boxs = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == model.BoxNo).Select(m => new BoxInfoVm
|
{
|
Qty = SqlFunc.AggregateSum(m.Qty)
|
});
|
var box = boxs.First();
|
|
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);
|
|
|
BllBoxInfo newboxModel = new BllBoxInfo()
|
{
|
BoxNo=model.BoxNo,
|
BoxNo2 = model.BoxNo2,
|
BoxNo3 = model.BoxNo3,
|
SkuNo = model.SkuNo,
|
SkuName = materialModel[0].SkuName,
|
LotNo = model.LotNo,
|
LotText = model.LotText,
|
Qty = (decimal)model.Qty,
|
FullQty = materialModel[0].FullQty,
|
ProductionTime = DateTime.Parse(model.ProductionTime),
|
ExpirationTime = model.ExpirationTime,
|
InspectMark = model.InspectMark,
|
InspectStatus = sku.IsInspect,
|
BitBoxMark = model.BitBoxMark,
|
Origin = model.Origin,
|
Status = "0",
|
CreateUser = (int)model.CreateUser
|
};
|
|
var rowCount = Db.Insertable(newboxModel).ExecuteCommand();
|
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);
|
|
var boxModel = Db.Queryable<BllBoxInfo>().First(m => m.Id == model.Id && m.Status == "0");
|
|
if (boxInfo.Status != "0")
|
{
|
return "-1:状态已变更无法删除!";
|
}
|
|
boxInfo.IsDel = "1";
|
boxInfo.UpdateTime = DateTime.Now;
|
boxInfo.UpdateUser = model.CreateUser;
|
|
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;
|
}
|
item.BitBoxMark = "1";
|
}
|
}
|
Db.Updateable(boxInfo).ExecuteCommand();
|
Db.Updateable(boxInfoList).ExecuteCommand();
|
|
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.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)
|
.Select((a, b, c) => 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,
|
SamplingQty = a.SamplingQty,
|
SkuNo = a.SkuNo,
|
SkuName = a.SkuName,
|
Standard = a.Standard,
|
PackageStandard = a.PackageStandard,
|
|
LotNo = a.LotNo,
|
LotText = a.LotText,
|
|
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 = (int)a.QtyCount,
|
QtyOrd = (int)a.QtyOrd,
|
|
|
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 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.LotNo = asnDetail.LotNo;
|
data.SupplierLot = asnDetail.SupplierLot;
|
data.PackageStandard = str;
|
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 单据、物料、包装、标签信息获取
|
|
var asnList = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.Id == imId && m.IsDel == "0");
|
if (asnList == null)
|
{
|
throw new Exception("未查询到单据明细信息");
|
}
|
if (asnList.Qty<=0)
|
{
|
throw new Exception("单据数量不能小于等于0");
|
}
|
//if (string.IsNullOrWhiteSpace(asnList.LotNo))
|
//{
|
// throw new Exception("单据批次号不能为空");
|
//}
|
if (string.IsNullOrWhiteSpace(asnList.BoxCodeStr))
|
{
|
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();
|
|
//验证已生成的标签数量+取样数量是否达到单据的计划数量
|
var imLabel = label.Where(m => m.ASNDetailNo == imId).Sum(m => m.Qty + (m.SamplingQty == null ? 0 : m.SamplingQty));
|
if (imLabel >= asnList.Qty)
|
{
|
throw new Exception("当前明细已生成足够数量的标签请核实。");
|
}
|
|
#endregion
|
|
#region 包装查询
|
|
var bNum = 0;//箱物品数量
|
var zNum = 0;//支物品数量
|
var packLevel = 0;
|
|
if (pack.L2Num.HasValue)
|
{
|
if (pack.L2Name != "托")
|
{
|
packLevel = 1;//JC34项目只有一级标签
|
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 一级包装
|
|
#region 到货数量
|
// 根据用户输入的箱数量计算需要的条码数
|
//var labQty = label.Sum(m => m.Qty);
|
//var qty = asnList.Qty - labQty;//当前单据剩余需要打印的物料数量(不是标签数量)
|
//if (qty <= 0)
|
//{
|
// throw new Exception("当前单据物料标签已打印完毕,如有需要请补打");
|
//}
|
//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 / bNum).ToString());//标签数量
|
//}
|
//else
|
//{
|
// throw new Exception("当前单据物料是一级包装,未查询到一级包装信息");
|
//}
|
|
#region 获取/生成批次号
|
|
string maxLotNoStr = ""; //批次号
|
string maxBoxCode = ""; //箱码号
|
|
maxLotNoStr = asnList.BoxCodeStr;//asnList.LotNo;
|
if (string.IsNullOrEmpty(asnList.LotNo))
|
{
|
maxBoxCode = label.Where(m => m.ASNDetailNo == asnList.Id).Max(a => a.BoxNo);
|
}
|
else
|
{
|
maxBoxCode = label.Where(m => m.LotNo == maxLotNoStr).Max(a => a.BoxNo);
|
}
|
#endregion
|
|
for (int i = 1; i <= labelNum; i++)
|
{
|
decimal boxQty = 0;
|
if (i == labelNum)
|
{
|
// 最后一个条码
|
var s = bNum * (i - 1);
|
if (bNum > qty - s)
|
{
|
boxQty = qty - s;// 数量
|
}
|
else
|
{
|
boxQty = bNum;// 数量
|
}
|
}
|
else
|
{
|
boxQty = bNum; // 数量
|
}
|
|
//获取箱码
|
if (string.IsNullOrWhiteSpace(maxBoxCode))
|
{
|
var str = "B" + maxLotNoStr + "000001"; //批号+ 流水 B 230201 0001 000001
|
maxBoxCode = str;
|
}
|
else
|
{
|
maxBoxCode = maxBoxCode.Substring(0, maxBoxCode.Length-6) + (int.Parse(maxBoxCode.Substring(maxBoxCode.Length - 6, 6)) + 1).ToString().PadLeft(6, '0');
|
}
|
|
DateTime? storeTime2 = null;
|
// 将条码保存到原料条码表
|
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 = asnList.LotNo,//maxLotNoStr,
|
Standard = asnList.Standard,
|
PackageStandard = packStr,
|
SupplierLot = supplierLot,
|
InspectMark = "0",
|
BitBoxMark = bNum > boxQty ? "1" : "0",
|
InspectStatus = "0",
|
|
ProductionTime = DateTime.Parse(productionTime),
|
StoreTime = string.IsNullOrWhiteSpace(storeTime) ? storeTime2 : DateTime.Parse(storeTime ),
|
ExpirationTime = DateTime.Parse(expirationTime),
|
|
Origin = "WMS生成",
|
CreateUser = userId,
|
CreateTime = DateTime.Now,
|
};
|
|
Db.Insertable(labelModel).ExecuteCommand();
|
modelList.Add(labelModel);
|
}
|
|
#endregion
|
}
|
else //(packLevel == 2)
|
{
|
#region 二级包装
|
|
#region 增加到货数量
|
// 根据用户输入的箱数量计算需要的条码数
|
//var labQty = label.Sum(m => m.Qty);
|
//var qty2 = asnList.Qty - labQty;
|
//if (qty2 <= 0)
|
//{
|
// throw new Exception("当前单据物料标签已打印完毕,如有需要请补打");
|
//}
|
//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 = ""; //支码
|
|
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);//支号
|
#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, 11) + (int.Parse(maxboxcode2.Substring(11, 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, 11) + (int.Parse(maxboxcode3.Substring(11, 4)) + 1).ToString().PadLeft(4, '0');
|
}
|
|
// 将条码保存到原料条码表
|
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 = asnList.SupplierLot,
|
InspectMark = "0",
|
BitBoxMark = bNum > boxQty ? "1" : "0",
|
InspectStatus = "0",
|
|
ProductionTime = DateTime.Parse(productionTime),
|
StoreTime = DateTime.Parse(storeTime),
|
ExpirationTime = DateTime.Parse(expirationTime),
|
|
Origin = "WMS生成",
|
CreateUser = userId,
|
CreateTime = DateTime.Now,
|
};
|
|
Db.Insertable(labelModel).ExecuteCommand();
|
modelList.Add(labelModel);
|
}
|
|
|
}
|
|
#endregion
|
}
|
|
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();
|
|
var funSet = Db.Queryable<SysFunSetting>().First(m => m.IsDel == "0" && m.FunSetName == "物料码类型" && m.IsEnable == "NO");
|
|
|
var allotSet = 1;//分配规则设定
|
|
if (funSet != null)
|
{
|
switch (funSet.SetValue)
|
{
|
case "One":
|
allotSet = 1;//一维条形码
|
break;
|
case "Two":
|
allotSet = 2;//二维码
|
break;
|
default:
|
allotSet = 1;// 默认:一维条形码、
|
break;
|
}
|
}
|
#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}信息");
|
}
|
// 物料条码信息赋值
|
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.ProductionTime = data.ProductionTime;//生产日期
|
|
model.Qty = dataList.Sum(m => m.Qty);// 数量
|
|
model.BoxNo = data.BoxNo; // 箱号
|
|
model.ImgStr = allotSet == 1 ? BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false) : BarcodeHelper.GetQrCodeBase64(model.BoxNo, 85, 85);
|
|
// 添加到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}信息");
|
}
|
// 物料条码信息赋值
|
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.ProductionTime = data.ProductionTime;//生产日期
|
|
model.Qty = data1.Sum(m => m.Qty);// 数量
|
|
model.BoxNo = data.BoxNo; // 箱号
|
|
model.ImgStr = allotSet == 1 ? BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false) : BarcodeHelper.GetQrCodeBase64(model.BoxNo, 85, 85);
|
|
// 添加到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}信息");
|
}
|
// 物料条码信息赋值
|
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.ProductionTime = data.ProductionTime;//生产日期
|
|
model.Qty = data.Qty;// 数量
|
|
model.BoxNo = data.BoxNo3; // 支号
|
|
model.ImgStr = allotSet == 1 ? BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false) : BarcodeHelper.GetQrCodeBase64(model.BoxNo, 85, 85);
|
|
// 添加到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)
|
{
|
// 物料条码信息赋值
|
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.ProductionTime = data.ProductionTime;//生产日期
|
|
model.Qty = data.Qty;// 数量
|
|
model.BoxNo = data.BoxNo3; // 箱号
|
|
model.ImgStr = allotSet == 1 ? BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false) : BarcodeHelper.GetQrCodeBase64(model.BoxNo, 85, 85);
|
|
// 添加到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($"当前支码不是箱码内");
|
}
|
|
|
// 物料条码信息赋值 箱码
|
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.ProductionTime = data.ProductionTime;//生产日期
|
model1.Qty = dataList.Sum(m => m.Qty);// 数量
|
model1.BoxNo = data.BoxNo; // 箱号
|
|
model1.ImgStr = allotSet == 1 ? BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 160, 40, false) : BarcodeHelper.GetQrCodeBase64(model1.BoxNo, 85, 85);
|
|
// 添加到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.ProductionTime = data.ProductionTime;//生产日期
|
model.Qty = data.Qty;// 数量
|
model.BoxNo = data.BoxNo3; // 支号
|
|
model.ImgStr = allotSet == 1 ? BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false) : BarcodeHelper.GetQrCodeBase64(model.BoxNo, 85, 85);
|
|
// 添加到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();
|
// 物料条码信息赋值
|
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.ProductionTime = boxData.ProductionTime;//生产日期
|
model.Qty = data.Sum(m => m.Qty); // 数量
|
model.BoxNo = boxData.BoxNo; // 支号
|
|
model.ImgStr = allotSet == 1 ? BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false) : BarcodeHelper.GetQrCodeBase64(model.BoxNo, 85, 85);
|
|
// 添加到list集合
|
printModelList.Add(model);
|
|
var i = 0;
|
foreach (var item in data2)
|
{
|
// 物料条码信息赋值
|
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.ProductionTime = item.ProductionTime;//生产日期
|
model1.Qty = item.Qty;// 数量
|
model1.BoxNo = item.BoxNo3; // 支号
|
|
model.ImgStr = allotSet == 1 ? BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 160, 40, false) : BarcodeHelper.GetQrCodeBase64(model1.BoxNo, 85, 85);
|
|
// 添加到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}箱码信息");
|
}
|
// 物料条码信息赋值
|
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.ProductionTime = boxData.ProductionTime;//生产日期
|
model.Qty = data.Sum(m => m.Qty); // 数量
|
model.BoxNo = boxData.BoxNo; // 支号
|
|
model.ImgStr = allotSet == 1 ? BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false) : BarcodeHelper.GetQrCodeBase64(model.BoxNo, 85, 85);
|
|
// 添加到list集合
|
printModelList.Add(model);
|
|
if (data.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0) //判断是否有支码
|
{
|
var i = 0;
|
foreach (var item in data)
|
{
|
// 物料条码信息赋值
|
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; // 储存期至
|
model.ProductionTime = item.ProductionTime;//生产日期
|
model1.Qty = item.Qty; // 数量
|
model1.BoxNo = item.BoxNo3; // 支号
|
|
model1.ImgStr = allotSet == 1 ? BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 160, 40, false) : BarcodeHelper.GetQrCodeBase64(model1.BoxNo, 85, 85);
|
|
|
// 添加到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}箱码信息");
|
}
|
// 物料条码信息赋值
|
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.ProductionTime = boxData.ProductionTime;//生产日期
|
model.Qty = data.Sum(m => m.Qty); // 数量
|
model.BoxNo = boxData.BoxNo; // 支号
|
|
model.ImgStr = allotSet == 1 ? BarcodeHelper.GetCodeBarBase64(model.BoxNo, 160, 40, false) : BarcodeHelper.GetQrCodeBase64(model.BoxNo, 85, 85);
|
|
// 添加到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())
|
{
|
// 物料条码信息赋值
|
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; // 储存期至
|
model.ProductionTime = item.ProductionTime;//生产日期
|
model1.Qty = item.Qty;// 数量
|
model1.BoxNo = item.BoxNo3; // 支号
|
|
model1.ImgStr = allotSet == 1 ? BarcodeHelper.GetCodeBarBase64(model1.BoxNo, 160, 40, false) : BarcodeHelper.GetQrCodeBase64(model1.BoxNo, 85, 85);
|
|
// 添加到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);
|
}
|
}
|
#endregion
|
|
#region 数据归档
|
/// <summary>
|
/// 获取箱支关系信息-归档数据
|
/// </summary>
|
/// <param name="model">查询条件</param>
|
/// <param name="count">检索行数</param>
|
/// <returns></returns>
|
public List<BoxInfoDto> GetArchivingBoxInfoList(BoxInfoVm model, out int count)
|
{
|
string sqlString = string.Empty;
|
string sqlCount = string.Empty;
|
string sqlPub = string.Empty;
|
|
try
|
{
|
sqlCount += "SELECT COUNT(tb1.ID) FROM ArchivingBoxInfo AS tb1 ";
|
sqlString += "SELECT tb1.*,tb2.RealName as CreateUserName,tb3.RealName as UpdateUserName FROM ArchivingBoxInfo AS tb1 ";
|
sqlPub += "LEFT JOIN SysUserInfor AS tb2 ON tb1.CreateUser = tb2.Id ";
|
sqlPub += "LEFT JOIN SysUserInfor AS tb3 ON tb1.UpdateUser = tb3.Id ";
|
sqlPub += $"WHERE tb1.BoxNo LIKE '%{model.BoxNo}%' AND tb1.BoxNo3 LIKE '%{model.BoxNo3}%' ";
|
sqlPub += $"AND tb1.SkuNo LIKE '%{model.SkuNo}%' AND tb1.LotNo LIKE '%{model.LotNo}%' ";
|
sqlPub += $"AND tb1.LotText LIKE '%{model.LotText}%' ";
|
|
if (!string.IsNullOrEmpty(model.InspectMark))
|
{
|
sqlPub += $"AND tb1.InspectMark = '{model.InspectMark}' ";
|
}
|
if (!string.IsNullOrEmpty(model.BitBoxMark))
|
{
|
sqlPub += $"AND tb1.BitBoxMark = '{model.BitBoxMark}' ";
|
}
|
if (!string.IsNullOrEmpty(model.ProductionTime))
|
{
|
sqlPub += $"AND tb1.CreateTime = '{model.ProductionTime}' ";
|
}
|
|
sqlCount += sqlPub + "AND tb1.IsDel = '0' AND tb1.SkuNo != '100099'" ;
|
sqlPub += "AND tb1.IsDel = '0' AND tb1.SkuNo != '100099' order by tb1.CreateTime desc ";
|
if (model.Page == 0)
|
{
|
model.Page = 1;
|
}
|
sqlString += sqlPub + $" offset {((model.Page - 1) * model.Limit)} rows fetch next {model.Limit} rows only;";
|
|
var com = new Common();
|
count = com.GetRowCount(sqlCount);
|
|
var modelList = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
|
|
return modelList;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
#endregion
|
}
|
}
|