Browse Source

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

develop
wangsixiang 8 months ago
parent
commit
b92dc32649
  1. 17
      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. 101
      zc-business/src/main/java/com/zc/business/domain/Status.java
  6. 40
      zc-business/src/main/java/com/zc/business/service/impl/DcTrafficStatisticsServiceImpl.java
  7. 15
      zc-business/src/main/resources/mapper/business/StatusMapper.xml

17
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.*;
/**
*
@ -56,7 +53,7 @@ public class DcTrafficFlowWarning {
DateTimeFormatter formatterStr = DateTimeFormatter.ofPattern(UniversalEnum.PURE_CHINESE_CHARACTER_TIME_FORMATS_YEARS_MONTH_DAY.getValue());
String formattedDate = dateAfterSevenDays.format(formatter);
String formattedDateStr = dateAfterSevenDays.format(formatterStr);
// String formattedDate ="2024-05-01";
// String formattedDate ="2024-05-01";
for (DcHolidays holidays : dcHolidaysList) {
String vacation = holidays.getVacation();
@ -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;
/**

101
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,11 +57,12 @@ public class Status {
public void setDeviceIp(String deviceIp) {
this.deviceIp = deviceIp;
}
public LocalDateTime getStartTime() {
return startTime;
}
public Status(long id, String deviceNo, String deviceName, String deviceStatus, String sectionId, LocalDateTime time, LocalDateTime startTime, String deviceIp, String successRate, String lostRate, String direction, String production, String model, String network, String content, String type,Integer pageNum, Integer pageSize) {
public Status(long id, String deviceNo, String deviceName, String deviceStatus, String sectionId, LocalDateTime time, LocalDateTime startTime, String deviceIp, String successRate, String lostRate, String direction, String production, String model, String network, String content, String type, Integer pageNum, Integer pageSize) {
this.id = id;
this.deviceNo = deviceNo;
this.deviceName = deviceName;
@ -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;
}

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

@ -933,44 +933,52 @@ public class DcTrafficStatisticsServiceImpl implements IDcTrafficStatisticsServi
for (Object object : jsonArray) {
JSONObject jsonObject = (JSONObject) object;
Integer asOneRoad = jsonObject.getInteger("as_one_road");
double endPileNo = jsonObject.getDouble("end_pile_no");
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-否
if (asOneRoad == UniversalEnum.ZERO.getNumber()) {
if (asOneRoad == UniversalEnum.ZERO.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;
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