Procházet zdrojové kódy

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

ws před 1 rokem
rodič
revize
2794874e60

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

@@ -64,6 +64,7 @@ public class ConstantStr {
     public static final String JAVA_TYPE = "javaType";
     public static final String INDEX = "index";
     public static final String VALUE = "value";
+    public static final String CONNECT_STATE = "connectState";
     public static final String VALUE_BELONG_TIME = "valueBelongTime";
     public static final String START_NUM = "startNum";
     public static final String END_NUM = "endNum";

+ 4 - 3
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/impl/ChartServiceImpl.java

@@ -192,15 +192,16 @@ public class ChartServiceImpl implements ChartService {
                                     CursorRawData cursorRawData = currentCursorRawDataList.get(j);
                                     long time = DateUtil.strYmdhmssChangeDate(cursorRawData.getDataValueTime()).getTime();
                                     if (startTimeTime > time) {
-
+                                        currentCursorRawDataList.remove(j);
+                                        j--;
                                         continue;
                                     }
                                     if (startTimeTime <= time && time < endTimeTime) {
                                         orgList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), BigDecimal.class));
                                         list.add(JSON.parseObject(cursorRawData.getDataValue(), BigDecimal.class));
+                                        currentCursorRawDataList.remove(j);
+                                        j--;
                                     }
-                                    currentCursorRawDataList.remove(j);
-                                    j--;
                                     if (time >= endTimeTime) {
                                         break;
                                     }

+ 29 - 17
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaChangeTask.java

@@ -98,6 +98,7 @@ public class OpcDaChangeTask extends TimerTask {
             @Override
             public void stateChanged(AutoReconnectState state) {
                 if (state.equals(AutoReconnectState.CONNECTED)) {
+                    redisUtil.set(ConstantStr.ITEM_GROUP + ConstantStr.CONNECT_STATE + id, true);
                     if (trueCount != 0) {
                         messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
                                 itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务重新连接成功",
@@ -116,10 +117,18 @@ public class OpcDaChangeTask extends TimerTask {
                     }
                     if (flage) {
                         if (flaseCount != 0) {
-                            messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
-                                    itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务断开",
-                                    "服务断开,马上进行重新连接",
-                                    ConstantStr.NO_READ));
+                            //通过redis控制不要一直添加报警消息
+                            Boolean connectFlage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + ConstantStr.CONNECT_STATE + id);
+                            if (Blank.isEmpty(connectFlage)) {
+                                connectFlage = false;
+                            }
+                            if (connectFlage) {
+                                messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
+                                        itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务断开",
+                                        "服务断开,马上进行重新连接",
+                                        ConstantStr.NO_READ));
+                                redisUtil.set(ConstantStr.ITEM_GROUP + ConstantStr.CONNECT_STATE + id, false);
+                            }
                             //通过传入的数据组id,将同一数据源的所有数据组,都设置为一样的状态
                             opcAsyncTask.changeSameDataSourceState(id, ConstantStr.EXCEPT_STOP_UP);
 //                            itemGroupDao.stopItemGroupById(id, ConstantStr.EXCEPT_STOP_UP);
@@ -134,7 +143,6 @@ public class OpcDaChangeTask extends TimerTask {
             server.connect();
         } catch (Exception e) {
             e.printStackTrace();
-
         } finally {
             autoReconnectController.connect();
         }
@@ -170,13 +178,13 @@ public class OpcDaChangeTask extends TimerTask {
                         ex.printStackTrace();
                     }
                 }
-                if (Blank.isNotEmpty(server)) {
-                    server.dispose();
-                }
                 if (Blank.isNotEmpty(autoReconnectController)) {
                     autoReconnectController.removeListener(listener);
                     autoReconnectController.disconnect();
                 }
+                if (Blank.isNotEmpty(server)) {
+                    server.dispose();
+                }
                 itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
                 cronTaskRegister.removeCronTask(cronId);
                 timer.cancel();
@@ -207,6 +215,10 @@ public class OpcDaChangeTask extends TimerTask {
                             opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
                         }
                         redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
+                        if (Blank.isNotEmpty(autoReconnectController)) {
+                            autoReconnectController.removeListener(listener);
+                            autoReconnectController.disconnect();
+                        }
                         if (Blank.isNotEmpty(server)) {
                             try {
                                 server.removeGroup(group, true);
@@ -216,9 +228,6 @@ public class OpcDaChangeTask extends TimerTask {
                             }
                             server.dispose();
                         }
-                        if (Blank.isNotEmpty(autoReconnectController)) {
-                            autoReconnectController.disconnect();
-                        }
                         cronTaskRegister.removeCronTask(cronId);
                         redisUtil.del(ConstantStr.ITEM_GROUP + id);
                         timer.cancel();
@@ -231,6 +240,10 @@ public class OpcDaChangeTask extends TimerTask {
                             opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
                         }
                         redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
+                        if (Blank.isNotEmpty(autoReconnectController)) {
+                            autoReconnectController.removeListener(listener);
+                            autoReconnectController.disconnect();
+                        }
                         if (Blank.isNotEmpty(server)) {
                             try {
                                 server.removeGroup(group, true);
@@ -240,9 +253,7 @@ public class OpcDaChangeTask extends TimerTask {
                             }
                             server.dispose();
                         }
-                        if (Blank.isNotEmpty(autoReconnectController)) {
-                            autoReconnectController.disconnect();
-                        }
+
                         timer.cancel();
                         break;
                     }
@@ -312,6 +323,10 @@ public class OpcDaChangeTask extends TimerTask {
                             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(autoReconnectController)) {
+                                autoReconnectController.removeListener(listener);
+                                autoReconnectController.disconnect();
+                            }
                             if (Blank.isNotEmpty(server)) {
                                 try {
                                     server.removeGroup(group, true);
@@ -321,9 +336,6 @@ public class OpcDaChangeTask extends TimerTask {
                                 }
                                 server.dispose();
                             }
-                            if (Blank.isNotEmpty(autoReconnectController)) {
-                                autoReconnectController.disconnect();
-                            }
                             itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
                             cronTaskRegister.removeCronTask(cronId);
                             timer.cancel();

+ 29 - 16
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaExceedTask.java

@@ -104,6 +104,7 @@ public class OpcDaExceedTask extends TimerTask {
             @Override
             public void stateChanged(AutoReconnectState state) {
                 if (state.equals(AutoReconnectState.CONNECTED)) {
+                    redisUtil.set(ConstantStr.ITEM_GROUP + ConstantStr.CONNECT_STATE + id, true);
                     if (trueCount != 0) {
                         messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
                                 itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务重新连接成功",
@@ -122,10 +123,18 @@ public class OpcDaExceedTask extends TimerTask {
                     }
                     if (flage) {
                         if (flaseCount != 0) {
-                            messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
-                                    itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务断开",
-                                    "服务断开,马上进行重新连接",
-                                    ConstantStr.NO_READ));
+                            //通过redis控制不要一直添加报警消息
+                            Boolean connectFlage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + ConstantStr.CONNECT_STATE + id);
+                            if (Blank.isEmpty(connectFlage)) {
+                                connectFlage = false;
+                            }
+                            if (connectFlage) {
+                                messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
+                                        itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务断开",
+                                        "服务断开,马上进行重新连接",
+                                        ConstantStr.NO_READ));
+                                redisUtil.set(ConstantStr.ITEM_GROUP + ConstantStr.CONNECT_STATE + id, false);
+                            }
                             //通过传入的数据组id,将同一数据源的所有数据组,都设置为一样的状态
                             opcAsyncTask.changeSameDataSourceState(id, ConstantStr.EXCEPT_STOP_UP);
 //                            itemGroupDao.stopItemGroupById(id, ConstantStr.EXCEPT_STOP_UP);
@@ -171,12 +180,13 @@ public class OpcDaExceedTask extends TimerTask {
                         ex.printStackTrace();
                     }
                 }
-                if (Blank.isNotEmpty(server)) {
-                    server.dispose();
-                }
                 if (Blank.isNotEmpty(autoReconnectController)) {
+                    autoReconnectController.removeListener(listener);
                     autoReconnectController.disconnect();
                 }
+                if (Blank.isNotEmpty(server)) {
+                    server.dispose();
+                }
                 itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
                 cronTaskRegister.removeCronTask(cronId);
                 timer.cancel();
@@ -193,6 +203,10 @@ public class OpcDaExceedTask extends TimerTask {
                         flage = false;
                     }
                     if (!flage) {
+                        if (Blank.isNotEmpty(autoReconnectController)) {
+                            autoReconnectController.removeListener(listener);
+                            autoReconnectController.disconnect();
+                        }
                         if (Blank.isNotEmpty(server)) {
                             try {
                                 server.removeGroup(group, true);
@@ -202,15 +216,16 @@ public class OpcDaExceedTask extends TimerTask {
                             }
                             server.dispose();
                         }
-                        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(autoReconnectController)) {
+                            autoReconnectController.removeListener(listener);
+                            autoReconnectController.disconnect();
+                        }
                         if (Blank.isNotEmpty(server)) {
                             try {
                                 server.removeGroup(group, true);
@@ -220,9 +235,6 @@ public class OpcDaExceedTask extends TimerTask {
                             }
                             server.dispose();
                         }
-                        if (Blank.isNotEmpty(autoReconnectController)) {
-                            autoReconnectController.disconnect();
-                        }
                         timer.cancel();
                         break;
                     }
@@ -414,6 +426,10 @@ public class OpcDaExceedTask extends TimerTask {
                             flage = false;
                         }
                         if (!flage) {
+                            if (Blank.isNotEmpty(autoReconnectController)) {
+                                autoReconnectController.removeListener(listener);
+                                autoReconnectController.disconnect();
+                            }
                             if (Blank.isNotEmpty(server)) {
                                 try {
                                     server.removeGroup(group, true);
@@ -423,9 +439,6 @@ public class OpcDaExceedTask extends TimerTask {
                                 }
                                 server.dispose();
                             }
-                            if (Blank.isNotEmpty(autoReconnectController)) {
-                                autoReconnectController.disconnect();
-                            }
                             itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
                             cronTaskRegister.removeCronTask(cronId);
                             timer.cancel();

+ 29 - 20
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaFrequencyTask.java

@@ -102,7 +102,6 @@ public class OpcDaFrequencyTask extends TimerTask {
     public void run() {
         Integer id = itemGroup.getId();
         Integer dataSourceId = dataSource.getId();
-        itemGroupDao.stopItemGroupById(id, ConstantStr.START_UP);
         Server server = OpcDaUtil.createServer(dataSource);
         Long index = 0L;
         AutoReconnectController autoReconnectController = new AutoReconnectController(server);
@@ -113,6 +112,7 @@ public class OpcDaFrequencyTask extends TimerTask {
             @Override
             public void stateChanged(AutoReconnectState state) {
                 if (state.equals(AutoReconnectState.CONNECTED)) {
+                    redisUtil.set(ConstantStr.ITEM_GROUP + ConstantStr.CONNECT_STATE + id, true);
                     if (trueCount != 0) {
                         messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
                                 itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务重新连接成功",
@@ -131,10 +131,18 @@ public class OpcDaFrequencyTask extends TimerTask {
                     }
                     if (flage) {
                         if (flaseCount != 0) {
-                            messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
-                                    itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务断开",
-                                    "服务断开,马上进行重新连接",
-                                    ConstantStr.NO_READ));
+                            //通过redis控制不要一直添加报警消息
+                            Boolean connectFlage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + ConstantStr.CONNECT_STATE + id);
+                            if (Blank.isEmpty(connectFlage)) {
+                                connectFlage = false;
+                            }
+                            if (connectFlage) {
+                                messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
+                                        itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务断开",
+                                        "服务断开,马上进行重新连接",
+                                        ConstantStr.NO_READ));
+                                redisUtil.set(ConstantStr.ITEM_GROUP + ConstantStr.CONNECT_STATE + id, false);
+                            }
                             //通过传入的数据组id,将同一数据源的所有数据组,都设置为一样的状态
                             opcAsyncTask.changeSameDataSourceState(id, ConstantStr.EXCEPT_STOP_UP);
 //                            itemGroupDao.stopItemGroupById(id, ConstantStr.EXCEPT_STOP_UP);
@@ -187,13 +195,13 @@ public class OpcDaFrequencyTask extends TimerTask {
                         ex.printStackTrace();
                     }
                 }
-                if (Blank.isNotEmpty(server)) {
-                    server.dispose();
-                }
                 if (Blank.isNotEmpty(autoReconnectController)) {
                     autoReconnectController.removeListener(listener);
                     autoReconnectController.disconnect();
                 }
+                if (Blank.isNotEmpty(server)) {
+                    server.dispose();
+                }
                 itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
                 cronTaskRegister.removeCronTask(cronId);
                 redisUtil.del(ConstantStr.ITEM_GROUP + id);
@@ -223,6 +231,11 @@ public class OpcDaFrequencyTask extends TimerTask {
                             opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
                         }
                         redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
+                        //重连服务摧毁,必须在server之前,不然server摧毁时,会被监听器执行一次
+                        if (Blank.isNotEmpty(autoReconnectController)) {
+                            autoReconnectController.removeListener(listener);
+                            autoReconnectController.disconnect();
+                        }
                         if (Blank.isNotEmpty(server)) {
                             try {
                                 server.removeGroup(group, true);
@@ -232,10 +245,6 @@ public class OpcDaFrequencyTask extends TimerTask {
                             }
                             server.dispose();
                         }
-                        if (Blank.isNotEmpty(autoReconnectController)) {
-                            autoReconnectController.removeListener(listener);
-                            autoReconnectController.disconnect();
-                        }
                         itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
                         cronTaskRegister.removeCronTask(cronId);
                         redisUtil.del(ConstantStr.ITEM_GROUP + id);
@@ -249,6 +258,10 @@ public class OpcDaFrequencyTask extends TimerTask {
                             opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
                         }
                         redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
+                        if (Blank.isNotEmpty(autoReconnectController)) {
+                            autoReconnectController.removeListener(listener);
+                            autoReconnectController.disconnect();
+                        }
                         if (Blank.isNotEmpty(server)) {
                             try {
                                 server.removeGroup(group, true);
@@ -258,10 +271,6 @@ public class OpcDaFrequencyTask extends TimerTask {
                             }
                             server.dispose();
                         }
-                        if (Blank.isNotEmpty(autoReconnectController)) {
-                            autoReconnectController.removeListener(listener);
-                            autoReconnectController.disconnect();
-                        }
                         timer.cancel();
                         break;
                     }
@@ -354,6 +363,10 @@ public class OpcDaFrequencyTask extends TimerTask {
                             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(autoReconnectController)) {
+                                autoReconnectController.removeListener(listener);
+                                autoReconnectController.disconnect();
+                            }
                             if (Blank.isNotEmpty(server)) {
                                 try {
                                     server.removeGroup(group, true);
@@ -363,10 +376,6 @@ public class OpcDaFrequencyTask extends TimerTask {
                                 }
                                 server.dispose();
                             }
-                            if (Blank.isNotEmpty(autoReconnectController)) {
-                                autoReconnectController.removeListener(listener);
-                                autoReconnectController.disconnect();
-                            }
                             itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
                             cronTaskRegister.removeCronTask(cronId);
                             redisUtil.del(ConstantStr.ITEM_GROUP + id);

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

@@ -59,6 +59,7 @@ public class OpcDaTask {
     private ReportTableTask reportTableTask;
 
     public void opcDaTask(ItemGroup itemGroup, DataSource dataSource, String cronId) {
+        log.error("OPCDa开始运行,{},执行开始,执行时间为{}", itemGroup, DateUtil.dateChangeStrYmdhmss(new Date()));
         log.info("OPCDa开始运行,{},执行开始,执行时间为{}", itemGroup, DateUtil.dateChangeStrYmdhmss(new Date()));
         Integer id = itemGroup.getId();
         Integer readMode = itemGroup.getReadMode();
@@ -90,7 +91,6 @@ public class OpcDaTask {
                 itemStrList.add(item.getItemReadName());
             }
             String[] items = itemStrList.toArray(new String[]{});
-            //有多少个报表,就存多少份,然后每20筛选一次数据
             if (readMode == ConstantStr.ON_FREQUENCY) {
                 //查看此数据组是否在设备报表中被配置
                 List<TableTemplate> tableTemplateList = reportTableDao.getDeviceTtByItemList(basicItemList, ConstantStr.DEVICE_REPORT);

+ 21 - 6
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/ReportTask.java

@@ -55,12 +55,17 @@ public class ReportTask {
             for (int j = 0; j < curRawDataList.size(); j++) {
                 CursorRawData cursorRawData = curRawDataList.get(j);
                 long time = DateUtil.strYmdhmssChangeDate(cursorRawData.getDataValueTime()).getTime();
+                if (startTimeTime > time) {
+                    curRawDataList.remove(j);
+                    j--;
+                    continue;
+                }
                 if (startTimeTime <= time && time < endTimeTime) {
                     orgList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), Boolean.class));
                     list.add(JSON.parseObject(cursorRawData.getDataValue(), Boolean.class));
+                    curRawDataList.remove(j);
+                    j--;
                 }
-                curRawDataList.remove(j);
-                j--;
                 if (time >= endTimeTime) {
                     break;
                 }
@@ -171,12 +176,17 @@ public class ReportTask {
             for (int j = 0; j < curRawDataList.size(); j++) {
                 CursorRawData cursorRawData = curRawDataList.get(j);
                 long time = DateUtil.strYmdhmssChangeDate(cursorRawData.getDataValueTime()).getTime();
+                if (startTimeTime > time) {
+                    curRawDataList.remove(j);
+                    j--;
+                    continue;
+                }
                 if (startTimeTime <= time && time < endTimeTime) {
                     orgList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), BigDecimal.class));
                     list.add(JSON.parseObject(cursorRawData.getDataValue(), BigDecimal.class));
+                    curRawDataList.remove(j);
+                    j--;
                 }
-                curRawDataList.remove(j);
-                j--;
                 if (time >= endTimeTime) {
                     break;
                 }
@@ -266,12 +276,17 @@ public class ReportTask {
             for (int j = 0; j < curRawDataList.size(); j++) {
                 CursorRawData cursorRawData = curRawDataList.get(j);
                 long time = DateUtil.strYmdhmssChangeDate(cursorRawData.getDataValueTime()).getTime();
+                if (startTimeTime > time) {
+                    curRawDataList.remove(j);
+                    j--;
+                    continue;
+                }
                 if (startTimeTime <= time && time < endTimeTime) {
                     orgList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), String.class));
                     list.add(JSON.parseObject(cursorRawData.getDataValue(), String.class));
+                    curRawDataList.remove(j);
+                    j--;
                 }
-                curRawDataList.remove(j);
-                j--;
                 if (time >= endTimeTime) {
                     break;
                 }

+ 41 - 10
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/ScheduledTask.java

@@ -11,6 +11,7 @@ import com.example.opc_common.util.DateUtil;
 import com.example.opc_common.util.OpcUtil;
 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.util.OpcDaUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.openscada.opc.lib.da.Group;
@@ -39,6 +40,9 @@ public class ScheduledTask {
     @Autowired
     private OpcAsyncTask opcAsyncTask;
 
+    @Autowired
+    private RawDataDao rawDataDao;
+
     /**
      * 每10分钟更新一次附属属性
      */
@@ -60,12 +64,12 @@ public class ScheduledTask {
                     if (Blank.isNotEmpty(itemGroupList)) {
                         for (ItemGroup itemGroup : itemGroupList) {
                             Integer itemGroupId = itemGroup.getId();
-                            Server server = OpcDaUtil.createServer(dataSource);
-                            try {
-                                server.connect();
-                                Group group = server.addGroup();
-                                List<Item> attachItemList = itemGroupDao.getAttributesItemList(itemGroupId, ConstantStr.ATTACH_ATTRIBUTES);
-                                if (Blank.isNotEmpty(attachItemList)) {
+                            List<Item> attachItemList = itemGroupDao.getAttributesItemList(itemGroupId, ConstantStr.ATTACH_ATTRIBUTES);
+                            if (Blank.isNotEmpty(attachItemList)) {
+                                Server server = OpcDaUtil.createServer(dataSource);
+                                try {
+                                    server.connect();
+                                    Group group = server.addGroup();
                                     List<String> itemStrList = new ArrayList<>();
                                     for (Item item : attachItemList) {
                                         itemStrList.add(item.getItemReadName());
@@ -120,11 +124,11 @@ public class ScheduledTask {
                                     if (Blank.isNotEmpty(attachItemList)) {
                                         opcAsyncTask.addAttachRawDataList(attachRawDataList);
                                     }
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                } finally {
+                                    server.dispose();
                                 }
-                            } catch (Exception e) {
-                                e.printStackTrace();
-                            } finally {
-                                server.dispose();
                             }
                         }
                     }
@@ -133,4 +137,31 @@ public class ScheduledTask {
         }
         log.info("更新附属属性结束,时间为{}", DateUtil.dateChangeStrYmdhmss(new Date()));
     }
+
+    /**
+     * 每一小时强制组装一次数据,防止某些组异常,大量数据存于临时表
+     */
+    @Async("threadPoolTaskExecutor")
+    @Scheduled(cron = "0 0 0/1 * * ?")
+    public void packageBasicData() {
+        log.info("开始组装基础属性数据,时间为{}", DateUtil.dateChangeStrYmdhmss(new Date()));
+        List<Integer> itemGroupIdList = rawDataDao.getRawDataGroupIdList();
+        if (Blank.isNotEmpty(itemGroupIdList)) {
+            for (Integer itemGroupId : itemGroupIdList) {
+                ItemGroup itemGroup = itemGroupDao.getItemGroupById(itemGroupId);
+                if (Blank.isNotEmpty(itemGroup)) {
+                    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++) {
+                                List<Item> itemList = itemGroupDao.getAttributesItemList(itemGroupId, ConstantStr.BASIC_ATTRIBUTES);
+                                Integer dataSourceId = itemGroup.getDataSourceId();
+                                opcAsyncTask.packageRawDataList1(itemList, dataSourceId, belongTimeList.get(i));
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
 }

+ 3 - 0
cqcy-ei/cqcy-ei-da/src/main/resources/application.yml

@@ -4,6 +4,9 @@ spring:
   jackson:
     date-format: yyyy-MM-dd HH:mm:ss
     time-zone: GMT+8
+  devtools:
+    restart:
+      enabled: false
 
 mybatis:
   mapper-locations: classpath:mapper/*.xml