using iWareCommon.Utils; using iWareSql.MyDbContext; using System; using System.Collections.Generic; using System.Linq; namespace Admin.NET.Application { /// /// 库存帮助类 /// public class InventoryHelper { /// /// 清理库存 /// /// 要更新的数据库库存ID集合 /// /// /// 要处理的物料编号 /// public static (List deleteware_container_vs_materialList, List updateware_container_vs_materialList, List records) RemoveInventory(ref List updateDbIds, ref List containerVsMaterialList, decimal quantity, string materialCode, string sapLocation) { List deleteware_container_vs_materialList = new List(); List updateware_container_vs_materialList = new List(); List records = new List(); //这里不需要重新赋值!!!! 【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); } } }