Bladeren bron

完成首页统计图接口返回结果的修改
完成opcda类型驱动,基础属性和附属属性接口的调整
完成手动报表查询实时数据,将表格数据和统计图数据同时展示出来
修改opcua和opcda,一级一级获取下级树,如果获取到最后一级通过leaves返回,返回全路径,以及真实读取时所用的值

zhoupeng 1 jaar geleden
bovenliggende
commit
de05919f10
22 gewijzigde bestanden met toevoegingen van 702 en 640 verwijderingen
  1. 7 3
      chaunyi_opc/opc_common/src/main/java/com/example/opc_common/entity/ChartItem.java
  2. 6 2
      chaunyi_opc/opc_common/src/main/java/com/example/opc_common/entity/DataSourceDriver.java
  3. 6 1
      chaunyi_opc/opc_common/src/main/java/com/example/opc_common/entity/ReportChart.java
  4. 4 0
      chaunyi_opc/opc_common/src/main/java/com/example/opc_common/entity/TableTemplateChart.java
  5. 17 7
      chaunyi_opc/opc_common/src/main/java/com/example/opc_common/enums/OpcDaDriverEnum.java
  6. 27 59
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/controller/DataSourceController.java
  7. 7 1
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/controller/ItemGroupController.java
  8. 0 32
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/controller/ReportTableController.java
  9. 4 6
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/dao/DataSourceDao.java
  10. 3 1
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/dao/ReportTableDao.java
  11. 3 7
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/DataSourceService.java
  12. 0 4
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/ReportTableService.java
  13. 6 6
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/ChartServiceImpl.java
  14. 63 72
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/DataSourceServiceImpl.java
  15. 6 300
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/ReportTableServiceImpl.java
  16. 270 26
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/ReportTableTask.java
  17. 68 37
      chaunyi_opc/opc_da/src/main/java/com/example/opc_da/util/OpcDaUtil.java
  18. 2 3
      chaunyi_opc/opc_da/src/main/resources/mapper/ChartDao.xml
  19. 40 28
      chaunyi_opc/opc_da/src/main/resources/mapper/DataSourceDao.xml
  20. 61 8
      chaunyi_opc/opc_da/src/main/resources/mapper/ReportTableDao.xml
  21. 40 20
      chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcAsyncTask.java
  22. 62 17
      chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/util/OpcUaUtil.java

+ 7 - 3
chaunyi_opc/opc_common/src/main/java/com/example/opc_common/entity/ChartItem.java

@@ -3,6 +3,9 @@ package com.example.opc_common.entity;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
 
 @Data
 public class ChartItem implements Serializable {
@@ -22,14 +25,15 @@ public class ChartItem implements Serializable {
     /**
      * 结果集
      */
-    private String valueList;
+    List<BigDecimal> valueList=new ArrayList<>();
     /**
      * 结果集对应的时间
      */
-    private String valueTimeList;
+    List<String> valueTimeList=new ArrayList<>();
     /**
      * 结果集对应的索引
      */
-    private String valueIndexList;
+    List<Long> valueIndexList=new ArrayList<>();
+
 
 }

+ 6 - 2
chaunyi_opc/opc_common/src/main/java/com/example/opc_common/entity/DataSourceDriver.java

@@ -3,6 +3,7 @@ package com.example.opc_common.entity;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
 
 @Data
@@ -16,12 +17,15 @@ public class DataSourceDriver implements Serializable {
     private Integer id;
 
     /**
-     * 数据源类型id
+     * 驱动名称
      */
-    private Integer dataSourceTypeId;
+    private String driverName;
+
     /**
      * 驱动的clsId
      */
     private String clsId;
 
+    List<DriverBasicItem> driverBasicItemList = new ArrayList<>();
+
 }

+ 6 - 1
chaunyi_opc/opc_common/src/main/java/com/example/opc_common/entity/ReportChart.java

@@ -27,6 +27,10 @@ public class ReportChart implements Serializable {
      */
     private String chartName;
     /**
+     * 0取原始值,1取计算值
+     */
+    private Integer valueType;
+    /**
      * 备用字段
      */
     private String standby;
@@ -38,10 +42,11 @@ public class ReportChart implements Serializable {
 
     }
 
-    public ReportChart(Integer reportTableId, String chartType, String chartName, String standby) {
+    public ReportChart(Integer reportTableId, String chartType, String chartName, Integer valueType, String standby) {
         this.reportTableId = reportTableId;
         this.chartType = chartType;
         this.chartName = chartName;
+        this.valueType = valueType;
         this.standby = standby;
     }
 }

+ 4 - 0
chaunyi_opc/opc_common/src/main/java/com/example/opc_common/entity/TableTemplateChart.java

@@ -31,6 +31,10 @@ public class TableTemplateChart implements Serializable {
      */
     private Integer valueTakingMode;
     /**
+     * 0取原始值,1取计算值
+     */
+    private Integer valueType;
+    /**
      * 时段类型0天,1时,2分,3秒(必填)
      */
     private Integer bucketType;

+ 17 - 7
chaunyi_opc/opc_common/src/main/java/com/example/opc_common/enums/OpcDaDriverEnum.java

@@ -1,19 +1,29 @@
 package com.example.opc_common.enums;
 
 public enum OpcDaDriverEnum {
-    KEPSERVER("7BC0CC8E-482C-47CA-ABDC-0FE7F9C6E729"),
-    OPCIFIX("3C5702A2-EB8E-11D4-83A4-00105A984CBD"),
-    WINCC("75D00BBB-DDA5-11D1-B944-9E614D000000"),
-    SCADA("04524449-C6B2-4D62-8471-C64FA1DDF64F"),
-    YOKOGAWA("E6C32641-F1CF-11D0-B0E4-080009CCD384"),
-    PAS300("4EA2713D-CA07-11D4-BEF5-00002120DB5E");
+    KEPSERVER("KEPSERVER", "7BC0CC8E-482C-47CA-ABDC-0FE7F9C6E729"),
+    OPCIFIX("OPCIFIX", "3C5702A2-EB8E-11D4-83A4-00105A984CBD"),
+    WINCC("WINCC", "75D00BBB-DDA5-11D1-B944-9E614D000000"),
+    SCADA("SCADA", "04524449-C6B2-4D62-8471-C64FA1DDF64F"),
+    YOKOGAWA("YOKOGAWA", "E6C32641-F1CF-11D0-B0E4-080009CCD384"),
+    PAS300("PAS300", "4EA2713D-CA07-11D4-BEF5-00002120DB5E");
 
+    private String name;
     private String value;
 
-    OpcDaDriverEnum(String value) {
+    OpcDaDriverEnum(String name, String value) {
+        this.name = name;
         this.value = value;
     }
 
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
     public String getValue() {
         return value;
     }

+ 27 - 59
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/controller/DataSourceController.java

@@ -122,7 +122,7 @@ public class DataSourceController {
     }
 
     @GetMapping("/readItemValue")
-    public Result readItemValue(Integer id, String itemStr){
+    public Result readItemValue(Integer id, String itemStr) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源不能为空");
         }
@@ -145,6 +145,16 @@ public class DataSourceController {
     }
 
     /**
+     * 获取opcda枚举中所有的clsId值
+     *
+     * @return
+     */
+    @GetMapping("/getOpcDaDriverEnum")
+    public Result getOpcDaDriverEnum() {
+        return dataSourceService.getOpcDaDriverEnum();
+    }
+
+    /**
      * 新增数据源驱动配置
      *
      * @param dataSourceDriver
@@ -152,8 +162,8 @@ public class DataSourceController {
      */
     @PostMapping("/addDataSourceDriver")
     public Result addDataSourceDriver(@RequestBody DataSourceDriver dataSourceDriver) {
-        if (Blank.isEmpty(dataSourceDriver, dataSourceDriver.getDataSourceTypeId(), dataSourceDriver.getClsId())) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源类型、驱动不能为空");
+        if (Blank.isEmpty(dataSourceDriver, dataSourceDriver.getDriverName(), dataSourceDriver.getClsId())) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源驱动名称、驱动不能为空");
         }
         return dataSourceService.addDataSourceDriver(dataSourceDriver);
     }
@@ -166,90 +176,48 @@ public class DataSourceController {
      */
     @PostMapping("/updateDataSourceDriver")
     public Result updateDataSourceDriver(@RequestBody DataSourceDriver dataSourceDriver) {
-        if (Blank.isEmpty(dataSourceDriver, dataSourceDriver.getId(), dataSourceDriver.getDataSourceTypeId(), dataSourceDriver.getClsId())) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源id、类型、驱动不能为空");
+        if (Blank.isEmpty(dataSourceDriver, dataSourceDriver.getId(), dataSourceDriver.getDriverName(), dataSourceDriver.getClsId())) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源id、驱动名称、驱动不能为空");
         }
         return dataSourceService.updateDataSourceDriver(dataSourceDriver);
     }
 
     /**
-     * 获取所有数据源驱动配置
-     *
-     * @return
-     */
-    @GetMapping("/getAllDataSourceDriver")
-    public Result getAllDataSourceDriver() {
-        return dataSourceService.getAllDataSourceDriver();
-    }
-
-    /**
-     * 删除数据源驱动配置
+     * 通过id获取驱动
      *
      * @param id
      * @return
      */
-    @PostMapping("/delDataSourceDriver")
-    public Result delDataSourceDriver(Integer id) {
+    @GetMapping("/getDataSourceDriverByid")
+    public Result getDataSourceDriverByid(Integer id) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "id不能为空");
         }
-        return dataSourceService.delDataSourceDriver(id);
+        return dataSourceService.getDataSourceDriverByid(id);
     }
 
     /**
-     * 新增驱动基础数据项
-     *
-     * @param driverBasicItem
-     * @return
-     */
-    @PostMapping("/addDriverBasicItem")
-    public Result addDriverBasicItem(@RequestBody DriverBasicItem driverBasicItem) {
-        if (Blank.isEmpty(driverBasicItem, driverBasicItem.getDriverId(), driverBasicItem.getItemName())) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "驱动、基础项名称不能为空");
-        }
-        return dataSourceService.addDriverBasicItem(driverBasicItem);
-    }
-
-    /**
-     * 修改驱动基础数据项
-     *
-     * @param driverBasicItem
-     * @return
-     */
-    @PostMapping("/updateDriverBasicItem")
-    public Result updateDriverBasicItem(@RequestBody DriverBasicItem driverBasicItem) {
-        if (Blank.isEmpty(driverBasicItem, driverBasicItem.getDriverId(), driverBasicItem.getItemName())) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "id、驱动、基础项名称不能为空");
-        }
-        return dataSourceService.updateDriverBasicItem(driverBasicItem);
-    }
-
-    /**
-     * 通过数据源驱动配置id获取相应配置的基础项
+     * 获取所有数据源驱动配置
      *
-     * @param driverId
      * @return
      */
-    @GetMapping("/getDbItemByDid")
-    public Result getDbItemByDid(Integer driverId) {
-        if (Blank.isEmpty(driverId)) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据源驱动配置id不能为空");
-        }
-        return dataSourceService.getDbItemByDid(driverId);
+    @GetMapping("/getAllDataSourceDriver")
+    public Result getAllDataSourceDriver() {
+        return dataSourceService.getAllDataSourceDriver();
     }
 
     /**
-     * 通过id删除驱动基础项配置
+     * 删除数据源驱动配置
      *
      * @param id
      * @return
      */
-    @PostMapping("delDriverBasicItem")
-    public Result delDriverBasicItem(Integer id) {
+    @PostMapping("/delDataSourceDriver")
+    public Result delDataSourceDriver(Integer id) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "id不能为空");
         }
-        return dataSourceService.delDriverBasicItem(id);
+        return dataSourceService.delDataSourceDriver(id);
     }
 
 }

+ 7 - 1
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/controller/ItemGroupController.java

@@ -171,11 +171,17 @@ public class ItemGroupController {
         return itemGroupService.getTableItemGroupById(id);
     }
 
+    /**
+     * 设置表达式
+     *
+     * @param itemGroup
+     * @return
+     */
     @PostMapping("/batchSetExpresses")
     @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
     public Result batchSetExpresses(@RequestBody ItemGroup itemGroup) {
         if (Blank.isEmpty(itemGroup, itemGroup.getItemList())) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据组的标签不能为空");
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据组的不能为空");
         }
         return itemGroupService.batchSetExpresses(itemGroup);
     }

+ 0 - 32
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/controller/ReportTableController.java

@@ -147,38 +147,6 @@ public class ReportTableController {
     }
 
     /**
-     * 新增报表
-     *
-     * @param reportTable
-     * @return
-     */
-    @PostMapping("/addReportTable")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.ADD)
-    public Result addReportTable(@RequestBody ReportTable reportTable) {
-        if (Blank.isEmpty(reportTable, reportTable.getReportTableType(), reportTable.getTableTemplateId(),
-                reportTable.getReportTableName(), reportTable.getReportTableData())) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表类型、取值类型、模板、名称、内容不能为空");
-        }
-        return reportTableService.addReportTable(reportTable);
-    }
-
-    /**
-     * 修改报表
-     *
-     * @param reportTable
-     * @return
-     */
-    @PostMapping("/updateReportTable")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.UPDATE)
-    public Result updateReportTable(@RequestBody ReportTable reportTable) {
-        if (Blank.isEmpty(reportTable, reportTable.getId(), reportTable.getReportTableName(),
-                reportTable.getVersion())) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表id,名称,版本号不能为空");
-        }
-        return reportTableService.updateReportTable(reportTable);
-    }
-
-    /**
      * 获取当前登录人的所有报表
      *
      * @param page

+ 4 - 6
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/dao/DataSourceDao.java

@@ -43,15 +43,13 @@ public interface DataSourceDao {
 
     Integer updateDataSourceDriver(DataSourceDriver dataSourceDriver);
 
-    DriverBasicItem getDriverBasicItem(DriverBasicItem driverBasicItem);
-
     Integer addDriverBasicItem(DriverBasicItem driverBasicItem);
 
-    DriverBasicItem getDriverBasicItemNoId(DriverBasicItem driverBasicItem);
+    Integer delDriverBasicItem(Integer dataSourceDriverId);
 
-    Integer updateDriverBasicItem(DriverBasicItem driverBasicItem);
+    DataSourceDriver getDsdByTypeId(Integer dataSourceTypeId);
 
-    Integer delDriverBasicItem(Integer id);
+    Integer addDriverBasicItemList(Integer dataSourceDriverId,List<DriverBasicItem> driverBasicItemList);
 
-    DataSourceDriver getDsdByTypeId(Integer dataSourceTypeId);
+    DataSourceDriver getDataSourceDriverByid(Integer id);
 }

+ 3 - 1
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/dao/ReportTableDao.java

@@ -109,7 +109,7 @@ public interface ReportTableDao {
 
     Integer addReportTableItemList(List<ReportTableItem> reportTableItemList);
 
-    List<DataSource> getTableDataSource(Integer id);
+    List<DataSource> getReportDataSource(Integer reportTableId);
 
     List<Item> getItemListByDataSource(Integer id, DataSource dataSource);
 
@@ -128,4 +128,6 @@ public interface ReportTableDao {
     List<DataSource> getChartDataSource(Integer id);
 
     Integer stopAutoTableById(Integer reportTableId, Integer runState);
+
+    List<ReportChart> getReportChartList(Integer reportTableId);
 }

+ 3 - 7
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/DataSourceService.java

@@ -31,13 +31,9 @@ public interface DataSourceService {
 
     Result delDataSourceDriver(Integer id);
 
-    Result addDriverBasicItem(DriverBasicItem driverBasicItem);
-
-    Result updateDriverBasicItem(DriverBasicItem driverBasicItem);
-
-    Result getDbItemByDid(Integer driverId);
+    Result readItemValue(Integer id, String itemStr);
 
-    Result delDriverBasicItem(Integer id);
+    Result getOpcDaDriverEnum();
 
-    Result readItemValue(Integer id, String itemStr);
+    Result getDataSourceDriverByid(Integer id);
 }

+ 0 - 4
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/ReportTableService.java

@@ -18,10 +18,6 @@ public interface ReportTableService {
 
     Result updateTableTemplate(TableTemplate tableTemplate);
 
-    Result addReportTable(ReportTable reportTable);
-
-    Result updateReportTable(ReportTable reportTable);
-
     Result getAllReportTable(Integer page, Integer limit, Integer isAutoReport);
 
     Result getReportTableById(Integer id);

+ 6 - 6
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/ChartServiceImpl.java

@@ -117,9 +117,9 @@ public class ChartServiceImpl implements ChartService {
                                 valueIndexList.add((long) j);
                                 startTimeTime = endTimeTime;
                             }
-                            chartItem.setValueList(valueList.toString());
-                            chartItem.setValueTimeList(valueTimeList.toString());
-                            chartItem.setValueIndexList(valueIndexList.toString());
+                            chartItem.setValueList(valueList);
+                            chartItem.setValueTimeList(valueTimeList);
+                            chartItem.setValueIndexList(valueIndexList);
                         } catch (Exception e) {
 
                         }
@@ -187,9 +187,9 @@ public class ChartServiceImpl implements ChartService {
                                     orgList = new ArrayList<>();
                                     list = new ArrayList<>();
                                 }
-                                chartItem.setValueList(flage ? valueList.toString() : orgValueList.toString());
-                                chartItem.setValueTimeList(valueTimeList.toString());
-                                chartItem.setValueIndexList(valueIndexList.toString());
+                                chartItem.setValueList(flage ? valueList : orgValueList);
+                                chartItem.setValueTimeList(valueTimeList);
+                                chartItem.setValueIndexList(valueIndexList);
                             } catch (Exception e) {
 
                             }

+ 63 - 72
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/DataSourceServiceImpl.java

@@ -3,6 +3,7 @@ package com.example.opc_da.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.example.opc_common.entity.*;
+import com.example.opc_common.enums.OpcDaDriverEnum;
 import com.example.opc_common.enums.ResultEnum;
 import com.example.opc_common.exception.CustomException;
 import com.example.opc_common.util.Blank;
@@ -24,9 +25,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.client.RestTemplate;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.*;
 
 @Service
 @Transactional
@@ -219,50 +220,76 @@ public class DataSourceServiceImpl implements DataSourceService {
     }
 
     @Override
+    public Result getOpcDaDriverEnum() {
+        Class<OpcDaDriverEnum> clazz = OpcDaDriverEnum.class;
+        Object[] objects = clazz.getEnumConstants();
+        try {
+            Method getName = clazz.getMethod("getName");
+            Method getValue = clazz.getMethod("getValue");
+            Map<String, String> map = new HashMap<>();
+            for (Object o : objects) {
+                map.put(getName.invoke(o).toString(), getValue.invoke(o).toString());
+            }
+            return Result.ok(map);
+        } catch (NoSuchMethodException e) {
+            throw new RuntimeException(e);
+        } catch (InvocationTargetException e) {
+            throw new RuntimeException(e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public Result getDataSourceDriverByid(Integer id) {
+        DataSourceDriver dataSourceDriver = dataSourceDao.getDataSourceDriverByid(id);
+        List<DriverBasicItem> driverBasicItemList = dataSourceDao.getDbItemByDid(id);
+        dataSourceDriver.setDriverBasicItemList(driverBasicItemList);
+        return Result.ok(dataSourceDriver);
+    }
+
+    @Override
     public synchronized Result addDataSourceDriver(DataSourceDriver dataSourceDriver) {
-        Integer dataSourceTypeId = dataSourceDriver.getDataSourceTypeId();
-        DataSourceType dataSourceType = dataSourceDao.getDataSourceTypeById(dataSourceTypeId);
-        String dataSourceTypeKey = dataSourceType.getDataSourceTypeKey();
         String clsId = dataSourceDriver.getClsId();
-        if (OpcUtil.isOpcDa(dataSourceTypeKey)) {
-            if (OpcDaUtil.isAdapterClsId(clsId)) {
-                DataSourceDriver dataSourceDriver1 = dataSourceDao.getDataSourceDriver(dataSourceDriver);
-                if (Blank.isNotEmpty(dataSourceDriver1)) {
-                    return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "已经存在此种驱动的配置了");
-                }
-                if (dataSourceDao.addDataSourceDriver(dataSourceDriver) <= 0) {
-                    return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "新增驱动配置失败");
-                }
-                return Result.ok("新增驱动配置成功");
-            } else {
-                throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配此种类型的驱动");
+        if (OpcDaUtil.isAdapterClsId(clsId)) {
+            DataSourceDriver dataSourceDriver1 = dataSourceDao.getDataSourceDriver(dataSourceDriver);
+            if (Blank.isNotEmpty(dataSourceDriver1)) {
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "已经存在此种驱动的配置了");
+            }
+            if (dataSourceDao.addDataSourceDriver(dataSourceDriver) <= 0) {
+                return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "新增驱动配置失败");
             }
+            List<DriverBasicItem> driverBasicItemList = dataSourceDriver.getDriverBasicItemList();
+            if (Blank.isNotEmpty(driverBasicItemList)) {
+                Integer id = dataSourceDriver.getId();
+                dataSourceDao.addDriverBasicItemList(id, driverBasicItemList);
+            }
+            return Result.ok("新增驱动配置成功");
         } else {
-            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前只支持opcda类型的数据源");
+            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配此种类型的驱动");
         }
     }
 
     @Override
     public synchronized Result updateDataSourceDriver(DataSourceDriver dataSourceDriver) {
-        Integer dataSourceTypeId = dataSourceDriver.getDataSourceTypeId();
-        DataSourceType dataSourceType = dataSourceDao.getDataSourceTypeById(dataSourceTypeId);
-        String dataSourceTypeKey = dataSourceType.getDataSourceTypeKey();
         String clsId = dataSourceDriver.getClsId();
-        if (OpcUtil.isOpcDa(dataSourceTypeKey)) {
-            if (OpcDaUtil.isAdapterClsId(clsId)) {
-                DataSourceDriver dataSouceDriver1 = dataSourceDao.getDataSourceDriverNoId(dataSourceDriver);
-                if (Blank.isNotEmpty(dataSouceDriver1)) {
-                    return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "已经存在此种驱动的配置了");
-                }
-                if (dataSourceDao.updateDataSourceDriver(dataSourceDriver) <= 0) {
-                    return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "修改驱动配置失败");
-                }
-                return Result.ok("修改驱动配置成功");
-            } else {
-                throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配此种类型的驱动");
+        if (OpcDaUtil.isAdapterClsId(clsId)) {
+            DataSourceDriver dataSouceDriver1 = dataSourceDao.getDataSourceDriverNoId(dataSourceDriver);
+            if (Blank.isNotEmpty(dataSouceDriver1)) {
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "已经存在此种驱动的配置了");
+            }
+            if (dataSourceDao.updateDataSourceDriver(dataSourceDriver) <= 0) {
+                return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "修改驱动配置失败");
+            }
+            Integer id = dataSourceDriver.getId();
+            List<DriverBasicItem> driverBasicItemList = dataSourceDriver.getDriverBasicItemList();
+            dataSourceDao.delDriverBasicItem(id);
+            if (Blank.isNotEmpty(driverBasicItemList)) {
+                dataSourceDao.addDriverBasicItemList(id, driverBasicItemList);
             }
+            return Result.ok("修改驱动配置成功");
         } else {
-            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前只支持opcda类型的数据源");
+            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配此种类型的驱动");
         }
     }
 
@@ -280,43 +307,7 @@ public class DataSourceServiceImpl implements DataSourceService {
         if (dataSourceDao.delDataSourceDriver(id) <= 0) {
             return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "删除失败");
         }
-        return Result.ok("删除成功");
-    }
-
-    @Override
-    public synchronized Result addDriverBasicItem(DriverBasicItem driverBasicItem) {
-        DriverBasicItem driverBasicItem1 = dataSourceDao.getDriverBasicItem(driverBasicItem);
-        if (Blank.isNotEmpty(driverBasicItem1)) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "此驱动已经存在这种名称的配置了");
-        }
-        if (dataSourceDao.addDriverBasicItem(driverBasicItem) <= 0) {
-            return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "新增驱动基础数据项失败");
-        }
-        return Result.ok("新增驱动基础数据项成功");
-    }
-
-    @Override
-    public Result updateDriverBasicItem(DriverBasicItem driverBasicItem) {
-        DriverBasicItem driverBasicItem1 = dataSourceDao.getDriverBasicItemNoId(driverBasicItem);
-        if (Blank.isNotEmpty(driverBasicItem1)) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "此驱动已经存在这种名称的配置了");
-        }
-        if (dataSourceDao.updateDriverBasicItem(driverBasicItem) <= 0) {
-            return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "修改驱动基础数据项失败");
-        }
-        return Result.ok("修改驱动基础数据项成功");
-    }
-
-    @Override
-    public Result getDbItemByDid(Integer driverId) {
-        return Result.ok(dataSourceDao.getDbItemByDid(driverId));
-    }
-
-    @Override
-    public Result delDriverBasicItem(Integer id) {
-        if (dataSourceDao.delDriverBasicItem(id) <= 0) {
-            return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "删除失败");
-        }
+        dataSourceDao.delDriverBasicItem(id);
         return Result.ok("删除成功");
     }
 

+ 6 - 300
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/ReportTableServiceImpl.java

@@ -95,95 +95,18 @@ public class ReportTableServiceImpl implements ReportTableService {
         if (reportTableDao.addTableTemplate(tableTemplate) <= 0) {
             throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "添加报表失败");
         }
-        Integer tableTemplateId = tableTemplate.getId();
-        //获取模板表格数据的数据项信息
-        List<TableTemplateTableItem> tableTemplateItemList = tableTemplate.getTableTemplateItemList();
-        ReportTable reportTable = new ReportTable(
-                templateType, tableTemplateId, userId,
-                tableTemplate.getTemplateName(), tableTemplate.getTemplateData(), ConstantStr.DEFAULT_VERSION, date
-        );
+
         if (templateType.equals(ConstantStr.MANUAL_REPORT)) {
-            if (reportTableDao.addReportTable(reportTable) <= 0) {
-                throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "生成数据报表失败");
-            }
-            Integer reportTableId = reportTable.getId();
-            if (Blank.isNotEmpty(tableTemplateItemList)) {
-                List<ReportTableItem> reportTableItemList = new ArrayList<>();
-                for (TableTemplateTableItem t : tableTemplateItemList) {
-                    t.setTableTemplateId(tableTemplateId);
-                    if (Blank.isEmpty(t.getItemId(), t.getPlaceHolder(), t.getXaxis(), t.getYaxis())) {
-                        throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据项、占位符、横、纵坐标都不能为空");
-                    }
-                    if (Blank.isEmpty(t.getItemGroupId())) {
-                        continue;
-                    }
-                    //根据模板的数据项信息,生成报表数据项信息
-                    reportTableItemList.add(new ReportTableItem(
-                            reportTableId, t.getItemId(), t.getValueType(), t.getXaxis(), t.getYaxis(), t.getStandby(), null, null, null
-                    ));
-                }
-                //添加报表数据项信息
-                if (Blank.isNotEmpty(reportTableItemList)) {
-                    reportTableDao.addReportTableItemList(reportTableItemList);
-                }
-                //添加模板数据项信息
-                reportTableDao.addTableTemplateItem(tableTemplateItemList);
-            }
+            reportTableTask.manualReport(tableTemplate);
         } else if (templateType.equals(ConstantStr.AUTOMATIC_REPORT)) {
-            if (reportTableDao.addReportTable(reportTable) <= 0) {
-                throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "生成数据报表失败");
-            }
-            if (Blank.isNotEmpty(tableTemplateItemList)) {
-                for (TableTemplateTableItem t : tableTemplateItemList) {
-                    t.setTableTemplateId(tableTemplateId);
-                    if (Blank.isEmpty(t.getItemId(), t.getPlaceHolder(), t.getXaxis(), t.getYaxis(), t.getValueTakingMode(), t.getBucketType(), t.getBucketValue())) {
-                        throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据项、占位符、横、纵坐标、取值模式、时段类型、值都不能为空");
-                    }
-                }
-            }
-            //自动报表只需要添加模板的数据项信息,定时器执行的时候,会根据模板的数据项信息,自动生成报表的数据项信息
-            reportTableDao.addTableTemplateItem(tableTemplateItemList);
+            reportTableTask.autoReport(tableTemplate);
         } else if (templateType.equals(ConstantStr.EVENT_DRIVEN_REPORT)) {
-            Integer eventNum = tableTemplate.getEventNum();
-            if (Blank.isEmpty(eventNum)) {
-                throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "事件驱动显示数量设置不能为空");
-            }
-            reportTable.setCurrentNum(eventNum);
-            if (reportTableDao.addReportTable(reportTable) <= 0) {
-                throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "生成数据报表失败");
-            }
-            if (Blank.isNotEmpty(tableTemplateItemList)) {
-                for (TableTemplateTableItem t : tableTemplateItemList) {
-                    t.setTableTemplateId(tableTemplateId);
-                    if (Blank.isEmpty(t.getItemId(), t.getPlaceHolder(), t.getXaxis(), t.getYaxis())) {
-                        throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据项、占位符、横、纵坐标都不能为空");
-                    }
-                }
-            }
-            //事件驱动报表只需要添加模板的数据项信息,驱动执行的时候,会根据模板的数据项信息,自动生成报表的数据项信息
-            reportTableDao.addTableTemplateItem(tableTemplateItemList);
+            reportTableTask.eventReport(tableTemplate);
         } else {
             throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前只支持手动,自动,事件驱动类型的报表");
         }
-
-        List<TableTemplateChart> tableTemplateChartList = tableTemplate.getTableTemplateChartList();
-        if (Blank.isNotEmpty(tableTemplateChartList)) {
-            for (TableTemplateChart ttc : tableTemplateChartList) {
-                if (Blank.isEmpty(ttc.getChartType(), ttc.getChartName(), ttc.getValueTakingMode(),
-                        ttc.getBucketType(), ttc.getBucketValue())) {
-                    throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "统计图类型、名称、取值模式、时段类型、时段值不能为空");
-                }
-                ttc.setTableTemplateId(tableTemplateId);
-                reportTableDao.addTableTemplateChart(ttc);
-                List<TableTemplateChartItem> tableTemplateChartItemList = ttc.getTableTemplateChartItemList();
-                if (Blank.isNotEmpty(tableTemplateChartItemList)) {
-                    reportTableDao.addTableTemplateChartItem(ttc.getId(), tableTemplateChartItemList);
-                }
-            }
-        }
-
         reportTableDao.addTableTemplateLog(new TableTemplateLog(
-                tableTemplateId, tableTemplate.getVersion(), date
+                tableTemplate.getId(), tableTemplate.getVersion(), date
         ));
         return Result.ok("添加报表模板成功");
     }
@@ -302,123 +225,6 @@ public class ReportTableServiceImpl implements ReportTableService {
     }
 
     @Override
-    public synchronized Result addReportTable(ReportTable reportTable) {
-        Integer reportTableType = reportTable.getReportTableType();
-        Integer tableTemplateId = reportTable.getTableTemplateId();
-        TableTemplate tableTemplate = reportTableDao.getTableTemplateById(tableTemplateId);
-        List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTtiDataByTemplateId(tableTemplateId);
-        List<TableTemplateChart> tableTemplateChartList = reportTableDao.getTtcDataByTemplateId(tableTemplateId);
-        if (Blank.isEmpty(tableTemplate)) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "此报表模板不存在");
-        }
-        if (!reportTableType.equals(tableTemplate.getTemplateType())) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表和报表模板类型不一致");
-        }
-        String userId = userUtil.getCurrentUserId();
-        ReportTable isExistReportTable = reportTableDao.getReportTableByName(userId, reportTable.getReportTableName());
-        reportTable.setUserId(userId);
-        if (!reportTable.getReportTableType().equals(ConstantStr.MANUAL_REPORT) &&
-                !reportTable.getReportTableType().equals(ConstantStr.AUTOMATIC_REPORT) &&
-                !reportTable.getReportTableType().equals(ConstantStr.EVENT_DRIVEN_REPORT)) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表类型不正确,请选择其他报表类型");
-        }
-        reportTable.setVersion(ConstantStr.DEFAULT_VERSION);
-        if (Blank.isNotEmpty(isExistReportTable)) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "已经存在此名称的报表了,请更改名称");
-        }
-        if (reportTableType.equals(ConstantStr.MANUAL_REPORT)) {
-            if (reportTableDao.addReportTable(reportTable) <= 0) {
-                return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "添加报表失败");
-            }
-            reportTableTask.manualReport(reportTable.getId(), tableTemplateItemList, tableTemplateChartList);
-        } else if (reportTableType.equals(ConstantStr.AUTOMATIC_REPORT)) {
-            String cron = reportTable.getCron();
-            Date startTime = reportTable.getStartTime();
-            Date endTime = reportTable.getEndTime();
-            if (Blank.isEmpty(startTime, endTime)) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据的开始、结束时间不能为空");
-            }
-            if (Blank.isEmpty(cron)) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "cron表达式不能为空");
-            }
-            if (!CronExpression.isValidExpression(cron)) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "cron表达式格式错误");
-            }
-            Date startTimeBefore = CronUtil.getTimeBefore(cron, startTime);
-            Date startTimeAfter = CronUtil.getTimeAfter(cron, startTime);
-            Date endTimeBefore = CronUtil.getTimeBefore(cron, endTime);
-            Date endTimeAfter = CronUtil.getTimeAfter(cron, endTime);
-            if (startTimeBefore.getTime() != endTimeBefore.getTime()) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "开始时间和结束时间必须在cron一个周期中");
-            }
-            if (startTimeAfter.getTime() != endTimeAfter.getTime()) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "开始时间和结束时间必须在cron一个周期中");
-            }
-            reportTable.setCronId(
-                    Blank.isEmpty(reportTable.getCronId()) ?
-                            UUID.randomUUID().toString().replace("-", "") :
-                            reportTable.getCronId()
-            );
-            if (reportTableDao.addReportTable(reportTable) <= 0) {
-                return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "添加报表失败");
-            }
-        } else if (reportTableType.equals(ConstantStr.EVENT_DRIVEN_REPORT)) {
-            if (reportTableDao.addReportTable(reportTable) <= 0) {
-                return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "添加报表失败");
-            }
-        } else {
-            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前只支持手动,自动,事件驱动类型的报表");
-        }
-        return Result.ok("添加报表成功");
-    }
-
-    @Override
-    public synchronized Result updateReportTable(ReportTable reportTable) {
-        String userId = userUtil.getCurrentUserId();
-        ReportTable isExistReportTable = reportTableDao.getReportTableByNameNoId(reportTable.getId(), userId, reportTable.getReportTableName());
-        if (Blank.isNotEmpty(isExistReportTable)) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "已经存在此名称的报表了,请更改名称");
-        }
-        ReportTable oldReportTable = reportTableDao.getReportTableById(reportTable.getId());
-        if (!reportTable.getVersion().equals(oldReportTable.getVersion())) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "此报表已被更改,请刷新后重试");
-        }
-        reportTable.setVersion(oldReportTable.getVersion() + 1);
-        Integer reportTableType = oldReportTable.getReportTableType();
-        if (!reportTableType.equals(reportTable.getReportTableType())) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表类型不允许被修改");
-        }
-        if (reportTableType.equals(ConstantStr.AUTOMATIC_REPORT)) {
-            if (oldReportTable.getRunState().equals(ConstantStr.START_UP)) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "自动报表处于运行状态,不允许被修改");
-            }
-            String cron = reportTable.getCron();
-            Date startTime = reportTable.getStartTime();
-            Date endTime = reportTable.getEndTime();
-            if (Blank.isEmpty(cron)) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "cron表达式不能为空");
-            }
-            if (!CronExpression.isValidExpression(cron)) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "cron表达式格式错误");
-            }
-            Date startTimeBefore = CronUtil.getTimeBefore(cron, startTime);
-            Date startTimeAfter = CronUtil.getTimeAfter(cron, startTime);
-            Date endTimeBefore = CronUtil.getTimeBefore(cron, endTime);
-            Date endTimeAfter = CronUtil.getTimeAfter(cron, endTime);
-            if (startTimeBefore.getTime() != endTimeBefore.getTime()) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "开始时间和结束时间必须在cron一个周期中");
-            }
-            if (startTimeAfter.getTime() != endTimeAfter.getTime()) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "开始时间和结束时间必须在cron一个周期中");
-            }
-        }
-        if (reportTableDao.updateReportTable(reportTable) <= 0) {
-            return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "修改报表失败");
-        }
-        return Result.ok("修改报表成功");
-    }
-
-    @Override
     public Result getAllReportTable(Integer page, Integer limit, Integer isAutoReport) {
         JSONObject jsonObject = new JSONObject();
         String userId = userUtil.getCurrentUserId();
@@ -441,107 +247,7 @@ public class ReportTableServiceImpl implements ReportTableService {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表类型不存在");
         }
         if (reportTableType.equals(ConstantStr.MANUAL_REPORT)) {
-            //如果是手动报表,通过所有项查看相关的数据源信息,遍历相关的数据源信息,建立
-            List<ReportTableItem> reportTableItemList = reportTableDao.getTableItemListById(id);
-            //获取手动报表所有表格数据项的数据源信息
-            List<DataSource> tableDataSourceList = reportTableDao.getTableDataSource(id);
-            if (Blank.isNotEmpty(tableDataSourceList)) {
-                for (DataSource dataSource : tableDataSourceList) {
-                    if (Blank.isNotEmpty(dataSource.getIpPassword())) {
-                        dataSource = DataSource.convertPassword(dataSource);
-                    }
-                    //查看手动报表中的数据项,哪些是属于这个数据源的
-                    DataSourceType dataSourceType = dataSourceDao.getDataSourceTypeById(dataSource.getTypeId());
-                    if (OpcUtil.isOpcUa(dataSourceType.getDataSourceTypeKey())) {
-                        JSONObject[] jsonObjects = restTemplate.postForObject(opcUaUrl + "/reportTable/getReportTableById/" + id, new HttpEntity<>(dataSource, new HttpHeaders()), JSONObject[].class);
-                        if (jsonObjects != null) {
-                            for (JSONObject jsonObject : jsonObjects) {
-                                Integer itemId = jsonObject.getInteger("itemId");
-                                for (int i = 0; i < reportTableItemList.size(); i++) {
-                                    ReportTableItem reportTableItem = reportTableItemList.get(i);
-                                    if (itemId.equals(reportTableItem.getItemId())) {
-                                        reportTableItemList.get(i).setValueList(
-                                                jsonObject.getString(reportTableItem.getValueType().equals(ConstantStr.CALCULATED_VALUE) ? "dataValue" : "dataOrgValue")
-                                        );
-                                    }
-                                }
-                            }
-                        }
-                    } else if (OpcUtil.isOpcDa(dataSourceType.getDataSourceTypeKey())) {
-                        List<Item> itemList = reportTableDao.getItemListByDataSource(id, dataSource);
-                        List<String> itemReadNameList = new ArrayList<>();
-                        for (Item item : itemList) {
-                            itemReadNameList.add(item.getItemReadName());
-                        }
-                        String[] items = itemReadNameList.toArray(new String[]{});
-                        List<DataModel> dataModelList = dataModelDao.getDmListByItemList(itemList);
-                        Map<String, DataModel> map = DataModel.genMap(itemList, dataModelList);
-                        //读取相应的实时数据
-                        List<JSONObject> jsonObjects = ReportTableTask.manualReportReal(dataSource, items, map);
-                        for (JSONObject jsonObject : jsonObjects) {
-                            String itemReadName = jsonObject.getString("itemReadName");
-                            for (int i = 0; i < itemList.size(); i++) {
-                                Item item = itemList.get(i);
-                                if (itemReadName.equals(item.getItemReadName())) {
-                                    Integer itemId = item.getId();
-                                    for (int j = 0; j < reportTableItemList.size(); j++) {
-                                        ReportTableItem reportTableItem = reportTableItemList.get(j);
-                                        if (itemId.equals(reportTableItem.getItemId())) {
-                                            reportTableItemList.get(j).setValueList(
-                                                    jsonObject.getString(reportTableItem.getValueType().equals(ConstantStr.CALCULATED_VALUE) ? "dataValue" : "dataOrgValue")
-                                            );
-                                        }
-                                    }
-                                    break;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            reportTable.setReportTableItemList(reportTableItemList);
-//            List<ReportChart> reportChartList=reportTableDao.getReportChart(id);
-            //获取手动报表所有统计图数据项的数据源信息
-            List<DataSource> chartDataSourceList = reportTableDao.getChartDataSource(id);
-            for (DataSource dataSource : chartDataSourceList) {
-                if (Blank.isNotEmpty(dataSource.getIpPassword())) {
-                    dataSource = DataSource.convertPassword(dataSource);
-                    DataSourceType dataSourceType = dataSourceDao.getDataSourceTypeById(dataSource.getTypeId());
-                    if (OpcUtil.isOpcUa(dataSourceType.getDataSourceTypeKey())) {
-                        JSONObject[] jsonObjects = restTemplate.postForObject(opcUaUrl + "/reportTable/getReportTableById/" + id, new HttpEntity<>(dataSource, new HttpHeaders()), JSONObject[].class);
-
-                    } else if (OpcUtil.isOpcDa(dataSourceType.getDataSourceTypeKey())) {
-                        List<Item> itemList = reportTableDao.getItemListByDataSource(id, dataSource);
-                        List<String> itemReadNameList = new ArrayList<>();
-                        for (Item item : itemList) {
-                            itemReadNameList.add(item.getItemReadName());
-                        }
-                        String[] items = itemReadNameList.toArray(new String[]{});
-                        List<DataModel> dataModelList = dataModelDao.getDmListByItemList(itemList);
-                        Map<String, DataModel> map = DataModel.genMap(itemList, dataModelList);
-                        //读取相应的实时数据
-                        List<JSONObject> jsonObjects = ReportTableTask.manualReportReal(dataSource, items, map);
-                        for (JSONObject jsonObject : jsonObjects) {
-                            String itemReadName = jsonObject.getString("itemReadName");
-                            for (int i = 0; i < itemList.size(); i++) {
-                                Item item = itemList.get(i);
-                                if (itemReadName.equals(item.getItemReadName())) {
-                                    Integer itemId = item.getId();
-                                    for (int j = 0; j < reportTableItemList.size(); j++) {
-                                        ReportTableItem reportTableItem = reportTableItemList.get(j);
-                                        if (itemId.equals(reportTableItem.getItemId())) {
-                                            reportTableItemList.get(j).setValueList(
-                                                    jsonObject.getString(reportTableItem.getValueType().equals(ConstantStr.CALCULATED_VALUE) ? "dataValue" : "dataOrgValue")
-                                            );
-                                        }
-                                    }
-                                    break;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
+            return reportTableTask.manualReportReal(reportTable);
         } else if (reportTableType.equals(ConstantStr.AUTOMATIC_REPORT) || reportTableType.equals(ConstantStr.EVENT_DRIVEN_REPORT)) {
             if (reportTableType.equals(ConstantStr.AUTOMATIC_REPORT)) {
                 Integer tableTemplateId = reportTable.getTableTemplateId();

+ 270 - 26
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/ReportTableTask.java

@@ -6,10 +6,7 @@ import com.example.opc_common.entity.*;
 import com.example.opc_common.enums.ResultEnum;
 import com.example.opc_common.exception.CustomException;
 import com.example.opc_common.util.*;
-import com.example.opc_da.dao.ItemGroupDao;
-import com.example.opc_da.dao.MessageNoticeDao;
-import com.example.opc_da.dao.RawDataDao;
-import com.example.opc_da.dao.ReportTableDao;
+import com.example.opc_da.dao.*;
 import com.example.opc_da.util.CronUtil;
 import com.example.opc_da.util.OpcDaUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -17,8 +14,12 @@ import org.openscada.opc.dcom.da.OPCSERVERSTATE;
 import org.openscada.opc.lib.da.Group;
 import org.openscada.opc.lib.da.ItemState;
 import org.openscada.opc.lib.da.Server;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -37,6 +38,18 @@ public class ReportTableTask {
     @Resource
     private RawDataDao rawDataDao;
 
+    @Autowired
+    private DataSourceDao dataSourceDao;
+
+    @Autowired
+    private DataModelDao dataModelDao;
+
+    @Value("${opc_ua_server.address}")
+    private String opcUaUrl;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
     @Resource
     private MessageNoticeDao messageNoticeDao;
 
@@ -44,50 +57,279 @@ public class ReportTableTask {
     private String timeFormat;
 
     /**
-     * 手动报表生成数据
+     * 手动报表模板新增,保存相应的数据项信息,生成相应的报表
      *
-     * @param id
-     * @param tableTemplateItemList
+     * @param tableTemplate
      */
-    public void manualReport(Integer id, List<TableTemplateTableItem> tableTemplateItemList, List<TableTemplateChart> tableTemplateChartList) {
+    public void manualReport(TableTemplate tableTemplate) {
+        Integer tableTemplateId = tableTemplate.getId();
+        List<TableTemplateTableItem> tableTemplateItemList = tableTemplate.getTableTemplateItemList();
+        List<TableTemplateChart> tableTemplateChartList = tableTemplate.getTableTemplateChartList();
+
+        //根据模板生成相应的报表
+        ReportTable reportTable = new ReportTable(
+                tableTemplate.getTemplateType(), tableTemplateId, tableTemplate.getUserId(), tableTemplate.getTemplateName(),
+                tableTemplate.getTemplateData(), ConstantStr.DEFAULT_VERSION, tableTemplate.getCreateTime()
+        );
+        if (reportTableDao.addReportTable(reportTable) <= 0) {
+            throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "生成数据报表失败");
+        }
+        Integer reportTableId = reportTable.getId();
+
+        //保存模板表格相关的数据项信息,以及报表表格相关的信息
         if (Blank.isNotEmpty(tableTemplateItemList)) {
             List<ReportTableItem> reportTableItemList = new ArrayList<>();
             for (TableTemplateTableItem t : tableTemplateItemList) {
-                Integer itemGroupId = t.getItemGroupId();
-                if (Blank.isEmpty(itemGroupId)) {
+                if (Blank.isEmpty(t.getItemId(), t.getPlaceHolder(), t.getXaxis(), t.getYaxis())) {
+                    throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据项、占位符、横、纵坐标都不能为空");
+                }
+                t.setTableTemplateId(tableTemplateId);
+                if (Blank.isEmpty(t.getItemGroupId())) {
                     continue;
                 }
-                Integer itemId = t.getItemId();
-                Integer xaxis = t.getXaxis();
-                Integer yaxis = t.getYaxis();
-                String standby = t.getStandby();
+                //根据模板的数据项信息,生成报表数据项信息
                 reportTableItemList.add(new ReportTableItem(
-                        id, itemId, xaxis, yaxis, standby, null, null, null
+                        reportTableId, t.getItemId(), t.getValueType(), t.getXaxis(), t.getYaxis(), t.getStandby(), null, null, null
                 ));
             }
+            //添加报表数据项信息
             if (Blank.isNotEmpty(reportTableItemList)) {
                 reportTableDao.addReportTableItemList(reportTableItemList);
             }
+            //添加模板数据项信息
+            reportTableDao.addTableTemplateItem(tableTemplateItemList);
         }
+        //保存模板统计图相关的数据项信息,以及报表统计图相关的信息
         if (Blank.isNotEmpty(tableTemplateChartList)) {
+            //遍历模板中的所有统计图
             for (TableTemplateChart ttc : tableTemplateChartList) {
-                ReportChart reportChart = new ReportChart(id, ttc.getChartType(), ttc.getChartName(), ttc.getStandby());
+                if (Blank.isEmpty(ttc.getChartType(), ttc.getChartName(), ttc.getValueTakingMode(),
+                        ttc.getBucketType(), ttc.getBucketValue())) {
+                    throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "统计图类型、名称、取值模式、时段类型、时段值不能为空");
+                }
+                ttc.setTableTemplateId(tableTemplateId);
+                //添加模板中的统计图
+                reportTableDao.addTableTemplateChart(ttc);
+                //根据模板中的统计图生成相应的报表统计图,并添加
+                ReportChart reportChart = new ReportChart(
+                        reportTableId, ttc.getChartType(), ttc.getChartName(), ttc.getValueType(), ttc.getStandby()
+                );
                 reportTableDao.addReportChart(reportChart);
                 Integer reportChartId = reportChart.getId();
-                List<TableTemplateChartItem> tableTemplateChartItemList = ttc.getTableTemplateChartItemList();
-                List<ReportChartItem> reportChartItemList = new ArrayList<>();
-                for (int i = 0; i < tableTemplateChartItemList.size(); i++) {
-                    TableTemplateChartItem tableTemplateChartItem = tableTemplateChartItemList.get(i);
-                    reportChartItemList.add(new ReportChartItem(
-                            reportChartId, tableTemplateChartItem.getItemId(), null, null, null
-                    ));
+                //获取模板统计图中的数据项信息
+                List<TableTemplateChartItem> ttciList = ttc.getTableTemplateChartItemList();
+                if (Blank.isNotEmpty(ttciList)) {
+                    List<ReportChartItem> reportChartItemList = new ArrayList<>();
+                    for (int i = 0; i < ttciList.size(); i++) {
+                        TableTemplateChartItem ttci = ttciList.get(i);
+                        //根据模板中的统计图中的数据项生成相应的报表统计图数据项
+                        ReportChartItem reportChartItem = new ReportChartItem(
+                                reportChartId, ttci.getItemId(), null, null, null
+                        );
+                        reportChartItemList.add(reportChartItem);
+                    }
+                    //添加报表统计图相关的数据项
+                    if (Blank.isNotEmpty(reportChartItemList)) {
+                        reportTableDao.addReportChartItem(reportChartItemList);
+                    }
+                    //添加模板统计图相关的数据项
+                    reportTableDao.addTableTemplateChartItem(ttc.getId(), ttciList);
+                }
+            }
+        }
+    }
+
+    /**
+     * 自动报表模板新增,保存相应的数据项信息,生成相应的报表
+     *
+     * @param tableTemplate
+     */
+    public void autoReport(TableTemplate tableTemplate) {
+        Integer tableTemplateId = tableTemplate.getId();
+        List<TableTemplateTableItem> tableTemplateItemList = tableTemplate.getTableTemplateItemList();
+        List<TableTemplateChart> tableTemplateChartList = tableTemplate.getTableTemplateChartList();
+
+        //根据模板生成相应的报表
+        ReportTable reportTable = new ReportTable(
+                tableTemplate.getTemplateType(), tableTemplateId, tableTemplate.getUserId(), tableTemplate.getTemplateName(),
+                tableTemplate.getTemplateData(), ConstantStr.DEFAULT_VERSION, tableTemplate.getCreateTime()
+        );
+        if (reportTableDao.addReportTable(reportTable) <= 0) {
+            throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "生成数据报表失败");
+        }
+        Integer reportTableId = reportTable.getId();
+
+        if (Blank.isNotEmpty(tableTemplateItemList)) {
+            for (TableTemplateTableItem t : tableTemplateItemList) {
+                t.setTableTemplateId(tableTemplateId);
+                if (Blank.isEmpty(t.getItemId(), t.getPlaceHolder(), t.getXaxis(), t.getYaxis(), t.getValueTakingMode(), t.getBucketType(), t.getBucketValue())) {
+                    throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据项、占位符、横、纵坐标、取值模式、时段类型、值都不能为空");
+                }
+            }
+        }
+        //自动报表只需要添加模板的数据项信息,定时器执行的时候,会根据模板的数据项信息,自动生成报表的数据项信息
+        reportTableDao.addTableTemplateItem(tableTemplateItemList);
+        if (Blank.isNotEmpty(tableTemplateChartList)) {
+            for (TableTemplateChart ttc : tableTemplateChartList) {
+                if (Blank.isEmpty(ttc.getChartType(), ttc.getChartName(), ttc.getValueTakingMode(),
+                        ttc.getBucketType(), ttc.getBucketValue())) {
+                    throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "统计图类型、名称、取值模式、时段类型、时段值不能为空");
+                }
+                ttc.setTableTemplateId(tableTemplateId);
+                //添加模板中的统计图
+                reportTableDao.addTableTemplateChart(ttc);
+                //根据模板中的统计图生成相应的报表统计图,并添加
+                ReportChart reportChart = new ReportChart(
+                        reportTableId, ttc.getChartType(), ttc.getChartName(), ttc.getValueType(), ttc.getStandby()
+                );
+                reportTableDao.addReportChart(reportChart);
+                //获取模板统计图中的数据项信息
+                List<TableTemplateChartItem> ttciList = ttc.getTableTemplateChartItemList();
+                if (Blank.isNotEmpty(ttciList)) {
+                    reportTableDao.addTableTemplateChartItem(ttc.getId(), ttciList);
+                }
+            }
+        }
+    }
+
+    /**
+     * 事件驱动报表模板新增,保存相应的数据项信息,生成相应的报表(事件驱动报表不存在统计图)
+     *
+     * @param tableTemplate
+     */
+    public void eventReport(TableTemplate tableTemplate) {
+        Integer tableTemplateId = tableTemplate.getId();
+        List<TableTemplateTableItem> tableTemplateItemList = tableTemplate.getTableTemplateItemList();
+        Integer eventNum = tableTemplate.getEventNum();
+        if (Blank.isEmpty(eventNum)) {
+            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "事件驱动显示数量设置不能为空");
+        }
+
+        //根据模板生成相应的报表
+        ReportTable reportTable = new ReportTable(
+                tableTemplate.getTemplateType(), tableTemplateId, tableTemplate.getUserId(), tableTemplate.getTemplateName(),
+                tableTemplate.getTemplateData(), eventNum, ConstantStr.DEFAULT_VERSION, tableTemplate.getCreateTime()
+        );
+        if (reportTableDao.addReportTable(reportTable) <= 0) {
+            throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), "生成数据报表失败");
+        }
+
+        if (Blank.isNotEmpty(tableTemplateItemList)) {
+            for (TableTemplateTableItem t : tableTemplateItemList) {
+                t.setTableTemplateId(tableTemplateId);
+                if (Blank.isEmpty(t.getItemId(), t.getPlaceHolder(), t.getXaxis(), t.getYaxis())) {
+                    throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据项、占位符、横、纵坐标都不能为空");
+                }
+            }
+        }
+        //事件驱动报表只需要添加模板的数据项信息,驱动执行的时候,会根据模板的数据项信息,自动生成报表的数据项信息
+        reportTableDao.addTableTemplateItem(tableTemplateItemList);
+    }
+
+    /**
+     * 根据报表获取手动报表相关的实时数据
+     *
+     * @param reportTable
+     * @return
+     */
+    public Result manualReportReal(ReportTable reportTable) {
+        Integer reportTableId = reportTable.getId();
+        //获取手动报表相关的表格数据项信息
+        List<ReportTableItem> reportTableItemList = reportTableDao.getTableItemListById(reportTableId);
+        //获取手动报表相关的统计图以及统计图数据项信息
+        List<ReportChart> reportChartList = reportTableDao.getReportChartList(reportTableId);
+        //获取手动报表所有表格数据项和统计图的数据源信息
+        List<DataSource> tableDataSourceList = reportTableDao.getReportDataSource(reportTableId);
+        if (Blank.isNotEmpty(tableDataSourceList)) {
+            for (DataSource dataSource : tableDataSourceList) {
+                if (Blank.isEmpty(dataSource.getIpPassword())) {
+                    continue;
+                }
+                dataSource = DataSource.convertPassword(dataSource);
+                //查看手动报表中的数据项,哪些是属于这个数据源的
+                DataSourceType dataSourceType = dataSourceDao.getDataSourceTypeById(dataSource.getTypeId());
+                //如果数据源是OpcUa则转接到OpcUa读取数据,并通过json返回
+                if (OpcUtil.isOpcUa(dataSourceType.getDataSourceTypeKey())) {
+                    JSONObject[] jsonObjects = restTemplate.postForObject(opcUaUrl + "/reportTable/getReportTableById/" + reportTableId, new HttpEntity<>(dataSource, new HttpHeaders()), JSONObject[].class);
+                    if (jsonObjects != null) {
+                        for (JSONObject jsonObject : jsonObjects) {
+                            Integer itemId = jsonObject.getInteger("itemId");
+                            for (int i = 0; i < reportTableItemList.size(); i++) {
+                                ReportTableItem reportTableItem = reportTableItemList.get(i);
+                                if (itemId.equals(reportTableItem.getItemId())) {
+                                    reportTableItemList.get(i).setValueList(
+                                            jsonObject.getString(reportTableItem.getValueType().equals(ConstantStr.CALCULATED_VALUE) ? "dataValue" : "dataOrgValue")
+                                    );
+                                }
+                            }
+                        }
+                    }
+                } else if (OpcUtil.isOpcDa(dataSourceType.getDataSourceTypeKey())) {
+                    //获取这个数据源下,报表和统计图的所有数据项
+                    List<Item> itemList = reportTableDao.getItemListByDataSource(reportTableId, dataSource);
+                    List<String> itemReadNameList = new ArrayList<>();
+                    for (Item item : itemList) {
+                        itemReadNameList.add(item.getItemReadName());
+                    }
+                    String[] items = itemReadNameList.toArray(new String[]{});
+                    List<DataModel> dataModelList = dataModelDao.getDmListByItemList(itemList);
+                    Map<String, DataModel> map = DataModel.genMap(itemList, dataModelList);
+                    //读取同一个opcDa数据源下,所有项的实时数据
+                    List<JSONObject> jsonObjects = manualReportReadReal(dataSource, items, map);
+                    for (JSONObject jsonObject : jsonObjects) {
+                        String itemReadName = jsonObject.getString("itemReadName");
+                        for (int i = 0; i < itemList.size(); i++) {
+                            Item item = itemList.get(i);
+                            if (itemReadName.equals(item.getItemReadName())) {
+                                Integer itemId = item.getId();
+                                if (Blank.isNotEmpty(reportTableItemList)) {
+                                    for (int j = 0; j < reportTableItemList.size(); j++) {
+                                        ReportTableItem reportTableItem = reportTableItemList.get(j);
+                                        if (itemId.equals(reportTableItem.getItemId())) {
+                                            reportTableItemList.get(j).setValueList(
+                                                    jsonObject.getString(reportTableItem.getValueType().equals(ConstantStr.CALCULATED_VALUE) ? "dataValue" : "dataOrgValue")
+                                            );
+                                        }
+                                    }
+                                }
+                                if (Blank.isNotEmpty(reportChartList)) {
+                                    for (int j = 0; j < reportChartList.size(); j++) {
+                                        ReportChart reportChart = reportChartList.get(j);
+                                        boolean flage = (reportChart.getValueType()).equals(ConstantStr.CALCULATED_VALUE);
+                                        List<ReportChartItem> reportChartItemList = reportChart.getReportChartItemList();
+                                        if (Blank.isNotEmpty(reportChartItemList)) {
+                                            for (int k = 0; k < reportChartItemList.size(); k++) {
+                                                ReportChartItem reportChartItem = reportChartItemList.get(k);
+                                                if (itemId.equals(reportChartItem.getItemId())) {
+                                                    reportChartItemList.get(k).setValueList(
+                                                            jsonObject.getString(flage ? "dataValue" : "dataOrgValue")
+                                                    );
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                                break;
+                            }
+                        }
+                    }
                 }
-                reportTableDao.addReportChartItem(reportChartItemList);
             }
         }
+        reportTable.setReportTableItemList(reportTableItemList);
+        reportTable.setReportChartList(reportChartList);
+        return Result.ok(reportTable);
     }
 
-    public static List<JSONObject> manualReportReal(DataSource dataSource, String[] items, Map<String, DataModel> dmMap) {
+    /**
+     * 读取同一个opcDa数据源下,所有项的实时数据
+     *
+     * @param dataSource
+     * @param items
+     * @param dmMap
+     * @return
+     */
+    public static List<JSONObject> manualReportReadReal(DataSource dataSource, String[] items, Map<String, DataModel> dmMap) {
         Server server = null;
         try {
             server = OpcDaUtil.createServer(dataSource);
@@ -155,6 +397,7 @@ public class ReportTableTask {
         }
         List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTtiDataByTemplateId(tableTemplateId);
         Date date = new Date();
+        //生成一张新的子报表,并添加相应的日志,以及用户组授权
         ReportTable reportTable1 = new ReportTable(
                 ConstantStr.AUTOMATIC_GENERATE_REPORT, tableTemplateId, reportTable.getUserId(),
                 reportTable.getReportTableName() + "_" + DateUtil.dateChangeStr(date, "yyyyMMddHHmmss"),
@@ -167,11 +410,12 @@ public class ReportTableTask {
         if (Blank.isNotEmpty(reportTable.getUserGroupList())) {
             reportTableDao.addTableUserGroup(reportTable1.getId(), reportTable.getUserGroupList());
         }
-        //加载相应的数据
+        //根据报表的cron和开始、结束时间,生成此次执行报表抓取数据的开始时间和结束时间
         String cron = reportTable.getCron();
         Date startTime = CronUtil.mappingTime(cron, reportTable.getStartTime());
         Date endTime = CronUtil.mappingTime(cron, reportTable.getEndTime());
         Integer id = reportTable1.getId();
+        //根据模板的取值条件获取相应的数据
         if (Blank.isNotEmpty(tableTemplateItemList)) {
             for (TableTemplateTableItem t : tableTemplateItemList) {
                 Integer itemGroupId = t.getItemGroupId();

+ 68 - 37
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/util/OpcDaUtil.java

@@ -335,36 +335,36 @@ public class OpcDaUtil {
                 itemList.get(i).setItemType(ConstantStr.BASIC_ATTRIBUTES);
             }
         }
-        if (dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.KEPSERVER.getValue()) ||
-                dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.SCADA.getValue()) ||
-                dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.PAS300.getValue())
-        ) {
-            for (int i = 0; i < itemList.size(); i++) {
-                itemList.get(i).setItemReadName(itemList.get(i).getItemName());
-            }
-        } else if (dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.YOKOGAWA.getValue())) {
-            for (int i = 0; i < itemList.size(); i++) {
-                itemList.get(i).setItemReadName(itemList.get(i).getItemName().replaceFirst("\\.", "!"));
-            }
-        } else if (dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.OPCIFIX.getValue())) {
-            for (int i = 0; i < itemList.size(); i++) {
-                String itemName = itemList.get(i).getItemName();
-                try {
-                    int j = itemName.indexOf(".");
-                    String s = itemName.substring(j + 1);
-                    itemList.get(i).setItemReadName(itemName.substring(0, j) + s.substring(s.indexOf(".")));
-                } catch (Exception e) {
-                    itemList.remove(i);
-                }
-            }
-        } else if (dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.WINCC.getValue())) {
-            for (int i = 0; i < itemList.size(); i++) {
-                String itemName = itemList.get(i).getItemName();
-                itemList.get(i).setItemReadName(itemName.substring(itemName.lastIndexOf(".") + 1));
-            }
-        } else {
-            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配此种驱动类型");
-        }
+//        if (dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.KEPSERVER.getValue()) ||
+//                dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.SCADA.getValue()) ||
+//                dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.PAS300.getValue())
+//        ) {
+//            for (int i = 0; i < itemList.size(); i++) {
+//                itemList.get(i).setItemReadName(itemList.get(i).getItemName());
+//            }
+//        } else if (dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.YOKOGAWA.getValue())) {
+//            for (int i = 0; i < itemList.size(); i++) {
+//                itemList.get(i).setItemReadName(itemList.get(i).getItemName().replaceFirst("\\.", "!"));
+//            }
+//        } else if (dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.OPCIFIX.getValue())) {
+//            for (int i = 0; i < itemList.size(); i++) {
+//                String itemName = itemList.get(i).getItemName();
+//                try {
+//                    int j = itemName.indexOf(".");
+//                    String s = itemName.substring(j + 1);
+//                    itemList.get(i).setItemReadName(itemName.substring(0, j) + s.substring(s.indexOf(".")));
+//                } catch (Exception e) {
+//                    itemList.remove(i);
+//                }
+//            }
+//        } else if (dataSource.getClsId().toUpperCase().equals(OpcDaDriverEnum.WINCC.getValue())) {
+//            for (int i = 0; i < itemList.size(); i++) {
+//                String itemName = itemList.get(i).getItemName();
+//                itemList.get(i).setItemReadName(itemName.substring(itemName.lastIndexOf(".") + 1));
+//            }
+//        } else {
+//            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配此种驱动类型");
+//        }
         return itemList;
     }
 
@@ -631,7 +631,7 @@ public class OpcDaUtil {
             return browserTree(treeBrowser, new Branch());
         } else {
             JSONObject jsonObject = new JSONObject();
-            String[] split = itemStr.split("\\.");
+            String[] split = itemStr.split("!@");
             Branch branch = new Branch();
             List<Branch> branchList = getBranch(treeBrowser, branch);
             for (int i = 0; i < split.length; i++) {
@@ -700,24 +700,55 @@ public class OpcDaUtil {
         }
 
         Iterator iter = branch.getLeaves().iterator();
-        List<String> stringList = new ArrayList<>();
+        List<Map<String, String>> mapList = new ArrayList<>();
         while (iter.hasNext()) {
             Leaf leaf = (Leaf) iter.next();
 //            map.put(leaf.getName(), leaf.getItemId());
-            stringList.add(leaf.getItemId());
+            Map<String, String> map = new HashMap<>();
+            map.put("fullPath", genFullPath(leaf));
+            map.put("itemName", leaf.getName());
+            map.put("itemReadName", leaf.getItemId());
+            mapList.add(map);
         }
-        jsonObject.put("leaves", stringList);
-        stringList = new ArrayList<>();
+        jsonObject.put("leaves", mapList);
+        mapList = new ArrayList<>();
         iter = branch.getBranches().iterator();
         while (iter.hasNext()) {
             Branch subBranch = (Branch) iter.next();
 //            map.put(subBranch.getName(), subBranch.getName());
-            stringList.add(subBranch.getName());
+            Map<String, String> map = new HashMap<>();
+            map.put("itemName", subBranch.getName());
+            mapList.add(map);
         }
-        jsonObject.put("label", stringList);
+        jsonObject.put("label", mapList);
 //        jsonObject.put("branch", map);
 
         return jsonObject;
     }
 
+    public static String genFullPath(Leaf leaf) {
+        if (Blank.isEmpty(leaf)) {
+            return "";
+        }
+        String str = leaf.getName();
+        Branch parent = leaf.getParent();
+        String name = parent.getName();
+        if (Blank.isNotEmpty(name)) {
+            return genFullPathBranch(parent, name + "." + str);
+        }
+        return str;
+    }
+
+    public static String genFullPathBranch(Branch branch, String str) {
+        if (Blank.isEmpty(branch)) {
+            return str;
+        }
+        Branch parent = branch.getParent();
+        String name = parent.getName();
+        if (Blank.isNotEmpty(name)) {
+            return genFullPathBranch(parent, name + "." + str);
+        }
+        return str;
+    }
+
 }

+ 2 - 3
chaunyi_opc/opc_da/src/main/resources/mapper/ChartDao.xml

@@ -10,7 +10,7 @@
 
     <sql id="chartItem">
         id
-        , chart_id, item_id, value_list, value_time_list, value_index_list
+        , chart_id, item_id
     </sql>
 
     <insert id="addChart" parameterType="com.example.opc_common.entity.Chart" useGeneratedKeys="true"
@@ -25,8 +25,7 @@
         insert into t_chart_item(chart_id, item_id, value_list, value_time_list, value_index_list)
         values
         <foreach collection="chartItemList" item="chartItem" index="index" separator=",">
-            (#{chartId}, #{chartItem.itemId}, #{chartItem.valueList}, #{chartItem.valueTimeList},
-            #{chartItem.valueIndexList})
+            (#{chartId}, #{chartItem.itemId})
         </foreach>
     </insert>
 

+ 40 - 28
chaunyi_opc/opc_da/src/main/resources/mapper/DataSourceDao.xml

@@ -14,7 +14,7 @@
 
     <sql id="dataSourceDriver">
         id
-        , data_source_type_id, cls_id
+        , driver_name, cls_id
     </sql>
 
     <sql id="driverBasicItem">
@@ -32,9 +32,11 @@
             #{isAnonymous},#{clsId},#{progId},#{driverDescribe}, now())
     </insert>
 
-    <insert id="addDataSourceDriver">
-        insert into t_data_source_driver(data_source_type_id, cls_id)
-            value (#{dataSourceTypeId},#{clsId})
+    <insert id="addDataSourceDriver" parameterType="com.example.opc_common.entity.DataSourceDriver"
+            useGeneratedKeys="true"
+            keyProperty="id">
+        insert into t_data_source_driver(driver_name, cls_id)
+            value (#{driverName},#{clsId})
     </insert>
 
     <insert id="addDriverBasicItem">
@@ -42,6 +44,14 @@
             value (#{driverId},#{itemName})
     </insert>
 
+    <insert id="addDriverBasicItemList">
+        insert into t_driver_basic_item (driver_id, item_name)
+        values
+        <foreach collection="driverBasicItemList" item="driverBasicItem" index="index" separator=",">
+            (#{dataSourceDriverId}, #{driverBasicItem.itemName})
+        </foreach>
+    </insert>
+
     <update id="updateDataSource">
         update t_data_source
         set data_source_name=#{dataSourceName},
@@ -59,18 +69,11 @@
 
     <update id="updateDataSourceDriver">
         update t_data_source_driver
-        set data_source_type_id=#{dataSourceTypeId},
+        set driver_name=#{driverName},
             cls_id=#{clsId}
         where id = #{id}
     </update>
 
-    <update id="updateDriverBasicItem">
-        update t_driver_basic_item
-        set driver_id=#{driverId},
-            item_name=#{itemName}
-        where id = #{id}
-    </update>
-
     <delete id="delDataSourceById">
         delete
         from t_data_source
@@ -86,7 +89,7 @@
     <delete id="delDriverBasicItem">
         delete
         from t_driver_basic_item
-        where id = #{id}
+        where driver_id = #{dataSourceDriverId}
     </delete>
 
     <select id="getAllDataSourceType" resultType="com.example.opc_common.entity.DataSourceType">
@@ -158,7 +161,7 @@
         select
         <include refid="dataSourceDriver"/>
         from t_data_source_driver
-        where data_source_type_id=#{dataSourceTypeId}
+        where driver_name=#{driverName}
         and cls_id=#{clsId}
     </select>
 
@@ -166,45 +169,54 @@
         select
         <include refid="dataSourceDriver"/>
         from t_data_source_driver
-        where data_source_type_id=#{dataSourceTypeId}
+        where driver_name=#{driverName}
         and cls_id=#{clsId}
         and id!=#{id}
     </select>
 
-    <select id="getAllDataSourceDriver" resultType="com.example.opc_common.entity.DataSourceDriver">
+    <select id="getAllDataSourceDriver" resultMap="allDataSourceDriver">
         select
         <include refid="dataSourceDriver"/>
         from t_data_source_driver
     </select>
 
-    <select id="getDbItemByDid" resultType="com.example.opc_common.entity.DriverBasicItem">
+    <resultMap type="com.example.opc_common.entity.DataSourceDriver" id="allDataSourceDriver">
+        <id property="id" column="id"/>
+        <result property="driverName" column="driver_name"/>
+        <result property="clsId" column="cls_id"/>
+        <collection column="id" property="driverBasicItemList"
+                    ofType="com.example.opc_common.entity.DriverBasicItem" select="getDbiById">
+            <id column="id" property="id"/>
+            <id column="driver_id" property="driverId"/>
+            <id column="item_name" property="itemName"/>
+        </collection>
+    </resultMap>
+
+    <select id="getDbiById" parameterType="INTEGER" resultType="com.example.opc_common.entity.DriverBasicItem">
         select
         <include refid="driverBasicItem"/>
         from t_driver_basic_item
-        where driver_id=#{driverId}
+        where driver_id = #{id}
     </select>
 
-    <select id="getDriverBasicItem" resultType="com.example.opc_common.entity.DriverBasicItem">
+    <select id="getDbItemByDid" resultType="com.example.opc_common.entity.DriverBasicItem">
         select
         <include refid="driverBasicItem"/>
         from t_driver_basic_item
         where driver_id=#{driverId}
-        and item_name=#{itemName}
     </select>
 
-    <select id="getDriverBasicItemNoId" resultType="com.example.opc_common.entity.DriverBasicItem">
+    <select id="getDsdByTypeId" resultType="com.example.opc_common.entity.DataSourceDriver">
         select
-        <include refid="driverBasicItem"/>
-        from t_driver_basic_item
-        where driver_id=#{driverId}
-        and item_name=#{itemName}
-        and id!=#{id}
+        <include refid="dataSourceDriver"/>
+        from t_data_source_driver
+        where data_source_type_id=#{dataSourceTypeId}
     </select>
 
-    <select id="getDsdByTypeId" resultType="com.example.opc_common.entity.DataSourceDriver">
+    <select id="getDataSourceDriverByid" resultType="com.example.opc_common.entity.DataSourceDriver">
         select
         <include refid="dataSourceDriver"/>
         from t_data_source_driver
-        where data_source_type_id=#{dataSourceTypeId}
+        where id=#{id}
     </select>
 </mapper>

+ 61 - 8
chaunyi_opc/opc_da/src/main/resources/mapper/ReportTableDao.xml

@@ -17,6 +17,7 @@
         , table_template_id, item_id , place_holder, xaxis, yaxis, value_taking_mode, value_type, bucket_type,
             bucket_value, start_time, end_time, standby
     </sql>
+    <sql id="tableTemplateChart"></sql>
 
     <sql id="reportTable">
         id
@@ -43,6 +44,16 @@
         , report_table_type, table_template_id, user_id, report_table_name, start_time, end_time, current_num, version, cron_id, cron , run_state, create_time
     </sql>
 
+    <sql id="reportChart">
+        id
+        , report_table_id, chart_type, chart_name, value_type, standby
+    </sql>
+
+    <sql id="reportChartItem">
+        id
+        , report_chart_id, item_id, value_list, value_time_list, value_index_list
+    </sql>
+
     <sql id="dataSource">
         id
         , type_id, data_source_name, data_source_describe, ip_address, ip_port, ip_user_name, ip_password, is_anonymous, cls_id, prog_id, driver_describe, create_time
@@ -138,9 +149,11 @@
     <insert id="addTableTemplateChart" parameterType="com.example.opc_common.entity.TableTemplateChart"
             useGeneratedKeys="true"
             keyProperty="id">
-        insert into t_table_template_chart(table_template_id, chart_type, chart_name, value_taking_mode, bucket_type,
+        insert into t_table_template_chart(table_template_id, chart_type, chart_name, value_taking_mode, value_type,
+                                           bucket_type,
                                            bucket_value, start_time, end_time, standby) VALUE
-            (#{tableTemplateId},#{chartType},#{chartName}, #{valueTakingMode}, #{bucketType}, #{bucketValue}, #{startTime}, #{endTime}, #{standby})
+            (#{tableTemplateId},#{chartType},#{chartName}, #{valueTakingMode}, #{valueType},
+            #{bucketType}, #{bucketValue}, #{startTime}, #{endTime}, #{standby})
     </insert>
 
     <insert id="addTableTemplateChartItem">
@@ -150,9 +163,11 @@
         </foreach>
     </insert>
 
-    <insert id="addReportChart">
-        insert into t_report_chart(report_table_id, chart_type, chart_name, standby)
-            value (#{reportTableId},#{chartType},#{chartName},#{standby})
+    <insert id="addReportChart" parameterType="com.example.opc_common.entity.ReportChart"
+            useGeneratedKeys="true"
+            keyProperty="id">
+        insert into t_report_chart(report_table_id, chart_type, chart_name, value_type, standby)
+            value (#{reportTableId},#{chartType},#{chartName},#{valueType},#{standby})
     </insert>
 
     <insert id="addReportChartItem">
@@ -686,7 +701,7 @@
         where report_table_id = #{tableId}
     </select>
 
-    <select id="getTableDataSource" resultType="com.example.opc_common.entity.DataSource">
+    <select id="getReportDataSource" resultType="com.example.opc_common.entity.DataSource">
         SELECT
         <include refid="dataSource"/>
         FROM
@@ -700,7 +715,12 @@
         LEFT JOIN t_item_group tig ON ti.item_group_id = tig.id
         LEFT JOIN t_data_source tds ON tig.data_source_id = tds.id
         WHERE
-        ti.id IN ( SELECT item_id FROM t_report_table_item WHERE report_table_id = #{id}))
+        ti.id IN (
+        (SELECT item_id FROM t_report_table_item WHERE report_table_id = #{reportTableId})
+        UNION ALL
+        (SELECT item_id FROM t_report_chart_item WHERE report_chart_id in (SELECT id FROM t_report_chart WHERE
+        report_table_id = #{reportTableId}) )
+        ))
     </select>
 
     <select id="getItemListByDataSource" resultType="com.example.opc_common.entity.Item">
@@ -726,7 +746,8 @@
     </select>
 
     <select id="getTtcByTemplateId" resultMap="allTableTemplateChart">
-
+        select
+            <include refid="tableTemplateChart"/> t_
     </select>
 
     <resultMap type="com.example.opc_common.entity.TableTemplateChart" id="allTableTemplateChart">
@@ -821,4 +842,36 @@
         ))
     </select>
 
+    <select id="getReportChartList" resultMap="allReportChart">
+        select
+        <include refid="reportChart"/>
+        from t_report_chart
+        where report_table_id = #{reportTableId}
+    </select>
+
+    <resultMap type="com.example.opc_common.entity.ReportChart" id="allReportChart">
+        <id property="id" column="id"/>
+        <result property="reportTableId" column="report_table_id"/>
+        <result property="chartType" column="chart_type"/>
+        <result property="chartName" column="chart_name"/>
+        <result property="valueType" column="value_type"/>
+        <result property="standby" column="standby"/>
+        <collection column="id" property="reportChartItemList"
+                    ofType="com.example.opc_common.entity.ReportChartItem" select="getRciByChartId">
+            <id column="id" property="id"/>
+            <id column="report_chart_id" property="reportChartId"/>
+            <id column="item_id" property="itemId"/>
+            <id column="value_list" property="valueList"/>
+            <id column="value_time_list" property="valueTimeList"/>
+            <id column="value_index_list" property="valueIndexList"/>
+        </collection>
+    </resultMap>
+
+    <select id="getRciByChartId" parameterType="INTEGER" resultType="com.example.opc_common.entity.ReportChartItem">
+        select
+        <include refid="reportChartItem"/>
+        from t_report_chart_item
+        where report_chart_id = #{id}
+    </select>
+
 </mapper>

+ 40 - 20
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcAsyncTask.java

@@ -84,8 +84,6 @@ public class OpcAsyncTask {
                     for (int i = 0; i < tableIdList.size(); i++) {
                         Integer tableId = tableIdList.get(i);
                         ReportTable reportTable = reportTableDao.getReportTableById(tableId);
-                        Integer valueType = reportTable.getValueType();
-                        boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
                         Integer tableTemplateId = reportTable.getTableTemplateId();
                         TableTemplate tableTemplate = reportTableDao.getTableTemplateById(tableTemplateId);
                         Integer eventNum = tableTemplate.getEventNum();
@@ -96,9 +94,9 @@ public class OpcAsyncTask {
                             //如果模板设置的数量大于等于当前拿数据的数量,则只需要添加一张新报表存储数据即可
                             if (eventNum >= size) {
                                 ReportTable reportTable1 = new ReportTable(
-                                        ConstantStr.EVENT_GENERATE_REPORT, valueType, tableTemplateId, reportTable.getUserId(),
+                                        ConstantStr.EVENT_GENERATE_REPORT, tableTemplateId, reportTable.getUserId(),
                                         reportTable.getReportTableName() + "_" + DateUtil.dateChangeStr(new Date(), "yyyyMMddHHmmss"),
-                                        reportTable.getReportTableData(), size, reportTable.getVersion(),new Date()
+                                        reportTable.getReportTableData(), size, reportTable.getVersion(), new Date()
                                 );
                                 reportTableDao.addReportTable(reportTable1);
                                 Integer id = reportTable1.getId();
@@ -111,6 +109,8 @@ public class OpcAsyncTask {
                                 //根据索引进行排序,将数据丢到相应的位置
                                 for (TableTemplateTableItem t : tableTemplateItemList) {
                                     Integer itemId = t.getItemId();
+                                    Integer valueType = t.getValueType();
+                                    boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
                                     List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, indexList);
                                     if (Blank.isNotEmpty(cursorRawDataList)) {
                                         Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
@@ -134,9 +134,9 @@ public class OpcAsyncTask {
                                             dataIndexList.add(indexList.get(j * eventNum + k));
                                         }
                                         ReportTable reportTable1 = new ReportTable(
-                                                ConstantStr.EVENT_GENERATE_REPORT, valueType, tableTemplateId, reportTable.getUserId(),
+                                                ConstantStr.EVENT_GENERATE_REPORT, tableTemplateId, reportTable.getUserId(),
                                                 reportTable.getReportTableName() + "_" + DateUtil.dateChangeStr(new Date(), "yyyyMMddHHmmss"),
-                                                reportTable.getReportTableData(), eventNum, reportTable.getVersion(),new Date()
+                                                reportTable.getReportTableData(), eventNum, reportTable.getVersion(), new Date()
                                         );
                                         reportTableDao.addReportTable(reportTable1);
                                         Integer id = reportTable1.getId();
@@ -149,6 +149,8 @@ public class OpcAsyncTask {
                                         //根据索引进行排序,并添加数据
                                         for (TableTemplateTableItem t : tableTemplateItemList) {
                                             Integer itemId = t.getItemId();
+                                            Integer valueType = t.getValueType();
+                                            boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
                                             List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
                                             if (Blank.isNotEmpty(cursorRawDataList)) {
                                                 Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
@@ -171,9 +173,9 @@ public class OpcAsyncTask {
                                             }
                                         }
                                         ReportTable reportTable1 = new ReportTable(
-                                                ConstantStr.EVENT_GENERATE_REPORT, valueType, tableTemplateId, reportTable.getUserId(),
+                                                ConstantStr.EVENT_GENERATE_REPORT, tableTemplateId, reportTable.getUserId(),
                                                 reportTable.getReportTableName() + "_" + DateUtil.dateChangeStr(new Date(), "yyyyMMddHHmmss"),
-                                                reportTable.getReportTableData(), j == discuss ? remainder : eventNum, reportTable.getVersion(),new Date()
+                                                reportTable.getReportTableData(), j == discuss ? remainder : eventNum, reportTable.getVersion(), new Date()
                                         );
                                         reportTableDao.addReportTable(reportTable1);
                                         Integer id = reportTable1.getId();
@@ -186,6 +188,8 @@ public class OpcAsyncTask {
                                         //根据索引进行排序,并添加数据
                                         for (TableTemplateTableItem t : tableTemplateItemList) {
                                             Integer itemId = t.getItemId();
+                                            Integer valueType = t.getValueType();
+                                            boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
                                             List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
                                             if (Blank.isNotEmpty(cursorRawDataList)) {
                                                 Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
@@ -205,9 +209,9 @@ public class OpcAsyncTask {
                             if (currentNum == eventNum) {
                                 if (eventNum >= size) {
                                     ReportTable reportTable1 = new ReportTable(
-                                            ConstantStr.EVENT_GENERATE_REPORT, valueType, tableTemplateId, reportTable.getUserId(),
+                                            ConstantStr.EVENT_GENERATE_REPORT, tableTemplateId, reportTable.getUserId(),
                                             reportTable.getReportTableName() + "_" + DateUtil.dateChangeStr(new Date(), "yyyyMMddHHmmss"),
-                                            reportTable.getReportTableData(), size, reportTable.getVersion(),new Date()
+                                            reportTable.getReportTableData(), size, reportTable.getVersion(), new Date()
                                     );
                                     reportTableDao.addReportTable(reportTable1);
                                     Integer id = reportTable1.getId();
@@ -220,6 +224,8 @@ public class OpcAsyncTask {
                                     //根据索引进行排序,将数据丢到相应的位置
                                     for (TableTemplateTableItem t : tableTemplateItemList) {
                                         Integer itemId = t.getItemId();
+                                        Integer valueType = t.getValueType();
+                                        boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
                                         List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, indexList);
                                         if (Blank.isNotEmpty(cursorRawDataList)) {
                                             Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
@@ -240,9 +246,9 @@ public class OpcAsyncTask {
                                                 dataIndexList.add(indexList.get(j * eventNum + k));
                                             }
                                             ReportTable reportTable1 = new ReportTable(
-                                                    ConstantStr.EVENT_GENERATE_REPORT, valueType, tableTemplateId, reportTable.getUserId(),
+                                                    ConstantStr.EVENT_GENERATE_REPORT, tableTemplateId, reportTable.getUserId(),
                                                     reportTable.getReportTableName() + "_" + DateUtil.dateChangeStr(new Date(), "yyyyMMddHHmmss"),
-                                                    reportTable.getReportTableData(), eventNum, reportTable.getVersion(),new Date()
+                                                    reportTable.getReportTableData(), eventNum, reportTable.getVersion(), new Date()
                                             );
                                             reportTableDao.addReportTable(reportTable1);
                                             Integer id = reportTable1.getId();
@@ -255,6 +261,8 @@ public class OpcAsyncTask {
                                             //根据索引进行排序,并添加数据
                                             for (TableTemplateTableItem t : tableTemplateItemList) {
                                                 Integer itemId = t.getItemId();
+                                                Integer valueType = t.getValueType();
+                                                boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
                                                 List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
                                                 if (Blank.isNotEmpty(cursorRawDataList)) {
                                                     Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
@@ -277,9 +285,9 @@ public class OpcAsyncTask {
                                                 }
                                             }
                                             ReportTable reportTable1 = new ReportTable(
-                                                    ConstantStr.EVENT_GENERATE_REPORT, valueType, tableTemplateId, reportTable.getUserId(),
+                                                    ConstantStr.EVENT_GENERATE_REPORT, tableTemplateId, reportTable.getUserId(),
                                                     reportTable.getReportTableName() + "_" + DateUtil.dateChangeStr(new Date(), "yyyyMMddHHmmss"),
-                                                    reportTable.getReportTableData(), j == discuss ? remainder : eventNum, reportTable.getVersion(),new Date()
+                                                    reportTable.getReportTableData(), j == discuss ? remainder : eventNum, reportTable.getVersion(), new Date()
                                             );
                                             reportTableDao.addReportTable(reportTable1);
                                             Integer id = reportTable1.getId();
@@ -292,6 +300,8 @@ public class OpcAsyncTask {
                                             //根据索引进行排序,并添加数据
                                             for (TableTemplateTableItem t : tableTemplateItemList) {
                                                 Integer itemId = t.getItemId();
+                                                Integer valueType = t.getValueType();
+                                                boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
                                                 List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
                                                 if (Blank.isNotEmpty(cursorRawDataList)) {
                                                     Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
@@ -313,6 +323,8 @@ public class OpcAsyncTask {
                                     }
                                     for (TableTemplateTableItem t : tableTemplateItemList) {
                                         Integer itemId = t.getItemId();
+                                        Integer valueType = t.getValueType();
+                                        boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
                                         ReportTableItem reportTableItem = reportTableDao.getReportTableItem(chTableId, itemId);
                                         List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, indexList);
                                         if (Blank.isNotEmpty(cursorRawDataList)) {
@@ -339,6 +351,8 @@ public class OpcAsyncTask {
                                     }
                                     for (TableTemplateTableItem t : tableTemplateItemList) {
                                         Integer itemId = t.getItemId();
+                                        Integer valueType = t.getValueType();
+                                        boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
                                         ReportTableItem reportTableItem = reportTableDao.getReportTableItem(chTableId, itemId);
                                         List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, oldIndexList);
                                         if (Blank.isNotEmpty(cursorRawDataList)) {
@@ -351,9 +365,9 @@ public class OpcAsyncTask {
                                     //旧子报表添加完毕,执行添加新报表
                                     if (eventNum >= newSize) {
                                         ReportTable reportTable1 = new ReportTable(
-                                                ConstantStr.EVENT_GENERATE_REPORT, valueType, tableTemplateId, reportTable.getUserId(),
+                                                ConstantStr.EVENT_GENERATE_REPORT, tableTemplateId, reportTable.getUserId(),
                                                 reportTable.getReportTableName() + "_" + DateUtil.dateChangeStr(new Date(), "yyyyMMddHHmmss"),
-                                                reportTable.getReportTableData(), newSize, reportTable.getVersion(),new Date()
+                                                reportTable.getReportTableData(), newSize, reportTable.getVersion(), new Date()
                                         );
                                         reportTableDao.addReportTable(reportTable1);
                                         Integer id = reportTable1.getId();
@@ -366,6 +380,8 @@ public class OpcAsyncTask {
                                         //根据索引进行排序,将数据丢到相应的位置
                                         for (TableTemplateTableItem t : tableTemplateItemList) {
                                             Integer itemId = t.getItemId();
+                                            Integer valueType = t.getValueType();
+                                            boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
                                             List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, newIndexList);
                                             if (Blank.isNotEmpty(cursorRawDataList)) {
                                                 Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
@@ -386,9 +402,9 @@ public class OpcAsyncTask {
                                                     dataIndexList.add(newIndexList.get(j * eventNum + k));
                                                 }
                                                 ReportTable reportTable1 = new ReportTable(
-                                                        ConstantStr.EVENT_GENERATE_REPORT,valueType, tableTemplateId, reportTable.getUserId(),
+                                                        ConstantStr.EVENT_GENERATE_REPORT, tableTemplateId, reportTable.getUserId(),
                                                         reportTable.getReportTableName() + "_" + DateUtil.dateChangeStr(new Date(), "yyyyMMddHHmmss"),
-                                                        reportTable.getReportTableData(), eventNum, reportTable.getVersion(),new Date()
+                                                        reportTable.getReportTableData(), eventNum, reportTable.getVersion(), new Date()
                                                 );
                                                 reportTableDao.addReportTable(reportTable1);
                                                 Integer id = reportTable1.getId();
@@ -401,6 +417,8 @@ public class OpcAsyncTask {
                                                 //根据索引进行排序,并添加数据
                                                 for (TableTemplateTableItem t : tableTemplateItemList) {
                                                     Integer itemId = t.getItemId();
+                                                    Integer valueType = t.getValueType();
+                                                    boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
                                                     List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, newIndexList);
                                                     if (Blank.isNotEmpty(cursorRawDataList)) {
                                                         Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
@@ -423,9 +441,9 @@ public class OpcAsyncTask {
                                                     }
                                                 }
                                                 ReportTable reportTable1 = new ReportTable(
-                                                        ConstantStr.EVENT_GENERATE_REPORT,valueType, tableTemplateId, reportTable.getUserId(),
+                                                        ConstantStr.EVENT_GENERATE_REPORT, tableTemplateId, reportTable.getUserId(),
                                                         reportTable.getReportTableName() + "_" + DateUtil.dateChangeStr(new Date(), "yyyyMMddHHmmss"),
-                                                        reportTable.getReportTableData(), j == discuss ? remainder : eventNum, reportTable.getVersion(),new Date()
+                                                        reportTable.getReportTableData(), j == discuss ? remainder : eventNum, reportTable.getVersion(), new Date()
                                                 );
                                                 reportTableDao.addReportTable(reportTable1);
                                                 Integer id = reportTable1.getId();
@@ -438,6 +456,8 @@ public class OpcAsyncTask {
                                                 //根据索引进行排序,并添加数据
                                                 for (TableTemplateTableItem t : tableTemplateItemList) {
                                                     Integer itemId = t.getItemId();
+                                                    Integer valueType = t.getValueType();
+                                                    boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
                                                     List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
                                                     if (Blank.isNotEmpty(cursorRawDataList)) {
                                                         Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);

+ 62 - 17
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/util/OpcUaUtil.java

@@ -17,6 +17,7 @@ import org.eclipse.milo.opcua.sdk.client.api.config.OpcUaClientConfig;
 import org.eclipse.milo.opcua.sdk.client.api.identity.AnonymousProvider;
 import org.eclipse.milo.opcua.sdk.client.api.identity.UsernameProvider;
 import org.eclipse.milo.opcua.sdk.client.nodes.UaNode;
+import org.eclipse.milo.opcua.sdk.client.nodes.UaViewNode;
 import org.eclipse.milo.opcua.stack.client.DiscoveryClient;
 import org.eclipse.milo.opcua.stack.core.BuiltinDataType;
 import org.eclipse.milo.opcua.stack.core.Identifiers;
@@ -365,20 +366,31 @@ public class OpcUaUtil {
             return null;
         }
         if (Blank.isEmpty(itemStr)) {
-            return genUaNode(browserTree(client, null));
+            return genUaNode(browserTree(client, null), null);
         } else {
-            String[] split = itemStr.split("#");
+            JSONObject jsonObject = new JSONObject();
+            String[] split = itemStr.split("!@");
             List<? extends UaNode> nodes = browserTree(client, null);
             for (int i = 0; i < split.length; i++) {
                 String itemId = split[i];
-                for (UaNode nd : nodes) {
-                    if (itemId.equals(nd.getNodeId().getIdentifier())) {
-                        nodes = browserTree(client, nd);
-                        break;
+                if (i == split.length - 1) {
+                    for (UaNode nd : nodes) {
+                        if (itemId.equals(nd.getNodeId().getIdentifier())) {
+                            nodes = browserTree(client, nd);
+                            jsonObject = genUaNode(nodes, itemStr.replace("!@", "."));
+                            break;
+                        }
+                    }
+                } else {
+                    for (UaNode nd : nodes) {
+                        if (itemId.equals(nd.getNodeId().getIdentifier())) {
+                            nodes = browserTree(client, nd);
+                            break;
+                        }
                     }
                 }
             }
-            return genUaNode(nodes);
+            return jsonObject;
         }
     }
 
@@ -392,31 +404,64 @@ public class OpcUaUtil {
     public static List<? extends UaNode> browserTree(OpcUaClient client, UaNode uaNode) throws UaException {
         if (uaNode == null) {
 //            nodes = client.getAddressSpace().browseNodes(Identifiers.ObjectsFolder);//从根目录
+//            List<? extends UaNode> uaNodes = client.getAddressSpace().browseNodes(Identifiers.ViewsFolder);
+//            return uaNodes;
             return client.getAddressSpace().browseNodes(Identifiers.ViewsFolder);
         } else {
+//            List<? extends UaNode> uaNodes = client.getAddressSpace().browseNodes(uaNode);
+//            return uaNodes;
             return client.getAddressSpace().browseNodes(uaNode);
         }
     }
 
-    public static JSONObject genUaNode(List<? extends UaNode> uaNodes) {
+    public static JSONObject genUaNode(List<? extends UaNode> uaNodes, String str) {
         JSONObject jsonObject = new JSONObject();
-        List<Map<String, Object>> stringList = new ArrayList<>();
+        List<Map<String, Object>> mapList = new ArrayList<>();
+        List<Map<String, Object>> mapLeaveList = new ArrayList<>();
         for (UaNode nd : uaNodes) {
             if (Blank.isEmpty(nd)) {
                 continue;
             }
+            try {
+                if (!((UaViewNode) nd).getContainsNoLoops()) {
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("itemName", nd.getBrowseName().getName());
+//                map.put("nodeId", nd.getNodeId());
+                    map.put("nodeIndex", nd.getNodeId().getNamespaceIndex().intValue());
+                    map.put("dataType", nd.getNodeId().getType());
+                    map.put("description", nd.getDescription());
+                    mapList.add(map);
+                } else {
+                    Map<String, Object> map = new HashMap<>();
+                    String name = nd.getBrowseName().getName();
+                    map.put("fullPath", str + "." + name);
+                    map.put("itemName", name);
+                    map.put("itemReadName", name);
+//                map.put("nodeId", nd.getNodeId());
+                    map.put("nodeIndex", nd.getNodeId().getNamespaceIndex().intValue());
+                    map.put("dataType", nd.getNodeId().getType());
+                    map.put("description", nd.getDescription());
+                    mapLeaveList.add(map);
+                }
+            } catch (Exception e) {
+                Map<String, Object> map = new HashMap<>();
+                String name = nd.getBrowseName().getName();
+                map.put("fullPath", str + "." + name);
+                map.put("itemName", name);
+                map.put("itemReadName", name);
+//                map.put("nodeId", nd.getNodeId());
+                map.put("nodeIndex", nd.getNodeId().getNamespaceIndex().intValue());
+                map.put("dataType", nd.getNodeId().getType());
+                map.put("description", nd.getDescription());
+                mapLeaveList.add(map);
+//                e.printStackTrace();
+            }
 //            if (Objects.requireNonNull(nd.getBrowseName().getName()).contains("_")) {
 //                continue;
 //            }
-            Map<String, Object> map = new HashMap<>();
-            map.put("label", nd.getBrowseName().getName());
-            map.put("nodeId", nd.getNodeId());
-            map.put("nodeIndex", nd.getNodeId().getNamespaceIndex().intValue());
-            map.put("dataType", nd.getNodeId().getType());
-            map.put("description", nd.getDescription());
-            stringList.add(map);
         }
-        jsonObject.put("label", stringList);
+        jsonObject.put("label", mapList);
+        jsonObject.put("leaves", mapLeaveList);
         return jsonObject;
     }
 }