Parcourir la source

损耗率逻辑调整。

tangdi il y a 2 ans
Parent
commit
ecf4a6dae1

+ 22 - 8
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -2697,24 +2697,38 @@ namespace Business.Replenishment
                     GetWorkDetalis(childs.Where(s => s.level == 2).ToList(), returnList, childs);
                     if (returnList.Any())
                     {
-                        foreach (var structure in returnList)
+                        WorkOrdDetail woDetail = null;
+                        var calereturnList = returnList.Select(x => x.item_number).Distinct().ToList();
+                        foreach (var caleNumber in calereturnList)
                         {
-                            var psm = productStructureMs.Find(x => x.ParentItem == item.morder_no && x.ComponentItem == structure.item_number);
-                            WorkOrdDetail woDetail = new WorkOrdDetail();
+                            var caleList = returnList.Where(x => x.item_number == caleNumber).ToList();
+
                             //添加工单的物料信息
                             woDetail = new WorkOrdDetail();
                             woDetail.Domain = item.factory_id.ToString();
                             woDetail.WorkOrd = item.morder_no;
-                            woDetail.Op = structure.Op;
-                            woDetail.ItemNum = structure.item_number;
-                            woDetail.QtyRequired = structure.needCount.GetValueOrDefault();
+                            woDetail.Op = caleList.Max(f => f.Op);
+                            woDetail.ItemNum = caleNumber;
                             woDetail.QtyPosted = 0m;
                             woDetail.QtyReturned = 0m;
-                            woDetail.FrozenBOMQty = structure.qty.GetValueOrDefault();
                             woDetail.Status = "";
                             woDetail.IsActive = true;
                             woDetail.CreateTime = DateTime.Now;
-                            woDetail.Yield = psm == null ? 0 : psm.Scrap;
+                            decimal needCount = caleList.Sum(c => c.needCount.GetValueOrDefault());
+                            foreach (var structure in caleList)
+                            {
+                                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;
+                            }
                             workOrdDetails.Add(woDetail);
                         }
                     }

+ 30 - 13
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -21,6 +21,7 @@ using MongoDB.Driver;
 using MongoDB.Driver.Linq;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
+using Org.BouncyCastle.Crypto.Generators;
 using RazorEngine.Compilation.ImpromptuInterface.Optimization;
 using System;
 using System.Collections.Generic;
@@ -1554,7 +1555,7 @@ namespace Business.ResourceExamineManagement
             }
 
             //获取订单行数据  progress == "2"已做检查但是未评审的订单行
-            sentrys = sentrys.Where(s => s.progress == "2").ToList();
+            //sentrys = sentrys.Where(s => s.progress == "2").ToList();
             if (!sentrys.Any())
             {
                 new NLogHelper("ResourceExamineAppService").WriteLog("ReceiveResult", "订单行数据不存在", _currentTenant.Id.ToString());
@@ -1740,7 +1741,7 @@ namespace Business.ResourceExamineManagement
                     }
                     if (po_occupy.Any())
                     {
-                        po_occupy.ForEach(s => { s.create_time = DateTime.Now; });
+                        po_occupy.ForEach(s => { s.mysql_id = help.NextId(); s.create_time = DateTime.Now; });
                         var poOccupies = ObjectMapper.Map<List<mo_srm_po_occupy>, List<srm_po_occupy>>(po_occupy);
                         _businessDbContext.BulkInsert(poOccupies);
                     }
@@ -3844,7 +3845,7 @@ namespace Business.ResourceExamineManagement
                             LocationTo = LocationTo,//现在这几条线是同一线边仓,暂时不考虑多个线边仓
                             WorkOrd = workord.WorkOrd,
                             QtyOrd = a.QtyRequired,
-                            CurrQtyOpened = Math.Ceiling(a.QtyRequired * (1 + (a.Yield / 100))),
+                            CurrQtyOpened = a.QtyRequired,
                             Line = i,
                             IsActive = true,
                             CreateTime = DateTime.Now,
@@ -3858,8 +3859,10 @@ namespace Business.ResourceExamineManagement
                     }
                     else
                     {
-                        nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ItemNum).QtyOrd = itemComponent.QtyOrd + a.QtyRequired;
-                        nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ItemNum).CurrQtyOpened = itemComponent.CurrQtyOpened + a.QtyRequired;
+                        itemComponent.QtyOrd += a.QtyRequired;
+                        itemComponent.CurrQtyOpened += a.QtyRequired;
+                        //nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ItemNum).QtyOrd = itemComponent.QtyOrd + a.QtyRequired;
+                        //nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ItemNum).CurrQtyOpened = itemComponent.CurrQtyOpened + a.QtyRequired;
                     }
                 }
             });
@@ -4211,24 +4214,38 @@ namespace Business.ResourceExamineManagement
                     GetWorkDetalis(childs.Where(s => s.parent_id == child.fid).ToList(), returnList, childs);
                     if (returnList.Any())
                     {
-                        foreach (var structure in returnList)
+                        WorkOrdDetail woDetail = null;
+                        var calereturnList = returnList.Select(x => x.item_number).Distinct().ToList();
+                        foreach (var caleNumber in calereturnList)
                         {
-                            var psm = productStructureMs.Find(x => x.ParentItem == item.morder_no && x.ComponentItem == structure.item_number);
-                            WorkOrdDetail woDetail = new WorkOrdDetail();
+                            var caleList = returnList.Where(x => x.item_number == caleNumber).ToList();
+
                             //添加工单的物料信息
                             woDetail = new WorkOrdDetail();
                             woDetail.Domain = item.factory_id.ToString();
                             woDetail.WorkOrd = item.morder_no;
-                            woDetail.Op = structure.Op;
-                            woDetail.ItemNum = structure.item_number;
-                            woDetail.QtyRequired = structure.needCount.GetValueOrDefault();
+                            woDetail.Op = caleList.Max(f => f.Op);
+                            woDetail.ItemNum =caleNumber;
                             woDetail.QtyPosted = 0m;
                             woDetail.QtyReturned = 0m;
-                            woDetail.FrozenBOMQty = structure.qty.GetValueOrDefault();
                             woDetail.Status = "";
                             woDetail.IsActive = true;
                             woDetail.CreateTime = DateTime.Now;
-                            woDetail.Yield = psm == null ? 0 : psm.Scrap;
+                            decimal needCount = caleList.Sum(c => c.needCount.GetValueOrDefault());
+                            foreach (var structure in caleList)
+                            {
+                                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;
+                            }
                             workOrdDetails.Add(woDetail);
                         }
                     }