Browse Source

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

develop
wangsixiang 8 months ago
parent
commit
b92dc32649
  1. 15
      zc-business/src/main/java/com/zc/business/controller/DcTrafficFlowWarning.java
  2. 51
      zc-business/src/main/java/com/zc/business/controller/DcTrafficStatisticsController.java
  3. 13
      zc-business/src/main/java/com/zc/business/controller/StatusController.java
  4. 2
      zc-business/src/main/java/com/zc/business/domain/DcEvent.java
  5. 99
      zc-business/src/main/java/com/zc/business/domain/Status.java
  6. 36
      zc-business/src/main/java/com/zc/business/service/impl/DcTrafficStatisticsServiceImpl.java
  7. 15
      zc-business/src/main/resources/mapper/business/StatusMapper.xml

15
zc-business/src/main/java/com/zc/business/controller/DcTrafficFlowWarning.java

@ -17,10 +17,7 @@ import javax.annotation.Resource;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
*
@ -72,12 +69,12 @@ public class DcTrafficFlowWarning {
String[] date = vacation1.split(UniversalEnum.THERE_S_A_LOT_GOING_ON.getValue());
Map<String, Map<String, List<Map<String, String>>>> mapListOne = new HashMap<>();
Map<String, Map<String, List<Map<String, String>>>> mapListOne = new LinkedHashMap<>();
Map<String, List<Map<String, String>>> map = new HashMap<>();
Map<String, List<Map<String, String>>> map2 = new HashMap<>();
Map<String, List<Map<String, String>>> map3 = new HashMap<>();
Map<String, List<Map<String, String>>> map4 = new HashMap<>();
Map<String, List<Map<String, String>>> map = new LinkedHashMap<>();
Map<String, List<Map<String, String>>> map2 = new LinkedHashMap<>();
Map<String, List<Map<String, String>>> map3 = new LinkedHashMap<>();
Map<String, List<Map<String, String>>> map4 = new LinkedHashMap<>();
for (int i1 = UniversalEnum.ZERO.getNumber(); i1 < date.length; i1++) {
//交通流
List<Map<String, String>> mapList = dcGantryStatisticsDataService.realTimeTrafficFlow(date[i1], UniversalEnum.ONE.getValue(), UniversalEnum.FOUR.getValue());

51
zc-business/src/main/java/com/zc/business/controller/DcTrafficStatisticsController.java

@ -2,6 +2,7 @@ package com.zc.business.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
@ -24,6 +25,8 @@ import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;
import javax.servlet.ServletOutputStream;
@ -31,6 +34,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Function;
@ -42,6 +46,7 @@ import java.util.stream.Collectors;
*
* @author xiepufeng
*/
//@Component
@Api(tags = "交通数据统计")
@RestController
@RequestMapping("/business/traffic-statistics")
@ -521,7 +526,27 @@ public AjaxResult realTimeTrafficFlow(String startDate, String direction,String
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()));
Map<String,List<Map<String, Object>>> thisYearData = new HashMap<>();
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm");
if (UniversalEnum.FOUR.getValue().equals(periodType)){
thisYearData = thisYearList.stream().collect(Collectors.groupingBy(item -> {
LocalDateTime dateTime = LocalDateTime.parse(item.get("groupTime").toString(), inputFormatter);
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("HH时");
return outputFormatter.format(dateTime);
}));
} else if (UniversalEnum.THREE.getValue().equals(periodType)){
thisYearData = thisYearList.stream().collect(Collectors.groupingBy(item -> {
LocalDateTime dateTime = LocalDateTime.parse(item.get("groupTime").toString(), inputFormatter);
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("M月d日");
return dateTime.format(outputFormatter);
}));
} else if (UniversalEnum.ONE.getValue().equals(periodType)){
thisYearData = thisYearList.stream().collect(Collectors.groupingBy(item -> {
LocalDateTime dateTime = LocalDateTime.parse(item.get("groupTime").toString(), inputFormatter);
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("M月");
return dateTime.format(outputFormatter);
}));
}
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()));
@ -533,20 +558,36 @@ public AjaxResult realTimeTrafficFlow(String startDate, String direction,String
allKey.addAll(lastYearData.keySet());
}
for (String key : allKey) {
List<String> keyList = new ArrayList<>(allKey);
Collections.sort(keyList);
for (String key : keyList) {
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());
if (sectionData.get("saturationRate") instanceof Double){
double saturationRate = (Double)sectionData.get("saturationRate");
passIndicatorTimeDistribution.setSaturationRate(String.format("%.4f", saturationRate));
} else {
passIndicatorTimeDistribution.setSaturationRate("0");
}
// 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.setSaturationRateLastYear(sectionData.get("saturationRate").toString());
if (sectionData.get("saturationRate") instanceof Double){
double saturationRate = (Double)sectionData.get("saturationRate");
passIndicatorTimeDistribution.setSaturationRateLastYear(String.format("%.4f", saturationRate));
} else {
passIndicatorTimeDistribution.setSaturationRateLastYear("0");
}
passIndicatorTimeDistribution.setTrafficCompositionRateLastYear(sectionData.get("trafficCompositionRate").toString());
}
list.add(passIndicatorTimeDistribution);
@ -704,7 +745,7 @@ public AjaxResult realTimeTrafficFlow(String startDate, String direction,String
// 将获取到的交通指标数据封装为成功的结果并返回
return AjaxResult.success(jsonArray);
}
// @Scheduled(cron = "0/30 * * * * ?")
@ApiOperation("获取当前拥堵路段")
@GetMapping("/current/getTheCurrentCongestedSection")
public AjaxResult getTheCurrentCongestedSection() throws HttpException, IOException {

13
zc-business/src/main/java/com/zc/business/controller/StatusController.java

@ -53,7 +53,10 @@ public class StatusController extends BaseController {
@GetMapping ("/tablist")
public TableDataInfo getTabList(Status status)
{
//startPage();
if (status.getDeviceName()!=null) {
status.setDeviceName(status.getDeviceName().replaceAll(UniversalEnum.BLANK_SPACE.getValue(),UniversalEnum.PLUS_SIGN.getValue()));
}
startPage();
status.setTypes(status.getType().split(UniversalEnum.COMMA.getValue()));
List<Status> listStatus = statusService.listStatusByTypes(status);
return getDataTable(listStatus);
@ -68,6 +71,9 @@ public class StatusController extends BaseController {
@PostMapping("/export")
public void export(HttpServletResponse response, Status status)
{
if (status.getDeviceName()!=null) {
status.setDeviceName(status.getDeviceName().replaceAll(UniversalEnum.BLANK_SPACE.getValue(),UniversalEnum.PLUS_SIGN.getValue()));
}
status.setTypes(status.getType().split(UniversalEnum.COMMA.getValue()));
List<Status> listStatus = statusService.export(status);
ExcelUtil<Status> util = new ExcelUtil<>(Status.class);
@ -78,6 +84,9 @@ public class StatusController extends BaseController {
@ApiOperation("设备状态柱状图按时间和类型")
@GetMapping("/list")
public AjaxResult getStatusList(Status status) {
if (status.getDeviceName()!=null) {
status.setDeviceName(status.getDeviceName().replaceAll(UniversalEnum.BLANK_SPACE.getValue(),UniversalEnum.PLUS_SIGN.getValue()));
}
LocalDateTime todayStart = status.getStartTime().truncatedTo(ChronoUnit.DAYS);
LocalDateTime currentTime = status.getTime().truncatedTo(ChronoUnit.DAYS).plusDays(UniversalEnum.ONE.getNumber());
status.setStartTime(todayStart);
@ -91,7 +100,7 @@ public class StatusController extends BaseController {
for (String type : types) {
Map<String, String> collect = statuses.stream().filter(item -> Objects.equals(item.getType(), type))
.collect(Collectors.toMap(
item -> item.getTime().getYear() + UniversalEnum.SHORT_BAR.getNumber() + item.getTime().getMonthValue() + UniversalEnum.SHORT_BAR.getValue() + item.getTime().getDayOfMonth(),
item -> item.getTime().getYear() + UniversalEnum.SHORT_BAR.getValue() + item.getTime().getMonthValue() + UniversalEnum.SHORT_BAR.getValue() + item.getTime().getDayOfMonth(),
Status::getSuccessRate
));
maps.put(type, collect);

2
zc-business/src/main/java/com/zc/business/domain/DcEvent.java

@ -189,7 +189,7 @@ public class DcEvent {
* 2-关联事件
*/
@ApiModelProperty("事件性质 * 1-首发事件* 2-关联事件")
@Excel(name = "事件性质")
@Excel(name = "事件性质", readConverterExp = "1=首发事件,2=关联事件" )
private Long eventNature;
/**

99
zc-business/src/main/java/com/zc/business/domain/Status.java

@ -11,6 +11,45 @@ import java.time.LocalDateTime;
* @Date 2024/01/04
*/
public class Status {
private long id;
@Excel(name = "设备桩号")
private String deviceNo;
@Excel(name = "设备名称")
private String deviceName;
@Excel(name = "状态")
private String deviceStatus;
//@Excel(name = "使用状态")
private Integer useState;
private Integer pageNum;
private Integer pageSize;
private Long deviceId;
private String sectionId;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
@Excel(name = "设备IP")
private String deviceIp;
private String successRate;
private String lostRate;
@Excel(name = "方向")
private String direction;
@Excel(name = "厂家")
private String production;
// @Excel(name = "型号")
private String model;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "监测时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime time;
//@Excel(name = "网段")
private String network;
private String content;
//@Excel(name = "类型")
private String type;
private String[] types;
private String orderByField;
private String orderDirection;
public String getDeviceIp() {
return deviceIp;
}
@ -18,6 +57,7 @@ public class Status {
public void setDeviceIp(String deviceIp) {
this.deviceIp = deviceIp;
}
public LocalDateTime getStartTime() {
return startTime;
}
@ -110,31 +150,6 @@ public class Status {
this.deviceStatus = deviceStatus;
}
private long id;
@Excel(name = "设备桩号")
private String deviceNo;
@Excel(name = "设备类型")
private String deviceName;
@Excel(name = "状态")
private String deviceStatus;
//@Excel(name = "使用状态")
private Integer useState;
private Integer pageNum;
private Integer pageSize;
private Long deviceId;
private String sectionId;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss")
@Excel(name = "监测时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime time;
public String getSuccessRate() {
return successRate;
}
@ -150,22 +165,6 @@ public class Status {
public void setLostRate(String lostRate) {
this.lostRate = lostRate;
}
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
@Excel(name = "设备IP")
private String deviceIp;
private String successRate;
private String lostRate;
@Excel(name = "方向")
private String direction;
@Excel(name = "厂家")
private String production;
public String getDirection() {
return direction;
@ -215,10 +214,6 @@ public class Status {
this.deviceId = deviceId;
}
// @Excel(name = "型号")
private String model;
public String getType() {
return type;
}
@ -227,20 +222,6 @@ public class Status {
this.type = type;
}
//@Excel(name = "网段")
private String network;
private String content;
//@Excel(name = "类型")
private String type;
private String[] types;
private String orderByField;
private String orderDirection;
public Integer getUseState() {
return useState;
}

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

@ -933,12 +933,14 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
for (Object object : jsonArray) {
JSONObject jsonObject = (JSONObject) object;
Integer asOneRoad = jsonObject.getInteger("as_one_road");
if (jsonObject.getDouble("end_pile_no")!=null){
double endPileNo = jsonObject.getDouble("end_pile_no");
String endMark = formatNumber(endPileNo);
jsonObject.put("endMark", endMark);//结束桩号
}
double startPileNo = jsonObject.getDouble("start_pile_no");
String stakeMark = formatNumber(startPileNo);
String endMark = formatNumber(endPileNo);
jsonObject.put("stakeMark", stakeMark);//当前拥堵距离
jsonObject.put("endMark", endMark);//当前拥堵距离
jsonObject.put("stakeMark", stakeMark);//
//as_one_road
//是否为同一条路,1-是,0-否
@ -946,31 +948,37 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
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;
double s = Double.parseDouble(lngLatsString[UniversalEnum.ZERO.getNumber()].split(",")[UniversalEnum.ZERO.getNumber()]);
double s2 = Double.parseDouble(lngLatsString[UniversalEnum.ZERO.getNumber()].split(",")[UniversalEnum.ONE.getNumber()]);
double s3 = Double.parseDouble(lngLatsString[lngLatsString.length - UniversalEnum.ONE.getNumber()].split(",")[UniversalEnum.ZERO.getNumber()]);
double s4 = Double.parseDouble(lngLatsString[lngLatsString.length - UniversalEnum.ONE.getNumber()].split(",")[UniversalEnum.ONE.getNumber()]);
double distanceM = calculateDistance(s2, s, s4, s3);
// System.out.printf("最大距离为: %.2f 米%n", distanceM);
jsonObject.put("max_jam_dist", distanceM);//最大拥堵距离
double endMake = startPileNo +Double.parseDouble(String.format("%.3f", distanceM));
String endmark = formatNumber(endMake);
jsonObject.put("endMark", endmark);//结束桩号
String[] split = string1.split(",");
double firstLon = Double.parseDouble(split[0]);
double firstLat = Double.parseDouble(split[1]);
double firstLon = Double.parseDouble(split[UniversalEnum.ZERO.getNumber()]);
double firstLat = Double.parseDouble(split[UniversalEnum.ONE.getNumber()]);
String[] split2 = string2.split(",");
double lastLon = Double.parseDouble(split2[0]);
double lastLat = Double.parseDouble(split2[1]);
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);//当前拥堵距离

15
zc-business/src/main/resources/mapper/business/StatusMapper.xml

@ -187,10 +187,19 @@
<if test="status.useState != null and status.useState != 0">
AND d.use_state = #{status.useState}
</if>
<if test="status.deviceName != null and status.deviceName != ''">
AND s.device_name like concat('%', #{status.deviceName}, '%')
</if>
<if test="status.direction != null">
AND d.direction = #{status.direction}
</if>
</where>
<if test="status.orderByField != null and status.orderDirection != null">
ORDER BY ${status.orderByField} ${status.orderDirection}
</if>
<!-- <if test="status.pageNum != null and status.pageSize != null">-->
<!-- LIMIT #{status.pageSize} OFFSET #{status.pageNum}-->
<!-- </if>-->
</select>
@ -223,6 +232,12 @@
<if test="status.useState != null and status.useState != 0">
AND d.use_state = #{status.useState}
</if>
<if test="status.deviceName != null and status.deviceName != ''">
AND s.device_name like concat('%', #{status.deviceName}, '%')
</if>
<if test="status.direction != null">
AND d.direction = #{status.direction}
</if>
GROUP BY
d.child_type,
d.device_type,

Loading…
Cancel
Save