Prechádzať zdrojové kódy

fix(dataTwin): 设备监控列表索引错误问题

wangpx 11 mesiacov pred
rodič
commit
e8551dd5c6

+ 1 - 2
admin/src/main/java/com/dcs/dcs/service/IDcsEquipmentService.java

@@ -2,7 +2,6 @@ package com.dcs.dcs.service;
 
 import com.dcs.dcs.domain.DcsEquipment;
 import com.dcs.dcs.domain.vo.DcsEquipmentFormVo;
-import com.dcs.equipment.domain.vo.DataTwinEquipmentVO;
 
 import java.util.List;
 import java.util.Map;
@@ -88,5 +87,5 @@ public interface IDcsEquipmentService
      */
     public List<Map<String, Object>> getEquipmentSensorTree();
 
-    List<DataTwinEquipmentVO> buildDataTwinTree(List<DataTwinEquipmentVO> dataTwinEquipmentVoList);
+//    List<DataTwinEquipmentVO> buildDataTwinTree(List<DataTwinEquipmentVO> dataTwinEquipmentVoList);
 }

+ 26 - 27
admin/src/main/java/com/dcs/dcs/service/impl/DcsEquipmentServiceImpl.java

@@ -5,7 +5,6 @@ import com.dcs.dcs.domain.DcsEquipment;
 import com.dcs.dcs.domain.vo.DcsEquipmentFormVo;
 import com.dcs.dcs.mapper.DcsEquipmentMapper;
 import com.dcs.dcs.service.IDcsEquipmentService;
-import com.dcs.equipment.domain.vo.DataTwinEquipmentVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -106,32 +105,32 @@ public class DcsEquipmentServiceImpl implements IDcsEquipmentService
     }
 
 
-    @Override
-    public List<DataTwinEquipmentVO> buildDataTwinTree(List<DataTwinEquipmentVO> dataTwinEquipmentVoList) {
-        // 1. 先构建一个 Map,保证所有节点都在 Map 中
-        Map<Long, DataTwinEquipmentVO> equipmentMap = new HashMap<>();
-        for (DataTwinEquipmentVO equipment : dataTwinEquipmentVoList) {
-            equipmentMap.put(equipment.getEquipmentId(), equipment);
-        }
-
-        // 2. 进行父子关联
-        List<DataTwinEquipmentVO> rootNodes = new ArrayList<>();
-        for (DataTwinEquipmentVO equipment : dataTwinEquipmentVoList) {
-            if (equipment.getParentsId() == null || equipment.getParentsId().equals(0L)) {
-                rootNodes.add(equipment);
-            } else {
-                DataTwinEquipmentVO parent = equipmentMap.get(equipment.getParentsId());
-                if (parent != null) {
-                    List<DataTwinEquipmentVO> children = parent.getChildren();
-                    if (children == null) children = new ArrayList<>();
-                    children.add(equipment);
-                    parent.setChildren(children);
-                }
-            }
-        }
-
-        return rootNodes;
-    }
+//    @Override
+//    public List<DataTwinEquipmentVO> buildDataTwinTree(List<DataTwinEquipmentVO> dataTwinEquipmentVoList) {
+//        // 1. 先构建一个 Map,保证所有节点都在 Map 中
+//        Map<Long, DataTwinEquipmentVO> equipmentMap = new HashMap<>();
+//        for (DataTwinEquipmentVO equipment : dataTwinEquipmentVoList) {
+//            equipmentMap.put(equipment.getEquipmentId(), equipment);
+//        }
+//
+//        // 2. 进行父子关联
+//        List<DataTwinEquipmentVO> rootNodes = new ArrayList<>();
+//        for (DataTwinEquipmentVO equipment : dataTwinEquipmentVoList) {
+//            if (equipment.getParentsId() == null || equipment.getParentsId().equals(0L)) {
+//                rootNodes.add(equipment);
+//            } else {
+//                DataTwinEquipmentVO parent = equipmentMap.get(equipment.getParentsId());
+//                if (parent != null) {
+//                    List<DataTwinEquipmentVO> children = parent.getChildren();
+//                    if (children == null) children = new ArrayList<>();
+//                    children.add(equipment);
+//                    parent.setChildren(children);
+//                }
+//            }
+//        }
+//
+//        return rootNodes;
+//    }
 
     //剔除多余的设备信息
     public static List<Map<String, Object>> filterTree(List<Map<String, Object>> tree) {

+ 5 - 3
admin/src/main/java/com/dcs/equipment/controller/DataTwinController.java

@@ -18,8 +18,10 @@ public class DataTwinController {
     @Autowired
     private DataTwinService service;
 
-    @RequestMapping("/list")
-    public AjaxResult list() {
-        return AjaxResult.success(service.selectDataTwinList());
+    @RequestMapping("/getEquipmentList")
+    public AjaxResult getEquipmentList() {
+        return AjaxResult.success(service.getEquipmentList());
     }
+
+
 }

+ 9 - 1
admin/src/main/java/com/dcs/equipment/service/DataTwinService.java

@@ -1,6 +1,7 @@
 package com.dcs.equipment.service;
 
 import com.dcs.equipment.domain.vo.DataTwinEquipmentVO;
+import com.dcs.equipment.domain.vo.DataTwinInfluxDBVO;
 
 import java.util.List;
 
@@ -10,5 +11,12 @@ import java.util.List;
  */
 public interface DataTwinService {
 
-    List<DataTwinEquipmentVO> selectDataTwinList();
+    List<DataTwinEquipmentVO> getEquipmentList();
+
+    // TODO 将聚合和时间 表名等创建为常量
+    List<DataTwinInfluxDBVO> queryTemperatureByDay();
+
+    List<DataTwinInfluxDBVO> queryTemperatureByWeek();
+
+    List<DataTwinInfluxDBVO> queryTemperatureByMonth();
 }

+ 0 - 1
admin/src/main/java/com/dcs/equipment/service/InfluxDBService.java

@@ -1,6 +1,5 @@
 package com.dcs.equipment.service;
 
-import com.dcs.dcs.domain.vo.DcsEquipmentFormVo;
 import com.dcs.equipment.domain.InfluxDBQuery;
 import com.dcs.equipment.domain.vo.DataTwinInfluxDBVO;
 import com.dcs.hnyz.domain.vo.EquipmentParamFormVo;

+ 141 - 16
admin/src/main/java/com/dcs/equipment/service/impl/DataTwinServiceImpl.java

@@ -1,10 +1,14 @@
 package com.dcs.equipment.service.impl;
 
-import com.dcs.dcs.service.IDcsEquipmentService;
+import com.dcs.equipment.constants.FluxConstants;
+import com.dcs.equipment.domain.InfluxDBQuery;
 import com.dcs.equipment.domain.vo.DataTwinEquipmentVO;
+import com.dcs.equipment.domain.vo.DataTwinInfluxDBVO;
 import com.dcs.equipment.service.DataTwinService;
+import com.dcs.equipment.service.InfluxDBService;
 import com.dcs.equipment.service.ModbusTcpService;
 import com.dcs.hnyz.domain.vo.EquipmentParamFormVo;
+import com.influxdb.query.FluxTable;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -21,35 +25,156 @@ public class DataTwinServiceImpl implements DataTwinService {
     @Autowired
     private ModbusTcpService modbusTcpService;
     @Autowired
-    private IDcsEquipmentService dcsEquipmentService;
+    private InfluxDBService influxDBService;
 
     @Override
-    public List<DataTwinEquipmentVO> selectDataTwinList() {
+    public List<DataTwinInfluxDBVO> queryTemperatureByDay() {
+        // 构建查询条件
+        InfluxDBQuery query = new InfluxDBQuery();
+        query.setBucket("shanghai_dcs_bucket");
+        query.setMeasurement("data");
+        query.setTimeRangeStart(FluxConstants.TIME_ONE_DAY);
+        query.setWindowPeriod("4h");
+        query.setAggregateFunction(FluxConstants.AGGREGATE_FUNCTION_FIRST);
+        query.setFields(new String[]{"S2wdsj", "S1wdsj"});
+        query.setFill(0.0d);
+        // 查询数据
+        List<FluxTable> fluxTables = influxDBService.queryWithFlux(query);
+        // 数据列表
+        List<DataTwinInfluxDBVO> dataTwinInfluxDBVOList = new ArrayList<>();
+        // S1
+        FluxTable S1FluxTable = fluxTables.get(0);
+        DataTwinInfluxDBVO S1InfluxDBVO = new DataTwinInfluxDBVO();
+        S1InfluxDBVO.setName("S1");
+        S1InfluxDBVO.fillItems(S1FluxTable.getRecords());
+        // S2
+        FluxTable S2FluxTable = fluxTables.get(1);
+        DataTwinInfluxDBVO S2InfluxDBVO = new DataTwinInfluxDBVO();
+        S2InfluxDBVO.setName("S2");
+        S2InfluxDBVO.fillItems(S2FluxTable.getRecords());
+        // 添加到列表中
+        dataTwinInfluxDBVOList.add(S1InfluxDBVO);
+        dataTwinInfluxDBVOList.add(S2InfluxDBVO);
+        return dataTwinInfluxDBVOList;
+    }
+
+    @Override
+    public List<DataTwinInfluxDBVO> queryTemperatureByWeek() {
+        // 构建查询条件
+        InfluxDBQuery query = new InfluxDBQuery();
+        query.setBucket("shanghai_dcs_bucket");
+        query.setMeasurement("data");
+        query.setTimeRangeStart(FluxConstants.TIME_ONE_WEEK);
+        query.setWindowPeriod("28h");
+        query.setAggregateFunction(FluxConstants.AGGREGATE_FUNCTION_FIRST);
+        query.setFields(new String[]{"S2wdsj", "S1wdsj"});
+        // 查询数据
+        List<FluxTable> fluxTables = influxDBService.queryWithFlux(query);
+        // 数据列表
+        List<DataTwinInfluxDBVO> dataTwinInfluxDBVOList = new ArrayList<>();
+        // S1
+        FluxTable S1FluxTable = fluxTables.get(0);
+        DataTwinInfluxDBVO S1InfluxDBVO = new DataTwinInfluxDBVO();
+        S1InfluxDBVO.setName("S1");
+        S1InfluxDBVO.fillItems(S1FluxTable.getRecords());
+        // S2
+        FluxTable S2FluxTable = fluxTables.get(1);
+        DataTwinInfluxDBVO S2InfluxDBVO = new DataTwinInfluxDBVO();
+        S2InfluxDBVO.setName("S2");
+        S2InfluxDBVO.fillItems(S2FluxTable.getRecords());
+        // 添加到列表中
+        dataTwinInfluxDBVOList.add(S1InfluxDBVO);
+        dataTwinInfluxDBVOList.add(S2InfluxDBVO);
+        return dataTwinInfluxDBVOList;
+    }
+
+    @Override
+    public List<DataTwinInfluxDBVO> queryTemperatureByMonth() {
+        // 构建查询条件
+        InfluxDBQuery query = new InfluxDBQuery();
+        query.setBucket("shanghai_dcs_bucket");
+        query.setMeasurement("data");
+        query.setTimeRangeStart(FluxConstants.TIME_ONE_MONTH);
+        query.setWindowPeriod("5d");
+        query.setAggregateFunction(FluxConstants.AGGREGATE_FUNCTION_FIRST);
+        query.setFields(new String[]{"S2wdsj", "S1wdsj"});
+        // 查询数据
+        List<FluxTable> fluxTables = influxDBService.queryWithFlux(query);
+        // 数据列表
+        List<DataTwinInfluxDBVO> dataTwinInfluxDBVOList = new ArrayList<>();
+        // S1
+        FluxTable S1FluxTable = fluxTables.get(0);
+        DataTwinInfluxDBVO S1InfluxDBVO = new DataTwinInfluxDBVO();
+        S1InfluxDBVO.setName("S1");
+        S1InfluxDBVO.fillItems(S1FluxTable.getRecords());
+        // S2
+        FluxTable S2FluxTable = fluxTables.get(1);
+        DataTwinInfluxDBVO S2InfluxDBVO = new DataTwinInfluxDBVO();
+        S2InfluxDBVO.setName("S2");
+        S2InfluxDBVO.fillItems(S2FluxTable.getRecords());
+        // 添加到列表中
+        dataTwinInfluxDBVOList.add(S1InfluxDBVO);
+        dataTwinInfluxDBVOList.add(S2InfluxDBVO);
+        return dataTwinInfluxDBVOList;
+    }
+
+    // TODO 索引问题
+    @Override
+    public List<DataTwinEquipmentVO> getEquipmentList() {
         List<EquipmentParamFormVo> EquipmentParamFormVoList = modbusTcpService.getDataTwinEquipmentValues();
         List<DataTwinEquipmentVO> dataTwinEquipmentVoList = new ArrayList<>();
-        System.out.println("EquipmentParamFormVoList:" + EquipmentParamFormVoList);
+        // 传感器
         // S1
-        EquipmentParamFormVo S1Temperature = EquipmentParamFormVoList.get(68);
-        S1Temperature.setEquipmentName("S1温度");
+        EquipmentParamFormVo S1Temperature = EquipmentParamFormVoList.get(37);
+        S1Temperature.setRegisterName("S1温度");
         extracted(dataTwinEquipmentVoList, S1Temperature);
-        EquipmentParamFormVo S1Pressure = EquipmentParamFormVoList.get(81);
-        S1Pressure.setEquipmentName("S1压力");
+        EquipmentParamFormVo S1Pressure = EquipmentParamFormVoList.get(45);
+        S1Pressure.setRegisterName("S1压力");
         extracted(dataTwinEquipmentVoList, S1Pressure);
         // S2
-        EquipmentParamFormVo S2Temperature = EquipmentParamFormVoList.get(43);
-        S2Temperature.setEquipmentName("S2温度");
+        EquipmentParamFormVo S2Temperature = EquipmentParamFormVoList.get(26);
+        S2Temperature.setRegisterName("S2温度");
         extracted(dataTwinEquipmentVoList, S2Temperature);
-        EquipmentParamFormVo S2Pressure = EquipmentParamFormVoList.get(45);
-        S2Pressure.setEquipmentName("S2压力");
+        EquipmentParamFormVo S2Pressure = EquipmentParamFormVoList.get(27);
+        S2Pressure.setRegisterName("S2压力");
         extracted(dataTwinEquipmentVoList, S2Pressure);
         // M1
-        EquipmentParamFormVo M1Pressure = EquipmentParamFormVoList.get(48);
-        M1Pressure.setEquipmentName("M1压力");
+        EquipmentParamFormVo M1Pressure = EquipmentParamFormVoList.get(28);
+        M1Pressure.setRegisterName("M1压力");
         extracted(dataTwinEquipmentVoList, M1Pressure);
         // M2
-        EquipmentParamFormVo M2Pressure = EquipmentParamFormVoList.get(84);
-        M2Pressure.setEquipmentName("M2压力");
+        EquipmentParamFormVo M2Pressure = EquipmentParamFormVoList.get(46);
+        M2Pressure.setRegisterName("M2压力");
         extracted(dataTwinEquipmentVoList, M2Pressure);
+        // 变频器
+        // LB3
+        EquipmentParamFormVo LB3Frequency = EquipmentParamFormVoList.get(41);
+        LB3Frequency.setRegisterName("LB3频率");
+        extracted(dataTwinEquipmentVoList, LB3Frequency);
+        // LB6
+        EquipmentParamFormVo LB4Frequency = EquipmentParamFormVoList.get(42);
+        LB4Frequency.setRegisterName("LB6频率");
+        extracted(dataTwinEquipmentVoList, LB4Frequency);
+        // LB7
+        EquipmentParamFormVo LB5Frequency = EquipmentParamFormVoList.get(43);
+        LB5Frequency.setRegisterName("LB7频率");
+        extracted(dataTwinEquipmentVoList, LB5Frequency);
+        // LB9
+        EquipmentParamFormVo LB6Frequency = EquipmentParamFormVoList.get(40);
+        LB6Frequency.setRegisterName("LB9频率");
+        extracted(dataTwinEquipmentVoList, LB6Frequency);
+        // S1搅拌器
+        EquipmentParamFormVo LB7Frequency = EquipmentParamFormVoList.get(38);
+        LB7Frequency.setRegisterName("S1搅拌器频率");
+        extracted(dataTwinEquipmentVoList, LB7Frequency);
+        // S2搅拌器
+        EquipmentParamFormVo LB8Frequency = EquipmentParamFormVoList.get(39);
+        LB8Frequency.setRegisterName("S2搅拌器频率");
+        extracted(dataTwinEquipmentVoList, LB8Frequency);
+        // 装车泵
+        EquipmentParamFormVo LB9Frequency = EquipmentParamFormVoList.get(44);
+        LB9Frequency.setRegisterName("装车泵频率");
+        extracted(dataTwinEquipmentVoList, LB9Frequency);
         return dataTwinEquipmentVoList;
 
     }

+ 2 - 2
admin/src/main/java/com/dcs/equipment/service/impl/ModbusTcpServiceImpl.java

@@ -24,7 +24,7 @@ import java.util.List;
 import java.util.concurrent.CompletableFuture;
 
 import static com.dcs.equipment.constants.ModbusConstants.*;
-import static com.dcs.equipment.task.ModbusTcpTask.getBroadCastEquipmentFormVOList;
+import static com.dcs.equipment.task.ModbusTcpTask.getBroadCastEquipmentParamFormVOList;
 import static com.dcs.equipment.utils.ModbusUtil.*;
 
 /**
@@ -46,7 +46,7 @@ public class ModbusTcpServiceImpl implements ModbusTcpService {
 
     @Override
     public List<EquipmentParamFormVo> getDataTwinEquipmentValues() {
-        List<EquipmentParamFormVo> equipmentFormVoList = getBroadCastEquipmentFormVOList();
+        List<EquipmentParamFormVo> equipmentFormVoList = getBroadCastEquipmentParamFormVOList();
         return equipmentFormVoList;
     }
     // 更新设备寄存器信息和数据地址

+ 13 - 13
admin/src/main/java/com/dcs/equipment/task/ModbusTcpTask.java

@@ -62,10 +62,10 @@ public class ModbusTcpTask {
         modbusTcpService.updateEquipmentCodes();
     }
     // 广播的设备消息数据
-    private static List<EquipmentParamFormVo> broadCastEquipmentFormVOList = new ArrayList<>();
+    private static List<EquipmentParamFormVo> broadCastEquipmentParamFormVOList = new ArrayList<>();
 
-    public static List<EquipmentParamFormVo> getBroadCastEquipmentFormVOList() {
-        return broadCastEquipmentFormVOList;
+    public static List<EquipmentParamFormVo> getBroadCastEquipmentParamFormVOList() {
+        return broadCastEquipmentParamFormVOList;
     }
 
     // 保存数据到influxdb
@@ -75,7 +75,7 @@ public class ModbusTcpTask {
         , scheduledExecutorService);
     }
 
-    private void updateDataToEquipmentFormVOList() {
+    private void updateDataToEquipmentParamFormVOList() {
         // modbus请求次数
         int requestNum = modbusRequestList.size();
         // 保存modbus响应信息
@@ -142,29 +142,29 @@ public class ModbusTcpTask {
                 break;
             }
         }
-        broadCastEquipmentFormVOList = deepCopyEquipmentParamFormVOList;
+        broadCastEquipmentParamFormVOList = deepCopyEquipmentParamFormVOList;
         saveDataToInfluxdb(deepCopyEquipmentParamFormVOList);
     }
 
-//    private List<EquipmentFormVo> getEquipmentFormVoTree(List<EquipmentFormVo> equipmentParamList) {
+//    private List<EquipmentParamFormVo> getEquipmentParamFormVoTree(List<EquipmentParamFormVo> equipmentParamList) {
 //        return dcsEquipmentService.buildTree(equipmentParamList);
 //    }
 
     // 保存并广播设备数据消息
     public void saveAndBroadcastEquipmentData() {
-        updateDataToEquipmentFormVOList();
+        updateDataToEquipmentParamFormVOList();
         // 广播列表设备数据
-        equipmentListWebSocketServer.broadCastInfo(JSON.toJSONString(broadCastEquipmentFormVOList));
+        equipmentListWebSocketServer.broadCastInfo(JSON.toJSONString(broadCastEquipmentParamFormVOList));
     }
 
     public void broacastEquipmentTree() {
         // 拷贝设备信息
-//        List<EquipmentParamFormVo> deepCopyEquipmentParamFormVOList = broadCastEquipmentFormVOList;
-//        for (EquipmentParamFormVo equipmentFormVo : broadCastEquipmentFormVOList) {
-//            deepCopyEquipmentParamFormVOList.add(equipmentFormVo.clone());
+//        List<EquipmentParamFormVo> deepCopyEquipmentParamFormVOList = broadCastEquipmentParamFormVOList;
+//        for (EquipmentParamFormVo equipmentParamFormVo : broadCastEquipmentParamFormVOList) {
+//            deepCopyEquipmentParamFormVOList.add(equipmentParamFormVo.clone());
 //        }
-//        List<EquipmentParamFormVo> equipmentFormVoTree = dcsEquipmentService.buildTree(deepCopyEquipmentParamFormVOList);
-//        equipmentTreeWebSocketServer.broadCastInfo(JSON.toJSONString(equipmentFormVoTree));
+//        List<EquipmentParamFormVo> equipmentParamFormVoTree = dcsEquipmentService.buildTree(deepCopyEquipmentParamFormVOList);
+//        equipmentTreeWebSocketServer.broadCastInfo(JSON.toJSONString(equipmentParamFormVoTree));
     }
 
 

+ 3 - 1
framework/src/main/java/com/dcs/framework/config/SecurityConfig.java

@@ -115,7 +115,9 @@ public class SecurityConfig
                     // 静态资源,可匿名访问
                         .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                         .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
-                        .antMatchers("/webSocket/**", "/modbus/getDataTwinEquipmentValues/**", "/datatwin/**").permitAll()
+                        .antMatchers("/webSocket/**", "/modbus/getDataTwinEquipmentValues/**", "/datatwin/**", "/influxdb/**"
+//                                , "/**"
+                        ).permitAll()
                         // 除上面外的所有请求全部需要鉴权认证
                         .anyRequest().authenticated();
             })