diff --git a/src/main/java/com/xydl/cac/thermal/HCRemoteConfigCallBack.java b/src/main/java/com/xydl/cac/thermal/HCRemoteConfigCallBack.java index df265af..bb2a69a 100644 --- a/src/main/java/com/xydl/cac/thermal/HCRemoteConfigCallBack.java +++ b/src/main/java/com/xydl/cac/thermal/HCRemoteConfigCallBack.java @@ -3,15 +3,9 @@ package com.xydl.cac.thermal; import com.hcsdk.HCNetSDK; import com.sun.jna.Pointer; 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 lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; -import javax.annotation.Resource; - @Service @Slf4j public class HCRemoteConfigCallBack implements HCNetSDK.FRemoteConfigCallBack { @@ -19,43 +13,38 @@ public class HCRemoteConfigCallBack implements HCNetSDK.FRemoteConfigCallBack { public boolean done; public NSensor item; public String time; - public ThermalConfig config; - - @Resource - DataService dataService; + public HCThermalService service; @Override public void invoke(int dwType, Pointer lpBuffer, int dwBufLen, Pointer pUserData) { if (done) { return; } - HCNetSDK.NET_DVR_THERMOMETRY_UPLOAD data = new HCNetSDK.NET_DVR_THERMOMETRY_UPLOAD(); - Pointer pointer = data.getPointer(); - pointer.write(0, lpBuffer.getByteArray(0, data.size()), 0, data.size()); - data.read(); - float fAverageTemperature = data.struLinePolygonThermCfg.fAverageTemperature; - float fMinTemperature = data.struLinePolygonThermCfg.fMinTemperature; - float fMaxTemperature = data.struLinePolygonThermCfg.fMaxTemperature; - log.info("海康热成像采集到max=" + fMaxTemperature + ", min=" + fMinTemperature + ", aver=" + fAverageTemperature); - done = true; - - if (StringUtils.isNotBlank(config.getMaxtemp())) { - String value = String.valueOf(fMaxTemperature); - 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(fMinTemperature); - 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(fAverageTemperature); - dataService.insertData(item.getTableName(), item.getDevId(), time, config.getAvertemp(), value); - // 更新最新数据缓存 - StaticVariable.updateLastData(item.getDevId(), config.getAvertemp(), value, time); + try { + HCNetSDK.NET_DVR_THERMOMETRY_UPLOAD data = new HCNetSDK.NET_DVR_THERMOMETRY_UPLOAD(); + Pointer pointer = data.getPointer(); + pointer.write(0, lpBuffer.getByteArray(0, data.size()), 0, data.size()); + data.read(); + float max, min, aver; + if (0 == data.byRuleCalibType) { + max = data.struPointThermCfg.fTemperature; + min = max; + aver = max; + log.info("海康热成像采集到max=" + max + ", min=" + min + ", aver=" + aver); + service.save(item.getTableName(), item.getDevId(), + max, min, aver, time); + done = true; + } else if (1 == data.byRuleCalibType || 2 == data.byRuleCalibType) { + max = data.struLinePolygonThermCfg.fAverageTemperature; + min = data.struLinePolygonThermCfg.fMinTemperature; + aver = data.struLinePolygonThermCfg.fMaxTemperature; + log.info("海康热成像采集到max=" + max + ", min=" + min + ", aver=" + aver); + service.save(item.getTableName(), item.getDevId(), + max, min, aver, time); + done = true; + } + } catch (Exception ex) { + log.error("HCRemoteConfigCallBack异常", ex); } } } diff --git a/src/main/java/com/xydl/cac/thermal/HCThermalService.java b/src/main/java/com/xydl/cac/thermal/HCThermalService.java index 236ec8d..fccef5a 100644 --- a/src/main/java/com/xydl/cac/thermal/HCThermalService.java +++ b/src/main/java/com/xydl/cac/thermal/HCThermalService.java @@ -3,8 +3,12 @@ package com.xydl.cac.thermal; import com.hcsdk.HCModule; 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.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.PreDestroy; @@ -16,9 +20,12 @@ import java.util.List; @Slf4j public class HCThermalService { + @Resource + DataService dataService; @Resource HCRemoteConfigCallBack _callBack; + ThermalConfig _config; int shutdown = 0; @PreDestroy @@ -30,6 +37,7 @@ public class HCThermalService { if (shutdown == 1) { return; } + _config = config; try { HCModule.init(); NSensor sensor = list.get(0); @@ -43,8 +51,8 @@ public class HCThermalService { for (NSensor item : list) { _callBack.done = false; _callBack.item = item; - _callBack.config = config; _callBack.time = DateUtil.format(new Date()); + _callBack.service = this; r = HCModule.startRemoteConfig(_callBack, 2, item.getTmId()); if (r) { int sec = 0; @@ -65,4 +73,27 @@ public class HCThermalService { HCModule.cleanup(); } } + + @Async + public void save(String tableName, Integer devId, + float max, float min, float aver, String time) { + if (StringUtils.isNotBlank(_config.getMaxtemp())) { + String value = String.valueOf(max); + dataService.insertData(tableName, devId, time, _config.getMaxtemp(), value); + // 更新最新数据缓存 + StaticVariable.updateLastData(devId, _config.getMaxtemp(), value, time); + } + if (StringUtils.isNotBlank(_config.getMintemp())) { + String value = String.valueOf(min); + dataService.insertData(tableName, devId, time, _config.getMintemp(), value); + // 更新最新数据缓存 + StaticVariable.updateLastData(devId, _config.getMintemp(), value, time); + } + if (StringUtils.isNotBlank(_config.getAvertemp())) { + String value = String.valueOf(aver); + dataService.insertData(tableName, devId, time, _config.getAvertemp(), value); + // 更新最新数据缓存 + StaticVariable.updateLastData(devId, _config.getAvertemp(), value, time); + } + } }