diff --git a/zc-business/src/main/java/com/zc/business/domain/DcYzsqbdcHmbldData.java b/zc-business/src/main/java/com/zc/business/domain/DcYzsqbdcHmbldData.java new file mode 100644 index 00000000..8cc37205 --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/domain/DcYzsqbdcHmbldData.java @@ -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; + +} diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcYzsqbdcHmbldDataMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcYzsqbdcHmbldDataMapper.java new file mode 100644 index 00000000..1a1bf419 --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/mapper/DcYzsqbdcHmbldDataMapper.java @@ -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 list); + +} + + diff --git a/zc-business/src/main/java/com/zc/business/message/device/listener/DevicePropertyReportListener.java b/zc-business/src/main/java/com/zc/business/message/device/listener/DevicePropertyReportListener.java index 172dadf8..49fe359c 100644 --- a/zc-business/src/main/java/com/zc/business/message/device/listener/DevicePropertyReportListener.java +++ b/zc-business/src/main/java/com/zc/business/message/device/listener/DevicePropertyReportListener.java @@ -9,6 +9,7 @@ import com.zc.business.domain.MdDeviceData; import com.zc.business.enums.IotProductEnum; import com.zc.business.service.IDcMeteorologicalDetectorDataService; import com.zc.business.service.IMiddleDatabaseService; +import com.zc.business.service.IDcYzsqbdcHmbldDataService; import com.zc.common.core.redis.stream.RedisStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,7 +23,6 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Date; import java.util.HashMap; -import java.util.List; import java.util.Map; /** @@ -43,6 +43,9 @@ public class DevicePropertyReportListener implements StreamListener message) { String streamKay = message.getStream(); @@ -86,6 +89,7 @@ public class DevicePropertyReportListener implements StreamListener 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())); + } + + +} diff --git a/zc-business/src/main/resources/mapper/business/DcYzsqbdcHmbldDataMapper.xml b/zc-business/src/main/resources/mapper/business/DcYzsqbdcHmbldDataMapper.xml new file mode 100644 index 00000000..2d289a22 --- /dev/null +++ b/zc-business/src/main/resources/mapper/business/DcYzsqbdcHmbldDataMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + 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 + + + ( + #{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} + ) + + + + +