diff --git a/src/main/java/com/inspect/simulator/service/impl/HikVisionServiceImpl.java b/src/main/java/com/inspect/simulator/service/impl/HikVisionServiceImpl.java index 52e0f82..534cf2d 100644 --- a/src/main/java/com/inspect/simulator/service/impl/HikVisionServiceImpl.java +++ b/src/main/java/com/inspect/simulator/service/impl/HikVisionServiceImpl.java @@ -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 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) {