diff --git a/zc-business/src/main/java/com/zc/business/domain/ExternalInterfaceMonitoring.java b/zc-business/src/main/java/com/zc/business/domain/ExternalInterfaceMonitoring.java index 762a53d6..cddd3a76 100644 --- a/zc-business/src/main/java/com/zc/business/domain/ExternalInterfaceMonitoring.java +++ b/zc-business/src/main/java/com/zc/business/domain/ExternalInterfaceMonitoring.java @@ -1,5 +1,6 @@ package com.zc.business.domain; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -41,6 +42,7 @@ public class ExternalInterfaceMonitoring { @ApiModelProperty("操作结果") private String operationResult; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") @ApiModelProperty("操作时间") private Date operationTime; } diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcTrafficStatisticsServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcTrafficStatisticsServiceImpl.java index ea658dff..266475e9 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcTrafficStatisticsServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcTrafficStatisticsServiceImpl.java @@ -5,17 +5,16 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.type.TypeFactory; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.spring.SpringUtils; -import com.sun.xml.bind.v2.TODO; import com.zc.business.constant.RedisKeyConstants; -import com.zc.business.domain.*; +import com.zc.business.domain.DcCongestionSection; +import com.zc.business.domain.DcFacility; +import com.zc.business.domain.DcRoadSection; +import com.zc.business.domain.DcRoadSectionCongestion; import com.zc.business.enums.StakeMarkRange; import com.zc.business.enums.UniversalEnum; import com.zc.business.service.IDcFacilityService; -import com.zc.business.service.IDcRoadConditionInformationService; import com.zc.business.service.IDcRoadSectionService; import com.zc.business.service.IDcTrafficStatisticsService; import com.zc.business.utils.StakeMarkUtils; @@ -28,7 +27,6 @@ import okhttp3.Response; import okhttp3.ResponseBody; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; @@ -119,7 +117,6 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi } */ - public static CompletableFuture refreshAccessToken() { CompletableFuture future = new CompletableFuture<>(); OkHttp okHttp = new OkHttp(); @@ -208,7 +205,12 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi ResponseBody body = response.body(); if (body != null) { - return JSON.parseArray(body.string()); + String jsonString = body.string(); + if (JSON.isValidArray(jsonString)) { + return JSON.parseArray(jsonString); + } else { + return new JSONArray(); + } } return new JSONArray(); @@ -241,7 +243,10 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi JSONArray jsonArray = null; if (body != null) { - jsonArray = JSON.parseArray(body.string()); + String jsonString = body.string(); + if (JSON.isValidArray(jsonString)) { + jsonArray = JSON.parseArray(jsonString); + } } Map map = new HashMap<>(); @@ -318,7 +323,12 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi ResponseBody body = response.body(); if (body != null) { - return JSON.parseArray(body.string()); + String jsonString = body.string(); + if (JSON.isValidArray(jsonString)) { + return JSON.parseArray(jsonString); + } else { + return new JSONArray(); + } } return new JSONArray(); } @@ -563,7 +573,12 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi ResponseBody body = response.body(); if (body != null) { - return JSON.parseArray(body.string()); + String jsonString = body.string(); + if (JSON.isValidArray(jsonString)) { + return JSON.parseArray(jsonString); + } else { + return new JSONArray(); + } } return new JSONArray(); @@ -604,7 +619,12 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi ResponseBody body = response.body(); if (body != null) { - return JSON.parseArray(body.string()); + String jsonString = body.string(); + if (JSON.isValidArray(jsonString)) { + return JSON.parseArray(jsonString); + } else { + return new JSONArray(); + } } return new JSONArray(); @@ -642,7 +662,12 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi ResponseBody body = response.body(); if (body != null) { - return JSON.parseArray(body.string()); + String jsonString = body.string(); + if (JSON.isValidArray(jsonString)) { + return JSON.parseArray(jsonString); + }else { + return new JSONArray(); + } } return new JSONArray(); @@ -682,37 +707,39 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi ResponseBody body = response.body(); if (body != null) { - JSONArray jsonArray = JSON.parseArray(body.string()); - Map sumByName = new LinkedHashMap<>(); - Integer totalFlow1=0; - List> list = new ArrayList(); - for (Object item : jsonArray) { // 这里做了微调,直接遍历jsonArray的Object - JSONObject jsonObject = (JSONObject) item; - - totalFlow1=totalFlow1+ jsonObject.getInteger("total_flow"); - - // 获取当前时间 - LocalTime now = LocalTime.now(); - // 获取当前小时数(24小时制) - int currentHour = now.getHour(); - if (jsonObject.getInteger("data_hour") == currentHour) { - String name = jsonObject.getString("ts_name"); // 更安全的取值方式 - int totalFlow = jsonObject.getInteger("total_flow"); // 专门针对Integer类型 - - sumByName.put(name, totalFlow); + String jsonString = body.string(); + if (JSON.isValidArray(jsonString)) { + JSONArray jsonArray = JSON.parseArray(jsonString); + Map sumByName = new LinkedHashMap<>(); + Integer totalFlow1 = 0; + List> list = new ArrayList(); + for (Object item : jsonArray) { // 这里做了微调,直接遍历jsonArray的Object + JSONObject jsonObject = (JSONObject) item; + + totalFlow1 = totalFlow1 + jsonObject.getInteger("total_flow"); + + // 获取当前时间 + LocalTime now = LocalTime.now(); + // 获取当前小时数(24小时制) + int currentHour = now.getHour(); + if (jsonObject.getInteger("data_hour") == currentHour) { + String name = jsonObject.getString("ts_name"); // 更安全的取值方式 + int totalFlow = jsonObject.getInteger("total_flow"); // 专门针对Integer类型 + + sumByName.put(name, totalFlow); + } } + System.out.println("总数===:" + totalFlow1); + // 正确创建新的映射对象并添加到list中 + for (Map.Entry entry : sumByName.entrySet()) { + Map singleResult = new LinkedHashMap<>(); // 每次循环都创建一个新的映射 + singleResult.put("name", entry.getKey()); + singleResult.put("value", entry.getValue().toString()); + list.add(singleResult); + } + return list; } - System.out.println("总数===:"+totalFlow1); - // 正确创建新的映射对象并添加到list中 - for (Map.Entry entry : sumByName.entrySet()) { - Map singleResult = new LinkedHashMap<>(); // 每次循环都创建一个新的映射 - singleResult.put("name", entry.getKey()); - singleResult.put("value", entry.getValue().toString()); - list.add(singleResult); - } - return list; } - return new ArrayList(); } @@ -746,7 +773,12 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi ResponseBody body = response.body(); if (body != null) { - return JSON.parseArray(body.string()); + String jsonString = body.string(); + if (JSON.isValidArray(jsonString)) { + return JSON.parseArray(jsonString); + }else { + return new JSONArray(); + } } return new JSONArray(); @@ -866,8 +898,15 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi .data(requestParams) // 请求参数 .post(); // 请求方法 ResponseBody body = response.body(); - JSONArray jsonArray = JSON.parseArray(body.string()); - return jsonArray; + if (body != null) { + String jsonString = body.string(); + if (JSON.isValidArray(jsonString)) { + return JSON.parseArray(jsonString); + }else { + return new JSONArray(); + } + } + return new JSONArray(); } //格式化桩号 @@ -933,8 +972,9 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi ResponseBody body = response.body(); if (body != null) { - JSONArray jsonArray = JSON.parseArray(body.string()); - System.out.println(jsonArray); + String jsonString = body.string(); + if (JSON.isValidArray(jsonString)) { + JSONArray jsonArray = JSON.parseArray(jsonString); for (Object item : jsonArray) { JSONObject jsonObject = (JSONObject) item; if (jsonObject.getString("gantry_id").equals(nearestFacility.getFacilityCode())) { @@ -946,7 +986,7 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi mapList.add(map); } } - + } // 输出结果 return mapList; @@ -982,100 +1022,110 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi ResponseBody body = response.body(); if (body != null) { - JSONArray jsonArray = JSON.parseArray(body.string()); - for (Object object : jsonArray) { - JSONObject jsonObject = (JSONObject) object; - Integer asOneRoad = jsonObject.getInteger("as_one_road"); - if (jsonObject.getDouble("end_pile_no")!=null){ - double endPileNo = jsonObject.getDouble("end_pile_no"); - String endMark = formatNumber(endPileNo); - jsonObject.put("endMark", endMark);//结束桩号 - } - double startPileNo = jsonObject.getDouble("start_pile_no"); - String stakeMark = formatNumber(startPileNo); - jsonObject.put("stakeMark", stakeMark);// - - //as_one_road - //是否为同一条路,1-是,0-否 - if (asOneRoad == UniversalEnum.ZERO.getNumber()) { - - String string = jsonObject.getString("list_link_info"); - JSONArray jsonlist = JSON.parseArray(string); - JSONObject o = (JSONObject) jsonlist.get(UniversalEnum.ZERO.getNumber()); - - String string1 = o.getString("firstPoint"); - String string2 = o.getString("lastPoint"); - String lngLats = o.getString("lngLats"); - String[] lngLatsString = lngLats.split(";"); - double s = Double.parseDouble(lngLatsString[UniversalEnum.ZERO.getNumber()].split(",")[UniversalEnum.ZERO.getNumber()]); - double s2 = Double.parseDouble(lngLatsString[UniversalEnum.ZERO.getNumber()].split(",")[UniversalEnum.ONE.getNumber()]); - double s3 = Double.parseDouble(lngLatsString[lngLatsString.length - UniversalEnum.ONE.getNumber()].split(",")[UniversalEnum.ZERO.getNumber()]); - double s4 = Double.parseDouble(lngLatsString[lngLatsString.length - UniversalEnum.ONE.getNumber()].split(",")[UniversalEnum.ONE.getNumber()]); - double distanceM = calculateDistance(s2, s, s4, s3); - // System.out.printf("最大距离为: %.2f 米%n", distanceM); - jsonObject.put("max_jam_dist", distanceM);//最大拥堵距离 - double endMake = startPileNo +Double.parseDouble(String.format("%.3f", distanceM)); - String endmark = formatNumber(endMake); - jsonObject.put("endMark", endmark);//结束桩号 - - String[] split = string1.split(","); - double firstLon = Double.parseDouble(split[UniversalEnum.ZERO.getNumber()]); - double firstLat = Double.parseDouble(split[UniversalEnum.ONE.getNumber()]); - String[] split2 = string2.split(","); - double lastLon = Double.parseDouble(split2[UniversalEnum.ZERO.getNumber()]); - double lastLat = Double.parseDouble(split2[UniversalEnum.ONE.getNumber()]); - //double firstLat = 35.38524527319016; - // double firstLon = 118.39808642864227; - //double lastLat = 35.386351346969604; - // double lastLon = 118.4038907289505; - double distanceKm = calculateDistance(firstLat, firstLon, lastLat, lastLon); - double distanceMeters = distanceKm * UniversalEnum.THOUSAND.getNumber(); // 将距离转换为米 - //System.out.printf("两点之间的距离为: %.2f 米%n", distanceMeters); - jsonObject.put("jam_dist", distanceMeters);//当前拥堵距离 + String jsonString = body.string(); + if (JSON.isValidArray(jsonString)) { + JSONArray jsonArray = JSON.parseArray(jsonString); + for (Object object : jsonArray) { + JSONObject jsonObject = (JSONObject) object; + Integer asOneRoad = jsonObject.getInteger("as_one_road"); + if (jsonObject.getDouble("end_pile_no") != null) { + double endPileNo = jsonObject.getDouble("end_pile_no"); + String endMark = formatNumber(endPileNo); + jsonObject.put("endMark", endMark);//结束桩号 + } + double startPileNo = jsonObject.getDouble("start_pile_no"); + String stakeMark = formatNumber(startPileNo); + jsonObject.put("stakeMark", stakeMark);// + + //as_one_road + //是否为同一条路,1-是,0-否 + if (asOneRoad == UniversalEnum.ZERO.getNumber()) { + + String string = jsonObject.getString("list_link_info"); + JSONArray jsonlist = JSON.parseArray(string); + JSONObject o = (JSONObject) jsonlist.get(UniversalEnum.ZERO.getNumber()); + + String string1 = o.getString("firstPoint"); + String string2 = o.getString("lastPoint"); + String lngLats = o.getString("lngLats"); + String[] lngLatsString = lngLats.split(";"); + double s = Double.parseDouble(lngLatsString[UniversalEnum.ZERO.getNumber()].split(",")[UniversalEnum.ZERO.getNumber()]); + double s2 = Double.parseDouble(lngLatsString[UniversalEnum.ZERO.getNumber()].split(",")[UniversalEnum.ONE.getNumber()]); + double s3 = Double.parseDouble(lngLatsString[lngLatsString.length - UniversalEnum.ONE.getNumber()].split(",")[UniversalEnum.ZERO.getNumber()]); + double s4 = Double.parseDouble(lngLatsString[lngLatsString.length - UniversalEnum.ONE.getNumber()].split(",")[UniversalEnum.ONE.getNumber()]); + double distanceM = calculateDistance(s2, s, s4, s3); + // System.out.printf("最大距离为: %.2f 米%n", distanceM); + jsonObject.put("max_jam_dist", distanceM);//最大拥堵距离 + double endMake = startPileNo + Double.parseDouble(String.format("%.3f", distanceM)); + String endmark = formatNumber(endMake); + jsonObject.put("endMark", endmark);//结束桩号 + + String[] split = string1.split(","); + double firstLon = Double.parseDouble(split[UniversalEnum.ZERO.getNumber()]); + double firstLat = Double.parseDouble(split[UniversalEnum.ONE.getNumber()]); + String[] split2 = string2.split(","); + double lastLon = Double.parseDouble(split2[UniversalEnum.ZERO.getNumber()]); + double lastLat = Double.parseDouble(split2[UniversalEnum.ONE.getNumber()]); + //double firstLat = 35.38524527319016; + // double firstLon = 118.39808642864227; + //double lastLat = 35.386351346969604; + // double lastLon = 118.4038907289505; + double distanceKm = calculateDistance(firstLat, firstLon, lastLat, lastLon); + double distanceMeters = distanceKm * UniversalEnum.THOUSAND.getNumber(); // 将距离转换为米 + //System.out.printf("两点之间的距离为: %.2f 米%n", distanceMeters); + jsonObject.put("jam_dist", distanceMeters);//当前拥堵距离 + } } - } - - return jsonArray; + return jsonArray; + } } return new JSONArray(); } + /** * 各收费站日累计车流辆 + * * @return */ @Override - public int trafficFlowAtToll()throws HttpException, IOException { + public int trafficFlowAtToll() throws HttpException, IOException { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(UniversalEnum.TIME_FORMAT_YEARS_MONTH_DAY.getValue()); LocalDate currentDate = LocalDate.now(); String startDate = currentDate.format(formatter); - Response response = getResponseTrafficFlowAtToll(startDate,UniversalEnum.ONE.getValue()); - Response responseTwo = getResponseTrafficFlowAtToll(startDate,UniversalEnum.TWO.getValue()); + Response response = getResponseTrafficFlowAtToll(startDate, UniversalEnum.ONE.getValue()); + Response responseTwo = getResponseTrafficFlowAtToll(startDate, UniversalEnum.TWO.getValue()); ResponseBody body = response.body(); ResponseBody bodyTwo = responseTwo.body(); - Integer totalFlow1=UniversalEnum.ZERO.getNumber(); - Integer totalFlow2=UniversalEnum.ZERO.getNumber(); + Integer totalFlow1 = UniversalEnum.ZERO.getNumber(); + Integer totalFlow2 = UniversalEnum.ZERO.getNumber(); if (body != null) { - JSONArray jsonArray = JSON.parseArray(body.string()); - for (Object item : jsonArray) { - JSONObject jsonObject = (JSONObject) item; - totalFlow1=totalFlow1+ jsonObject.getInteger("total_flow"); + String jsonString = body.string(); + if (JSON.isValidArray(jsonString)) { + JSONArray jsonArray = JSON.parseArray(jsonString); + for (Object item : jsonArray) { + JSONObject jsonObject = (JSONObject) item; + totalFlow1 = totalFlow1 + jsonObject.getInteger("total_flow"); + } } } if (bodyTwo != null) { - JSONArray jsonArray = JSON.parseArray(bodyTwo.string()); - for (Object item : jsonArray) { - JSONObject jsonObject = (JSONObject) item; - totalFlow2=totalFlow2+ jsonObject.getInteger("total_flow"); + String jsonString = bodyTwo.string(); + if (JSON.isValidArray(jsonString)) { + JSONArray jsonArray = JSON.parseArray(jsonString); + for (Object item : jsonArray) { + JSONObject jsonObject = (JSONObject) item; + totalFlow2 = totalFlow2 + jsonObject.getInteger("total_flow"); + } } } - return totalFlow1+totalFlow2; + return totalFlow1 + totalFlow2; } - private Response getResponseTrafficFlowAtToll(String startDate,String stationType) throws HttpException, IOException { + private Response getResponseTrafficFlowAtToll(String startDate, String stationType) throws HttpException, IOException { OkHttp okHttp = new OkHttp(); RequestParams requestParams = new RequestParams(); diff --git a/zc-business/src/main/java/com/zc/business/task/ExternalInterfaceMonitoringTask.java b/zc-business/src/main/java/com/zc/business/task/ExternalInterfaceMonitoringTask.java index e44df653..b52fc60e 100644 --- a/zc-business/src/main/java/com/zc/business/task/ExternalInterfaceMonitoringTask.java +++ b/zc-business/src/main/java/com/zc/business/task/ExternalInterfaceMonitoringTask.java @@ -7,6 +7,9 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; @@ -71,8 +74,7 @@ public class ExternalInterfaceMonitoringTask extends BaseController { */ @ApiOperation("外部接口监控信息列表") @GetMapping("/list") - public TableDataInfo list(ExternalInterfaceMonitoring externalInterfaceMonitoring) - { + public TableDataInfo list(ExternalInterfaceMonitoring externalInterfaceMonitoring) { startPage(); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); if (externalInterfaceMonitoring.getInterfaceOwnership() != null) { @@ -578,10 +580,10 @@ public class ExternalInterfaceMonitoringTask extends BaseController { externalInterfaceMonitoring.setOperationResult(response.toString()); } - }catch (Exception e) { + } catch (Exception e) { externalInterfaceMonitoring.setOperationStatus(UniversalEnum.ZERO.getNumber()); externalInterfaceMonitoring.setOperationResult(e.toString()); - }finally { + } finally { externalInterfaceMonitoring.setId(IdUtils.fastSimpleUUID()); externalInterfaceMonitoring.setOperatorName("系统"); externalInterfaceMonitoring.setOperationTime(new Date()); @@ -594,15 +596,30 @@ public class ExternalInterfaceMonitoringTask extends BaseController { * 交通流结果处理 */ public void trafficFlowResultProcessing(ExternalInterfaceMonitoring externalInterfaceMonitoring, Response response) throws Exception { + ResponseBody body = response.body(); - externalInterfaceMonitoring.setOperationStatus(UniversalEnum.ZERO.getNumber()); + if (response.code() == UniversalEnum.TWO_HUNDRED.getNumber()) { + externalInterfaceMonitoring.setOperationStatus(UniversalEnum.ONE.getNumber()); + } else { + externalInterfaceMonitoring.setOperationStatus(UniversalEnum.ZERO.getNumber()); + } + if (body != null) { - JSONObject jsonResult = JSONObject.parseObject(body.string()); - if (jsonResult.containsKey("code") && jsonResult.get("code").equals(UniversalEnum.TWO_HUNDRED.getNumber())) { - externalInterfaceMonitoring.setOperationStatus(UniversalEnum.ONE.getNumber()); + String bodyString = body.string(); + JsonObject jsonResult = null; + // 使用JsonElement解析数据 + JsonElement jsonElement = JsonParser.parseString(bodyString); + + // 检查数据类型并相应处理 + if (jsonElement.isJsonObject()) { + // 如果是对象,进行对象处理 + jsonResult = jsonElement.getAsJsonObject(); + if (!jsonResult.get("code").toString().equals(UniversalEnum.TWO_HUNDRED.getValue())) { + externalInterfaceMonitoring.setOperationStatus(UniversalEnum.ZERO.getNumber()); + } } - externalInterfaceMonitoring.setOperationResult(body.string()); + externalInterfaceMonitoring.setOperationResult(bodyString); } else { externalInterfaceMonitoring.setOperationResult(response.toString()); } diff --git a/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml b/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml index 60ed7ff8..3ec7d343 100644 --- a/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcDeviceMapper.xml @@ -158,7 +158,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and device_state = #{deviceState} and device_name like concat('%', #{deviceName}, '%') - and device_type = #{deviceType} + and device_type = #{deviceType} and iot_device_id is not null and (device_type=3||device_type=13||device_type=15||device_type=16) and iot_device_id is not null