liwei19941102 преди 2 години
родител
ревизия
13e4b86538

+ 13 - 0
ruoyi-common/pom.xml

@@ -171,6 +171,19 @@
             <artifactId>spring-integration-mqtt</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-api</artifactId>
+            <version>0.10.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-driver-modbus</artifactId>
+            <version>0.10.0</version>
+            <scope>runtime</scope>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 117 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/ModbusUtils.java

@@ -0,0 +1,117 @@
+package com.ruoyi.common.utils;
+
+import com.ruoyi.common.utils.cache.CacheManager;
+import com.ruoyi.common.utils.cache.CacheManagerEntity;
+import lombok.Value;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.plc4x.java.PlcDriverManager;
+import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
+import org.apache.plc4x.java.api.messages.PlcReadResponse;
+import org.apache.plc4x.java.api.messages.PlcWriteRequest;
+import org.apache.plc4x.java.api.messages.PlcWriteResponse;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
+
+import org.eclipse.paho.client.mqttv3.MqttClient;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+@Slf4j
+@Component
+public class ModbusUtils {
+
+//    private PlcConnection plcConnection;
+
+    //private static CacheManager cacheManager;
+
+
+    public String plcRead(String url,String uuid,String name,String valueStr) throws Exception{
+        String value = "";
+        //建立plc连接
+        PlcConnection plcConnection = (PlcConnection) CacheManager.getCacheDataByKey(uuid);
+        if(plcConnection == null){
+               this.createplcConnection(url,uuid);
+               plcConnection = (PlcConnection) CacheManager.getCacheDataByKey(uuid);
+        }
+//        Object entity = cacheManager.getCacheDataByKey("test");
+        // 2.判断是否可以读取
+        boolean canRead = plcConnection.getMetadata().canRead();
+        if (!canRead) {
+            log.error("该连接不支持读取数据");
+            //return null;
+        }
+        // 3.创建读取请求
+        PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
+        builder.addItem(name,valueStr);
+        PlcReadRequest readRequest = builder.build();
+        PlcReadResponse response = readRequest.execute().get(5000,TimeUnit.MILLISECONDS);
+        for (String fieldName : response.getFieldNames()) {
+            if (response.getResponseCode(fieldName) == PlcResponseCode.OK) {
+                int numValues = response.getNumberOfValues(fieldName);
+                if (numValues == 1) {
+                    log.info("Value[" + fieldName + "]: " + response.getObject(fieldName));
+                    value = value + response.getObject(fieldName);
+                } else {
+                    log.info("Value[" + fieldName + "]:");
+                    for (int i = 0; i < numValues; i++) {
+                         if(i != numValues-1){
+                             value = value + response.getObject(fieldName, i)+",";
+                         }else {
+                             value = value + response.getObject(fieldName, i);
+                         }
+                        log.info(" - " + response.getObject(fieldName, i));
+                    }
+                }
+
+            } else {
+                log.error("Error[" + fieldName + "]: " + response.getResponseCode(fieldName).name());
+            }
+        }
+        return value;
+    }
+
+
+    public void plcWrite(String url,String uuid,String key,String writeStr,Object... value) throws Exception{
+        PlcConnection plcConnection = (PlcConnection)CacheManager.getCacheDataByKey(uuid);
+//        PlcConnection plcConnection = (PlcConnection) CacheManager.
+        if(plcConnection == null){
+            this.createplcConnection(url,uuid);
+            plcConnection = (PlcConnection) CacheManager.getCacheDataByKey(uuid);
+        }
+        boolean canWrite = plcConnection.getMetadata().canWrite();
+        if (!canWrite) {
+            log.error("该连接不支持写入数据");
+            return;
+        }
+        PlcWriteRequest.Builder builder = plcConnection.writeRequestBuilder();
+        builder.addItem(key, writeStr, value);
+        PlcWriteRequest writeRequest = builder.build();
+        PlcWriteResponse response = writeRequest.execute().get();
+        for (String fieldName : response.getFieldNames()) {
+            PlcResponseCode responseCode = response.getResponseCode(fieldName);
+            if(responseCode == PlcResponseCode.OK) {
+                log.info("Value[" + fieldName + "]: updated");
+            }
+            else {
+                log.error("Error[" + fieldName + "]: " + responseCode.name());
+            }
+        }
+
+    }
+
+    public void createplcConnection(String url,String uuid) throws PlcConnectionException {
+         PlcConnection plcConnection = new PlcDriverManager().getConnection(url);
+//         CaceUtils.put("tcp",uuid,"test");
+//        CacheManagerEntity entity = new CacheManagerEntity();
+         System.out.println(uuid);
+         CacheManager.putCache(uuid, new CacheManagerEntity(plcConnection));
+//        Map<String,CacheManagerEntity> map = CacheManager.getCacheAll();
+         System.out.println("连接缓存放入成功");
+    }
+
+}

+ 133 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/cache/CacheManager.java

@@ -0,0 +1,133 @@
+package com.ruoyi.common.utils.cache;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public  class CacheManager {
+    private  static Map<String, CacheManagerEntity> caches = new HashMap<String, CacheManagerEntity>();
+
+    /**
+     * 存入缓存
+     *
+     * @param key
+     * @param cache
+     */
+    public static void putCache(String key, CacheManagerEntity cache) {
+        caches.put(key, cache);
+    }
+
+    /**
+     * 存入缓存
+     *
+     * @param key
+     * @param datas
+     * @param timeOut
+     */
+    public static void putCache(String key, Object datas, long timeOut) {
+        timeOut = timeOut > 0 ? timeOut : 0L;
+        putCache(key, new CacheManagerEntity(datas, timeOut, System.currentTimeMillis()));
+    }
+
+    /**
+     * 获取对应缓存
+     *
+     * @param key
+     * @return
+     */
+    public static CacheManagerEntity getCacheByKey(String key) {
+        if (isContains(key)) {
+            return caches.get(key);
+        }
+        return null;
+    }
+
+    /**
+     * 获取对应缓存
+     *
+     * @param key
+     * @return
+     */
+    public static Object getCacheDataByKey(String key) {
+        if (isContains(key)) {
+            return caches.get(key).getDatas();
+        }
+        return null;
+    }
+
+    /**
+     * 获取所有缓存
+     *
+     * @return
+     */
+    public static Map<String, CacheManagerEntity> getCacheAll() {
+        return caches;
+    }
+
+    /**
+     * 判断是否在缓存中
+     *
+     * @param key
+     * @return
+     */
+    public static boolean isContains(String key) {
+        return caches.containsKey(key);
+    }
+
+    /**
+     * 清除所有缓存
+     */
+    public static void clearAll() {
+        caches.clear();
+    }
+
+    /**
+     * 清除对应缓存
+     *
+     * @param key
+     */
+    public static void clearByKey(String key) {
+        if (isContains(key)) {
+            caches.remove(key);
+        }
+    }
+
+    /**
+     * 缓存是否为空
+     */
+    public boolean isEmpty() {
+        return caches.isEmpty();
+    }
+
+    /**
+     * 缓存是否超时失效
+     *
+     * @param key
+     * @return
+     */
+    public boolean isTimeOut(String key) {
+        if (!caches.containsKey(key)) {
+            return true;
+        }
+        CacheManagerEntity cache = caches.get(key);
+        long timeOut = cache.getTimeOut();
+        long lastRefreshTime = cache.getLastRefeshTime();
+        if (timeOut == 0 || System.currentTimeMillis() - lastRefreshTime >= timeOut) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 获取所有key
+     *
+     * @return
+     */
+    public Set<String> getAllKeys() {
+        return caches.keySet();
+    }
+
+}

+ 54 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/cache/CacheManagerEntity.java

@@ -0,0 +1,54 @@
+package com.ruoyi.common.utils.cache;
+
+
+public class CacheManagerEntity {
+
+    /**
+     * 保存的数据
+     */
+    private Object datas;
+
+    /**
+     * 设置数据失效时间,为0表示永不失效
+     */
+    private long timeOut;
+
+    /**
+     * 最后刷新时间
+     */
+    private long lastRefeshTime;
+
+    public CacheManagerEntity(Object datas) {
+        this.datas = datas;
+    }
+
+    public CacheManagerEntity(Object datas, long timeOut, long lastRefeshTime) {
+        this.datas = datas;
+        this.timeOut = timeOut;
+        this.lastRefeshTime = lastRefeshTime;
+    }
+
+    public Object getDatas() {
+        return datas;
+    }
+
+    public void setDatas(Object datas) {
+        this.datas = datas;
+    }
+
+    public long getTimeOut() {
+        return timeOut;
+    }
+
+    public void setTimeOut(long timeOut) {
+        this.timeOut = timeOut;
+    }
+
+    public long getLastRefeshTime() {
+        return lastRefeshTime;
+    }
+
+    public void setLastRefeshTime(long lastRefeshTime) {
+        this.lastRefeshTime = lastRefeshTime;
+    }
+}

+ 6 - 0
ruoyi-system/pom.xml

@@ -34,6 +34,12 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-sms</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.groovy</groupId>
+            <artifactId>groovy</artifactId>
+            <version>4.0.10</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 

+ 51 - 0
ruoyi-system/src/main/java/com/ruoyi/data/controller/TblModBusController.java

@@ -0,0 +1,51 @@
+package com.ruoyi.data.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.ModbusUtils;
+import com.ruoyi.common.utils.mqtt.MQTTConnect;
+import com.ruoyi.common.utils.redis.CacheUtils;
+import com.ruoyi.data.domain.DataFormatBean;
+import com.ruoyi.data.domain.TblDatapoint;
+import com.ruoyi.data.domain.TblModbusTcp;
+import com.ruoyi.data.domain.bo.TblMqttBo;
+import com.ruoyi.data.domain.vo.TblMqttVo;
+import com.ruoyi.data.service.DataDealservice;
+import com.ruoyi.data.service.ITblDatapointService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/data/modBusTest")
+public class TblModBusController extends BaseController {
+
+    private final ModbusUtils modbusUtils;
+
+    private final ITblDatapointService tblDatapointService;
+
+    private final DataDealservice dealservice;
+
+    @GetMapping("/test")
+    public void test(DataFormatBean bean){
+        dealservice.setModBusTcp(bean);
+        dealservice.getModBusTcp(bean);
+    }
+
+    @GetMapping("/modbusTcpCache")
+    public void addModbusCache(TblModbusTcp tblModbusTcp){
+        String url = "modbus-tcp://"+tblModbusTcp.getServerIp()+":"+tblModbusTcp.getServerPort();
+        System.out.println(url);
+        try {
+            modbusUtils.createplcConnection(url,tblModbusTcp.getUuid());
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+}

+ 15 - 0
ruoyi-system/src/main/java/com/ruoyi/data/domain/DataFormatBean.java

@@ -0,0 +1,15 @@
+package com.ruoyi.data.domain;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public class DataFormatBean {
+
+    private long pointId;
+
+    private long modbusUuId;
+
+    private String value;
+}

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/data/domain/TblModbusTcp.java

@@ -23,7 +23,7 @@ public class TblModbusTcp extends BaseEntity {
     private static final long serialVersionUID=1L;
 
     /**
-     * 
+     *
      */
     @TableId(value = "id")
     private Long id;
@@ -58,7 +58,7 @@ public class TblModbusTcp extends BaseEntity {
     /**
      * 轮询间隔(ms)
      */
-    private Long interval;
+    private Long intervals;
     /**
      * 备注
      */

+ 4 - 3
ruoyi-system/src/main/java/com/ruoyi/data/domain/TblRule.java

@@ -25,7 +25,7 @@ public class TblRule extends BaseEntity {
     private static final long serialVersionUID=1L;
 
     /**
-     * 
+     *
      */
     @TableId(value = "id")
     private Long id;
@@ -52,6 +52,7 @@ public class TblRule extends BaseEntity {
     /**
      * 时间
      */
+
     private Date time;
     /**
      * 触发条件值
@@ -66,11 +67,11 @@ public class TblRule extends BaseEntity {
      */
     private String remark;
     /**
-     * 
+     *
      */
     private String expr1;
     /**
-     * 
+     *
      */
     private String expr2;
 

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/data/domain/bo/TblModbusTcpBo.java

@@ -75,7 +75,7 @@ public class TblModbusTcpBo extends BaseEntity {
      * 轮询间隔(ms)
      */
 //    @NotNull(message = "轮询间隔(ms)不能为空", groups = { AddGroup.class, EditGroup.class })
-    private Long interval;
+    private Long intervals;
 
     /**
      * 备注

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/data/domain/vo/TblModbusTcpVo.java

@@ -22,7 +22,7 @@ public class TblModbusTcpVo implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private Long id;
@@ -74,7 +74,7 @@ public class TblModbusTcpVo implements Serializable {
      */
     @ExcelProperty(value = "轮询间隔", converter = ExcelDictConvert.class)
     @ExcelDictFormat(readConverterExp = "m=s")
-    private Long interval;
+    private Long intervals;
 
     /**
      * 备注

+ 14 - 0
ruoyi-system/src/main/java/com/ruoyi/data/service/DataDealservice.java

@@ -0,0 +1,14 @@
+package com.ruoyi.data.service;
+
+import com.ruoyi.data.domain.DataFormatBean;
+import com.ruoyi.data.domain.TblModbusTcp;
+
+//协议获取数据接口
+public interface DataDealservice {
+
+    void getModBusTcp(DataFormatBean dataFormatBean);
+
+    void setModBusTcp(DataFormatBean dataFormatBean);
+
+    void createTcpConnect(TblModbusTcp tblModbusTcp);
+}

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/data/service/ITblDatapointService.java

@@ -1,6 +1,7 @@
 package com.ruoyi.data.service;
 
 import com.ruoyi.data.domain.TblDatapoint;
+import com.ruoyi.data.domain.TblSensorSbook;
 import com.ruoyi.data.domain.vo.TblDatapointVo;
 import com.ruoyi.data.domain.bo.TblDatapointBo;
 import com.ruoyi.common.core.page.TableDataInfo;
@@ -46,4 +47,8 @@ public interface ITblDatapointService {
      * 校验并批量删除点位数据信息
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    void readPlcInt(TblDatapoint entity,String url,String uuid);
+
+    void writePlcInt(TblDatapoint entity,String value,String url,String uuid);
 }

+ 67 - 0
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/DataDealServiceImpl.java

@@ -0,0 +1,67 @@
+package com.ruoyi.data.service.impl;
+
+import com.ruoyi.common.utils.ModbusUtils;
+import com.ruoyi.data.domain.DataFormatBean;
+import com.ruoyi.data.domain.TblDatapoint;
+import com.ruoyi.data.domain.TblModbusTcp;
+import com.ruoyi.data.mapper.TblDatapointMapper;
+import com.ruoyi.data.mapper.TblModbusTcpMapper;
+import com.ruoyi.data.service.DataDealservice;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.stream.Stream;
+
+@RequiredArgsConstructor
+@Service
+public class DataDealServiceImpl implements DataDealservice {
+
+    private final TblDatapointMapper datapointMapper;
+
+    private final TblModbusTcpMapper tblModbusTcpMapper;
+
+    private final ModbusUtils modbusUtils;
+    @Override
+    public void getModBusTcp(DataFormatBean dataFormatBean) {
+        TblDatapoint tblDatapoint = datapointMapper.selectById(dataFormatBean.getPointId());
+        TblModbusTcp tblModbusTcp = tblModbusTcpMapper.selectById(dataFormatBean.getModbusUuId());
+        String str = "holding-register:"+(tblDatapoint.getAddr()+tblDatapoint.getAddrOffset())+":UINT["+tblDatapoint.getLen()+"]";
+        String url = "modbus-tcp://"+tblModbusTcp.getServerIp()+":"+tblModbusTcp.getServerPort();
+        String connectKey = "tcp"+tblModbusTcp.getUuid();
+        String dataKey = "tcp"+tblDatapoint.getId().toString();
+        try{
+            modbusUtils.plcRead(url,connectKey,dataKey,str);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void setModBusTcp(DataFormatBean dataFormatBean) {
+        TblDatapoint tblDatapoint = datapointMapper.selectById(dataFormatBean.getPointId());
+        TblModbusTcp tblModbusTcp = tblModbusTcpMapper.selectById(dataFormatBean.getModbusUuId());
+        String str = "holding-register:"+(tblDatapoint.getAddr()+tblDatapoint.getAddrOffset())+":UINT["+tblDatapoint.getLen()+"]";
+        String url = "modbus-tcp://"+tblModbusTcp.getServerIp()+":"+tblModbusTcp.getServerPort();
+        String connectKey = "tcp"+tblModbusTcp.getUuid();
+        String[] valueArrary = dataFormatBean.getValue().split(",");
+        Integer[] arr2 = Stream.of(valueArrary).mapToInt(Integer::parseInt).boxed().toArray(Integer[] ::new);
+        String dataKey = "tcp"+tblDatapoint.getId().toString();
+        try{
+            modbusUtils.plcWrite(url,connectKey,connectKey,str,arr2);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void createTcpConnect(TblModbusTcp tblModbusTcp) {
+        String url = "modbus-tcp://"+tblModbusTcp.getServerIp()+":"+tblModbusTcp.getServerPort();
+        try {
+            modbusUtils.createplcConnection(url,tblModbusTcp.getUuid());
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+
+}

+ 41 - 0
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/TblDatapointServiceImpl.java

@@ -1,12 +1,14 @@
 package com.ruoyi.data.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.ruoyi.common.utils.ModbusUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.core.domain.PageQuery;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.data.domain.TblSensorSbook;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import com.ruoyi.data.domain.bo.TblDatapointBo;
@@ -14,6 +16,7 @@ import com.ruoyi.data.domain.vo.TblDatapointVo;
 import com.ruoyi.data.domain.TblDatapoint;
 import com.ruoyi.data.mapper.TblDatapointMapper;
 import com.ruoyi.data.service.ITblDatapointService;
+import java.util.stream.Stream;
 
 import java.util.List;
 import java.util.Map;
@@ -31,6 +34,8 @@ public class TblDatapointServiceImpl implements ITblDatapointService {
 
     private final TblDatapointMapper baseMapper;
 
+    private final ModbusUtils modbusUtils;
+
     /**
      * 查询点位数据
      */
@@ -113,4 +118,40 @@ public class TblDatapointServiceImpl implements ITblDatapointService {
         }
         return baseMapper.deleteBatchIds(ids) > 0;
     }
+
+    @Override
+    public void readPlcInt(TblDatapoint entity,String url,String uuid) {
+//        String uuid = "test";
+        String name = entity.getName();
+        String str = "holding-register:"+(entity.getAddr()+entity.getAddrOffset())+":UINT["+entity.getLen()+"]";
+        System.out.println(str);
+        try {
+            modbusUtils.plcRead(url,uuid,name,str);
+//            modbusUtils.plcSynchronizationValue("modbus-tcp://127.0.0.1:502");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void writePlcInt(TblDatapoint entity,String value,String url,String uuid) {
+        String name = entity.getName();
+        String str = "holding-register:"+(entity.getAddr()+entity.getAddrOffset())+":UINT["+entity.getLen()+"]";
+        String[] valueArrary = value.split(",");
+        Integer[] arr2 = Stream.of(valueArrary).mapToInt(Integer::parseInt).boxed().toArray(Integer[] ::new);
+
+//        for(int i=0;i<valueArrary.length;i++){
+//
+//        }
+        System.out.println(str);
+        try {
+            modbusUtils.plcWrite(url,uuid,name,str,arr2);
+//            modbusUtils.plcSynchronizationValue("modbus-tcp://127.0.0.1:502");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+
+
 }

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/TblModbusTcpServiceImpl.java

@@ -68,7 +68,7 @@ public class TblModbusTcpServiceImpl implements ITblModbusTcpService {
         lqw.eq(StringUtils.isNotBlank(bo.getServerPort()), TblModbusTcp::getServerPort, bo.getServerPort());
         lqw.eq(StringUtils.isNotBlank(bo.getApiUrl()), TblModbusTcp::getApiUrl, bo.getApiUrl());
         lqw.eq(StringUtils.isNotBlank(bo.getUuid()), TblModbusTcp::getUuid, bo.getUuid());
-        lqw.eq(bo.getInterval() != null, TblModbusTcp::getInterval, bo.getInterval());
+        lqw.eq(bo.getIntervals() != null, TblModbusTcp::getIntervals, bo.getIntervals());
         return lqw;
     }
 

+ 1 - 1
ruoyi-system/src/main/resources/mapper/data/TblModbusTcpMapper.xml

@@ -13,7 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="serverPort" column="server_port"/>
         <result property="apiUrl" column="api_url"/>
         <result property="uuid" column="uuid"/>
-        <result property="interval" column="interval"/>
+        <result property="intervals" column="intervals"/>
         <result property="remark" column="remark"/>
         <result property="createBy" column="create_by"/>
         <result property="createTime" column="create_time"/>