perf: 调整红外温度采集业务逻辑

dev
huangfeng 3 months ago
parent 9f68963658
commit b87e700097

@ -2,12 +2,15 @@ ALTER TABLE `n_sensor`
ADD COLUMN `ip` VARCHAR(45) NULL AFTER `order_num`, ADD COLUMN `ip` VARCHAR(45) NULL AFTER `order_num`,
ADD COLUMN `port` INT NULL AFTER `ip`, ADD COLUMN `port` INT NULL AFTER `ip`,
ADD COLUMN `username` VARCHAR(45) NULL AFTER `port`, 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` ( CREATE TABLE `thermal_config` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`type_id` int(11) DEFAULT NULL COMMENT '类型id', `type_id` int(11) DEFAULT NULL COMMENT '类型id',
`maxtemp` varchar(45) DEFAULT NULL, `maxtemp` varchar(45) DEFAULT NULL,
`mintemp` varchar(45) DEFAULT NULL, `mintemp` varchar(45) DEFAULT NULL,
`avertemp` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

@ -1,8 +1,11 @@
package com.netsdk; package com.netsdk;
import com.netsdk.lib.NetSDKLib;
import com.netsdk.lib.callback.impl.DefaultDisconnectCallback; import com.netsdk.lib.callback.impl.DefaultDisconnectCallback;
import com.netsdk.lib.callback.impl.DefaultHaveReconnectCallBack; import com.netsdk.lib.callback.impl.DefaultHaveReconnectCallBack;
import com.netsdk.module.BaseModule; import com.netsdk.module.BaseModule;
import com.netsdk.module.LoginModule;
import com.netsdk.module.ThermalCameraModule;
import com.netsdk.module.entity.DeviceInfo; import com.netsdk.module.entity.DeviceInfo;
/** /**
@ -13,11 +16,12 @@ import com.netsdk.module.entity.DeviceInfo;
*/ */
public class SDKTest { public class SDKTest {
public static void main(String[] args) { public static void main(String[] args) {
BaseModule baseModule=new BaseModule(); LoginModule.init(null,null);
baseModule.init(DefaultDisconnectCallback.getINSTANCE(), DefaultHaveReconnectCallBack.getINSTANCE(),true); LoginModule.login("192.168.1.221",37777,"admin","admin123");
DeviceInfo info=baseModule.login("192.168.1.221",37777,"admin","admin123"); NetSDKLib.NET_RADIOMETRYINFO data = ThermalCameraModule.queryItemTemper(0, 0,1, 3);
System.out.println(info.getLoginHandler()); LoginModule.logout();
baseModule.logout(info.getLoginHandler()); LoginModule.cleanup();
baseModule.clean();
} }
} }

@ -40,22 +40,6 @@ public class LoginModule {
return false; 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内部会自动进行重连操作 // 设置断线重连回调接口设置过断线重连成功回调函数后当设备出现断线情况SDK内部会自动进行重连操作
// 此操作为可选操作,但建议用户进行设置 // 此操作为可选操作,但建议用户进行设置

@ -7,6 +7,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import javax.persistence.*; import javax.persistence.*;
import java.util.ArrayList; import java.util.ArrayList;
@ -84,6 +85,14 @@ public class NSensor {
@Column(name = "passwd") @Column(name = "passwd")
private String passwd; private String passwd;
@Column(name = "tm_id")
@ApiModelProperty("tmId")
private Integer tmId;
@Column(name = "tm_type")
@ApiModelProperty("tmType")
private Integer tmType;
@ApiModelProperty("主设备名称") @ApiModelProperty("主设备名称")
@Transient @Transient
private String zsbName; private String zsbName;
@ -124,4 +133,13 @@ public class NSensor {
points.add(point); points.add(point);
return null; 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;
}
}
} }

@ -31,11 +31,15 @@ public class ThermalConfig {
@ApiModelProperty("类型Id") @ApiModelProperty("类型Id")
private Integer typeId; private Integer typeId;
@ApiModelProperty("最高温字段") @ApiModelProperty("最高温字段")
@Column(name = "maxtemp") @Column(name = "maxtemp")
private String maxtemp; private String maxtemp;
@ApiModelProperty("最低温字段") @ApiModelProperty("最低温字段")
@Column(name = "mintemp") @Column(name = "mintemp")
private String mintemp; private String mintemp;
@ApiModelProperty("平均温度字段")
@Column(name = "avertemp")
private String avertemp;
} }

@ -50,9 +50,4 @@ public class AsyncTask {
warningRepository, spectrogramHandler); warningRepository, spectrogramHandler);
iedService.collectAndSave(rptList, dlList); iedService.collectAndSave(rptList, dlList);
} }
@Async
public void collectSensor(NSensor sensor, ThermalConfig config) {
}
} }

@ -6,6 +6,7 @@ import com.xydl.cac.entity.ThermalConfig;
import com.xydl.cac.repository.NSensorRepository; import com.xydl.cac.repository.NSensorRepository;
import com.xydl.cac.service.ModevTypeService; import com.xydl.cac.service.ModevTypeService;
import com.xydl.cac.service.ThermalConfigService; import com.xydl.cac.service.ThermalConfigService;
import com.xydl.cac.thermal.ThermalCollectService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -13,8 +14,7 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.PreDestroy; import javax.annotation.PreDestroy;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Calendar; import java.util.*;
import java.util.List;
@Service @Service
@Slf4j @Slf4j
@ -27,9 +27,10 @@ public class ClientThermalTask {
@Resource @Resource
NSensorRepository sensorRepository; NSensorRepository sensorRepository;
@Resource @Resource
AsyncTask asyncTask; ThermalCollectService collectService;
int shutdown = 0; int shutdown = 0;
boolean inDoing = false;
@PreDestroy @PreDestroy
private void preDestroy() { private void preDestroy() {
@ -42,7 +43,10 @@ public class ClientThermalTask {
if (config == null) { if (config == null) {
return; return;
} }
if (inDoing) {
return;
}
inDoing = true;
try { try {
Calendar cal = Calendar.getInstance(); Calendar cal = Calendar.getInstance();
int h = cal.get(Calendar.HOUR_OF_DAY); int h = cal.get(Calendar.HOUR_OF_DAY);
@ -60,6 +64,8 @@ public class ClientThermalTask {
} }
} catch (Exception e) { } catch (Exception e) {
log.error("ClientThermalTask.collectAll error.", e); log.error("ClientThermalTask.collectAll error.", e);
} finally {
inDoing = false;
} }
} }
@ -71,9 +77,25 @@ 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());
asyncTask.collectSensor(sensor, config); 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);
} }
} }
} }

@ -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<NSensor> 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();
}
}
}
Loading…
Cancel
Save