Bladeren bron

BOM计算提交。

tangdi 2 jaren geleden
bovenliggende
commit
7c6e6d357b

+ 32 - 15
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -2688,12 +2688,19 @@ namespace Business.Replenishment
                     workOrdRoutings.Add(woRouting);
                 }
 
-                var exm = exmResult.Find(s => s.morder_id == item.Id);
+                long fid = GetParentMo(morders, item);
+                var exm = exmResult.Find(s => s.morder_id == fid);
                 if (exm != null)
                 {
                     var childs = childExamineList.Where(s => s.examine_id == exm.Id && s.is_use == true).ToList();
+
+                    var child = childs.Find(s => s.item_number == item.product_code);
+                    if (child == null)
+                    {
+                        continue;
+                    }
                     List<b_bom_child_examine> returnList = new List<b_bom_child_examine>();
-                    GetWorkDetalis(childs.Where(s => s.level == 2).ToList(), returnList, childs);
+                    GetWorkDetalis(childs.Where(s => s.parent_id == child.fid).ToList(), returnList, childs);
                     if (returnList.Any())
                     {
                         WorkOrdDetail woDetail = null;
@@ -2713,20 +2720,10 @@ namespace Business.Replenishment
                             woDetail.Status = "";
                             woDetail.IsActive = true;
                             woDetail.CreateTime = DateTime.Now;
-                            decimal needCount = caleList.Sum(c => c.needCount.GetValueOrDefault());
-                            foreach (var structure in caleList)
+                            woDetail.QtyRequired = caleList.Sum(c => c.needCount.GetValueOrDefault());
+                            if (workOrd.QtyOrded != 0)
                             {
-                                if (woDetail.Op > structure.Op)
-                                {
-                                    woDetail.Op = structure.Op;
-                                }
-                                var psm = productStructureMs.Find(x => x.ParentItem == item.morder_no && x.ComponentItem == structure.item_number);
-                                woDetail.Yield = psm == null ? 0 : psm.Scrap / 100;
-                                woDetail.QtyRequired += structure.needCount.GetValueOrDefault() * (1 + woDetail.Yield);
-                            }
-                            if (needCount != 0)
-                            {
-                                woDetail.FrozenBOMQty = woDetail.QtyRequired / needCount;
+                                woDetail.FrozenBOMQty = Math.Round(woDetail.QtyRequired / workOrd.QtyOrded, 10);
                             }
                             workOrdDetails.Add(woDetail);
                         }
@@ -2735,6 +2732,26 @@ namespace Business.Replenishment
             }
         }
 
+        public long GetParentMo(List<mes_morder> morders, mes_morder item)
+        {
+            if (item.parent_id != null)
+            {
+                var parentMo = morders.Find(s => s.Id == item.parent_id);
+                if (parentMo != null)
+                {
+                    return GetParentMo(morders, parentMo);
+                }
+                else
+                {
+                    return item.Id;
+                }
+            }
+            else
+            {
+                return item.Id;
+            }
+        }
+
         /// <summary>
         /// 获取虚拟件明细
         /// </summary>

+ 6 - 6
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -199,6 +199,7 @@ namespace Business.ResourceExamineManagement
                 level1Dto.sqty = level1Dto.sqty < 0 ? 0 : level1Dto.sqty;
                 level1Dto.lack_qty = level1Dto.needCount - level1Dto.sqty;
                 level1Dto.lack_qty = level1Dto.lack_qty < 0 ? 0 : level1Dto.lack_qty;
+                level1Dto.needCount = level1Dto.lack_qty;
                 if (level1Dto.sqty != 0)
                 {
                     if (level1Dto.lack_qty > 0)
@@ -218,9 +219,7 @@ namespace Business.ResourceExamineManagement
                 level1Dto.sqty = 0;
             }
             level1Dto.self_lack_qty = level1Dto.lack_qty;
-            //平铺需要数量
-            CaclMaterialShortage(returnlist);
-
+            
             level1Dto.is_use = true;
             if (level1Dto.lack_qty > 0)
             {
@@ -230,9 +229,7 @@ namespace Business.ResourceExamineManagement
                 _morderAppService.mo_Mes_Moentry = moentriesList;//工单子表
                 _morderAppService.mo_Mes_Mooccupies = mooccupyAllList;//工单占用
                 List<mo_mes_mooccupy> mooccupylist = new List<mo_mes_mooccupy>();
-                //if (param.checkflag)
-                //只会有销售订单或者计划订单进入,才会为空。
-                if (mes_morder == null)
+                if (param.checkflag)
                 {
                     //工单检查无需检查在制
                     mooccupylist = _morderAppService.CheckMorder(level1Dto.item_number, level1Dto.lack_qty, plan_date.GetValueOrDefault(), sentrys, ic_item, bangid);
@@ -272,6 +269,9 @@ namespace Business.ResourceExamineManagement
                 {
                     //占用不够,占用后减少缺料数量
                     level1Dto.lack_qty -= moo_qty;
+                    level1Dto.needCount = level1Dto.lack_qty;
+                    //平铺需要数量
+                    CaclMaterialShortage(returnlist);
                     //先设定在制的齐套时间
                     //level1Dto.satisfy_time = mooccupylist[0]?.moo_etime;
                     level1Dto.stock_state = 0;

+ 2 - 4
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -4304,11 +4304,9 @@ namespace Business.ResourceExamineManagement
                             woDetail.IsActive = true;
                             woDetail.CreateTime = DateTime.Now;
                             woDetail.QtyRequired= caleList.Sum(c => c.needCount.GetValueOrDefault());
-                            woDetail.Yield = caleList.Max(x => x.Scrap.GetValueOrDefault());
-                            decimal needCount = caleList.Sum(c => c.needCountNoloss.GetValueOrDefault());
-                            if (needCount != 0)
+                            if (workOrd.QtyOrded != 0)
                             {
-                                woDetail.FrozenBOMQty = Math.Round(woDetail.QtyRequired / needCount, 8);
+                                woDetail.FrozenBOMQty = Math.Round(woDetail.QtyRequired / workOrd.QtyOrded, 10);
                             }
                             workOrdDetails.Add(woDetail);
                         }