diff --git a/db/upgrade20250616.sql b/db/upgrade20250616.sql index da8301f..32eb96e 100644 --- a/db/upgrade20250616.sql +++ b/db/upgrade20250616.sql @@ -7,3 +7,6 @@ CREATE TABLE `iec_104_point` ( `create_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +ALTER TABLE `n_sensor` +ADD COLUMN `sdk_type` INT NULL COMMENT '1:大华 2:海康' AFTER `tm_type`; diff --git a/src/main/java/com/xydl/cac/entity/NSensor.java b/src/main/java/com/xydl/cac/entity/NSensor.java index 8bf4acc..3629ec6 100644 --- a/src/main/java/com/xydl/cac/entity/NSensor.java +++ b/src/main/java/com/xydl/cac/entity/NSensor.java @@ -93,6 +93,10 @@ public class NSensor { @ApiModelProperty("tmType") private Integer tmType; + @Column(name = "sdk_type") + @ApiModelProperty("sdkType") + private Integer sdkType; + @ApiModelProperty("主设备名称") @Transient private String zsbName; diff --git a/src/main/java/com/xydl/cac/task/ClientThermalTask.java b/src/main/java/com/xydl/cac/task/ClientThermalTask.java index c07d5df..a9bc0e2 100644 --- a/src/main/java/com/xydl/cac/task/ClientThermalTask.java +++ b/src/main/java/com/xydl/cac/task/ClientThermalTask.java @@ -77,25 +77,9 @@ public class ClientThermalTask { if (CollectionUtils.isEmpty(list)) { return; } - HashMap> map = new HashMap<>(); - for (NSensor sensor : list) { sensor.setTableName(modevType.getTablename()); - 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); } + collectService.collectAndSave(list, config); } } diff --git a/src/main/java/com/xydl/cac/thermal/DahuaThermalService.java b/src/main/java/com/xydl/cac/thermal/DahuaThermalService.java new file mode 100644 index 0000000..4c62f3b --- /dev/null +++ b/src/main/java/com/xydl/cac/thermal/DahuaThermalService.java @@ -0,0 +1,83 @@ +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.model.StaticVariable; +import com.xydl.cac.service.DataService; +import com.xydl.cac.util.DateUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.PreDestroy; +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + +@Service +@Slf4j +public class DahuaThermalService { + + @Resource + DataService dataService; + + int shutdown = 0; + + @PreDestroy + private void preDestroy() { + shutdown = 1; + } + + public void collectAndSave(List list, ThermalConfig config) { + if (shutdown == 1) { + return; + } + try { + LoginModule.init(null, null); + NSensor sensor = list.get(0); + boolean r = LoginModule.login(sensor.getIp(), sensor.getPort(), sensor.getUsername(), sensor.getPasswd()); + if (r) { + log.info("登入成功" + sensor.getIp() + ":" + sensor.getPort() + ", 用户名:" + sensor.getUsername()); + } else { + log.error("登入失败" + sensor.getIp() + ":" + sensor.getPort() + ", 用户名:" + sensor.getUsername()); + return; + } + String time = DateUtil.format(new Date()); + for (NSensor item : list) { + NetSDKLib.NET_RADIOMETRYINFO data = ThermalCameraModule.queryItemTemper(0, 0, sensor.getTmId(), sensor.getTmType()); + if (data == null) { + log.warn("没有采集到数据, 序号" + item.getTmId() + "测量项目" + sensor.getTmType()); + } else { + log.info("采集到序号" + item.getTmId() + "测量项目" + sensor.getTmType() + "的max=" + + data.fTemperMax + ", min=" + data.fTemperMin + ", aver=" + data.fTemperAver); + if (StringUtils.isNotBlank(config.getMaxtemp())) { + String value = String.valueOf(data.fTemperMax); + dataService.insertData(item.getTableName(), item.getDevId(), time, config.getMaxtemp(), value); + // 更新最新数据缓存 + StaticVariable.updateLastData(item.getDevId(), config.getMaxtemp(), value, time); + } + if (StringUtils.isNotBlank(config.getMintemp())) { + String value = String.valueOf(data.fTemperMin); + dataService.insertData(item.getTableName(), item.getDevId(), time, config.getMintemp(), value); + // 更新最新数据缓存 + StaticVariable.updateLastData(item.getDevId(), config.getMintemp(), value, time); + } + if (StringUtils.isNotBlank(config.getAvertemp())) { + String value = String.valueOf(data.fTemperAver); + dataService.insertData(item.getTableName(), item.getDevId(), time, config.getAvertemp(), value); + // 更新最新数据缓存 + StaticVariable.updateLastData(item.getDevId(), config.getAvertemp(), value, time); + } + } + } + LoginModule.logout(); + } catch (Exception ex) { + log.error("大华热成像测温采集异常, " + ex.getMessage(), ex); + } finally { + LoginModule.cleanup(); + } + } +} diff --git a/src/main/java/com/xydl/cac/thermal/HikThermalService.java b/src/main/java/com/xydl/cac/thermal/HikThermalService.java new file mode 100644 index 0000000..da9c8d6 --- /dev/null +++ b/src/main/java/com/xydl/cac/thermal/HikThermalService.java @@ -0,0 +1,32 @@ +package com.xydl.cac.thermal; + +import com.xydl.cac.entity.NSensor; +import com.xydl.cac.entity.ThermalConfig; +import com.xydl.cac.service.DataService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.PreDestroy; +import javax.annotation.Resource; +import java.util.List; + +@Service +@Slf4j +public class HikThermalService { + + @Resource + DataService dataService; + + int shutdown = 0; + + @PreDestroy + private void preDestroy() { + shutdown = 1; + } + + public void collectAndSave(List list, ThermalConfig config) { + if (shutdown == 1) { + return; + } + } +} diff --git a/src/main/java/com/xydl/cac/thermal/ThermalCollectService.java b/src/main/java/com/xydl/cac/thermal/ThermalCollectService.java index 3b13272..8ffb0e7 100644 --- a/src/main/java/com/xydl/cac/thermal/ThermalCollectService.java +++ b/src/main/java/com/xydl/cac/thermal/ThermalCollectService.java @@ -1,73 +1,80 @@ 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.model.StaticVariable; -import com.xydl.cac.service.DataService; -import com.xydl.cac.util.DateUtil; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.Date; -import java.util.List; +import java.util.*; @Service @Slf4j public class ThermalCollectService { @Resource - DataService dataService; + DahuaThermalService dahuaThermalService; + @Resource + HikThermalService hikThermalService; public void collectAndSave(List list, ThermalConfig config) { - try { - LoginModule.init(null, null); - NSensor sensor = list.get(0); - boolean r = LoginModule.login(sensor.getIp(), sensor.getPort(), sensor.getUsername(), sensor.getPasswd()); - if (r) { - log.info("登入成功" + sensor.getIp() + ":" + sensor.getPort() + ", 用户名:" + sensor.getUsername()); + List dahuaList = new ArrayList<>(); + List hikList = new ArrayList<>(); + for (NSensor sensor : list) { + if (sensor.getSdkType() != null && sensor.getSdkType().intValue() == 2) { + hikList.add(sensor); } else { - log.error("登入失败" + sensor.getIp() + ":" + sensor.getPort() + ", 用户名:" + sensor.getUsername()); - return; + dahuaList.add(sensor); } - String time = DateUtil.format(new Date()); - for (NSensor item : list) { - NetSDKLib.NET_RADIOMETRYINFO data = ThermalCameraModule.queryItemTemper(0, 0, sensor.getTmId(), sensor.getTmType()); - if (data == null) { - log.warn("没有采集到数据, 序号" + item.getTmId() + "测量项目" + sensor.getTmType()); - } else { - log.info("采集到序号" + item.getTmId() + "测量项目" + sensor.getTmType() + "的max=" - + data.fTemperMax + ", min=" + data.fTemperMin + ", aver=" + data.fTemperAver); - if (StringUtils.isNotBlank(config.getMaxtemp())) { - String value = String.valueOf(data.fTemperMax); - dataService.insertData(item.getTableName(), item.getDevId(), time, config.getMaxtemp(), value); - // 更新最新数据缓存 - StaticVariable.updateLastData(item.getDevId(), config.getMaxtemp(), value, time); - } - if (StringUtils.isNotBlank(config.getMintemp())) { - String value = String.valueOf(data.fTemperMin); - dataService.insertData(item.getTableName(), item.getDevId(), time, config.getMintemp(), value); - // 更新最新数据缓存 - StaticVariable.updateLastData(item.getDevId(), config.getMintemp(), value, time); - } - if (StringUtils.isNotBlank(config.getAvertemp())) { - String value = String.valueOf(data.fTemperAver); - dataService.insertData(item.getTableName(), item.getDevId(), time, config.getAvertemp(), value); - // 更新最新数据缓存 - StaticVariable.updateLastData(item.getDevId(), config.getAvertemp(), value, time); - } + } + if (!CollectionUtils.isEmpty(dahuaList)) { + this.collectAndSaveDahua(dahuaList, config); + } + if (!CollectionUtils.isEmpty(hikList)) { + this.collectAndSaveHik(hikList, config); + } + } + + private void collectAndSaveDahua(List list, ThermalConfig config) { + HashMap> map = new HashMap<>(); + for (NSensor sensor : list) { + 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); + dahuaThermalService.collectAndSave(sub, config); + } + } - LoginModule.logout(); - } catch (Exception ex) { - log.error("热成像测温采集异常, " + ex.getMessage(), ex); - } finally { - LoginModule.cleanup(); + private void collectAndSaveHik(List list, ThermalConfig config) { + HashMap> map = new HashMap<>(); + for (NSensor sensor : list) { + 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); + hikThermalService.collectAndSave(sub, config); } } }