Просмотр исходного кода

复制子序逻辑修复调整。

tangdi 2 лет назад
Родитель
Сommit
3b40600497

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

@@ -2644,10 +2644,12 @@ namespace Business.ResourceExamineManagement
             
             //工单信息
             var workOrdMasters = _workOrdMaster.Select(p => p.Domain == domain && workOrd.Contains(p.WorkOrd));
+
             //当前工单所有工序
-            var workordRList = _workOrdRouting.Select(s => s.Domain == domain && workOrd.Contains(s.WorkOrd)).ToList();
+            var workordRList = _workOrdRouting.Select(s => s.Domain == domain && s.IsActive && workOrd.Contains(s.WorkOrd)).ToList();
             //产线
             List<ProdLineDetail> prodLines = _prodLineDetail.Select(p => workOrdMasters.Select(m => m.ItemNum).Contains(p.Part) && p.Domain == domain && p.IsActive);
+
             //获取已排产的工单
             List<PeriodSequenceDet> dbPeriodSequences = _periodSequenceDet.Select(p => workOrd.Contains(p.WorkOrds) && p.Domain == domain && p.IsActive);
 
@@ -2656,44 +2658,79 @@ namespace Business.ResourceExamineManagement
             {
                 List<WorkOrdRouting> alllist = workordRList.Where(s => s.WorkOrd == work).ToList();
                 List<WorkOrdRouting> parentlist = alllist.Where(s => s.WorkOrd == work && s.ParentOp == 0).ToList();
-                //非关键工序也要添加
-                copyList.AddRange(parentlist.Where(s => s.MilestoneOp == false).ToList());
-                GetChildOP(parentlist, alllist, copyList);
-            }
-            foreach (var wor in copyList)
-            {
-                var workPsd = dbPeriodSequences.Where(s => s.ItemNum == wor.ItemNum && s.WorkOrds == wor.WorkOrd).ToList();
-                var line = prodLines.Where(p => p.Part == wor.ItemNum && p.Op == wor.OP).FirstOrDefault();
-                foreach (var psd in workPsd)
+                //父级工序,根据工序代码排序,
+
+                WorkOrdRouting upperOp = null;
+                List<WorkOrdRouting> worouting = parentlist.Where(x => x.MilestoneOp).OrderBy(s => s.OP).ToList();
+                foreach (var wt in worouting)
                 {
-                    var newPsd = new PeriodSequenceDet
-                    {
-                        Domain = domain,
-                        //Line = item.Line,
-                        ItemNum = wor.ItemNum,
-                        PlanDate = psd.PlanDate,
-                        Period = 1,//目前只考虑一班制
-                        OrdQty = psd.OrdQty,
-                        WorkOrds = wor.WorkOrd,
-                        Op = wor.OP,
-                        IsActive = true,
-                        Status = "",
-                        CreateTime = DateTime.Now
-                    };
-                    if (line != null)
+                    List<WorkOrdRouting> refMilestoneOpList = new List<WorkOrdRouting>();
+                    copyList = new List<WorkOrdRouting>();
+                    if (upperOp == null)
                     {
-                        newPsd.Line = line.Line;
+                        refMilestoneOpList.AddRange(parentlist.Where(x => x.OP < wt.OP).ToList());
                     }
-                    else
+                    else {
+                        refMilestoneOpList.AddRange(parentlist.Where(x => upperOp.OP < x.OP && x.OP < wt.OP).ToList());
+                    }
+                    upperOp = wt;
+                    GetChildOP(refMilestoneOpList, alllist, copyList);
+                    var workPsd = dbPeriodSequences.Where(s => s.ItemNum == wt.ItemNum && s.WorkOrds == work && s.Op == wt.OP).ToList();
+                    foreach (var psd in workPsd)
                     {
-                        newPsd.Line = psd.Line;
+                        refMilestoneOpList.ForEach(wor =>
+                        {
+                            var newPsd = new PeriodSequenceDet
+                            {
+                                Domain = domain,
+                                Line = psd.Line,
+                                ItemNum = wor.ItemNum,
+                                PlanDate = psd.PlanDate,
+                                Period = 1,//目前只考虑一班制
+                                OrdQty = psd.OrdQty,
+                                WorkOrds = wor.WorkOrd,
+                                Op = wor.OP,
+                                IsActive = true,
+                                Status = "",
+                                CreateTime = DateTime.Now
+                            };
+                            returnList.Add(newPsd);
+                        });
+                        copyList.ForEach(wor =>
+                        {
+                            var line = prodLines.Where(p => p.Part == wor.ItemNum && p.Op == wor.OP).FirstOrDefault();
+                            var newPsd = new PeriodSequenceDet
+                            {
+                                Domain = domain,
+                                //Line = psd.Line,
+                                ItemNum = wor.ItemNum,
+                                PlanDate = psd.PlanDate,
+                                Period = 1,//目前只考虑一班制
+                                OrdQty = psd.OrdQty,
+                                WorkOrds = wor.WorkOrd,
+                                Op = wor.OP,
+                                IsActive = true,
+                                Status = "",
+                                CreateTime = DateTime.Now
+                            };
+                            if (line != null)
+                            {
+                                newPsd.Line = line.Line;
+                            }
+                            else
+                            {
+                                newPsd.Line = psd.Line;
+                            }
+                            returnList.Add(newPsd);
+                        });
+
                     }
-                    returnList.Add(newPsd);
                 }
             }
             return returnList;
         }
 
+
         //递归寻找到子级工序里工序编码最大的一条记录。
         public void GetChildOP(List<WorkOrdRouting> parentlist, List<WorkOrdRouting> alllist, List<WorkOrdRouting> copyList)
         {
@@ -3514,7 +3551,7 @@ namespace Business.ResourceExamineManagement
                         {
                             defaultLine = lineMasters.FirstOrDefault();
                         }
-                        LocationTo = defaultLine?.VLocation;
+                        LocationTo = defaultLine?.Location;
                     }
                     var workdtls = workDetails.Where(s => s.WorkOrd == workord.WorkOrd).ToList();
                     //List<ProductStructureMaster> itemList = GetProductStructure(dbPeriodSequences.First(a => a.WorkOrds == workord.WorkOrd).ItemNum, QtyOrdSum, workord.Domain);