|
|
@@ -382,8 +382,6 @@ namespace Business.ResourceExamineManagement
|
|
|
//FilterDefinition<ic_bom> filter = Builders<ic_bom>.Filter.In(s => s.bom_number, sentrys.Select(m => m.bom_number).ToList());
|
|
|
//List<ic_bom> boms = _ic_bom.GetManyByIds(filter).Result.Where(p => p.factory_id == input.factoryId && p.tenant_id == input.tenantId && !p.IsDeleted).ToList();
|
|
|
List<ic_bom> boms = _ic_bom.Find(p => sentrys.Select(m => m.item_number).Contains(p.item_number) && p.factory_id == input.factoryId && p.tenant_id == input.tenantId && !p.IsDeleted).Result.ToList();
|
|
|
- //通过物料id获取产品提前期
|
|
|
- List<ICItemLeadTimeDto> leadTimes = GetLeadTime(boms.Select(p => p.icitem_id).ToList(), input.tenantId, input.factoryId);
|
|
|
|
|
|
//物料bom
|
|
|
List<ic_bom> bomlist = new List<ic_bom>();
|
|
|
@@ -391,6 +389,19 @@ namespace Business.ResourceExamineManagement
|
|
|
List<ic_bom_child> bomchildlist = new List<ic_bom_child>();
|
|
|
//获取物料bom,物料bom明细
|
|
|
GetIcBomData(boms, bomlist, bomchildlist);
|
|
|
+
|
|
|
+ //根据明细集合查出所有得替代关系表数据集合
|
|
|
+ List<string> codeList = bomchildlist.Select(c => c.substitute_code).ToList();
|
|
|
+ var sublist = _ic_substitute.GetManyByCondition(p => codeList.Contains(p.substitute_code) && !p.IsDeleted).Result;
|
|
|
+
|
|
|
+ List<long> subidlist = sublist.Select(c => c.Id).ToList();
|
|
|
+ var suballlist = _ic_substitute_all.GetManyByCondition(p => subidlist.Contains(p.substitute_id) && !p.IsDeleted).Result;
|
|
|
+
|
|
|
+ List<long> suballidlist = suballlist.Select(c => c.Id).ToList();
|
|
|
+ var subdtllist = _ic_substitute_all_dtl.GetManyByCondition(p => suballidlist.Contains(p.substitute_allid) && !p.IsDeleted).Result;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
//物料占用记录
|
|
|
List<ic_item_stockoccupy> sklist = new List<ic_item_stockoccupy>();
|
|
|
//获取物料数据
|
|
|
@@ -398,6 +409,11 @@ namespace Business.ResourceExamineManagement
|
|
|
itemIds.AddRange(bomchildlist.Select(p => p.icitem_id).ToList());
|
|
|
List<ic_item> icitemlist = _ic_item.GetManyByCondition(p => itemIds.Contains(p.Id) && !p.IsDeleted).Result;
|
|
|
|
|
|
+ //物料提前期
|
|
|
+ var leadTimeList = GetLeadTime(itemIds, input.tenantId, input.factoryId);//提前期列表
|
|
|
+ var supplierList = GetSupplier(itemIds, input.tenantId, input.factoryId);//供应商列表
|
|
|
+ var planList = GetICPlan(itemIds, input.tenantId, input.factoryId);//plan列表
|
|
|
+
|
|
|
foreach (var item in sentrys)
|
|
|
{
|
|
|
//工单资源检查信息
|
|
|
@@ -411,14 +427,14 @@ namespace Business.ResourceExamineManagement
|
|
|
//bom层级组装
|
|
|
var getBomList = BomPretreatment(childBom.Id, bomlist, bomchildlist, icitemlist);
|
|
|
//bom替代关系组装
|
|
|
- BomSubstitute(getBomList, bomlist, bomchildlist, icitemlist);
|
|
|
+ BomSubstitute(getBomList, bomlist, bomchildlist, icitemlist, sublist, suballlist, subdtllist);
|
|
|
//库存初始化
|
|
|
- BomStock(getBomList, bangid, input.factoryId);
|
|
|
+ BomStock(getBomList);
|
|
|
//计算
|
|
|
calcTest(getBomList, bangid, item.Id, item.qty.Value, input, item.plan_date, sklist);
|
|
|
|
|
|
//TODO:最晚开始时间
|
|
|
- var curFacDtl = leadTimes.FirstOrDefault(p => p.item_id == childBom.icitem_id);
|
|
|
+ var curFacDtl = leadTimeList.FirstOrDefault(p => p.item_id == childBom.icitem_id);
|
|
|
//最晚开工时间=订单行客户要求交期-运输提前期-库存提前期-生产提前期-下单提前期
|
|
|
dtl.latest_times = item.plan_date.GetValueOrDefault().AddDays(-Convert.ToDouble(curFacDtl?.transportation_leadtime.GetValueOrDefault() + curFacDtl?.stock_leadtime.GetValueOrDefault() + curFacDtl?.production_leadtime.GetValueOrDefault() + curFacDtl?.order_leadtime.GetValueOrDefault()));
|
|
|
//物料齐套时间
|
|
|
@@ -1164,17 +1180,8 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <summary>
|
|
|
/// BOM替代关系预处理
|
|
|
/// </summary>
|
|
|
- public void BomSubstitute(List<BomChildExamineDto> returnlist, List<ic_bom> bomlist, List<ic_bom_child> bomchildlist, List<ic_item> icitemlist)
|
|
|
+ public void BomSubstitute(List<BomChildExamineDto> returnlist, List<ic_bom> bomlist, List<ic_bom_child> bomchildlist, List<ic_item> icitemlist,List<ic_substitute> sublist, List<ic_substitute_all> suballlist, List<ic_substitute_all_dtl> subdtllist)
|
|
|
{
|
|
|
- List<string> codeList = returnlist.Select(c => c.substitute_code).ToList();
|
|
|
- var sublist = _ic_substitute.GetManyByCondition(p => codeList.Contains(p.substitute_code) && !p.IsDeleted).Result;
|
|
|
-
|
|
|
- List<long> subidlist = sublist.Select(c => c.Id).ToList();
|
|
|
- var suballlist = _ic_substitute_all.GetManyByCondition(p => subidlist.Contains(p.substitute_id) && !p.IsDeleted).Result;
|
|
|
-
|
|
|
- List<long> suballidlist = suballlist.Select(c => c.Id).ToList();
|
|
|
- var subdtllist = _ic_substitute_all_dtl.GetManyByCondition(p => suballidlist.Contains(p.substitute_allid) && !p.IsDeleted).Result;
|
|
|
-
|
|
|
List<long> childidList = new List<long>();
|
|
|
int type = 1;
|
|
|
List<BomChildExamineDto> addlist = new List<BomChildExamineDto>();
|
|
|
@@ -1215,7 +1222,7 @@ namespace Business.ResourceExamineManagement
|
|
|
icitemlist.AddRange(dtlitemlist);
|
|
|
foreach (var dtl in sadl)
|
|
|
{
|
|
|
- if (dtl.ismain != 0)//替代关系里,已经将BOM料当成主料存放于替代群组里了。
|
|
|
+ if (sal.MainMaterial.Value != 1)
|
|
|
{
|
|
|
//递归将替代关系组装出来。
|
|
|
SubstitutePretreatment(sl, sal, dtl, item, addlist, icitemlist, bomlist, bomchildlist, type);
|
|
|
@@ -1227,6 +1234,9 @@ namespace Business.ResourceExamineManagement
|
|
|
dtlitem.substitute_all_num = sal.order_num;//群组优先级
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -1304,14 +1314,12 @@ namespace Business.ResourceExamineManagement
|
|
|
/// 计算物料库存量
|
|
|
/// </summary>
|
|
|
/// <param name="returnlist"></param>
|
|
|
- public void BomStock(List<BomChildExamineDto> returnlist, long bangid, long factoryid)
|
|
|
+ public void BomStock(List<BomChildExamineDto> returnlist)
|
|
|
{
|
|
|
returnlist = returnlist.OrderBy(s => s.num).ToList();
|
|
|
//获取当前工厂下物料库存数据
|
|
|
List<long> icitemIds = returnlist.Select(c => c.item_id).ToList();
|
|
|
- var stocklist = _ic_item_stock.GetManyByCondition(p => p.factory_id == factoryid && icitemIds.Contains(p.icitem_id)).Result;
|
|
|
- //取当前订单的物料库存占用记录
|
|
|
- //var occupylist = _ic_item_stockoccupy.GetManyByCondition(p => p.bang_id == bangid && p.order_id == orderid).Result;
|
|
|
+ var stocklist = _ic_item_stock.GetManyByCondition(p => p.factory_id == param.factoryId && icitemIds.Contains(p.icitem_id)).Result;
|
|
|
//计算剩余库存
|
|
|
foreach (var item in returnlist)
|
|
|
{
|
|
|
@@ -1457,7 +1465,7 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
else if (item.erp_cls == 2 || item.erp_cls == 3)
|
|
|
{
|
|
|
- var leadTimeList = GetLeadTime(new List<long> { item.item_id }, input.tenantId, input.factoryId);//提前期列表
|
|
|
+ /*var leadTimeList = GetLeadTime(new List<long> { item.item_id }, input.tenantId, input.factoryId);//提前期列表
|
|
|
var supplierList = GetSupplier(new List<BomChildExamineDto> { item }, input.tenantId, input.factoryId);//供应商列表
|
|
|
var planList = GetICPlan(new List<BomChildExamineDto> { item }, input.tenantId, input.factoryId);//plan列表
|
|
|
item.kitting_time = CreateSRMPR(item, input.tenantId, input.factoryId, bangid, item.erp_cls, leadTimeList, supplierList, planList, plan_date.Value);
|
|
|
@@ -1469,7 +1477,7 @@ namespace Business.ResourceExamineManagement
|
|
|
//2.再根据委外工单需要检查库存材料,然后提供给第三方组装。
|
|
|
//3.如果委外工单的物料库存不够,先生成物料采购申请单,再生成物料的采购订单,到货后再走委外流程。
|
|
|
//4.再生成委外的采购申请单。
|
|
|
- }
|
|
|
+ }*/
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
@@ -1668,7 +1676,7 @@ namespace Business.ResourceExamineManagement
|
|
|
}*/
|
|
|
}
|
|
|
else if (slt.erp_cls == 2 || slt.erp_cls == 3)
|
|
|
- { //生成采购订单
|
|
|
+ { /*//生成采购订单
|
|
|
//slt.purchase_qty = slt.lack_qty;
|
|
|
var leadTimeList = GetLeadTime(new List<long> { slt.item_id }, input.tenantId, input.factoryId);//提前期列表
|
|
|
var supplierList = GetSupplier(new List<BomChildExamineDto> { slt }, input.tenantId, input.factoryId);//供应商列表
|
|
|
@@ -1679,7 +1687,7 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
//生成委外工单
|
|
|
CreateMesOOder(item, input.tenantId, input.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
- }
|
|
|
+ }*/
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
@@ -1792,7 +1800,7 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
else if (sct.erp_cls == 2 || sct.erp_cls == 3)
|
|
|
{
|
|
|
- var leadTimeList = GetLeadTime(new List<long> { sct.item_id }, input.tenantId, input.factoryId);//提前期列表
|
|
|
+ /*var leadTimeList = GetLeadTime(new List<long> { sct.item_id }, input.tenantId, input.factoryId);//提前期列表
|
|
|
var supplierList = GetSupplier(new List<BomChildExamineDto> { sct }, input.tenantId, input.factoryId);//供应商列表
|
|
|
var planList = GetICPlan(new List<BomChildExamineDto> { sct }, input.tenantId, input.factoryId);//plan列表
|
|
|
sct.kitting_time = CreateSRMPR(sct, input.tenantId, input.factoryId, bangid, sct.erp_cls, leadTimeList, supplierList, planList, plan_date.Value);
|
|
|
@@ -1800,7 +1808,7 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
//生成委外工单
|
|
|
CreateMesOOder(item, input.tenantId, input.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
|
|
|
- }
|
|
|
+ }*/
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -1859,7 +1867,7 @@ namespace Business.ResourceExamineManagement
|
|
|
//从第二级开始循环
|
|
|
foreach (var item in bzlist)
|
|
|
{
|
|
|
- var childList = returnlist.Where(s => s.parent_id == item.id).ToList();
|
|
|
+ var childList = returnlist.Where(s => s.parent_id == item.id && s.type == 0).ToList();
|
|
|
|
|
|
//存在替代关系
|
|
|
if (item.haveicsubs == 1)
|
|
|
@@ -2173,15 +2181,15 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
|
|
|
//根据物料id获取物料供应商
|
|
|
- private List<ic_item_pur> GetSupplier(List<BomChildExamineDto> returnlist, long tenantId, long factoryid)
|
|
|
+ private List<ic_item_pur> GetSupplier(List<long> icItemIds, long tenantId, long factoryid)
|
|
|
{
|
|
|
- return _ic_item_pur.Find(p => returnlist.Select(x => x.item_id).Contains(p.icitem_id) && p.tenant_id == tenantId && p.factory_id == factoryid && !p.IsDeleted).Result;
|
|
|
+ return _ic_item_pur.Find(p => icItemIds.Contains(p.icitem_id) && p.tenant_id == tenantId && p.factory_id == factoryid && !p.IsDeleted).Result;
|
|
|
}
|
|
|
|
|
|
//根据物料id获取物料采购计划表
|
|
|
- private List<ic_plan> GetICPlan(List<BomChildExamineDto> returnlist, long tenantId, long factoryid)
|
|
|
+ private List<ic_plan> GetICPlan(List<long> icItemIds, long tenantId, long factoryid)
|
|
|
{
|
|
|
- return _ic_plan.Find(p => returnlist.Select(x => x.item_id).Contains(p.icitem_id) && p.tenant_id == tenantId && p.factory_id == factoryid && !p.IsDeleted).Result;
|
|
|
+ return _ic_plan.Find(p => icItemIds.Contains(p.icitem_id) && p.tenant_id == tenantId && p.factory_id == factoryid && !p.IsDeleted).Result;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -2198,8 +2206,8 @@ namespace Business.ResourceExamineManagement
|
|
|
var po_list = _srm_po_list.Find(p => returnlist.Select(x => x.item_id).Contains(p.icitem_id.Value) && p.tenant_id == tenantId && p.factory_id == factoryid && p.rarrdate >= DateTime.Now && p.rarrdate < deliveryDate && !p.IsDeleted).Result;
|
|
|
var itemlist = new List<ICItemDateDto>();//需要生成采购申请单的物料信息
|
|
|
var leadTimeList = GetLeadTime(returnlist.Select(p => p.item_id).ToList(), tenantId, factoryid);//提前期列表
|
|
|
- var supplierList = GetSupplier(returnlist, tenantId, factoryid);//供应商列表
|
|
|
- var planList = GetICPlan(returnlist, tenantId, factoryid);//plan列表
|
|
|
+ var supplierList = GetSupplier(returnlist.Select(p=>p.item_id).ToList(), tenantId, factoryid);//供应商列表
|
|
|
+ var planList = GetICPlan(returnlist.Select(p => p.item_id).ToList(), tenantId, factoryid);//plan列表
|
|
|
foreach (var item in returnlist)
|
|
|
{
|
|
|
//缺料
|