一次合格与抛光品仓库查询逻辑调整,导出调整,盘点调整!!!
This commit is contained in:
BIN
ZR.Admin.WebApi/wwwroot/export/一次合格品仓库数据04-08-153252.xlsx
Normal file
BIN
ZR.Admin.WebApi/wwwroot/export/一次合格品仓库数据04-08-153252.xlsx
Normal file
Binary file not shown.
BIN
ZR.Admin.WebApi/wwwroot/export/抛光仓库数据04-08-154205.xlsx
Normal file
BIN
ZR.Admin.WebApi/wwwroot/export/抛光仓库数据04-08-154205.xlsx
Normal file
Binary file not shown.
@@ -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
|
||||
}
|
||||
);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user