|
@@ -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);
|