diff --git a/db/upgrade20250325.sql b/db/upgrade20250325.sql index a3b5824..8db437a 100644 --- a/db/upgrade20250325.sql +++ b/db/upgrade20250325.sql @@ -2,12 +2,15 @@ ALTER TABLE `n_sensor` ADD COLUMN `ip` VARCHAR(45) NULL AFTER `order_num`, ADD COLUMN `port` INT NULL AFTER `ip`, ADD COLUMN `username` VARCHAR(45) NULL AFTER `port`, -ADD COLUMN `passwd` VARCHAR(45) NULL AFTER `username`; +ADD COLUMN `passwd` VARCHAR(45) NULL AFTER `username`, +ADD COLUMN `tm_id` INT NULL AFTER `passwd`, +ADD COLUMN `tm_type` INT NULL AFTER `tm_id`; CREATE TABLE `thermal_config` ( `id` int(11) NOT NULL AUTO_INCREMENT, `type_id` int(11) DEFAULT NULL COMMENT '类型id', `maxtemp` varchar(45) DEFAULT NULL, `mintemp` varchar(45) DEFAULT NULL, + `avertemp` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/src/main/java/com/netsdk/SDKTest.java b/src/main/java/com/netsdk/SDKTest.java index 266544b..4006b68 100644 --- a/src/main/java/com/netsdk/SDKTest.java +++ b/src/main/java/com/netsdk/SDKTest.java @@ -1,8 +1,11 @@ package com.netsdk; +import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.callback.impl.DefaultDisconnectCallback; import com.netsdk.lib.callback.impl.DefaultHaveReconnectCallBack; import com.netsdk.module.BaseModule; +import com.netsdk.module.LoginModule; +import com.netsdk.module.ThermalCameraModule; import com.netsdk.module.entity.DeviceInfo; /** @@ -13,11 +16,12 @@ import com.netsdk.module.entity.DeviceInfo; */ public class SDKTest { public static void main(String[] args) { - BaseModule baseModule=new BaseModule(); - baseModule.init(DefaultDisconnectCallback.getINSTANCE(), DefaultHaveReconnectCallBack.getINSTANCE(),true); - DeviceInfo info=baseModule.login("192.168.1.221",37777,"admin","admin123"); - System.out.println(info.getLoginHandler()); - baseModule.logout(info.getLoginHandler()); - baseModule.clean(); + LoginModule.init(null,null); + LoginModule.login("192.168.1.221",37777,"admin","admin123"); + NetSDKLib.NET_RADIOMETRYINFO data = ThermalCameraModule.queryItemTemper(0, 0,1, 3); + LoginModule.logout(); + LoginModule.cleanup(); + + } } diff --git a/src/main/java/com/netsdk/module/LoginModule.java b/src/main/java/com/netsdk/module/LoginModule.java index e3e0fa9..55a6971 100644 --- a/src/main/java/com/netsdk/module/LoginModule.java +++ b/src/main/java/com/netsdk/module/LoginModule.java @@ -40,23 +40,7 @@ public class LoginModule { return false; } - //打开日志,可选 - NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO(); - File path = new File("./sdklog/"); - if (!path.exists()) { - path.mkdir(); - } - String logPath = path.getAbsoluteFile().getParent() + "\\sdklog\\" + ToolKits.getDate() + ".log"; - setLog.nPrintStrategy = 0; - setLog.bSetFilePath = 1; - System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length); - System.out.println(logPath); - setLog.bSetPrintStrategy = 1; - bLogopen = netsdk.CLIENT_LogOpen(setLog); - if(!bLogopen ) { - System.err.println("Failed to open NetSDK log"); - } - + // 设置断线重连回调接口,设置过断线重连成功回调函数后,当设备出现断线情况,SDK内部会自动进行重连操作 // 此操作为可选操作,但建议用户进行设置 netsdk.CLIENT_SetAutoReconnect(haveReConnect, null); diff --git a/src/main/java/com/xydl/cac/entity/NSensor.java b/src/main/java/com/xydl/cac/entity/NSensor.java index 9cae80d..8bf4acc 100644 --- a/src/main/java/com/xydl/cac/entity/NSensor.java +++ b/src/main/java/com/xydl/cac/entity/NSensor.java @@ -7,6 +7,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; import javax.persistence.*; import java.util.ArrayList; @@ -84,6 +85,14 @@ public class NSensor { @Column(name = "passwd") private String passwd; + @Column(name = "tm_id") + @ApiModelProperty("tmId") + private Integer tmId; + + @Column(name = "tm_type") + @ApiModelProperty("tmType") + private Integer tmType; + @ApiModelProperty("主设备名称") @Transient private String zsbName; @@ -124,4 +133,13 @@ public class NSensor { points.add(point); return null; } + + public boolean canTempMeasure() { + if (StringUtils.isNotBlank(ip) && StringUtils.isNotBlank(username) && StringUtils.isNotBlank(passwd) + && port != null && tmId != null && tmType != null) { + return true; + } else { + return false; + } + } } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/entity/ThermalConfig.java b/src/main/java/com/xydl/cac/entity/ThermalConfig.java index 55d7ce6..ddf8c33 100644 --- a/src/main/java/com/xydl/cac/entity/ThermalConfig.java +++ b/src/main/java/com/xydl/cac/entity/ThermalConfig.java @@ -31,11 +31,15 @@ public class ThermalConfig { @ApiModelProperty("类型Id") private Integer typeId; - @ApiModelProperty("最高温字段") + @ApiModelProperty("最高温度字段") @Column(name = "maxtemp") private String maxtemp; - @ApiModelProperty("最低温字段") + @ApiModelProperty("最低温度字段") @Column(name = "mintemp") private String mintemp; + + @ApiModelProperty("平均温度字段") + @Column(name = "avertemp") + private String avertemp; } \ No newline at end of file diff --git a/src/main/java/com/xydl/cac/task/AsyncTask.java b/src/main/java/com/xydl/cac/task/AsyncTask.java index e9ac3df..50f930e 100644 --- a/src/main/java/com/xydl/cac/task/AsyncTask.java +++ b/src/main/java/com/xydl/cac/task/AsyncTask.java @@ -50,9 +50,4 @@ public class AsyncTask { warningRepository, spectrogramHandler); iedService.collectAndSave(rptList, dlList); } - - @Async - public void collectSensor(NSensor sensor, ThermalConfig config) { - - } } diff --git a/src/main/java/com/xydl/cac/task/ClientThermalTask.java b/src/main/java/com/xydl/cac/task/ClientThermalTask.java index f361fc6..c07d5df 100644 --- a/src/main/java/com/xydl/cac/task/ClientThermalTask.java +++ b/src/main/java/com/xydl/cac/task/ClientThermalTask.java @@ -6,6 +6,7 @@ import com.xydl.cac.entity.ThermalConfig; import com.xydl.cac.repository.NSensorRepository; import com.xydl.cac.service.ModevTypeService; import com.xydl.cac.service.ThermalConfigService; +import com.xydl.cac.thermal.ThermalCollectService; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -13,8 +14,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.PreDestroy; import javax.annotation.Resource; -import java.util.Calendar; -import java.util.List; +import java.util.*; @Service @Slf4j @@ -27,9 +27,10 @@ public class ClientThermalTask { @Resource NSensorRepository sensorRepository; @Resource - AsyncTask asyncTask; + ThermalCollectService collectService; int shutdown = 0; + boolean inDoing = false; @PreDestroy private void preDestroy() { @@ -42,7 +43,10 @@ public class ClientThermalTask { if (config == null) { return; } - + if (inDoing) { + return; + } + inDoing = true; try { Calendar cal = Calendar.getInstance(); int h = cal.get(Calendar.HOUR_OF_DAY); @@ -60,6 +64,8 @@ public class ClientThermalTask { } } catch (Exception e) { log.error("ClientThermalTask.collectAll error.", e); + } finally { + inDoing = false; } } @@ -71,9 +77,25 @@ public class ClientThermalTask { if (CollectionUtils.isEmpty(list)) { return; } + HashMap> map = new HashMap<>(); + for (NSensor sensor : list) { sensor.setTableName(modevType.getTablename()); - asyncTask.collectSensor(sensor, config); + if (sensor.canTempMeasure()) { + String key = sensor.getIp() + sensor.getPort() + sensor.getUsername(); + List sub = map.get(key); + if (sub == null) { + sub = new ArrayList<>(); + map.put(key, sub); + } + sub.add(sensor); + } + } + Iterator it = map.keySet().iterator(); + while (it.hasNext()) { + String key = it.next(); + List sub = map.get(key); + collectService.collectAndSave(sub, config); } } } diff --git a/src/main/java/com/xydl/cac/thermal/ThermalCollectService.java b/src/main/java/com/xydl/cac/thermal/ThermalCollectService.java new file mode 100644 index 0000000..d76f81f --- /dev/null +++ b/src/main/java/com/xydl/cac/thermal/ThermalCollectService.java @@ -0,0 +1,47 @@ +package com.xydl.cac.thermal; + +import com.netsdk.lib.NetSDKLib; +import com.netsdk.module.LoginModule; +import com.netsdk.module.ThermalCameraModule; +import com.xydl.cac.entity.NSensor; +import com.xydl.cac.entity.ThermalConfig; +import com.xydl.cac.service.DataService; +import com.xydl.cac.util.DateUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + +@Service +@Slf4j +public class ThermalCollectService { + + @Resource + DataService dataService; + + public void collectAndSave(List list, ThermalConfig config) { + try { + LoginModule.init(null, null); + NSensor sensor = list.get(0); + LoginModule.login(sensor.getIp(), sensor.getPort(), sensor.getUsername(), sensor.getPasswd()); + log.info("登入到" + sensor.getIp() + ":" + sensor.getPort() + ", 用户名:" + sensor.getUsername()); + String time = DateUtil.format(new Date()); + for (NSensor item : list) { + NetSDKLib.NET_RADIOMETRYINFO data = ThermalCameraModule.queryItemTemper(0, 0, sensor.getTmId(), sensor.getTmType()); + log.info("采集到序号" + item.getTmId() + "测量项目" + sensor.getTmType() + "的max=" + + data.fTemperMax + ", min=" + data.fTemperMin + ", aver=" + data.fTemperAver); + dataService.insertData(item.getTableName(), item.getDevId(), time, config.getMaxtemp(), String.valueOf(data.fTemperMax)); + dataService.insertData(item.getTableName(), item.getDevId(), time, config.getMintemp(), String.valueOf(data.fTemperMin)); + dataService.insertData(item.getTableName(), item.getDevId(), time, config.getAvertemp(), String.valueOf(data.fTemperAver)); + } + + LoginModule.logout(); + } catch (Exception ex) { + log.error("热成像测温采集异常, " + ex.getMessage(), ex); + } finally { + LoginModule.cleanup(); + } + } +}