Преглед на файлове

Merge branch 'master' of http://116.63.33.55/git/read_opc

ws преди 1 година
родител
ревизия
62d9acdd8c
променени са 34 файла, в които са добавени 839 реда и са изтрити 1605 реда
  1. 1 6
      cqcy-ei/cqcy-ei-common/src/main/java/com/example/opc_common/entity/CursorRawData.java
  2. 1 6
      cqcy-ei/cqcy-ei-common/src/main/java/com/example/opc_common/entity/RawData.java
  3. 1 4
      cqcy-ei/cqcy-ei-common/src/main/java/com/example/opc_common/util/ConstantStr.java
  4. 5 5
      cqcy-ei/cqcy-ei-common/src/main/java/com/example/opc_common/util/MathUtil.java
  5. 22 17
      cqcy-ei/cqcy-ei-da/pom.xml
  6. 1 8
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/config/InitRunner.java
  7. 16 0
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/controller/DataModelController.java
  8. 11 2
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dao/DataModelDao.java
  9. 11 1
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dao/DataSourceDao.java
  10. 12 1
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dao/ItemGroupDao.java
  11. 2 4
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dao/RawDataDao.java
  12. 1 1
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dao/ReportTableDao.java
  13. 10 0
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/DataModelService.java
  14. 20 0
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/impl/DataModelServiceImpl.java
  15. 37 29
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/impl/ReportTableServiceImpl.java
  16. 164 409
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcAsyncTask.java
  17. 120 117
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaChangeTask.java
  18. 197 226
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaExceedTask.java
  19. 14 65
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaFrequencyTask.java
  20. 28 55
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaTask.java
  21. 57 129
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/ReportTableTask.java
  22. 3 9
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/ReportTask.java
  23. 30 0
      cqcy-ei/cqcy-ei-da/src/main/resources/mapper/DataModelDao.xml
  24. 8 0
      cqcy-ei/cqcy-ei-da/src/main/resources/mapper/DataSourceDao.xml
  25. 10 0
      cqcy-ei/cqcy-ei-da/src/main/resources/mapper/ItemGroupDao.xml
  26. 8 33
      cqcy-ei/cqcy-ei-da/src/main/resources/mapper/RawDataDao.xml
  27. 1 1
      cqcy-ei/cqcy-ei-da/src/main/resources/mapper/ReportTableDao.xml
  28. 1 3
      cqcy-ei/cqcy-ei-ua/src/main/java/com/example/opc_ua/dao/RawDataDao.java
  29. 7 408
      cqcy-ei/cqcy-ei-ua/src/main/java/com/example/opc_ua/task/OpcAsyncTask.java
  30. 8 11
      cqcy-ei/cqcy-ei-ua/src/main/java/com/example/opc_ua/task/OpcUaChangeTask.java
  31. 16 22
      cqcy-ei/cqcy-ei-ua/src/main/java/com/example/opc_ua/task/OpcUaExceedTask.java
  32. 3 3
      cqcy-ei/cqcy-ei-ua/src/main/java/com/example/opc_ua/task/OpcUaFrequencyTask.java
  33. 6 30
      cqcy-ei/cqcy-ei-ua/src/main/resources/mapper/RawDataDao.xml
  34. 7 0
      cqcy-ei/pom.xml

+ 1 - 6
cqcy-ei/cqcy-ei-common/src/main/java/com/example/opc_common/entity/CursorRawData.java

@@ -55,10 +55,6 @@ public class CursorRawData implements Serializable {
      */
     private String valueBelongTime;
     /**
-     * 是否该记录;0否,1是
-     */
-    private Integer isRecord;
-    /**
      * 创建时间
      */
     private Date createTime;
@@ -72,7 +68,7 @@ public class CursorRawData implements Serializable {
     }
 
     public CursorRawData(Integer itemGroupId, Integer dataSourceId, String itemName,
-                         String dataType, String orgDataValue, String dataValue, String dataValueTime, Long dataIndex, String valueBelongTime, Integer isRecord,
+                         String dataType, String orgDataValue, String dataValue, String dataValueTime, Long dataIndex, String valueBelongTime,
                          Date createTime) {
         this.itemGroupId = itemGroupId;
         this.dataSourceId = dataSourceId;
@@ -83,7 +79,6 @@ public class CursorRawData implements Serializable {
         this.dataValueTime = dataValueTime;
         this.dataIndex = dataIndex;
         this.valueBelongTime = valueBelongTime;
-        this.isRecord = isRecord;
         this.createTime = createTime;
     }
 }

+ 1 - 6
cqcy-ei/cqcy-ei-common/src/main/java/com/example/opc_common/entity/RawData.java

@@ -55,10 +55,6 @@ public class RawData implements Serializable {
      */
     private String valueBelongTime;
     /**
-     * 是否该记录;0否,1是
-     */
-    private String isRecord;
-    /**
      * 创建时间
      */
     private Date createTime;
@@ -72,7 +68,7 @@ public class RawData implements Serializable {
     }
 
     public RawData(Integer itemGroupId, Integer dataSourceId, String itemName,
-                   String dataType, String orgDataValue, String dataValue, String dataValueTime, String dataIndex, String valueBelongTime, String isRecord,
+                   String dataType, String orgDataValue, String dataValue, String dataValueTime, String dataIndex, String valueBelongTime,
                    Date createTime) {
         this.itemGroupId = itemGroupId;
         this.dataSourceId = dataSourceId;
@@ -83,7 +79,6 @@ public class RawData implements Serializable {
         this.dataValueTime = dataValueTime;
         this.dataIndex = dataIndex;
         this.valueBelongTime = valueBelongTime;
-        this.isRecord = isRecord;
         this.createTime = createTime;
     }
 }

+ 1 - 4
cqcy-ei/cqcy-ei-common/src/main/java/com/example/opc_common/util/ConstantStr.java

@@ -67,6 +67,7 @@ public class ConstantStr {
     public static final String VALUE_BELONG_TIME = "valueBelongTime";
     public static final String START_NUM="startNum";
     public static final String END_NUM="endNum";
+    public static final String CURRENT_NUM="currentNum";
     public static final String TABLE_ID="tableId";
     public static final String REPORT_TABLE_ITEM="reportTableItem";
 
@@ -104,10 +105,6 @@ public class ConstantStr {
     public static final Integer EVENT_TRENDS_EXCEED = 3;
     public static final Integer EVENT_TRENDS_LOWER = 4;
 
-    //是否该记录0否,1是
-    public static final Integer NOT_RECORD = 0;
-    public static final Integer IS_RECORD = 1;
-
     //取值模式0平均值,1最大值,2最小值,3瞬时值
     public static final Integer AVERAGE_VALUE = 0;
     public static final Integer MAX_VALUE = 1;

+ 5 - 5
cqcy-ei/cqcy-ei-common/src/main/java/com/example/opc_common/util/MathUtil.java

@@ -251,20 +251,20 @@ public class MathUtil {
      * @param readModeType
      * @return
      */
-    public static Integer isMeetChange(BigDecimal oldValue, BigDecimal newValue, BigDecimal differValue, Integer readModeType) {
+    public static Boolean isMeetChange(BigDecimal oldValue, BigDecimal newValue, BigDecimal differValue, Integer readModeType) {
         if (readModeType == ConstantStr.PERCENT_AGE) {
             BigDecimal abs = oldValue.subtract(newValue).abs();
             BigDecimal multiply = abs.divide(oldValue, 4, RoundingMode.HALF_EVEN).multiply(new BigDecimal(100));
             if (multiply.compareTo(differValue) == -1) {
-                return ConstantStr.NOT_RECORD;
+                return false;
             }
-            return ConstantStr.IS_RECORD;
+            return true;
         } else if (readModeType == ConstantStr.ABSOLUTE_VALUE) {
             BigDecimal abs = oldValue.subtract(newValue).abs();
             if (abs.compareTo(differValue) == -1) {
-                return ConstantStr.NOT_RECORD;
+                return false;
             }
-            return ConstantStr.IS_RECORD;
+            return true;
         } else {
             throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前只支持数值和百分率");
         }

+ 22 - 17
cqcy-ei/cqcy-ei-da/pom.xml

@@ -87,6 +87,11 @@
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-pool2</artifactId>
         </dependency>
+        <!--  spring接口接受参数对象,添加校验功能 -->
+        <dependency>
+            <groupId>javax.validation</groupId>
+            <artifactId>validation-api</artifactId>
+        </dependency>
         <!--数学四则运算依赖 -->
         <dependency>
             <groupId>com.mpobjects</groupId>
@@ -124,11 +129,11 @@
 
 
         <!--这个依赖不能要,不然会影响opcda获取所有驱动-->
-<!--        <dependency>-->
-<!--            <groupId>org.openscada.jinterop</groupId>-->
-<!--            <artifactId>org.openscada.jinterop.core</artifactId>-->
-<!--            <version>2.1.8</version>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>org.openscada.jinterop</groupId>-->
+        <!--            <artifactId>org.openscada.jinterop.core</artifactId>-->
+        <!--            <version>2.1.8</version>-->
+        <!--        </dependency>-->
         <!--这个依赖不能要,不然会影响opcda获取所有驱动-->
 
         <!--这个依赖不能要,不然会影响opcua获取所有驱动-->
@@ -167,18 +172,18 @@
             <artifactId>org.openscada.opc.lib</artifactId>
             <version>1.5.0</version>
         </dependency>
-<!--        <dependency>-->
-<!--            <groupId>com.example.opc_da</groupId>-->
-<!--            <artifactId>org.openscada.opc.lib</artifactId>-->
-<!--            <version>0.0.1-SNAPSHOT</version>-->
-<!--            <scope>system</scope>-->
-<!--            <systemPath>${project.basedir}/src/main/resources/lib/org.openscada.opc.lib-1.5.0.jar</systemPath>-->
-<!--        </dependency>-->
-<!--        <dependency>-->
-<!--            <groupId>org.bouncycastle</groupId>-->
-<!--            <artifactId>bcprov-jdk15on</artifactId>-->
-<!--            <version>1.61</version>-->
-<!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>com.example.opc_da</groupId>-->
+        <!--            <artifactId>org.openscada.opc.lib</artifactId>-->
+        <!--            <version>0.0.1-SNAPSHOT</version>-->
+        <!--            <scope>system</scope>-->
+        <!--            <systemPath>${project.basedir}/src/main/resources/lib/org.openscada.opc.lib-1.5.0.jar</systemPath>-->
+        <!--        </dependency>-->
+        <!--        <dependency>-->
+        <!--            <groupId>org.bouncycastle</groupId>-->
+        <!--            <artifactId>bcprov-jdk15on</artifactId>-->
+        <!--            <version>1.61</version>-->
+        <!--        </dependency>-->
         <dependency>
             <groupId>org.bouncycastle</groupId>
             <artifactId>bcprov-jdk15on</artifactId>

+ 1 - 8
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/config/InitRunner.java

@@ -43,14 +43,7 @@ public class InitRunner {
             for (Integer itemGroupId : itemGroupIdList) {
                 ItemGroup itemGroup = itemGroupDao.getItemGroupById(itemGroupId);
                 if (Blank.isNotEmpty(itemGroup)) {
-                    if (itemGroup.getReadMode().equals(ConstantStr.EXCEED_SET_VALUE)) {
-                        Integer dataSourceId = itemGroup.getDataSourceId();
-                        List<Item> itemList = itemGroupDao.getAttributesItemList(itemGroupId, ConstantStr.BASIC_ATTRIBUTES);
-                        Long dataIndex = itemGroupDao.getMaxIndex(itemGroupId, dataSourceId);
-                        if (Blank.isNotEmpty(dataIndex)) {
-                            opcAsyncTask.packageEventTable(itemList, dataSourceId, dataIndex);
-                        }
-                    } else {
+                    if (!itemGroup.getReadMode().equals(ConstantStr.EXCEED_SET_VALUE)) {
                         List<String> belongTimeList = rawDataDao.getRawDataBelongTime(itemGroupId);
                         if (Blank.isNotEmpty(belongTimeList)) {
                             for (int i = 0; i < belongTimeList.size(); i++) {

+ 16 - 0
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/controller/DataModelController.java

@@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.util.List;
 
 @RestController
 @RequestMapping("dataModel")
@@ -99,6 +100,21 @@ public class DataModelController {
     }
 
     /**
+     * 通过传入数据模型的id集合,批量删除数据模型
+     *
+     * @param idList
+     * @return
+     */
+    @PostMapping("/delDataModelByIdList")
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.DATAMODEL, OperationEnum = OperationEnum.DELETE)
+    public Result delDataModelByIdList(@RequestBody List<Integer> idList) {
+        if (Blank.isEmpty(idList)) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
+        }
+        return dataModelService.delDataModelByIdList(idList);
+    }
+
+    /**
      * 测试数据模型的值
      *
      * @param id        数据模型id

+ 11 - 2
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dao/DataModelDao.java

@@ -2,8 +2,7 @@ package com.example.opc_da.dao;
 
 import com.example.opc_common.entity.DataModel;
 import com.example.opc_common.entity.Item;
-import com.example.opc_common.entity.ItemGroup;
-import com.example.opc_common.entity.TableDataDto;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -28,7 +27,17 @@ public interface DataModelDao {
 
     List<Map<String, Object>> getItemGroupByDm(Integer id);
 
+    List<Map<String, Object>> getItemGroupByDmList(@Param("idList") List<Integer> idList);
+
     DataModel getDataModelByRemark(String userId, String remark);
 
     DataModel getDataModelByRemarkNoId(Integer id, String userId, String remark);
+
+    /**
+     * 传入数据模型id集合,批量删除数据模型
+     *
+     * @param idList
+     * @return
+     */
+    Integer delDataModelByIdList(@Param("idList") List<Integer> idList);
 }

+ 11 - 1
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dao/DataSourceDao.java

@@ -4,6 +4,7 @@ import com.example.opc_common.entity.DataSourceDriver;
 import com.example.opc_common.entity.DataSource;
 import com.example.opc_common.entity.DataSourceType;
 import com.example.opc_common.entity.DriverBasicItem;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -47,7 +48,7 @@ public interface DataSourceDao {
 
     Integer delDriverBasicItem(Integer dataSourceDriverId);
 
-    Integer addDriverBasicItemList(Integer dataSourceDriverId,List<DriverBasicItem> driverBasicItemList);
+    Integer addDriverBasicItemList(Integer dataSourceDriverId, List<DriverBasicItem> driverBasicItemList);
 
     DataSourceDriver getDataSourceDriverByid(Integer id);
 
@@ -56,4 +57,13 @@ public interface DataSourceDao {
     List<DataSource> getDataSourceByclsId(String clsId);
 
     List<DataSource> getDataSourceClsId();
+
+    /**
+     * 通过数据源的clsId和ip查询出所有相同的数据源
+     *
+     * @param clsId
+     * @param ipAddress
+     * @return
+     */
+    List<DataSource> getDataSourceByclsIdAndIp(@Param("clsId") String clsId, @Param("ipAddress") String ipAddress);
 }

+ 12 - 1
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dao/ItemGroupDao.java

@@ -3,6 +3,7 @@ package com.example.opc_da.dao;
 import com.example.opc_common.entity.DataSource;
 import com.example.opc_common.entity.Item;
 import com.example.opc_common.entity.ItemGroup;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -69,5 +70,15 @@ public interface ItemGroupDao {
     Integer updateItemTypeList(String strArr, String replaceStr);
 
     //修改数据组中全部数据项为基础属性
-    Integer updateItByItemGroupId(Integer itemGroupId,Integer itemType);
+    Integer updateItByItemGroupId(Integer itemGroupId, Integer itemType);
+
+    /**
+     * 将数据源下的所有数据组,状态为modifyState的改为changeState
+     *
+     * @param dataSourceList
+     * @param modifyState
+     * @param changeState
+     * @return
+     */
+    Integer updateItemGroupState(@Param("dataSourceList") List<DataSource> dataSourceList, @Param("modifyState") Integer modifyState, @Param("changeState") Integer changeState);
 }

+ 2 - 4
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dao/RawDataDao.java

@@ -31,7 +31,7 @@ public interface RawDataDao {
 
     RawData getRawData(Integer itemGroupId, Integer dataSourceId, String itemName, Long dataIndex);
 
-    List<Long> getMeetIndexList(Integer itemGroupId, Integer dataSourceId, List<Item> itemList, String valueBelongTime, Integer isRecord);
+    List<Long> getMeetIndexList(Integer itemGroupId, Integer dataSourceId, List<Item> itemList, String valueBelongTime);
 
     List<Integer> getRawDataGroupIdList();
 
@@ -41,8 +41,6 @@ public interface RawDataDao {
 
     List<RawData> getTableDataByDay(Integer itemGroupId, Integer remainder, Integer dataSourceId, String itemName, String startBelongTime, String endBelongTime);
 
-    List<Long> getEventMeetIndexList(Integer itemGroupId, Integer dataSourceId, List<Item> itemList, Long dataIndex, Integer isRecord);
-
     List<CursorRawData> getEventDataList(Integer itemGroupId, Integer dataSourceId, Integer itemId, List<Long> indexList);
 
     Integer delEventByIndexList(Integer itemGroupId, Integer dataSourceId, Long dataIndex);
@@ -59,7 +57,7 @@ public interface RawDataDao {
 
     Integer addAttachRawDataList(List<AttachRawData> attachRawDataList);
 
-    Integer delAttachRawDataList(Integer itemGroupId,Integer dataSourceId,List<AttachRawData> attachRawDataList);
+    Integer delAttachRawDataList(Integer itemGroupId, Integer dataSourceId, List<AttachRawData> attachRawDataList);
 
     List<CursorRawData> getEventRealIndexList(Integer itemGroupId, Integer dataSourceId, Integer itemId, List<Long> indexList);
 

+ 1 - 1
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dao/ReportTableDao.java

@@ -205,7 +205,7 @@ public interface ReportTableDao {
     List<Integer> getTableItemId(String reportTableId);
 
     //通过模板查询对应类型的报表
-    List<ReportTable> getDeviceRtByttList(List<TableTemplate> tableTemplateList, Integer reportTableType);
+    List<ReportTable> getReportTableByttList(List<TableTemplate> tableTemplateList, Integer reportTableType);
 
     Integer addHaveKeyReport(ReportTable reportTable);
 

+ 10 - 0
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/DataModelService.java

@@ -3,6 +3,8 @@ package com.example.opc_da.service;
 import com.example.opc_common.entity.DataModel;
 import com.example.opc_common.util.Result;
 
+import java.util.List;
+
 public interface DataModelService {
 
     Result addDataModel(DataModel dataModel);
@@ -16,4 +18,12 @@ public interface DataModelService {
     Result delDataModelById(Integer id);
 
     Result testDataModelById(Integer id, Double dataValue);
+
+    /**
+     * 通过传入数据模型的id集合,批量删除数据模型
+     *
+     * @param idList
+     * @return
+     */
+    Result delDataModelByIdList(List<Integer> idList);
 }

+ 20 - 0
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/impl/DataModelServiceImpl.java

@@ -144,6 +144,26 @@ public class DataModelServiceImpl implements DataModelService {
     }
 
     @Override
+    public Result delDataModelByIdList(List<Integer> idList) {
+        List<Map<String, Object>> mapList = dataModelDao.getItemGroupByDmList(idList);
+        if (Blank.isNotEmpty(mapList)) {
+            String message = "此数据模型已被配置在【";
+            for (int i = 0; i < mapList.size(); i++) {
+                if (i != 0) {
+                    message += ",";
+                }
+                message += "组" + mapList.get(i).get("item_group_name") + "-" + mapList.get(i).get("count") + "个标签";
+            }
+            message += "】中,无法直接删除";
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), message);
+        }
+        if (dataModelDao.delDataModelByIdList(idList) <= 0) {
+            return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "批量删除数据模型失败");
+        }
+        return Result.ok("批量删除数据模型成功");
+    }
+
+    @Override
     public Result testDataModelById(Integer id, Double dataValue) {
         DataModel dataModel = dataModelDao.getDataModelById(id);
         if (Blank.isEmpty(dataModel)) {

+ 37 - 29
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/impl/ReportTableServiceImpl.java

@@ -581,42 +581,50 @@ public class ReportTableServiceImpl implements ReportTableService {
         if (Blank.isEmpty(reportTable)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表不存在,请刷新后再试");
         }
-        Integer oldRunState = reportTable.getRunState();
-        String cronId = reportTable.getCronId();
-        if (Blank.isEmpty(cronId)) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "请先配置定时时间");
-        }
-        String cron = reportTable.getCron();
-        if (Blank.isEmpty(oldRunState)) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "未知报表运行状态,请刷新重试");
+        Integer reportTableType = reportTable.getReportTableType();
+        if (Blank.isEmpty(reportTableType)) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "未知报表类型,请刷新重试");
         }
-        if (runState.equals(ConstantStr.START_UP)) {
-            if (Blank.isEmpty(cron)) {
+        if (reportTableType.equals(ConstantStr.AUTOMATIC_REPORT)) {
+            Integer oldRunState = reportTable.getRunState();
+            String cronId = reportTable.getCronId();
+            if (Blank.isEmpty(cronId)) {
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "请先配置定时时间");
             }
-            if (Blank.isEmpty(reportTable.getReportTableType())) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "未知报表类型,请刷新重试");
+            String cron = reportTable.getCron();
+            if (Blank.isEmpty(oldRunState)) {
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "未知报表运行状态,请刷新重试");
             }
-            if (oldRunState.equals(ConstantStr.START_UP)) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "此自动报表已经处于启动状态");
+            if (runState.equals(ConstantStr.START_UP)) {
+                if (Blank.isEmpty(cron)) {
+                    return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "请先配置定时时间");
+                }
+                if (oldRunState.equals(ConstantStr.START_UP)) {
+                    return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "此自动报表已经处于启动状态");
+                }
+                //新增定时器任务
+                reportTableDao.runAutoTableById(id, runState);
+                SchedulingRunnable task = new SchedulingRunnable(ReportTableTask.class, "genAutoTableData", new Object[]{reportTable});
+                cronTaskRegister.addCronTask(task, cronId, cron);
+                return Result.ok("启动成功");
+            } else if (runState.equals(ConstantStr.STOP_IT)) {
+                if (Blank.isEmpty(cronId)) {
+                    throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "定时器主键丢失,停止失败");
+                }
+                if (oldRunState.equals(ConstantStr.STOP_IT)) {
+                    return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "此自动报表已经处于停止状态");
+                }
+                reportTableDao.runAutoTableById(id, runState);
+                cronTaskRegister.removeCronTask(cronId);
+                return Result.ok("停止成功");
+            } else {
+                throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "自动报表的状态只有启动和停止");
             }
-            //新增定时器任务
-            reportTableDao.runAutoTableById(id, runState);
-            SchedulingRunnable task = new SchedulingRunnable(ReportTableTask.class, "genAutoTableData", new Object[]{reportTable});
-            cronTaskRegister.addCronTask(task, cronId, cron);
+        } else if (reportTableType.equals(ConstantStr.EVENT_DRIVEN_REPORT) || reportTableType.equals(ConstantStr.DEVICE_REPORT)) {
+            redisUtil.set(ConstantStr.TABLE_ID + id, true);
             return Result.ok("启动成功");
-        } else if (runState.equals(ConstantStr.STOP_IT)) {
-            if (Blank.isEmpty(cronId)) {
-                throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "定时器主键丢失,停止失败");
-            }
-            if (oldRunState.equals(ConstantStr.STOP_IT)) {
-                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "此自动报表已经处于停止状态");
-            }
-            reportTableDao.runAutoTableById(id, runState);
-            cronTaskRegister.removeCronTask(cronId);
-            return Result.ok("停止成功");
         } else {
-            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "自动报表的状态只有启动和停止");
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "自动,事件驱动,设备报表才可以启动和停止");
         }
     }
 

+ 164 - 409
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcAsyncTask.java

@@ -3,11 +3,10 @@ package com.example.opc_da.task;
 import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson.JSON;
 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.Blank;
 import com.example.opc_common.util.ConstantStr;
 import com.example.opc_common.util.DateUtil;
+import com.example.opc_da.dao.DataSourceDao;
 import com.example.opc_da.dao.ItemGroupDao;
 import com.example.opc_da.dao.RawDataDao;
 import com.example.opc_da.dao.ReportTableDao;
@@ -47,6 +46,9 @@ public class OpcAsyncTask {
     private ReportTableDao reportTableDao;
 
     @Autowired
+    private DataSourceDao dataSourceDao;
+
+    @Autowired
     private AsyncAsyncTask asyncAsyncTask;
 
     @Value("${opc_ua_server.address}")
@@ -92,403 +94,138 @@ public class OpcAsyncTask {
     }
 
     /**
-     * 此接口,只有事件驱动任务才会调用,其他地方不调用
+     * 通过传入的数据组id,将同一数据源的所有数据组,都设置为一样的状态
      *
-     * @param itemList
-     * @param dataSourceId
-     * @param dataIndex
+     * @param itemGroupId
      */
-    public void packageEventTable(List<Item> itemList, Integer dataSourceId, Long dataIndex) {
-        if (Blank.isNotEmpty(itemList)) {
-            Item item_ = itemList.get(0);
-            Integer itemGroupId = item_.getItemGroupId();
-            //获取原始数据表中,满足记录的数据
-            List<Long> indexList = rawDataDao.getEventMeetIndexList(itemGroupId, dataSourceId, itemList, dataIndex, ConstantStr.IS_RECORD);
-            if (Blank.isNotEmpty(indexList)) {
-                //查看此数据组是否在事件驱动报表中被配置
-                List<String> tableIdList = reportTableDao.getTableByItemId(itemList, ConstantStr.EVENT_DRIVEN_REPORT);
-                if (Blank.isNotEmpty(tableIdList)) {
-                    for (int i = 0; i < tableIdList.size(); i++) {
-                        String tableId = tableIdList.get(i);
-                        ReportTable reportTable = reportTableDao.getReportTableById(tableId);
-                        Integer tableTemplateId = reportTable.getTableTemplateId();
-                        TableTemplate tableTemplate = reportTableDao.getTableTemplateById(tableTemplateId);
-                        Integer eventNum = tableTemplate.getEventNum();
-                        String chTableId = reportTableDao.getEventChTableId(tableId);
-                        List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTttiByTemplateId(tableTemplateId);
-                        TableTemplateTableItem tableTemplateTableItem = tableTemplateItemList.get(0);
-                        //判断哪些符合驱动报表,并将符合的index返回回来
-                        List<CursorRawData> cursorRawDataList1 = rawDataDao.getEventRealIndexList(itemGroupId, dataSourceId, tableTemplateTableItem.getItemId(), indexList);
-                        List<Long> realIndexList = new ArrayList<>();
-                        if (Blank.isNotEmpty(cursorRawDataList1)) {
-                            //获取缓存中存在的时间
-                            Object o = redisUtil.get(itemGroupId + ConstantStr.EVENT_DRIVEN_REPORT_STR);
-                            if (Blank.isNotEmpty(o)) {
-                                String timeStr = o.toString();
-                                for (int j = 0; j < cursorRawDataList1.size(); j++) {
-                                    CursorRawData cursorRawData = cursorRawDataList1.get(i);
-                                    if (j == 0) {
-                                        if (!timeStr.equals(cursorRawData.getDataValueTime())) {
-                                            realIndexList.add(cursorRawData.getDataIndex());
-                                        }
-                                    } else {
-                                        realIndexList.add(cursorRawData.getDataIndex());
-                                    }
-                                    if (j == cursorRawDataList1.size() - 1) {
-                                        //生成缓存时间
-                                        redisUtil.set(itemGroupId + ConstantStr.EVENT_DRIVEN_REPORT_STR, cursorRawData.getDataValueTime());
-                                    }
-                                }
-                            } else {
-                                for (int j = 0; j < cursorRawDataList1.size(); j++) {
-                                    CursorRawData cursorRawData = cursorRawDataList1.get(i);
-                                    realIndexList.add(cursorRawData.getDataIndex());
-                                    if (j == cursorRawDataList1.size() - 1) {
-                                        //生成缓存时间
-                                        redisUtil.set(itemGroupId + ConstantStr.EVENT_DRIVEN_REPORT_STR, cursorRawData.getDataValueTime());
-                                    }
-                                }
+    public void changeSameDataSourceState(Integer itemGroupId, Integer runState) {
+        //获取数据组信息,并通过数据组的数据源id查询相应的数据源
+        ItemGroup itemGroup = itemGroupDao.getItemGroupById(itemGroupId);
+        DataSource dataSource = dataSourceDao.getDataSourceById(itemGroup.getDataSourceId());
+        //通过数据源的clsId和ip查询出所有相同的数据源
+        List<DataSource> dataSourceList = dataSourceDao.getDataSourceByclsIdAndIp(dataSource.getClsId(), dataSource.getIpAddress());
+        if (runState == ConstantStr.EXCEPT_STOP_UP) {
+            //将此数据源下的所有运行的数据组(状态为1),修改为状态为2
+            itemGroupDao.updateItemGroupState(dataSourceList, ConstantStr.START_UP, ConstantStr.EXCEPT_STOP_UP);
+        } else if (runState == ConstantStr.START_UP) {
+            //将此数据源下的所有运行的数据组(状态为2),修改为状态为1
+            itemGroupDao.updateItemGroupState(dataSourceList, ConstantStr.EXCEPT_STOP_UP, ConstantStr.START_UP);
+        }
+    }
+
+    /**
+     * 生成事件驱动报表的数据项信息,并保存到redis中
+     *
+     * @param tttItemList     报表模板数据项信息
+     * @param dataMap         数据组数据
+     * @param reportTableId   报表id
+     * @param tableTemplateId 模板id
+     */
+    public void genEventItem(List<TableTemplateTableItem> tttItemList, Map<String, CursorRawData> dataMap,
+                             String reportTableId, Integer tableTemplateId) {
+        if (Blank.isNotEmpty(tttItemList)) {
+            for (TableTemplateTableItem tttItem : tttItemList) {
+                String itemReadName = tttItem.getItemReadName();
+                Integer valueType = tttItem.getValueType();
+                //从存入的键值对中,拿出对应数据项的数据
+                CursorRawData cursorRawData = dataMap.get(itemReadName);
+                //如果有报表id,说明是新增数据项信息,反之,则是更新原本的数据项信息
+                if (Blank.isNotEmpty(reportTableId)) {
+                    //生成对应的报表数据项信息
+                    ReportTableItem reportTableItem = new ReportTableItem(
+                            reportTableId, tttItem.getItemId(), tttItem.getValueType(), tttItem.getXaxis(), tttItem.getYaxis(), tttItem.getStandby(),
+                            valueType.equals(ConstantStr.CALCULATED_VALUE) ? cursorRawData.getDataValue() : cursorRawData.getOrgDataValue(),
+                            cursorRawData.getDataValueTime(), cursorRawData.getDataIndex().toString()
+                    );
+                    redisUtil.set(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + tttItem.getItemReadName(), reportTableItem);
+                } else {
+                    ReportTableItem reportTableItem =
+                            (ReportTableItem) redisUtil.get(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + itemReadName);
+                    reportTableItem.setValueList(reportTableItem.getValueList() + "," +
+                            (valueType.equals(ConstantStr.CALCULATED_VALUE) ? cursorRawData.getDataValue() : cursorRawData.getOrgDataValue()));
+                    reportTableItem.setValueTimeList(reportTableItem.getValueTimeList() + "," + cursorRawData.getDataValueTime());
+                    reportTableItem.setValueIndexList(reportTableItem.getValueIndexList() + "," + cursorRawData.getDataIndex());
+                    redisUtil.set(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + itemReadName, reportTableItem);
+                }
+            }
+        }
+    }
+
+    /**
+     * 将按条件读取的数据组数据,组装为事件驱动报表
+     *
+     * @param cursorRawDataList 条件读取的数据组数据
+     * @param tableTemplateList 此数据组包含的报表模板
+     * @param reportTableMap    <报表模板对应的报表id,报表模板对应的主报表>
+     */
+    public void packageEventTable(List<CursorRawData> cursorRawDataList, List<TableTemplate> tableTemplateList,
+                                  Map<Integer, ReportTable> reportTableMap) {
+        if (Blank.isNotEmpty(tableTemplateList) && Blank.isNotEmpty(cursorRawDataList)) {
+            //将传入的数据,组装为<键,值>的方式
+            Map<String, CursorRawData> dataMap = crdListToMap(cursorRawDataList);
+            //遍历所有报表模板
+            for (TableTemplate tableTemplate : tableTemplateList) {
+                Integer eventNum = tableTemplate.getEventNum();
+                Integer tableTemplateId = tableTemplate.getId();
+                //获取此模板的主报表
+                ReportTable reportTable = reportTableMap.get(tableTemplateId);
+                //从redis中获取此时主报表的启停状态
+                Boolean flag = (Boolean) redisUtil.get(ConstantStr.TABLE_ID + reportTable.getId());
+                if (Blank.isEmpty(flag) || !flag) {
+                    continue;
+                }
+                //获取此时事件驱动报表最新报表的当前数量值
+                Object currentNum = redisUtil.get(ConstantStr.CURRENT_NUM + tableTemplateId);
+                if (Blank.isEmpty(currentNum)) {
+                    //生成新的子报表
+                    String id = IdUtil.createSnowflake(1, 1).nextId() + "";
+                    asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, 0);
+                    redisUtil.set(ConstantStr.CURRENT_NUM, 1);
+                    //获取事件驱动报表中所有的数据项信息
+                    List<TableTemplateTableItem> tttItemList = tableTemplate.getTableTemplateItemList();
+                    if (Blank.isNotEmpty(tttItemList)) {
+                        //生成新的报表数据项信息
+                        genEventItem(tttItemList, dataMap, id, tableTemplateId);
+                    }
+                } else {
+                    //如果两者相等,将上一次的数据异步存入到数据库,并生成新的子报表
+                    if (eventNum == (int) currentNum) {
+                        //从redis中取出数据
+                        List<TableTemplateTableItem> tttItemList = tableTemplate.getTableTemplateItemList();
+                        if (Blank.isNotEmpty(tttItemList)) {
+                            List<ReportTableItem> reportTableItemList = new ArrayList<>();
+                            for (TableTemplateTableItem tttItem : tttItemList) {
+                                reportTableItemList.add((ReportTableItem) redisUtil.get(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + tttItem.getItemReadName()));
                             }
+                            //将所有报表数据项信息存入到数据库
+                            asyncAsyncTask.addReportTableItemList(reportTableItemList);
                         }
-                        if (Blank.isNotEmpty(realIndexList)) {
-                            int size = realIndexList.size();
-                            if (Blank.isEmpty(chTableId)) {
-                                //如果没有子报表,则新增报表,则只需要生成新报表,并向新报表添加数据即可
-                                //如果模板设置的数量大于等于当前拿数据的数量,则只需要添加一张新报表存储数据即可
-                                if (eventNum >= size) {
-                                    String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                    asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, size);
-                                    //根据索引进行排序,将数据丢到相应的位置
-                                    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, realIndexList);
-                                        if (Blank.isNotEmpty(cursorRawDataList)) {
-                                            Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                            reportTableDao.addReportTableItem(new ReportTableItem(
-                                                    id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                            ));
-                                        }
-                                    }
-                                } else {
-                                    //如果模板设置的数量小于当前拿数据的数量
-                                    //如果余数为0,则添加商的数量条数的新报表
-                                    //如果余数不为0,则添加商的数量+1条数的新报表
-                                    //商
-                                    int discuss = size / eventNum;
-                                    //余数
-                                    int remainder = size % eventNum;
-                                    if (remainder == 0) {
-                                        for (int j = 0; j < discuss; j++) {
-                                            List<Long> dataIndexList = new ArrayList<>();
-                                            for (int k = 0; k < eventNum; k++) {
-                                                dataIndexList.add(realIndexList.get(j * eventNum + k));
-                                            }
-                                            String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                            asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, eventNum);
-                                            //根据索引进行排序,并添加数据
-                                            for (TableTemplateTableItem t : tableTemplateItemList) {
-                                                Integer itemId = t.getItemId();
-                                                Integer valueType = t.getValueType();
-                                                Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                                Item item = itemGroupDao.getItemById(itemId);
-                                                if (Blank.isEmpty(item)) {
-                                                    continue;
-                                                }
-                                                List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
-                                                if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                    Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                    reportTableDao.addReportTableItem(new ReportTableItem(
-                                                            id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                    ));
-                                                }
-                                            }
-                                        }
-                                    } else {
-                                        for (int j = 0; j < discuss + 1; j++) {
-                                            List<Long> dataIndexList = new ArrayList<>();
-                                            if (j != discuss) {
-                                                for (int k = 0; k < eventNum; k++) {
-                                                    dataIndexList.add(realIndexList.get(j * eventNum + k));
-                                                }
-                                            } else {
-                                                for (int k = 0; k < remainder; k++) {
-                                                    dataIndexList.add(realIndexList.get(j * eventNum + k));
-                                                }
-                                            }
-                                            String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                            asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, j == discuss ? remainder : eventNum);
-                                            //根据索引进行排序,并添加数据
-                                            for (TableTemplateTableItem t : tableTemplateItemList) {
-                                                Integer itemId = t.getItemId();
-                                                Integer valueType = t.getValueType();
-                                                Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                                Item item = itemGroupDao.getItemById(itemId);
-                                                if (Blank.isEmpty(item)) {
-                                                    continue;
-                                                }
-                                                List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
-                                                if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                    Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                    reportTableDao.addReportTableItem(new ReportTableItem(
-                                                            id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                    ));
-                                                }
-                                            }
-                                        }
-                                    }
-                                }
-                            } else {
-                                //如果已经存在子报表
-                                ReportTable chReportTable = reportTableDao.getReportTableById(chTableId);
-                                Integer currentNum = chReportTable.getCurrentNum();
-                                //如果最新的子报表的数量为模板设置的条数,则上次添加刚好完毕,需要添加新报表。
-                                if (currentNum == eventNum) {
-                                    if (eventNum >= size) {
-                                        String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                        asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, size);
-                                        //根据索引进行排序,将数据丢到相应的位置
-                                        for (TableTemplateTableItem t : tableTemplateItemList) {
-                                            Integer itemId = t.getItemId();
-                                            Integer valueType = t.getValueType();
-                                            Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                            Item item = itemGroupDao.getItemById(itemId);
-                                            if (Blank.isEmpty(item)) {
-                                                continue;
-                                            }
-                                            List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, realIndexList);
-                                            if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                reportTableDao.addReportTableItem(new ReportTableItem(
-                                                        id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                ));
-                                            }
-                                        }
-                                    } else {
-                                        //商
-                                        int discuss = size / eventNum;
-                                        //余数
-                                        int remainder = size % eventNum;
-                                        if (remainder == 0) {
-                                            for (int j = 0; j < discuss; j++) {
-                                                List<Long> dataIndexList = new ArrayList<>();
-                                                for (int k = 0; k < eventNum; k++) {
-                                                    dataIndexList.add(realIndexList.get(j * eventNum + k));
-                                                }
-                                                String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                                asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, eventNum);
-                                                //根据索引进行排序,并添加数据
-                                                for (TableTemplateTableItem t : tableTemplateItemList) {
-                                                    Integer itemId = t.getItemId();
-                                                    Integer valueType = t.getValueType();
-                                                    Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                                    Item item = itemGroupDao.getItemById(itemId);
-                                                    if (Blank.isEmpty(item)) {
-                                                        continue;
-                                                    }
-                                                    List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
-                                                    if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                        Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                        reportTableDao.addReportTableItem(new ReportTableItem(
-                                                                id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                        ));
-                                                    }
-                                                }
-                                            }
-                                        } else {
-                                            for (int j = 0; j < discuss + 1; j++) {
-                                                List<Long> dataIndexList = new ArrayList<>();
-                                                if (j != discuss) {
-                                                    for (int k = 0; k < eventNum; k++) {
-                                                        dataIndexList.add(realIndexList.get(j * eventNum + k));
-                                                    }
-                                                } else {
-                                                    for (int k = 0; k < remainder; k++) {
-                                                        dataIndexList.add(realIndexList.get(j * eventNum + k));
-                                                    }
-                                                }
-                                                String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                                asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, j == discuss ? remainder : eventNum);
-                                                //根据索引进行排序,并添加数据
-                                                for (TableTemplateTableItem t : tableTemplateItemList) {
-                                                    Integer itemId = t.getItemId();
-                                                    Integer valueType = t.getValueType();
-                                                    Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                                    Item item = itemGroupDao.getItemById(itemId);
-                                                    if (Blank.isEmpty(item)) {
-                                                        continue;
-                                                    }
-                                                    List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
-                                                    if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                        Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                        reportTableDao.addReportTableItem(new ReportTableItem(
-                                                                id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                        ));
-                                                    }
-                                                }
-                                            }
-                                        }
-                                    }
-                                } else {
-                                    //如果不等于,则需要修改原来最后的一张报表,往里面继续加数据,加到模板的条数为止
-                                    int difference = eventNum - currentNum;
-                                    //如果这次获取到的条数,小于旧子报表差的条数,则只需要修改旧子报表即可
-                                    if (size <= difference) {
-                                        if (reportTableDao.updateReportTableNum(chTableId, currentNum + size) <= 0) {
-                                            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "修改失败");
-                                        }
-                                        for (TableTemplateTableItem t : tableTemplateItemList) {
-                                            Integer itemId = t.getItemId();
-                                            Integer valueType = t.getValueType();
-                                            Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                            Item item = itemGroupDao.getItemById(itemId);
-                                            if (Blank.isEmpty(item)) {
-                                                continue;
-                                            }
-                                            ReportTableItem reportTableItem = reportTableDao.getReportTableItem(chTableId, itemId, null);
-                                            List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, realIndexList);
-                                            if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                Map<String, String> map = ReportTask.genEventCursorAdd(cursorRawDataList, reportTableItem.getValueList(), reportTableItem.getValueTimeList(), reportTableItem.getValueIndexList());
-                                                reportTableDao.updateReportTableItem(new ReportTableItem(
-                                                        reportTableItem.getId(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                ));
-                                            }
-                                        }
-                                    } else {
-                                        //如果获取到的数量大于旧子报表差的条数,先将旧子报表差的条数补齐
-                                        int newSize = size - difference;
-                                        List<Long> oldIndexList = new ArrayList<>();
-                                        List<Long> newIndexList = new ArrayList<>();
-                                        for (int j = 0; j < size; j++) {
-                                            if (j < difference) {
-                                                oldIndexList.add(realIndexList.get(j));
-                                            } else {
-                                                newIndexList.add(realIndexList.get(j));
-                                            }
-                                        }
-                                        if (reportTableDao.updateReportTableNum(chTableId, currentNum + difference) <= 0) {
-                                            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "修改失败");
-                                        }
-                                        for (TableTemplateTableItem t : tableTemplateItemList) {
-                                            Integer itemId = t.getItemId();
-                                            Integer valueType = t.getValueType();
-                                            Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                            Item item = itemGroupDao.getItemById(itemId);
-                                            if (Blank.isEmpty(item)) {
-                                                continue;
-                                            }
-                                            ReportTableItem reportTableItem = reportTableDao.getReportTableItem(chTableId, itemId, null);
-                                            List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, oldIndexList);
-                                            if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                Map<String, String> map = ReportTask.genEventCursorAdd(cursorRawDataList, reportTableItem.getValueList(), reportTableItem.getValueTimeList(), reportTableItem.getValueIndexList());
-                                                reportTableDao.updateReportTableItem(new ReportTableItem(
-                                                        reportTableItem.getId(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                ));
-                                            }
-                                        }
-                                        //旧子报表添加完毕,执行添加新报表
-                                        if (eventNum >= newSize) {
-                                            String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                            asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, newSize);
-                                            //根据索引进行排序,将数据丢到相应的位置
-                                            for (TableTemplateTableItem t : tableTemplateItemList) {
-                                                Integer itemId = t.getItemId();
-                                                Integer valueType = t.getValueType();
-                                                Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                                Item item = itemGroupDao.getItemById(itemId);
-                                                if (Blank.isEmpty(item)) {
-                                                    continue;
-                                                }
-                                                List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, newIndexList);
-                                                if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                    Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                    reportTableDao.addReportTableItem(new ReportTableItem(
-                                                            id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                    ));
-                                                }
-                                            }
-                                        } else {
-                                            //商
-                                            int discuss = newSize / eventNum;
-                                            //余数
-                                            int remainder = newSize % eventNum;
-                                            if (remainder == 0) {
-                                                for (int j = 0; j < discuss; j++) {
-                                                    List<Long> dataIndexList = new ArrayList<>();
-                                                    for (int k = 0; k < eventNum; k++) {
-                                                        dataIndexList.add(newIndexList.get(j * eventNum + k));
-                                                    }
-                                                    String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                                    asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, eventNum);
-                                                    //根据索引进行排序,并添加数据
-                                                    for (TableTemplateTableItem t : tableTemplateItemList) {
-                                                        Integer itemId = t.getItemId();
-                                                        Integer valueType = t.getValueType();
-                                                        Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                                        Item item = itemGroupDao.getItemById(itemId);
-                                                        if (Blank.isEmpty(item)) {
-                                                            continue;
-                                                        }
-                                                        List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, newIndexList);
-                                                        if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                            Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                            reportTableDao.addReportTableItem(new ReportTableItem(
-                                                                    id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                            ));
-                                                        }
-                                                    }
-                                                }
-                                            } else {
-                                                for (int j = 0; j < discuss + 1; j++) {
-                                                    List<Long> dataIndexList = new ArrayList<>();
-                                                    if (j != discuss) {
-                                                        for (int k = 0; k < eventNum; k++) {
-                                                            dataIndexList.add(newIndexList.get(j * eventNum + k));
-                                                        }
-                                                    } else {
-                                                        for (int k = 0; k < remainder; k++) {
-                                                            dataIndexList.add(newIndexList.get(j * eventNum + k));
-                                                        }
-                                                    }
-                                                    String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                                    asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, j == discuss ? remainder : eventNum);
-                                                    //根据索引进行排序,并添加数据
-                                                    for (TableTemplateTableItem t : tableTemplateItemList) {
-                                                        Integer itemId = t.getItemId();
-                                                        Integer valueType = t.getValueType();
-                                                        Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                                        Item item = itemGroupDao.getItemById(itemId);
-                                                        if (Blank.isEmpty(item)) {
-                                                            continue;
-                                                        }
-                                                        List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
-                                                        if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                            Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                            reportTableDao.addReportTableItem(new ReportTableItem(
-                                                                    id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                            ));
-                                                        }
-                                                    }
-                                                }
-                                            }
-                                        }
-                                    }
-                                }
-                            }
+                        //生成新的子报表
+                        String id = IdUtil.createSnowflake(1, 1).nextId() + "";
+                        asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, 0);
+                        redisUtil.set(ConstantStr.CURRENT_NUM, 1);
+                        //获取事件驱动报表中所有的数据项信息
+                        if (Blank.isNotEmpty(tttItemList)) {
+                            //生成新的报表数据项信息
+                            genEventItem(tttItemList, dataMap, id, tableTemplateId);
+                        }
+                    } else {
+                        //如果两者不相等,则数量还有达到设置的最大值,只需要更新报表数据项信息
+                        List<TableTemplateTableItem> tttItemList = tableTemplate.getTableTemplateItemList();
+                        if (Blank.isNotEmpty(tttItemList)) {
+                            redisUtil.set(ConstantStr.CURRENT_NUM, (int) redisUtil.get(ConstantStr.CURRENT_NUM) + 1);
+                            genEventItem(tttItemList, dataMap, null, tableTemplateId);
                         }
                     }
                 }
             }
-            //删除刚才被添加完毕的index的数据
-            rawDataDao.delEventByIndexList(itemGroupId, dataSourceId, dataIndex);
         }
     }
 
     /**
-     * 将临时集合数据转换为Map
+     * 将临时集合数据转换为Map,将数据组的临时数据,转换为Map<数据项真实读值名称,临时数据>
      *
-     * @param cursorRawDataList
+     * @param cursorRawDataList 数据组同一批次的临时数据
      * @return
      */
     public static Map<String, CursorRawData> crdListToMap(List<CursorRawData> cursorRawDataList) {
@@ -519,6 +256,17 @@ public class OpcAsyncTask {
         return map;
     }
 
+    /**
+     * 根据传入的信息,生成设备报表相应的报表数据项信息
+     *
+     * @param tableTemplateId 报表模板id
+     * @param itemReadName    数据项实际读值名称
+     * @param dataValue       数据项值
+     * @param dataTime        数据项时间
+     * @param index           数据项索引
+     * @param timeItemType    开始,结束
+     * @return
+     */
     public ReportTableItem genDeviceItem(Integer tableTemplateId, String itemReadName, String dataValue, String dataTime, Long index, Integer timeItemType) {
         if (Blank.isNotEmpty(timeItemType)) {
             ReportTableItem reportTableItem =
@@ -541,13 +289,27 @@ public class OpcAsyncTask {
         }
     }
 
-    //设备报表因为开关变化一次时间很长,所以redis中数据如果更新,考虑将数据更新到数据库,防止数据丢失
+
+    /**
+     * 设备报表因为开关变化一次时间很长,所以redis中数据如果更新,考虑将数据更新到数据库,防止数据丢失
+     *
+     * @param cursorRawDataList 数据组读取一次的数据
+     * @param tableTemplateList 数据组启动前配置好的报表模板
+     * @param ttIdMap           <报表模板id,<报表模板对应的数据项名称,报表模板对应的数据项信息>>
+     * @param itemReadMap       <基础数据项id,基础数据项读值名称>
+     * @param reportTableMap    <报表模板对应的设备报表id,报表模板对应的设备报表>
+     * @param index             索引,第几次读值
+     */
     public void packDeviceTable(List<CursorRawData> cursorRawDataList, List<TableTemplate> tableTemplateList,
                                 Map<Integer, Map<String, TableTemplateTableItem>> ttIdMap, Map<Integer, String> itemReadMap,
                                 Map<Integer, ReportTable> reportTableMap, Long index) {
+        //将传入的数据,组装为<键,值>的方式
         Map<String, CursorRawData> dataMap = crdListToMap(cursorRawDataList);
         if (Blank.isNotEmpty(tableTemplateList) && Blank.isNotEmpty(cursorRawDataList)) {
+            //遍历所有报表模板
             for (TableTemplate tableTemplate : tableTemplateList) {
+                //拿到报表模板的开始数据项id,开始数据项阈值,最大数量,报表模板id,结束数据项id,结束数据项阈值
+                //并从数据项map中将真实读值名称取出来
                 Integer startItemId = tableTemplate.getStartItemId();
                 String startValue = tableTemplate.getStartValue();
                 Integer eventNum = tableTemplate.getEventNum();
@@ -556,6 +318,13 @@ public class OpcAsyncTask {
                 Integer endItemId = tableTemplate.getEndItemId();
                 String endValue = tableTemplate.getEndValue();
                 String endItemName = itemReadMap.get(endItemId);
+                //获取此模板的主报表
+                ReportTable reportTable = reportTableMap.get(tableTemplateId);
+                //从redis中获取此时主报表的启停状态
+                Boolean flag = (Boolean) redisUtil.get(ConstantStr.TABLE_ID + reportTable.getId());
+                if (Blank.isEmpty(flag) || !flag) {
+                    continue;
+                }
                 //获取开始数据项的数据
                 CursorRawData startCrData = dataMap.get(startItemName);
                 //如果开始数据项的数据等于,设定的开始值
@@ -586,8 +355,6 @@ public class OpcAsyncTask {
                         }
                         //如果值为0,则需要新增一张报表
                         if (startNum == 0) {
-                            //获取此模板的主报表
-                            ReportTable reportTable = reportTableMap.get(tableTemplateId);
                             //生成新的子报表
                             String id = IdUtil.createSnowflake(1, 1).nextId() + "";
                             asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.DEVICE_GENERATE_REPORT, 0);
@@ -748,7 +515,7 @@ public class OpcAsyncTask {
             Integer itemGroupId = item_.getItemGroupId();
             int remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
             //从临时数据表中,满足记录的数据
-            List<Long> indexList = rawDataDao.getMeetIndexList(itemGroupId, dataSourceId, itemList, sqlCurrentYmdh, ConstantStr.IS_RECORD);
+            List<Long> indexList = rawDataDao.getMeetIndexList(itemGroupId, dataSourceId, itemList, sqlCurrentYmdh);
             if (Blank.isNotEmpty(indexList)) {
                 for (Item item : itemList) {
                     //从临时表中获取相应数据项的数据
@@ -762,16 +529,14 @@ public class OpcAsyncTask {
                             List<Boolean> dataList = new ArrayList<>();
                             List<String> dataTimeList = new ArrayList<>();
                             List<Long> dataIndexList = new ArrayList<>();
-                            List<Integer> isRecordList = new ArrayList<>();
                             for (CursorRawData cursorRawData : cursorRawDataList) {
                                 dataList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), Boolean.class));
                                 dataList.add(JSON.parseObject(cursorRawData.getDataValue(), Boolean.class));
                                 dataTimeList.add(cursorRawData.getDataValueTime());
                                 dataIndexList.add(cursorRawData.getDataIndex());
-                                isRecordList.add(cursorRawData.getIsRecord());
                             }
                             RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(orgDataList), JSON.toJSONString(dataList),
-                                    JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, JSON.toJSONString(isRecordList), new Date());
+                                    JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, new Date());
                             rawDataDao.addRawData(remainder, rawData);
                         } else {
                             try {
@@ -779,32 +544,28 @@ public class OpcAsyncTask {
                                 List<BigDecimal> dataList = new ArrayList<>();
                                 List<String> dataTimeList = new ArrayList<>();
                                 List<Long> dataIndexList = new ArrayList<>();
-                                List<Integer> isRecordList = new ArrayList<>();
                                 for (CursorRawData cursorRawData : cursorRawDataList) {
                                     orgDataList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), BigDecimal.class));
                                     dataList.add(JSON.parseObject(cursorRawData.getDataValue(), BigDecimal.class));
                                     dataTimeList.add(cursorRawData.getDataValueTime());
                                     dataIndexList.add(cursorRawData.getDataIndex());
-                                    isRecordList.add(cursorRawData.getIsRecord());
                                 }
                                 RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(orgDataList), JSON.toJSONString(dataList),
-                                        JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, JSON.toJSONString(isRecordList), new Date());
+                                        JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, new Date());
                                 rawDataDao.addRawData(remainder, rawData);
                             } catch (Exception e) {
                                 List<String> orgDataList = new ArrayList<>();
                                 List<String> dataList = new ArrayList<>();
                                 List<String> dataTimeList = new ArrayList<>();
                                 List<Long> dataIndexList = new ArrayList<>();
-                                List<Integer> isRecordList = new ArrayList<>();
                                 for (CursorRawData cursorRawData : cursorRawDataList) {
                                     orgDataList.add(cursorRawData.getOrgDataValue());
                                     dataList.add(cursorRawData.getDataValue());
                                     dataTimeList.add(cursorRawData.getDataValueTime());
                                     dataIndexList.add(cursorRawData.getDataIndex());
-                                    isRecordList.add(cursorRawData.getIsRecord());
                                 }
                                 RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(orgDataList), JSON.toJSONString(dataList),
-                                        JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, JSON.toJSONString(isRecordList), new Date());
+                                        JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, new Date());
                                 rawDataDao.addRawData(remainder, rawData);
                             }
                         }
@@ -829,7 +590,7 @@ public class OpcAsyncTask {
             Integer itemGroupId = item_.getItemGroupId();
             int remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
             //从临时数据表中,满足记录的数据
-            List<Long> indexList = rawDataDao.getMeetIndexList(itemGroupId, dataSourceId, itemList, sqlCurrentYmdh, ConstantStr.IS_RECORD);
+            List<Long> indexList = rawDataDao.getMeetIndexList(itemGroupId, dataSourceId, itemList, sqlCurrentYmdh);
             if (Blank.isNotEmpty(indexList)) {
                 for (Item item : itemList) {
                     //从临时表中获取相应数据项的数据
@@ -843,16 +604,14 @@ public class OpcAsyncTask {
                             List<Boolean> dataList = new ArrayList<>();
                             List<String> dataTimeList = new ArrayList<>();
                             List<Long> dataIndexList = new ArrayList<>();
-                            List<Integer> isRecordList = new ArrayList<>();
                             for (CursorRawData cursorRawData : cursorRawDataList) {
                                 orgDataList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), Boolean.class));
                                 dataList.add(JSON.parseObject(cursorRawData.getDataValue(), Boolean.class));
                                 dataTimeList.add(cursorRawData.getDataValueTime());
                                 dataIndexList.add(cursorRawData.getDataIndex());
-                                isRecordList.add(cursorRawData.getIsRecord());
                             }
                             RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(orgDataList), JSON.toJSONString(dataList),
-                                    JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, JSON.toJSONString(isRecordList), new Date());
+                                    JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, new Date());
                             rawDataDao.addRawData(remainder, rawData);
                         } else {
                             try {
@@ -860,32 +619,28 @@ public class OpcAsyncTask {
                                 List<BigDecimal> dataList = new ArrayList<>();
                                 List<String> dataTimeList = new ArrayList<>();
                                 List<Long> dataIndexList = new ArrayList<>();
-                                List<Integer> isRecordList = new ArrayList<>();
                                 for (CursorRawData cursorRawData : cursorRawDataList) {
                                     orgDataList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), BigDecimal.class));
                                     dataList.add(JSON.parseObject(cursorRawData.getDataValue(), BigDecimal.class));
                                     dataTimeList.add(cursorRawData.getDataValueTime());
                                     dataIndexList.add(cursorRawData.getDataIndex());
-                                    isRecordList.add(cursorRawData.getIsRecord());
                                 }
                                 RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(orgDataList), JSON.toJSONString(dataList),
-                                        JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, JSON.toJSONString(isRecordList), new Date());
+                                        JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, new Date());
                                 rawDataDao.addRawData(remainder, rawData);
                             } catch (Exception e) {
                                 List<String> orgDataList = new ArrayList<>();
                                 List<String> dataList = new ArrayList<>();
                                 List<String> dataTimeList = new ArrayList<>();
                                 List<Long> dataIndexList = new ArrayList<>();
-                                List<Integer> isRecordList = new ArrayList<>();
                                 for (CursorRawData cursorRawData : cursorRawDataList) {
                                     orgDataList.add(cursorRawData.getOrgDataValue());
                                     dataList.add(cursorRawData.getDataValue());
                                     dataTimeList.add(cursorRawData.getDataValueTime());
                                     dataIndexList.add(cursorRawData.getDataIndex());
-                                    isRecordList.add(cursorRawData.getIsRecord());
                                 }
                                 RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(orgDataList), JSON.toJSONString(dataList),
-                                        JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, JSON.toJSONString(isRecordList), new Date());
+                                        JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, new Date());
                                 rawDataDao.addRawData(remainder, rawData);
                             }
                         }

+ 120 - 117
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaChangeTask.java

@@ -91,7 +91,7 @@ public class OpcDaChangeTask extends TimerTask {
         Server server = OpcDaUtil.createServer(dataSource);
         Long index = 0L;
         AutoReconnectController autoReconnectController = new AutoReconnectController(server);
-        AutoReconnectListener listener=new AutoReconnectListener() {
+        AutoReconnectListener listener = new AutoReconnectListener() {
             private int trueCount = 0;
             private int flaseCount = 0;
 
@@ -103,7 +103,9 @@ public class OpcDaChangeTask extends TimerTask {
                                 itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务重新连接成功",
                                 "服务重新连接成功",
                                 ConstantStr.NO_READ));
-                        itemGroupDao.stopItemGroupById(id, ConstantStr.START_UP);
+                        //通过传入的数据组id,将同一数据源的所有数据组,都设置为一样的状态
+                        opcAsyncTask.changeSameDataSourceState(id, ConstantStr.START_UP);
+//                        itemGroupDao.stopItemGroupById(id, ConstantStr.START_UP);
                     }
                     trueCount++;
                 }
@@ -118,7 +120,9 @@ public class OpcDaChangeTask extends TimerTask {
                                     itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务断开",
                                     "服务断开,马上进行重新连接",
                                     ConstantStr.NO_READ));
-                            itemGroupDao.stopItemGroupById(id, ConstantStr.EXCEPT_STOP_UP);
+                            //通过传入的数据组id,将同一数据源的所有数据组,都设置为一样的状态
+                            opcAsyncTask.changeSameDataSourceState(id, ConstantStr.EXCEPT_STOP_UP);
+//                            itemGroupDao.stopItemGroupById(id, ConstantStr.EXCEPT_STOP_UP);
                         }
                     }
                     flaseCount++;
@@ -148,7 +152,7 @@ public class OpcDaChangeTask extends TimerTask {
                     break;
                 }
             }
-        }catch (Exception e) {
+        } catch (Exception e) {
             Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
             if (Blank.isEmpty(flage)) {
                 flage = false;
@@ -179,53 +183,133 @@ public class OpcDaChangeTask extends TimerTask {
             }
         }
 
-        System.out.println("===========1开始读取数据======"+ group);
+        System.out.println("===========1开始读取数据======" + group);
         while (true) {
             try {
                 Thread.sleep(1000);
 //                try {
-                    if (Blank.isNotEmpty(group)) {
-                        System.out.println("===========1开始读取数据");
+                if (Blank.isNotEmpty(group)) {
+                    System.out.println("===========1开始读取数据");
 //                        Group group = server.addGroup();
 //                        Map<String, org.openscada.opc.lib.da.Item> itemResult = group.addItems(items);
 //                        Set itemSet = new HashSet(itemResult.values());
 //                        org.openscada.opc.lib.da.Item[] itemArr = new org.openscada.opc.lib.da.Item[itemSet.size()];
 //                        itemSet.toArray(itemArr);
 
-                        Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
-                        if (Blank.isEmpty(flage)) {
-                            flage = false;
+                    Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
+                    if (Blank.isEmpty(flage)) {
+                        flage = false;
+                    }
+                    if (!flage) {
+                        //执行组装数据库的数据,以及生成驱动报表
+                        sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id));
+                        if (Blank.isNotEmpty(sqlCurrentYmdh)) {
+                            opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
                         }
-                        if (!flage) {
-                            //执行组装数据库的数据,以及生成驱动报表
-                            sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id));
-                            if (Blank.isNotEmpty(sqlCurrentYmdh)) {
-                                opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
+                        redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
+                        if (Blank.isNotEmpty(server)) {
+                            try {
+                                server.removeGroup(group, true);
+                            } catch (JIException ex) {
+                                System.err.println("删除组失败");
+                                ex.printStackTrace();
                             }
-                            redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
-                            if (Blank.isNotEmpty(server)) {
-                                try {
-                                    server.removeGroup(group, true);
-                                } catch (JIException ex) {
-                                    System.err.println("删除组失败");
-                                    ex.printStackTrace();
+                            server.dispose();
+                        }
+                        if (Blank.isNotEmpty(autoReconnectController)) {
+                            autoReconnectController.disconnect();
+                        }
+                        cronTaskRegister.removeCronTask(cronId);
+                        redisUtil.del(ConstantStr.ITEM_GROUP + id);
+                        timer.cancel();
+                        break;
+                    }
+                    if (System.currentTimeMillis() >= endTime) {
+                        //执行组装数据库的数据,以及生成驱动报表
+                        sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id));
+                        if (Blank.isNotEmpty(sqlCurrentYmdh)) {
+                            opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
+                        }
+                        redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
+                        if (Blank.isNotEmpty(server)) {
+                            try {
+                                server.removeGroup(group, true);
+                            } catch (JIException ex) {
+                                System.err.println("删除组失败");
+                                ex.printStackTrace();
+                            }
+                            server.dispose();
+                        }
+                        if (Blank.isNotEmpty(autoReconnectController)) {
+                            autoReconnectController.disconnect();
+                        }
+                        timer.cancel();
+                        break;
+                    }
+                    try {
+                        Map<org.openscada.opc.lib.da.Item, ItemState> resultMap = group.read(true, itemArr);
+                        index++;
+                        System.out.println("读取到的数据大小:" + resultMap.size());
+                        List<CursorRawData> cursorRawDataList = new ArrayList<>();
+                        for (Item key : resultMap.keySet()) {
+                            String keyId = key.getId();
+                            ItemState itemMap = resultMap.get(key);
+                            Map<String, Object> val = getVal(itemMap.getValue());
+                            String javaType = val.get("javaType").toString();
+                            Object value = val.get("value");
+                            Date time = itemMap.getTimestamp().getTime();
+                            String currentYmdh = DateUtil.dateChangeStr(time, timeFormat);
+                            String currentYmdhmss = DateUtil.dateChangeStrYmdhmss(time);
+                            if (Blank.isEmpty(sqlCurrentYmdh)) {
+                                sqlCurrentYmdh = currentYmdh;
+                                redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id, currentYmdh, ConstantStr.TWO_HOUR);
+                            } else {
+                                if (!sqlCurrentYmdh.equals(currentYmdh)) {
+                                    //组装相应的原始数据
+                                    opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
+                                    sqlCurrentYmdh = currentYmdh;
                                 }
-                                server.dispose();
                             }
-                            if (Blank.isNotEmpty(autoReconnectController)) {
-                                autoReconnectController.disconnect();
+                            if (!javaType.toLowerCase().equals("boolean")) {
+                                try {
+                                    DataModel dm = map.get(keyId);
+                                    if (Blank.isNotEmpty(dm) && dm.getModelType().equals(ConstantStr.VALUE_REPLACE)
+                                            && dm.getOperationRule().equals(value.toString())) {
+
+                                    } else {
+                                        BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
+                                        BigDecimal dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm, bigDecimal) : bigDecimal;
+                                        Object oldValue = redisUtil.get(ConstantStr.VALUE + id + keyId);
+                                        CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, bigDecimal.toString(), dmData.toString(),
+                                                currentYmdhmss, index, currentYmdh, new Date());
+                                        if (Blank.isEmpty(oldValue)) {
+                                            cursorRawDataList.add(cursorRawData);
+                                        } else {
+                                            if ((MathUtil.isMeetChange((BigDecimal) oldValue,
+                                                    dmData, new BigDecimal(modeValue), readModeType))) {
+                                                cursorRawDataList.add(cursorRawData);
+                                            }
+                                        }
+                                        redisUtil.set(ConstantStr.VALUE + id + keyId, dmData, ConstantStr.TWO_HOUR);
+                                    }
+                                } catch (Exception e) {
+
+                                }
                             }
-                            cronTaskRegister.removeCronTask(cronId);
-                            redisUtil.del(ConstantStr.ITEM_GROUP + id);
-                            timer.cancel();
-                            break;
                         }
-                        if (System.currentTimeMillis() >= endTime) {
+                        if (Blank.isNotEmpty(cursorRawDataList)) {
+                            opcAsyncTask.addCursorRawDataList(cursorRawDataList);
+                            cursorRawDataList = new ArrayList<>();
+                        }
+                    } catch (Exception e) {
+                        flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
+                        if (Blank.isEmpty(flage)) {
+                            flage = false;
+                        }
+                        if (!flage) {
                             //执行组装数据库的数据,以及生成驱动报表
                             sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id));
-                            if (Blank.isNotEmpty(sqlCurrentYmdh)) {
-                                opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
-                            }
+                            opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
                             redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
                             if (Blank.isNotEmpty(server)) {
                                 try {
@@ -239,93 +323,12 @@ public class OpcDaChangeTask extends TimerTask {
                             if (Blank.isNotEmpty(autoReconnectController)) {
                                 autoReconnectController.disconnect();
                             }
+                            itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+                            cronTaskRegister.removeCronTask(cronId);
                             timer.cancel();
-                            break;
-                        }
-                        try {
-                            Map<org.openscada.opc.lib.da.Item, ItemState> resultMap = group.read(true, itemArr);
-                            index++;
-                            System.out.println("读取到的数据大小:"+resultMap.size());
-                            List<CursorRawData> cursorRawDataList = new ArrayList<>();
-                            for (Item key : resultMap.keySet()) {
-                                String keyId = key.getId();
-                                ItemState itemMap = resultMap.get(key);
-                                Map<String, Object> val = getVal(itemMap.getValue());
-                                String javaType = val.get("javaType").toString();
-                                Object value = val.get("value");
-                                Date time = itemMap.getTimestamp().getTime();
-                                String currentYmdh = DateUtil.dateChangeStr(time, timeFormat);
-                                String currentYmdhmss = DateUtil.dateChangeStrYmdhmss(time);
-                                if (Blank.isEmpty(sqlCurrentYmdh)) {
-                                    sqlCurrentYmdh = currentYmdh;
-                                    redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id, currentYmdh, ConstantStr.TWO_HOUR);
-                                } else {
-                                    if (!sqlCurrentYmdh.equals(currentYmdh)) {
-                                        //组装相应的原始数据
-                                        opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
-                                        sqlCurrentYmdh = currentYmdh;
-                                    }
-                                }
-                                if (!javaType.toLowerCase().equals("boolean")) {
-                                    try {
-                                        DataModel dm = map.get(keyId);
-                                        if (Blank.isNotEmpty(dm) && dm.getModelType().equals(ConstantStr.VALUE_REPLACE)
-                                                && dm.getOperationRule().equals(value.toString())) {
-
-                                        } else {
-                                            BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                            BigDecimal dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm, bigDecimal) : bigDecimal;
-                                            Object oldValue = redisUtil.get(ConstantStr.VALUE + id + keyId);
-                                            CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, bigDecimal.toString(), dmData.toString(),
-                                                    currentYmdhmss, index, currentYmdh,
-                                                    ConstantStr.IS_RECORD, new Date());
-                                            if (Blank.isEmpty(oldValue)) {
-                                                cursorRawDataList.add(cursorRawData);
-                                            } else {
-                                                if ((MathUtil.isMeetChange((BigDecimal) oldValue,
-                                                        dmData, new BigDecimal(modeValue), readModeType)).equals(ConstantStr.IS_RECORD)) {
-                                                    cursorRawDataList.add(cursorRawData);
-                                                }
-                                            }
-                                            redisUtil.set(ConstantStr.VALUE + id + keyId, dmData, ConstantStr.TWO_HOUR);
-                                        }
-                                    } catch (Exception e) {
-
-                                    }
-                                }
-                            }
-                            if (Blank.isNotEmpty(cursorRawDataList)) {
-                                opcAsyncTask.addCursorRawDataList(cursorRawDataList);
-                                cursorRawDataList = new ArrayList<>();
-                            }
-                        } catch (Exception e) {
-                            flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
-                            if (Blank.isEmpty(flage)) {
-                                flage = false;
-                            }
-                            if (!flage) {
-                                //执行组装数据库的数据,以及生成驱动报表
-                                sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id));
-                                opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
-                                redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
-                                if (Blank.isNotEmpty(server)) {
-                                    try {
-                                        server.removeGroup(group, true);
-                                    } catch (JIException ex) {
-                                        System.err.println("删除组失败");
-                                        ex.printStackTrace();
-                                    }
-                                    server.dispose();
-                                }
-                                if (Blank.isNotEmpty(autoReconnectController)) {
-                                    autoReconnectController.disconnect();
-                                }
-                                itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
-                                cronTaskRegister.removeCronTask(cronId);
-                                timer.cancel();
-                            }
                         }
                     }
+                }
 //                } catch (Exception e) {
 //                    Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
 //                    if (Blank.isEmpty(flage)) {

+ 197 - 226
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaExceedTask.java

@@ -47,6 +47,10 @@ public class OpcDaExceedTask extends TimerTask {
 
     private final String timeFormat;
 
+    private final List<TableTemplate> tableTemplates;
+
+    private final Map<Integer, ReportTable> reportTableMap;
+
     private final Long endTime;
 
     public OpcDaExceedTask(RedisUtil redisUtil,
@@ -62,6 +66,8 @@ public class OpcDaExceedTask extends TimerTask {
                            List<com.example.opc_common.entity.Item> itemList,
                            String[] items,
                            String timeFormat,
+                           List<TableTemplate> tableTemplates,
+                           Map<Integer, ReportTable> reportTableMap,
                            Long endTime) {
         this.redisUtil = redisUtil;
         this.opcAsyncTask = opcAsyncTask;
@@ -76,6 +82,8 @@ public class OpcDaExceedTask extends TimerTask {
         this.itemList = itemList;
         this.items = items;
         this.timeFormat = timeFormat;
+        this.tableTemplates = tableTemplates;
+        this.reportTableMap = reportTableMap;
         this.endTime = endTime;
     }
 
@@ -101,7 +109,9 @@ public class OpcDaExceedTask extends TimerTask {
                                 itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务重新连接成功",
                                 "服务重新连接成功",
                                 ConstantStr.NO_READ));
-                        itemGroupDao.stopItemGroupById(id, ConstantStr.START_UP);
+                        //通过传入的数据组id,将同一数据源的所有数据组,都设置为一样的状态
+                        opcAsyncTask.changeSameDataSourceState(id, ConstantStr.START_UP);
+//                        itemGroupDao.stopItemGroupById(id, ConstantStr.START_UP);
                     }
                     trueCount++;
                 }
@@ -116,7 +126,9 @@ public class OpcDaExceedTask extends TimerTask {
                                     itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务断开",
                                     "服务断开,马上进行重新连接",
                                     ConstantStr.NO_READ));
-                            itemGroupDao.stopItemGroupById(id, ConstantStr.EXCEPT_STOP_UP);
+                            //通过传入的数据组id,将同一数据源的所有数据组,都设置为一样的状态
+                            opcAsyncTask.changeSameDataSourceState(id, ConstantStr.EXCEPT_STOP_UP);
+//                            itemGroupDao.stopItemGroupById(id, ConstantStr.EXCEPT_STOP_UP);
                         }
                     }
                     flaseCount++;
@@ -145,15 +157,12 @@ public class OpcDaExceedTask extends TimerTask {
                     break;
                 }
             }
-        }catch (Exception e) {
+        } catch (Exception e) {
             Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
             if (Blank.isEmpty(flage)) {
                 flage = false;
             }
             if (!flage) {
-                //执行组装数据库的数据,以及生成驱动报表
-                opcAsyncTask.packageEventTable(itemList, dataSourceId, index);
-                redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
                 if (Blank.isNotEmpty(group) && Blank.isNotEmpty(server)) {
                     try {
                         server.removeGroup(group, true);
@@ -173,92 +182,155 @@ public class OpcDaExceedTask extends TimerTask {
                 timer.cancel();
             }
         }
-        System.out.println("===========2开始读取数据======"+group);
         while (true) {
             try {
                 Thread.sleep(1000);
 //                try {
-                    if (Blank.isNotEmpty(group)) {
-                        System.out.println("===========2开始读取数据");
-//                        Group group = server.addGroup();
-//                        Map<String, org.openscada.opc.lib.da.Item> itemResult = group.addItems(items);
-//                        Set itemSet = new HashSet(itemResult.values());
-//                        org.openscada.opc.lib.da.Item[] itemArr = new org.openscada.opc.lib.da.Item[itemSet.size()];
-//                        itemSet.toArray(itemArr);
+                if (Blank.isNotEmpty(group)) {
 
-                        Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
-                        if (Blank.isEmpty(flage)) {
-                            flage = false;
-                        }
-                        if (!flage) {
-                            //执行组装数据库的数据,以及生成驱动报表
-                            opcAsyncTask.packageEventTable(itemList, dataSourceId, index);
-                            redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
-                            if (Blank.isNotEmpty(server)) {
-                                try {
-                                    server.removeGroup(group, true);
-                                } catch (JIException ex) {
-                                    System.err.println("删除组失败");
-                                    ex.printStackTrace();
-                                }
-                                server.dispose();
-                            }
-                            if (Blank.isNotEmpty(autoReconnectController)) {
-                                autoReconnectController.disconnect();
+                    Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
+                    if (Blank.isEmpty(flage)) {
+                        flage = false;
+                    }
+                    if (!flage) {
+                        if (Blank.isNotEmpty(server)) {
+                            try {
+                                server.removeGroup(group, true);
+                            } catch (JIException ex) {
+                                System.err.println("删除组失败");
+                                ex.printStackTrace();
                             }
-                            cronTaskRegister.removeCronTask(cronId);
-                            redisUtil.del(ConstantStr.ITEM_GROUP + id);
-                            timer.cancel();
-                            break;
+                            server.dispose();
                         }
-                        if (System.currentTimeMillis() >= endTime) {
-                            //执行组装数据库的数据,以及生成驱动报表
-                            opcAsyncTask.packageEventTable(itemList, dataSourceId, index);
-                            redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
-                            if (Blank.isNotEmpty(server)) {
-                                try {
-                                    server.removeGroup(group, true);
-                                } catch (JIException ex) {
-                                    System.err.println("删除组失败");
-                                    ex.printStackTrace();
-                                }
-                                server.dispose();
-                            }
-                            if (Blank.isNotEmpty(autoReconnectController)) {
-                                autoReconnectController.disconnect();
+                        if (Blank.isNotEmpty(autoReconnectController)) {
+                            autoReconnectController.disconnect();
+                        }
+                        cronTaskRegister.removeCronTask(cronId);
+                        redisUtil.del(ConstantStr.ITEM_GROUP + id);
+                        timer.cancel();
+                        break;
+                    }
+                    if (System.currentTimeMillis() >= endTime) {
+                        if (Blank.isNotEmpty(server)) {
+                            try {
+                                server.removeGroup(group, true);
+                            } catch (JIException ex) {
+                                System.err.println("删除组失败");
+                                ex.printStackTrace();
                             }
-                            timer.cancel();
-                            break;
+                            server.dispose();
                         }
-                        try {
-                            Map<org.openscada.opc.lib.da.Item, ItemState> resultMap = group.read(true, itemArr);
-                            index++;
-                            System.out.println("读取到的数据大小:"+resultMap.size());
-                            List<CursorRawData> cursorRawDataList = new ArrayList<>();
-                            for (org.openscada.opc.lib.da.Item key : resultMap.keySet()) {
-                                String keyId = key.getId();
-                                ItemState itemMap = resultMap.get(key);
-                                Map<String, Object> val = getVal(itemMap.getValue());
-                                String javaType = val.get("javaType").toString();
-                                Object value = val.get("value");
-                                Date time = itemMap.getTimestamp().getTime();
-                                String currentYmdh = DateUtil.dateChangeStr(time, timeFormat);
-                                String currentYmdhmss = DateUtil.dateChangeStrYmdhmss(time);
-                                DataModel dm = map.get(keyId);
-                                if (keyId.equals(driverItem) && (index % 20 == 0)) {
-                                    opcAsyncTask.packageEventTable(itemList, dataSourceId, index - 1L);
+                        if (Blank.isNotEmpty(autoReconnectController)) {
+                            autoReconnectController.disconnect();
+                        }
+                        timer.cancel();
+                        break;
+                    }
+                    try {
+                        Map<org.openscada.opc.lib.da.Item, ItemState> resultMap = group.read(true, itemArr);
+                        index++;
+                        List<CursorRawData> cursorRawDataList = new ArrayList<>();
+                        for (org.openscada.opc.lib.da.Item key : resultMap.keySet()) {
+                            String keyId = key.getId();
+                            ItemState itemMap = resultMap.get(key);
+                            Map<String, Object> val = getVal(itemMap.getValue());
+                            String javaType = val.get("javaType").toString();
+                            Object value = val.get("value");
+                            Date time = itemMap.getTimestamp().getTime();
+                            String currentYmdh = DateUtil.dateChangeStr(time, timeFormat);
+                            String currentYmdhmss = DateUtil.dateChangeStrYmdhmss(time);
+                            DataModel dm = map.get(keyId);
+                            if (Blank.isNotEmpty(dm) && dm.getModelType().equals(ConstantStr.VALUE_REPLACE)) {
+                                String valueStr = value.toString();
+                                String dataValue = DataModel.valueReplace(dm, valueStr);
+                                if (keyId.equals(driverItem)) {
+                                    try {
+                                        BigDecimal dmData = new BigDecimal(dataValue);
+                                        BigDecimal bigDecimal1 = new BigDecimal(modeValue);
+                                        if (eventMode == ConstantStr.EVENT_MODEL_EXCEED) {
+                                            if (dmData.compareTo(bigDecimal1) == 1) {
+                                                CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, dmData.toString(),
+                                                        currentYmdhmss, index, currentYmdh, new Date());
+                                                cursorRawDataList.add(cursorRawData);
+                                            } else {
+                                                cursorRawDataList = new ArrayList<>();
+                                                break;
+                                            }
+                                        } else if (eventMode == ConstantStr.EVENT_MODEL_LOWER) {
+                                            if (dmData.compareTo(bigDecimal1) == -1) {
+                                                CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, dmData.toString(),
+                                                        currentYmdhmss, index, currentYmdh, new Date());
+                                                cursorRawDataList.add(cursorRawData);
+                                            } else {
+                                                cursorRawDataList = new ArrayList<>();
+                                                break;
+                                            }
+                                        } else if (eventMode == ConstantStr.EVENT_MODEL_EQUAL) {
+                                            if (dmData.compareTo(bigDecimal1) == 0) {
+                                                CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, dmData.toString(),
+                                                        currentYmdhmss, index, currentYmdh, new Date());
+                                                cursorRawDataList.add(cursorRawData);
+                                            } else {
+                                                cursorRawDataList = new ArrayList<>();
+                                                break;
+                                            }
+                                        } else if (eventMode == ConstantStr.EVENT_TRENDS_EXCEED) {
+                                            if (((BigDecimal) redisUtil.get(ConstantStr.VALUE + id + keyId)).compareTo(bigDecimal1) != 1) {
+                                                if (dmData.compareTo(bigDecimal1) == 1) {
+                                                    CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, dmData.toString(),
+                                                            currentYmdhmss, index, currentYmdh, new Date());
+                                                    cursorRawDataList.add(cursorRawData);
+                                                } else {
+                                                    cursorRawDataList = new ArrayList<>();
+                                                    break;
+                                                }
+                                            } else {
+                                                cursorRawDataList = new ArrayList<>();
+                                                break;
+                                            }
+                                            redisUtil.set(ConstantStr.VALUE + id + keyId, dmData, ConstantStr.TWO_HOUR);
+                                        } else if (eventMode == ConstantStr.EVENT_TRENDS_LOWER) {
+                                            if (((BigDecimal) redisUtil.get(ConstantStr.VALUE + id + keyId)).compareTo(bigDecimal1) != -1) {
+                                                if (dmData.compareTo(bigDecimal1) == -1) {
+                                                    CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, dmData.toString(),
+                                                            currentYmdhmss, index, currentYmdh, new Date());
+                                                    cursorRawDataList.add(cursorRawData);
+                                                } else {
+                                                    cursorRawDataList = new ArrayList<>();
+                                                    break;
+                                                }
+                                            } else {
+                                                cursorRawDataList = new ArrayList<>();
+                                                break;
+                                            }
+                                            redisUtil.set(ConstantStr.VALUE + id + keyId, dmData, ConstantStr.TWO_HOUR);
+                                        }
+                                    } catch (Exception e) {
+                                        CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, dataValue,
+                                                currentYmdhmss, index, currentYmdh, new Date());
+                                        cursorRawDataList.add(cursorRawData);
+                                    }
+                                } else {
+                                    CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, dataValue,
+                                            currentYmdhmss, index, currentYmdh, new Date());
+                                    cursorRawDataList.add(cursorRawData);
                                 }
-                                if (Blank.isNotEmpty(dm) && dm.getModelType().equals(ConstantStr.VALUE_REPLACE)) {
+                            } else {
+                                if (javaType.toLowerCase().equals("boolean")) {
                                     String valueStr = value.toString();
-                                    String dataValue = DataModel.valueReplace(dm, valueStr);
-                                    if (keyId.equals(driverItem)) {
-                                        try {
-                                            BigDecimal dmData = new BigDecimal(dataValue);
+                                    CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, valueStr,
+                                            currentYmdhmss, index, currentYmdh, new Date());
+                                    cursorRawDataList.add(cursorRawData);
+                                } else {
+                                    try {
+                                        BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
+                                        BigDecimal dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm, bigDecimal) : bigDecimal;
+                                        if (keyId.equals(driverItem)) {
                                             BigDecimal bigDecimal1 = new BigDecimal(modeValue);
                                             if (eventMode == ConstantStr.EVENT_MODEL_EXCEED) {
                                                 if (dmData.compareTo(bigDecimal1) == 1) {
-                                                    CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, dmData.toString(),
-                                                            currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                                    CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, bigDecimal.toString(), dmData.toString(),
+                                                            currentYmdhmss, index, currentYmdh, new Date());
                                                     cursorRawDataList.add(cursorRawData);
                                                 } else {
                                                     cursorRawDataList = new ArrayList<>();
@@ -266,8 +338,8 @@ public class OpcDaExceedTask extends TimerTask {
                                                 }
                                             } else if (eventMode == ConstantStr.EVENT_MODEL_LOWER) {
                                                 if (dmData.compareTo(bigDecimal1) == -1) {
-                                                    CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, dmData.toString(),
-                                                            currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                                    CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, bigDecimal.toString(), dmData.toString(),
+                                                            currentYmdhmss, index, currentYmdh, new Date());
                                                     cursorRawDataList.add(cursorRawData);
                                                 } else {
                                                     cursorRawDataList = new ArrayList<>();
@@ -275,8 +347,8 @@ public class OpcDaExceedTask extends TimerTask {
                                                 }
                                             } else if (eventMode == ConstantStr.EVENT_MODEL_EQUAL) {
                                                 if (dmData.compareTo(bigDecimal1) == 0) {
-                                                    CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, dmData.toString(),
-                                                            currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                                    CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, bigDecimal.toString(), dmData.toString(),
+                                                            currentYmdhmss, index, currentYmdh, new Date());
                                                     cursorRawDataList.add(cursorRawData);
                                                 } else {
                                                     cursorRawDataList = new ArrayList<>();
@@ -285,8 +357,8 @@ public class OpcDaExceedTask extends TimerTask {
                                             } else if (eventMode == ConstantStr.EVENT_TRENDS_EXCEED) {
                                                 if (((BigDecimal) redisUtil.get(ConstantStr.VALUE + id + keyId)).compareTo(bigDecimal1) != 1) {
                                                     if (dmData.compareTo(bigDecimal1) == 1) {
-                                                        CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, dmData.toString(),
-                                                                currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                                        CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, bigDecimal.toString(), dmData.toString(),
+                                                                currentYmdhmss, index, currentYmdh, new Date());
                                                         cursorRawDataList.add(cursorRawData);
                                                     } else {
                                                         cursorRawDataList = new ArrayList<>();
@@ -300,8 +372,8 @@ public class OpcDaExceedTask extends TimerTask {
                                             } else if (eventMode == ConstantStr.EVENT_TRENDS_LOWER) {
                                                 if (((BigDecimal) redisUtil.get(ConstantStr.VALUE + id + keyId)).compareTo(bigDecimal1) != -1) {
                                                     if (dmData.compareTo(bigDecimal1) == -1) {
-                                                        CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, dmData.toString(),
-                                                                currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                                        CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, bigDecimal.toString(), dmData.toString(),
+                                                                currentYmdhmss, index, currentYmdh, new Date());
                                                         cursorRawDataList.add(cursorRawData);
                                                     } else {
                                                         cursorRawDataList = new ArrayList<>();
@@ -313,156 +385,55 @@ public class OpcDaExceedTask extends TimerTask {
                                                 }
                                                 redisUtil.set(ConstantStr.VALUE + id + keyId, dmData, ConstantStr.TWO_HOUR);
                                             }
-                                        } catch (Exception e) {
-                                            CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, dataValue,
-                                                    currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
+                                        } else {
+                                            CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, bigDecimal.toString(), dmData.toString(),
+                                                    currentYmdhmss, index, currentYmdh, new Date());
                                             cursorRawDataList.add(cursorRawData);
                                         }
-                                    } else {
-                                        CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, dataValue,
-                                                currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
-                                        cursorRawDataList.add(cursorRawData);
-                                    }
-                                } else {
-                                    if (javaType.toLowerCase().equals("boolean")) {
-                                        String valueStr = value.toString();
-                                        CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, valueStr,
-                                                currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
-                                        cursorRawDataList.add(cursorRawData);
-                                    } else {
-                                        try {
-                                            BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                            BigDecimal dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm, bigDecimal) : bigDecimal;
-                                            if (keyId.equals(driverItem)) {
-                                                BigDecimal bigDecimal1 = new BigDecimal(modeValue);
-                                                if (eventMode == ConstantStr.EVENT_MODEL_EXCEED) {
-                                                    if (dmData.compareTo(bigDecimal1) == 1) {
-                                                        CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, bigDecimal.toString(), dmData.toString(),
-                                                                currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
-                                                        cursorRawDataList.add(cursorRawData);
-                                                    } else {
-                                                        cursorRawDataList = new ArrayList<>();
-                                                        break;
-                                                    }
-                                                } else if (eventMode == ConstantStr.EVENT_MODEL_LOWER) {
-                                                    if (dmData.compareTo(bigDecimal1) == -1) {
-                                                        CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, bigDecimal.toString(), dmData.toString(),
-                                                                currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
-                                                        cursorRawDataList.add(cursorRawData);
-                                                    } else {
-                                                        cursorRawDataList = new ArrayList<>();
-                                                        break;
-                                                    }
-                                                } else if (eventMode == ConstantStr.EVENT_MODEL_EQUAL) {
-                                                    if (dmData.compareTo(bigDecimal1) == 0) {
-                                                        CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, bigDecimal.toString(), dmData.toString(),
-                                                                currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
-                                                        cursorRawDataList.add(cursorRawData);
-                                                    } else {
-                                                        cursorRawDataList = new ArrayList<>();
-                                                        break;
-                                                    }
-                                                } else if (eventMode == ConstantStr.EVENT_TRENDS_EXCEED) {
-                                                    if (((BigDecimal) redisUtil.get(ConstantStr.VALUE + id + keyId)).compareTo(bigDecimal1) != 1) {
-                                                        if (dmData.compareTo(bigDecimal1) == 1) {
-                                                            CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, bigDecimal.toString(), dmData.toString(),
-                                                                    currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
-                                                            cursorRawDataList.add(cursorRawData);
-                                                        } else {
-                                                            cursorRawDataList = new ArrayList<>();
-                                                            break;
-                                                        }
-                                                    } else {
-                                                        cursorRawDataList = new ArrayList<>();
-                                                        break;
-                                                    }
-                                                    redisUtil.set(ConstantStr.VALUE + id + keyId, dmData, ConstantStr.TWO_HOUR);
-                                                } else if (eventMode == ConstantStr.EVENT_TRENDS_LOWER) {
-                                                    if (((BigDecimal) redisUtil.get(ConstantStr.VALUE + id + keyId)).compareTo(bigDecimal1) != -1) {
-                                                        if (dmData.compareTo(bigDecimal1) == -1) {
-                                                            CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, bigDecimal.toString(), dmData.toString(),
-                                                                    currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
-                                                            cursorRawDataList.add(cursorRawData);
-                                                        } else {
-                                                            cursorRawDataList = new ArrayList<>();
-                                                            break;
-                                                        }
-                                                    } else {
-                                                        cursorRawDataList = new ArrayList<>();
-                                                        break;
-                                                    }
-                                                    redisUtil.set(ConstantStr.VALUE + id + keyId, dmData, ConstantStr.TWO_HOUR);
-                                                }
-                                            } else {
-                                                CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, bigDecimal.toString(), dmData.toString(),
-                                                        currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
-                                                cursorRawDataList.add(cursorRawData);
-                                            }
-                                        } catch (Exception e) {
-                                            if (Blank.isNotEmpty(value)) {
-                                                CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, JSON.toJSONString(value), JSON.toJSONString(value),
-                                                        currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
-                                                cursorRawDataList.add(cursorRawData);
-                                            } else {
-                                                CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, "null", "null",
-                                                        currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
-                                                cursorRawDataList.add(cursorRawData);
-                                            }
+                                    } catch (Exception e) {
+                                        if (Blank.isNotEmpty(value)) {
+                                            CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, JSON.toJSONString(value), JSON.toJSONString(value),
+                                                    currentYmdhmss, index, currentYmdh, new Date());
+                                            cursorRawDataList.add(cursorRawData);
+                                        } else {
+                                            CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, "null", "null",
+                                                    currentYmdhmss, index, currentYmdh, new Date());
+                                            cursorRawDataList.add(cursorRawData);
                                         }
                                     }
                                 }
                             }
-                            if (Blank.isNotEmpty(cursorRawDataList)) {
-                                opcAsyncTask.addCursorRawDataList(cursorRawDataList);
-                                cursorRawDataList = new ArrayList<>();
-                            }
-                        } catch (Exception e) {
-                            flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
-                            if (Blank.isEmpty(flage)) {
-                                flage = false;
-                            }
-                            if (!flage) {
-                                //执行组装数据库的数据,以及生成驱动报表
-                                opcAsyncTask.packageEventTable(itemList, dataSourceId, index);
-                                redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
-                                if (Blank.isNotEmpty(server)) {
-                                    try {
-                                        server.removeGroup(group, true);
-                                    } catch (JIException ex) {
-                                        System.err.println("删除组失败");
-                                        ex.printStackTrace();
-                                    }
-                                    server.dispose();
-                                }
-                                if (Blank.isNotEmpty(autoReconnectController)) {
-                                    autoReconnectController.disconnect();
+                        }
+                        if (Blank.isNotEmpty(cursorRawDataList)) {
+                            opcAsyncTask.addCursorRawDataList(cursorRawDataList);
+                            opcAsyncTask.packageEventTable(cursorRawDataList, tableTemplates, reportTableMap);
+
+                            cursorRawDataList = new ArrayList<>();
+                        }
+                    } catch (Exception e) {
+                        flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
+                        if (Blank.isEmpty(flage)) {
+                            flage = false;
+                        }
+                        if (!flage) {
+                            if (Blank.isNotEmpty(server)) {
+                                try {
+                                    server.removeGroup(group, true);
+                                } catch (JIException ex) {
+                                    System.err.println("删除组失败");
+                                    ex.printStackTrace();
                                 }
-                                itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
-                                cronTaskRegister.removeCronTask(cronId);
-                                timer.cancel();
+                                server.dispose();
                             }
+                            if (Blank.isNotEmpty(autoReconnectController)) {
+                                autoReconnectController.disconnect();
+                            }
+                            itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+                            cronTaskRegister.removeCronTask(cronId);
+                            timer.cancel();
                         }
                     }
-//                } catch (Exception e) {
-//                    Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
-//                    if (Blank.isEmpty(flage)) {
-//                        flage = false;
-//                    }
-//                    if (!flage) {
-//                        //执行组装数据库的数据,以及生成驱动报表
-//                        opcAsyncTask.packageEventTable(itemList, dataSourceId, index);
-//                        redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
-//                        if (Blank.isNotEmpty(server)) {
-//                            server.dispose();
-//                        }
-//                        if (Blank.isNotEmpty(autoReconnectController)) {
-//                            autoReconnectController.disconnect();
-//                        }
-//                        itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
-//                        cronTaskRegister.removeCronTask(cronId);
-//                        timer.cancel();
-//                    }
-//                }
+                }
             } catch (Exception e) {
                 e.printStackTrace();
             }

+ 14 - 65
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaFrequencyTask.java

@@ -118,7 +118,9 @@ public class OpcDaFrequencyTask extends TimerTask {
                                 itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务重新连接成功",
                                 "服务重新连接成功",
                                 ConstantStr.NO_READ));
-                        itemGroupDao.stopItemGroupById(id, ConstantStr.START_UP);
+                        //通过传入的数据组id,将同一数据源的所有数据组,都设置为一样的状态
+                        opcAsyncTask.changeSameDataSourceState(id, ConstantStr.START_UP);
+//                        itemGroupDao.stopItemGroupById(id, ConstantStr.START_UP);
                     }
                     trueCount++;
                 }
@@ -133,7 +135,9 @@ public class OpcDaFrequencyTask extends TimerTask {
                                     itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务断开",
                                     "服务断开,马上进行重新连接",
                                     ConstantStr.NO_READ));
-                            itemGroupDao.stopItemGroupById(id, ConstantStr.EXCEPT_STOP_UP);
+                            //通过传入的数据组id,将同一数据源的所有数据组,都设置为一样的状态
+                            opcAsyncTask.changeSameDataSourceState(id, ConstantStr.EXCEPT_STOP_UP);
+//                            itemGroupDao.stopItemGroupById(id, ConstantStr.EXCEPT_STOP_UP);
                         }
                     }
                     flaseCount++;
@@ -280,9 +284,9 @@ public class OpcDaFrequencyTask extends TimerTask {
                             }
                         });
                         for (Map<String, Object> map1 : mapList) {
-                            org.openscada.opc.lib.da.Item item= (Item) map1.get("item");
-                            String keyId =item.getId();
-                            ItemState itemState= (ItemState) map1.get("itemState");
+                            org.openscada.opc.lib.da.Item item = (Item) map1.get("item");
+                            String keyId = item.getId();
+                            ItemState itemState = (ItemState) map1.get("itemState");
                             Map<String, Object> val = getVal(itemState.getValue());
                             String javaType = val.get("javaType").toString();
                             Object value = val.get("value");
@@ -303,91 +307,36 @@ public class OpcDaFrequencyTask extends TimerTask {
                             if (Blank.isNotEmpty(dm) && dm.getModelType().equals(ConstantStr.VALUE_REPLACE)) {
                                 String valueStr = value.toString();
                                 CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, DataModel.valueReplace(dm, valueStr),
-                                        currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                        currentYmdhmss, index, currentYmdh, new Date());
                                 cursorRawDataList.add(cursorRawData);
                             } else {
                                 if (javaType.toLowerCase().equals("boolean")) {
                                     CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, value.toString(), value.toString(),
-                                            currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                            currentYmdhmss, index, currentYmdh, new Date());
                                     cursorRawDataList.add(cursorRawData);
                                 } else {
                                     try {
                                         BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
                                         BigDecimal dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm, bigDecimal) : bigDecimal;
                                         CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, value.toString(), dmData.toString(),
-                                                currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                                currentYmdhmss, index, currentYmdh, new Date());
                                         cursorRawDataList.add(cursorRawData);
                                     } catch (Exception e) {
                                         e.printStackTrace();
                                         if (Blank.isNotEmpty(value)) {
                                             String valStr = value.toString();
                                             CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valStr, valStr,
-                                                    currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                                    currentYmdhmss, index, currentYmdh, new Date());
                                             cursorRawDataList.add(cursorRawData);
                                         } else {
                                             CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, "null", "null",
-                                                    currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                                    currentYmdhmss, index, currentYmdh, new Date());
                                             cursorRawDataList.add(cursorRawData);
                                         }
                                     }
                                 }
                             }
                         }
-//                        for (org.openscada.opc.lib.da.Item key : resultMap.keySet()) {
-//                            String keyId = key.getId();
-//                            ItemState itemMap = resultMap.get(key);
-//                            Map<String, Object> val = getVal(itemMap.getValue());
-//                            String javaType = val.get("javaType").toString();
-//                            Object value = val.get("value");
-//                            Date time = itemMap.getTimestamp().getTime();
-//                            String currentYmdh = DateUtil.dateChangeStr(time, timeFormat);
-//                            String currentYmdhmss = DateUtil.dateChangeStrYmdhmss(time);
-//                            DataModel dm = map.get(keyId);
-//                            System.out.println("-----" + sqlCurrentYmdh + "---" + currentYmdh);
-//                            if (Blank.isEmpty(sqlCurrentYmdh)) {
-//                                sqlCurrentYmdh = currentYmdh;
-//                                redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id, currentYmdh, ConstantStr.TWO_HOUR);
-//                            } else {
-//                                if (!sqlCurrentYmdh.equals(currentYmdh)) {
-//                                    //组装相应的原始数据
-////                                        System.out.println("--------------4");
-//                                    opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
-//                                    sqlCurrentYmdh = currentYmdh;
-//                                }
-//                            }
-//                            if (Blank.isNotEmpty(dm) && dm.getModelType().equals(ConstantStr.VALUE_REPLACE)) {
-//                                String valueStr = value.toString();
-//                                CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valueStr, DataModel.valueReplace(dm, valueStr),
-//                                        currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
-//                                cursorRawDataList.add(cursorRawData);
-//                            } else {
-//                                if (javaType.toLowerCase().equals("boolean")) {
-//                                    CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, value.toString(), value.toString(),
-//                                            currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
-//                                    cursorRawDataList.add(cursorRawData);
-//                                } else {
-//                                    try {
-//                                        BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-//                                        BigDecimal dmData = Blank.isNotEmpty(dm) ? MathUtil.quadricOperation(dm, bigDecimal) : bigDecimal;
-//                                        CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, value.toString(), dmData.toString(),
-//                                                currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
-//                                        cursorRawDataList.add(cursorRawData);
-//                                    } catch (Exception e) {
-//                                        e.printStackTrace();
-//                                        if (Blank.isNotEmpty(value)) {
-//                                            String valStr = value.toString();
-//                                            CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, valStr, valStr,
-//                                                    currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
-//                                            cursorRawDataList.add(cursorRawData);
-//                                        } else {
-//                                            CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, keyId, javaType, "null", "null",
-//                                                    currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
-//                                            cursorRawDataList.add(cursorRawData);
-//                                        }
-//                                    }
-//                                }
-//                            }
-//                        }
                         if (Blank.isNotEmpty(cursorRawDataList)) {
                             opcAsyncTask.addCursorRawDataList(cursorRawDataList);
                             opcAsyncTask.packDeviceTable(cursorRawDataList, tableTemplates, ttIdMap, itemReadMap, reportTableMap, index);

+ 28 - 55
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaTask.java

@@ -55,6 +55,9 @@ public class OpcDaTask {
     @Value("${opc_storage.time_format}")
     private String timeFormat;
 
+    @Autowired
+    private ReportTableTask reportTableTask;
+
     public void opcDaTask(ItemGroup itemGroup, DataSource dataSource, String cronId) {
         log.info("OPCDa开始运行,{},执行开始,执行时间为{}", itemGroup, DateUtil.dateChangeStrYmdhmss(new Date()));
         Integer id = itemGroup.getId();
@@ -75,65 +78,12 @@ public class OpcDaTask {
         Date startDate = DateUtil.strYmdhmsChangeDate(startTime);
         Date endDate = DateUtil.strYmdhmsChangeDate(endTime);
 
-        //获取组中基础数据项标签的数据模型,并转换为map<itemName,DataModel>
+        //获取数据组中基础数据项标签的数据模型,并转换为map<itemName,DataModel>
         List<Item> basicItemList = itemGroupDao.getAttributesItemList(id, ConstantStr.BASIC_ATTRIBUTES);
         if (Blank.isNotEmpty(basicItemList)) {
             List<DataModel> dmBasicItemList = dataModelDao.getDmListByItemList(basicItemList);
             Map<String, DataModel> basicMap = DataModel.genMap(basicItemList, dmBasicItemList);
-            //查看此数据组是否在设备报表中被配置
-            List<TableTemplate> tableTemplateList = reportTableDao.getDeviceTtByItemList(basicItemList, ConstantStr.DEVICE_REPORT);
-            if (Blank.isNotEmpty(tableTemplateList)) {
-                for (TableTemplate tableTemplate : tableTemplateList) {
-                    Integer tableTemplateId = tableTemplate.getId();
-                    Integer eventNum = tableTemplate.getEventNum();
-                    //根据模板id查询出最新一条的设备报表
-                    ReportTable reportTable = reportTableDao.getReportTableByTemplate(tableTemplate);
-                    String chTableId = reportTableDao.getEventChTableId(reportTable.getId());
-                    if (Blank.isNotEmpty(chTableId)) {
-                        ReportTable chReportTable = reportTableDao.getReportTableById(chTableId);
-                        List<ReportTableItem> chReportTableItemList = reportTableDao.getTableItemListById(chTableId);
-                        if (Blank.isNotEmpty(chReportTableItemList)) {
-                            for (ReportTableItem reportTableItem : chReportTableItemList) {
-                                Integer timeItemType = reportTableItem.getTimeItemType();
-                                String itemReadName = reportTableItem.getItemReadName();
-                                if (Blank.isNotEmpty(timeItemType)) {
-                                    if (timeItemType.equals(ConstantStr.END_TIME_ITEM)) {
-                                        String valueIndexList = reportTableItem.getValueIndexList();
-                                        int length = valueIndexList.split(",").length;
-                                        if (eventNum == length) {
-                                            redisUtil.set(ConstantStr.START_NUM + tableTemplateId,0);
-                                        } else {
-                                            redisUtil.set(ConstantStr.END_NUM + tableTemplateId, length);
-                                            redisUtil.set(ConstantStr.TABLE_ID + tableTemplateId, chTableId);
-                                        }
-                                    }
-                                    if (timeItemType.equals(ConstantStr.START_TIME_ITEM)) {
-                                        String valueIndexList = reportTableItem.getValueIndexList();
-                                        int length = valueIndexList.split(",").length;
-                                        if (eventNum == length) {
-                                            Object start0 = redisUtil.get(ConstantStr.START_NUM + tableTemplateId);
-                                            if (Blank.isEmpty(start0)) {
-                                                redisUtil.set(ConstantStr.START_NUM + tableTemplateId, length);
-                                            }
-                                        } else {
-                                            redisUtil.set(ConstantStr.START_NUM + tableTemplateId, length);
-                                        }
-                                    }
-                                    redisUtil.set(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + itemReadName + ConstantStr.REPORT_TABLE_ITEM + timeItemType, reportTableItem);
-                                } else {
-                                    redisUtil.set(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + itemReadName, reportTableItem);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            List<ReportTable> reportTableList = new ArrayList<>();
-            if (Blank.isNotEmpty(tableTemplateList)) {
-                reportTableList = reportTableDao.getDeviceRtByttList(tableTemplateList, ConstantStr.DEVICE_REPORT);
-            }
-            Map<Integer, Map<String, TableTemplateTableItem>> ttIdMap = TableTemplate.genMap(tableTemplateList);
-            Map<Integer, ReportTable> reportTableMap = ReportTable.genMap(reportTableList);
+            //将基础数据项集合转换为Map<数据项id,数据项真实读值名称>
             Map<Integer, String> itemReadMap = Item.genMap(basicItemList);
             List<String> itemStrList = new ArrayList<>();
             for (Item item : basicItemList) {
@@ -142,6 +92,18 @@ public class OpcDaTask {
             String[] items = itemStrList.toArray(new String[]{});
             //有多少个报表,就存多少份,然后每20筛选一次数据
             if (readMode == ConstantStr.ON_FREQUENCY) {
+                //查看此数据组是否在设备报表中被配置
+                List<TableTemplate> tableTemplateList = reportTableDao.getDeviceTtByItemList(basicItemList, ConstantStr.DEVICE_REPORT);
+                List<ReportTable> reportTableList = new ArrayList<>();
+                if (Blank.isNotEmpty(tableTemplateList)) {
+                    reportTableList = reportTableDao.getReportTableByttList(tableTemplateList, ConstantStr.DEVICE_REPORT);
+                }
+                //将报表转换为Map<报表主键,报表>
+                Map<Integer, ReportTable> reportTableMap = ReportTable.genMap(reportTableList);
+                //<模板主键,<报表模板数据项真实读值名称,报表模板数据项信息>>
+                Map<Integer, Map<String, TableTemplateTableItem>> ttIdMap = TableTemplate.genMap(tableTemplateList);
+                //通过此数据组关联的所有模板信息,生成对应设备报表在redis中的键,值
+                reportTableTask.genDeviceRedisKey(tableTemplateList);
                 timer.schedule(new OpcDaFrequencyTask(redisUtil,
                                 opcAsyncTask,
                                 cronId,
@@ -178,6 +140,14 @@ public class OpcDaTask {
                                 endDate.getTime()),
                         startDate);
             } else if (readMode == ConstantStr.EXCEED_SET_VALUE) {
+                //查看此数据组是否在事件驱动报表中被配置
+                List<TableTemplate> tableTemplateList = reportTableDao.getDeviceTtByItemList(basicItemList, ConstantStr.EVENT_DRIVEN_REPORT);
+                List<ReportTable> reportTableList = new ArrayList<>();
+                if (Blank.isNotEmpty(tableTemplateList)) {
+                    reportTableList = reportTableDao.getReportTableByttList(tableTemplateList, ConstantStr.EVENT_DRIVEN_REPORT);
+                }
+                //将报表转换为Map<报表主键,报表>
+                Map<Integer, ReportTable> reportTableMap = ReportTable.genMap(reportTableList);
                 timer.schedule(new OpcDaExceedTask(redisUtil,
                                 opcAsyncTask,
                                 cronId,
@@ -191,12 +161,15 @@ public class OpcDaTask {
                                 basicItemList,
                                 items,
                                 timeFormat,
+                                tableTemplateList,
+                                reportTableMap,
                                 endDate.getTime()),
                         startDate);
             } else {
                 throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配其他类型的读取模式");
             }
         }
+        //更新数据组中的附属属性数据项信息
         //获取组中附属数据项标签的数据模型,并转换为map<itemName,DataModel>
         List<Item> attachItemList = itemGroupDao.getAttributesItemList(id, ConstantStr.ATTACH_ATTRIBUTES);
         if (Blank.isNotEmpty(attachItemList)) {

+ 57 - 129
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/ReportTableTask.java

@@ -10,6 +10,7 @@ import com.example.opc_common.util.*;
 import com.example.opc_da.dao.*;
 import com.example.opc_da.util.CronUtil;
 import com.example.opc_da.util.OpcDaUtil;
+import com.example.opc_da.util.RedisUtil;
 import com.example.opc_da.util.UserUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.openscada.opc.dcom.da.OPCSERVERSTATE;
@@ -64,6 +65,9 @@ public class ReportTableTask {
     @Value("${opc_storage.time_format}")
     private String timeFormat;
 
+    @Autowired
+    private RedisUtil redisUtil;
+
     /**
      * 手动报表模板新增,保存相应的数据项信息,生成相应的报表
      *
@@ -891,71 +895,6 @@ public class ReportTableTask {
                             reportTableId, itemId, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
                     ));
                 });
-
-//                if (Blank.isNotEmpty(tableTemplateItemList)) {
-//                    //根据模板配置的取值条件,获取表格数据项的数据,并存到报表的数据项信息里面
-//                    for (TableTemplateTableItem t : tableTemplateItemList) {
-//                        Integer itemGroupId = t.getItemGroupId();
-//                        if (Blank.isEmpty(itemGroupId)) {
-//                            continue;
-//                        }
-//                        Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
-//                        Integer itemId = t.getItemId();
-//                        Integer xaxis = t.getXaxis();
-//                        Integer yaxis = t.getYaxis();
-//                        String standby = t.getStandby();
-//                        String itemName = t.getItemName();
-//                        Integer dataSourceId = t.getDataSourceId();
-//                        Integer valueTakingMode = t.getValueTakingMode();
-//                        Integer valueType = t.getValueType();
-//                        Integer bucketType = t.getBucketType();
-//                        Integer bucketValue = t.getBucketValue();
-//                        boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-//                        Map<String, String> map = new HashMap<>();
-//                        if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY) || bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)
-//                                || bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE) || bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
-//                            String startBelongTime;
-//                            String endBelongTime;
-//                            List<RawData> rawDataList = new ArrayList<>();
-//                            if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
-//                                startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_DAY_STR.length());
-//                                endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_DAY_STR.length());
-//                                rawDataList = rawDataDao.getTableDataByDay(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
-//                            } else {
-//                                startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
-//                                endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
-//                                rawDataList = rawDataDao.getTableData(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
-//                            }
-//                            List<String> sqlCurrentYmdhList = rawDataDao.getCursorYmdh(itemGroupId, dataSourceId, itemName, startBelongTime, endBelongTime);
-//                            if (Blank.isNotEmpty(sqlCurrentYmdhList)) {
-//                                for (String sqlCurrentYmdh : sqlCurrentYmdhList) {
-//                                    List<CursorRawData> cursorRawDataList = rawDataDao.getTableCursorData(itemGroupId, dataSourceId, itemName, sqlCurrentYmdh);
-//                                    rawDataList = ReportTask.genRawAddCursor(rawDataList, cursorRawDataList, itemGroupId, dataSourceId, sqlCurrentYmdh);
-//                                }
-//                            }
-//                            if (Blank.isNotEmpty(rawDataList)) {
-//                                String dataType = rawDataList.get(0).getDataType();
-//                                if (dataType.equals("boolean")) {
-//                                    map = ReportTask.genBoolean(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
-//                                } else {
-//                                    try {
-//                                        map = ReportTask.genBigDecimal(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
-//                                    } catch (Exception e) {
-//                                        map = ReportTask.genString(rawDataList, startTime, endTime, bucketType, bucketValue);
-//                                    }
-//                                }
-//                            }
-//                        } else {
-//                            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型的取值模式");
-//                        }
-//                        String valueList = map.get(flage ? "valueList" : "orgValueList");
-//                        String valueTimeList = map.get("valueTimeList");
-//                        String valueIndexList = map.get("valueIndexList");
-//                        reportTableItemList.add(new ReportTableItem(
-//                                reportTableId, itemId, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
-//                        ));
-//                    }
-//                }
             }
         }
 
@@ -1247,70 +1186,6 @@ public class ReportTableTask {
             reportTable.setReportTableItemList(reportTableItemList);
         }
 
-        //根据模板的取值条件获取相应的数据
-//        if (Blank.isNotEmpty(tableTemplateItemList)) {
-//            for (TableTemplateTableItem t : tableTemplateItemList) {
-//                Integer itemGroupId = t.getItemGroupId();
-//                if (Blank.isEmpty(itemGroupId)) {
-//                    continue;
-//                }
-//                Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
-//                Integer itemId = t.getItemId();
-//                Integer xaxis = t.getXaxis();
-//                Integer yaxis = t.getYaxis();
-//                String standby = t.getStandby();
-//                String itemName = t.getItemName();
-//                Integer dataSourceId = t.getDataSourceId();
-//                Integer valueTakingMode = t.getValueTakingMode();
-//                Integer valueType = t.getValueType();
-//                Integer bucketType = t.getBucketType();
-//                Integer bucketValue = t.getBucketValue();
-//                boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-//                Map<String, String> map = new HashMap<>();
-//                if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY) || bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)
-//                        || bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE) || bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
-//                    String startBelongTime;
-//                    String endBelongTime;
-//                    List<RawData> rawDataList = new ArrayList<>();
-//                    if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
-//                        startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_DAY_STR.length());
-//                        endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_DAY_STR.length());
-//                        rawDataList = rawDataDao.getTableDataByDay(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
-//                    } else {
-//                        startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
-//                        endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
-//                        rawDataList = rawDataDao.getTableData(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
-//                    }
-//                    List<String> sqlCurrentYmdhList = rawDataDao.getCursorYmdh(itemGroupId, dataSourceId, itemName, startBelongTime, endBelongTime);
-//                    if (Blank.isNotEmpty(sqlCurrentYmdhList)) {
-//                        for (String sqlCurrentYmdh : sqlCurrentYmdhList) {
-//                            List<CursorRawData> cursorRawDataList = rawDataDao.getTableCursorData(itemGroupId, dataSourceId, itemName, sqlCurrentYmdh);
-//                            rawDataList = ReportTask.genRawAddCursor(rawDataList, cursorRawDataList, itemGroupId, dataSourceId, sqlCurrentYmdh);
-//                        }
-//                    }
-//                    if (Blank.isNotEmpty(rawDataList)) {
-//                        String dataType = rawDataList.get(0).getDataType();
-//                        if (dataType.equals("boolean")) {
-//                            map = ReportTask.genBoolean(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
-//                        } else {
-//                            try {
-//                                map = ReportTask.genBigDecimal(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
-//                            } catch (Exception e) {
-//                                map = ReportTask.genString(rawDataList, startTime, endTime, bucketType, bucketValue);
-//                            }
-//                        }
-//                    }
-//                } else {
-//                    throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型的取值模式");
-//                }
-//                String valueList = map.get(flage ? "valueList" : "orgValueList");
-//                String valueTimeList = map.get("valueTimeList");
-//                String valueIndexList = map.get("valueIndexList");
-//                reportTableDao.addReportTableItem(new ReportTableItem(
-//                        id, itemId, valueType, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
-//                ));
-//            }
-//        }
         if (Blank.isNotEmpty(tableTemplateChartList)) {
             for (TableTemplateChart ttc : tableTemplateChartList) {
                 Integer valueTakingMode = ttc.getValueTakingMode();
@@ -1392,4 +1267,57 @@ public class ReportTableTask {
         log.info("自动报表,{},执行结束,时间为{}", reportTable, DateUtil.dateChangeStrYmdhmss(new Date()));
     }
 
+    /**
+     * 通过此数据组关联的所有模板信息,生成对应设备报表在redis中的键,值
+     *
+     * @param tableTemplateList
+     */
+    public void genDeviceRedisKey(List<TableTemplate> tableTemplateList) {
+        if (Blank.isNotEmpty(tableTemplateList)) {
+            for (TableTemplate tableTemplate : tableTemplateList) {
+                Integer tableTemplateId = tableTemplate.getId();
+                Integer eventNum = tableTemplate.getEventNum();
+                //根据模板id查询出最新一条的指定类型报表
+                ReportTable reportTable = reportTableDao.getReportTableByTemplate(tableTemplate);
+                String chTableId = reportTableDao.getEventChTableId(reportTable.getId());
+                if (Blank.isNotEmpty(chTableId)) {
+                    List<ReportTableItem> chReportTableItemList = reportTableDao.getTableItemListById(chTableId);
+                    if (Blank.isNotEmpty(chReportTableItemList)) {
+                        for (ReportTableItem reportTableItem : chReportTableItemList) {
+                            Integer timeItemType = reportTableItem.getTimeItemType();
+                            String itemReadName = reportTableItem.getItemReadName();
+                            if (Blank.isNotEmpty(timeItemType)) {
+                                if (timeItemType.equals(ConstantStr.END_TIME_ITEM)) {
+                                    String valueIndexList = reportTableItem.getValueIndexList();
+                                    int length = valueIndexList.split(",").length;
+                                    if (eventNum == length) {
+                                        redisUtil.set(ConstantStr.START_NUM + tableTemplateId, 0);
+                                    } else {
+                                        redisUtil.set(ConstantStr.END_NUM + tableTemplateId, length);
+                                        redisUtil.set(ConstantStr.TABLE_ID + tableTemplateId, chTableId);
+                                    }
+                                }
+                                if (timeItemType.equals(ConstantStr.START_TIME_ITEM)) {
+                                    String valueIndexList = reportTableItem.getValueIndexList();
+                                    int length = valueIndexList.split(",").length;
+                                    if (eventNum == length) {
+                                        Object start0 = redisUtil.get(ConstantStr.START_NUM + tableTemplateId);
+                                        if (Blank.isEmpty(start0)) {
+                                            redisUtil.set(ConstantStr.START_NUM + tableTemplateId, length);
+                                        }
+                                    } else {
+                                        redisUtil.set(ConstantStr.START_NUM + tableTemplateId, length);
+                                    }
+                                }
+                                redisUtil.set(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + itemReadName + ConstantStr.REPORT_TABLE_ITEM + timeItemType, reportTableItem);
+                            } else {
+                                redisUtil.set(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + itemReadName, reportTableItem);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
 }

+ 3 - 9
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/ReportTask.java

@@ -463,16 +463,14 @@ public class ReportTask {
                 List<Boolean> dataList = new ArrayList<>();
                 List<String> dataTimeList = new ArrayList<>();
                 List<Long> dataIndexList = new ArrayList<>();
-                List<Integer> isRecordList = new ArrayList<>();
                 for (CursorRawData cursorRawData : cursorRawDataList) {
                     orgDataList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), Boolean.class));
                     dataList.add(JSON.parseObject(cursorRawData.getDataValue(), Boolean.class));
                     dataTimeList.add(cursorRawData.getDataValueTime());
                     dataIndexList.add(cursorRawData.getDataIndex());
-                    isRecordList.add(cursorRawData.getIsRecord());
                 }
                 RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(orgDataList), JSON.toJSONString(dataList),
-                        JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, JSON.toJSONString(isRecordList), new Date());
+                        JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, new Date());
                 rawDataList.add(rawData);
             } else {
                 try {
@@ -480,32 +478,28 @@ public class ReportTask {
                     List<BigDecimal> dataList = new ArrayList<>();
                     List<String> dataTimeList = new ArrayList<>();
                     List<Long> dataIndexList = new ArrayList<>();
-                    List<Integer> isRecordList = new ArrayList<>();
                     for (CursorRawData cursorRawData : cursorRawDataList) {
                         orgDataList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), BigDecimal.class));
                         dataList.add(JSON.parseObject(cursorRawData.getDataValue(), BigDecimal.class));
                         dataTimeList.add(cursorRawData.getDataValueTime());
                         dataIndexList.add(cursorRawData.getDataIndex());
-                        isRecordList.add(cursorRawData.getIsRecord());
                     }
                     RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(orgDataList), JSON.toJSONString(dataList),
-                            JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, JSON.toJSONString(isRecordList), new Date());
+                            JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, new Date());
                     rawDataList.add(rawData);
                 } catch (Exception e) {
                     List<String> orgDataList = new ArrayList<>();
                     List<String> dataList = new ArrayList<>();
                     List<String> dataTimeList = new ArrayList<>();
                     List<Long> dataIndexList = new ArrayList<>();
-                    List<Integer> isRecordList = new ArrayList<>();
                     for (CursorRawData cursorRawData : cursorRawDataList) {
                         orgDataList.add(cursorRawData.getOrgDataValue());
                         dataList.add(cursorRawData.getDataValue());
                         dataTimeList.add(cursorRawData.getDataValueTime());
                         dataIndexList.add(cursorRawData.getDataIndex());
-                        isRecordList.add(cursorRawData.getIsRecord());
                     }
                     RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(orgDataList), JSON.toJSONString(dataList),
-                            JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, JSON.toJSONString(isRecordList), new Date());
+                            JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, new Date());
                     rawDataList.add(rawData);
                 }
             }

+ 30 - 0
cqcy-ei/cqcy-ei-da/src/main/resources/mapper/DataModelDao.xml

@@ -38,6 +38,17 @@
         where id = #{id}
     </delete>
 
+    <delete id="delDataModelByIdList">
+        <if test="idList!= null and idList.size() >0">
+            delete
+            from t_data_model
+            where id in
+            <foreach collection="idList" item="id" separator="," open="(" close=")">
+                #{id}
+            </foreach>
+        </if>
+    </delete>
+
     <select id="getDataModelCount" resultType="java.lang.Long">
         select count(*)
         from t_data_model
@@ -90,6 +101,25 @@
             ti.item_group_id;
     </select>
 
+    <select id="getItemGroupByDmList" resultType="java.util.Map">
+        <if test="idList!= null and idList.size() >0">
+            SELECT ti.item_group_id,
+            tig.group_name AS item_group_name,
+            count(ti.id) AS count
+            FROM
+            t_item ti
+            LEFT JOIN t_item_group tig
+            ON ti.item_group_id = tig.id
+            WHERE
+            ti.data_model_id in
+            <foreach collection="idList" item="id" separator="," open="(" close=")">
+                #{id}
+            </foreach>
+            GROUP BY
+            ti.item_group_id;
+        </if>
+    </select>
+
     <select id="getDataModelByRemark" resultType="com.example.opc_common.entity.DataModel">
         select
         <include refid="dataModel"/>

+ 8 - 0
cqcy-ei/cqcy-ei-da/src/main/resources/mapper/DataSourceDao.xml

@@ -234,4 +234,12 @@
         WHERE cls_id IS NOT NULL
           AND cls_id != ''
     </select>
+
+    <select id="getDataSourceByclsIdAndIp" resultType="com.example.opc_common.entity.DataSource">
+        select
+        <include refid="dataSource"/>
+        from t_data_source
+        where cls_id = #{clsId}
+        and ip_address =#{ipAddress}
+    </select>
 </mapper>

+ 10 - 0
cqcy-ei/cqcy-ei-da/src/main/resources/mapper/ItemGroupDao.xml

@@ -95,6 +95,16 @@
         where item_group_id = #{itemGroupId}
     </update>
 
+    <update id="updateItemGroupState">
+        update t_item_group
+        set run_state=#{changeState}
+        where run_state = #{modifyState}
+        and data_source_id in
+        <foreach collection="dataSourceList" item="dataSource" index="index" open="(" close=")" separator=",">
+            #{dataSource.id}
+        </foreach>
+    </update>
+
     <delete id="delItemByGroupId">
         delete
         from t_item

+ 8 - 33
cqcy-ei/cqcy-ei-da/src/main/resources/mapper/RawDataDao.xml

@@ -4,12 +4,12 @@
 
     <sql id="cursorRawData">
         id
-        , item_group_id, data_source_id, item_name, data_type, org_data_value, data_value, data_value_time, data_index, value_belong_time, is_record, create_time
+        , item_group_id, data_source_id, item_name, data_type, org_data_value, data_value, data_value_time, data_index, value_belong_time, create_time
     </sql>
 
     <sql id="rawData">
         id
-        , item_group_id, data_source_id, item_name, data_type, org_data_value, data_value, data_value_time, data_index, value_belong_time, is_record, create_time
+        , item_group_id, data_source_id, item_name, data_type, org_data_value, data_value, data_value_time, data_index, value_belong_time, create_time
     </sql>
 
     <sql id="attachRawData">
@@ -20,37 +20,33 @@
     <insert id="addRawData">
         insert into t_raw_data${remainder}
         (item_group_id, data_source_id, item_name, data_type, org_data_value, data_value, data_value_time, data_index,
-         value_belong_time,
-         is_record, create_time)
+         value_belong_time, create_time)
         VALUES (#{rawData.itemGroupId}, #{rawData.dataSourceId}, #{rawData.itemName}, #{rawData.dataType},
                 #{rawData.orgDataValue}, #{rawData.dataValue},
-                #{rawData.dataValueTime}, #{rawData.dataIndex}, #{rawData.valueBelongTime}, #{rawData.isRecord},
-                #{rawData.createTime})
+                #{rawData.dataValueTime}, #{rawData.dataIndex}, #{rawData.valueBelongTime}, #{rawData.createTime})
     </insert>
 
     <insert id="addCursorRawData">
         insert into t_raw_data
         (item_group_id, data_source_id, item_name, data_type, org_data_value, data_value, data_value_time, data_index,
-         value_belong_time,
-         is_record, create_time)
+         value_belong_time, create_time)
         VALUES (#{itemGroupId}, #{dataSourceId}, #{itemName}, #{dataType},
                 #{orgDataValue}, #{dataValue},
-                #{dataValueTime}, #{dataIndex}, #{valueBelongTime}, #{isRecord}, #{createTime})
+                #{dataValueTime}, #{dataIndex}, #{valueBelongTime}, #{createTime})
     </insert>
 
 
     <insert id="addCursorRawDataList">
         insert into t_raw_data
         (item_group_id, data_source_id, item_name, data_type, org_data_value, data_value, data_value_time, data_index,
-        value_belong_time,
-        is_record, create_time)
+        value_belong_time, create_time)
         VALUES
         <foreach collection="cursorRawDataList" item="cursorRawData" separator=",">
             (#{cursorRawData.itemGroupId}, #{cursorRawData.dataSourceId}, #{cursorRawData.itemName},
             #{cursorRawData.dataType},
             #{cursorRawData.orgDataValue}, #{cursorRawData.dataValue},
             #{cursorRawData.dataValueTime}, #{cursorRawData.dataIndex},
-            #{cursorRawData.valueBelongTime}, #{cursorRawData.isRecord}, #{cursorRawData.createTime})
+            #{cursorRawData.valueBelongTime}, #{cursorRawData.createTime})
         </foreach>
     </insert>
 
@@ -201,7 +197,6 @@
             </foreach>
         </if>
         AND value_belong_time = #{valueBelongTime}
-        AND is_record = #{isRecord}
         GROUP BY
         data_index
     </select>
@@ -271,26 +266,6 @@
         ORDER BY value_belong_time
     </select>
 
-    <select id="getEventMeetIndexList" resultType="java.lang.Long">
-        SELECT
-        data_index
-        FROM
-        t_raw_data
-        WHERE
-        item_group_id = #{itemGroupId}
-        AND data_source_id = #{dataSourceId}
-        <if test="itemList!= null and itemList.size() >0">
-            AND item_name IN
-            <foreach collection="itemList" item="item" separator="," open="(" close=")">
-                #{item.itemReadName}
-            </foreach>
-        </if>
-        AND data_index &lt;= #{dataIndex}
-        AND is_record = #{isRecord}
-        GROUP BY
-        data_index
-    </select>
-
     <select id="getEventDataList" resultType="com.example.opc_common.entity.CursorRawData">
         <if test="indexList!= null and indexList.size() >0">
             select

+ 1 - 1
cqcy-ei/cqcy-ei-da/src/main/resources/mapper/ReportTableDao.xml

@@ -1152,7 +1152,7 @@
                 WHERE report_table_id = #{reportTableId}))
     </select>
 
-    <select id="getDeviceRtByttList" resultType="com.example.opc_common.entity.ReportTable">
+    <select id="getReportTableByttList" resultType="com.example.opc_common.entity.ReportTable">
         SELECT
         <include refid="reportTable"/>
         FROM

+ 1 - 3
cqcy-ei/cqcy-ei-ua/src/main/java/com/example/opc_ua/dao/RawDataDao.java

@@ -21,14 +21,12 @@ public interface RawDataDao {
 
     Integer delEventRawDataList(Item item, Integer dataSourceId, String valueBelongTime);
 
-    List<Long> getMeetIndexList(Integer itemGroupId, Integer dataSourceId, List<Item> itemList, String valueBelongTime, Integer isRecord);
+    List<Long> getMeetIndexList(Integer itemGroupId, Integer dataSourceId, List<Item> itemList, String valueBelongTime);
 
     List<CursorRawData> getCursorRawDataList(Item item, Integer dataSourceId, String valueBelongTime, List<Long> indexList);
 
     Integer delCursorRawDataList(Integer itemGroupId, Integer dataSourceId, String valueBelongTime);
 
-    List<Long> getEventMeetIndexList(Integer itemGroupId, Integer dataSourceId, List<Item> itemList, Long dataIndex, Integer isRecord);
-
     List<CursorRawData> getEventDataList(Integer itemGroupId, Integer dataSourceId, Integer itemId, List<Long> indexList);
 
     Integer delEventByIndexList(Integer itemGroupId, Integer dataSourceId, Long dataIndex);

+ 7 - 408
cqcy-ei/cqcy-ei-ua/src/main/java/com/example/opc_ua/task/OpcAsyncTask.java

@@ -1,12 +1,9 @@
 package com.example.opc_ua.task;
 
-import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 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.Blank;
 import com.example.opc_common.util.ConstantStr;
 import com.example.opc_common.util.DateUtil;
@@ -25,7 +22,9 @@ import org.springframework.stereotype.Component;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 @Component
 @Async("threadPoolTaskExecutor")
@@ -72,400 +71,6 @@ public class OpcAsyncTask {
     }
 
     /**
-     * 此接口,只有事件驱动任务才会调用,其他地方不调用
-     *
-     * @param itemList
-     * @param dataSourceId
-     * @param dataIndex
-     */
-    public void packageEventTable(List<Item> itemList, Integer dataSourceId, Long dataIndex) {
-        if (Blank.isNotEmpty(itemList)) {
-            Item item_ = itemList.get(0);
-            Integer itemGroupId = item_.getItemGroupId();
-            //获取原始数据表中,满足记录的数据
-            List<Long> indexList = rawDataDao.getEventMeetIndexList(itemGroupId, dataSourceId, itemList, dataIndex, ConstantStr.IS_RECORD);
-            if (Blank.isNotEmpty(indexList)) {
-                //查看此数据组是否在事件驱动报表中被配置
-                List<String> tableIdList = reportTableDao.getTableByItemId(itemList, ConstantStr.EVENT_DRIVEN_REPORT);
-                if (Blank.isNotEmpty(tableIdList)) {
-                    for (int i = 0; i < tableIdList.size(); i++) {
-                        String tableId = tableIdList.get(i);
-                        ReportTable reportTable = reportTableDao.getReportTableById(tableId);
-                        Integer tableTemplateId = reportTable.getTableTemplateId();
-                        TableTemplate tableTemplate = reportTableDao.getTableTemplateById(tableTemplateId);
-                        Integer eventNum = tableTemplate.getEventNum();
-                        String chTableId = reportTableDao.getEventChTableId(tableId);
-                        List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTttiByTemplateId(tableTemplateId);
-                        TableTemplateTableItem tableTemplateTableItem = tableTemplateItemList.get(0);
-                        //判断哪些符合驱动报表,并将符合的index返回回来
-                        List<CursorRawData> cursorRawDataList1 = rawDataDao.getEventRealIndexList(itemGroupId, dataSourceId, tableTemplateTableItem.getItemId(), indexList);
-                        List<Long> realIndexList = new ArrayList<>();
-                        if (Blank.isNotEmpty(cursorRawDataList1)) {
-                            //获取缓存中存在的时间
-                            Object o = redisUtil.get(itemGroupId + ConstantStr.EVENT_DRIVEN_REPORT_STR);
-                            if (Blank.isNotEmpty(o)) {
-                                String timeStr = o.toString();
-                                for (int j = 0; j < cursorRawDataList1.size(); j++) {
-                                    CursorRawData cursorRawData = cursorRawDataList1.get(i);
-                                    if (j == 0) {
-                                        if (!timeStr.equals(cursorRawData.getDataValueTime())) {
-                                            realIndexList.add(cursorRawData.getDataIndex());
-                                        }
-                                    } else {
-                                        realIndexList.add(cursorRawData.getDataIndex());
-                                    }
-                                    if (j == cursorRawDataList1.size() - 1) {
-                                        //生成缓存时间
-                                        redisUtil.set(itemGroupId + ConstantStr.EVENT_DRIVEN_REPORT_STR, cursorRawData.getDataValueTime());
-                                    }
-                                }
-                            } else {
-                                for (int j = 0; j < cursorRawDataList1.size(); j++) {
-                                    CursorRawData cursorRawData = cursorRawDataList1.get(i);
-                                    realIndexList.add(cursorRawData.getDataIndex());
-                                    if (j == cursorRawDataList1.size() - 1) {
-                                        //生成缓存时间
-                                        redisUtil.set(itemGroupId + ConstantStr.EVENT_DRIVEN_REPORT_STR, cursorRawData.getDataValueTime());
-                                    }
-                                }
-                            }
-                        }
-                        if (Blank.isNotEmpty(realIndexList)) {
-                            int size = realIndexList.size();
-                            if (Blank.isEmpty(chTableId)) {
-                                //如果没有子报表,则新增报表,则只需要生成新报表,并向新报表添加数据即可
-                                //如果模板设置的数量大于等于当前拿数据的数量,则只需要添加一张新报表存储数据即可
-                                if (eventNum >= size) {
-                                    String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                    asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, size);
-                                    //根据索引进行排序,将数据丢到相应的位置
-                                    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, realIndexList);
-                                        if (Blank.isNotEmpty(cursorRawDataList)) {
-                                            Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                            reportTableDao.addReportTableItem(new ReportTableItem(
-                                                    id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                            ));
-                                        }
-                                    }
-                                } else {
-                                    //如果模板设置的数量小于当前拿数据的数量
-                                    //如果余数为0,则添加商的数量条数的新报表
-                                    //如果余数不为0,则添加商的数量+1条数的新报表
-                                    //商
-                                    int discuss = size / eventNum;
-                                    //余数
-                                    int remainder = size % eventNum;
-                                    if (remainder == 0) {
-                                        for (int j = 0; j < discuss; j++) {
-                                            List<Long> dataIndexList = new ArrayList<>();
-                                            for (int k = 0; k < eventNum; k++) {
-                                                dataIndexList.add(realIndexList.get(j * eventNum + k));
-                                            }
-                                            String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                            asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, eventNum);
-                                            //根据索引进行排序,并添加数据
-                                            for (TableTemplateTableItem t : tableTemplateItemList) {
-                                                Integer itemId = t.getItemId();
-                                                Integer valueType = t.getValueType();
-                                                Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                                Item item = itemGroupDao.getItemById(itemId);
-                                                if (Blank.isEmpty(item)) {
-                                                    continue;
-                                                }
-                                                List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
-                                                if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                    Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                    reportTableDao.addReportTableItem(new ReportTableItem(
-                                                            id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                    ));
-                                                }
-                                            }
-                                        }
-                                    } else {
-                                        for (int j = 0; j < discuss + 1; j++) {
-                                            List<Long> dataIndexList = new ArrayList<>();
-                                            if (j != discuss) {
-                                                for (int k = 0; k < eventNum; k++) {
-                                                    dataIndexList.add(realIndexList.get(j * eventNum + k));
-                                                }
-                                            } else {
-                                                for (int k = 0; k < remainder; k++) {
-                                                    dataIndexList.add(realIndexList.get(j * eventNum + k));
-                                                }
-                                            }
-                                            String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                            asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, j == discuss ? remainder : eventNum);
-                                            //根据索引进行排序,并添加数据
-                                            for (TableTemplateTableItem t : tableTemplateItemList) {
-                                                Integer itemId = t.getItemId();
-                                                Integer valueType = t.getValueType();
-                                                Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                                Item item = itemGroupDao.getItemById(itemId);
-                                                if (Blank.isEmpty(item)) {
-                                                    continue;
-                                                }
-                                                List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
-                                                if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                    Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                    reportTableDao.addReportTableItem(new ReportTableItem(
-                                                            id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                    ));
-                                                }
-                                            }
-                                        }
-                                    }
-                                }
-                            } else {
-                                //如果已经存在子报表
-                                ReportTable chReportTable = reportTableDao.getReportTableById(chTableId);
-                                Integer currentNum = chReportTable.getCurrentNum();
-                                //如果最新的子报表的数量为模板设置的条数,则上次添加刚好完毕,需要添加新报表。
-                                if (currentNum == eventNum) {
-                                    if (eventNum >= size) {
-                                        String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                        asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, size);
-                                        //根据索引进行排序,将数据丢到相应的位置
-                                        for (TableTemplateTableItem t : tableTemplateItemList) {
-                                            Integer itemId = t.getItemId();
-                                            Integer valueType = t.getValueType();
-                                            Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                            Item item = itemGroupDao.getItemById(itemId);
-                                            if (Blank.isEmpty(item)) {
-                                                continue;
-                                            }
-                                            List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, realIndexList);
-                                            if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                reportTableDao.addReportTableItem(new ReportTableItem(
-                                                        id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                ));
-                                            }
-                                        }
-                                    } else {
-                                        //商
-                                        int discuss = size / eventNum;
-                                        //余数
-                                        int remainder = size % eventNum;
-                                        if (remainder == 0) {
-                                            for (int j = 0; j < discuss; j++) {
-                                                List<Long> dataIndexList = new ArrayList<>();
-                                                for (int k = 0; k < eventNum; k++) {
-                                                    dataIndexList.add(realIndexList.get(j * eventNum + k));
-                                                }
-                                                String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                                asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, eventNum);
-                                                //根据索引进行排序,并添加数据
-                                                for (TableTemplateTableItem t : tableTemplateItemList) {
-                                                    Integer itemId = t.getItemId();
-                                                    Integer valueType = t.getValueType();
-                                                    Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                                    Item item = itemGroupDao.getItemById(itemId);
-                                                    if (Blank.isEmpty(item)) {
-                                                        continue;
-                                                    }
-                                                    List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
-                                                    if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                        Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                        reportTableDao.addReportTableItem(new ReportTableItem(
-                                                                id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                        ));
-                                                    }
-                                                }
-                                            }
-                                        } else {
-                                            for (int j = 0; j < discuss + 1; j++) {
-                                                List<Long> dataIndexList = new ArrayList<>();
-                                                if (j != discuss) {
-                                                    for (int k = 0; k < eventNum; k++) {
-                                                        dataIndexList.add(realIndexList.get(j * eventNum + k));
-                                                    }
-                                                } else {
-                                                    for (int k = 0; k < remainder; k++) {
-                                                        dataIndexList.add(realIndexList.get(j * eventNum + k));
-                                                    }
-                                                }
-                                                String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                                asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, j == discuss ? remainder : eventNum);
-                                                //根据索引进行排序,并添加数据
-                                                for (TableTemplateTableItem t : tableTemplateItemList) {
-                                                    Integer itemId = t.getItemId();
-                                                    Integer valueType = t.getValueType();
-                                                    Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                                    Item item = itemGroupDao.getItemById(itemId);
-                                                    if (Blank.isEmpty(item)) {
-                                                        continue;
-                                                    }
-                                                    List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
-                                                    if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                        Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                        reportTableDao.addReportTableItem(new ReportTableItem(
-                                                                id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                        ));
-                                                    }
-                                                }
-                                            }
-                                        }
-                                    }
-                                } else {
-                                    //如果不等于,则需要修改原来最后的一张报表,往里面继续加数据,加到模板的条数为止
-                                    int difference = eventNum - currentNum;
-                                    //如果这次获取到的条数,小于旧子报表差的条数,则只需要修改旧子报表即可
-                                    if (size <= difference) {
-                                        if (reportTableDao.updateReportTableNum(chTableId, currentNum + size) <= 0) {
-                                            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "修改失败");
-                                        }
-                                        for (TableTemplateTableItem t : tableTemplateItemList) {
-                                            Integer itemId = t.getItemId();
-                                            Integer valueType = t.getValueType();
-                                            Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                            Item item = itemGroupDao.getItemById(itemId);
-                                            if (Blank.isEmpty(item)) {
-                                                continue;
-                                            }
-                                            ReportTableItem reportTableItem = reportTableDao.getReportTableItem(chTableId, itemId);
-                                            List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, realIndexList);
-                                            if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                Map<String, String> map = ReportTask.genEventCursorAdd(cursorRawDataList, reportTableItem.getValueList(), reportTableItem.getValueTimeList(), reportTableItem.getValueIndexList());
-                                                reportTableDao.updateReportTableItem(new ReportTableItem(
-                                                        reportTableItem.getId(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                ));
-                                            }
-                                        }
-                                    } else {
-                                        //如果获取到的数量大于旧子报表差的条数,先将旧子报表差的条数补齐
-                                        int newSize = size - difference;
-                                        List<Long> oldIndexList = new ArrayList<>();
-                                        List<Long> newIndexList = new ArrayList<>();
-                                        for (int j = 0; j < size; j++) {
-                                            if (j < difference) {
-                                                oldIndexList.add(realIndexList.get(j));
-                                            } else {
-                                                newIndexList.add(realIndexList.get(j));
-                                            }
-                                        }
-                                        if (reportTableDao.updateReportTableNum(chTableId, currentNum + difference) <= 0) {
-                                            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "修改失败");
-                                        }
-                                        for (TableTemplateTableItem t : tableTemplateItemList) {
-                                            Integer itemId = t.getItemId();
-                                            Integer valueType = t.getValueType();
-                                            Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                            Item item = itemGroupDao.getItemById(itemId);
-                                            if (Blank.isEmpty(item)) {
-                                                continue;
-                                            }
-                                            ReportTableItem reportTableItem = reportTableDao.getReportTableItem(chTableId, itemId);
-                                            List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, oldIndexList);
-                                            if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                Map<String, String> map = ReportTask.genEventCursorAdd(cursorRawDataList, reportTableItem.getValueList(), reportTableItem.getValueTimeList(), reportTableItem.getValueIndexList());
-                                                reportTableDao.updateReportTableItem(new ReportTableItem(
-                                                        reportTableItem.getId(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                ));
-                                            }
-                                        }
-                                        //旧子报表添加完毕,执行添加新报表
-                                        if (eventNum >= newSize) {
-                                            String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                            asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, newSize);
-                                            //根据索引进行排序,将数据丢到相应的位置
-                                            for (TableTemplateTableItem t : tableTemplateItemList) {
-                                                Integer itemId = t.getItemId();
-                                                Integer valueType = t.getValueType();
-                                                Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                                Item item = itemGroupDao.getItemById(itemId);
-                                                if (Blank.isEmpty(item)) {
-                                                    continue;
-                                                }
-                                                List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, newIndexList);
-                                                if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                    Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                    reportTableDao.addReportTableItem(new ReportTableItem(
-                                                            id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                    ));
-                                                }
-                                            }
-                                        } else {
-                                            //商
-                                            int discuss = newSize / eventNum;
-                                            //余数
-                                            int remainder = newSize % eventNum;
-                                            if (remainder == 0) {
-                                                for (int j = 0; j < discuss; j++) {
-                                                    List<Long> dataIndexList = new ArrayList<>();
-                                                    for (int k = 0; k < eventNum; k++) {
-                                                        dataIndexList.add(newIndexList.get(j * eventNum + k));
-                                                    }
-                                                    String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                                    asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, eventNum);
-                                                    //根据索引进行排序,并添加数据
-                                                    for (TableTemplateTableItem t : tableTemplateItemList) {
-                                                        Integer itemId = t.getItemId();
-                                                        Integer valueType = t.getValueType();
-                                                        Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                                        Item item = itemGroupDao.getItemById(itemId);
-                                                        if (Blank.isEmpty(item)) {
-                                                            continue;
-                                                        }
-                                                        List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, newIndexList);
-                                                        if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                            Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                            reportTableDao.addReportTableItem(new ReportTableItem(
-                                                                    id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                            ));
-                                                        }
-                                                    }
-                                                }
-                                            } else {
-                                                for (int j = 0; j < discuss + 1; j++) {
-                                                    List<Long> dataIndexList = new ArrayList<>();
-                                                    if (j != discuss) {
-                                                        for (int k = 0; k < eventNum; k++) {
-                                                            dataIndexList.add(newIndexList.get(j * eventNum + k));
-                                                        }
-                                                    } else {
-                                                        for (int k = 0; k < remainder; k++) {
-                                                            dataIndexList.add(newIndexList.get(j * eventNum + k));
-                                                        }
-                                                    }
-                                                    String id = IdUtil.createSnowflake(1, 1).nextId() + "";
-                                                    asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.EVENT_GENERATE_REPORT, j == discuss ? remainder : eventNum);
-                                                    //根据索引进行排序,并添加数据
-                                                    for (TableTemplateTableItem t : tableTemplateItemList) {
-                                                        Integer itemId = t.getItemId();
-                                                        Integer valueType = t.getValueType();
-                                                        Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                                        Item item = itemGroupDao.getItemById(itemId);
-                                                        if (Blank.isEmpty(item)) {
-                                                            continue;
-                                                        }
-                                                        List<CursorRawData> cursorRawDataList = rawDataDao.getEventDataList(itemGroupId, dataSourceId, itemId, dataIndexList);
-                                                        if (Blank.isNotEmpty(cursorRawDataList)) {
-                                                            Map<String, String> map = ReportTask.genEventCursor(cursorRawDataList);
-                                                            reportTableDao.addReportTableItem(new ReportTableItem(
-                                                                    id, itemId, valueType, t.getXaxis(), t.getYaxis(), t.getStandby(), map.get(flage ? "valueList" : "orgValueList"), map.get("valueTimeList"), map.get("valueIndexList")
-                                                            ));
-                                                        }
-                                                    }
-                                                }
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            //删除刚才被添加完毕的index的数据
-            rawDataDao.delEventByIndexList(itemGroupId, dataSourceId, dataIndex);
-        }
-    }
-
-    /**
      * 组装通过周期和改变读取的数据
      *
      * @param itemList
@@ -483,7 +88,7 @@ public class OpcAsyncTask {
             Integer itemGroupId = item_.getItemGroupId();
             int remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
             //获取原始数据表中,满足记录的数据
-            List<Long> indexList = rawDataDao.getMeetIndexList(itemGroupId, dataSourceId, itemList, sqlCurrentYmdh, ConstantStr.IS_RECORD);
+            List<Long> indexList = rawDataDao.getMeetIndexList(itemGroupId, dataSourceId, itemList, sqlCurrentYmdh);
             if (Blank.isNotEmpty(indexList)) {
                 for (Item item : itemList) {
                     //从临时表中获取相应的数据
@@ -497,16 +102,14 @@ public class OpcAsyncTask {
                             List<Boolean> dataList = new ArrayList<>();
                             List<String> dataTimeList = new ArrayList<>();
                             List<Long> dataIndexList = new ArrayList<>();
-                            List<Integer> isRecordList = new ArrayList<>();
                             for (CursorRawData cursorRawData : cursorRawDataList) {
                                 orgDataList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), Boolean.class));
                                 dataList.add(JSON.parseObject(cursorRawData.getDataValue(), Boolean.class));
                                 dataTimeList.add(cursorRawData.getDataValueTime());
                                 dataIndexList.add(cursorRawData.getDataIndex());
-                                isRecordList.add(cursorRawData.getIsRecord());
                             }
                             RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(orgDataList), JSON.toJSONString(dataList),
-                                    JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, JSON.toJSONString(isRecordList), new Date());
+                                    JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, new Date());
                             rawDataDao.addRawData(remainder, rawData);
                         } else {
                             try {
@@ -514,32 +117,28 @@ public class OpcAsyncTask {
                                 List<BigDecimal> dataList = new ArrayList<>();
                                 List<String> dataTimeList = new ArrayList<>();
                                 List<Long> dataIndexList = new ArrayList<>();
-                                List<Integer> isRecordList = new ArrayList<>();
                                 for (CursorRawData cursorRawData : cursorRawDataList) {
                                     orgDataList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), BigDecimal.class));
                                     dataList.add(JSON.parseObject(cursorRawData.getDataValue(), BigDecimal.class));
                                     dataTimeList.add(cursorRawData.getDataValueTime());
                                     dataIndexList.add(cursorRawData.getDataIndex());
-                                    isRecordList.add(cursorRawData.getIsRecord());
                                 }
                                 RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(orgDataList), JSON.toJSONString(dataList),
-                                        JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, JSON.toJSONString(isRecordList), new Date());
+                                        JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, new Date());
                                 rawDataDao.addRawData(remainder, rawData);
                             } catch (Exception e) {
                                 List<String> orgDataList = new ArrayList<>();
                                 List<String> dataList = new ArrayList<>();
                                 List<String> dataTimeList = new ArrayList<>();
                                 List<Long> dataIndexList = new ArrayList<>();
-                                List<Integer> isRecordList = new ArrayList<>();
                                 for (CursorRawData cursorRawData : cursorRawDataList) {
                                     orgDataList.add(cursorRawData.getOrgDataValue());
                                     dataList.add(cursorRawData.getDataValue());
                                     dataTimeList.add(cursorRawData.getDataValueTime());
                                     dataIndexList.add(cursorRawData.getDataIndex());
-                                    isRecordList.add(cursorRawData.getIsRecord());
                                 }
                                 RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(orgDataList), JSON.toJSONString(dataList),
-                                        JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, JSON.toJSONString(isRecordList), new Date());
+                                        JSON.toJSONString(dataTimeList), JSON.toJSONString(dataIndexList), sqlCurrentYmdh, new Date());
                                 rawDataDao.addRawData(remainder, rawData);
                             }
                         }

+ 8 - 11
cqcy-ei/cqcy-ei-ua/src/main/java/com/example/opc_ua/task/OpcUaChangeTask.java

@@ -123,7 +123,7 @@ public class OpcUaChangeTask extends TimerTask {
                 if (javaType.toLowerCase().equals("boolean")) {
                     Boolean dmData = JSON.parseObject(value.toString(), Boolean.class);
                     CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(dmData), JSON.toJSONString(dmData),
-                            currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
+                            currentYmdhmss, index, currentYmdh, new Date());
                     opcAsyncTask.addCursorRawData(cursorRawData);
                 } else {
                     try {
@@ -131,17 +131,14 @@ public class OpcUaChangeTask extends TimerTask {
                         BigDecimal dmData = Blank.isNotEmpty(dm) ?
                                 MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
                                 bigDecimal;
-                        CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                currentYmdhmss, index, currentYmdh,
-                                Blank.isEmpty(oldValue) ? ConstantStr.IS_RECORD : MathUtil.isMeetChange(oldValue,
-                                        dmData, new BigDecimal(modeValue), readModeType), new Date());
-                        opcAsyncTask.addCursorRawData(cursorRawData);
-                        redisUtil.set(ConstantStr.VALUE + id + itemId, dmData, ConstantStr.TWO_HOUR);
+                        if (Blank.isEmpty(oldValue)) {
+                            CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
+                                    currentYmdhmss, index, currentYmdh, new Date());
+                            opcAsyncTask.addCursorRawData(cursorRawData);
+                            redisUtil.set(ConstantStr.VALUE + id + itemId, dmData, ConstantStr.TWO_HOUR);
+                        }
                     } catch (Exception e) {
-                        String valueStr = value.toString();
-                        CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, valueStr, "".equals(valueStr) ? ConstantStr.STRING_EMPTY : valueStr,
-                                currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
-                        opcAsyncTask.addCursorRawData(cursorRawData);
+
                     }
                 }
             } catch (Exception e) {

+ 16 - 22
cqcy-ei/cqcy-ei-ua/src/main/java/com/example/opc_ua/task/OpcUaExceedTask.java

@@ -97,15 +97,12 @@ public class OpcUaExceedTask extends TimerTask {
             DataModel dm = map.get(itemId);
             Object redisValue = redisUtil.get(ConstantStr.VALUE + id + itemId);
             BigDecimal oldValue = null;
-            if(Blank.isNotEmpty(redisValue)){
+            if (Blank.isNotEmpty(redisValue)) {
                 oldValue = JSON.parseObject(redisValue.toString(), BigDecimal.class);
             }
             try {
                 DataValue dataValue = opcUaClient.readValue(0.0, TimestampsToReturn.Both, n).get();
                 if (isDriverItem.equals(ConstantStr.IS_DRIVER_ITEM)) {
-                    if (index % 20 == 0) {
-                        opcAsyncTask.packageEventTable(itemList, dataSourceId, index - 1);
-                    }
                 }
 //                if (!dataValue.getStatusCode().isGood()) {
 //                    continue;
@@ -120,7 +117,7 @@ public class OpcUaExceedTask extends TimerTask {
                 if (javaType.toLowerCase().equals("boolean")) {
                     Boolean dmData = JSON.parseObject(value.toString(), Boolean.class);
                     CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(dmData), JSON.toJSONString(dmData),
-                            currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
+                            currentYmdhmss, index, currentYmdh, new Date());
                     opcAsyncTask.addCursorRawData(cursorRawData);
                 } else {
                     try {
@@ -133,47 +130,47 @@ public class OpcUaExceedTask extends TimerTask {
                             if (eventMode == ConstantStr.EVENT_MODEL_EXCEED) {
                                 if (dmData.compareTo(bigDecimal1) == 1) {
                                     CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                            currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                            currentYmdhmss, index, currentYmdh, new Date());
                                     opcAsyncTask.addCursorRawData(cursorRawData);
                                 } else {
                                     CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                            currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
+                                            currentYmdhmss, index, currentYmdh, new Date());
                                     opcAsyncTask.addCursorRawData(cursorRawData);
                                 }
                             } else if (eventMode == ConstantStr.EVENT_MODEL_LOWER) {
                                 if (dmData.compareTo(bigDecimal1) == -1) {
                                     CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                            currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                            currentYmdhmss, index, currentYmdh, new Date());
                                     opcAsyncTask.addCursorRawData(cursorRawData);
                                 } else {
                                     CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                            currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
+                                            currentYmdhmss, index, currentYmdh, new Date());
                                     opcAsyncTask.addCursorRawData(cursorRawData);
                                 }
                             } else if (eventMode == ConstantStr.EVENT_MODEL_EQUAL) {
                                 if (dmData.compareTo(bigDecimal1) == 0) {
                                     CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                            currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                            currentYmdhmss, index, currentYmdh, new Date());
                                     opcAsyncTask.addCursorRawData(cursorRawData);
                                 } else {
                                     CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                            currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
+                                            currentYmdhmss, index, currentYmdh, new Date());
                                     opcAsyncTask.addCursorRawData(cursorRawData);
                                 }
                             } else if (eventMode == ConstantStr.EVENT_TRENDS_EXCEED) {
                                 if (oldValue.compareTo(bigDecimal1) != 1) {
                                     if (dmData.compareTo(bigDecimal1) == 1) {
                                         CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                                currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                                currentYmdhmss, index, currentYmdh, new Date());
                                         opcAsyncTask.addCursorRawData(cursorRawData);
                                     } else {
                                         CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                                currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
+                                                currentYmdhmss, index, currentYmdh, new Date());
                                         opcAsyncTask.addCursorRawData(cursorRawData);
                                     }
                                 } else {
                                     CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                            currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
+                                            currentYmdhmss, index, currentYmdh, new Date());
                                     opcAsyncTask.addCursorRawData(cursorRawData);
                                 }
                                 redisUtil.set(ConstantStr.VALUE + id + itemId, dmData, ConstantStr.TWO_HOUR);
@@ -181,34 +178,33 @@ public class OpcUaExceedTask extends TimerTask {
                                 if (oldValue.compareTo(bigDecimal1) != -1) {
                                     if (dmData.compareTo(bigDecimal1) == -1) {
                                         CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                                currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                                currentYmdhmss, index, currentYmdh, new Date());
                                         opcAsyncTask.addCursorRawData(cursorRawData);
                                     } else {
                                         CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                                currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
+                                                currentYmdhmss, index, currentYmdh, new Date());
                                         opcAsyncTask.addCursorRawData(cursorRawData);
                                     }
                                 } else {
                                     CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                            currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
+                                            currentYmdhmss, index, currentYmdh, new Date());
                                     opcAsyncTask.addCursorRawData(cursorRawData);
                                 }
                                 redisUtil.set(ConstantStr.VALUE + id + itemId, dmData, ConstantStr.TWO_HOUR);
                             }
                         } else {
                             CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                    currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
+                                    currentYmdhmss, index, currentYmdh, new Date());
                             opcAsyncTask.addCursorRawData(cursorRawData);
                         }
                     } catch (Exception e) {
                         String valueStr = value.toString();
                         CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, valueStr, "".equals(valueStr) ? ConstantStr.STRING_EMPTY : valueStr,
-                                currentYmdhmss, index, currentYmdh, ConstantStr.NOT_RECORD, new Date());
+                                currentYmdhmss, index, currentYmdh, new Date());
                         opcAsyncTask.addCursorRawData(cursorRawData);
                     }
                 }
             } catch (Exception e) {
-                opcAsyncTask.packageEventTable(itemList, dataSourceId, index);
 
                 messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
                         itemGroup.getGroupName() + "-" + itemId + DateUtil.dateChangeStrYmdhms(new Date()) + "运行失败",
@@ -231,7 +227,6 @@ public class OpcUaExceedTask extends TimerTask {
             flage = false;
         }
         if (!flage) {
-            opcAsyncTask.packageEventTable(itemList, dataSourceId, index);
 
             if (Blank.isNotEmpty(opcUaClient)) {
                 opcUaClient.disconnect();
@@ -241,7 +236,6 @@ public class OpcUaExceedTask extends TimerTask {
             timer.cancel();
         }
         if (System.currentTimeMillis() >= endTime) {
-            opcAsyncTask.packageEventTable(itemList, dataSourceId, index);
 
             if (Blank.isNotEmpty(opcUaClient)) {
                 opcUaClient.disconnect();

+ 3 - 3
cqcy-ei/cqcy-ei-ua/src/main/java/com/example/opc_ua/task/OpcUaFrequencyTask.java

@@ -121,7 +121,7 @@ public class OpcUaFrequencyTask extends TimerTask {
                     //存数据
                     Boolean dmData = JSON.parseObject(value.toString(), Boolean.class);
                     CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(dmData), JSON.toJSONString(dmData),
-                            currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                            currentYmdhmss, index, currentYmdh, new Date());
                     opcAsyncTask.addCursorRawData(cursorRawData);
                 } else {
                     try {
@@ -130,12 +130,12 @@ public class OpcUaFrequencyTask extends TimerTask {
                                 MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
                                 bigDecimal;
                         CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(bigDecimal), JSON.toJSONString(dmData),
-                                currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                currentYmdhmss, index, currentYmdh, new Date());
                         opcAsyncTask.addCursorRawData(cursorRawData);
                     } catch (Exception e) {
                         String valueStr = value.toString();
                         CursorRawData cursorRawData = new CursorRawData(id, dataSourceId, itemId, javaType, valueStr, "".equals(valueStr) ? ConstantStr.STRING_EMPTY : valueStr,
-                                currentYmdhmss, index, currentYmdh, ConstantStr.IS_RECORD, new Date());
+                                currentYmdhmss, index, currentYmdh, new Date());
                         opcAsyncTask.addCursorRawData(cursorRawData);
                     }
                 }

+ 6 - 30
cqcy-ei/cqcy-ei-ua/src/main/resources/mapper/RawDataDao.xml

@@ -4,12 +4,12 @@
 
     <sql id="cursorRawData">
         id
-        , item_group_id, data_source_id, item_name, data_type, org_data_value, data_value, data_value_time, data_index, value_belong_time, is_record, create_time
+        , item_group_id, data_source_id, item_name, data_type, org_data_value, data_value, data_value_time, data_index, value_belong_time, create_time
     </sql>
 
     <sql id="rawData">
         id
-        , item_group_id, data_source_id, item_name, data_type, org_data_value, data_value, data_value_time, data_index, value_belong_time, is_record, create_time
+        , item_group_id, data_source_id, item_name, data_type, org_data_value, data_value, data_value_time, data_index, value_belong_time, create_time
     </sql>
 
     <sql id="attachRawData">
@@ -20,22 +20,19 @@
     <insert id="addRawData">
         insert into t_raw_data${remainder}
         (item_group_id, data_source_id, item_name, data_type, org_data_value, data_value, data_value_time, data_index,
-         value_belong_time,
-         is_record, create_time)
+         value_belong_time, create_time)
         VALUES (#{rawData.itemGroupId}, #{rawData.dataSourceId}, #{rawData.itemName}, #{rawData.dataType},
                 #{rawData.orgDataValue}, #{rawData.dataValue},
-                #{rawData.dataValueTime}, #{rawData.dataIndex}, #{rawData.valueBelongTime}, #{rawData.isRecord},
-                #{rawData.createTime})
+                #{rawData.dataValueTime}, #{rawData.dataIndex}, #{rawData.valueBelongTime},#{rawData.createTime})
     </insert>
 
     <insert id="addCursorRawData">
         insert into t_raw_data
         (item_group_id, data_source_id, item_name, data_type, org_data_value, data_value, data_value_time, data_index,
-         value_belong_time,
-         is_record, create_time)
+         value_belong_time, create_time)
         VALUES (#{itemGroupId}, #{dataSourceId}, #{itemName}, #{dataType},
                 #{orgDataValue}, #{dataValue},
-                #{dataValueTime}, #{dataIndex}, #{valueBelongTime}, #{isRecord}, #{createTime})
+                #{dataValueTime}, #{dataIndex}, #{valueBelongTime}, #{createTime})
     </insert>
 
     <insert id="addAttachRawData">
@@ -119,7 +116,6 @@
             </foreach>
         </if>
         AND value_belong_time = #{valueBelongTime}
-        AND is_record = #{isRecord}
         GROUP BY
         data_index;
     </select>
@@ -141,26 +137,6 @@
         </if>
     </select>
 
-    <select id="getEventMeetIndexList" resultType="java.lang.Long">
-        SELECT
-        data_index
-        FROM
-        t_raw_data
-        WHERE
-        item_group_id = #{itemGroupId}
-        AND data_source_id = #{dataSourceId}
-        <if test="itemList!= null and itemList.size() >0">
-            AND item_name IN
-            <foreach collection="itemList" item="item" separator="," open="(" close=")">
-                #{item.itemReadName}
-            </foreach>
-        </if>
-        AND data_index &lt;= #{dataIndex}
-        AND is_record = #{isRecord}
-        GROUP BY
-        data_index
-    </select>
-
     <select id="getEventDataList" resultType="com.example.opc_common.entity.CursorRawData">
         <if test="indexList!= null and indexList.size() >0">
             select

+ 7 - 0
cqcy-ei/pom.xml

@@ -34,6 +34,7 @@
         <jwt-version>3.8.2</jwt-version>
         <quartz-version>2.3.2</quartz-version>
         <pool2-version>2.8.1</pool2-version>
+        <validation-version>2.0.1.Final</validation-version>
         <bdparsii-version>1.0.0</bdparsii-version>
         <truelicense-version>1.33</truelicense-version>
     </properties>
@@ -86,6 +87,12 @@
                 <artifactId>commons-pool2</artifactId>
                 <version>${pool2-version}</version>
             </dependency>
+            <!--spring接口接受参数对象,添加校验功能-->
+            <dependency>
+                <groupId>javax.validation</groupId>
+                <artifactId>validation-api</artifactId>
+                <version>${validation-version}</version>
+            </dependency>
             <!--数学四则运算依赖 -->
             <dependency>
                 <groupId>com.mpobjects</groupId>