perf: 优化测温采集的统一流程

dev
huangfeng 14 hours ago
parent d06a31a75e
commit 334d317679

@ -77,25 +77,9 @@ public class ClientThermalTask {
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {
return; return;
} }
HashMap<String, List<NSensor>> map = new HashMap<>();
for (NSensor sensor : list) { for (NSensor sensor : list) {
sensor.setTableName(modevType.getTablename()); sensor.setTableName(modevType.getTablename());
if (sensor.canTempMeasure()) {
String key = sensor.getIp() + sensor.getPort() + sensor.getUsername();
List<NSensor> sub = map.get(key);
if (sub == null) {
sub = new ArrayList<>();
map.put(key, sub);
}
sub.add(sensor);
}
}
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
List<NSensor> sub = map.get(key);
collectService.collectAndSave(sub, config);
} }
collectService.collectAndSave(list, config);
} }
} }

@ -0,0 +1,85 @@
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 DHThermalService {
@Resource
DataService dataService;
int shutdown = 0;
@PreDestroy
private void preDestroy() {
shutdown = 1;
}
public void collectAndSave(List<NSensor> 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() + ", 密码:" + sensor.getPasswd());
} else {
log.error("大华热成像登入失败" + sensor.getIp() + ":" + sensor.getPort()
+ ", 用户名:" + sensor.getUsername() + ", 密码:" + sensor.getPasswd());
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();
}
}
}

@ -1,73 +1,39 @@
package com.xydl.cac.thermal; 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.NSensor;
import com.xydl.cac.entity.ThermalConfig; 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 lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Date; import java.util.*;
import java.util.List;
@Service @Service
@Slf4j @Slf4j
public class ThermalCollectService { public class ThermalCollectService {
@Resource @Resource
DataService dataService; DHThermalService thermalService;
public void collectAndSave(List<NSensor> list, ThermalConfig config) { public void collectAndSave(List<NSensor> list, ThermalConfig config) {
try { HashMap<String, List<NSensor>> map = new HashMap<>();
LoginModule.init(null, null); for (NSensor sensor : list) {
NSensor sensor = list.get(0); if (sensor.canTempMeasure()) {
boolean r = LoginModule.login(sensor.getIp(), sensor.getPort(), sensor.getUsername(), sensor.getPasswd()); String key = sensor.getIp() + sensor.getPort() + sensor.getUsername();
if (r) { List<NSensor> sub = map.get(key);
log.info("登入成功" + sensor.getIp() + ":" + sensor.getPort() + ", 用户名:" + sensor.getUsername()); if (sub == null) {
} else { sub = new ArrayList<>();
log.error("登入失败" + sensor.getIp() + ":" + sensor.getPort() + ", 用户名:" + sensor.getUsername()); map.put(key, sub);
return;
} }
String time = DateUtil.format(new Date()); sub.add(sensor);
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);
} }
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
List<NSensor> sub = map.get(key);
thermalService.collectAndSave(sub, config);
} }
} }
LoginModule.logout();
} catch (Exception ex) {
log.error("热成像测温采集异常, " + ex.getMessage(), ex);
} finally {
LoginModule.cleanup();
}
}
} }

Loading…
Cancel
Save