using iWareCommon.Utils;
|
using iWareSql.MyDbContext;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
|
namespace Admin.NET.Application
|
{
|
/// <summary>
|
/// 库存帮助类
|
/// </summary>
|
public class InventoryHelper
|
{
|
/// <summary>
|
/// 清理库存
|
/// </summary>
|
/// <param name="updateDbIds">要更新的数据库库存ID集合</param>
|
/// <param name="containerVsMaterialList"></param>
|
/// <param name="quantity"></param>
|
/// <param name="materialCode">要处理的物料编号</param>
|
/// <returns></returns>
|
public static (List<ware_container_vs_material> deleteware_container_vs_materialList, List<ware_container_vs_material> updateware_container_vs_materialList, List<ware_container_vs_material> records)
|
RemoveInventory(ref List<long> updateDbIds, ref List<ware_container_vs_material> containerVsMaterialList, decimal quantity, string materialCode, string sapLocation)
|
{
|
List<ware_container_vs_material> deleteware_container_vs_materialList = new List<ware_container_vs_material>();
|
List<ware_container_vs_material> updateware_container_vs_materialList = new List<ware_container_vs_material>();
|
List<ware_container_vs_material> records = new List<ware_container_vs_material>();
|
|
//这里不需要重新赋值!!!! 【Editby shaocx,2023-05-18】
|
//按照批次号挨个扣减
|
//containerVsMaterialList = containerVsMaterialList.Where(x=>x.WareMaterialCode== wareMaterialCode).OrderBy(x => x.BarNo).ToList();//按照批次号升序排列
|
var new_containerVsMaterialList = containerVsMaterialList.Where(x => x.WareMaterialCode == materialCode && x.Sap_Location == sapLocation).OrderBy(x => x.BarNo).ToList();//按照批次号升序排列
|
decimal num = quantity;
|
foreach (var item in new_containerVsMaterialList)
|
{
|
if (item.Quantity == item.OCCQuantity)
|
{
|
item.IsDeleted = true;//删除库存 ! 【Editby shaocx,2023-05-18】
|
updateDbIds.Add(item.Id);
|
continue;
|
}
|
if (item.WareMaterialCode != materialCode || item.IsDeleted == true)
|
{
|
continue;
|
}
|
if (num == 0)
|
break;
|
|
if (num >= (item.Quantity - item.OCCQuantity))
|
{
|
//需要移除该物料数据
|
deleteware_container_vs_materialList.Add(item);
|
item.IsDeleted = true;//删除库存 ! 【Editby shaocx,2023-05-18】
|
num = num - Convert.ToDecimal((item.Quantity - item.OCCQuantity));
|
|
records.Add(new ware_container_vs_material()//这是参数,不是表数据
|
{
|
WareContainerCode = item.WareContainerCode,
|
WareMaterialCode = item.WareMaterialCode,
|
BarNo = item.BarNo,
|
Sap_Location = item.Sap_Location,
|
Quantity = Convert.ToDecimal((item.Quantity - item.OCCQuantity)),
|
RecordInsertTime = item.RecordInsertTime
|
});
|
updateDbIds.Add(item.Id);
|
}
|
else
|
{
|
item.OCCQuantity += num;//更新库存 ! 【Editby shaocx,2023-05-18】
|
|
updateware_container_vs_materialList.Add(item);
|
records.Add(new ware_container_vs_material()//这是参数,不是表数据
|
{
|
WareContainerCode = item.WareContainerCode,
|
WareMaterialCode = item.WareMaterialCode,
|
BarNo = item.BarNo,
|
Sap_Location = item.Sap_Location,
|
Quantity = num,
|
RecordInsertTime = item.RecordInsertTime
|
});
|
updateDbIds.Add(item.Id);
|
|
num = 0;//赋值为0一定要放到最后面!
|
break;
|
}
|
}
|
|
//增加验证 【Editby shaocx,2023-05-18】
|
if (num > 0)
|
{
|
//throw new System.Exception($"扣减库存,物料{materialCode}没有被扣减完全!");
|
//记录日志
|
Log4NetHelper.WriteErrorLog(LogType.RgvThreadService, $"扣减库存,物料{materialCode}没有被扣减完全!");
|
}
|
|
return (deleteware_container_vs_materialList: deleteware_container_vs_materialList, updateware_container_vs_materialList: updateware_container_vs_materialList, records: records);
|
}
|
}
|
}
|