wukai 2 kuukautta sitten
vanhempi
commit
5aae57b900

+ 49 - 39
jjt-biz/src/main/java/com/jjt/dye/controller/DyeCalcHourController.java

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