Przeglądaj źródła

提交调整代码。

tangdi 3 lat temu
rodzic
commit
eb770a8273

+ 41 - 33
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -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)
             {
                 //缺料

+ 2 - 2
MicroServices/Business/Bussiness.Model/MES/IC/ic_bom_child.cs

@@ -146,12 +146,12 @@ namespace Bussiness.Model.MES.IC
         [Description("序号")]
         public int child_num { get; set; }
 
-        /// <summary>
+       /* /// <summary>
         /// 版本
         /// </summary>
         [StringLength(80)]
         [Description("版本")]
-        public string? version { get; set; }
+        public string? version { get; set; }*/
     }
 }
 

+ 6 - 0
MicroServices/Business/Bussiness.Model/MES/IC/ic_substitute_all.cs

@@ -64,5 +64,11 @@ namespace Bussiness.Model.MES.IC
         [Description("排序")]
         public int order_num { get; set; }
 
+        /// <summary>
+        /// 主料/替代料
+        /// </summary>
+        [Description("主料/替代料")]
+        public int? MainMaterial { get; set; }
+
     }
 }