|
|
|
@ -2,6 +2,7 @@ package com.inspect.simulator.service.impl; |
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException; |
|
|
|
import com.fasterxml.jackson.databind.JsonNode; |
|
|
|
@ -23,6 +24,7 @@ import com.inspect.simulator.mapper.BasedataPatrolPointMapper; |
|
|
|
import com.inspect.simulator.mapper.InfraredBoxMapper; |
|
|
|
import com.inspect.simulator.service.HikVisionService; |
|
|
|
import com.inspect.simulator.tempCount.TempCount; |
|
|
|
import com.inspect.simulator.utils.redis.RedisService; |
|
|
|
import com.inspect.simulator.utils.sftp.SftpClient; |
|
|
|
import okhttp3.*; |
|
|
|
import org.apache.commons.compress.utils.IOUtils; |
|
|
|
@ -95,9 +97,15 @@ public class HikVisionServiceImpl implements HikVisionService { |
|
|
|
|
|
|
|
@Value("${file.ftpUrlPort:null}") |
|
|
|
private Integer ftpUrlPort; |
|
|
|
|
|
|
|
@Value("${file.infraredUrl:null}") |
|
|
|
private String infraredUrl; |
|
|
|
// private Integer ftpUrlPort = 10012; |
|
|
|
// private Integer ftpUrlPort = 10990; |
|
|
|
|
|
|
|
@Value("${file.standardImgWidth:1280}") |
|
|
|
private Integer standardImgWidth; |
|
|
|
@Value("${file.standardImgHeight:1024}") |
|
|
|
private Integer standardImgHeight; |
|
|
|
// @Value("${file.produceEnvironment:true}") |
|
|
|
private Boolean produceEnvironment = true; |
|
|
|
|
|
|
|
@ -114,7 +122,8 @@ public class HikVisionServiceImpl implements HikVisionService { |
|
|
|
public InfraredBoxMapper infraredBoxMapper; |
|
|
|
@Autowired |
|
|
|
private BasedataPatrolPointMapper basedataPatrolPointMapper; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private RedisService redisService; |
|
|
|
|
|
|
|
// @Override |
|
|
|
// public AjaxResult login(NvrInfo nvrInfo) { |
|
|
|
@ -699,7 +708,7 @@ public class HikVisionServiceImpl implements HikVisionService { |
|
|
|
// 设置标注样式 |
|
|
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); |
|
|
|
// Font font = new Font("微软雅黑", Font.BOLD, 17); |
|
|
|
Font font = new Font("WenQuanYi Zen Hei", Font.BOLD, 20); |
|
|
|
Font font = new Font("WenQuanYi Zen Hei", Font.BOLD, 23); |
|
|
|
final String imageType = infraPictureInfo.getImgType(); |
|
|
|
if (AlgConstants.INFRA_YU3.equals(imageType)) { |
|
|
|
for (Coordinate c : coordinates) { |
|
|
|
@ -901,9 +910,9 @@ public class HikVisionServiceImpl implements HikVisionService { |
|
|
|
String line1 = "平均温度:" + String.format("%.2f", drawStringMatrix.getFrameAverage()); |
|
|
|
String line2 = "最高温度:" + String.format("%.2f", drawStringMatrix.getFrameMax()); |
|
|
|
String line3 = "最低温度:" + String.format("%.2f", drawStringMatrix.getFrameMin()); |
|
|
|
g2d.drawString(line1, rectX + 5, rectY + 15); |
|
|
|
g2d.drawString(line2, rectX + 5, rectY + 30); |
|
|
|
g2d.drawString(line3, rectX + 5, rectY + 45); |
|
|
|
g2d.drawString(line1, rectX + 15, rectY + 30); |
|
|
|
g2d.drawString(line2, rectX + 15, rectY + 60); |
|
|
|
g2d.drawString(line3, rectX + 15, rectY + 90); |
|
|
|
|
|
|
|
|
|
|
|
// 在最高温度点画一个空心圆(红色边框) |
|
|
|
@ -1409,14 +1418,28 @@ public class HikVisionServiceImpl implements HikVisionService { |
|
|
|
int imgWidth = 640; |
|
|
|
int imgHeight = 512; |
|
|
|
if (picData != null) { |
|
|
|
|
|
|
|
String[] parts = picData.split(","); |
|
|
|
// 解析坐标 |
|
|
|
firstX = Integer.parseInt(parts[0]); |
|
|
|
firstY = Integer.parseInt(parts[1]); |
|
|
|
secondX = Integer.parseInt(parts[2]); |
|
|
|
secondY = Integer.parseInt(parts[3]); |
|
|
|
imgHeight = Integer.parseInt(parts[4]); |
|
|
|
imgWidth = Integer.parseInt(parts[5]); |
|
|
|
if(parts.length==6){ |
|
|
|
// 解析坐标 |
|
|
|
firstX = Integer.parseInt(parts[0]); |
|
|
|
firstY = Integer.parseInt(parts[1]); |
|
|
|
secondX = Integer.parseInt(parts[2]); |
|
|
|
secondY = Integer.parseInt(parts[3]); |
|
|
|
imgHeight = Integer.parseInt(parts[4]); |
|
|
|
imgWidth = Integer.parseInt(parts[5]); |
|
|
|
} else { |
|
|
|
// 解析坐标 |
|
|
|
// 解析坐标 - 修复整数除法问题 |
|
|
|
firstX = (int) (Double.parseDouble(parts[0]) / Integer.parseInt(parts[8]) * standardImgWidth); |
|
|
|
firstY = (int) (Double.parseDouble(parts[1]) / Integer.parseInt(parts[9]) * standardImgHeight); |
|
|
|
secondX = (int) (Double.parseDouble(parts[4]) / Integer.parseInt(parts[8]) * standardImgWidth); |
|
|
|
secondY = (int) (Double.parseDouble(parts[5]) / Integer.parseInt(parts[9]) * standardImgHeight); |
|
|
|
imgHeight = standardImgHeight; |
|
|
|
imgWidth = standardImgWidth; |
|
|
|
log.error("点位信息!firstX:{},firstY:{},secondX:{},secondY:{},imgHeight:{},imgWidth:{}", firstX, firstY, secondX, secondY, imgHeight, imgWidth); |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
log.error("无点位信息!"); |
|
|
|
} |
|
|
|
@ -1464,7 +1487,13 @@ public class HikVisionServiceImpl implements HikVisionService { |
|
|
|
//画框标注 |
|
|
|
String s = ImageOverlays(infraPictureInfo, infraredInfo); |
|
|
|
infraredInfo.setOutPath(s); |
|
|
|
|
|
|
|
//温度未取到 |
|
|
|
if(StringUtils.isNull(maxTemperature)){ |
|
|
|
maxTemperature = "-1"; |
|
|
|
infraredInfo.setFrameMax(-1); |
|
|
|
} else if(StringUtils.isNull(infraredInfo.getFrameMax())){ |
|
|
|
infraredInfo.setFrameMax(Float.parseFloat((maxTemperature))); |
|
|
|
} |
|
|
|
} else if (AlgConstants.INFRA_1800.equals(imageType)) { |
|
|
|
//ivs1800红外图 |
|
|
|
String s = ImageOverlays(infraPictureInfo, infraredInfo); |
|
|
|
@ -1583,14 +1612,22 @@ public class HikVisionServiceImpl implements HikVisionService { |
|
|
|
String[] eqpAddress = eqpchannel.getAddress().split(":"); |
|
|
|
ObjectMapper req_mapper = new ObjectMapper(); |
|
|
|
Map<String, String> requestBody = new HashMap<>(); |
|
|
|
requestBody.put("address", eqpchannel.getAddress()); |
|
|
|
requestBody.put("ip", eqpAddress[7]); |
|
|
|
requestBody.put("port", eqpAddress[8]); |
|
|
|
requestBody.put("channel", eqpAddress[9]); |
|
|
|
requestBody.put("presetId", eqpchannel.getPresetPosCode()); |
|
|
|
requestBody.put("cameraType", eqpAddress[4]); |
|
|
|
requestBody.put("userName", eqpAddress[5]); |
|
|
|
requestBody.put("password", eqpAddress[6]); |
|
|
|
requestBody.put("userName", eqpAddress[10]); |
|
|
|
requestBody.put("password", eqpAddress[11]); |
|
|
|
log.info("requestBody 请求体: " +requestBody.toString()); |
|
|
|
if(StringUtils.isNotNull(redisService.redisTemplate.opsForValue().get(eqpAddress[7] +'_'+ eqpchannel.getPresetPosCode()))){ |
|
|
|
temperatureData = convertJsonToTemperatureData(redisService.redisTemplate.opsForValue().get(eqpAddress[7] +'_'+ eqpchannel.getPresetPosCode()).toString()); |
|
|
|
} else { |
|
|
|
temperatureData.setMaxTemperature("-1"); |
|
|
|
temperatureData.setMinTemperature("-1"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
String jsonBody = null; |
|
|
|
try { |
|
|
|
@ -1615,38 +1652,38 @@ public class HikVisionServiceImpl implements HikVisionService { |
|
|
|
// .addFormDataPart("password", "htjc2018") |
|
|
|
// .build(); |
|
|
|
|
|
|
|
// 构建请求 |
|
|
|
Request request = new Request.Builder() |
|
|
|
.url("http://172.21.101.79:8080/hw/cameraHong") |
|
|
|
.post(body) |
|
|
|
.addHeader("Content-Type", "application/json") |
|
|
|
.build(); |
|
|
|
|
|
|
|
|
|
|
|
Response response = client.newCall(request).execute(); |
|
|
|
if (!response.isSuccessful()) { |
|
|
|
log.error("请求测温接口失败,状态码: " + response.code()); |
|
|
|
} |
|
|
|
String responseBody = response.body() != null ? response.body().string() : null; |
|
|
|
|
|
|
|
// 解析 JSON 并提取 image_raw_flow |
|
|
|
ObjectMapper mapper = new ObjectMapper(); |
|
|
|
JsonNode jsonArray = mapper.readTree(responseBody); |
|
|
|
if (jsonArray.isEmpty()) { |
|
|
|
throw new RuntimeException("JSON数组为空"); |
|
|
|
} |
|
|
|
JsonNode firstItem = jsonArray.get("data"); |
|
|
|
JsonNode maxTemperature = firstItem.get("maxTemperature"); |
|
|
|
JsonNode minTemperature = firstItem.get("minTemperature"); |
|
|
|
JsonNode avgTemperature = firstItem.get("avgTemperature"); |
|
|
|
JsonNode temperatureDiff = firstItem.get("temperatureDiff"); |
|
|
|
JsonNode channel = firstItem.get("channel"); |
|
|
|
JsonNode ruleId = firstItem.get("ruleId"); |
|
|
|
|
|
|
|
|
|
|
|
temperatureData.setMaxTemperature(maxTemperature.toString()); |
|
|
|
temperatureData.setMinTemperature(minTemperature.toString()); |
|
|
|
System.out.println("firstItem: " + firstItem); |
|
|
|
// 构建请求"http://172.21.101.79:8080/hw/cameraHong" |
|
|
|
// Request request = new Request.Builder() |
|
|
|
// .url(infraredUrl) |
|
|
|
// .post(body) |
|
|
|
// .addHeader("Content-Type", "application/json") |
|
|
|
// .build(); |
|
|
|
// |
|
|
|
// |
|
|
|
// Response response = client.newCall(request).execute(); |
|
|
|
// if (!response.isSuccessful()) { |
|
|
|
// log.error("请求测温接口失败,状态码: " + response.code()); |
|
|
|
// } |
|
|
|
// String responseBody = response.body() != null ? response.body().string() : null; |
|
|
|
// |
|
|
|
// // 解析 JSON 并提取 image_raw_flow |
|
|
|
// ObjectMapper mapper = new ObjectMapper(); |
|
|
|
// JsonNode jsonArray = mapper.readTree(responseBody); |
|
|
|
// if (jsonArray.isEmpty()) { |
|
|
|
// throw new RuntimeException("JSON数组为空"); |
|
|
|
// } |
|
|
|
// JsonNode firstItem = jsonArray.get("data"); |
|
|
|
// JsonNode maxTemperature = firstItem.get("maxTemperature"); |
|
|
|
// JsonNode minTemperature = firstItem.get("minTemperature"); |
|
|
|
// JsonNode avgTemperature = firstItem.get("avgTemperature"); |
|
|
|
// JsonNode temperatureDiff = firstItem.get("temperatureDiff"); |
|
|
|
// JsonNode channel = firstItem.get("channel"); |
|
|
|
// JsonNode ruleId = firstItem.get("ruleId"); |
|
|
|
// |
|
|
|
// |
|
|
|
// temperatureData.setMaxTemperature(maxTemperature.toString()); |
|
|
|
// temperatureData.setMinTemperature(minTemperature.toString()); |
|
|
|
// System.out.println("firstItem: " + firstItem); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
e.printStackTrace(); |
|
|
|
@ -1654,7 +1691,16 @@ public class HikVisionServiceImpl implements HikVisionService { |
|
|
|
return temperatureData; |
|
|
|
} |
|
|
|
|
|
|
|
public TemperatureData convertJsonToTemperatureData(String jsonString) { |
|
|
|
// 先解析为JSONObject |
|
|
|
JSONObject jsonObject = JSON.parseObject(jsonString); |
|
|
|
|
|
|
|
// 移除@type字段,避免Fastjson尝试按原类型解析 |
|
|
|
jsonObject.remove("@type"); |
|
|
|
|
|
|
|
// 转换为目标对象 |
|
|
|
return jsonObject.toJavaObject(TemperatureData.class); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public InputStream downloadCsv(String filePath) { |
|
|
|
|