一次合格与抛光品仓库查询逻辑调整,导出调整,盘点调整!!!

This commit is contained in:
2025-04-08 18:26:36 +08:00
parent 2c5caafacd
commit c4eed6c31d
5 changed files with 134 additions and 57 deletions

View File

@@ -280,6 +280,7 @@ namespace ZR.Service.mes.wms
)
.ToList();
//TODO 取出库存表 WmOneTimeInventory 最小CreatedTime时间
DateTime minDateTime =
Context
.Queryable<WmOneTimeInventory>()
@@ -294,9 +295,39 @@ namespace ZR.Service.mes.wms
.ToList();
foreach (WmOneTimeInventoryDto item in list)
{
//TODO 20250408 盘点时间修正(三个时间比对)
WmOneTimeRecord minCheckRecord =
wmOneTimeRecords
.Where(o => o.Partnumber == item.Partnumber && o.ChangeType == 3)
.OrderByDescending(o => o.ActionTime)
.FirstOrDefault();
DateTime minCheckRecordTime = DateTime.MinValue;
int minCheckRecordQuantity = 0;
if (minCheckRecord != null)
{
minCheckRecordTime = minCheckRecord.ActionTime ?? DateTime.MinValue;
}
DateTime minCheckInventoryTime = item.CreatedTime ?? minDateTime;
//TODO 20250408修改 最小盘点时间判断/如有盘点记录,则优先取盘点记录数据
DateTime checkTime =
minCheckRecordTime > minCheckInventoryTime
? minCheckRecordTime
: minCheckInventoryTime;
if (checkTime == minCheckRecordTime)
{
// TODO 20250408 如果最早记录是盘点记录,则取盘点变动数量
minCheckRecordQuantity = minCheckRecord.ChangeQuantity ?? 0;
}
else
{
minCheckRecordQuantity = item.Quantity.Value;
}
int? runum = wmOneTimeRecords
.Where(o =>
o.ActionTime >= item.CreatedTime
o.ActionTime >= checkTime
&& o.Partnumber == item.Partnumber
&& o.ChangeType == 1
)
@@ -304,13 +335,15 @@ namespace ZR.Service.mes.wms
.Sum();
int? chunum = wmOneTimeRecords
.Where(o =>
o.ActionTime >= item.CreatedTime
o.ActionTime >= checkTime
&& o.Partnumber == item.Partnumber
&& o.ChangeType == 2
)
.Select(o => o.ChangeQuantity)
.Sum();
item.RealQuantity = item.Quantity.Value + (runum.Value - chunum.Value);
item.RealQuantity = minCheckRecordQuantity + (runum.Value - chunum.Value);
item.CreatedTime = checkTime;
}
list = list.Where(it => it.RealQuantity != 0 || it.Quantity != 0)
.Where(it => !string.IsNullOrEmpty(it.Partnumber))
@@ -611,6 +644,7 @@ namespace ZR.Service.mes.wms
}
}
// 盘点
public int DoWmOneTimeStocktaking(WmOneTimeInventory parm)
{
if (parm.Quantity < 0)
@@ -621,7 +655,7 @@ namespace ZR.Service.mes.wms
{
Context.Ado.BeginTran();
// 检查是否存在库中
WmOneTimeInventory oneTImeInventory = Context
/* WmOneTimeInventory oneTImeInventory = Context
.Queryable<WmOneTimeInventory>()
.Where(it => it.Id == parm.Id)
.Where(it => it.Status == 1)
@@ -631,8 +665,9 @@ namespace ZR.Service.mes.wms
Context.Ado.RollbackTran();
throw new Exception("盘点记录不存在" + parm.Id);
}
Context.Updateable(parm).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
Context.Updateable(parm).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();*/
// 已有则新增记录
//TODO 20250408 新逻辑调整 只添加盘点记录 算库存数时自动调整
string code = !string.IsNullOrEmpty(parm.WorkOrder)
? parm.WorkOrder
: SnowFlakeSingle.Instance.NextId().ToString();
@@ -642,7 +677,7 @@ namespace ZR.Service.mes.wms
parm.Partnumber,
3,
parm.Quantity,
parm.ActionTime,
parm.ActionTime ?? DateTime.Now,
parm.Remark,
parm.CreatedBy
);
@@ -687,44 +722,47 @@ namespace ZR.Service.mes.wms
.OrderBy(it => it.Description)
.ToList();
}
//导出
public List<WmOneTimeInventoryExportDto> GetExportList(WmOneTimeInventoryQueryDto parm)
{
try
{
List<WmMaterial> materials = GetWmMaterialList(parm.Partnumber);
/* List<WmMaterial> materials = GetWmMaterialList(parm.Partnumber);
// 获取所有partnumber列表
List<string> partnumbers = materials
.Where(it => !string.IsNullOrEmpty(it.Partnumber))
.Select(it => it.Partnumber)
.Distinct()
.ToList();
// 获取所有partnumber列表
List<string> partnumbers = materials
.Where(it => !string.IsNullOrEmpty(it.Partnumber))
.Select(it => it.Partnumber)
.Distinct()
.ToList();
// 批量获取盘点数和现有库存
Dictionary<string, object> stockNumbers = GetBatchOneTimeStockPartNum(partnumbers);
Dictionary<string, int> realNumbers = GetBatchOneTimeRealPartNum(partnumbers);
// 批量获取盘点数和现有库存
Dictionary<string, object> stockNumbers = GetBatchOneTimeStockPartNum(partnumbers);
Dictionary<string, int> realNumbers = GetBatchOneTimeRealPartNum(partnumbers);*/
// 更新盘点时间
DateTime dateTime = DateTime.Now.ToLocalTime();
/*DateTime dateTime = DateTime.Now.ToLocalTime();*/
//TODO 20250408 新导出逻辑
// 构建导出数据
List<WmOneTimeInventoryExportDto> exportDto = materials
WmOneTimeInventoryQueryDto queryParams = new()
{
PageSize = 10000,
PageNum = 1
};
List<WmOneTimeInventoryExportDto> exportDto = GetListNew(queryParams).Result
.Select(it =>
{
bool found1 = stockNumbers.TryGetValue(it.Partnumber, out object value1);
int stockNumber = found1 && value1 != null ? Convert.ToInt32(value1) : 0;
bool found2 = realNumbers.TryGetValue(it.Partnumber, out int realNumber);
return new WmOneTimeInventoryExportDto
{
= it.Partnumber,
= it.Color,
= it.Specification,
= it.Description,
= stockNumber,
= found2 ? realNumber : 0,
= dateTime,
= it.Quantity ?? 0,
= it.RealQuantity,
= it.CreatedTime,
};
})
.ToList();
@@ -929,7 +967,9 @@ namespace ZR.Service.mes.wms
//TODO 判断oneTimeRecordList中是否存在oneTimeInventoryList没有的零件号
// 提取 oneTimeInventoryList 中的所有零件号
HashSet<string> oneTimeInventoryPartnumbers = new HashSet<string>(oneTimeInventoryList.Select(i => i.Partnumber));
HashSet<string> oneTimeInventoryPartnumbers = new HashSet<string>(
oneTimeInventoryList.Select(i => i.Partnumber)
);
foreach (var recordItem in oneTimeRecordList)
{
if (!oneTimeInventoryPartnumbers.Contains(recordItem.Partnumber))
@@ -940,14 +980,17 @@ namespace ZR.Service.mes.wms
Name = "该零件号记录丢失",
Partnumber = recordItem.Partnumber,
Description = "该零件号与盘点数据不匹配。请确认情况,是否未盘点到!",
ErrorMessage = $"检测到【一次合格品记录】中的零件号在盘点清单中不存在。记录时间: {recordItem.ActionTime}",
ErrorMessage =
$"检测到【一次合格品记录】中的零件号在盘点清单中不存在。记录时间: {recordItem.ActionTime}",
CheckTime = DateTime.Now
}
);
}
}
//TODO 判断polishRecordList中是否存在polishInventoryList没有的零件号
HashSet<string> polishInventoryPartnumbers = new HashSet<string>(polishInventoryList.Select(i => i.Partnumber));
HashSet<string> polishInventoryPartnumbers = new HashSet<string>(
polishInventoryList.Select(i => i.Partnumber)
);
foreach (var recordItem in polishRecordList)
{
if (!polishInventoryPartnumbers.Contains(recordItem.Partnumber))
@@ -958,7 +1001,8 @@ namespace ZR.Service.mes.wms
Name = "该零件号记录丢失",
Partnumber = recordItem.Partnumber,
Description = "该零件号与盘点数据不匹配。请确认情况,是否未盘点到!",
ErrorMessage = $"检测到【抛光品记录】中的零件号在盘点清单中不存在。记录时间: {recordItem.ActionTime}",
ErrorMessage =
$"检测到【抛光品记录】中的零件号在盘点清单中不存在。记录时间: {recordItem.ActionTime}",
CheckTime = DateTime.Now
}
);

View File

@@ -135,7 +135,7 @@ namespace ZR.Service.mes.wms
it => it.FinishedPartNumber == parm.Partnumber
)
.Where(it => !it.ProductDescription.Contains("倒车雷达"))
.Where(it => it.StartTime >= parm.StartTime)
.Where(it => it.StartTime >= parm.StartTime)
.Where(it => it.QualifiedNumber > 0)
.Where(it => it.Remark == "抛光")
.ToList();

View File

@@ -313,7 +313,34 @@ namespace ZR.Service.mes.wms
// TODO 匹配记录partnumber零件号时间范围
foreach (WmPolishInventoryDto item in list)
{
// TODO 获取实际库存 item.quantity(盘点开始数量) + recourd 记录的入库数量 - 出库数量(筛选条件是 时间区间【item.CreatedTime】 + partnumber[item.partnumber]
//TODO 20250408 盘点时间修正(三个时间比对)
WmPolishRecord minCheckRecord =
wmPolishRecords
.Where(o => o.Partnumber == item.Partnumber && o.ChangeType == 3)
.OrderByDescending(o => o.ActionTime)
.FirstOrDefault();
DateTime minCheckRecordTime = DateTime.MinValue;
int minCheckRecordQuantity = 0;
if (minCheckRecord != null)
{
minCheckRecordTime = minCheckRecord.ActionTime ?? DateTime.MinValue;
}
DateTime minCheckInventoryTime = item.CreatedTime ?? minDateTime;
//TODO 20250408修改 最小盘点时间判断/如有盘点记录,则优先取盘点记录数据
DateTime checkTime =
minCheckRecordTime > minCheckInventoryTime
? minCheckRecordTime
: minCheckInventoryTime;
if (checkTime == minCheckRecordTime)
{
// TODO 20250408 如果最早记录是盘点记录,则取盘点变动数量
minCheckRecordQuantity = minCheckRecord.ChangeQuantity ?? 0;
}
else
{
minCheckRecordQuantity = item.Quantity.Value;
}
int? runum = wmPolishRecords
.Where(o =>
o.ActionTime >= item.CreatedTime
@@ -330,7 +357,8 @@ namespace ZR.Service.mes.wms
)
.Select(o => o.ChangeQuantity)
.Sum();
item.RealQuantity = item.Quantity.Value + (runum.Value - chunum.Value);
item.RealQuantity = minCheckRecordQuantity + (runum.Value - chunum.Value);
item.CreatedTime = checkTime;
}
list = list.Where(it => it.RealQuantity != 0 || it.Quantity != 0)
@@ -696,7 +724,7 @@ namespace ZR.Service.mes.wms
throw new Exception(e.Message);
}
}
// 盘点
public int DoWmPolishStocktaking(WmPolishInventory parm)
{
if (parm.Quantity < 0)
@@ -707,7 +735,7 @@ namespace ZR.Service.mes.wms
{
Context.Ado.BeginTran();
// 检查是否存在库中
WmPolishInventory polishInventory = Context
/* WmPolishInventory polishInventory = Context
.Queryable<WmPolishInventory>()
.Where(it => it.Id == parm.Id)
.Where(it => it.Status == 1)
@@ -717,7 +745,7 @@ namespace ZR.Service.mes.wms
Context.Ado.RollbackTran();
throw new Exception("盘点记录不存在" + parm.Id);
}
Context.Updateable(parm).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
Context.Updateable(parm).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();*/
// 已有则新增记录
string code = !string.IsNullOrEmpty(parm.WorkOrder)
? parm.WorkOrder
@@ -728,7 +756,7 @@ namespace ZR.Service.mes.wms
parm.Partnumber,
3,
parm.Quantity,
parm.ActionTime,
parm.ActionTime ?? DateTime.Now,
parm.Remark,
parm.CreatedBy
);
@@ -779,39 +807,43 @@ namespace ZR.Service.mes.wms
{
try
{
List<WmMaterial> materials = GetWmMaterialList(parm.Partnumber);
/* List<WmMaterial> materials = GetWmMaterialList(parm.Partnumber);
// 获取所有partnumber列表
List<string> partnumbers = materials
.Where(it => !string.IsNullOrEmpty(it.Partnumber))
.Select(it => it.Partnumber)
.Distinct()
.ToList();
// 获取所有partnumber列表
List<string> partnumbers = materials
.Where(it => !string.IsNullOrEmpty(it.Partnumber))
.Select(it => it.Partnumber)
.Distinct()
.ToList();
// 批量获取盘点数和现有库存
Dictionary<string, object> stockNumbers = GetBatchPolishStockPartNum(partnumbers);
Dictionary<string, int> realNumbers = GetBatchPolishRealPartNum(partnumbers);
// 批量获取盘点数和现有库存
Dictionary<string, object> stockNumbers = GetBatchPolishStockPartNum(partnumbers);
Dictionary<string, int> realNumbers = GetBatchPolishRealPartNum(partnumbers);
// 更新盘点时间
DateTime dateTime = DateTime.Now.ToLocalTime();
// 更新盘点时间
DateTime dateTime = DateTime.Now.ToLocalTime();*/
//TODO 20250408 新导出逻辑
// 构建导出数据
List<WmPolishInventoryExportDto> exportDto = materials
WmPolishInventoryQueryDto queryParams = new()
{
PageSize = 10000,
PageNum = 1
};
// 构建导出数据
List<WmPolishInventoryExportDto> exportDto = GetListNew(queryParams).Result
.Select(it =>
{
bool found1 = stockNumbers.TryGetValue(it.Partnumber, out object value1);
int stockNumber = found1 && value1 != null ? Convert.ToInt32(value1) : 0;
bool found2 = realNumbers.TryGetValue(it.Partnumber, out int realNumber);
return new WmPolishInventoryExportDto
{
= it.Partnumber,
= it.Color,
= it.Specification,
= it.Description,
= dateTime,
= stockNumber,
= found2 ? realNumber : 0,
= it.Quantity ?? 0,
= it.RealQuantity,
= it.CreatedTime,
};
})
.ToList();
@@ -867,6 +899,7 @@ namespace ZR.Service.mes.wms
/// <returns></returns>
public (string, object, object) ImportExcel(List<WmPolishInventoryExportDto> importList)
{
List<WmPolishInventory> wmPolishInventorylist = importList
.Select(it => new WmPolishInventory
{