wukai 2 dní pred
rodič
commit
582782a902

+ 61 - 35
jjt-biz/src/main/java/com/jjt/rz/service/impl/TwinCalcHourRzServiceImpl.java

@@ -131,60 +131,82 @@ public class TwinCalcHourRzServiceImpl implements ITwinCalcHourRzService {
      */
     @Override
     public void hour(LocalDateTime start, LocalDateTime end) {
+        // 将开始时间转换为Date类型,用于后续查询
         Date date = Date.from(start.toLocalDate().atStartOfDay(ZoneOffset.of("+8")).toInstant());
+        // 将开始和结束时间转换为毫秒,用于后续查询
         Long startTime = start.toInstant(ZoneOffset.of("+8")).toEpochMilli();
         Long endTime = end.toInstant(ZoneOffset.of("+8")).toEpochMilli();
+
+        // 删除已存在的小时级计算结果,避免重复计算
         deleteTwinCalcHourRz(start.toLocalDate(), start.getHour());
+
+        // 获取设备列表
         List<TwinDeviceRz> list = rzService.selectTwinDeviceRzList(new TwinDeviceRz());
+        // 获取设备类型列表
         List<TwinDeviceType> typeList = typeService.selectTwinDeviceTypeAll();
+        // 使用设备类型ID作为键,设备类型作为值,创建设备类型映射
         Map<Long, TwinDeviceType> typeMap = new HashMap<>(16);
-        //存明细数据,key用deviceCode+dataCode
+        // 存储明细数据,使用设备代码和数据代码作为键
         Map<String, TwinDeviceTypeData> detailMap = new HashMap<>(16);
         typeList.forEach(item -> typeMap.put(item.getTypeId(), item));
+
+        // 初始化存储查询结果的列表和映射
         List<String> strList = new ArrayList<>();
         Map<String, TwinDeviceRz> rzMap = new HashMap<>(16);
 
-        //这个集合用来保存数据是属于 设定值 还是mes 还是实际值
+        // 这个映射用于保存数据是属于 设定值 还是mes 还是实际值
         Map<String, Pair<String, String>> clsMap = new HashMap<>(16);
-        //查询状态结尾部分
+        // 查询状态结尾部分
         String statusSuffix = ".Capacity_data_1";
         list.forEach(item -> {
-            String str = item.getDeviceCode() + statusSuffix;
+            String deviceCode = item.getDeviceCode();
+            String str = deviceCode + statusSuffix;
             item.setOnline(false);
-            rzMap.put(item.getDeviceCode(), item);
+            rzMap.put(deviceCode, item);
             strList.add(str);
 
             TwinDeviceType type = typeMap.get(item.getTypeId());
-            type.getTwinDeviceTypeDataList().forEach(detail -> {
-                String suffix1 = "." + detail.getDataCode();
-                strList.add(item.getDeviceCode() + suffix1);
-                clsMap.put(item.getDeviceCode() + suffix1, new Pair<>("set", detail.getDataName()));
-                detailMap.put(item.getDeviceCode() + suffix1, detail);
-                if (StringUtils.isNotEmpty(detail.getMesCode())) {
-                    suffix1 = "." + detail.getMesCode();
-                    strList.add(item.getDeviceCode() + suffix1);
-                    clsMap.put(item.getDeviceCode() + suffix1, new Pair<>("mes", detail.getDataName()));
-                    detailMap.put(item.getDeviceCode() + suffix1, detail);
-                }
+            if (type != null && type.getTwinDeviceTypeDataList() != null) {
+                type.getTwinDeviceTypeDataList().forEach(detail -> {
+                    String suffix1 = "." + detail.getDataCode();
+                    String key1 = deviceCode + suffix1;
+                    strList.add(key1);
+                    clsMap.put(key1, new Pair<>("set", detail.getDataName()));
+                    detailMap.put(key1, detail);
+
+                    if (StringUtils.isNotEmpty(detail.getMesCode())) {
+                        suffix1 = "." + detail.getMesCode();
+                        String key2 = deviceCode + suffix1;
+                        strList.add(key2);
+                        clsMap.put(key2, new Pair<>("mes", detail.getDataName()));
+                        detailMap.put(key2, detail);
+                    }
 
-                if (StringUtils.isNotEmpty(detail.getActCode())) {
-                    JSONArray array = JSONUtil.parseArray(detail.getActCode());
-                    for (int j = 0; j < array.size(); j++) {
-                        JSONObject jsonObject = array.getJSONObject(j);
-                        String suffix2 = "." + jsonObject.getStr("code");
-                        String name = jsonObject.getStr("name");
-                        if (StringUtils.isEmpty(name)) {
-                            name = detail.getDataName();
+                    if (StringUtils.isNotEmpty(detail.getActCode())) {
+                        JSONArray array = JSONUtil.parseArray(detail.getActCode());
+                        for (int j = 0; j < array.size(); j++) {
+                            JSONObject jsonObject = array.getJSONObject(j);
+                            String code = jsonObject.getStr("code");
+                            String name = jsonObject.getStr("name");
+                            if (StringUtils.isEmpty(name)) {
+                                name = detail.getDataName();
+                            }
+                            String suffix2 = "." + code;
+                            String key3 = deviceCode + suffix2;
+                            strList.add(key3);
+                            clsMap.put(key3, new Pair<>("act", name));
+                            detailMap.put(key3, detail);
                         }
-                        strList.add(item.getDeviceCode() + suffix2);
-                        clsMap.put(item.getDeviceCode() + suffix2, new Pair<>("act", name));
-                        detailMap.put(item.getDeviceCode() + suffix2, detail);
                     }
-                }
-            });
+                });
+            }
         });
+
+        // 构建查询SQL
         String sql = "select last %s from root.tl.suxi where time>%s and time <=%s";
         sql = String.format(sql, String.join(",", strList), startTime, endTime);
+
+        // 执行查询并处理结果
         JSONObject jsonObject = iotService.query(sql);
         JSONObject data = jsonObject.getJSONObject("data");
         JSONArray values = data.getJSONArray("values");
@@ -204,20 +226,20 @@ public class TwinCalcHourRzServiceImpl implements ITwinCalcHourRzService {
                     params = new HashMap<>();
                     rz.setParams(params);
                 }
-                //判断状态
+                // 判断状态
                 if (type.contains(statusSuffix)) {
                     if (rz.getTypeId() == 3 || rz.getTypeId() == 5 || rz.getTypeId() == 9) {
-                        //双棍烫光和两棍刷毛需要按照机器状态来判断是否开机
-                        //=1 设备故障停机  ,=2 人工停机 ,=3是缺布/断布停机 ,=4满布停机,=5设备上电待机中  =6设备自动运行中,=7设备过站中
-                        if (value.equals("6")) {
+                        // 双棍烫光和两棍刷毛需要按照机器状态来判断是否开机
+                        //=1 设备故障停机  ,=2 人工停机 ,=3是缺布/断布停机 ,=4满布停机,=5设备上电待机中  =6设备自动运行中,=7设备过站中
+                        if ("6".equals(value)) {
                             rz.setOnline(true);
                         }
                     } else {
-                        //其他类型只需要有值就表示开机
+                        // 其他类型只需要有值就表示开机
                         rz.setOnline(true);
                     }
                 } else {
-                    //工艺参数数据获取
+                    // 工艺参数数据获取
                     String key = deviceCode + "." + dataCode;
                     TwinDeviceTypeData detail = detailMap.get(key);
                     Pair<String, String> clsPair = clsMap.get(key);
@@ -244,6 +266,8 @@ public class TwinCalcHourRzServiceImpl implements ITwinCalcHourRzService {
                 }
             }
         }
+
+        // 构建最终结果列表
         List<TwinCalcHourRz> rzList = new ArrayList<>();
         list.forEach(item -> {
             TwinCalcHourRz calc = new TwinCalcHourRz();
@@ -259,6 +283,7 @@ public class TwinCalcHourRzServiceImpl implements ITwinCalcHourRzService {
             rzList.add(calc);
         });
 
+        // 批量插入计算结果
         try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
             if (rzList.size() > 0) {
                 TwinCalcHourRzMapper mapper = sqlSession.getMapper(TwinCalcHourRzMapper.class);
@@ -268,6 +293,7 @@ public class TwinCalcHourRzServiceImpl implements ITwinCalcHourRzService {
         }
     }
 
+
     /**
      * 按日期和时间删除数据
      *