|
|
@@ -20,10 +20,7 @@ import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -80,19 +77,22 @@ public class DyeCalcHourController extends BaseController {
|
|
|
Map<Integer, DyeDeviceVO> devices2 = devices.get(line2).stream().collect(Collectors.toMap(DyeDeviceVO::getSortNum, device -> device));
|
|
|
List<DyeCompareVO> compareVOList = new ArrayList<>();
|
|
|
|
|
|
- // 确保两个产线具有相同的设备排序编号
|
|
|
- if (!devices1.keySet().equals(devices2.keySet())) {
|
|
|
- return AjaxResult.error("两条产线设备配置不一致");
|
|
|
- }
|
|
|
+ // 修改为只对比两条产线上共同拥有的设备序号
|
|
|
+ Set<Integer> commonSortNums = new HashSet<>(devices1.keySet());
|
|
|
+ commonSortNums.retainAll(devices2.keySet());
|
|
|
|
|
|
+ // 移除完全相同的设备配置检查,改为只对比共同拥有的设备
|
|
|
devices1.forEach((sortNum, device) -> {
|
|
|
- DyeDeviceVO d1 = devices1.get(sortNum);
|
|
|
- DyeDeviceVO d2 = devices2.get(sortNum);
|
|
|
-
|
|
|
- // 处理类型参数
|
|
|
- processParameters(d1.getTypeParas(), d1, d2, groupedData, compareVOList);
|
|
|
- // 处理能源参数
|
|
|
- processParameters(d1.getEngParas(), d1, d2, groupedData, compareVOList);
|
|
|
+ // 只处理两条产线都存在的设备序号
|
|
|
+ if (commonSortNums.contains(sortNum)) {
|
|
|
+ DyeDeviceVO d1 = devices1.get(sortNum);
|
|
|
+ DyeDeviceVO d2 = devices2.get(sortNum);
|
|
|
+
|
|
|
+ // 处理类型参数
|
|
|
+ processParameters(d1.getTypeParas(), d1, d2, groupedData, compareVOList);
|
|
|
+ // 处理能源参数
|
|
|
+ processParameters(d1.getEngParas(), d1, d2, groupedData, compareVOList);
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
return success(compareVOList);
|
|
|
@@ -124,30 +124,40 @@ public class DyeCalcHourController extends BaseController {
|
|
|
|
|
|
//data1和data2进行Mann-Whitney U检验,输出必要结果
|
|
|
if (data1 != null && data2 != null && !data1.isEmpty() && !data2.isEmpty()) {
|
|
|
- // 提取两组数据的值
|
|
|
- double[] values1 = data1.stream().mapToDouble(item -> item.getParaValue().doubleValue()).toArray();
|
|
|
- double[] values2 = data2.stream().mapToDouble(item -> item.getParaValue().doubleValue()).toArray();
|
|
|
-
|
|
|
- // 进行Mann-Whitney U检验
|
|
|
- MannWhitneyUTest test = new MannWhitneyUTest();
|
|
|
- double uValue = test.mannWhitneyU(values1, values2);
|
|
|
- double pValue = test.mannWhitneyUTest(values1, values2);
|
|
|
-
|
|
|
- // 判断差异是否显著(通常以 p < 0.05 为显著性水平)
|
|
|
- String significance = pValue < 0.05 ? "显著" : "不显著";
|
|
|
-
|
|
|
- DyeCompareVO compareVO = new DyeCompareVO();
|
|
|
- compareVO.setTypeName(d1.getTypeName());
|
|
|
- compareVO.setParaName(paraName);
|
|
|
- compareVO.setDeviceName1(d1.getDeviceName());
|
|
|
- compareVO.setDeviceName2(d2.getDeviceName());
|
|
|
- compareVO.setDeviceId1(d1.getDeviceId());
|
|
|
- compareVO.setDeviceId2(d2.getDeviceId());
|
|
|
- compareVO.setResult(significance);
|
|
|
- compareVO.setUValue(uValue);
|
|
|
- compareVO.setPValue(pValue);
|
|
|
- if (pValue < 0.05) {
|
|
|
- compareVOList.add(compareVO);
|
|
|
+ // 提取两组数据的值,增加空值检查
|
|
|
+ double[] values1 = data1.stream()
|
|
|
+ .filter(item -> item.getParaValue() != null) // 过滤掉paraValue为null的项
|
|
|
+ .mapToDouble(item -> item.getParaValue().doubleValue())
|
|
|
+ .toArray();
|
|
|
+
|
|
|
+ double[] values2 = data2.stream()
|
|
|
+ .filter(item -> item.getParaValue() != null) // 过滤掉paraValue为null的项
|
|
|
+ .mapToDouble(item -> item.getParaValue().doubleValue())
|
|
|
+ .toArray();
|
|
|
+
|
|
|
+ // 确保数组不为空后再进行统计检验
|
|
|
+ if (values1.length > 0 && values2.length > 0) {
|
|
|
+ // 进行Mann-Whitney U检验
|
|
|
+ MannWhitneyUTest test = new MannWhitneyUTest();
|
|
|
+ double uValue = test.mannWhitneyU(values1, values2);
|
|
|
+ double pValue = test.mannWhitneyUTest(values1, values2);
|
|
|
+
|
|
|
+ // 判断差异是否显著(通常以 p < 0.05 为显著性水平)
|
|
|
+ String significance = pValue < 0.05 ? "显著" : "不显著";
|
|
|
+
|
|
|
+ DyeCompareVO compareVO = new DyeCompareVO();
|
|
|
+ compareVO.setTypeName(d1.getTypeName());
|
|
|
+ compareVO.setParaName(paraName);
|
|
|
+ compareVO.setDeviceName1(d1.getDeviceName());
|
|
|
+ compareVO.setDeviceName2(d2.getDeviceName());
|
|
|
+ compareVO.setDeviceId1(d1.getDeviceId());
|
|
|
+ compareVO.setDeviceId2(d2.getDeviceId());
|
|
|
+ compareVO.setResult(significance);
|
|
|
+ compareVO.setUValue(uValue);
|
|
|
+ compareVO.setPValue(pValue);
|
|
|
+ if (pValue < 0.05) {
|
|
|
+ compareVOList.add(compareVO);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
});
|