Browse Source

Merge remote-tracking branch 'origin/develop' into develop

develop
wangsixiang 8 months ago
parent
commit
028076e11b
  1. 100
      zc-business/src/main/java/com/zc/business/controller/DcDeviceController.java
  2. 14
      zc-business/src/main/java/com/zc/business/controller/DcMeteorologicalDetectorController.java
  3. 330
      zc-business/src/main/java/com/zc/business/controller/DcTrafficStatisticsController.java
  4. 60
      zc-business/src/main/java/com/zc/business/controller/DeviceStatus.java
  5. 111
      zc-business/src/main/java/com/zc/business/domain/export/PassIndicatorTimeDistribution.java
  6. 62
      zc-business/src/main/java/com/zc/business/domain/export/RadarMapOfTrafficIndicators.java
  7. 6
      zc-business/src/main/java/com/zc/business/enums/UniversalEnum.java
  8. 4
      zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java
  9. 3
      zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java
  10. 8
      zc-business/src/main/java/com/zc/business/service/impl/DcTrafficStatisticsServiceImpl.java
  11. 8
      zc-business/src/main/resources/mapper/business/DcEventMapper.xml

100
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<String> 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<String, Object> props) throws HttpException, IOException {
//public AjaxResult invokedFunction(@PathVariable String deviceId,@PathVariable String functionId,@RequestBody HashMap<String, Object> props,int operType) throws HttpException, IOException { todo
//public AjaxResult invokedFunction(@PathVariable String deviceId,@PathVariable String functionId,@RequestBody HashMap<String, Object> 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<String, Object>) param));
}
HashMap<String, Object> 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<String, Object> map = new ObjectMapper().convertValue(object, Map.class);
return batchInvokedFunction(map);
}
/**
* 分页查询设备名称列表
*
* @param dcDevice 请求参数
* @return 分页查询结果
*/
@ -718,33 +718,36 @@ public class DcDeviceController extends BaseController {
startPage();
return getDataTable(dcDeviceService.selectDeviceNameList(dcDevice));
}
@GetMapping("/deviceParameter")
public AjaxResult selectDeviceParameterProperties(DcDevice dcDevice) {
return AjaxResult.success(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<String, Object> props = new HashMap<>();
// 设置查询条件的键为“timestamp$BTW”,表示时间戳在一定范围内
// 设置查询条件的键为“timestamp$BTW”,表示时间戳在一定范围内
props.put("terms[0].column", "timestamp$BTW");
ArrayList<String> dateList = new ArrayList<>();
// 添加当前日期的开始和结束时间到列表,用于设定时间范围
@ -763,7 +766,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)) { //判断是否为设备箱/远端机
@ -813,6 +816,7 @@ public class DcDeviceController extends BaseController {
}
return null;
}
/**
* 设备箱-设备操作口令校验
*/
@ -911,4 +915,22 @@ public class DcDeviceController extends BaseController {
return AjaxResult.success(resultsMapValue);
}
///***
// * 合流区预警设备设备电量不足警告
// */
//@Scheduled(cron = "0 0/1 * * * ?")
//public void ConfluenceAreaEarlyWarningDeviceBatteryLowWarning() throws HttpException, IOException {
// DcDevice dcDevice = new DcDevice();
// dcDevice.setDeviceType("8");
// List<DcDevice> 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"));
// }
// }
//}
}

14
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<Map<String,String>> 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<DcMeteorologicalDetectorData> 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<Map<String,String>> 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<Map<String,String>> 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<Map<String,String>> list = dcMeteorologicalDetectorDataService.selectStatisticsYears(deviceName,specificDate);
return getDataTable(list);
}

330
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<String, Object> 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<String, Object> 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<PassIndicatorTimeDistribution> 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<Map<String, Object>> thisYearList = dcGantryMetricsStatisticsDataService.passIndicatorTimeDistribution(startDate,direction,periodType);
Map<String,List<Map<String, Object>>> thisYearData = thisYearList.stream().collect(Collectors.groupingBy(item -> item.get("groupTime").toString()));
List<Map<String, Object>> lastYearList = dcGantryMetricsStatisticsDataService.passIndicatorTimeDistribution(endDate,direction,periodType);
Map<String,List<Map<String, Object>>> lastYearData = lastYearList.stream().collect(Collectors.groupingBy(item -> item.get("groupTime").toString()));
Set<String> 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<String, Object> 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<String, Object> 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<PassIndicatorTimeDistribution> 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<RadarMapOfTrafficIndicators> 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<String, Object> map = dcGantryMetricsStatisticsDataService.radarMapOfTrafficIndicators(startDate,direction,periodType);
Map<String, Object> 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<RadarMapOfTrafficIndicators> 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<String> stationList = new HashSet<>();
// 本期入口
List<Map<String, String>> thisYearEntrance = dcTrafficStatisticsService.trafficFlowAtTollStationEntrance(now, now, "1");
Map<String,List<Map<String, String>>> thisYearEntranceData = new HashMap<>();
if (thisYearEntrance != null && thisYearEntrance.size() > 0){
thisYearEntranceData = thisYearEntrance.stream().collect(Collectors.groupingBy(item -> item.get("name")));
stationList.addAll(thisYearEntranceData.keySet());
}
// 本期出口
List<Map<String, String>> thisYearExport = dcTrafficStatisticsService.trafficFlowAtTollStationEntrance(now, now, "2");
Map<String,List<Map<String, String>>> thisYearExportData = new HashMap<>();
if (thisYearExport != null && thisYearExport.size() > 0){
thisYearExportData = thisYearExport.stream().collect(Collectors.groupingBy(item -> item.get("name")));
stationList.addAll(thisYearExportData.keySet());
}
// 去年入口
List<Map<String, String>> lastYearEntrance = dcTrafficStatisticsService.trafficFlowAtTollStationEntrance(lastYear, lastYear, "1");
Map<String, List<Map<String, String>>> lastYearEntranceData = new HashMap<>();
if (lastYearEntrance != null && lastYearEntrance.size() > 0) {
lastYearEntranceData = lastYearEntrance.stream().collect(Collectors.groupingBy(item -> item.get("name")));
stationList.addAll(lastYearEntranceData.keySet());
}
// 去年出口
List<Map<String, String>> lastYearExport = dcTrafficStatisticsService.trafficFlowAtTollStationEntrance(lastYear, lastYear, "2");
Map<String, List<Map<String, String>>> 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<String,List<Map<String,Object>>> map = dcTrafficStatisticsService.realTimeTrafficFlowHour();
if (map != null){
List<Map<String,Object>> thisYearHZ = map.get(UniversalEnum.ONE.getValue());

60
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()]);
}
}

111
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();
}
}

62
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();
}
}

6
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, "["),

4
zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java

@ -580,14 +580,14 @@ 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()];
//设备名称
meteorologicalDetectorData.setDeviceName(deviceName+"("+stakeMark+")");
meteorologicalDetectorData.setDeviceName(deviceName+UniversalEnum.OPEN_PARENTHESIS.getValue()+stakeMark+UniversalEnum.CLOSING_PARENTHESIS.getValue());
//位置
meteorologicalDetectorData.setStakeMark(stakeMark);
//方向

3
zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java

@ -1553,7 +1553,8 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> 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())) {

8
zc-business/src/main/java/com/zc/business/service/impl/DcTrafficStatisticsServiceImpl.java

@ -923,7 +923,7 @@ 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(); // 请求方法
@ -1035,10 +1035,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;

8
zc-business/src/main/resources/mapper/business/DcEventMapper.xml

@ -343,14 +343,18 @@
</if>
<if test="direction != null and direction != ''">and direction = #{direction}</if>
<if test="userId != null ">and user_id = #{userId}</if>
<if test="startTime != null ">and start_time BETWEEN #{startTime} and #{endTime}</if>
<if test="eventState != null ">and event_state = #{eventState}</if>
<if test="eventState == 1 and startTime !=null and endTime != null ">and start_time BETWEEN #{startTime} and #{endTime}</if>
<if test="eventState == 0 and startTime !=null and endTime != null ">and occurrence_time BETWEEN #{startTime} and #{endTime}</if>
<if test="eventState == 2 and startTime !=null and endTime != null ">and end_time BETWEEN #{startTime} and #{endTime}</if>
<if test="estimatedEndTime != null ">and estimated_end_time = #{estimatedEndTime}</if>
<if test="eventLevel != null ">and event_level = #{eventLevel}</if>
<if test="eventType != null ">and event_type = #{eventType}</if>
<if test="eventSubclass != null and eventSubclass != ''">and event_subclass = #{eventSubclass}</if>
<if test="eventCause != null and eventCause != ''">and event_cause = #{eventCause}</if>
<if test="description != null and description != ''">and description = #{description}</if>
<if test="eventState != null ">and event_state = #{eventState}</if>
<if test="eventSource != null ">and event_source = #{eventSource}</if>
<if test="eventNature != null ">and event_nature = #{eventNature}</if>
<if test="eventSourceTips != null and eventSourceTips != ''">and event_source_tips = #{eventSourceTips}

Loading…
Cancel
Save