Browse Source

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

develop
zhaoxianglong 11 months ago
parent
commit
8a855c4a68
  1. 5
      zc-business/src/main/java/com/zc/business/domain/DcTrafficSectionData.java
  2. 21
      zc-business/src/main/java/com/zc/business/domain/DcWarning.java
  3. 39
      zc-business/src/main/java/com/zc/business/service/impl/DcTrafficSectionDataServiceImpl.java
  4. 9
      zc-business/src/main/java/com/zc/business/statistics/handler/RealtimeTrafficStatistics.java
  5. 3
      zc-business/src/main/resources/mapper/business/DcTrafficSectionDataMapper.xml

5
zc-business/src/main/java/com/zc/business/domain/DcTrafficSectionData.java

@ -29,6 +29,11 @@ public class DcTrafficSectionData {
*/
private Integer trafficVolume;
/**
* 大型车车流量
*/
private Integer largeTrafficVolume;
/**
* 平均速度
*/

21
zc-business/src/main/java/com/zc/business/domain/DcWarning.java

@ -26,15 +26,14 @@ public class DcWarning extends BaseEntity
private String stakeMark;
/** 方向:1-上行2-中3-下行 */
@Excel(name = "方向: 1-上行 2-中 3-下行")
@Excel(name = "方向",readConverterExp = "1=菏泽方向,3=济南方向,2=双向")
private String direction;
/** 所属部门 */
@Excel(name = "所属部门")
private Long deptId;
/** 警情状态:1-上报2-已完成3-已终止4-自动结束 */
@Excel(name = "警情状态: 1-上报 2-已完成 3-已终止 4-自动结束")
@Excel(name = "警情状态",readConverterExp = "1=上报,2=已完成,3=已终止,4=自动结束")
private Integer warningState;
/** 预警时间 */
@ -43,36 +42,31 @@ public class DcWarning extends BaseEntity
private Date warningTime;
/** 处理人员 */
@Excel(name = "处理人员")
private Long userId;
/** 信息来源:1-视频AI2-雷达识别3-锥桶4-护栏碰撞5-扫码报警6-非机预警 */
@Excel(name = "信息来源: 1-视频AI 2-雷达识别 3-锥桶 4-护栏碰撞 5-扫码报警 6-非机预警")
@Excel(name = "信息来源", readConverterExp = "1=视频AI,2=雷达识别,3=锥桶,4=护栏碰撞,5=扫码报警,6=非机预警")
private Integer warningSource;
/** 预警级别 */
@Excel(name = "预警级别")
private Integer warningLevel;
/** 事件主类:1-交通拥堵2-行人3-非机动车4-停车5-倒车/逆行6-烟火7-撒落物8-异常天气9-护栏碰撞 */
@Excel(name = "事件主类: 1-交通拥堵 2-行人 3-非机动车 4-停车 5-倒车/逆行 6-烟火 7-撒落物 8-异常天气 9-护栏碰撞")
@Excel(name = "事件主类", readConverterExp = "1=交通拥堵,2=行人,3=非机动车,4=停车,5=违规驾驶,6=路障,7=道路施工,8=异常天气,9=护栏碰撞,10=交通事故,11=车辆故障,99=其它")
private Integer warningType;
/** 事件子类:1-1 拥堵1-2 缓行 */
@Excel(name = "事件子类: 1-1 拥堵 1-2 缓行 2-1 普通行人")
@Excel(name = "事件子类", readConverterExp ="1-1-拥堵,1-2=缓行,2-1=普通行人,2-2=工作人员,3-1=摩托车,3-2=自行车,3-3=三轮车,4-1=非工程车,4-2=工程车,4-3=主路有车,4-4=匝道有车,4-5=车辆故障(弃用),4-6=交通事故(弃用),4-7=应急车道被占用,4-8=车离开应急车道,4-9=其他,4-10=未知车辆,5-1=倒车/逆行,5-2=压线,5-3=掉头,5-4=超速,5-5=低速,5-6=违规变道,5-7=未保持安全距离,6-1=烟火,6-2=火灾,6-3=障碍物,6-4=抛洒物,7-1=道路施工,8-1=雨,8-2=冰雹,8-3=风,8-4=雾,8-5=高温,8-6=积水,8-7=路面湿滑,8-8=路面结冰,8-9=道路能见度低,8-10=道路团雾,9-1=只碰撞不倾斜,9-2=只倾斜无碰撞,9-3=碰撞后倾斜,10-1=未知,10-2单车事故,10-3=多车事故,11-1=车辆抛锚,11-2=车辆炸胎(有备胎),11-2=车辆炸胎(无备胎),99-1=其它")
private String warningSubclass;
/** 事件标题 */
@Excel(name = "事件标题")
private String warningTitle;
/** $column.columnComment */
@Excel(name = "其它配置", readConverterExp = "$column.readConverterExp()")
private String otherConfig;
/** 车道0-应急 1-行1 2-行2 3-行3 4-行4 */
@Excel(name = "车道0-应急 1-行1 2-行2 3-行3 4-行4")
@Excel(name = "车道",readConverterExp="0=应急,1=行1,2=行2,3=行3,4=行4")
private String lane;
/** 所属辖区路段名称 */
@ -91,7 +85,6 @@ public class DcWarning extends BaseEntity
//@Excel(name = "车辆类型")
private String vehicleType;
/** 持续时长 */
@Excel(name = "持续时长(秒)")
private int duration;
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
@ -103,10 +96,8 @@ public class DcWarning extends BaseEntity
private String quarter;
//事件原因
@Excel(name = "事件原因")
private String eventCause;
//完结时间
@Excel(name = "完结时间")
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
private Date endTime;
//操作员

39
zc-business/src/main/java/com/zc/business/service/impl/DcTrafficSectionDataServiceImpl.java

@ -369,8 +369,11 @@ public class DcTrafficSectionDataServiceImpl
initializeTrafficSectionData(upwardData, dcDevice, reportTime, LaneDirection.UPWARD);
initializeTrafficSectionData(downwardData, dcDevice, reportTime, LaneDirection.DOWNWARD);
// 初始化上行和下行的车流量和累计平均速度
// 初始化上行和下行的车流量
int upwardTrafficVolume = 0, downwardTrafficVolume = 0;
// 初始化上行和下行的累计大车流量
int upwardLargeTrafficVolume = 0, downwardLargeTrafficVolume = 0;
// 初始化上行和下行的累计平均速度
double upwardCumulativeAverageSpeed = 0.0, downwardCumulativeAverageSpeed = 0.0;
// 遍历车道信息,计算上行和下行的车流量和累计平均速度
@ -383,20 +386,23 @@ public class DcTrafficSectionDataServiceImpl
// 根据车道方向累加车流量和累计平均速度
int totalTrafficFlow = laneData.getInteger("totalTrafficFlow");
double cumulativeAverageSpeed = calculateCumulativeAverageSpeed(laneData);
int cumulativeAverageSpeed = calculateCumulativeAverageSpeed(laneData);
int cumulativeLargeTrafficVolume = calculateCumulativeLargeTrafficVolume(laneData);
if (isDownward) {
downwardTrafficVolume += totalTrafficFlow;
downwardCumulativeAverageSpeed += cumulativeAverageSpeed;
downwardLargeTrafficVolume += cumulativeLargeTrafficVolume;
} else {
upwardTrafficVolume += totalTrafficFlow;
upwardCumulativeAverageSpeed += cumulativeAverageSpeed;
upwardLargeTrafficVolume += cumulativeLargeTrafficVolume;
}
}
// 设置上行和下行的车流量和累计平均速度
setUpTrafficSectionData(upwardData, upwardTrafficVolume, upwardCumulativeAverageSpeed);
setUpTrafficSectionData(downwardData, downwardTrafficVolume, downwardCumulativeAverageSpeed);
setTrafficSectionData(upwardData, upwardTrafficVolume, upwardCumulativeAverageSpeed, upwardLargeTrafficVolume);
setTrafficSectionData(downwardData, downwardTrafficVolume, downwardCumulativeAverageSpeed, downwardLargeTrafficVolume);
// 将上行和下行的交通段数据放入结果映射中
resultMap.put(LaneDirection.UPWARD, upwardData);
@ -437,9 +443,11 @@ public class DcTrafficSectionDataServiceImpl
* @param data 交通路段数据对象用于存储交通路段的相关信息
* @param trafficVolume 该路段的交通量单位通常为车辆数
* @param cumulativeAverageSpeed 该路段的累积平均速度单位通常为千米/小时
* @param largeTrafficVolume 大型车交通量
*/
private void setUpTrafficSectionData(DcTrafficSectionData data, int trafficVolume, double cumulativeAverageSpeed) {
private void setTrafficSectionData(DcTrafficSectionData data, int trafficVolume, double cumulativeAverageSpeed, int largeTrafficVolume) {
data.setTrafficVolume(trafficVolume); // 设置交通量
data.setLargeTrafficVolume(largeTrafficVolume); // 设置大车流量
data.setAverageSpeed(0);
if (trafficVolume != 0) { // 当交通量不为0时,计算并设置平均速度
data.setAverageSpeed((int) Math.round(cumulativeAverageSpeed / trafficVolume)); // 平均速度 = 累积平均速度 / 交通量
@ -475,6 +483,27 @@ public class DcTrafficSectionDataServiceImpl
laneData.getInteger("motorcycleTrafficVolume") * laneData.getInteger("averageSpeedOfMotorcycle");
}
/**
* 计算累积大型交通流量
* 该方法用于根据给定的车道数据计算出特定类型的车辆包括公共汽车中型货车大型货车特大型货车和集装箱车的交通量总和
*
* @param laneData 包含车道交通量数据的JSONObject对象该对象应包含以下键
* - "busTrafficVolume"公共汽车交通量
* - "mediumTruckTrafficVolume"中型货车交通量
* - "largeTruckTrafficVolume"大型货车交通量
* - "extraLargeTrucksTrafficVolume"特大型货车交通量
* - "containerTruckTrafficVolume"集装箱车交通量
* @return 返回各种类型大型车辆交通量的总和类型为int
*/
private int calculateCumulativeLargeTrafficVolume(JSONObject laneData) {
// 计算各种类型大型车辆的交通量总和
return laneData.getInteger("busTrafficVolume") +
laneData.getInteger("mediumTruckTrafficVolume") +
laneData.getInteger("largeTruckTrafficVolume") +
laneData.getInteger("extraLargeTrucksTrafficVolume") +
laneData.getInteger("containerTruckTrafficVolume");
}
/**
* 将缓存中的数据统计后保存至数据库
*/

9
zc-business/src/main/java/com/zc/business/statistics/handler/RealtimeTrafficStatistics.java

@ -26,14 +26,19 @@ public class RealtimeTrafficStatistics {
// 创建一个汇总统计用的对象
DcTrafficSectionData aggregatedData = new DcTrafficSectionData();
// 初始化车流量总和和计算平均车速所需的分子部分
// 初始化车流量总和
int trafficVolume = 0;
// 初始化最大车流量
int largeTrafficVolume = 0;
// 初始化计算平均车速所需的分子部分
double numerator = 0;
// 遍历原始数据列表,累加车流量并计算平均车速
for (DcTrafficSectionData data: dataCollection) {
// 累加车流量
trafficVolume += data.getTrafficVolume();
// 累加最大车流量
largeTrafficVolume += data.getLargeTrafficVolume();
// 计算分子部分
numerator += data.getAverageSpeed() * data.getTrafficVolume();
}
@ -62,6 +67,8 @@ public class RealtimeTrafficStatistics {
aggregatedData.setStatisticalDate(firstDcTrafficSectionData.getStatisticalDate(), trafficDataPeriodType);
// 车流量
aggregatedData.setTrafficVolume(trafficVolume);
// 大型车车流量
aggregatedData.setLargeTrafficVolume(largeTrafficVolume);
// 更新或插入操作
aggregatedData.setUpdateTime(DateUtils.getNowDate());
// 生成主键

3
zc-business/src/main/resources/mapper/business/DcTrafficSectionDataMapper.xml

@ -11,6 +11,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
(
id,
traffic_volume,
large_traffic_volume,
average_speed,
device_id,
statistical_date,
@ -23,6 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
(
#{id},
#{trafficVolume},
#{largeTrafficVolume},
#{averageSpeed},
#{deviceId},
#{statisticalDate},
@ -32,6 +34,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
NOW())
ON DUPLICATE KEY UPDATE
traffic_volume = VALUES(traffic_volume),
large_traffic_volume = VALUES(large_traffic_volume),
average_speed = VALUES(average_speed),
device_id = VALUES(device_id),
statistical_date = VALUES(statistical_date),

Loading…
Cancel
Save