Browse Source

修改opcda无限重连没有停止问题(移除监听器),修改数据组如果配置在报表中,不能修改问题,清空报表controller中全部日志

zhoupeng 1 year ago
parent
commit
0e5a5abc62

+ 18 - 22
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/controller/ReportTableController.java

@@ -2,13 +2,9 @@ package com.example.opc_da.controller;
 
 import com.example.opc_common.entity.ReportTable;
 import com.example.opc_common.entity.TableTemplate;
-import com.example.opc_common.enums.ModelEnum;
-import com.example.opc_common.enums.OperationEnum;
 import com.example.opc_common.enums.ResultEnum;
-import com.example.opc_common.enums.ServerEnum;
 import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.Result;
-import com.example.opc_da.annotation.WebLog;
 import com.example.opc_da.service.ReportTableService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
@@ -31,7 +27,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getSysTableTemplate")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
     public Result getSysTableTemplate(String keyType, Integer dictId, String templateName) {
         if (Blank.isEmpty(keyType)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "系统报表模板参数不能为空");
@@ -46,7 +42,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getSysTableTemplateById/{id}")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
     public Result getSysTableTemplateById(@PathVariable Integer id) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
@@ -61,7 +57,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/addTableTemplate")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.ADD)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.ADD)
     public Result addTableTemplate(@RequestBody TableTemplate tableTemplate) {
         if (Blank.isEmpty(tableTemplate, tableTemplate.getTemplateName(), tableTemplate.getTemplateType(),
                 tableTemplate.getTemplateData())) {
@@ -77,7 +73,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/updateTableTemplate")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.UPDATE)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.UPDATE)
     public Result updateTableTemplate(@RequestBody TableTemplate tableTemplate) {
         if (Blank.isEmpty(tableTemplate, tableTemplate.getId(), tableTemplate.getTemplateName(),
                 tableTemplate.getTemplateData(), tableTemplate.getVersion())) {
@@ -94,7 +90,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/updateTableTemplateNameById")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.UPDATE)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.UPDATE)
     public Result updateTableTemplateNameById(Integer id, String templateName) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表id不能为空");
@@ -111,7 +107,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getAllTableTemplate")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
     public Result getAllTableTemplate(Integer page, Integer limit, String userId, Integer templateType) {
         return reportTableService.getAllTableTemplate(page, limit, userId, templateType);
     }
@@ -123,7 +119,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getTableTemplateById/{id}")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
     public Result getTableTemplateById(@PathVariable Integer id) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
@@ -140,7 +136,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/delTableTemplateById")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.DELETE)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.DELETE)
     public Result delTableTemplateById(Integer id, Integer isDelete) {
         if (Blank.isEmpty(id, isDelete)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
@@ -157,7 +153,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getAllReportTable")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
     public Result getAllReportTable(Integer page, Integer limit, Integer isAutoReport) {
         return reportTableService.getAllReportTable(page, limit, isAutoReport);
     }
@@ -169,7 +165,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getReportTableById")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
     public Result getReportTableById(String id) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
@@ -184,7 +180,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getPrintReportById/{id}")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
     public Result getPrintReportById(@PathVariable String id) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
@@ -199,7 +195,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/delReportTableById/{id}")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.DELETE)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.DELETE)
     public Result delReportTableById(@PathVariable String id) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
@@ -229,7 +225,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/runAutoTableById")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.UPDATE)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.UPDATE)
     public Result runAutoTableById(String id, Integer runState) {
         if (Blank.isEmpty(id, runState)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "id,启停状态不能为空");
@@ -241,7 +237,7 @@ public class ReportTableController {
      * 查询报表数量
      */
     @GetMapping("/queryTableNum")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
     public Result queryTableNum() {
         return reportTableService.queryTableNum();
     }
@@ -253,7 +249,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/tableAssignUserById")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.ASSIGN)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.ASSIGN)
     public Result tableAssignUserById(@RequestBody ReportTable reportTable) {
         if (Blank.isEmpty(reportTable, reportTable.getId())) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表id不能为空");
@@ -269,7 +265,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/updateTableNameById")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.UPDATE)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.UPDATE)
     public Result updateTableNameById(String id, String reportTableName) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表id不能为空");
@@ -288,7 +284,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getAllOkReportTable")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
     public Result getAllOkReportTable(Integer page, Integer limit, String reportTableName, Integer isAutoReport, Integer isDelete) {
         if (Blank.isEmpty(page, limit) || page < 1 || limit < 1) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "page,limit不能为空,且必须大于0");
@@ -306,7 +302,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getAutoChReportTable")
-    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
     public Result getAutoChReportTable(Integer page, Integer limit, String autoTableId, String reportTableName) {
         if (Blank.isEmpty(page, limit, autoTableId) || page < 1 || limit < 1) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "page,limit不能为空,且必须大于0,自动报表的id不能为空");

+ 15 - 0
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/ItemGroupServiceImpl.java

@@ -139,6 +139,17 @@ public class ItemGroupServiceImpl implements ItemGroupService {
             if (itemGroupDao.updateItemGroup(itemGroup) <= 0) {
                 return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "修改数据组失败");
             }
+            List<Item> itemList1 = itemGroupDao.getItemListByGroupId(id, ConstantStr.BASIC_ATTRIBUTES);
+            if (Blank.isNotEmpty(itemList1)) {
+                Long tttiCount = reportTableDao.getTttiCountByItemId(itemList1);
+                if (tttiCount > 0) {
+                    return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据组在报表中配置了相应的数据项无法删除");
+                }
+                Long ttciCount =reportTableDao.getTtciCountByItemId(itemList1);
+                if (ttciCount > 0) {
+                    return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据组在报表中配置了相应的数据项无法删除");
+                }
+            }
             List<Item> itemList = itemGroup.getItemList();
             if (dataSourceId != itemGroup1.getDataSourceId()) {
                 itemGroupDao.delItemByGroupId(id);
@@ -256,6 +267,10 @@ public class ItemGroupServiceImpl implements ItemGroupService {
             if (tttiCount > 0) {
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据组在报表中配置了相应的数据项无法删除");
             }
+            Long ttciCount =reportTableDao.getTtciCountByItemId(itemList);
+            if (ttciCount > 0) {
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据组在报表中配置了相应的数据项无法删除");
+            }
         }
         itemGroupDao.delItemByGroupId(id);
         itemGroupDao.delItemGroupById(id);

+ 16 - 3
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaChangeTask.java

@@ -90,7 +90,7 @@ public class OpcDaChangeTask extends TimerTask {
         Server server = OpcDaUtil.createServer(dataSource);
         Long index = 0L;
         AutoReconnectController autoReconnectController = new AutoReconnectController(server);
-        autoReconnectController.addListener(new AutoReconnectListener() {
+        AutoReconnectListener listener=new AutoReconnectListener() {
             private int trueCount = 0;
             private int flaseCount = 0;
 
@@ -98,7 +98,6 @@ public class OpcDaChangeTask extends TimerTask {
             public void stateChanged(AutoReconnectState state) {
                 if (state.equals(AutoReconnectState.CONNECTED)) {
                     if (trueCount != 0) {
-                        log.info("-----" + "重连成功");
                         messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
                                 itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务重新连接成功",
                                 "服务重新连接成功",
@@ -124,7 +123,8 @@ public class OpcDaChangeTask extends TimerTask {
                     flaseCount++;
                 }
             }
-        });
+        };
+        autoReconnectController.addListener(listener);
         try {
             server.connect();
         } catch (Exception e) {
@@ -159,6 +159,9 @@ public class OpcDaChangeTask extends TimerTask {
                             if (Blank.isNotEmpty(server)) {
                                 server.dispose();
                             }
+                            if (Blank.isNotEmpty(autoReconnectController)) {
+                                autoReconnectController.disconnect();
+                            }
                             cronTaskRegister.removeCronTask(cronId);
                             redisUtil.del(ConstantStr.ITEM_GROUP + id);
                             timer.cancel();
@@ -174,6 +177,9 @@ public class OpcDaChangeTask extends TimerTask {
                             if (Blank.isNotEmpty(server)) {
                                 server.dispose();
                             }
+                            if (Blank.isNotEmpty(autoReconnectController)) {
+                                autoReconnectController.disconnect();
+                            }
                             timer.cancel();
                             break;
                         }
@@ -246,6 +252,9 @@ public class OpcDaChangeTask extends TimerTask {
                                 if (Blank.isNotEmpty(server)) {
                                     server.dispose();
                                 }
+                                if (Blank.isNotEmpty(autoReconnectController)) {
+                                    autoReconnectController.disconnect();
+                                }
                                 itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
                                 cronTaskRegister.removeCronTask(cronId);
                                 timer.cancel();
@@ -265,6 +274,10 @@ public class OpcDaChangeTask extends TimerTask {
                         if (Blank.isNotEmpty(server)) {
                             server.dispose();
                         }
+                        if (Blank.isNotEmpty(autoReconnectController)) {
+                            autoReconnectController.removeListener(listener);
+                            autoReconnectController.disconnect();
+                        }
                         itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
                         cronTaskRegister.removeCronTask(cronId);
                         timer.cancel();

+ 15 - 2
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaExceedTask.java

@@ -88,7 +88,7 @@ public class OpcDaExceedTask extends TimerTask {
         String driverItem = OpcDaUtil.getDriverItem(itemList);
         Long index = 0L;
         AutoReconnectController autoReconnectController = new AutoReconnectController(server);
-        autoReconnectController.addListener(new AutoReconnectListener() {
+        AutoReconnectListener listener=new AutoReconnectListener() {
             private int trueCount = 0;
             private int flaseCount = 0;
 
@@ -121,7 +121,8 @@ public class OpcDaExceedTask extends TimerTask {
                     flaseCount++;
                 }
             }
-        });
+        };
+        autoReconnectController.addListener(listener);
         try {
             server.connect();
         } catch (Exception e) {
@@ -153,6 +154,9 @@ public class OpcDaExceedTask extends TimerTask {
                             if (Blank.isNotEmpty(server)) {
                                 server.dispose();
                             }
+                            if (Blank.isNotEmpty(autoReconnectController)) {
+                                autoReconnectController.disconnect();
+                            }
                             cronTaskRegister.removeCronTask(cronId);
                             redisUtil.del(ConstantStr.ITEM_GROUP + id);
                             timer.cancel();
@@ -165,6 +169,9 @@ public class OpcDaExceedTask extends TimerTask {
                             if (Blank.isNotEmpty(server)) {
                                 server.dispose();
                             }
+                            if (Blank.isNotEmpty(autoReconnectController)) {
+                                autoReconnectController.disconnect();
+                            }
                             timer.cancel();
                             break;
                         }
@@ -296,6 +303,9 @@ public class OpcDaExceedTask extends TimerTask {
                                 if (Blank.isNotEmpty(server)) {
                                     server.dispose();
                                 }
+                                if (Blank.isNotEmpty(autoReconnectController)) {
+                                    autoReconnectController.disconnect();
+                                }
                                 itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
                                 cronTaskRegister.removeCronTask(cronId);
                                 timer.cancel();
@@ -314,6 +324,9 @@ public class OpcDaExceedTask extends TimerTask {
                         if (Blank.isNotEmpty(server)) {
                             server.dispose();
                         }
+                        if (Blank.isNotEmpty(autoReconnectController)) {
+                            autoReconnectController.disconnect();
+                        }
                         itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
                         cronTaskRegister.removeCronTask(cronId);
                         timer.cancel();

+ 21 - 3
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaFrequencyTask.java

@@ -103,7 +103,7 @@ public class OpcDaFrequencyTask extends TimerTask {
         Server server = OpcDaUtil.createServer(dataSource);
         Long index = 0L;
         AutoReconnectController autoReconnectController = new AutoReconnectController(server);
-        autoReconnectController.addListener(new AutoReconnectListener() {
+        AutoReconnectListener listener=new AutoReconnectListener() {
             private int trueCount = 0;
             private int flaseCount = 0;
 
@@ -111,7 +111,6 @@ public class OpcDaFrequencyTask extends TimerTask {
             public void stateChanged(AutoReconnectState state) {
                 if (state.equals(AutoReconnectState.CONNECTED)) {
                     if (trueCount != 0) {
-                        log.info("-----" + "重连成功");
                         messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
                                 itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "服务重新连接成功",
                                 "服务重新连接成功",
@@ -137,7 +136,8 @@ public class OpcDaFrequencyTask extends TimerTask {
                     flaseCount++;
                 }
             }
-        });
+        };
+        autoReconnectController.addListener(listener);
         try {
             server.connect();
         } catch (Exception e) {
@@ -174,6 +174,10 @@ public class OpcDaFrequencyTask extends TimerTask {
                             if (Blank.isNotEmpty(server)) {
                                 server.dispose();
                             }
+                            if (Blank.isNotEmpty(autoReconnectController)) {
+                                autoReconnectController.removeListener(listener);
+                                autoReconnectController.disconnect();
+                            }
                             cronTaskRegister.removeCronTask(cronId);
                             redisUtil.del(ConstantStr.ITEM_GROUP + id);
                             timer.cancel();
@@ -189,6 +193,10 @@ public class OpcDaFrequencyTask extends TimerTask {
                             if (Blank.isNotEmpty(server)) {
                                 server.dispose();
                             }
+                            if (Blank.isNotEmpty(autoReconnectController)) {
+                                autoReconnectController.removeListener(listener);
+                                autoReconnectController.disconnect();
+                            }
                             timer.cancel();
                             break;
                         }
@@ -267,9 +275,14 @@ public class OpcDaFrequencyTask extends TimerTask {
                                 if (Blank.isNotEmpty(server)) {
                                     server.dispose();
                                 }
+                                if (Blank.isNotEmpty(autoReconnectController)) {
+                                    autoReconnectController.removeListener(listener);
+                                    autoReconnectController.disconnect();
+                                }
                                 itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
                                 cronTaskRegister.removeCronTask(cronId);
                                 timer.cancel();
+                                break;
                             }
                         }
                     }
@@ -286,9 +299,14 @@ public class OpcDaFrequencyTask extends TimerTask {
                         if (Blank.isNotEmpty(server)) {
                             server.dispose();
                         }
+                        if (Blank.isNotEmpty(autoReconnectController)) {
+                            autoReconnectController.removeListener(listener);
+                            autoReconnectController.disconnect();
+                        }
                         itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
                         cronTaskRegister.removeCronTask(cronId);
                         timer.cancel();
+                        break;
                     }
                 }
             } catch (Exception e) {