From 669b517cd9d31fcdee07fc5b0281906988bbe4a8 Mon Sep 17 00:00:00 2001 From: zhaoxianglong Date: Mon, 1 Jul 2024 09:09:37 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=AD=94=E6=B3=95?= =?UTF-8?q?=E5=80=BC=20=E4=BC=98=E5=8C=96=E8=AE=BE=E5=A4=87=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DcDeviceController.java | 102 +++++++++++------- .../zc/business/controller/DeviceStatus.java | 60 +++++------ .../com/zc/business/enums/UniversalEnum.java | 6 ++ .../device/handler/DeviceMessageHandler.java | 2 +- .../impl/DcTrafficStatisticsServiceImpl.java | 38 +++---- 5 files changed, 115 insertions(+), 93 deletions(-) diff --git a/zc-business/src/main/java/com/zc/business/controller/DcDeviceController.java b/zc-business/src/main/java/com/zc/business/controller/DcDeviceController.java index 723f5748..50b3b428 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DcDeviceController.java +++ b/zc-business/src/main/java/com/zc/business/controller/DcDeviceController.java @@ -71,7 +71,7 @@ public class DcDeviceController extends BaseController { * @return 分页查询结果 */ @ApiOperation("分页查询设备列表") - // @PreAuthorize("@ss.hasPermi('iot:device:list')") + // @PreAuthorize("@ss.hasPermi('iot:device:list')") @GetMapping("list") public TableDataInfo listDevice(DcDevice dcDevice) { return getDataTable(dcDeviceService.pageDevice(dcDevice)); @@ -83,7 +83,7 @@ public class DcDeviceController extends BaseController { * @return 查询结果 */ @ApiOperation("统计异常设备") - // @PreAuthorize("@ss.hasPermi('iot:device:list')") + // @PreAuthorize("@ss.hasPermi('iot:device:list')") @GetMapping("abnormalDevice") public AjaxResult statisticalAnomalyDevice() { return AjaxResult.success(dcDeviceService.statisticalAnomalyDevice()); @@ -96,7 +96,7 @@ public class DcDeviceController extends BaseController { * @return 查询结果 */ @ApiOperation("无分页查询设备列表") - // @PreAuthorize("@ss.hasPermi('iot:device:query')") + // @PreAuthorize("@ss.hasPermi('iot:device:query')") @GetMapping("query") public AjaxResult queryDevice(DcDevice dcDevice) { return AjaxResult.success(dcDeviceService.listDevice(dcDevice)); @@ -122,7 +122,7 @@ public class DcDeviceController extends BaseController { * @return 查询结果 */ @ApiOperation("根据id查询设备信息") - // @PreAuthorize("@ss.hasPermi('iot:device:query')") + // @PreAuthorize("@ss.hasPermi('iot:device:query')") @GetMapping("{id}") public AjaxResult getDevice(@PathVariable String id) { return AjaxResult.success(dcDeviceService.getDevice(id)); @@ -154,7 +154,7 @@ public class DcDeviceController extends BaseController { * @return 新增操作结果 */ @ApiOperation("新增") - // @PreAuthorize("@ss.hasPermi('iot:device:add')") + // @PreAuthorize("@ss.hasPermi('iot:device:add')") @Log(title = "新增设备", businessType = BusinessType.INSERT) @PostMapping public AjaxResult addDevice(@Valid @RequestBody DcDevice dcDevice) { @@ -168,7 +168,7 @@ public class DcDeviceController extends BaseController { * @return 修改操作结果 */ @ApiOperation("修改") - // @PreAuthorize("@ss.hasPermi('iot:device:edit')") + // @PreAuthorize("@ss.hasPermi('iot:device:edit')") @Log(title = "修改设备", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult editDevice(@Valid @RequestBody DcDevice dcDevice) { @@ -182,7 +182,7 @@ public class DcDeviceController extends BaseController { * @return 删除操作结果 */ @ApiOperation("删除") - // @PreAuthorize("@ss.hasPermi('iot:device:remove')") + // @PreAuthorize("@ss.hasPermi('iot:device:remove')") @Log(title = "删除", businessType = BusinessType.DELETE) @DeleteMapping("{ids}") public AjaxResult removeDevice(@PathVariable List ids) { @@ -192,10 +192,11 @@ public class DcDeviceController extends BaseController { /** * 导出 - * @param response 响应 + * + * @param response 响应 * @param iotDevice 导入数据结果 */ - // @PreAuthorize("@ss.hasPermi('iot:device:export')") + // @PreAuthorize("@ss.hasPermi('iot:device:export')") @Log(title = "导出设备", businessType = BusinessType.EXPORT) @PostMapping("export") public void exportDevice(HttpServletResponse response, DcDevice iotDevice) { @@ -481,7 +482,7 @@ public class DcDeviceController extends BaseController { @PathVariable String deviceId, @PathVariable String functionId, @RequestBody HashMap props) throws HttpException, IOException { - //public AjaxResult invokedFunction(@PathVariable String deviceId,@PathVariable String functionId,@RequestBody HashMap props,int operType) throws HttpException, IOException { todo + //public AjaxResult invokedFunction(@PathVariable String deviceId,@PathVariable String functionId,@RequestBody HashMap props,int operType) throws HttpException, IOException { todo return getAjaxResult(deviceId, functionId, props); @@ -591,8 +592,8 @@ public class DcDeviceController extends BaseController { resultArray.add(getAjaxResult(deviceId, functionId, (HashMap) param)); } HashMap hashMap = new HashMap<>(); - hashMap.put("SET", UniversalEnum.SEVEN.getValue()); - getAjaxResult(deviceId, "SETMD", hashMap); + hashMap.put(UniversalEnum.SET.getValue(), UniversalEnum.SEVEN.getValue()); + getAjaxResult(deviceId, UniversalEnum.SETMD.getValue(), hashMap); return AjaxResult.success(resultArray); } @@ -633,7 +634,7 @@ public class DcDeviceController extends BaseController { * 查询物联设备指定事件数据 * * @param deviceId 物联设备id - * @param type 类型 + * @param type 类型 * @param queryParam 查询条件 * @return 查询事件结果 */ @@ -648,7 +649,7 @@ public class DcDeviceController extends BaseController { if (!StringUtils.hasText(deviceId) || !StringUtils.hasText(type)) { return AjaxResult.error(UniversalEnum.DEVICE_NOT_CONNECTED.getValue()); } - if (type.equals(UniversalEnum.ALL.getValue())){ + if (type.equals(UniversalEnum.ALL.getValue())) { OkHttp okHttp = new OkHttp(); @@ -656,11 +657,11 @@ public class DcDeviceController extends BaseController { Response response // 请求响应 = okHttp - .url(iotAddress + UniversalEnum.QUERY_EVENT_DATA_OF_IOT_DEVICES.getValue()+deviceId) // 请求地址 + .url(iotAddress + UniversalEnum.QUERY_EVENT_DATA_OF_IOT_DEVICES.getValue() + deviceId) // 请求地址 .data(requestParams) .get(); // 请求方法 return JSON.parseObject(response.body().string(), AjaxResult.class); - }else { + } else { return queryPagerDeviceEvents(deviceId, type, queryParam); } } @@ -678,38 +679,37 @@ public class DcDeviceController extends BaseController { OkHttp okHttp = new OkHttp(); Response response // 请求响应 = okHttp - .url(iotAddress + UniversalEnum.GET_A_PHYSICAL_MODEL_OF_AN_IOT_DEVICE.getValue()+ id) // 请求地址 + .url(iotAddress + UniversalEnum.GET_A_PHYSICAL_MODEL_OF_AN_IOT_DEVICE.getValue() + id) // 请求地址 .get(); // 请求方法 return JSON.parseObject(response.body().string(), AjaxResult.class); } - /** - * @Description 查询上游10公里内的情报板 - * - * @author liuwenge - * @date 2024/4/15 14:22 * @param stakeMark * @param direction * @return com.ruoyi.common.core.domain.AjaxResult + * @Description 查询上游10公里内的情报板 + * @author liuwenge + * @date 2024/4/15 14:22 */ @ApiOperation("查询上游10公里内的情报板") @PostMapping("/selectNearBoard") - public AjaxResult selectNearBoard(@ApiParam(value="桩号", name="stakeMark", required=true) @RequestParam ("stakeMark") String stakeMark, - @ApiParam(value="方向", name="direction", required=true) @RequestParam ("direction") String direction){ - return dcDeviceService.selectNearBoard(stakeMark,direction); + public AjaxResult selectNearBoard(@ApiParam(value = "桩号", name = "stakeMark", required = true) @RequestParam("stakeMark") String stakeMark, + @ApiParam(value = "方向", name = "direction", required = true) @RequestParam("direction") String direction) { + return dcDeviceService.selectNearBoard(stakeMark, direction); } @OperationLog(operUrl = "/business/device/batchFunctions") public AjaxResult batchInvokedFunction(Object object) throws HttpException, IOException, InterruptedException { - //public AjaxResult batchInvokedFunction(Object object,int operType) throws HttpException, IOException, InterruptedException { todo + //public AjaxResult batchInvokedFunction(Object object,int operType) throws HttpException, IOException, InterruptedException { todo Map map = new ObjectMapper().convertValue(object, Map.class); return batchInvokedFunction(map); } /** * 分页查询设备名称列表 + * * @param dcDevice 请求参数 * @return 分页查询结果 */ @@ -718,9 +718,10 @@ public class DcDeviceController extends BaseController { startPage(); return getDataTable(dcDeviceService.selectDeviceNameList(dcDevice)); } + @GetMapping("/deviceParameter") public TableDataInfo selectDeviceParameterProperties(DcDevice dcDevice) { - if (dcDevice==null||dcDevice.getDeviceType()==null){ + if (dcDevice == null || dcDevice.getDeviceType() == null) { TableDataInfo tableDataInfo = new TableDataInfo(); tableDataInfo.setCode(UniversalEnum.FIVE_HUNDRED.getNumber()); tableDataInfo.setMsg(UniversalEnum.PARAMETER_ERROR.getValue()); @@ -729,29 +730,31 @@ public class DcDeviceController extends BaseController { startPage(); return getDataTable(dcDeviceService.selectDeviceParameterProperties(dcDevice)); } + /** * 查询设备指定属性属性列表 - * param参数 - * deviceId 设备id - * propertyId 属性id - * propertyName 属性名称 - * deviceType 设备类型 - * dateTime 时间 + * param参数 + * deviceId 设备id + * propertyId 属性id + * propertyName 属性名称 + * deviceType 设备类型 + * dateTime 时间 + * * @return 属性列表 */ @PostMapping("/properties/deviceNameData") public AjaxResult queryDevice(@RequestBody HashMap map) throws HttpException, IOException { - if (map==null||!map.containsKey("deviceId")||!map.containsKey("deviceType") - ||!map.containsKey("propertyName")||!map.containsKey("propertyId") - ||!map.containsKey("dateTime")){ - return AjaxResult.error(UniversalEnum.PARAMETER_ERROR.getValue()); - } + if (map == null || !map.containsKey("deviceId") || !map.containsKey("deviceType") + || !map.containsKey("propertyName") || !map.containsKey("propertyId") + || !map.containsKey("dateTime")) { + return AjaxResult.error(UniversalEnum.PARAMETER_ERROR.getValue()); + } String deviceType = map.get("deviceType").toString();//设备类型 String deviceId = map.get("deviceId").toString();//设备id String propertyId = map.get("propertyId").toString();//属性id String propertyName = map.get("propertyName").toString();//属性名称 HashMap props = new HashMap<>(); - // 设置查询条件的键为“timestamp$BTW”,表示时间戳在一定范围内 + // 设置查询条件的键为“timestamp$BTW”,表示时间戳在一定范围内 props.put("terms[0].column", "timestamp$BTW"); ArrayList dateList = new ArrayList<>(); // 添加当前日期的开始和结束时间到列表,用于设定时间范围 @@ -770,7 +773,7 @@ public class DcDeviceController extends BaseController { props.put("sorts[0].name", "timestamp"); AjaxResult ajaxResult = queryDeviceProperties(deviceId, propertyId, props); String code = ajaxResult.get("code").toString(); - if ("500".equals(code)){ + if (UniversalEnum.FIVE_HUNDRED.getValue().equals(code)) { return ajaxResult; } if (UniversalEnum.THIRTEEN.getValue().equals(deviceType) || UniversalEnum.SIXTEEN.getValue().equals(deviceType)) { //判断是否为设备箱/远端机 @@ -820,6 +823,7 @@ public class DcDeviceController extends BaseController { } return null; } + /** * 设备箱-设备操作口令校验 */ @@ -829,4 +833,22 @@ public class DcDeviceController extends BaseController { return AjaxResult.success(key.equals(secretKey)); } + ///*** + // * 合流区预警设备设备电量不足警告 + // */ + //@Scheduled(cron = "0 0/1 * * * ?") + //public void ConfluenceAreaEarlyWarningDeviceBatteryLowWarning() throws HttpException, IOException { + // DcDevice dcDevice = new DcDevice(); + // dcDevice.setDeviceType("8"); + // List devices = dcDeviceService.listDevice(dcDevice); + // for (DcDevice device : devices) { + // String iotDeviceId = device.getIotDeviceId(); + // if (iotDeviceId != null && !iotDeviceId.equals("")) { + // AjaxResult deviceLatestProperty = queryDeviceProperties(iotDeviceId, "batteryCapacity",new HashMap<>()); + // System.out.println(deviceLatestProperty.get("code")); + // System.out.println(deviceLatestProperty.get("msg")); + // } + // } + //} + } diff --git a/zc-business/src/main/java/com/zc/business/controller/DeviceStatus.java b/zc-business/src/main/java/com/zc/business/controller/DeviceStatus.java index e186c19a..44d9df34 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DeviceStatus.java +++ b/zc-business/src/main/java/com/zc/business/controller/DeviceStatus.java @@ -63,13 +63,19 @@ public class DeviceStatus { AjaxResult deviceByIotDeviceId = deviceService.getDeviceByIotDeviceId(device.getIotDeviceId()); String deviceState = ((JSONObject) JSON.toJSON(deviceByIotDeviceId.get("data"))).getString("deviceState"); if (Objects.equals(deviceState, UniversalEnum.ON_LINE.getValue())) { - extracted(statusService, device, UniversalEnum.ONE_HUNDRED_PERCENT.getValue()); + extracted(statusService, device, true, UniversalEnum.ZERO_PERCENT.getValue()); } else { - extracted(statusService, device, UniversalEnum.ZERO_PERCENT.getValue()); + extracted(statusService, device, false, UniversalEnum.ONE_HUNDRED_PERCENT.getValue()); } } else { - extracted(statusService, device, getPingPacketLossRate(device.getDeviceIp())); + if (StringUtil.isNotEmpty(device.getDeviceIp())) { + InetAddress address = InetAddress.getByName(device.getDeviceIp()); + boolean reachable = address.isReachable(UniversalEnum.FIVE_THOUSAND.getNumber()); // Timeout: 5 seconds + extracted(statusService, device, reachable, getPingPacketLossRate(device.getDeviceIp())); + } else { + extracted(statusService, device, false, UniversalEnum.ONE_HUNDRED_PERCENT.getValue()); + } } return null; }; @@ -88,35 +94,23 @@ public class DeviceStatus { executor.shutdown(); } - private void extracted(StatusService statusService, DcDevice device, String lostRate) { - try { - Status status = new Status(); - status.setDeviceNo(device.getStakeMark()); - status.setDeviceName(device.getDeviceName()); - status.setDeviceIp(device.getDeviceIp()); - status.setDeviceId(device.getId()); - LocalDateTime localDateTime = LocalDateTime.now(); - status.setTime(localDateTime); - if (StringUtil.isNotEmpty(device.getDeviceIp())) { - InetAddress address = InetAddress.getByName(device.getDeviceIp()); - boolean reachable = address.isReachable(UniversalEnum.FIVE_THOUSAND.getNumber()); // Timeout: 5 seconds - status.setLostRate(lostRate); - if (reachable) { - status.setDeviceStatus(UniversalEnum.ONE.getValue()); - status.setSuccessRate(UniversalEnum.ONE_HUNDRED_PERCENT.getValue()); - } else { - status.setDeviceStatus(UniversalEnum.ZERO.getValue()); - status.setSuccessRate(UniversalEnum.ZERO_PERCENT.getValue()); - } - } else { - status.setDeviceStatus(UniversalEnum.ZERO.getValue()); - status.setSuccessRate(UniversalEnum.ZERO_PERCENT.getValue()); - status.setLostRate(UniversalEnum.ONE_HUNDRED_PERCENT.getValue()); - } - statusService.Add(status); - } catch (IOException e) { - System.out.println("Error pinging " + device.getDeviceIp() + ": " + e.getMessage()); + private void extracted(StatusService statusService, DcDevice device, boolean reachable, String packetLossRate) { + Status status = new Status(); + status.setDeviceNo(device.getStakeMark()); + status.setDeviceName(device.getDeviceName()); + status.setDeviceIp(device.getDeviceIp()); + status.setDeviceId(device.getId()); + LocalDateTime localDateTime = LocalDateTime.now(); + status.setTime(localDateTime); + status.setLostRate(packetLossRate); + if (reachable) { + status.setDeviceStatus(UniversalEnum.ONE.getValue()); + status.setSuccessRate(UniversalEnum.ONE_HUNDRED_PERCENT.getValue()); + } else { + status.setDeviceStatus(UniversalEnum.ZERO.getValue()); + status.setSuccessRate(UniversalEnum.ZERO_PERCENT.getValue()); } + statusService.Add(status); } @@ -139,8 +133,8 @@ public class DeviceStatus { if (line.contains("packets transmitted")) { // Extract the number of packets sent and lost String[] stats = line.split(", "); - packetsSent = Integer.parseInt(stats[UniversalEnum.ZERO.getNumber()].split(" ")[UniversalEnum.ZERO.getNumber()]); - packetsLost = Integer.parseInt(stats[UniversalEnum.ZERO.getNumber()].split(" ")[UniversalEnum.ZERO.getNumber()]) - Integer.parseInt(stats[UniversalEnum.ONE.getNumber()].split(" ")[UniversalEnum.ZERO.getNumber()]); + packetsSent = Integer.parseInt(stats[UniversalEnum.ZERO.getNumber()].split(UniversalEnum.BLANK_SPACE.getValue())[UniversalEnum.ZERO.getNumber()]); + packetsLost = Integer.parseInt(stats[UniversalEnum.ZERO.getNumber()].split(UniversalEnum.BLANK_SPACE.getValue())[UniversalEnum.ZERO.getNumber()]) - Integer.parseInt(stats[UniversalEnum.ONE.getNumber()].split(UniversalEnum.BLANK_SPACE.getValue())[UniversalEnum.ZERO.getNumber()]); } } diff --git a/zc-business/src/main/java/com/zc/business/enums/UniversalEnum.java b/zc-business/src/main/java/com/zc/business/enums/UniversalEnum.java index 595486e4..86e112fe 100644 --- a/zc-business/src/main/java/com/zc/business/enums/UniversalEnum.java +++ b/zc-business/src/main/java/com/zc/business/enums/UniversalEnum.java @@ -2077,6 +2077,12 @@ public enum UniversalEnum { // 中冒号 IN_THE_COLON(0, ":"), + // 左小括号 + OPEN_PARENTHESIS(0, "("), + + // 右小括号 + CLOSING_PARENTHESIS(0, ")"), + // 左中括号 LEFT_CENTER_BRACKET(0, "["), diff --git a/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java b/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java index 6c7a8dbb..d99d5f5a 100644 --- a/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java +++ b/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java @@ -587,7 +587,7 @@ public class DeviceMessageHandler { //设备名称 - meteorologicalDetectorData.setDeviceName(deviceName+"("+stakeMark+")"); + meteorologicalDetectorData.setDeviceName(deviceName+UniversalEnum.OPEN_PARENTHESIS.getValue()+stakeMark+UniversalEnum.CLOSING_PARENTHESIS.getValue()); //位置 meteorologicalDetectorData.setStakeMark(stakeMark); //方向 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 206c43f3..8d823042 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 @@ -920,45 +920,45 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi Response response // 请求响应 = okHttp .headers(headers) - .url(baseUrl + "/api/dc/query/rd_tr_congestion_jh") // 请求地址 + .url(baseUrl + UniversalEnum.GETS_THE_URI_OF_THE_CURRENT_CONGESTION_EVENT.getValue()) // 请求地址 .data(requestParams) // 请求参数 .post(); // 请求方法 ResponseBody body = response.body(); if (body != null) { JSONArray jsonArray = JSON.parseArray(body.string()); - JSONObject jsonObject = (JSONObject) jsonArray.get(0); + JSONObject jsonObject = (JSONObject) jsonArray.get(UniversalEnum.ZERO.getNumber()); Integer asOneRoad = jsonObject.getInteger("as_one_road"); if (asOneRoad == UniversalEnum.ONE.getNumber()){ String string = jsonObject.getString("list_link_info"); JSONArray jsonlist = JSON.parseArray(string); - JSONObject o = (JSONObject) jsonlist.get(0); + 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[0].split(",")[0]); - double s2 = Double.parseDouble(lngLatsString[0].split(",")[1]); - double s3 = Double.parseDouble(lngLatsString[lngLatsString.length-1].split(",")[0]); - double s4 = Double.parseDouble(lngLatsString[lngLatsString.length-1].split(",")[1]); - double distanceM = calculateDistance(s2, s, s4, s3)* 1000; + String[] lngLatsString = lngLats.split(UniversalEnum.COLON.getValue()); + double s = Double.parseDouble(lngLatsString[UniversalEnum.ZERO.getNumber()].split(UniversalEnum.COMMA.getValue())[UniversalEnum.ZERO.getNumber()]); + double s2 = Double.parseDouble(lngLatsString[UniversalEnum.ZERO.getNumber()].split(UniversalEnum.COMMA.getValue())[UniversalEnum.ONE.getNumber()]); + double s3 = Double.parseDouble(lngLatsString[lngLatsString.length-UniversalEnum.ONE.getNumber()].split(UniversalEnum.COMMA.getValue())[UniversalEnum.ZERO.getNumber()]); + double s4 = Double.parseDouble(lngLatsString[lngLatsString.length-UniversalEnum.ONE.getNumber()].split(UniversalEnum.COMMA.getValue())[UniversalEnum.ONE.getNumber()]); + double distanceM = calculateDistance(s2, s, s4, s3)* UniversalEnum.THOUSAND.getNumber(); // System.out.printf("最大距离为: %.2f 米%n", distanceM); jsonObject.put("max_jam_dist",distanceM);//最大拥堵距离 - String[] split = string1.split(","); - double firstLon = Double.parseDouble(split[0]); - double firstLat = Double.parseDouble(split[1]); - String[] split2 = string2.split(","); - double lastLon = Double.parseDouble(split2[0]); - double lastLat = Double.parseDouble(split2[1]); + String[] split = string1.split(UniversalEnum.COMMA.getValue()); + double firstLon = Double.parseDouble(split[UniversalEnum.ZERO.getNumber()]); + double firstLat = Double.parseDouble(split[UniversalEnum.ONE.getNumber()]); + String[] split2 = string2.split(UniversalEnum.COMMA.getValue()); + 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 * 1000; // 将距离转换为米 + double distanceMeters = distanceKm * UniversalEnum.THOUSAND.getNumber(); // 将距离转换为米 //System.out.printf("两点之间的距离为: %.2f 米%n", distanceMeters); jsonObject.put("jam_dist",distanceMeters);//当前拥堵距离 @@ -1012,10 +1012,10 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi double dLon = endLonRad - startLonRad; // Haversine公式 - double a = Math.pow(Math.sin(dLat / 2), 2) + + double a = Math.pow(Math.sin(dLat / UniversalEnum.TWO.getNumber()), UniversalEnum.TWO.getNumber()) + Math.cos(startLatRad) * Math.cos(endLatRad) * - Math.pow(Math.sin(dLon / 2), 2); - double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + Math.pow(Math.sin(dLon / UniversalEnum.TWO.getNumber()), UniversalEnum.TWO.getNumber()); + double c = UniversalEnum.TWO.getNumber() * Math.atan2(Math.sqrt(a), Math.sqrt(UniversalEnum.ONE.getNumber() - a)); // 计算两点间的距离 double distance = EARTH_RADIUS * c; From 7b7cd4eb8f5abbdeac51b4566448424fabc79ebd Mon Sep 17 00:00:00 2001 From: lau572 <1010031226@qq.com> Date: Mon, 1 Jul 2024 15:25:40 +0800 Subject: [PATCH 2/7] =?UTF-8?q?echarts=E6=95=B0=E6=8D=AE=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DcTrafficStatisticsController.java | 330 +++++++++++++++++- .../export/PassIndicatorTimeDistribution.java | 111 ++++++ .../export/RadarMapOfTrafficIndicators.java | 62 ++++ 3 files changed, 488 insertions(+), 15 deletions(-) create mode 100644 zc-business/src/main/java/com/zc/business/domain/export/PassIndicatorTimeDistribution.java create mode 100644 zc-business/src/main/java/com/zc/business/domain/export/RadarMapOfTrafficIndicators.java diff --git a/zc-business/src/main/java/com/zc/business/controller/DcTrafficStatisticsController.java b/zc-business/src/main/java/com/zc/business/controller/DcTrafficStatisticsController.java index 2558b1a3..957a3c72 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DcTrafficStatisticsController.java +++ b/zc-business/src/main/java/com/zc/business/controller/DcTrafficStatisticsController.java @@ -11,10 +11,7 @@ import com.ruoyi.common.utils.StakeMarkUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.zc.business.domain.*; -import com.zc.business.domain.export.RealTimeTrafficFlow; -import com.zc.business.domain.export.SectionTrafficIndexAnalysis; -import com.zc.business.domain.export.SectionTrafficRanking; -import com.zc.business.domain.export.TrafficPeriodAnalysis; +import com.zc.business.domain.export.*; import com.zc.business.enums.StakeMarkRange; import com.zc.business.enums.UniversalEnum; import com.zc.business.request.DcTrafficMetricsDataRequest; @@ -32,9 +29,11 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.text.DecimalFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; @@ -454,7 +453,7 @@ public AjaxResult realTimeTrafficFlow(String startDate, String direction,String String sectionName = value.getDescription(); SectionTrafficIndexAnalysis sectionTrafficIndexAnalysis = new SectionTrafficIndexAnalysis(); sectionTrafficIndexAnalysis.setName(value.getDescription()); - if (thisYearData.containsKey(sectionName)){ + if (thisYearData != null && thisYearData.containsKey(sectionName)){ Map sectionData = thisYearData.get(sectionName).get(UniversalEnum.ZERO.getNumber()); sectionTrafficIndexAnalysis.setCrowdingRate(sectionData.get("crowdingRate").toString()); sectionTrafficIndexAnalysis.setSaturationRate(sectionData.get("saturationRate").toString()); @@ -465,7 +464,7 @@ public AjaxResult realTimeTrafficFlow(String startDate, String direction,String sectionTrafficIndexAnalysis.setTrafficCompositionRate(UniversalEnum.ZERO.getValue()); } - if (lastYearData.containsKey(sectionName)){ + if (lastYearData != null && lastYearData.containsKey(sectionName)){ Map sectionData = lastYearData.get(sectionName).get(UniversalEnum.ZERO.getNumber()); sectionTrafficIndexAnalysis.setCrowdingRateLastYear(sectionData.get("crowdingRate").toString()); sectionTrafficIndexAnalysis.setSaturationRateLastYear(sectionData.get("saturationRate").toString()); @@ -491,6 +490,73 @@ public AjaxResult realTimeTrafficFlow(String startDate, String direction,String // 将查询结果封装为成功响应并返回 return AjaxResult.success(mapList); } + + @ApiOperation(value="导出交通指标时间分布",tags = {"ECharts导出"}) + @GetMapping("/history/exportPassIndicatorTimeDistribution") + public void exportPassIndicatorTimeDistribution(HttpServletResponse response,String startDate, String direction,String periodType){ + List list = new ArrayList<>(); + + String endDate = UniversalEnum.EMPTY_STRING.getValue(); + if (UniversalEnum.FOUR.getValue().equals(periodType)){ + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(UniversalEnum.TIME_FORMAT_YEARS_MONTH_DAY.getValue()); + LocalDate inputDate = LocalDate.parse(startDate, formatter); + // 获取一年前的日期 + LocalDate end = inputDate.minusYears(1); + endDate = end.format(formatter); + } else if (UniversalEnum.THREE.getValue().equals(periodType)){ + String[] parts = startDate.split(UniversalEnum.SHORT_BAR.getValue()); + int year = Integer.parseInt(parts[UniversalEnum.ZERO.getNumber()]); + int month = Integer.parseInt(parts[UniversalEnum.ONE.getNumber()]); + + // 计算一年前的年份和月份 + year -= UniversalEnum.ONE.getNumber(); + // 如果计算后月份为0,则调整为上一年的12月 + if (month == UniversalEnum.ZERO.getNumber()) { + year -= UniversalEnum.ONE.getNumber(); + month = UniversalEnum.TWELVE.getNumber(); + } + endDate = String.format("%04d-%02d", year, month); + } else if (UniversalEnum.ONE.getValue().equals(periodType)){ + int year = Integer.parseInt(startDate) - UniversalEnum.ONE.getNumber(); + endDate = String.valueOf(year); + } + List> thisYearList = dcGantryMetricsStatisticsDataService.passIndicatorTimeDistribution(startDate,direction,periodType); + Map>> thisYearData = thisYearList.stream().collect(Collectors.groupingBy(item -> item.get("groupTime").toString())); + List> lastYearList = dcGantryMetricsStatisticsDataService.passIndicatorTimeDistribution(endDate,direction,periodType); + Map>> lastYearData = lastYearList.stream().collect(Collectors.groupingBy(item -> item.get("groupTime").toString())); + + Set allKey = new HashSet<>(); + if (thisYearData != null){ + allKey.addAll(thisYearData.keySet()); + } + if (lastYearData != null){ + allKey.addAll(lastYearData.keySet()); + } + + for (String key : allKey) { + PassIndicatorTimeDistribution passIndicatorTimeDistribution = new PassIndicatorTimeDistribution(); + passIndicatorTimeDistribution.setTime(key); + if (thisYearData != null && thisYearData.containsKey(key)){ + Map sectionData = thisYearData.get(key).get(UniversalEnum.ZERO.getNumber()); + passIndicatorTimeDistribution.setCrowdingRate(sectionData.get("crowdingRate").toString()); + passIndicatorTimeDistribution.setSaturationRate(sectionData.get("saturationRate").toString()); + passIndicatorTimeDistribution.setTrafficCompositionRate(sectionData.get("trafficCompositionRate").toString()); + } + + if (lastYearData != null && lastYearData.containsKey(key)){ + Map sectionData = lastYearData.get(key).get(UniversalEnum.ZERO.getNumber()); + passIndicatorTimeDistribution.setCrowdingRateLastYear(sectionData.get("crowdingRate").toString()); + passIndicatorTimeDistribution.setSaturationRateLastYear(sectionData.get("saturationRate").toString()); + passIndicatorTimeDistribution.setTrafficCompositionRateLastYear(sectionData.get("trafficCompositionRate").toString()); + } + list.add(passIndicatorTimeDistribution); + } + + ExcelUtil util = new ExcelUtil<>(PassIndicatorTimeDistribution.class); + util.exportExcel(response, list, "交通指标时间分布"); + // 将查询结果封装为成功响应并返回 + } + @ApiOperation("交通指标雷达图") @GetMapping("/history/radarMapOfTrafficIndicators") public AjaxResult radarMapOfTrafficIndicators(String startDate, String direction,String periodType ){ @@ -498,6 +564,73 @@ public AjaxResult realTimeTrafficFlow(String startDate, String direction,String // 将查询结果封装为成功响应并返回 return AjaxResult.success(map); } + + @ApiOperation(value="导出交通指标雷达图",tags = {"ECharts导出"}) + @GetMapping("/history/exportRadarMapOfTrafficIndicators") + public void exportRadarMapOfTrafficIndicators(HttpServletResponse response,String startDate, String direction,String periodType,Long ranking){ + List list = new ArrayList<>(); + + String endDate = UniversalEnum.EMPTY_STRING.getValue(); + if (UniversalEnum.FOUR.getValue().equals(periodType)){ + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(UniversalEnum.TIME_FORMAT_YEARS_MONTH_DAY.getValue()); + LocalDate inputDate = LocalDate.parse(startDate, formatter); + // 获取一年前的日期 + LocalDate end = inputDate.minusYears(1); + endDate = end.format(formatter); + } else if (UniversalEnum.THREE.getValue().equals(periodType)){ + String[] parts = startDate.split(UniversalEnum.SHORT_BAR.getValue()); + int year = Integer.parseInt(parts[UniversalEnum.ZERO.getNumber()]); + int month = Integer.parseInt(parts[UniversalEnum.ONE.getNumber()]); + + // 计算一年前的年份和月份 + year -= UniversalEnum.ONE.getNumber(); + // 如果计算后月份为0,则调整为上一年的12月 + if (month == UniversalEnum.ZERO.getNumber()) { + year -= UniversalEnum.ONE.getNumber(); + month = UniversalEnum.TWELVE.getNumber(); + } + endDate = String.format("%04d-%02d", year, month); + } else if (UniversalEnum.ONE.getValue().equals(periodType)){ + int year = Integer.parseInt(startDate) - UniversalEnum.ONE.getNumber(); + endDate = String.valueOf(year); + } + Map map = dcGantryMetricsStatisticsDataService.radarMapOfTrafficIndicators(startDate,direction,periodType); + Map mapLastYear = dcGantryMetricsStatisticsDataService.radarMapOfTrafficIndicators(endDate,direction,periodType); + + RadarMapOfTrafficIndicators radarMapOfTrafficIndicators = new RadarMapOfTrafficIndicators(); + radarMapOfTrafficIndicators.setName("拥挤度"); + radarMapOfTrafficIndicators.setCurrentData(map.get("crowdingRate").toString()); + radarMapOfTrafficIndicators.setContemporaneousData(mapLastYear.get("crowdingRate").toString()); + list.add(radarMapOfTrafficIndicators); + + radarMapOfTrafficIndicators = new RadarMapOfTrafficIndicators(); + radarMapOfTrafficIndicators.setName("饱和度"); + if (map.get("saturationRate") instanceof Double){ + double saturationRate = (Double)map.get("saturationRate"); + radarMapOfTrafficIndicators.setCurrentData(String.format("%.4f", saturationRate)); + } else { + radarMapOfTrafficIndicators.setCurrentData("0"); + } + + if (mapLastYear.get("saturationRate") instanceof Double){ + double saturationRate = (Double)mapLastYear.get("saturationRate"); + radarMapOfTrafficIndicators.setContemporaneousData(String.format("%.4f", saturationRate)); + } else { + radarMapOfTrafficIndicators.setContemporaneousData("0"); + } + list.add(radarMapOfTrafficIndicators); + + radarMapOfTrafficIndicators = new RadarMapOfTrafficIndicators(); + radarMapOfTrafficIndicators.setName("交通特征组成指数"); + radarMapOfTrafficIndicators.setCurrentData(map.get("trafficCompositionRate").toString()); + radarMapOfTrafficIndicators.setContemporaneousData(mapLastYear.get("trafficCompositionRate").toString()); + list.add(radarMapOfTrafficIndicators); + + + ExcelUtil util = new ExcelUtil<>(RadarMapOfTrafficIndicators.class); + util.exportExcel(response, list, "交通指标雷达图"); + } + @ApiOperation("综合指标查询") @GetMapping("/history/comprehensiveIndexQuery") public TableDataInfo comprehensiveIndexQuery(ComprehensiveIndexQuery comprehensiveIndexQuery){ @@ -630,6 +763,182 @@ public AjaxResult trafficFlowAtTollStationEntranceHour(String startDate, String return AjaxResult.success(jsonArray); } + /** + * 导出收费站出入口实时车流量 + */ + @ApiOperation(value = "导出收费站出入口实时车流量",tags = {"ECharts导出"}) + @GetMapping("/history/exportTrafficFlowAtTollStationEntranceHour") + public void exportTrafficFlowAtTollStationEntranceHour(HttpServletResponse response) throws IOException, HttpException { + + response.setContentType(UniversalEnum.DERIVE_THE_TWO_WAY_REAL_TIME_TRAFFIC_FLOW_OF_THE_WHOLE_SECTION.getValue()); + response.setCharacterEncoding(UniversalEnum.LOWERCASE_UTF_8.getValue()); + String fileName = "收费站出入口实时车流量.xlsx"; + response.setHeader("Content-Disposition", "attachment; filename=" + fileName); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(UniversalEnum.TIME_FORMAT_YEARS_MONTH_DAY.getValue()); + LocalDate currentDate = LocalDate.now(); + String now = currentDate.format(formatter); + + // 获取一年前的日期 + LocalDate oneYearAgo = currentDate.minusYears(UniversalEnum.ONE.getNumber()); + String lastYear = oneYearAgo.format(formatter); + + Set stationList = new HashSet<>(); + + // 本期入口 + List> thisYearEntrance = dcTrafficStatisticsService.trafficFlowAtTollStationEntrance(now, now, "1"); + Map>> thisYearEntranceData = new HashMap<>(); + if (thisYearEntrance != null && thisYearEntrance.size() > 0){ + thisYearEntranceData = thisYearEntrance.stream().collect(Collectors.groupingBy(item -> item.get("name"))); + stationList.addAll(thisYearEntranceData.keySet()); + } + + // 本期出口 + List> thisYearExport = dcTrafficStatisticsService.trafficFlowAtTollStationEntrance(now, now, "2"); + Map>> thisYearExportData = new HashMap<>(); + if (thisYearExport != null && thisYearExport.size() > 0){ + thisYearExportData = thisYearExport.stream().collect(Collectors.groupingBy(item -> item.get("name"))); + stationList.addAll(thisYearExportData.keySet()); + } + + // 去年入口 + List> lastYearEntrance = dcTrafficStatisticsService.trafficFlowAtTollStationEntrance(lastYear, lastYear, "1"); + Map>> lastYearEntranceData = new HashMap<>(); + if (lastYearEntrance != null && lastYearEntrance.size() > 0) { + lastYearEntranceData = lastYearEntrance.stream().collect(Collectors.groupingBy(item -> item.get("name"))); + stationList.addAll(lastYearEntranceData.keySet()); + } + + // 去年出口 + List> lastYearExport = dcTrafficStatisticsService.trafficFlowAtTollStationEntrance(lastYear, lastYear, "2"); + Map>> lastYearExportData = new HashMap<>(); + if (lastYearExport != null && lastYearExport.size() > 0) { + lastYearExportData = lastYearExport.stream().collect(Collectors.groupingBy(item -> item.get("name"))); + stationList.addAll(lastYearExportData.keySet()); + } + XSSFWorkbook workbook = new XSSFWorkbook(); // 创建工作簿 + Sheet sheet = workbook.createSheet(UniversalEnum.THE_WHOLE_SECTION_TWO_WAY_REAL_TIME_TRAFFIC_FLOW.getValue()); // 创建工作表 + + // 创建数据行样式 + CellStyle dataStyle = workbook.createCellStyle(); + dataStyle.setAlignment(HorizontalAlignment.CENTER); + dataStyle.setVerticalAlignment(VerticalAlignment.CENTER); + dataStyle.setBorderRight(BorderStyle.THIN); + dataStyle.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + dataStyle.setBorderLeft(BorderStyle.THIN); + dataStyle.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + dataStyle.setBorderTop(BorderStyle.THIN); + dataStyle.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + dataStyle.setBorderBottom(BorderStyle.THIN); + dataStyle.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + Font dataFont = workbook.createFont(); + dataFont.setFontName(UniversalEnum.ARIAL.getValue()); + dataFont.setFontHeightInPoints((short) UniversalEnum.TEN.getNumber()); + dataStyle.setFont(dataFont); + + // 创建表头样式 + CellStyle headerStyle = workbook.createCellStyle(); + headerStyle.cloneStyleFrom(dataStyle); + headerStyle.setAlignment(HorizontalAlignment.CENTER); + headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); + headerStyle.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); + headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font headerFont = workbook.createFont(); + headerFont.setFontName(UniversalEnum.ARIAL.getValue()); + headerFont.setFontHeightInPoints((short) UniversalEnum.TEN.getNumber()); + headerFont.setBold(true); + headerFont.setColor(IndexedColors.WHITE.getIndex()); + headerStyle.setFont(headerFont); + + // 添加第一层级表头 + Row row = sheet.createRow(UniversalEnum.ZERO.getNumber()); + Cell cell = row.createCell(UniversalEnum.ZERO.getNumber()); + cell.setCellValue(UniversalEnum.TOLL_STATION.getValue()); + cell.setCellStyle(headerStyle); + cell = row.createCell(UniversalEnum.ONE.getNumber()); + cell.setCellValue(UniversalEnum.ENTRANCE.getValue()); + cell.setCellStyle(headerStyle); + cell = row.createCell(UniversalEnum.TWO.getNumber()); + cell.setCellValue(UniversalEnum.EMPTY_STRING.getValue()); + cell.setCellStyle(headerStyle);; + cell = row.createCell(UniversalEnum.THREE.getNumber()); + cell.setCellValue(UniversalEnum.EXIT.getValue()); + cell.setCellStyle(headerStyle); + cell = row.createCell(UniversalEnum.FOUR.getNumber()); + cell.setCellValue(UniversalEnum.EMPTY_STRING.getValue()); + cell.setCellStyle(headerStyle); + + // 添加第二层级表头(与第一层级对齐) + Row subHeaderRow1 = sheet.createRow(UniversalEnum.ONE.getNumber()); + cell = subHeaderRow1.createCell(UniversalEnum.ZERO.getNumber()); + cell.setCellValue(UniversalEnum.EMPTY_STRING.getValue()); + cell.setCellStyle(headerStyle); + cell = subHeaderRow1.createCell(UniversalEnum.ONE.getNumber()); + cell.setCellValue(UniversalEnum.CURRENT_TRAFFIC_FLOW.getValue()); + cell.setCellStyle(headerStyle); + + cell = subHeaderRow1.createCell(UniversalEnum.TWO.getNumber()); + cell.setCellValue(UniversalEnum.THE_SAME_PERIOD_LAST_YEAR.getValue()); + cell.setCellStyle(headerStyle); + cell = subHeaderRow1.createCell(UniversalEnum.THREE.getNumber()); + cell.setCellValue(UniversalEnum.CURRENT_TRAFFIC_FLOW.getValue()); + cell.setCellStyle(headerStyle); + + cell = subHeaderRow1.createCell(UniversalEnum.FOUR.getNumber()); + cell.setCellValue(UniversalEnum.THE_SAME_PERIOD_LAST_YEAR.getValue()); + cell.setCellStyle(headerStyle); + + //合并单元格,参数依次为起始行,结束行,起始列,结束列 (从0开始) + //路段名称 + sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ZERO.getNumber(), UniversalEnum.ONE.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.ZERO.getNumber())); + //济南方向 + sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ZERO.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.ONE.getNumber(), UniversalEnum.TWO.getNumber())); + //菏泽方向 + sheet.addMergedRegion(new CellRangeAddress(UniversalEnum.ZERO.getNumber(), UniversalEnum.ZERO.getNumber(), UniversalEnum.THREE.getNumber(), UniversalEnum.FOUR.getNumber())); + + int i = 2; + for (String station : stationList) { + Row subHeaderRow = sheet.createRow(i); + cell = subHeaderRow.createCell(UniversalEnum.ZERO.getNumber()); + cell.setCellValue(station); + cell.setCellStyle(dataStyle); + + if (thisYearEntranceData.containsKey(station)){ + cell = subHeaderRow.createCell(UniversalEnum.ONE.getNumber()); + cell.setCellValue(thisYearEntranceData.get(station).get(0).get("value")); + cell.setCellStyle(dataStyle); + } + + if (lastYearEntranceData.containsKey(station)){ + cell = subHeaderRow.createCell(UniversalEnum.TWO.getNumber()); + cell.setCellValue(lastYearEntranceData.get(station).get(0).get("value")); + cell.setCellStyle(dataStyle); + } + + if (thisYearExportData.containsKey(station)){ + cell = subHeaderRow.createCell(UniversalEnum.THREE.getNumber()); + cell.setCellValue(thisYearExportData.get(station).get(0).get("value")); + cell.setCellStyle(dataStyle); + } + + if (lastYearExportData.containsKey(station)){ + cell = subHeaderRow.createCell(UniversalEnum.THREE.getNumber()); + cell.setCellValue(lastYearExportData.get(station).get(0).get("value")); + cell.setCellStyle(dataStyle); + } + i++; + } + + // 写入文件 + try (ServletOutputStream outputStream = response.getOutputStream()){ + workbook.write(outputStream); + } finally { + workbook.close(); + } + + + } + /** * 各收费站入口分车型小时车流量 */ @@ -685,15 +994,6 @@ public AjaxResult trafficFlowAtTollStationEntrance(String startDate, String endD String fileName = UniversalEnum.REAL_TIME_TRAFFIC_FLOW_IN_BOTH_DIRECTIONS_XLSX.name(); response.setHeader("Content-Disposition", "attachment; filename=" + fileName); - - DateTimeFormatter formatter = DateTimeFormatter.ofPattern(UniversalEnum.TIME_FORMAT_YEARS_MONTH_DAY.getValue()); - LocalDate currentDate = LocalDate.now(); - String now = currentDate.format(formatter); - - // 获取一年前的日期 - LocalDate oneYearAgo = currentDate.minusYears(UniversalEnum.ONE.getNumber()); - String lastYear = oneYearAgo.format(formatter); - Map>> map = dcTrafficStatisticsService.realTimeTrafficFlowHour(); if (map != null){ List> thisYearHZ = map.get(UniversalEnum.ONE.getValue()); diff --git a/zc-business/src/main/java/com/zc/business/domain/export/PassIndicatorTimeDistribution.java b/zc-business/src/main/java/com/zc/business/domain/export/PassIndicatorTimeDistribution.java new file mode 100644 index 00000000..d7e9865a --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/domain/export/PassIndicatorTimeDistribution.java @@ -0,0 +1,111 @@ +package com.zc.business.domain.export; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 导出交通指标时间分布对象 + * + * @author ruoyi + * @date 2024-01-13 + */ +public class PassIndicatorTimeDistribution extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + + /** 时间 */ + @Excel(name = "时间") + private String time; + + /** 饱和度 */ + @Excel(name = "饱和度") + private String saturationRate; + /** 拥挤度 */ + @Excel(name = "拥挤度") + private String crowdingRate; + /** 交通组成特征指数 */ + @Excel(name = "交通组成特征指数") + private String trafficCompositionRate; + + /** 饱和度去年同期 */ + @Excel(name = "饱和度去年同期") + private String saturationRateLastYear; + /** 拥挤度去年同期 */ + @Excel(name = "拥挤度去年同期") + private String crowdingRateLastYear; + /** 交通组成特征指数去年同期 */ + @Excel(name = "交通组成特征指数去年同期") + private String trafficCompositionRateLastYear; + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getSaturationRate() { + return saturationRate; + } + + public void setSaturationRate(String saturationRate) { + this.saturationRate = saturationRate; + } + + public String getCrowdingRate() { + return crowdingRate; + } + + public void setCrowdingRate(String crowdingRate) { + this.crowdingRate = crowdingRate; + } + + public String getTrafficCompositionRate() { + return trafficCompositionRate; + } + + public void setTrafficCompositionRate(String trafficCompositionRate) { + this.trafficCompositionRate = trafficCompositionRate; + } + + public String getSaturationRateLastYear() { + return saturationRateLastYear; + } + + public void setSaturationRateLastYear(String saturationRateLastYear) { + this.saturationRateLastYear = saturationRateLastYear; + } + + public String getCrowdingRateLastYear() { + return crowdingRateLastYear; + } + + public void setCrowdingRateLastYear(String crowdingRateLastYear) { + this.crowdingRateLastYear = crowdingRateLastYear; + } + + public String getTrafficCompositionRateLastYear() { + return trafficCompositionRateLastYear; + } + + public void setTrafficCompositionRateLastYear(String trafficCompositionRateLastYear) { + this.trafficCompositionRateLastYear = trafficCompositionRateLastYear; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("time", getTime()) + .append("saturationRate", getSaturationRate()) + .append("crowdingRate", getCrowdingRate()) + .append("trafficCompositionRate", getTrafficCompositionRate()) + .append("saturationRateLastYear", getSaturationRateLastYear()) + .append("crowdingRateLastYear", getCrowdingRateLastYear()) + .append("trafficCompositionRateLastYear", getTrafficCompositionRateLastYear()) + .toString(); + } +} diff --git a/zc-business/src/main/java/com/zc/business/domain/export/RadarMapOfTrafficIndicators.java b/zc-business/src/main/java/com/zc/business/domain/export/RadarMapOfTrafficIndicators.java new file mode 100644 index 00000000..5ec3e42a --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/domain/export/RadarMapOfTrafficIndicators.java @@ -0,0 +1,62 @@ +package com.zc.business.domain.export; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 导出交通指标雷达图对象 + * + * @author ruoyi + * @date 2024-01-13 + */ +public class RadarMapOfTrafficIndicators extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + + /** 名称 */ + @Excel(name = "名称") + private String name; + + /** 本期指标 */ + @Excel(name = "本期指标") + private String currentData; + /** 去年同期 */ + @Excel(name = "去年同期") + private String contemporaneousData; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCurrentData() { + return currentData; + } + + public void setCurrentData(String currentData) { + this.currentData = currentData; + } + + public String getContemporaneousData() { + return contemporaneousData; + } + + public void setContemporaneousData(String contemporaneousData) { + this.contemporaneousData = contemporaneousData; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("name", getName()) + .append("currentData", getCurrentData()) + .append("contemporaneousData", getContemporaneousData()) + .toString(); + } +} From 97d8081f8e92fbf5f69feb3f09a22bd41a8ce7c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=B4=E7=90=B3?= <1911390090@qq.com> Date: Mon, 1 Jul 2024 16:22:33 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E6=B0=94=E8=B1=A1=E8=AE=BE=E5=A4=87=20?= =?UTF-8?q?=E6=9E=9A=E4=B8=BE=E5=8F=82=E6=95=B0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/message/device/handler/DeviceMessageHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java b/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java index 6c7a8dbb..01c26aad 100644 --- a/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java +++ b/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java @@ -580,7 +580,7 @@ public class DeviceMessageHandler { JSONObject jsonObjectHeaders = (JSONObject) msg.get("headers"); String parts = jsonObjectHeaders.getString("deviceName"); - String[] strings = parts.split(UniversalEnum.SHORT_BAR.toString()); + String[] strings = parts.split(UniversalEnum.SHORT_BAR.getValue()); String deviceName = strings[UniversalEnum.ZERO.getNumber()]; String stakeMark = strings[UniversalEnum.ONE.getNumber()]; String direction = strings[UniversalEnum.TWO.getNumber()]; From 7a0cd38099b6c653c4f88ac6da8f5f7834e7478e Mon Sep 17 00:00:00 2001 From: lau572 <1010031226@qq.com> Date: Mon, 1 Jul 2024 16:44:04 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E5=A4=84=E7=BD=AE=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zc/business/service/impl/DcEventServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java index 1c6cf344..f2cf9e4c 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java @@ -1553,7 +1553,8 @@ public class DcEventServiceImpl extends ServiceImpl impl || UniversalEnum.DC_EVENT_VEHICLE_ACCIDENT_CONGESTION_AHEAD.getValue().equals(result.getRightPath()) || UniversalEnum.DC_EVENT_VEHICLE_ACCIDENT_AT_INTERSECTION.getValue().equals(result.getRightPath()) || UniversalEnum.DC_EVENT_VEHICLE_ACCIDENT_ON_CURVE.getValue().equals(result.getRightPath()) - || UniversalEnum.DC_EVENT_VEHICLE_ACCIDENT_IS_PRIVATE.getValue().equals(result.getRightPath())) { + || UniversalEnum.DC_EVENT_VEHICLE_ACCIDENT_IS_PRIVATE.getValue().equals(result.getRightPath()) + || UniversalEnum.IN_TUNNEL.getValue().equals(result.getRightPath())) { if (UniversalEnum.ZERO.getValue().equals(result.getRight())) { result.setRight(UniversalEnum.NO.getValue()); } else if (UniversalEnum.ONE.getValue().equals(result.getRight())) { From 3aa7e668045d9976f98fde30f850993409110191 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=B4=E7=90=B3?= <1911390090@qq.com> Date: Mon, 1 Jul 2024 16:56:08 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E6=B0=94=E8=B1=A1=E8=AE=BE=E5=A4=87=20?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=B8=A2=E5=A4=B1=E5=8A=A0=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DcMeteorologicalDetectorController.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/zc-business/src/main/java/com/zc/business/controller/DcMeteorologicalDetectorController.java b/zc-business/src/main/java/com/zc/business/controller/DcMeteorologicalDetectorController.java index d42b6691..53fb97e9 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DcMeteorologicalDetectorController.java +++ b/zc-business/src/main/java/com/zc/business/controller/DcMeteorologicalDetectorController.java @@ -2,11 +2,9 @@ package com.zc.business.controller; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.page.TableDataInfo; -import com.zc.business.domain.DcEvent; import com.zc.business.domain.DcMeteorologicalDetectorData; -import com.zc.business.service.IDcEventService; +import com.zc.business.enums.UniversalEnum; import com.zc.business.service.IDcMeteorologicalDetectorDataService; -import com.zc.business.service.impl.DcMeteorologicalDetectorDataServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -29,6 +27,8 @@ public class DcMeteorologicalDetectorController extends BaseController { @GetMapping("/deviceName") public TableDataInfo list(String deviceName) { + deviceName = deviceName.replace(UniversalEnum.BLANK_SPACE.getValue(), UniversalEnum.PLUS_SIGN.getValue()); + List> list = dcMeteorologicalDetectorDataService.selectStatistics(deviceName); return getDataTable(list); } @@ -36,6 +36,8 @@ public class DcMeteorologicalDetectorController extends BaseController { @GetMapping("/device/{deviceName}") public TableDataInfo deviceNameList(@PathVariable("deviceName") String deviceName) { + deviceName = deviceName.replace(UniversalEnum.BLANK_SPACE.getValue(), UniversalEnum.PLUS_SIGN.getValue()); + List list = dcMeteorologicalDetectorDataService.selectDeviceNameList(deviceName); return getDataTable(list); } @@ -59,6 +61,8 @@ public class DcMeteorologicalDetectorController extends BaseController { @GetMapping("/deviceHour") public TableDataInfo deviceHour(String deviceName,String specificDate) { + deviceName = deviceName.replace(UniversalEnum.BLANK_SPACE.getValue(), UniversalEnum.PLUS_SIGN.getValue()); + List> list = dcMeteorologicalDetectorDataService.selectStatisticsTime(deviceName,specificDate); return getDataTable(list); } @@ -66,6 +70,8 @@ public class DcMeteorologicalDetectorController extends BaseController { @GetMapping("/deviceDay") public TableDataInfo deviceDay(String deviceName,String specificDate) { + deviceName = deviceName.replace(UniversalEnum.BLANK_SPACE.getValue(), UniversalEnum.PLUS_SIGN.getValue()); + List> list = dcMeteorologicalDetectorDataService.selectStatisticsDay(deviceName,specificDate); return getDataTable(list); } @@ -73,6 +79,8 @@ public class DcMeteorologicalDetectorController extends BaseController { @GetMapping("/deviceYears") public TableDataInfo deviceYears(String deviceName,String specificDate) { + deviceName = deviceName.replace(UniversalEnum.BLANK_SPACE.getValue(), UniversalEnum.PLUS_SIGN.getValue()); + List> list = dcMeteorologicalDetectorDataService.selectStatisticsYears(deviceName,specificDate); return getDataTable(list); } From 49937c94aad5cb228e251317b0740762b71b1f22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=B4=E7=90=B3?= <1911390090@qq.com> Date: Mon, 1 Jul 2024 17:12:33 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/business/DcEventMapper.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/zc-business/src/main/resources/mapper/business/DcEventMapper.xml b/zc-business/src/main/resources/mapper/business/DcEventMapper.xml index f88c5b12..3582a36a 100644 --- a/zc-business/src/main/resources/mapper/business/DcEventMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcEventMapper.xml @@ -343,7 +343,11 @@ and direction = #{direction} and user_id = #{userId} - and start_time BETWEEN #{startTime} and #{endTime} + and start_time BETWEEN #{startTime} and #{endTime} + + and occurrence_time BETWEEN #{startTime} and #{endTime} + + and end_time BETWEEN #{startTime} and #{endTime} and estimated_end_time = #{estimatedEndTime} and event_level = #{eventLevel} and event_type = #{eventType} From e8032ad89c1fc981b57bdc4995bb7db277b108a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=B4=E7=90=B3?= <1911390090@qq.com> Date: Mon, 1 Jul 2024 17:26:08 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/business/DcEventMapper.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zc-business/src/main/resources/mapper/business/DcEventMapper.xml b/zc-business/src/main/resources/mapper/business/DcEventMapper.xml index 3582a36a..30e3a34e 100644 --- a/zc-business/src/main/resources/mapper/business/DcEventMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcEventMapper.xml @@ -343,18 +343,18 @@ and direction = #{direction} and user_id = #{userId} - and start_time BETWEEN #{startTime} and #{endTime} + and event_state = #{eventState} + and start_time BETWEEN #{startTime} and #{endTime} - and occurrence_time BETWEEN #{startTime} and #{endTime} + and occurrence_time BETWEEN #{startTime} and #{endTime} - and end_time BETWEEN #{startTime} and #{endTime} + and end_time BETWEEN #{startTime} and #{endTime} and estimated_end_time = #{estimatedEndTime} and event_level = #{eventLevel} and event_type = #{eventType} and event_subclass = #{eventSubclass} and event_cause = #{eventCause} and description = #{description} - and event_state = #{eventState} and event_source = #{eventSource} and event_nature = #{eventNature} and event_source_tips = #{eventSourceTips}