seyason před 1 rokem
rodič
revize
18f0214131

+ 56 - 7
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -4828,8 +4828,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 
             //以钢印号为基准,进行计算,剔除完整件数的钢印号 //这个在上面已经去过了
             List<String> noCompleteSteelNums = steelNums.stream().filter(s->!integratedSteelNums.contains(s)).collect(Collectors.toList());
+
             //列出每一道工序上的钢印号集合
             HashMap<Integer, List> prodProcedureSteelNumMap = new HashMap<>();
+            System.out.println("不完整的钢印号数量:"+noCompleteSteelNums.size());
             for (String steelNum : noCompleteSteelNums) {
                 //找到该产品下填报了该钢印号的所有日报数据
                 List<Integer> hasReportIds = reportSteelNums.stream().filter(r -> r.getSteelNum().equals(steelNum)).collect(Collectors.toList()).stream().map(ReportSteelNum::getReportId).collect(Collectors.toList());
@@ -4840,7 +4842,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if (prodProcedureSteelNumMap.containsKey(targetProdProduceId)) {
                         List<String> prodProcedureSteelNum = prodProcedureSteelNumMap.get(targetProdProduceId);
                         prodProcedureSteelNum.add(steelNum);
-                        prodProcedureSteelNumMap.put(targetProdProduceId, prodProcedureSteelNum);
                     } else {
                         List<String> prodProcedureSteelNum = new ArrayList<>();
                         prodProcedureSteelNum.add(steelNum);
@@ -4876,27 +4877,76 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             if (allMatch) {
                 rounding = minHeapHeight;
                 //去掉凑整的钢印号,按堆中的高度进行去除
+                if (product.getName().equals("160蓄电池箱")) {
+                    System.out.println("工序组的个数:"+prodProcedureSteelNumMap.keySet().size());
+                    System.out.println("minHeight=="+minHeapHeight);
+                }
+
                 for (Integer curProcedureId : prodProcedureSteelNumMap.keySet()) {
                     List<String> prodProcedureSteelNum = prodProcedureSteelNumMap.get(curProcedureId);
+                    if (product.getName().equals("160蓄电池箱")) {
+                        System.out.println(curProcedureId+" 里面的钢印号个数="+prodProcedureSteelNum.size());
+                    }
+
                     for (int i = 0; i < prodProcedureSteelNum.size(); i++) {
+                        String curSteelNum = prodProcedureSteelNum.get(i);
                         //只取大于最小粒度的钢印号数组中的一个 其他的放到折算中去
                         if (i < minHeapHeight) {
-                            roundingSteelNums.add(prodProcedureSteelNum.get(i));
+                            if (!roundingSteelNums.contains(curSteelNum)) {
+                                roundingSteelNums.add(curSteelNum);
+                            }
                         } else {
-                            leftSteelNums.add(prodProcedureSteelNum.get(i));
+                            if (!leftSteelNums.contains(curSteelNum)) {
+                                leftSteelNums.add(curSteelNum);
+                            }
                         }
                     }
                 }
             } else {
                 leftSteelNums = noCompleteSteelNums;
             }
-            if (product.getName().equals("测试001")) {
-                System.out.println("测试001  leftSteelNums=="+leftSteelNums);
+            if (product.getName().equals("160蓄电池箱")) {
+                System.out.println("160蓄电池箱  leftSteelNums=="+leftSteelNums);
                 for (String left : leftSteelNums) {
                     System.out.println("折算的工序::" + left);
                 }
             }
             //计算折算数据
+//            for (String leftSteelNum : leftSteelNums) {
+//                //找到该产品下填报了该钢印号的所有日报数据
+//                List<Integer> hasReportIds = reportSteelNums.stream().filter(r -> r.getSteelNum().equals(leftSteelNum)).collect(Collectors.toList()).stream().map(ReportSteelNum::getReportId).collect(Collectors.toList());
+//                List<Report> hasReportList = targetReportList.stream().filter(r->hasReportIds.contains(r.getId())).collect(Collectors.toList());
+//                //过滤日报所填了哪些工序
+//                List<Integer> hasReportProdProduceIds = hasReportList.stream().map(Report::getProdProcedureId).collect(Collectors.toList());
+//                //计算当前产品的总预算工时
+//                BigDecimal reduceTime = targetProdProcedures.stream().map(i -> new BigDecimal(i.getWorkingTime())).reduce(BigDecimal.ZERO, BigDecimal::add);
+//                BigDecimal reduceCost = targetProdProcedures.stream().map(i -> new BigDecimal(String.valueOf(i.getUnitPrice()))).reduce(BigDecimal.ZERO, BigDecimal::add);
+//                //利用上面找到的所填了哪些工序 按照所在工序占比计算
+//                List<ProdProcedure> hasReportProcedures = targetProdProcedures.stream().filter(ts -> hasReportProdProduceIds.contains(ts.getId())).collect(Collectors.toList());
+//                BigDecimal bigDecimalTime=new BigDecimal(0);
+//                BigDecimal bigDecimalCost=new BigDecimal(0);
+//                for (ProdProcedure hasReportProcedure : hasReportProcedures) {
+//                    //找到当前工序所在产品总预算工时
+//                    BigDecimal decimalTime = new BigDecimal(hasReportProcedure.getWorkingTime());
+//                    BigDecimal divideTime = decimalTime.divide(reduceTime, 3,BigDecimal.ROUND_HALF_UP);
+//                    BigDecimal checkTime = new BigDecimal(1);
+//                    checkTime=checkTime.multiply(divideTime).setScale(3,BigDecimal.ROUND_HALF_UP);
+//                    bigDecimalTime=bigDecimalTime.add(checkTime).setScale(3,BigDecimal.ROUND_HALF_UP);
+//                    //找到当前工序所在产品总预算工时
+//                    BigDecimal decimalCost = new BigDecimal(String.valueOf(hasReportProcedure.getUnitPrice()));
+//                    BigDecimal divideCost = decimalCost.divide(reduceCost, 3,BigDecimal.ROUND_HALF_UP);
+//                    BigDecimal checkCost = new BigDecimal(1);
+//                    checkCost=checkCost.multiply(divideCost).setScale(3,BigDecimal.ROUND_HALF_UP);
+//                    bigDecimalCost=bigDecimalCost.add(checkCost).setScale(3,BigDecimal.ROUND_HALF_UP);
+//                }
+//                convertedTime=convertedTime.add(bigDecimalTime);
+//                convertedCost=convertedCost.add(bigDecimalCost);
+//            }
+
+            BigDecimal reduceTime = targetProdProcedures.stream().map(i -> new BigDecimal(i.getWorkingTime())).reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal reduceCost = targetProdProcedures.stream().map(i -> new BigDecimal(String.valueOf(i.getUnitPrice()))).reduce(BigDecimal.ZERO, BigDecimal::add);
+            //计算折算数据
+
             for (String leftSteelNum : leftSteelNums) {
                 //找到该产品下填报了该钢印号的所有日报数据
                 List<Integer> hasReportIds = reportSteelNums.stream().filter(r -> r.getSteelNum().equals(leftSteelNum)).collect(Collectors.toList()).stream().map(ReportSteelNum::getReportId).collect(Collectors.toList());
@@ -4904,8 +4954,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 //过滤日报所填了哪些工序
                 List<Integer> hasReportProdProduceIds = hasReportList.stream().map(Report::getProdProcedureId).collect(Collectors.toList());
                 //计算当前产品的总预算工时
-                BigDecimal reduceTime = targetProdProcedures.stream().map(i -> new BigDecimal(i.getWorkingTime())).reduce(BigDecimal.ZERO, BigDecimal::add);
-                BigDecimal reduceCost = targetProdProcedures.stream().map(i -> new BigDecimal(String.valueOf(i.getUnitPrice()))).reduce(BigDecimal.ZERO, BigDecimal::add);
+
                 //利用上面找到的所填了哪些工序 按照所在工序占比计算
                 List<ProdProcedure> hasReportProcedures = targetProdProcedures.stream().filter(ts -> hasReportProdProduceIds.contains(ts.getId())).collect(Collectors.toList());
                 BigDecimal bigDecimalTime=new BigDecimal(0);