From 01292b914605dc29fdf57984006e1938dae492b8 Mon Sep 17 00:00:00 2001 From: PoffyZhang <99775271@qq.com> Date: Mon, 2 Sep 2024 15:18:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B9=89=E4=B9=8C=E5=85=AC=E8=B7=AF=20?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../car/position/manage/PositionMonitorManage.java | 149 +++++++++++---------- .../driver/manage/DriverManageDataViewManage.java | 1 - .../user/security/auth/WebSecurityConfig.java | 15 +++ .../src/main/resources/application-prod.yml | 12 +- .../com/ningdatech/carapi/client/ObjectData.java | 27 ++++ .../com/ningdatech/carapi/client/RadarClient.java | 32 +++++ .../carapi/client/RadarDataProcessor.java | 46 +++++++ .../com/ningdatech/carapi/client/RadarPacket.java | 29 ++++ .../com/ningdatech/carapi/client/TrafficData.java | 21 +++ 9 files changed, 251 insertions(+), 81 deletions(-) create mode 100644 ningda-yw-api/src/test/java/com/ningdatech/carapi/client/ObjectData.java create mode 100644 ningda-yw-api/src/test/java/com/ningdatech/carapi/client/RadarClient.java create mode 100644 ningda-yw-api/src/test/java/com/ningdatech/carapi/client/RadarDataProcessor.java create mode 100644 ningda-yw-api/src/test/java/com/ningdatech/carapi/client/RadarPacket.java create mode 100644 ningda-yw-api/src/test/java/com/ningdatech/carapi/client/TrafficData.java diff --git a/ningda-yw-api/src/main/java/com/ningdatech/carapi/car/position/manage/PositionMonitorManage.java b/ningda-yw-api/src/main/java/com/ningdatech/carapi/car/position/manage/PositionMonitorManage.java index aa0ad60..249d01e 100644 --- a/ningda-yw-api/src/main/java/com/ningdatech/carapi/car/position/manage/PositionMonitorManage.java +++ b/ningda-yw-api/src/main/java/com/ningdatech/carapi/car/position/manage/PositionMonitorManage.java @@ -310,80 +310,81 @@ public class PositionMonitorManage { } public List realTimeMonitorVehicleGisList(ReqRealTimeMonitorPO po) { - if (CollUtil.isEmpty(po.getCompanyIdList())) { - return Collections.emptyList(); - } - // 按照登录用户,如果是运营商账号登录,删选出该运营商关联的车辆信息 - UserInfoDetails userDetail = LoginUserUtil.loginUserDetail(); - Long roleId = userDetail.getRoleId(); - List carPlates = Lists.newArrayList(); - // 如果登录用户是运营商,只过滤出运营商下的车辆 - if (UserRoleTypeEnum.OPERATOR_ROLE_ID.getId().equals(roleId)) { - carPlates = vehicleBaseInfoService.getCarPlatesByCompanyIds(po.getCompanyIdList()); - String companyName = userDetail.getCompanyName(); - // 暂时控制运营商名称和运营商所在企业名称相同 - OperatorQueryDTO operatorQueryDTO = operatorsCacheHelper.getByName(companyName); - // 获取运营商id - Long operatorId = operatorQueryDTO.getId(); - carPlates = carPlates.stream() - .filter(v -> operatorId.equals(v.getOperatorId())) - .collect(Collectors.toList()); - } - // 如果登录用户是企业信息员,过滤出使用企业和所属企业为该企业的车辆 - else if (UserRoleTypeEnum.COMPANY_INFO_OFFICER_ROLE_ID.getId().equals(roleId)) { - Long companyId = userDetail.getCompanyId(); - carPlates = vehicleBaseInfoService.getCarPlatesByUseCompanyId(companyId); - }else{ - carPlates = vehicleBaseInfoService.getCarPlatesByCompanyIds(po.getCompanyIdList()); - } - log.info("request real carPlates 【{}】:", JSON.toJSONString(carPlates)); - if (CollUtil.isEmpty(carPlates)) { - return Collections.emptyList(); - } - Map map = Maps.newConcurrentMap(); - map.put(PositionContant.FIELD_CAR_PLATE, carPlates.stream().map(VehicleCompanyPO::getCarPlate).collect(Collectors.joining(","))); - map.put(PositionContant.HOST_FEILD, HOST); - JSONObject response = restTemplate.getForObject(PositionContant.REAL_GPS_URL, JSONObject.class, map); - log.info("request real gps 【{}】:", JSON.toJSONString(response)); - if (Objects.isNull(response)) { - throw new BizException(ExceptionCode.BAD_REQUEST.getCode(), "实时数据请求失败 网络异常"); - } - Integer statusCode = response.getInteger("status_code"); - if (0 != statusCode) { - throw new BizException(ExceptionCode.BAD_REQUEST.getCode(), response.getString("message")); - } - JSONArray resultJsonArray = response.getJSONArray("result"); - if (Objects.isNull(resultJsonArray) || resultJsonArray.size() == 0) { - return Collections.emptyList(); - } - - Map carMap = carPlates.stream() - .filter(w -> Objects.nonNull(w) && Objects.nonNull(w.getCarPlate())) - .filter(CodeUtil.distinctByKey(VehicleCompanyPO::getCarPlate)).collect(Collectors.toMap(VehicleCompanyPO::getCarPlate, v -> v)); - List res = resultJsonArray.stream().map(o -> { - JSONObject j = JSON.parseObject(JSON.toJSONString(o)); - String carPlate = j.getString(PositionContant.FIELD_CAR_PLATE); - VehicleCompanyPO vehicleCompany = carMap.get(carPlate); - ResRealTimeMonitorVehicleGisListVO vo = new ResRealTimeMonitorVehicleGisListVO(); - vo.setCarLongitude(new BigDecimal(String.valueOf(j.getOrDefault(PositionContant.LONGITUDE,BigDecimal.valueOf(0L))))); - vo.setCarLatitude(new BigDecimal(String.valueOf(j.getOrDefault(PositionContant.LATITUDE,BigDecimal.valueOf(0L))))); - vo.setCarAltitude(new BigDecimal(String.valueOf(j.getOrDefault(PositionContant.ALTITUDE,BigDecimal.valueOf(0L))))); - vo.setCarDirection(new BigDecimal(String.valueOf(j.getOrDefault(PositionContant.DIRECTION,BigDecimal.valueOf(0L))))); - vo.setCarPlate(carPlate); - vo.setPlateColor(j.getString(PositionContant.PLATE_COLOR)); - vo.setCompanyId(vehicleCompany.getCompanyId()); - vo.setCompanyName(vehicleCompany.getCompanyName()); - vo.setCarVelocity(BigDecimal.valueOf(Double.valueOf(String.valueOf(j.getOrDefault(PositionContant.CAR_VELOCITY,BigDecimal.valueOf(0L)))))); - vo.setUpdateTime((j.getString(PositionContant.UPDATE_TIME))); - vo.setSelfNo(vehicleCompany.getSelfNo()); - vo.setStatus(j.getInteger(PositionContant.ONLINE_STATUS)); - vo.setMoving(vehicleCompany.getMoving()); - vo.setVehicleType(vehicleCompany.getVehicleType()); - vo.setVehicleTypeName(vehicleCompany.getVechileTypeName()); - vo.setLimitSpeed(VehicleLimitSpeedEnum.getLimitSpeedByCode(vehicleCompany.getVehicleType())); - return vo; - }).collect(Collectors.toList()); - return res; + return Collections.emptyList(); +// if (CollUtil.isEmpty(po.getCompanyIdList())) { +// return Collections.emptyList(); +// } +// // 按照登录用户,如果是运营商账号登录,删选出该运营商关联的车辆信息 +// UserInfoDetails userDetail = LoginUserUtil.loginUserDetail(); +// Long roleId = userDetail.getRoleId(); +// List carPlates = Lists.newArrayList(); +// // 如果登录用户是运营商,只过滤出运营商下的车辆 +// if (UserRoleTypeEnum.OPERATOR_ROLE_ID.getId().equals(roleId)) { +// carPlates = vehicleBaseInfoService.getCarPlatesByCompanyIds(po.getCompanyIdList()); +// String companyName = userDetail.getCompanyName(); +// // 暂时控制运营商名称和运营商所在企业名称相同 +// OperatorQueryDTO operatorQueryDTO = operatorsCacheHelper.getByName(companyName); +// // 获取运营商id +// Long operatorId = operatorQueryDTO.getId(); +// carPlates = carPlates.stream() +// .filter(v -> operatorId.equals(v.getOperatorId())) +// .collect(Collectors.toList()); +// } +// // 如果登录用户是企业信息员,过滤出使用企业和所属企业为该企业的车辆 +// else if (UserRoleTypeEnum.COMPANY_INFO_OFFICER_ROLE_ID.getId().equals(roleId)) { +// Long companyId = userDetail.getCompanyId(); +// carPlates = vehicleBaseInfoService.getCarPlatesByUseCompanyId(companyId); +// }else{ +// carPlates = vehicleBaseInfoService.getCarPlatesByCompanyIds(po.getCompanyIdList()); +// } +// log.info("request real carPlates 【{}】:", JSON.toJSONString(carPlates)); +// if (CollUtil.isEmpty(carPlates)) { +// return Collections.emptyList(); +// } +// Map map = Maps.newConcurrentMap(); +// map.put(PositionContant.FIELD_CAR_PLATE, carPlates.stream().map(VehicleCompanyPO::getCarPlate).collect(Collectors.joining(","))); +// map.put(PositionContant.HOST_FEILD, HOST); +// JSONObject response = restTemplate.getForObject(PositionContant.REAL_GPS_URL, JSONObject.class, map); +// log.info("request real gps 【{}】:", JSON.toJSONString(response)); +// if (Objects.isNull(response)) { +// throw new BizException(ExceptionCode.BAD_REQUEST.getCode(), "实时数据请求失败 网络异常"); +// } +// Integer statusCode = response.getInteger("status_code"); +// if (0 != statusCode) { +// throw new BizException(ExceptionCode.BAD_REQUEST.getCode(), response.getString("message")); +// } +// JSONArray resultJsonArray = response.getJSONArray("result"); +// if (Objects.isNull(resultJsonArray) || resultJsonArray.size() == 0) { +// return Collections.emptyList(); +// } +// +// Map carMap = carPlates.stream() +// .filter(w -> Objects.nonNull(w) && Objects.nonNull(w.getCarPlate())) +// .filter(CodeUtil.distinctByKey(VehicleCompanyPO::getCarPlate)).collect(Collectors.toMap(VehicleCompanyPO::getCarPlate, v -> v)); +// List res = resultJsonArray.stream().map(o -> { +// JSONObject j = JSON.parseObject(JSON.toJSONString(o)); +// String carPlate = j.getString(PositionContant.FIELD_CAR_PLATE); +// VehicleCompanyPO vehicleCompany = carMap.get(carPlate); +// ResRealTimeMonitorVehicleGisListVO vo = new ResRealTimeMonitorVehicleGisListVO(); +// vo.setCarLongitude(new BigDecimal(String.valueOf(j.getOrDefault(PositionContant.LONGITUDE,BigDecimal.valueOf(0L))))); +// vo.setCarLatitude(new BigDecimal(String.valueOf(j.getOrDefault(PositionContant.LATITUDE,BigDecimal.valueOf(0L))))); +// vo.setCarAltitude(new BigDecimal(String.valueOf(j.getOrDefault(PositionContant.ALTITUDE,BigDecimal.valueOf(0L))))); +// vo.setCarDirection(new BigDecimal(String.valueOf(j.getOrDefault(PositionContant.DIRECTION,BigDecimal.valueOf(0L))))); +// vo.setCarPlate(carPlate); +// vo.setPlateColor(j.getString(PositionContant.PLATE_COLOR)); +// vo.setCompanyId(vehicleCompany.getCompanyId()); +// vo.setCompanyName(vehicleCompany.getCompanyName()); +// vo.setCarVelocity(BigDecimal.valueOf(Double.valueOf(String.valueOf(j.getOrDefault(PositionContant.CAR_VELOCITY,BigDecimal.valueOf(0L)))))); +// vo.setUpdateTime((j.getString(PositionContant.UPDATE_TIME))); +// vo.setSelfNo(vehicleCompany.getSelfNo()); +// vo.setStatus(j.getInteger(PositionContant.ONLINE_STATUS)); +// vo.setMoving(vehicleCompany.getMoving()); +// vo.setVehicleType(vehicleCompany.getVehicleType()); +// vo.setVehicleTypeName(vehicleCompany.getVechileTypeName()); +// vo.setLimitSpeed(VehicleLimitSpeedEnum.getLimitSpeedByCode(vehicleCompany.getVehicleType())); +// return vo; +// }).collect(Collectors.toList()); +// return res; } public List realTimeMonitorVehicleGisList(DataScreenParam param) { diff --git a/ningda-yw-api/src/main/java/com/ningdatech/carapi/driver/manage/DriverManageDataViewManage.java b/ningda-yw-api/src/main/java/com/ningdatech/carapi/driver/manage/DriverManageDataViewManage.java index c5a7768..84df776 100644 --- a/ningda-yw-api/src/main/java/com/ningdatech/carapi/driver/manage/DriverManageDataViewManage.java +++ b/ningda-yw-api/src/main/java/com/ningdatech/carapi/driver/manage/DriverManageDataViewManage.java @@ -117,7 +117,6 @@ public class DriverManageDataViewManage { MapDataVO mapData = MapDataVO.builder() .regionCode(MapUtil.getStr(v.get(0), "nativePlaceRegionCode")) .regionName(k) - .value(CollUtils.sum(v, w -> MapUtil.getInt(w, "count"))) .build(); result.add(mapData); }); diff --git a/ningda-yw-api/src/main/java/com/ningdatech/carapi/user/security/auth/WebSecurityConfig.java b/ningda-yw-api/src/main/java/com/ningdatech/carapi/user/security/auth/WebSecurityConfig.java index bae5241..e8c18aa 100644 --- a/ningda-yw-api/src/main/java/com/ningdatech/carapi/user/security/auth/WebSecurityConfig.java +++ b/ningda-yw-api/src/main/java/com/ningdatech/carapi/user/security/auth/WebSecurityConfig.java @@ -10,6 +10,10 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; import org.springframework.security.web.csrf.CookieCsrfTokenRepository; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; + +import java.util.Collections; /** * @Author LiuXinXin @@ -61,6 +65,17 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { .csrf().csrfTokenRepository(new CookieCsrfTokenRepository()) .ignoringAntMatchers(authProperties.getIgnoreCsrfUrlsArray()); // http.anonymous().authenticationFilter(availableUserAuthenticationFilter); + + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + CorsConfiguration corsConfiguration = new CorsConfiguration(); + corsConfiguration.setAllowedHeaders(Collections.singletonList("*")); + corsConfiguration.setAllowedMethods(Collections.singletonList("*")); +// corsConfiguration.setAllowedOrigins(Collections.singletonList("*")); + corsConfiguration.setAllowedOriginPatterns(Collections.singletonList("*")); + corsConfiguration.setMaxAge(3600L); + corsConfiguration.setAllowCredentials(true); + source.registerCorsConfiguration("/**", corsConfiguration); + http.cors().configurationSource(source); } } diff --git a/ningda-yw-api/src/main/resources/application-prod.yml b/ningda-yw-api/src/main/resources/application-prod.yml index df0f7b6..8ccc9c5 100644 --- a/ningda-yw-api/src/main/resources/application-prod.yml +++ b/ningda-yw-api/src/main/resources/application-prod.yml @@ -21,10 +21,10 @@ spring: namespace: "spring:session" redis: timeout: 15000 - host: r-i5c0beef0e0c5114.redis.rds.internet.cloud-inner.zj.gov.cn + host: localhost port: 6379 database: 0 - password: Sswt_8705 + password: Ndkj1234 jedis: pool: max-active: 200 @@ -40,9 +40,9 @@ spring: datasource: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://rm-i5c1i506lf32hy1ox.mysql.rds.internet.cloud-inner.zj.gov.cn/szsnc2?serverTimezone=Asia/Shanghai&characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=false - username: u_snc2 - password: Sswt_8705 + url: jdbc:mysql://localhost:3306/nd-yw-road?serverTimezone=Asia/Shanghai&characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=false + username: root + password: NingdaKeji123! hikari: minimum-idle: 5 maximum-pool-size: 1000 @@ -157,7 +157,7 @@ log: # url: http://shuiniche.ningdatech.com/cm/open/api/log/backup/download login: - sms-check: true + sms-check: false public-key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCAPhUV8sdOC5MB0m6qHAIJfI0vhkO+wZpO8srcmiMjbzCoaCSznlxZKLVv8MXMB5fgEHqTlrXThZlmCXHJRdZvIpBLNCYu5dd8T0NlmxuioiOVH3dU7Cd1a78B901oZ0NJ5TdcmtQQQQNIq/eKdeOpb+x9NGCLBy7vaOJtYYPTKQIDAQAB private-key: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIA+FRXyx04LkwHSbqocAgl8jS+GQ77Bmk7yytyaIyNvMKhoJLOeXFkotW/wxcwHl+AQepOWtdOFmWYJcclF1m8ikEs0Ji7l13xPQ2WbG6KiI5Ufd1TsJ3VrvwH3TWhnQ0nlN1ya1BBBA0ir94p146lv7H00YIsHLu9o4m1hg9MpAgMBAAECgYBdgueFNZ62/iGX9oXTbNDfcf7RZKoJcsq+PrRF3+83a2CjrCz2/MaCDPkgQwU4HWFVdS6sZ/z13Dla+hAKn+4X2v2pL3ryrcjlY35yreB6NlCjbsRbEACZEvhaps/taLu4IkZ/CQ6msCz8XHkBOMlWDF36kIxS3BFRmu3mWjHCcQJBAMAfZfKZxWX6lJBWLSy3QhV8jIo9+e+kk4VQRZUXgLJf1IwkxcHMmp4OSgcJp5do1YcoBlPQNdaWta0bt7TQL0cCQQCq4X+jc8Ikn/fxeeIpE75CqveHiF86KU7HKVfpjqiZATIeIbBe8eeC1pXlgX6TmMTWFQSRHWVzmVSwRaRhuYIPAkBd5jquksdu60T3MpdLtpm+5KvP2TCyFq7fRndrwhvtknbQtBxPdw/O1k8KF4bosp1CPKazCh12LxzGabikz+d7AkA0iKbo5UmmYNelEUeKQVuYu17l9/LuuoxRhlBUqVsDzu5NfSXvyobWHopuyGTVk33QIx4ITvVFmLoEhySGNrXZAkBktQR+kMStI0SlcMKYFKmQXu78W97p8soVvhP1AndvPiI9keO3UxO7cUjcPRROmcGUU39yGHYlJvu1Krj6+GI1 qyytz: diff --git a/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/ObjectData.java b/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/ObjectData.java new file mode 100644 index 0000000..03de3c0 --- /dev/null +++ b/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/ObjectData.java @@ -0,0 +1,27 @@ +package com.ningdatech.carapi.client; + +import lombok.Data; + +@Data +public class ObjectData { + private short targetId; + private byte laneNumber; + private byte targetType; + private float length; + private float width; + private float height; + private float yawAngle; + private float xCoordinate; + private float yCoordinate; + private float xVelocity; + private float yVelocity; + private float speed; + private float acceleration; + private float xAcceleration; + private float yAcceleration; + private double longitude; + private double latitude; + + // 构造函数、getter和setter方法 + // ... +} \ No newline at end of file diff --git a/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/RadarClient.java b/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/RadarClient.java new file mode 100644 index 0000000..d4a7196 --- /dev/null +++ b/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/RadarClient.java @@ -0,0 +1,32 @@ +package com.ningdatech.carapi.client; + +import java.io.*; +import java.net.*; + +public class RadarClient { + private Socket socket; + private DataInputStream input; + private DataOutputStream output; + + public RadarClient(String host, int port) throws IOException { + socket = new Socket(host, port); + input = new DataInputStream(new BufferedInputStream(socket.getInputStream())); + output = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); + } + + public void sendData(byte[] data) throws IOException { + output.write(data); + output.flush(); + } + + public byte[] receiveData() throws IOException { + // 实现接收数据的逻辑 + return null; + } + + public void close() throws IOException { + input.close(); + output.close(); + socket.close(); + } +} \ No newline at end of file diff --git a/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/RadarDataProcessor.java b/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/RadarDataProcessor.java new file mode 100644 index 0000000..989a8d1 --- /dev/null +++ b/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/RadarDataProcessor.java @@ -0,0 +1,46 @@ +package com.ningdatech.carapi.client; + +import java.io.IOException; + +public class RadarDataProcessor { + public static void main(String[] args) { + try { + RadarClient client = new RadarClient("localhost", 8080); + + while (true) { + byte[] receivedData = client.receiveData(); + RadarPacket packet = RadarPacket.fromByteArray(receivedData); + + if (packet.getDataType() == 0x01) { + ObjectData objectData = parseObjectData(packet.getData()); + processObjectData(objectData); + } else if (packet.getDataType() == 0x03) { + TrafficData trafficData = parseTrafficData(packet.getData()); + processTrafficData(trafficData); + } + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private static ObjectData parseObjectData(byte[] data) { + // 实现解析目标轨迹数据的逻辑 + return new ObjectData(); + } + + private static TrafficData parseTrafficData(byte[] data) { + // 实现解析交通流量统计数据的逻辑 + return new TrafficData(); + } + + private static void processObjectData(ObjectData data) { + // 处理目标轨迹数据 + return; + } + + private static void processTrafficData(TrafficData data) { + // 处理交通流量统计数据 + return; + } +} \ No newline at end of file diff --git a/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/RadarPacket.java b/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/RadarPacket.java new file mode 100644 index 0000000..f4e583e --- /dev/null +++ b/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/RadarPacket.java @@ -0,0 +1,29 @@ +package com.ningdatech.carapi.client; + +import lombok.Data; + +@Data +public class RadarPacket { + private static final byte[] HEADER = {0x55, (byte) 0xAA, 0x55, (byte) 0xBB}; + private static final byte[] FOOTER = {0x55, (byte) 0xCC, 0x55, (byte) 0xDD}; + + private short dataLength; + private byte dataType; + private byte checksum; + private String deviceId; + private long timestamp; + private byte[] data; + + // 构造函数、getter和setter方法 + // ... + + public byte[] toByteArray() { + // 实现将数据包转换为字节数组的逻辑 + return new byte[0]; + } + + public static RadarPacket fromByteArray(byte[] bytes) { + // 实现从字节数组解析数据包的逻辑 + return new RadarPacket(); + } +} \ No newline at end of file diff --git a/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/TrafficData.java b/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/TrafficData.java new file mode 100644 index 0000000..eac5697 --- /dev/null +++ b/ningda-yw-api/src/test/java/com/ningdatech/carapi/client/TrafficData.java @@ -0,0 +1,21 @@ +package com.ningdatech.carapi.client; + +import lombok.Data; + +@Data +public class TrafficData { + private short statisticalPeriod; + private short laneNumber; + private float monitoringPosition; + private short smallCarFlow; + private short largeCarFlow; + private short extraLargeCarFlow; + private short totalFlow; + private float averageSpeed; + private float headwayTime; + private float occupancyRate; + private float maxQueueLength; + + // 构造函数、getter和setter方法 + // ... +} \ No newline at end of file