using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using Model.ModelDto.BllCheckDto;
|
using SqlSugar;
|
using WMS.Entity.BllCheckEntity;
|
using WMS.Entity.Context;
|
using WMS.Entity.DataEntity;
|
using WMS.Entity.SysEntity;
|
using WMS.IBLL.IPdaServer;
|
|
namespace WMS.BLL.BllPdaServer
|
{
|
public class PdaCrServer : IPdaCrServer
|
{
|
private static readonly SqlSugarScope Db = DataContext.Db;
|
|
|
#region 盘点
|
|
//获取盘库单正在执行单号
|
public List<string> GetStockCheckNoList(string palletNo)
|
{
|
try
|
{
|
List<string> list;
|
if (!string.IsNullOrWhiteSpace(palletNo))
|
{
|
list = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo && m.Status == 2).Select(m => m.CRNo).Distinct().ToList();
|
|
}
|
else
|
{
|
list = Db.Queryable<BllStockCheck>().Where(m => m.IsDel == "0" && m.Status == 1).Select(m => m.CRNo)
|
.Distinct().ToList();
|
}
|
|
return list;
|
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
//获取盘点明细物料批次信息
|
public List<StockCheckDetailDto> GetStockCheckDetailList(string crNo, string palletNo)
|
{
|
try
|
{
|
if (string.IsNullOrWhiteSpace(crNo))
|
{
|
throw new Exception("盘点单据不能为空");
|
}
|
|
var list = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == crNo);
|
|
if (!string.IsNullOrWhiteSpace(palletNo))
|
{
|
list = list.Where(m => m.PalletNo == palletNo);
|
}
|
|
var data = list.GroupBy(m => new { m.SkuNo, m.SkuName, m.LotNo }).Select(m => new StockCheckDetailDto()
|
{
|
SkuNo = m.SkuNo,
|
SkuName = m.SkuName,
|
LotNo = m.LotNo
|
}).ToList();
|
|
return data;
|
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
//获取要盘点的箱码信息(盘点记录中数据)
|
public List<StockCheckLogDto> GetStockCheckLogList(string crNo, string crDetail, string palletNo, string boxNo)
|
{
|
try
|
{
|
#region 判断
|
if (string.IsNullOrWhiteSpace(crNo))
|
{
|
throw new Exception("盘点单据不能为空");
|
}
|
if (string.IsNullOrWhiteSpace(crDetail))
|
{
|
throw new Exception("物料批次不能为空");
|
}
|
if (string.IsNullOrWhiteSpace(palletNo))
|
{
|
throw new Exception("托盘码不能为空");
|
}
|
#endregion
|
|
var detail = crDetail.Split("-");
|
var sku = detail[0];
|
var lotNo = detail.Length == 3 ? detail[1] + "-" + detail[2] : detail[1];
|
var list = Db.Queryable<BllStockCheckLog>().Where(m => m.IsDel == "0" && m.CRNo == crNo);
|
//var deList= Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.SkuNo == sku && m.LotNo == lotNo && m.PalletNo == palletNo);
|
//if (deList.Count() == 0)
|
//{
|
// throw new Exception("未查询到托盘上的盘点物料批次信息");
|
//}
|
|
list = list.Where(m => m.SkuNo == sku && m.LotNo == lotNo && m.PalletNo == palletNo);
|
if (!string.IsNullOrWhiteSpace(boxNo))
|
{
|
list = list.Where(m => m.BoxNo == boxNo);
|
}
|
|
var data = list.Select(m => new StockCheckLogDto()
|
{
|
BoxNo = m.BoxNo,
|
BoxNo3 = m.BoxNo3,
|
SkuNo = m.SkuNo,
|
SkuName = m.SkuName,
|
LotNo = m.LotNo,
|
Qty = m.Qty,
|
CheckResult = m.CheckResult,
|
|
}).ToList();
|
return data;
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
/// <summary>
|
/// 盘点库存
|
/// </summary>
|
/// <param name="crNo">单据号</param>
|
/// <param name="crDetail">物料批次</param>
|
/// <param name="palletNo">托盘码</param>
|
/// <param name="qty">数量</param>
|
/// <param name="sQty">实际数量</param>
|
/// <param name="userId"></param>
|
public void CrSetCheck(string crNo, string crDetail, string palletNo, int? qty, int sQty, int userId)
|
{
|
try
|
{
|
#region 判断
|
|
if (string.IsNullOrWhiteSpace(crNo))
|
{
|
throw new Exception("盘点单据不能为空");
|
}
|
if (string.IsNullOrWhiteSpace(crDetail))
|
{
|
throw new Exception("物料批次不能为空");
|
}
|
if (string.IsNullOrWhiteSpace(palletNo))
|
{
|
throw new Exception("托盘码不能为空");
|
}
|
|
#endregion
|
|
//箱码为空 是整托要盘点的都正常
|
//物料-批次
|
var detail = crDetail.Split("-");
|
//物料号
|
var sku = detail[0];
|
//批次号
|
var lotNo = detail.Length == 3 ? detail[1] + "-" + detail[2] : detail[1];
|
//盘点明细
|
var checkDetail = Db.Queryable<BllStockCheckDetail>().First(m =>
|
m.IsDel == "0" && m.CRNo == crNo && m.PalletNo == palletNo && m.SkuNo == sku && m.LotNo == lotNo);
|
//判断是否存在盘点明细
|
if (checkDetail == null)
|
{
|
throw new Exception("未查询到未盘点的盘点明细信息");
|
}
|
//盘点记录
|
var checkLog = Db.Queryable<BllStockCheckLog>().First(m =>
|
m.IsDel == "0" && m.CRNo == crNo && m.PalletNo == palletNo && m.SkuNo == sku && m.LotNo == lotNo && m.CheckResult == null);
|
//时间
|
var time = DateTime.Now;
|
|
#region 包装信息
|
var package = Db.Queryable<SysPackag>().Where(m => m.IsDel == "0");
|
var skuInfo = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == sku);
|
var pack = package.First(m => m.IsDel == "0" && m.PackagNo == skuInfo.PackagNo);
|
var pNum = 0;//托盘物品数量
|
if (pack.L5Num.HasValue)
|
{
|
pNum = (int)pack.L5Num;
|
}
|
else if (pack.L4Num.HasValue)
|
{
|
pNum = (int)pack.L4Num;
|
}
|
else if (pack.L3Num.HasValue)
|
{
|
pNum = (int)pack.L3Num;
|
}
|
else if (pack.L2Num.HasValue)
|
{
|
pNum = (int)pack.L2Num;
|
}
|
else if (pack.L1Num.HasValue)
|
{
|
pNum = (int)pack.L1Num;
|
}
|
if (pNum == 0)
|
{
|
throw new Exception($"绑定失败,{sku}物品包装未找到!");
|
}
|
|
if (sQty > pNum)
|
{
|
throw new Exception($"确认失败,托盘{palletNo}实际数量大于物品包装数量!请取出多余数量进行入库操作!");
|
}
|
#endregion
|
|
//判断盘点记录表是否为空
|
if (checkLog != null)
|
{
|
checkLog.RealQty = sQty; //记录 实际数量
|
checkLog.CheckResult = sQty == qty ? 0 : sQty < qty ? 1 : 2; //记录 盘点状态 0:正常、1:盘亏、2:盘盈
|
checkLog.CheckDate = time; //记录 盘点时间
|
checkLog.CheckUserId = userId; //记录 盘点人
|
|
checkDetail.RealQty = sQty; //明细 实际数量
|
checkDetail.CheckResult = sQty == qty ? 0 : sQty < qty ? 1 : 2; //明细 盘点状态 0:正常、1:盘亏、2:盘盈
|
//checkDetail.Status = sQty == qty ? 4 : 3; //明细 状态 3:已盘点
|
checkDetail.Status = 3; //明细 状态 3:已盘点
|
|
Db.Updateable(checkDetail).ExecuteCommand(); //修改盘点明细
|
Db.Updateable(checkLog).ExecuteCommand(); //修改盘点记录
|
}
|
|
#region 盘亏 盘盈无用代码
|
////盘亏
|
//else if (sQty < qty)
|
//{
|
// if (checkLog.Count() == 0)
|
// {
|
// throw new Exception("未查询到托盘信息");
|
// }
|
|
// var list = checkLog.ToList();
|
// foreach (var l in list)
|
// {
|
// l.RealQty = sQty; //实际数量
|
// l.CheckResult = 1; //盘点状态 1:盘亏
|
// l.CheckDate = time; //盘点实际
|
// l.CheckUserId = userId; //盘点人
|
// }
|
|
// //盘点明细实际数量
|
// checkDetail.RealQty = 0;
|
|
// checkDetail.RealQty = sQty;
|
// Db.Updateable(checkDetail).ExecuteCommand(); //修改盘点明细
|
// Db.Updateable(list).ExecuteCommand(); //修改盘点记录
|
//}
|
////盘盈
|
//else if (sQty> qty)
|
//{
|
// var list = checkLog.ToList();
|
// foreach (var l in list)
|
// {
|
// l.RealQty = sQty; //实际数量
|
// l.CheckResult = 2; //盘点状态 2:盘盈
|
// l.CheckDate = time; //盘点实际
|
// l.CheckUserId = userId; //盘点人
|
// }
|
// checkDetail.RealQty = sQty;
|
// Db.Updateable(checkDetail).ExecuteCommand(); //修改盘点明细
|
// Db.Updateable(list).ExecuteCommand(); //修改盘点记录;
|
//}
|
//else
|
//{
|
// throw new Exception("实际数量为0,请核实!");
|
//}
|
#endregion
|
|
|
//获取该盘点单 盘点明细中未变更为已盘点的信息条数
|
var checkDetailCount = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == crNo && m.Status != 3 && m.CheckResult == null && m.RealQty == null).ToList();
|
//判断条数是否为0
|
if (checkDetailCount.Count <= 0)
|
{
|
//获取盘点单信息
|
var check = Db.Queryable<BllStockCheck>().First(m => m.CRNo == crNo && m.IsDel == "0");
|
check.Status = 2;
|
Db.Updateable(check).ExecuteCommand();
|
}
|
|
|
Db.CommitTran();
|
}
|
catch (Exception e)
|
{
|
Db.RollbackTran();
|
throw new Exception(e.Message);
|
}
|
}
|
|
#endregion
|
|
#region 库存查询
|
|
/// <summary>
|
/// pda库存查询
|
/// </summary>
|
/// <param name="locatNo">储位编号</param>
|
/// <param name="palletNo">托盘号</param>
|
/// <param name="skuName">物料名称</param>
|
/// <returns></returns>
|
public List<DataStockDetail> GetStockQueryList(string locatNo, string palletNo, string skuName)
|
{
|
string str = "select LocatNo,PalletNo,SkuName,Standard,LotNo,Qty,LockQty,FrozenQty,InspectQty from DataStockDetail Where IsDel = @isdel";
|
//判断储位编号是否为空
|
if (!string.IsNullOrEmpty(locatNo))
|
{
|
str += " and LocatNo like @locatno";
|
}
|
//判断托盘号是否为空
|
if (!string.IsNullOrEmpty(palletNo))
|
{
|
str += " and PalletNo like @palletno";
|
}
|
//判断物料名称是否为空
|
if (!string.IsNullOrEmpty(skuName))
|
{
|
str += " and SkuName like @skuname";
|
}
|
//排序
|
str += " order by LotNo,LocatNo,PalletNo";
|
List<DataStockDetail> stockList = Db.Ado.SqlQuery<DataStockDetail>(str, new
|
{
|
isdel = "0", //是否删除
|
locatno = "%" + locatNo + "%", //储位编号
|
palletno = "%" + palletNo + "%", //托盘号
|
skuname = "%" + skuName + "%" //物料名称
|
});
|
return stockList;
|
}
|
|
#endregion
|
|
}
|
}
|