|
@@ -1,6 +1,8 @@
|
|
|
package com.jjt.biz.service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
|
+import com.alibaba.fastjson2.JSONArray;
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.jjt.biz.service.IApiYrService;
|
|
|
import com.jjt.biz.vo.*;
|
|
|
import com.jjt.calc.domain.TwinCalcDayYhj;
|
|
@@ -31,6 +33,9 @@ import java.time.ZoneOffset;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
+import java.util.function.BiFunction;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.function.Predicate;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -391,18 +396,82 @@ public class ApiYrServiceImpl implements IApiYrService {
|
|
|
para.setName(item.getDeviceName());
|
|
|
para.setPara(map);
|
|
|
if ("Forward".equals(item.getWsName())) {
|
|
|
- qzProcessor(qz, item, flag, para);
|
|
|
+ qzProcessor(qz, item, para);
|
|
|
} else if ("Back".equals(item.getWsName())) {
|
|
|
- hzProcessor(hz, item, flag, para);
|
|
|
+ hzProcessor(hz, item, para);
|
|
|
} else {
|
|
|
//留给烘固机
|
|
|
- yrProcessor(yr, item, flag, para);
|
|
|
+ yrProcessor(yr, item, para);
|
|
|
}
|
|
|
});
|
|
|
+ calcAvg(vo, flag);
|
|
|
return vo;
|
|
|
}
|
|
|
|
|
|
- private void qzProcessor(CompareVO.Qz qz, TwinCalcHourRz item, boolean flag, CompareVO.Para para) {
|
|
|
+ private void calcAvg(CompareVO vo, boolean flag) {
|
|
|
+ // 提取公用方法
|
|
|
+ Function<Map.Entry<String, Object>, BigDecimal> valueExtractor = entry -> {
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(entry.getValue().toString());
|
|
|
+ JSONArray array = jsonObject.getJSONArray("act");
|
|
|
+ return array != null && !array.isEmpty() ? array.getJSONObject(0).getBigDecimal("value") : BigDecimal.ZERO;
|
|
|
+ };
|
|
|
+
|
|
|
+ // 计算平均值的方法
|
|
|
+ BiFunction<List<CompareVO.Para>, Predicate<Map.Entry<String, Object>>, BigDecimal> calculateAvg = (list, filter) ->
|
|
|
+ list.stream()
|
|
|
+ .flatMap(item -> item.getPara().entrySet().stream())
|
|
|
+ .filter(filter)
|
|
|
+ .map(valueExtractor)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 前整车间计算
|
|
|
+ List<CompareVO.Para> qzDx = vo.getQz().getDxPara();
|
|
|
+ List<CompareVO.Para> qzTg = vo.getQz().getTgPara();
|
|
|
+
|
|
|
+ vo.getQz().setHxAvgTemp(qzDx.isEmpty() ? BigDecimal.ZERO :
|
|
|
+ calculateAvg.apply(qzDx, entry -> entry.getKey().contains("烘箱温度"))
|
|
|
+ .divide(new BigDecimal(qzDx.size() * 4), 2, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ vo.getQz().setTgAvgTemp(qzTg.isEmpty() ? BigDecimal.ZERO :
|
|
|
+ calculateAvg.apply(qzTg, entry -> entry.getKey().contains("烫辊") && entry.getKey().contains("温度"))
|
|
|
+ .divide(new BigDecimal(qzTg.size() * 2), 2, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ vo.getQz().setTgAvgSpeed(qzTg.isEmpty() ? BigDecimal.ZERO :
|
|
|
+ calculateAvg.apply(qzTg, entry -> entry.getKey().contains("走布速度"))
|
|
|
+ .divide(new BigDecimal(qzTg.size()), 2, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ // 后整车间计算
|
|
|
+ List<CompareVO.Para> hzDx = vo.getHz().getDxPara();
|
|
|
+ List<CompareVO.Para> hzTg = vo.getHz().getTgPara();
|
|
|
+
|
|
|
+ vo.getHz().setHxAvgTemp(hzDx.isEmpty() ? BigDecimal.ZERO :
|
|
|
+ calculateAvg.apply(hzDx, entry -> entry.getKey().contains("烘箱温度"))
|
|
|
+ .divide(new BigDecimal(hzDx.size() * 4), 2, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ vo.getHz().setTgAvgTemp(hzTg.isEmpty() ? BigDecimal.ZERO :
|
|
|
+ calculateAvg.apply(hzTg, entry -> entry.getKey().contains("烫辊") && entry.getKey().contains("温度"))
|
|
|
+ .divide(new BigDecimal(hzTg.size() * 2), 2, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ vo.getHz().setTgAvgSpeed(hzTg.isEmpty() ? BigDecimal.ZERO :
|
|
|
+ calculateAvg.apply(hzTg, entry -> entry.getKey().contains("走布速度"))
|
|
|
+ .divide(new BigDecimal(hzTg.size()), 2, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ if (!flag) {
|
|
|
+ vo.getQz().setDxPara(null);
|
|
|
+ vo.getQz().setGsPara(null);
|
|
|
+ vo.getQz().setSmPara(null);
|
|
|
+ vo.getQz().setTgPara(null);
|
|
|
+ vo.getHz().setDxPara(null);
|
|
|
+ vo.getHz().setGsPara(null);
|
|
|
+ vo.getHz().setQmPara(null);
|
|
|
+ vo.getHz().setSmPara(null);
|
|
|
+ vo.getHz().setTgPara(null);
|
|
|
+ vo.getHz().setTjPara(null);
|
|
|
+ vo.getYr().setHgPara(null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void qzProcessor(CompareVO.Qz qz, TwinCalcHourRz item, CompareVO.Para para) {
|
|
|
//前整
|
|
|
switch (item.getTypeId()) {
|
|
|
case 2:
|
|
@@ -410,51 +479,41 @@ public class ApiYrServiceImpl implements IApiYrService {
|
|
|
if ("Y".equals(item.getOnline())) {
|
|
|
qz.setDx(qz.getDx() + 1);
|
|
|
}
|
|
|
- if (flag) {
|
|
|
- qz.addDxPara(para);
|
|
|
- }
|
|
|
+ qz.addDxPara(para);
|
|
|
break;
|
|
|
case 3:
|
|
|
//双棍烫光机
|
|
|
if ("Y".equals(item.getOnline())) {
|
|
|
qz.setTg(qz.getTg() + 1);
|
|
|
}
|
|
|
- if (flag) {
|
|
|
- qz.addTgPara(para);
|
|
|
- }
|
|
|
+ qz.addTgPara(para);
|
|
|
break;
|
|
|
case 4:
|
|
|
//高梳机
|
|
|
if ("Y".equals(item.getOnline())) {
|
|
|
qz.setGs(qz.getGs() + 1);
|
|
|
}
|
|
|
- if (flag) {
|
|
|
- qz.addGsPara(para);
|
|
|
- }
|
|
|
+ qz.addGsPara(para);
|
|
|
break;
|
|
|
case 5:
|
|
|
//双棍刷毛
|
|
|
if ("Y".equals(item.getOnline())) {
|
|
|
qz.setSm(qz.getSm() + 1);
|
|
|
}
|
|
|
- if (flag) {
|
|
|
- qz.addSmPara(para);
|
|
|
- }
|
|
|
+ qz.addSmPara(para);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void yrProcessor(CompareVO.Yr yr, TwinCalcHourRz item, boolean flag, CompareVO.Para para) {
|
|
|
+ private void yrProcessor(CompareVO.Yr yr, TwinCalcHourRz item, CompareVO.Para para) {
|
|
|
if (8 == item.getTypeId()) {
|
|
|
- if (flag) {
|
|
|
- yr.addHgPara(para);
|
|
|
- }
|
|
|
+ yr.addHgPara(para);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void hzProcessor(CompareVO.Hz hz, TwinCalcHourRz item, boolean flag, CompareVO.Para para) {
|
|
|
+ private void hzProcessor(CompareVO.Hz hz, TwinCalcHourRz item, CompareVO.Para para) {
|
|
|
//后整
|
|
|
switch (item.getTypeId()) {
|
|
|
case 6:
|
|
@@ -462,54 +521,42 @@ public class ApiYrServiceImpl implements IApiYrService {
|
|
|
if ("Y".equals(item.getOnline())) {
|
|
|
hz.setDx(hz.getDx() + 1);
|
|
|
}
|
|
|
- if (flag) {
|
|
|
- hz.addDxPara(para);
|
|
|
- }
|
|
|
+ hz.addDxPara(para);
|
|
|
break;
|
|
|
case 3:
|
|
|
//双棍烫光机
|
|
|
if ("Y".equals(item.getOnline())) {
|
|
|
hz.setTg(hz.getTg() + 1);
|
|
|
}
|
|
|
- if (flag) {
|
|
|
- hz.addTgPara(para);
|
|
|
- }
|
|
|
+ hz.addTgPara(para);
|
|
|
break;
|
|
|
case 4:
|
|
|
//高梳机
|
|
|
if ("Y".equals(item.getOnline())) {
|
|
|
hz.setGs(hz.getGs() + 1);
|
|
|
}
|
|
|
- if (flag) {
|
|
|
- hz.addGsPara(para);
|
|
|
- }
|
|
|
+ hz.addGsPara(para);
|
|
|
break;
|
|
|
case 5:
|
|
|
//双棍刷毛
|
|
|
if ("Y".equals(item.getOnline())) {
|
|
|
hz.setSm(hz.getSm() + 1);
|
|
|
}
|
|
|
- if (flag) {
|
|
|
- hz.addSmPara(para);
|
|
|
- }
|
|
|
+ hz.addSmPara(para);
|
|
|
break;
|
|
|
case 7:
|
|
|
//起毛机
|
|
|
if ("Y".equals(item.getOnline())) {
|
|
|
hz.setQm(hz.getQm() + 1);
|
|
|
}
|
|
|
- if (flag) {
|
|
|
- hz.addQmPara(para);
|
|
|
- }
|
|
|
+ hz.addQmPara(para);
|
|
|
break;
|
|
|
case 9:
|
|
|
//烫剪机
|
|
|
if ("Y".equals(item.getOnline())) {
|
|
|
hz.setTj(hz.getTj() + 1);
|
|
|
}
|
|
|
- if (flag) {
|
|
|
- hz.addTjPara(para);
|
|
|
- }
|
|
|
+ hz.addTjPara(para);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|