Browse Source

一类交调数据纠正接口

develop
lau572 2 days ago
parent
commit
009fa7aaca
  1. 187
      zc-business/src/main/java/com/zc/business/controller/DcTrafficSurveyDataController.java
  2. 12
      zc-business/src/main/java/com/zc/business/domain/DcTrafficSurveyData.java
  3. 306
      zc-business/src/main/java/com/zc/business/domain/HikTrafficSurveyData.java
  4. 3
      zc-business/src/main/java/com/zc/business/mapper/DcTrafficSurveyDataMapper.java
  5. 19
      zc-business/src/main/java/com/zc/business/service/IDcTrafficSurveyDataService.java
  6. 203
      zc-business/src/main/java/com/zc/business/service/impl/DcTrafficSurveyDataServiceImpl.java
  7. 144
      zc-business/src/main/resources/mapper/business/DcTrafficSurveyDataMapper.xml

187
zc-business/src/main/java/com/zc/business/controller/DcTrafficSurveyDataController.java

@ -9,10 +9,14 @@ import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.util.StringUtil;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.system.domain.SysLogininfor;
import com.zc.business.constant.RedisKeyConstants;
@ -42,6 +46,7 @@ import com.ruoyi.common.enums.BusinessType;
import com.zc.business.service.IDcTrafficSurveyDataService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
/**
* 一类交调数据Controller
@ -193,7 +198,9 @@ public class DcTrafficSurveyDataController extends BaseController
}
dcTrafficSurveyDataService.batchInsert(batchData);
if (batchData.size() > 0) {
dcTrafficSurveyDataService.batchInsert(batchData);
}
}
@ -322,7 +329,9 @@ public class DcTrafficSurveyDataController extends BaseController
batchData.add(hezeData);
batchData.add(jinanData);
}
dcTrafficSurveyDataService.batchInsert(batchData);
if (batchData.size() > 0) {
dcTrafficSurveyDataService.batchInsert(batchData);
}
}
@ -543,4 +552,178 @@ public class DcTrafficSurveyDataController extends BaseController
return dcTrafficSurveyDataService.selectRealTimeData(dcTrafficSurveyDataQueryParams);
}
@GetMapping("/insertTrafficSectionData")
public AjaxResult insertTrafficSectionData(DcTrafficSurveyData dcTrafficSurveyData) throws HttpException, IOException, ParseException {
if (StringUtil.isEmpty(dcTrafficSurveyData.getIotDeviceId()) || dcTrafficSurveyData.getStartTime() == null || dcTrafficSurveyData.getEndTime() == null){
return AjaxResult.error("参数错误");
}
DcDevice dcDevice = dcTrafficSurveyDataService.selectDeviceByIotId(dcTrafficSurveyData.getIotDeviceId());
if (dcDevice == null){
return AjaxResult.error("未查询到一类交调站设备,请检查物联ID");
}
String propertyId = "01"; //功能码
// 单位:天,步长:1小时
DateField unit = DateField.HOUR_OF_DAY;
// 获取日期列表
List<DateTime> dateRangeList = DateUtil.rangeToList(dcTrafficSurveyData.getStartTime(), dcTrafficSurveyData.getEndTime(), unit, 1);
HashMap<String, Object> props = new HashMap<>();
// 将日期列表以逗号分隔并设置为查询条件的值
props.put("paging", false);
props.put("sorts[0].order", "asc");
props.put("sorts[0].name", "timestamp");
List<DcTrafficSurveyData> batchData = new ArrayList<>();
for (DateTime dateTime : dateRangeList) {
DateTime hourStart = DateUtil.beginOfHour(dateTime);
DateTime hourEnd = DateUtil.endOfHour(dateTime);
// 设置查询条件的键为“timestamp$BTW”,表示时间戳在一定范围内
props.put("terms[0].column", "timestamp$BTW");
ArrayList<String> dateList = new ArrayList<>();
// 将上一个小时的开始和结束时间添加到列表
String startTime = DateUtil.format(hourStart, "yyyy-MM-dd HH:mm:ss");
String endTime = DateUtil.format(hourEnd, "yyyy-MM-dd HH:mm:ss");
dateList.add(startTime);
dateList.add(endTime);
props.put("terms[0].value", String.join(UniversalEnum.COMMA.getValue(), dateList));
Object data = null;
AjaxResult ajaxResult = dcDeviceController.queryDeviceProperties(dcDevice.getIotDeviceId(), propertyId, props);
try {
if (ajaxResult.get("code").equals(UniversalEnum.TWO_HUNDRED.getNumber()) && ajaxResult.containsKey("data") && ajaxResult.get("data") != null) {
data = JSON.parseObject(ajaxResult.get("data").toString()).get("data");
} else {
continue;
}
} catch (Exception e){
e.printStackTrace();
continue;
}
JSONArray dataArray = JSON.parseArray(data.toString());
if (dataArray == null || dataArray.size() < 1){
continue;
}
Integer hezeTotal = 0;
Integer jinanTotal = 0;
//一小时内所有的车道数据
JSONArray lanesData = new JSONArray();
for (Object o : dataArray) {
JSONObject jsonObject = JSON.parseObject(o.toString());
JSONObject formatValue = JSON.parseObject(jsonObject.get("formatValue").toString());
hezeTotal += Integer.parseInt(formatValue.get("1").toString());
jinanTotal += Integer.parseInt(formatValue.get("3").toString());
//车道数据
JSONArray lanes = formatValue.getJSONArray("lanes");
lanesData.addAll(lanes);
}
// 转换类型 以便使用stream
List<JSONObject> lanesList = lanesData.toJavaList(JSONObject.class);
Map<String, JSONArray> dataList = lanesList.stream()
.collect(Collectors.groupingBy(
item -> item.getString("laneNumber").substring(0, 1), // 提取 laneNumber 的第一个字符作为 key
Collectors.mapping(item -> item,
Collectors.collectingAndThen(
Collectors.toList(),
list -> { // 然后将 List<JSONObject> 转换为 JSONArray
JSONArray jsonArray = new JSONArray();
jsonArray.addAll(list);
return jsonArray;
}
)
)
));
//菏泽方向数据
DcTrafficSurveyData hezeData = new DcTrafficSurveyData();
hezeData.setIotDeviceId(dcDevice.getIotDeviceId());
hezeData.setStakeMark(dcDevice.getStakeMark());
hezeData.setDirection("1");
hezeData.setTimestamp(hourStart);
hezeData.setTrafficVolume(Long.valueOf(hezeTotal));
//济南方向数据
DcTrafficSurveyData jinanData = new DcTrafficSurveyData();
jinanData.setIotDeviceId(dcDevice.getIotDeviceId());
jinanData.setStakeMark(dcDevice.getStakeMark());
jinanData.setDirection("3");
jinanData.setTimestamp(hourStart);
jinanData.setTrafficVolume(Long.valueOf(jinanTotal));
//各方向车道级数据
if (dataList != null && dataList.size() > 0){
JSONArray hezeLanesData = dataList.get("1");
dcTrafficSurveyDataService.formatTrafficSurveyData(hezeData,hezeLanesData);
JSONArray jinanLanesData = dataList.get("3");
dcTrafficSurveyDataService.formatTrafficSurveyData(jinanData,jinanLanesData);
}
batchData.add(hezeData);
batchData.add(jinanData);
}
if (batchData.size() > 0) {
dcTrafficSurveyDataService.batchInsert(batchData);
} else {
return AjaxResult.error("未查询到数据");
}
return AjaxResult.success("操作成功");
}
@PostMapping("/importTrafficSectionData")
public AjaxResult importTrafficSectionData(MultipartFile file, String iotDeviceId) throws Exception
{
if (!StringUtils.hasText(iotDeviceId)){
return AjaxResult.error("物联ID不能为空");
}
DcDevice dcDevice = dcTrafficSurveyDataService.selectDeviceByIotId(iotDeviceId);
if (dcDevice == null){
return AjaxResult.error("未查询到一类交调站设备,请检查物联ID");
}
ExcelUtil<HikTrafficSurveyData> util = new ExcelUtil<HikTrafficSurveyData>(HikTrafficSurveyData.class);
List<HikTrafficSurveyData> trafficSectionDataList = util.importExcel(file.getInputStream());
if (trafficSectionDataList.size() > 0){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH");
Map<String, Map<String, List<HikTrafficSurveyData>>> group = trafficSectionDataList.stream().collect(
Collectors.groupingBy(item -> df.format(item.getStartTime()),
Collectors.groupingBy(HikTrafficSurveyData::getDirection)));
List<DcTrafficSurveyData> batchData = new ArrayList<>();
for (String hourStr : group.keySet()) {
Date parse = df.parse(hourStr);
Map<String, List<HikTrafficSurveyData>> hourDataMap = group.get(hourStr);
if (hourDataMap.containsKey("上行")) {
//菏泽方向数据
DcTrafficSurveyData hezeData = new DcTrafficSurveyData();
hezeData.setIotDeviceId(iotDeviceId);
hezeData.setStakeMark(dcDevice.getStakeMark());
hezeData.setDirection("1");
hezeData.setTimestamp(parse);
dcTrafficSurveyDataService.formatTrafficSurveyData(hezeData,hourDataMap.get("上行"));
batchData.add(hezeData);
}
if (hourDataMap.containsKey("下行")) {
//济南方向数据
DcTrafficSurveyData jinanData = new DcTrafficSurveyData();
jinanData.setIotDeviceId(iotDeviceId);
jinanData.setStakeMark(dcDevice.getStakeMark());
jinanData.setDirection("3");
jinanData.setTimestamp(parse);
dcTrafficSurveyDataService.formatTrafficSurveyData(jinanData,hourDataMap.get("下行"));
batchData.add(jinanData);
}
}
if (batchData.size() > 0){
dcTrafficSurveyDataService.batchInsert(batchData);
// System.out.println(batchData);
}
}
return AjaxResult.success();
}
}

12
zc-business/src/main/java/com/zc/business/domain/DcTrafficSurveyData.java

@ -37,6 +37,10 @@ public class DcTrafficSurveyData extends BaseEntity
@Excel(name = "采集时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date timestamp;
/** 范围查询-开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startTime;
/** 范围查询-结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endTime;
@ -370,6 +374,14 @@ public class DcTrafficSurveyData extends BaseEntity
this.avgSpeed = avgSpeed;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}

306
zc-business/src/main/java/com/zc/business/domain/HikTrafficSurveyData.java

@ -0,0 +1,306 @@
package com.zc.business.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.Date;
/**
* 海康一类交调数据导入
*
* @author liuwenge
* @date 2025-10-29
*/
public class HikTrafficSurveyData extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 开始时间 */
@Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date startTime;
/** 结束时间 */
@Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date endTime;
/** 车道号 */
@Excel(name = "车道号")
private String lane;
/** 车道方向 */
@Excel(name = "车道方向")
private String direction;
/** 跟车百分比 */
@Excel(name = "跟车百分比")
private double followingPercentage;
/** 时间占有率 */
@Excel(name = "时间占有率")
private double timeOccupancyRate;
/** 平均车头间距 */
@Excel(name = "平均车头间距")
private Integer averageHeadway;
/** 总的车流量 */
@Excel(name = "总的车流量")
private Integer trafficVolume;
/** 中小客车车流量 */
@Excel(name = "中小客车车流量")
private Integer trafficNumberOfInAndSmall;
/** 中小客车平均车速 */
@Excel(name = "中小客车平均车速")
private Integer inAndSmallAverageVehicleSpeed;
/** 大客车交通量 */
@Excel(name = "大客车车流量")
private Integer busTrafficVolume;
/** 大客车平均地点车速 */
@Excel(name = "大客车平均车速")
private Integer averageSpeedOfBus;
/** 小型货车交通量 */
@Excel(name = "小型货车车流量")
private Integer trafficVolumeOfSmallTrucks;
/** 小型货车平均地点车速 */
@Excel(name = "小型货车平均车速")
private Integer smallTrucksAverageVehicleSpeed;
/** 中型货车交通量 */
@Excel(name = "中型货车车流量")
private Integer mediumTruckTrafficVolume;
/** 中型货车平均地点车速 */
@Excel(name = "中型货车平均车速")
private Integer averageSpeedOfMediumSizeTrucks;
/** 大型货车交通量 */
@Excel(name = "大型货车车流量")
private Integer largeTruckTrafficVolume;
/** 大型货车平均地点车速 */
@Excel(name = "大型货车平均车速")
private Integer averageSpeedOfLargeTrucks;
/** 特大型货车车流量 */
@Excel(name = "特大型货车车流量")
private Integer extraLargeTrucksTrafficVolume;
/** 特大型货车平均车速 */
@Excel(name = "特大型货车平均车速")
private Integer averageSpeedOfExtraLargeTrucks;
/** 集装箱车交通量 */
@Excel(name = "集装箱车车流量")
private Integer containerTruckTrafficVolume;
/** 集装箱车平均地点车速 */
@Excel(name = "集装箱车平均车速")
private Integer averageSpeedOfContainerTruck;
/** 摩托车交通量 */
@Excel(name = "摩托车车流量")
private Integer motorcycleTrafficVolume;
/** 摩托车平均地点车速 */
@Excel(name = "摩托车平均车速")
private Integer averageSpeedOfMotorcycle;
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public String getLane() {
return lane;
}
public void setLane(String lane) {
this.lane = lane;
}
public String getDirection() {
return direction;
}
public void setDirection(String direction) {
this.direction = direction;
}
public double getFollowingPercentage() {
return followingPercentage;
}
public void setFollowingPercentage(double followingPercentage) {
this.followingPercentage = followingPercentage;
}
public double getTimeOccupancyRate() {
return timeOccupancyRate;
}
public void setTimeOccupancyRate(double timeOccupancyRate) {
this.timeOccupancyRate = timeOccupancyRate;
}
public Integer getAverageHeadway() {
return averageHeadway;
}
public void setAverageHeadway(Integer averageHeadway) {
this.averageHeadway = averageHeadway;
}
public Integer getTrafficVolume() {
return trafficVolume;
}
public void setTrafficVolume(Integer trafficVolume) {
this.trafficVolume = trafficVolume;
}
public Integer getTrafficNumberOfInAndSmall() {
return trafficNumberOfInAndSmall;
}
public void setTrafficNumberOfInAndSmall(Integer trafficNumberOfInAndSmall) {
this.trafficNumberOfInAndSmall = trafficNumberOfInAndSmall;
}
public Integer getInAndSmallAverageVehicleSpeed() {
return inAndSmallAverageVehicleSpeed;
}
public void setInAndSmallAverageVehicleSpeed(Integer inAndSmallAverageVehicleSpeed) {
this.inAndSmallAverageVehicleSpeed = inAndSmallAverageVehicleSpeed;
}
public Integer getBusTrafficVolume() {
return busTrafficVolume;
}
public void setBusTrafficVolume(Integer busTrafficVolume) {
this.busTrafficVolume = busTrafficVolume;
}
public Integer getAverageSpeedOfBus() {
return averageSpeedOfBus;
}
public void setAverageSpeedOfBus(Integer averageSpeedOfBus) {
this.averageSpeedOfBus = averageSpeedOfBus;
}
public Integer getTrafficVolumeOfSmallTrucks() {
return trafficVolumeOfSmallTrucks;
}
public void setTrafficVolumeOfSmallTrucks(Integer trafficVolumeOfSmallTrucks) {
this.trafficVolumeOfSmallTrucks = trafficVolumeOfSmallTrucks;
}
public Integer getSmallTrucksAverageVehicleSpeed() {
return smallTrucksAverageVehicleSpeed;
}
public void setSmallTrucksAverageVehicleSpeed(Integer smallTrucksAverageVehicleSpeed) {
this.smallTrucksAverageVehicleSpeed = smallTrucksAverageVehicleSpeed;
}
public Integer getMediumTruckTrafficVolume() {
return mediumTruckTrafficVolume;
}
public void setMediumTruckTrafficVolume(Integer mediumTruckTrafficVolume) {
this.mediumTruckTrafficVolume = mediumTruckTrafficVolume;
}
public Integer getAverageSpeedOfMediumSizeTrucks() {
return averageSpeedOfMediumSizeTrucks;
}
public void setAverageSpeedOfMediumSizeTrucks(Integer averageSpeedOfMediumSizeTrucks) {
this.averageSpeedOfMediumSizeTrucks = averageSpeedOfMediumSizeTrucks;
}
public Integer getLargeTruckTrafficVolume() {
return largeTruckTrafficVolume;
}
public void setLargeTruckTrafficVolume(Integer largeTruckTrafficVolume) {
this.largeTruckTrafficVolume = largeTruckTrafficVolume;
}
public Integer getAverageSpeedOfLargeTrucks() {
return averageSpeedOfLargeTrucks;
}
public void setAverageSpeedOfLargeTrucks(Integer averageSpeedOfLargeTrucks) {
this.averageSpeedOfLargeTrucks = averageSpeedOfLargeTrucks;
}
public Integer getExtraLargeTrucksTrafficVolume() {
return extraLargeTrucksTrafficVolume;
}
public void setExtraLargeTrucksTrafficVolume(Integer extraLargeTrucksTrafficVolume) {
this.extraLargeTrucksTrafficVolume = extraLargeTrucksTrafficVolume;
}
public Integer getAverageSpeedOfExtraLargeTrucks() {
return averageSpeedOfExtraLargeTrucks;
}
public void setAverageSpeedOfExtraLargeTrucks(Integer averageSpeedOfExtraLargeTrucks) {
this.averageSpeedOfExtraLargeTrucks = averageSpeedOfExtraLargeTrucks;
}
public Integer getContainerTruckTrafficVolume() {
return containerTruckTrafficVolume;
}
public void setContainerTruckTrafficVolume(Integer containerTruckTrafficVolume) {
this.containerTruckTrafficVolume = containerTruckTrafficVolume;
}
public Integer getAverageSpeedOfContainerTruck() {
return averageSpeedOfContainerTruck;
}
public void setAverageSpeedOfContainerTruck(Integer averageSpeedOfContainerTruck) {
this.averageSpeedOfContainerTruck = averageSpeedOfContainerTruck;
}
public Integer getMotorcycleTrafficVolume() {
return motorcycleTrafficVolume;
}
public void setMotorcycleTrafficVolume(Integer motorcycleTrafficVolume) {
this.motorcycleTrafficVolume = motorcycleTrafficVolume;
}
public Integer getAverageSpeedOfMotorcycle() {
return averageSpeedOfMotorcycle;
}
public void setAverageSpeedOfMotorcycle(Integer averageSpeedOfMotorcycle) {
this.averageSpeedOfMotorcycle = averageSpeedOfMotorcycle;
}
}

3
zc-business/src/main/java/com/zc/business/mapper/DcTrafficSurveyDataMapper.java

@ -4,6 +4,7 @@ import java.util.List;
import java.util.Map;
import com.zc.business.domain.*;
import org.apache.ibatis.annotations.Param;
/**
* 一类交调数据Mapper接口
@ -73,4 +74,6 @@ public interface DcTrafficSurveyDataMapper
List<DcTrafficVolumeData> selectTrafficVolume(DcTrafficSurveyDataQueryParams dcTrafficSurveyDataQueryParams);
List<DcTrafficSpeedData> selectSpeed(DcTrafficSurveyDataQueryParams dcTrafficSurveyDataQueryParams);
DcDevice selectDeviceByIotId(@Param("iotDeviceId") String iotDeviceId);
}

19
zc-business/src/main/java/com/zc/business/service/IDcTrafficSurveyDataService.java

@ -8,6 +8,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.zc.business.domain.DcDevice;
import com.zc.business.domain.DcTrafficSurveyData;
import com.zc.business.domain.DcTrafficSurveyDataQueryParams;
import com.zc.business.domain.HikTrafficSurveyData;
import com.zc.common.core.httpclient.exception.HttpException;
/**
@ -99,8 +100,24 @@ public interface IDcTrafficSurveyDataService
*/
AjaxResult selectComprehensiveData(DcTrafficSurveyDataQueryParams dcTrafficSurveyDataQueryParams);
/**
* 物联 一类交调站数据处理
*
* @param dcTrafficSurveyData 方向级数据
* @param directionData 需要统计的数据列表
* @return 结果
*/
DcTrafficSurveyData formatTrafficSurveyData(DcTrafficSurveyData dcTrafficSurveyData, JSONArray directionData);
/**
* 海康导入 一类交调站数据处理
*
* @param dcTrafficSurveyData 方向级数据
* @param directionData 需要统计的数据列表
* @return 结果
*/
DcTrafficSurveyData formatTrafficSurveyData(DcTrafficSurveyData dcTrafficSurveyData, List<HikTrafficSurveyData> directionData);
/**
* 实时数据
*
@ -108,4 +125,6 @@ public interface IDcTrafficSurveyDataService
* @return 结果
*/
AjaxResult selectRealTimeData(DcTrafficSurveyDataQueryParams dcTrafficSurveyDataQueryParams) throws IOException, HttpException;
DcDevice selectDeviceByIotId(String iotDeviceId);
}

203
zc-business/src/main/java/com/zc/business/service/impl/DcTrafficSurveyDataServiceImpl.java

@ -1587,6 +1587,204 @@ public class DcTrafficSurveyDataServiceImpl implements IDcTrafficSurveyDataServi
}
@Override
public DcTrafficSurveyData formatTrafficSurveyData(DcTrafficSurveyData dcTrafficSurveyData,List<HikTrafficSurveyData> directionData){
Integer trafficVolume = 0; //总车流量
Integer averageHeadway = 0;//平均车头间距
Integer averageHeadwayCount = 0;//平均车头间距统计次数
double followingPercentage = 0;//跟车百分比
Integer followingPercentageCount = 0; //跟车百分比统计次数
double timeOccupancyRate = 0;//时间占有率
Integer timeOccupancyRateCount = 0;//时间占有率统计次数
Integer trafficNumberOfInAndSmall = 0;//中小客车交通量
Integer inAndSmallAverageVehicleSpeed = 0;//中小客车平均地点车速
Integer inAndSmallAverageVehicleSpeedCount = 0;//中小客车平均地点车速统计次数
Integer busTrafficVolume = 0;//大客车交通量
Integer averageSpeedOfBus = 0;//大客车平均地点车速
Integer averageSpeedOfBusCount = 0;//大客车平均地点车速统计次数
Integer trafficVolumeOfSmallTrucks = 0;//小型货车交通量
Integer smallTrucksAverageVehicleSpeed = 0;//小型货车平均地点车速
Integer smallTrucksAverageVehicleSpeedCount = 0;//小型货车平均地点车速统计次数
Integer mediumTruckTrafficVolume = 0;//中型货车交通量
Integer averageSpeedOfMediumSizeTrucks = 0; //中型货车平均地点车速
Integer averageSpeedOfMediumSizeTrucksCount = 0; //中型货车平均地点车速统计次数
Integer largeTruckTrafficVolume = 0;//大型货车交通量
Integer averageSpeedOfLargeTrucks = 0; //大型货车平均地点车速
Integer averageSpeedOfLargeTrucksCount = 0; //大型货车平均地点车速统计次数
Integer extraLargeTrucksTrafficVolume = 0; //特大型货车交通量
Integer averageSpeedOfExtraLargeTrucks = 0;//特大型货车平均地点车速
Integer averageSpeedOfExtraLargeTrucksCount = 0; //特大型货车平均地点车速统计次数
Integer containerTruckTrafficVolume = 0;//集装箱车交通量
Integer averageSpeedOfContainerTruck = 0;//集装箱车平均地点车速
Integer averageSpeedOfContainerTruckCount = 0;//集装箱车平均地点车速统计次数
Integer motorcycleTrafficVolume = 0;//摩托车交通量
Integer averageSpeedOfMotorcycle = 0;//摩托车平均地点车速
Integer averageSpeedOfMotorcycleCount = 0;//摩托车平均地点车速统计次数
for (HikTrafficSurveyData laneData : directionData) {
if (laneData.getTrafficVolume() > 0){
trafficVolume += laneData.getTrafficVolume();
}
if (laneData.getAverageHeadway() > 0) {
averageHeadway += laneData.getAverageHeadway();
averageHeadwayCount++;
}
if (laneData.getFollowingPercentage() > 0){
followingPercentage += laneData.getFollowingPercentage();
followingPercentageCount++;
}
if (laneData.getTimeOccupancyRate() > 0) {
timeOccupancyRate += laneData.getTimeOccupancyRate();
timeOccupancyRateCount++;
}
if (laneData.getTrafficNumberOfInAndSmall() > 0) {
trafficNumberOfInAndSmall += laneData.getTrafficNumberOfInAndSmall();
inAndSmallAverageVehicleSpeed += laneData.getInAndSmallAverageVehicleSpeed();
inAndSmallAverageVehicleSpeedCount++;
}
if (laneData.getBusTrafficVolume() > 0) {
busTrafficVolume += laneData.getBusTrafficVolume();
averageSpeedOfBus += laneData.getAverageSpeedOfBus();
averageSpeedOfBusCount++;
}
if (laneData.getTrafficVolumeOfSmallTrucks() > 0) {
trafficVolumeOfSmallTrucks += laneData.getTrafficVolumeOfSmallTrucks();
smallTrucksAverageVehicleSpeed += laneData.getSmallTrucksAverageVehicleSpeed();
smallTrucksAverageVehicleSpeedCount++;
}
if (laneData.getMediumTruckTrafficVolume() > 0) {
mediumTruckTrafficVolume += laneData.getMediumTruckTrafficVolume();
averageSpeedOfMediumSizeTrucks += laneData.getAverageSpeedOfMediumSizeTrucks();
averageSpeedOfMediumSizeTrucksCount++;
}
if (laneData.getLargeTruckTrafficVolume() > 0) {
largeTruckTrafficVolume += laneData.getLargeTruckTrafficVolume();
averageSpeedOfLargeTrucks += laneData.getAverageSpeedOfLargeTrucks();
averageSpeedOfLargeTrucksCount++;
}
if (laneData.getExtraLargeTrucksTrafficVolume() > 0) {
extraLargeTrucksTrafficVolume += laneData.getExtraLargeTrucksTrafficVolume();
averageSpeedOfExtraLargeTrucks += laneData.getAverageSpeedOfExtraLargeTrucks();
averageSpeedOfExtraLargeTrucksCount++;
}
if (laneData.getContainerTruckTrafficVolume() > 0) {
containerTruckTrafficVolume += laneData.getContainerTruckTrafficVolume();
averageSpeedOfContainerTruck += laneData.getAverageSpeedOfContainerTruck();
averageSpeedOfContainerTruckCount++;
}
if (laneData.getMotorcycleTrafficVolume() > 0) {
motorcycleTrafficVolume += laneData.getMotorcycleTrafficVolume();
averageSpeedOfMotorcycle += laneData.getAverageSpeedOfMotorcycle();
averageSpeedOfMotorcycleCount++;
}
}
Integer avgSpeed = 0;
Integer avgSpeedCount = 0;
//计算跟车百分比、时间占有率、车头间距、车速平均值
if (followingPercentageCount > 0){
followingPercentage = followingPercentage / followingPercentageCount;
}
if (timeOccupancyRateCount > 0){
timeOccupancyRate = timeOccupancyRate / timeOccupancyRateCount;
}
if (averageHeadwayCount > 0){
averageHeadway = averageHeadway / averageHeadwayCount;
}
if (inAndSmallAverageVehicleSpeedCount > 0){
inAndSmallAverageVehicleSpeed = inAndSmallAverageVehicleSpeed / inAndSmallAverageVehicleSpeedCount;
avgSpeed += inAndSmallAverageVehicleSpeed;
avgSpeedCount++;
}
if (averageSpeedOfBusCount > 0){
averageSpeedOfBus = averageSpeedOfBus /averageSpeedOfBusCount;
avgSpeed += averageSpeedOfBus;
avgSpeedCount++;
}
if (smallTrucksAverageVehicleSpeedCount > 0){
smallTrucksAverageVehicleSpeed = smallTrucksAverageVehicleSpeed / smallTrucksAverageVehicleSpeedCount;
avgSpeed += smallTrucksAverageVehicleSpeed;
avgSpeedCount++;
}
if (averageSpeedOfMediumSizeTrucksCount > 0){
averageSpeedOfMediumSizeTrucks = averageSpeedOfMediumSizeTrucks / averageSpeedOfMediumSizeTrucksCount;
avgSpeed += averageSpeedOfMediumSizeTrucks;
avgSpeedCount++;
}
if (averageSpeedOfLargeTrucksCount > 0){
averageSpeedOfLargeTrucks = averageSpeedOfLargeTrucks / averageSpeedOfLargeTrucksCount;
avgSpeed += averageSpeedOfLargeTrucks;
avgSpeedCount++;
}
if (averageSpeedOfExtraLargeTrucksCount > 0){
averageSpeedOfExtraLargeTrucks = averageSpeedOfExtraLargeTrucks / averageSpeedOfExtraLargeTrucksCount;
avgSpeed += averageSpeedOfExtraLargeTrucks;
avgSpeedCount++;
}
if (averageSpeedOfContainerTruckCount > 0){
averageSpeedOfContainerTruck = averageSpeedOfContainerTruck / averageSpeedOfContainerTruckCount;
avgSpeed += averageSpeedOfContainerTruck;
avgSpeedCount++;
}
if (averageSpeedOfMotorcycleCount > 0){
averageSpeedOfMotorcycle = averageSpeedOfMotorcycle / averageSpeedOfMotorcycleCount;
avgSpeed += averageSpeedOfMotorcycle;
avgSpeedCount++;
}
//方向级平均车速
if(avgSpeedCount > 0){
avgSpeed = avgSpeed / avgSpeedCount;
}
dcTrafficSurveyData.setTrafficVolume(trafficVolume.longValue());
dcTrafficSurveyData.setAverageHeadway(averageHeadway);
dcTrafficSurveyData.setTrafficNumberOfInAndSmall(trafficNumberOfInAndSmall);
dcTrafficSurveyData.setInAndSmallAverageVehicleSpeed(inAndSmallAverageVehicleSpeed);
dcTrafficSurveyData.setBusTrafficVolume(busTrafficVolume);
dcTrafficSurveyData.setAverageSpeedOfBus(averageSpeedOfBus);
dcTrafficSurveyData.setTrafficVolumeOfSmallTrucks(trafficVolumeOfSmallTrucks);
dcTrafficSurveyData.setSmallTrucksAverageVehicleSpeed(smallTrucksAverageVehicleSpeed);
dcTrafficSurveyData.setMediumTruckTrafficVolume(mediumTruckTrafficVolume);
dcTrafficSurveyData.setAverageSpeedOfMediumSizeTrucks(averageSpeedOfMediumSizeTrucks);
dcTrafficSurveyData.setLargeTruckTrafficVolume(largeTruckTrafficVolume);
dcTrafficSurveyData.setAverageSpeedOfLargeTrucks(averageSpeedOfLargeTrucks);
dcTrafficSurveyData.setAverageSpeedOfExtraLargeTrucks(averageSpeedOfExtraLargeTrucks);
dcTrafficSurveyData.setExtraLargeTrucksTrafficVolume(extraLargeTrucksTrafficVolume);
dcTrafficSurveyData.setContainerTruckTrafficVolume(containerTruckTrafficVolume);
dcTrafficSurveyData.setAverageSpeedOfContainerTruck(averageSpeedOfContainerTruck);
dcTrafficSurveyData.setMotorcycleTrafficVolume(motorcycleTrafficVolume);
dcTrafficSurveyData.setAverageSpeedOfMotorcycle(averageSpeedOfMotorcycle);
dcTrafficSurveyData.setAvgSpeed(avgSpeed);
dcTrafficSurveyData.setFollowingPercentage((int) followingPercentage);
dcTrafficSurveyData.setTimeOccupancyRate((int) timeOccupancyRate);
//海康导入数据中没有拖拉机数据, 默认0
dcTrafficSurveyData.setTractorTrafficVolume(0);
dcTrafficSurveyData.setAverageSpeedOfTractor(0);
return dcTrafficSurveyData;
}
/**
* 实时数据
*
@ -1683,4 +1881,9 @@ public class DcTrafficSurveyDataServiceImpl implements IDcTrafficSurveyDataServi
}
return AjaxResult.success(result);
}
@Override
public DcDevice selectDeviceByIotId(String iotDeviceId){
return dcTrafficSurveyDataMapper.selectDeviceByIotId(iotDeviceId);
}
}

144
zc-business/src/main/resources/mapper/business/DcTrafficSurveyDataMapper.xml

@ -129,9 +129,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where>
GROUP BY time
<if test="direction != null and direction == '1'.toString">,direction</if>
order by time
</select>
<select id="selectSpeed" resultType="com.zc.business.domain.DcTrafficSpeedData">
select *,
ROUND(
@ -206,6 +206,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="direction != null and direction == '1'.toString">,direction</if>
) t1
</select>
<select id="selectDeviceByIotId" resultType="com.zc.business.domain.DcDevice">
SELECT * FROM `dc_device` where device_type = '11' and iot_device_id = #{iotDeviceId}
</select>
<insert id="insertDcTrafficSurveyData" parameterType="DcTrafficSurveyData" useGeneratedKeys="true" keyProperty="id">
insert into dc_traffic_survey_data
@ -225,65 +228,88 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</trim>
</insert>
<insert id="batchInsert">
<foreach collection="list" item="dcTrafficSurveyData" index="index" separator=";">
insert into dc_traffic_survey_data
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="dcTrafficSurveyData.iotDeviceId != null">iot_device_id,</if>
<if test="dcTrafficSurveyData.stakeMark != null">stake_mark,</if>
<if test="dcTrafficSurveyData.direction != null">direction,</if>
<if test="dcTrafficSurveyData.timestamp != null">timestamp,</if>
<if test="dcTrafficSurveyData.trafficVolume != null">traffic_volume,</if>
<if test="dcTrafficSurveyData.followingPercentage != null">following_percentage,</if>
<if test="dcTrafficSurveyData.timeOccupancyRate != null">time_occupancy_rate,</if>
<if test="dcTrafficSurveyData.averageHeadway != null">average_headway,</if>
<if test="dcTrafficSurveyData.trafficNumberOfInAndSmall != null">traffic_number_of_in_and_small,</if>
<if test="dcTrafficSurveyData.inAndSmallAverageVehicleSpeed != null">in_and_small_average_vehicle_speed,</if>
<if test="dcTrafficSurveyData.busTrafficVolume != null">bus_traffic_volume,</if>
<if test="dcTrafficSurveyData.averageSpeedOfBus != null">average_speed_of_bus,</if>
<if test="dcTrafficSurveyData.trafficVolumeOfSmallTrucks != null">traffic_volume_of_small_trucks,</if>
<if test="dcTrafficSurveyData.smallTrucksAverageVehicleSpeed != null">small_trucks_average_vehicle_speed,</if>
<if test="dcTrafficSurveyData.mediumTruckTrafficVolume != null">medium_truck_traffic_volume,</if>
<if test="dcTrafficSurveyData.averageSpeedOfMediumSizeTrucks != null">average_speed_of_medium_size_trucks,</if>
<if test="dcTrafficSurveyData.largeTruckTrafficVolume != null">large_truck_traffic_volume,</if>
<if test="dcTrafficSurveyData.averageSpeedOfLargeTrucks != null">average_speed_of_large_trucks,</if>
<if test="dcTrafficSurveyData.averageSpeedOfExtraLargeTrucks != null">average_speed_of_extra_large_trucks,</if>
<if test="dcTrafficSurveyData.extraLargeTrucksTrafficVolume != null">extra_large_trucks_traffic_volume,</if>
<if test="dcTrafficSurveyData.containerTruckTrafficVolume != null">container_truck_traffic_volume,</if>
<if test="dcTrafficSurveyData.averageSpeedOfContainerTruck != null">average_speed_of_container_truck,</if>
<if test="dcTrafficSurveyData.motorcycleTrafficVolume != null">motorcycle_traffic_volume,</if>
<if test="dcTrafficSurveyData.averageSpeedOfMotorcycle != null">average_speed_of_motorcycle,</if>
<if test="dcTrafficSurveyData.tractorTrafficVolume != null">tractor_traffic_volume,</if>
<if test="dcTrafficSurveyData.averageSpeedOfTractor != null">average_speed_of_tractor,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="dcTrafficSurveyData.iotDeviceId != null">#{dcTrafficSurveyData.iotDeviceId},</if>
<if test="dcTrafficSurveyData.stakeMark != null">#{dcTrafficSurveyData.stakeMark},</if>
<if test="dcTrafficSurveyData.direction != null">#{dcTrafficSurveyData.direction},</if>
<if test="dcTrafficSurveyData.timestamp != null">#{dcTrafficSurveyData.timestamp},</if>
<if test="dcTrafficSurveyData.trafficVolume != null">#{dcTrafficSurveyData.trafficVolume},</if>
<if test="dcTrafficSurveyData.followingPercentage != null">#{dcTrafficSurveyData.followingPercentage},</if>
<if test="dcTrafficSurveyData.timeOccupancyRate != null">#{dcTrafficSurveyData.timeOccupancyRate},</if>
<if test="dcTrafficSurveyData.averageHeadway != null">#{dcTrafficSurveyData.averageHeadway},</if>
<if test="dcTrafficSurveyData.trafficNumberOfInAndSmall != null">#{dcTrafficSurveyData.trafficNumberOfInAndSmall},</if>
<if test="dcTrafficSurveyData.inAndSmallAverageVehicleSpeed != null">#{dcTrafficSurveyData.inAndSmallAverageVehicleSpeed},</if>
<if test="dcTrafficSurveyData.busTrafficVolume != null">#{dcTrafficSurveyData.busTrafficVolume},</if>
<if test="dcTrafficSurveyData.averageSpeedOfBus != null">#{dcTrafficSurveyData.averageSpeedOfBus},</if>
<if test="dcTrafficSurveyData.trafficVolumeOfSmallTrucks != null">#{dcTrafficSurveyData.trafficVolumeOfSmallTrucks},</if>
<if test="dcTrafficSurveyData.smallTrucksAverageVehicleSpeed != null">#{dcTrafficSurveyData.smallTrucksAverageVehicleSpeed},</if>
<if test="dcTrafficSurveyData.mediumTruckTrafficVolume != null">#{dcTrafficSurveyData.mediumTruckTrafficVolume},</if>
<if test="dcTrafficSurveyData.averageSpeedOfMediumSizeTrucks != null">#{dcTrafficSurveyData.averageSpeedOfMediumSizeTrucks},</if>
<if test="dcTrafficSurveyData.largeTruckTrafficVolume != null">#{dcTrafficSurveyData.largeTruckTrafficVolume},</if>
<if test="dcTrafficSurveyData.averageSpeedOfLargeTrucks != null">#{dcTrafficSurveyData.averageSpeedOfLargeTrucks},</if>
<if test="dcTrafficSurveyData.averageSpeedOfExtraLargeTrucks != null">#{dcTrafficSurveyData.averageSpeedOfExtraLargeTrucks},</if>
<if test="dcTrafficSurveyData.extraLargeTrucksTrafficVolume != null">#{dcTrafficSurveyData.extraLargeTrucksTrafficVolume},</if>
<if test="dcTrafficSurveyData.containerTruckTrafficVolume != null">#{dcTrafficSurveyData.containerTruckTrafficVolume},</if>
<if test="dcTrafficSurveyData.averageSpeedOfContainerTruck != null">#{dcTrafficSurveyData.averageSpeedOfContainerTruck},</if>
<if test="dcTrafficSurveyData.motorcycleTrafficVolume != null">#{dcTrafficSurveyData.motorcycleTrafficVolume},</if>
<if test="dcTrafficSurveyData.averageSpeedOfMotorcycle != null">#{dcTrafficSurveyData.averageSpeedOfMotorcycle},</if>
<if test="dcTrafficSurveyData.tractorTrafficVolume != null">#{dcTrafficSurveyData.tractorTrafficVolume},</if>
<if test="dcTrafficSurveyData.averageSpeedOfTractor != null">#{dcTrafficSurveyData.averageSpeedOfTractor},</if>
</trim>
INSERT INTO dc_traffic_survey_data (
iot_device_id,
stake_mark,
direction,
`timestamp`,
traffic_volume,
following_percentage,
time_occupancy_rate,
average_headway,
traffic_number_of_in_and_small,
in_and_small_average_vehicle_speed,
bus_traffic_volume,
average_speed_of_bus,
traffic_volume_of_small_trucks,
small_trucks_average_vehicle_speed,
medium_truck_traffic_volume,
average_speed_of_medium_size_trucks,
large_truck_traffic_volume,
average_speed_of_large_trucks,
average_speed_of_extra_large_trucks,
extra_large_trucks_traffic_volume,
container_truck_traffic_volume,
average_speed_of_container_truck,
motorcycle_traffic_volume,
average_speed_of_motorcycle,
tractor_traffic_volume,
average_speed_of_tractor
) VALUES
<foreach collection="list" item="dcTrafficSurveyData" separator=",">
(
#{dcTrafficSurveyData.iotDeviceId},
#{dcTrafficSurveyData.stakeMark},
#{dcTrafficSurveyData.direction},
#{dcTrafficSurveyData.timestamp},
#{dcTrafficSurveyData.trafficVolume},
#{dcTrafficSurveyData.followingPercentage},
#{dcTrafficSurveyData.timeOccupancyRate},
#{dcTrafficSurveyData.averageHeadway},
#{dcTrafficSurveyData.trafficNumberOfInAndSmall},
#{dcTrafficSurveyData.inAndSmallAverageVehicleSpeed},
#{dcTrafficSurveyData.busTrafficVolume},
#{dcTrafficSurveyData.averageSpeedOfBus},
#{dcTrafficSurveyData.trafficVolumeOfSmallTrucks},
#{dcTrafficSurveyData.smallTrucksAverageVehicleSpeed},
#{dcTrafficSurveyData.mediumTruckTrafficVolume},
#{dcTrafficSurveyData.averageSpeedOfMediumSizeTrucks},
#{dcTrafficSurveyData.largeTruckTrafficVolume},
#{dcTrafficSurveyData.averageSpeedOfLargeTrucks},
#{dcTrafficSurveyData.averageSpeedOfExtraLargeTrucks},
#{dcTrafficSurveyData.extraLargeTrucksTrafficVolume},
#{dcTrafficSurveyData.containerTruckTrafficVolume},
#{dcTrafficSurveyData.averageSpeedOfContainerTruck},
#{dcTrafficSurveyData.motorcycleTrafficVolume},
#{dcTrafficSurveyData.averageSpeedOfMotorcycle},
#{dcTrafficSurveyData.tractorTrafficVolume},
#{dcTrafficSurveyData.averageSpeedOfTractor}
)
</foreach>
ON DUPLICATE KEY UPDATE
stake_mark = VALUES(stake_mark),
traffic_volume = VALUES(traffic_volume),
following_percentage = VALUES(following_percentage),
time_occupancy_rate = VALUES(time_occupancy_rate),
average_headway = VALUES(average_headway),
traffic_number_of_in_and_small = VALUES(traffic_number_of_in_and_small),
in_and_small_average_vehicle_speed = VALUES(in_and_small_average_vehicle_speed),
bus_traffic_volume = VALUES(bus_traffic_volume),
average_speed_of_bus = VALUES(average_speed_of_bus),
traffic_volume_of_small_trucks = VALUES(traffic_volume_of_small_trucks),
small_trucks_average_vehicle_speed = VALUES(small_trucks_average_vehicle_speed),
medium_truck_traffic_volume = VALUES(medium_truck_traffic_volume),
average_speed_of_medium_size_trucks = VALUES(average_speed_of_medium_size_trucks),
large_truck_traffic_volume = VALUES(large_truck_traffic_volume),
average_speed_of_large_trucks = VALUES(average_speed_of_large_trucks),
average_speed_of_extra_large_trucks = VALUES(average_speed_of_extra_large_trucks),
extra_large_trucks_traffic_volume = VALUES(extra_large_trucks_traffic_volume),
container_truck_traffic_volume = VALUES(container_truck_traffic_volume),
average_speed_of_container_truck = VALUES(average_speed_of_container_truck),
motorcycle_traffic_volume = VALUES(motorcycle_traffic_volume),
average_speed_of_motorcycle = VALUES(average_speed_of_motorcycle),
tractor_traffic_volume = VALUES(tractor_traffic_volume),
average_speed_of_tractor = VALUES(average_speed_of_tractor)
</insert>
<update id="updateDcTrafficSurveyData" parameterType="DcTrafficSurveyData">

Loading…
Cancel
Save