You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
270 lines
14 KiB
Java
270 lines
14 KiB
Java
package com.shxy.xyhkcamera.service.impl;
|
|
|
|
import com.alibaba.druid.sql.visitor.functions.If;
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.shxy.xyhkcamera.entity.DataEaifHEntity;
|
|
import com.shxy.xyhkcamera.entity.ModevEntity;
|
|
import com.shxy.xyhkcamera.hk.HCNetSDK;
|
|
import com.shxy.xyhkcamera.hk.HKConfigEnum;
|
|
import com.shxy.xyhkcamera.hk.HcNetSdkUtil;
|
|
import com.shxy.xyhkcamera.interfacesss.Testint;
|
|
import com.shxy.xyhkcamera.interfacesss.Testintimpl;
|
|
import com.shxy.xyhkcamera.mapper.DataEaifHMapper;
|
|
import com.shxy.xyhkcamera.service.AsyncService;
|
|
import com.shxy.xyhkcamera.service.DataEaifHService;
|
|
import com.shxy.xyhkcamera.service.ModevService;
|
|
import com.shxy.xyhkcamera.service.TempMeasureService;
|
|
import com.shxy.xyhkcamera.utils.CommonUtil;
|
|
import com.sun.jna.Pointer;
|
|
import com.sun.jna.ptr.IntByReference;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.scheduling.annotation.Async;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.sql.Connection;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.ResultSet;
|
|
import java.sql.SQLException;
|
|
import java.time.LocalDateTime;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
|
|
|
|
@Service
|
|
@Slf4j
|
|
public class TempMeasureServiceImpl implements TempMeasureService {
|
|
@Autowired
|
|
ModevService modevService;
|
|
@Autowired
|
|
DataEaifHService dataEaifHService;
|
|
@Autowired
|
|
DataEaifHMapper dataEaifHMapper;
|
|
@Autowired
|
|
HcNetSdkUtil hcNetSdkUtil;
|
|
@Autowired
|
|
CommonUtil commonUtil;
|
|
|
|
@Autowired
|
|
AsyncService asyncService;
|
|
// @Autowired
|
|
// Testint testint;
|
|
|
|
/**
|
|
* 海康用户名
|
|
*/
|
|
@Value("${hkconfig.user}")
|
|
private String user;
|
|
/**
|
|
* 海康密码
|
|
*/
|
|
@Value("${hkconfig.password}")
|
|
private String password;
|
|
private int handle = -1;
|
|
private int test = 0;
|
|
private Connection conn;
|
|
|
|
|
|
@Override
|
|
public void measure() {
|
|
|
|
hcNetSdkUtil.init();
|
|
HCNetSDK instance = hcNetSdkUtil.createSDKInstance();
|
|
List<ModevEntity> list = modevService.list(Wrappers.lambdaQuery(ModevEntity.class).eq(ModevEntity::getModevtid, 9));
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(list)) {
|
|
// for (int i = 0; i < list.size(); i++) {
|
|
for (int i = 0; i < 1; i++) {
|
|
// List<DataEaifHEntity> list1 = dataEaifHService.list(Wrappers.lambdaQuery(DataEaifHEntity.class).eq(DataEaifHEntity::getDataId, 12891));
|
|
|
|
|
|
// DataEaifHEntity entitys = new DataEaifHEntity();
|
|
// entitys.setEqmid(384);
|
|
// entitys.setMaxtemp((double) 0);
|
|
// entitys.setAreaid(1);
|
|
// entitys.setCapturetime(LocalDateTime.now());
|
|
// entitys.setMintemp((double) 0);
|
|
// entitys.setAvgtemp((double) 0);
|
|
// entitys.setType((byte) HKConfigEnum.BYRULECALIBTYPE.POINT.getMysqlvalue());
|
|
// entitys.setMid(Double.valueOf(0));
|
|
// dataEaifHService.save(entitys);
|
|
|
|
// ModevEntity entitys = new ModevEntity();
|
|
// entitys.setModevtid(1919);
|
|
// entitys.setZsbid(1);
|
|
// entitys.setIedid(1);
|
|
// entitys.setAddress(12112);
|
|
// modevService.save(entitys);
|
|
|
|
ModevEntity modevEntity = list.get(i);
|
|
Integer id = modevEntity.getId();
|
|
String ip = modevEntity.getIp();
|
|
String port = modevEntity.getPort();
|
|
// Short aShort = Short.valueOf(port);
|
|
// int admin = hcNetSdkUtil.login_V40(ip, aShort, user, password);
|
|
int admin = hcNetSdkUtil.login_V40("192.168.1.64", (short) 8000, user, password);
|
|
if (admin != -1) {
|
|
log.info("登录成功 " + "IP:" + ip + " " + port);
|
|
HCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND cond = new HCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND();
|
|
cond.read();
|
|
cond.dwSize = cond.size();
|
|
cond.byRuleID = 1;
|
|
cond.dwChan = 2;
|
|
cond.wInterval = 0;
|
|
cond.write();
|
|
HCNetSDK.FRemoteConfigCallBack cbStateCallBack = new HCNetSDK.FRemoteConfigCallBack() {
|
|
@Override
|
|
public void invoke(int dwType, Pointer lpBuffer, int dwBufLen, Pointer pUserData) {
|
|
// log.info("111111111" + Integer.toHexString(dwType));
|
|
// new Thread(new Runnable() {
|
|
// @Override
|
|
// public void run() {
|
|
// log.info("3333333" + Integer.toHexString(dwType));
|
|
// DataEaifHEntity entitys = new DataEaifHEntity();
|
|
// entitys.setEqmid(384);
|
|
// entitys.setMaxtemp((double) 0);
|
|
// entitys.setAreaid(1);
|
|
// entitys.setCapturetime(LocalDateTime.now());
|
|
// entitys.setMintemp((double) 0);
|
|
// entitys.setAvgtemp((double) 0);
|
|
// entitys.setType((byte) HKConfigEnum.BYRULECALIBTYPE.POINT.getMysqlvalue());
|
|
// entitys.setMid(Double.valueOf(0));
|
|
// dataEaifHService.save(entitys);
|
|
// log.info("222222222222222" + Integer.toHexString(dwType));
|
|
// }
|
|
// }).start();
|
|
|
|
test++;
|
|
log.info("长连接返回: dwType:" + Integer.toHexString(dwType));
|
|
if (dwType == HKConfigEnum.NET_SDK_CALLBACK_TYPE.NET_SDK_CALLBACK_TYPE_DATA.getValue()) {
|
|
HCNetSDK.NET_DVR_THERMOMETRY_UPLOAD data = new HCNetSDK.NET_DVR_THERMOMETRY_UPLOAD();
|
|
data.write();
|
|
Pointer pointer = data.getPointer();
|
|
pointer.write(0, lpBuffer.getByteArray(0, data.size()), 0, data.size());
|
|
data.read();
|
|
log.info("返回的数据:" + data.toString());
|
|
log.info("开始数据整理");
|
|
byte byRuleCalibType = data.byRuleCalibType;
|
|
byte byThermometryUnit = data.byThermometryUnit;
|
|
DataEaifHEntity entity = new DataEaifHEntity();
|
|
entity.setEqmid(id);
|
|
entity.setAreaid(1);
|
|
if (byThermometryUnit == HKConfigEnum.BYTHERMOMETRYUNIT.SSD.getValue()) {
|
|
entity.setUnit((byte) HKConfigEnum.BYTHERMOMETRYUNIT.SSD.getMysqlvalue());
|
|
} else if (byThermometryUnit == HKConfigEnum.BYTHERMOMETRYUNIT.HSD.getValue()) {
|
|
entity.setUnit((byte) HKConfigEnum.BYTHERMOMETRYUNIT.HSD.getMysqlvalue());
|
|
} else if (byThermometryUnit == HKConfigEnum.BYTHERMOMETRYUNIT.KEW.getValue()) {
|
|
entity.setUnit((byte) HKConfigEnum.BYTHERMOMETRYUNIT.KEW.getMysqlvalue());
|
|
}
|
|
log.info("数据整理1");
|
|
//数据库中1->点2->线3->框
|
|
if (byRuleCalibType == HKConfigEnum.BYRULECALIBTYPE.POINT.getValue()) {
|
|
float fTemperature = data.struPointThermCfg.fTemperature;
|
|
double maxtemp = new BigDecimal(fTemperature).setScale(4, BigDecimal.ROUND_DOWN).doubleValue();
|
|
entity.setMaxtemp(maxtemp);
|
|
entity.setMintemp(maxtemp);
|
|
entity.setAvgtemp(maxtemp);
|
|
entity.setType((byte) HKConfigEnum.BYRULECALIBTYPE.POINT.getMysqlvalue());
|
|
entity.setMid(Double.valueOf(0));
|
|
} else if (byRuleCalibType == HKConfigEnum.BYRULECALIBTYPE.FRAME.getValue() || byRuleCalibType == HKConfigEnum.BYRULECALIBTYPE.LINE.getValue()) {
|
|
HCNetSDK.NET_DVR_LINEPOLYGON_THERM_CFG struLinePolygonThermCfg = data.struLinePolygonThermCfg;
|
|
float fAverageTemperature = struLinePolygonThermCfg.fAverageTemperature;//平均温度
|
|
float fMinTemperature = struLinePolygonThermCfg.fMinTemperature;
|
|
float fMaxTemperature = struLinePolygonThermCfg.fMaxTemperature;
|
|
float fTemperatureDiff = struLinePolygonThermCfg.fTemperatureDiff;
|
|
entity.setMaxtemp(new BigDecimal(fMaxTemperature).setScale(4, BigDecimal.ROUND_DOWN).doubleValue());
|
|
entity.setMintemp(new BigDecimal(fMinTemperature).setScale(4, BigDecimal.ROUND_DOWN).doubleValue());
|
|
entity.setAvgtemp(new BigDecimal(fAverageTemperature).setScale(4, BigDecimal.ROUND_DOWN).doubleValue());
|
|
entity.setMid(new BigDecimal(fTemperatureDiff).setScale(4, BigDecimal.ROUND_DOWN).doubleValue());
|
|
if (byRuleCalibType == HKConfigEnum.BYRULECALIBTYPE.FRAME.getValue()) {
|
|
entity.setType((byte) HKConfigEnum.BYRULECALIBTYPE.FRAME.getMysqlvalue());
|
|
} else if (byRuleCalibType == HKConfigEnum.BYRULECALIBTYPE.LINE.getValue()) {
|
|
entity.setType((byte) HKConfigEnum.BYRULECALIBTYPE.LINE.getMysqlvalue());
|
|
}
|
|
}
|
|
log.info("数据整理2");
|
|
entity.setStd(Double.valueOf(0));
|
|
entity.setCapturetime(LocalDateTime.now());
|
|
log.info("开始插入");
|
|
log.info("数据是:" + entity.toString());
|
|
asyncService.executeAsyncTask(entity);
|
|
// Testintimpl testintimpl = new Testintimpl();
|
|
// testintimpl.test(entity);
|
|
|
|
|
|
// String sql = "INSERT INTO data_eaif_h(eqmid,areaid,capturetime,maxtemp,mintemp,avgtemp,unit,type,mid,std) values('" + 666 + "','1','" + new Date() + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "')";
|
|
// System.out.println(sql);
|
|
// help.getConnection();
|
|
// int ret = help.excuteUpdate(sql);
|
|
// log.info("啦啦啦" + ret);
|
|
// try {
|
|
// conn.close();
|
|
// } catch (SQLException throwables) {
|
|
// throwables.printStackTrace();
|
|
// }
|
|
// if (test == 1) {
|
|
// DataEaifHEntity entitys = new DataEaifHEntity();
|
|
// entitys.setEqmid(384);
|
|
// entitys.setMaxtemp((double) 0);
|
|
// entitys.setAreaid(1);
|
|
// entitys.setCapturetime(LocalDateTime.now());
|
|
// entitys.setMintemp((double) 0);
|
|
// entitys.setAvgtemp((double) 0);
|
|
// entitys.setType((byte) HKConfigEnum.BYRULECALIBTYPE.POINT.getMysqlvalue());
|
|
// entitys.setMid(Double.valueOf(0));
|
|
// dataEaifHService.save(entitys);
|
|
////
|
|
//// ModevEntity entitys = new ModevEntity();
|
|
//// entitys.setModevtid(1919);
|
|
//// entitys.setZsbid(1);
|
|
//// entitys.setIedid(1);
|
|
//// entitys.setAddress(12112);
|
|
//// modevService.save(entitys);
|
|
// }
|
|
|
|
if (handle != -1) {
|
|
log.info("开始退出");
|
|
instance.NET_DVR_StopRemoteConfig(handle);
|
|
instance.NET_DVR_Logout(admin);
|
|
}
|
|
} else {
|
|
if (handle != -1) {
|
|
instance.NET_DVR_StopRemoteConfig(handle);
|
|
instance.NET_DVR_Logout(admin);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
//NET_DVR_GET_REALTIME_THERMOMETRY 实时温度检测 NET_DVR_GET_MANUALTHERM_INFO 手动测温实时获取
|
|
handle = instance.NET_DVR_StartRemoteConfig(admin, HCNetSDK.NET_DVR_GET_REALTIME_THERMOMETRY, cond.getPointer(), cond.size(), cbStateCallBack, null);
|
|
if (handle < 0) {
|
|
int j = instance.NET_DVR_GetLastError();
|
|
IntByReference intByReference = new IntByReference(j);
|
|
log.error("长连接连接失败 " + "错误码:" + j + " 错误信息:" + instance.NET_DVR_GetErrorMsg(intByReference));
|
|
} else {
|
|
log.info("长连接连接成功!!!");
|
|
}
|
|
|
|
// try {
|
|
// Thread.sleep(5000);
|
|
// } catch (InterruptedException e) {
|
|
// e.printStackTrace();
|
|
|
|
// }
|
|
} else {
|
|
log.error("登录失败 " + "IP:" + ip + " " + port);
|
|
}
|
|
}
|
|
} else {
|
|
log.info("尚未配置红外设备!!!");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|