6 changed files with 367 additions and 1 deletions
@ -0,0 +1,79 @@ |
|||||
|
package com.zc.business.domain; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
/** |
||||
|
* 一类交流站和毫米波雷达存储数据实体类 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class DcYzsqbdcHmbldData { |
||||
|
|
||||
|
private String id; |
||||
|
// 物联网设备id
|
||||
|
private String iotDeviceId; |
||||
|
// 数据源 1一站式情报调查,2毫米波雷达
|
||||
|
private String sjy; |
||||
|
// 设备编号(设备身份识别码)
|
||||
|
private String sbbh; |
||||
|
// 上报周期(交通数据处理周期)
|
||||
|
private String sbzq; |
||||
|
// 时间序号(一站式情报调查)
|
||||
|
private String sjxh; |
||||
|
// 上报时间
|
||||
|
private String sbsj; |
||||
|
// 平均车速
|
||||
|
private Integer pjcs; |
||||
|
// 车道数
|
||||
|
private Integer lane; |
||||
|
// 方向
|
||||
|
private String direction; |
||||
|
// 总的车流量
|
||||
|
private Integer zdcll; |
||||
|
// 跟车百分比
|
||||
|
private String gcbfb; |
||||
|
// 平均车头间距
|
||||
|
private String pjctjj; |
||||
|
// 时间占有率
|
||||
|
private String sjzyl; |
||||
|
// 中小客车交通量
|
||||
|
private Integer zxkcjtl; |
||||
|
// 中小客车平均地点车速
|
||||
|
private Integer zxkcpjcs; |
||||
|
// 小型货车交通量
|
||||
|
private Integer xxhcjtl; |
||||
|
// 小型货车平均地点车速
|
||||
|
private Integer xxhcpjcs; |
||||
|
// 大客车交通量
|
||||
|
private Integer dkcjtl; |
||||
|
// 大客车平均地点车速
|
||||
|
private Integer dkcpjcs; |
||||
|
// 中型货车交通量
|
||||
|
private Integer zxhcjtl; |
||||
|
// 中型货车平均地点车速
|
||||
|
private Integer zxhcpjcs; |
||||
|
// 大型货车交通量
|
||||
|
private Integer dxhcjtl; |
||||
|
// 大型货车平均地点车速
|
||||
|
private Integer dxhcpjcs; |
||||
|
// 特大型货车交通量
|
||||
|
private Integer tdxhcjtl; |
||||
|
// 特大型货车平均地点车速
|
||||
|
private Integer tdxhcpjcs; |
||||
|
// 集装箱车交通量
|
||||
|
private Integer jzxcjtl; |
||||
|
// 集装箱车平均地点车速
|
||||
|
private Integer jzxcpjcs; |
||||
|
// 拖拉机交通量
|
||||
|
private Integer tljjtl; |
||||
|
// 拖拉机平均地点车速
|
||||
|
private Integer tljpjcs; |
||||
|
// 摩托车交通量
|
||||
|
private Integer mtcjtl; |
||||
|
// 摩托车平均地点车速
|
||||
|
private Integer mtcpjcs; |
||||
|
private Date updateTime; |
||||
|
private Date createTime; |
||||
|
|
||||
|
} |
@ -0,0 +1,28 @@ |
|||||
|
package com.zc.business.mapper; |
||||
|
|
||||
|
|
||||
|
import com.zc.business.domain.DcYzsqbdcHmbldData; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 一类调查站Mapper接口 |
||||
|
* |
||||
|
* @author ruoyi |
||||
|
* @date 2024-01-12 |
||||
|
*/ |
||||
|
public interface DcYzsqbdcHmbldDataMapper |
||||
|
{ |
||||
|
|
||||
|
/** |
||||
|
* 批量新增一类调查站数据 |
||||
|
* |
||||
|
* @param list 一类调查站数据 |
||||
|
* @return 结果 |
||||
|
*/ |
||||
|
int insertDcEvent(List<DcYzsqbdcHmbldData> list); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
@ -0,0 +1,18 @@ |
|||||
|
package com.zc.business.service; |
||||
|
|
||||
|
import java.util.Map; |
||||
|
|
||||
|
/** |
||||
|
* 一类交通调查站Service接口 |
||||
|
* |
||||
|
* @author wangjiabao |
||||
|
* @date 2024-01-03 |
||||
|
*/ |
||||
|
public interface IDcYzsqbdcHmbldDataService |
||||
|
{ |
||||
|
|
||||
|
/** |
||||
|
* 一类交通调查站数据插入 |
||||
|
*/ |
||||
|
boolean addDcYzsqbdcHmbldDataList(Map map); |
||||
|
} |
@ -0,0 +1,206 @@ |
|||||
|
package com.zc.business.service.impl; |
||||
|
|
||||
|
import com.alibaba.fastjson.JSONArray; |
||||
|
import com.alibaba.fastjson.JSONObject; |
||||
|
import com.ruoyi.common.utils.DateUtils; |
||||
|
import com.ruoyi.common.utils.uuid.UUID; |
||||
|
import com.zc.business.domain.DcYzsqbdcHmbldData; |
||||
|
import com.zc.business.mapper.DcYzsqbdcHmbldDataMapper; |
||||
|
import com.zc.business.service.IDcYzsqbdcHmbldDataService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
/** |
||||
|
* 一类交通调查站Service业务层处理 |
||||
|
* |
||||
|
* @author wangjiabao |
||||
|
*/ |
||||
|
@Service |
||||
|
public class DcYzsqbdcHmbldDataServiceImpl implements IDcYzsqbdcHmbldDataService { |
||||
|
|
||||
|
@Resource |
||||
|
private DcYzsqbdcHmbldDataMapper dcYzsqbdcHmbldDataMapper; |
||||
|
|
||||
|
/** |
||||
|
* 添加一类交流站实时数据到数据库中 |
||||
|
* |
||||
|
* @param data |
||||
|
* @return |
||||
|
*/ |
||||
|
@Override |
||||
|
public boolean addDcYzsqbdcHmbldDataList(Map data) { |
||||
|
List<DcYzsqbdcHmbldData> list = new ArrayList<>(); |
||||
|
JSONObject properties = JSONObject.parseObject(data.get("properties").toString()); |
||||
|
if (properties.get("01") == null) { |
||||
|
return false; |
||||
|
} |
||||
|
JSONObject oneStopIntelligenceInvestigation = JSONObject.parseObject(properties.get("01").toString()); |
||||
|
// 上行
|
||||
|
DcYzsqbdcHmbldData upstream = new DcYzsqbdcHmbldData(); |
||||
|
setCommonDcYzsqbdcHmbldData(upstream, "1", oneStopIntelligenceInvestigation); |
||||
|
upstream.setIotDeviceId(data.get("deviceId").toString()); |
||||
|
|
||||
|
// 下行
|
||||
|
DcYzsqbdcHmbldData down = new DcYzsqbdcHmbldData(); |
||||
|
setCommonDcYzsqbdcHmbldData(down, "2", oneStopIntelligenceInvestigation); |
||||
|
down.setIotDeviceId(data.get("deviceId").toString()); |
||||
|
|
||||
|
// 平均车道数
|
||||
|
int averageNumberOfLanes = Integer.parseInt(oneStopIntelligenceInvestigation.get("numberOfLanes").toString()) / 2; |
||||
|
|
||||
|
JSONArray array = JSONArray.parseArray(oneStopIntelligenceInvestigation.get("lanes").toString()); |
||||
|
for (Object object : array) { |
||||
|
JSONObject lanesData = JSONObject.parseObject(object.toString()); |
||||
|
|
||||
|
if (lanesData.get("laneNumber").toString().equals("11") || |
||||
|
lanesData.get("laneNumber").toString().equals("12") || |
||||
|
lanesData.get("laneNumber").toString().equals("13") || |
||||
|
lanesData.get("laneNumber").toString().equals("14") || |
||||
|
lanesData.get("laneNumber").toString().equals("01") |
||||
|
) { |
||||
|
// 上行数据
|
||||
|
processingVehicleModelData(upstream, lanesData); |
||||
|
} else { |
||||
|
// 下行数据
|
||||
|
processingVehicleModelData(down, lanesData); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
averageSpeedOfAllLanesBasedOnType(upstream, averageNumberOfLanes); |
||||
|
averageSpeedOfAllLanesBasedOnType(down, averageNumberOfLanes); |
||||
|
|
||||
|
list.add(upstream); |
||||
|
list.add(down); |
||||
|
int number = dcYzsqbdcHmbldDataMapper.insertDcEvent(list); |
||||
|
if (number > 0) { |
||||
|
return true; |
||||
|
} |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 初始化上行和下行数据 |
||||
|
* |
||||
|
* @param data |
||||
|
* @param direction |
||||
|
* @param oneStopIntelligenceInvestigation |
||||
|
*/ |
||||
|
public void setCommonDcYzsqbdcHmbldData(DcYzsqbdcHmbldData data, String direction, JSONObject oneStopIntelligenceInvestigation) { |
||||
|
data.setId(UUID.randomUUID().toString()); |
||||
|
// 数据源
|
||||
|
data.setSjy("1"); |
||||
|
// 方向
|
||||
|
data.setDirection(direction); |
||||
|
// 设备编号
|
||||
|
data.setSbbh(oneStopIntelligenceInvestigation.get("deviceIdentificationCode").toString()); |
||||
|
// 上报周期
|
||||
|
data.setSbzq(oneStopIntelligenceInvestigation.get("trafficDataProcessingCycle").toString()); |
||||
|
// 时间序号
|
||||
|
data.setSjxh(oneStopIntelligenceInvestigation.get("timeSequenceNumber").toString()); |
||||
|
// 上报时间 年月日
|
||||
|
data.setSbsj(oneStopIntelligenceInvestigation.get("time").toString()); |
||||
|
// 车道数
|
||||
|
data.setLane(Integer.parseInt(oneStopIntelligenceInvestigation.get("numberOfLanes").toString())); |
||||
|
// 创建时间
|
||||
|
data.setCreateTime(DateUtils.getNowDate()); |
||||
|
data.setZdcll(0); |
||||
|
data.setZxkcjtl(0); |
||||
|
data.setMtcpjcs(0); |
||||
|
data.setXxhcjtl(0); |
||||
|
data.setXxhcpjcs(0); |
||||
|
data.setDkcjtl(0); |
||||
|
data.setDkcpjcs(0); |
||||
|
data.setZxhcjtl(0); |
||||
|
data.setZxhcpjcs(0); |
||||
|
data.setDxhcjtl(0); |
||||
|
data.setDxhcpjcs(0); |
||||
|
data.setTdxhcjtl(0); |
||||
|
data.setTdxhcpjcs(0); |
||||
|
data.setJzxcjtl(0); |
||||
|
data.setJzxcpjcs(0); |
||||
|
data.setTljjtl(0); |
||||
|
data.setTljpjcs(0); |
||||
|
data.setMtcjtl(0); |
||||
|
data.setMtcpjcs(0); |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 计算每个车型所有车道车速的平均值 |
||||
|
* |
||||
|
* @param data |
||||
|
* @param averageNumberOfLanes |
||||
|
*/ |
||||
|
public static void averageSpeedOfAllLanesBasedOnType(DcYzsqbdcHmbldData data, int averageNumberOfLanes) { |
||||
|
data.setMtcpjcs(data.getMtcpjcs() / averageNumberOfLanes); |
||||
|
data.setXxhcpjcs(data.getXxhcpjcs() / averageNumberOfLanes); |
||||
|
data.setDkcpjcs(data.getDkcpjcs() / averageNumberOfLanes); |
||||
|
data.setZxhcpjcs(data.getZxhcpjcs() / averageNumberOfLanes); |
||||
|
data.setDxhcpjcs(data.getDxhcpjcs() / averageNumberOfLanes); |
||||
|
data.setTdxhcpjcs(data.getTdxhcpjcs() / averageNumberOfLanes); |
||||
|
data.setJzxcpjcs(data.getJzxcpjcs() / averageNumberOfLanes); |
||||
|
data.setTljpjcs(data.getTljpjcs() / averageNumberOfLanes); |
||||
|
data.setMtcpjcs(data.getMtcpjcs() / averageNumberOfLanes); |
||||
|
|
||||
|
int pjcs = data.getMtcpjcs() + data.getXxhcpjcs() + data.getDkcpjcs() + |
||||
|
data.getZxhcpjcs() + data.getDxhcpjcs() + data.getTdxhcpjcs() + |
||||
|
data.getJzxcpjcs() + data.getTljpjcs() + data.getMtcpjcs(); |
||||
|
data.setPjcs(pjcs / 9); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 处理车辆类型数据 |
||||
|
* |
||||
|
* @param data |
||||
|
* @param lanesData |
||||
|
*/ |
||||
|
public static void processingVehicleModelData(DcYzsqbdcHmbldData data, JSONObject lanesData) { |
||||
|
// 总的车流量
|
||||
|
data.setZdcll(data.getZdcll() + Integer.parseInt(lanesData.get("totalTrafficFlow").toString())); |
||||
|
// 中小客车交通量
|
||||
|
data.setZxkcjtl(data.getZxkcjtl() + Integer.parseInt(lanesData.get("trafficNumberOfInAndSmall").toString())); |
||||
|
// 中小客车平均地点车速
|
||||
|
data.setZxkcpjcs(data.getZxkcpjcs() + Integer.parseInt(lanesData.get("inAndSmallAverageVehicleSpeed").toString())); |
||||
|
// 小型货车交通量
|
||||
|
data.setXxhcjtl(data.getXxhcjtl() + Integer.parseInt(lanesData.get("trafficVolumeOfSmallTrucks").toString())); |
||||
|
// 小型货车平均地点车速
|
||||
|
data.setXxhcpjcs(data.getXxhcpjcs() + Integer.parseInt(lanesData.get("smallTrucksAverageVehicleSpeed").toString())); |
||||
|
// 大客车交通量
|
||||
|
data.setDkcjtl(data.getDkcjtl() + Integer.parseInt(lanesData.get("busTrafficVolume").toString())); |
||||
|
// 大客车平均地点车速
|
||||
|
data.setDkcpjcs(data.getDkcpjcs() + Integer.parseInt(lanesData.get("averageSpeedOfBus").toString())); |
||||
|
// 中型货车交通量
|
||||
|
data.setZxhcjtl(data.getZxhcjtl() + Integer.parseInt(lanesData.get("mediumTruckTrafficVolume").toString())); |
||||
|
// 中型货车平均地点车速
|
||||
|
data.setZxhcpjcs(data.getZxhcpjcs() + Integer.parseInt(lanesData.get("averageSpeedOfMediumSizeTrucks").toString())); |
||||
|
// 大型货车交通量
|
||||
|
data.setDxhcjtl(data.getDxhcjtl() + Integer.parseInt(lanesData.get("largeTruckTrafficVolume").toString())); |
||||
|
// 大型货车平均地点车速
|
||||
|
data.setDxhcpjcs(data.getDxhcpjcs() + Integer.parseInt(lanesData.get("averageSpeedOfLargeTrucks").toString())); |
||||
|
// 特大型货车交通量
|
||||
|
data.setTdxhcjtl(data.getTdxhcjtl() + Integer.parseInt(lanesData.get("extraLargeTrucksTrafficVolume").toString())); |
||||
|
// 特大型货车平均地点车速
|
||||
|
data.setTdxhcpjcs(data.getTdxhcpjcs() + Integer.parseInt(lanesData.get("averageSpeedOfExtraLargeTrucks").toString())); |
||||
|
// 集装箱车交通量
|
||||
|
data.setJzxcjtl(data.getJzxcjtl() + Integer.parseInt(lanesData.get("containerTruckTrafficVolume").toString())); |
||||
|
// 集装箱车平均地点车速
|
||||
|
data.setJzxcpjcs(data.getJzxcpjcs() + Integer.parseInt(lanesData.get("averageSpeedOfContainerTruck").toString())); |
||||
|
// 拖拉机交通量
|
||||
|
data.setTljjtl(data.getTljjtl() + Integer.parseInt(lanesData.get("tractorTrafficVolume").toString())); |
||||
|
// 拖拉机平均地点车速
|
||||
|
data.setTljpjcs(data.getTljpjcs() + Integer.parseInt(lanesData.get("averageSpeedOfTractor").toString())); |
||||
|
// 摩托车交通量
|
||||
|
data.setMtcjtl(data.getMtcjtl() + Integer.parseInt(lanesData.get("motorcycleTrafficVolume").toString())); |
||||
|
// 摩托车平均地点车速
|
||||
|
data.setMtcpjcs(data.getMtcpjcs() + Integer.parseInt(lanesData.get("averageSpeedOfMotorcycle").toString())); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<!DOCTYPE mapper |
||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
<mapper namespace="com.zc.business.mapper.DcYzsqbdcHmbldDataMapper"> |
||||
|
|
||||
|
|
||||
|
|
||||
|
<insert id="insertDcEvent" parameterType="java.util.List"> |
||||
|
insert into dc_yzsqbdc_hmbld_data |
||||
|
|
||||
|
(id,iot_device_id,sjy, sbbh, sbzq, sjxh, sbsj, lane, direction, zdcll, pjcs, zxkcjtl, zxkcpjcs, |
||||
|
xxhcjtl, xxhcpjcs, |
||||
|
dkcjtl, dkcpjcs, zxhcjtl, zxhcpjcs, dxhcjtl, dxhcpjcs, tdxhcjtl, tdxhcpjcs, jzxcjtl, jzxcpjcs, tljjtl, |
||||
|
tljpjcs, mtcjtl, mtcpjcs,create_time) values |
||||
|
|
||||
|
<foreach collection="list" separator="," item="item"> |
||||
|
( |
||||
|
#{item.id}, |
||||
|
#{item.iotDeviceId}, |
||||
|
#{item.sjy},#{item.sbbh},#{item.sbzq},#{item.sjxh},#{item.sbsj},#{item.lane},#{item.direction},#{item.zdcll}, |
||||
|
#{item.pjcs},#{item.zxkcjtl},#{item.zxkcpjcs},#{item.xxhcjtl},#{item.xxhcpjcs}, |
||||
|
#{item.dkcjtl},#{item.dkcpjcs},#{item.zxhcjtl},#{item.zxhcpjcs},#{item.dxhcjtl},#{item.dxhcpjcs},#{item.tdxhcjtl}, |
||||
|
#{item.tdxhcpjcs},#{item.jzxcjtl},#{item.jzxcpjcs},#{item.tljjtl},#{item.tljpjcs},#{item.mtcjtl},#{item.mtcpjcs}, |
||||
|
#{item.createTime} |
||||
|
) |
||||
|
</foreach> |
||||
|
|
||||
|
</insert> |
||||
|
|
||||
|
</mapper> |
Loading…
Reference in new issue