From ea7595c4c75926f85388574b261b8ba90cf60e0d Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期二, 20 五月 2025 16:06:12 +0800 Subject: [PATCH] 修改bug和新增加川标报警适配 --- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java | 4 ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/UPWarnMsgAdptInfo.java | 149 ++++++++++++++++-- ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/model/enums/WarnType.java | 74 +++++++++ ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java | 12 + ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WarnMapper.java | 17 ++ ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CarType.java | 5 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java | 73 +++++++- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java | 15 + ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml | 80 +++++++++ ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/CarWarnListReq.java | 2 ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java | 2 ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgUrgeTodoAckDao.java | 2 ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/WarnMsgService.java | 28 ++- ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/DOWNWarnMsgUrgeTodoReq.java | 2 14 files changed, 412 insertions(+), 53 deletions(-) diff --git a/ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/model/enums/WarnType.java b/ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/model/enums/WarnType.java index 8212227..5c6315f 100644 --- a/ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/model/enums/WarnType.java +++ b/ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/model/enums/WarnType.java @@ -21,6 +21,78 @@ OFF_COURSE_ALARM(0x000B, "偏离路线报警"), VEHICLE_MOVEMENT_ALARM(0x000C, "车辆移动报警"), OVERTIME_DRIVING_ALARM(0x000D, "超时驾驶报警"), + ALARM_FOR_ILLEGAL_DRIVING(0x0010, "违规行驶报警"), + FORWARD_COLLISION_ALARM(0x0011, "前撞报警"), + LANE_DEPARTURE_ALARM(0x0012, "车道偏离报警"), + ABNORMAL_TIRE_PRESSURE_ALARM(0x0013, "胎压异常报警"), + DYNAMIC_INFORMATION_ABNORMAL_ALARM(0x0014, "动态信息异常报警"), + OTHER_ALARMS(0x00FF, "其它报警"), + VIDEO_SIGNAL_LOSS_ALARM(0x0101, "视频信号丢失报警"), + VIDEO_SIGNAL_OCCLUSION_ALARM(0x0102, "视频信号遮挡报警"), + STORAGE_UNIT_FAULT_ALARM(0x0103, "存储单元故障报警"), + OTHER_VIDEO_EQUIPMENT_FAILURE_ALARM(0x0104, "其他视频设备故障报警"), + BUS_OVERLOADING_ALARM(0x0105, "客车超员报警"), + ABNORMAL_DRIVING_BEHAVIOR_ALARM(0x0106, "异常驾驶行为报警"), + SPECIAL_ALARM_VIDEO_REACHES_THE_STORAGE_THRESHOLD_ALARM(0x0107, "特殊报警录像达到存储阈值报警"), + FORWARD_COLLISION_ALARM1(0x0201, "前向碰撞报警"), + LANE_DEPARTURE_ALARM1(0x0202, "车道偏离报警"), + ALARM_WHEN_THE_DISTANCE_BETWEEN_VEHICLES_IS_TOO_CLOSE(0x0203, "车距过近报警"), + PEDESTRIAN_COLLISION_ALARM(0x0204, "行人碰撞报警"), + FREQUENT_LANE_CHANGE_ALARM(0x0205, "频繁变道报警"), + ROAD_SIGN_OVER_LIMIT_ALARM(0x0206, "道路标识超限报警"), + OBSTACLE_ALARM(0x0207, "障碍物报警"), + ALARM_FOR_FAILURE_OF_DRIVING_ASSISTANCE_FUNCTIONS(0x0208, "驾驶辅助功能失效报警"), + FATIGUE_DRIVING_ALARM_PHYSIOLOGICAL_FATIGUE(0x0211, "疲劳驾驶报警(生理疲劳)"), + CALL_THE_ALARM_IF_YOU_DONT_LOOK_STRAIGHT_AHEAD_FOR_A_LONG_TIME(0x0212, "长时间不目视前方报警"), + SMOKING_ALARM(0x0213, "抽烟报警"), + CALL_THE_POLICE_WITH_A_HANDHELD_PHONE(0x0214, "接打手持电话报警"), + THE_DRIVER_ALARM_WAS_NOT_DETECTED(0x0215, "未检测到驾驶员报警"), + CALL_THE_ALARM_WHEN_BOTH_HANDS_ARE_TAKEN_OFF_THE_STEERING_WHEEL_SIMULTANEOUSLY(0x0216, "双手同时脱离方向盘报警"), + DRIVER_BEHAVIOR_MONITORING_FUNCTION_FAILURE_ALARM(0x0217, "驾驶员行为监测功能失效报警"), + DRIVER_IDENTITY_ANOMALY_ALARM(0x0218, "驾驶员身份异常报警"), + DRIVER_CHANGE_ALARM(0x0219, "驾驶员变更报警"), + HIGH_TIRE_PRESSURE_ALARM(0x0221, "胎压过高报警"), + LOW_TIRE_PRESSURE_ALARM(0x0222, "胎压过低报警"), + TIRE_TEMPERATURE_TOO_HIGH_ALARM(0x0223, "轮胎温度过高报警"), + SENSOR_ABNORMAL_ALARM(0x0224, "传感器异常报警"), + TIRE_PRESSURE_IMBALANCE_ALARM(0x0225, "胎压不平衡报警"), + SLOW_GAS_LEAKAGE_ALARM(0x0226, "慢漏气报警"), + LOW_BATTERY_VOLTAGE_ALARM(0x0227, "电池电压低报警"), + REAR_APPROACH_ALARM(0x0231, "后方接近报警"), + THE_ALARM_IS_APPROACHING_FROM_THE_LEFT_REAR(0x0232, "左侧后方接近报警"), + THE_ALARM_IS_APPROACHING_FROM_THE_RIGHT_REAR(0x0233, "右侧后方接近报警"), + PEDESTRIAN_ALARM_IN_THE_BLIND_SPOT_ON_THE_RIGHT_SIDE(0x0234, "右侧盲区行人报警"), + EMERGENCY_ACCELERATION_ALARM(0x0241, "急加速报警"), + EMERGENCY_DECELERATION_ALARM(0x0242, "急减速报警"), + SHARP_TURN_ALARM(0x0243, "急转弯报警"), + IDLE_SPEED_ALARM(0x0244, "怠速报警"), + ABNORMAL_STALLING_ALARM(0x0245, "异常熄火报警"), + NEUTRAL_COASTING_ALARM(0x0246, "空挡滑行报警"), + ENGINE_OVERSPEED_ALARM(0x0247, "发动机超转报警"), + COLLISION_WARNING(0x0301, "碰撞预警"), + ROLLOVER_WARNING(0x0302, "侧翻预警"), + ENTRY_AND_EXIT_ROUTES(0x0304, "进出路线"), + THE_DRIVING_TIME_ON_THE_SECTION_IS_INSUFFICIENT(0x0305, "路段行驶时间不足/过长"), + ILLEGAL_IGNITION_OF_VEHICLES(0x0306, "车辆非法点火"), + ILLEGAL_DISPLACEMENT_OF_VEHICLES(0x0307, "车辆非法位移"), + TERMINAL_FAULT_ALARM(0x0308, "终端故障报警"), + AN_ALARM_HAS_BEEN_TRIGGERED_FOR_THREE_DAYS_WITHOUT_GOING_ONLINE(0x0311, "三天未上线报警"), + CARRY_OUT_TIME_SLOT_TRAFFIC_ALARM(0x0312, "进行时段行车报警"), + LONG_TERM_REMOTE_BUSINESS_OPERATION_ALARM(0x0313, "长期异地经营报警"), + OFFLINE_DISPLACEMENT_ALARM(0x0314, "离线位移报警"), + EXCESSIVE_PARKING(0xA001, "超时停车"), + THE_TIME_INTERVAL_FOR_REPORTING_VEHICLE_POSITIONING_INFORMATION_IS_ABNORMAL(0xA002, "车辆定位信息上报时间间隔异常"), + THE_DISTANCE_INTERVAL_FOR_REPORTING_VEHICLE_POSITIONING_INFORMATION_IS_ABNORMAL(0xA003, "车辆定位信息上报距离间隔异常"), + THE_LOWER_LEVEL_PLATFORM_IS_ABNORMALLY_SHORT_TERM(0xA004, "下级平台异常短线"), + ABNORMAL_DATA_TRANSMISSION_ON_THE_SUBORDINATE_PLATFORM(0xA005, "下级平台数据传输异常"), + ROAD_SECTION_CONGESTION_ALARM(0xA006, "路段堵塞报警"), + ALARM_FOR_DANGEROUS_SECTIONS(0xA007, "危险路段报警"), + RAIN_AND_SNOW_WEATHER_WARNING(0xA008, "雨雪天气报警"), + ABNORMAL_DRIVER_IDENTITY_RECOGNITION(0xA009, "驾驶员身份识别异常"), + TERMINAL_ANOMALY(0xA00A, "终端异常(含线路连接异常)"), + PLATFORM_ACCESS_ANOMALY(0xA00B, "平台接入异常"), + CORE_DATA_ANOMALY(0xA00C, "核心数据异常"), + OTHER_ALARMS1(0xA0FF, "其它报警"), OTHER_ALARM(0x00FF, "其他报警"); private Integer code; @@ -40,7 +112,7 @@ return value.name; } } - return ""; + return "其他报警"; } } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CarType.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CarType.java index 1391d2c..ddcfcca 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CarType.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CarType.java @@ -39,4 +39,9 @@ @TableField("car_num") @ApiModelProperty("车辆数") private Long carNum; + /** + * 排序 + */ + @TableField("sort") + private Integer sort; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java index cc4bb7e..e7a01ec 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java @@ -240,7 +240,7 @@ @GetMapping("/getCarTypeList") @ApiOperation(value = "获取车辆类型列表数据", tags = {"车辆类型"}) public R<List<CarType>> getCarTypeList(String name) { - List<CarType> list = carTypeService.list(new LambdaQueryWrapper<CarType>().like(StringUtils.isNotEmpty(name), CarType::getName, name)); + List<CarType> list = carTypeService.list(new LambdaQueryWrapper<CarType>().like(StringUtils.isNotEmpty(name), CarType::getName, name).orderByAsc(CarType::getSort)); return R.ok(list); } @@ -248,7 +248,7 @@ @GetMapping("/getCarCount") @ApiOperation(value = "获取各种车辆类型车辆总数", tags = {"首页"}) public R<List<CarType>> getCarCount() { - List<CarType> list = carTypeService.list(); + List<CarType> list = carTypeService.list(new LambdaQueryWrapper<CarType>().orderByAsc(CarType::getSort)); return R.ok(list); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java index 29da125..a27eb7d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java @@ -61,7 +61,7 @@ PageInfo<CarWarnListResp> pageInfo = warnService.getCarWarnList(carWarnListReq); Map<String, Object> map = new HashMap<>(); map.put("page", pageInfo); - List<Warn> list = warnService.list(); + List<Warn> list = warnService.getAllCarWarnList(carWarnListReq); map.put("total", list.size()); map.put("processed", list.stream().filter(s->!s.getTreatmentState().equals("处理中")).count()); map.put("unprocessed", list.stream().filter(s->s.getTreatmentState().equals("处理中")).count()); @@ -149,4 +149,14 @@ List<Map<String, Object>> warnGroupCountTop10 = warnService.getWarnGroupCountTop10(); return R.ok(warnGroupCountTop10); } + + + + + @GetMapping("/getAllWarnGroupVehicleType") + @ApiOperation(value = "获取根据车辆类型的报警汇总数据", tags = {"首页"}) + public R<List<Map<String, Object>>> getAllWarnGroupVehicleType(){ + List<Map<String, Object>> allWarnGroupVehicleType = warnService.getAllWarnGroupVehicleType(); + return R.ok(allWarnGroupVehicleType); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WarnMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WarnMapper.java index 3f250aa..6157d69 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WarnMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WarnMapper.java @@ -25,7 +25,15 @@ * @return */ PageInfo<CarWarnListResp> getCarWarnList(PageInfo<CarWarnListResp> pageInfo, @Param("item") CarWarnListReq carWarnListReq); - + + + /** + * 获取所有报警数据 + * @param carWarnListReq + * @return + */ + List<Warn> getAllCarWarnList(@Param("item") CarWarnListReq carWarnListReq); + List<Map<String, Object>> getWarnGroup10Count(); @@ -43,4 +51,11 @@ * @return */ List<Map<String, Object>> getWarnGroupCountTop10(); + + + /** + * 获取根据车辆类型的报警汇总数据 + * @return + */ + List<Map<String, Object>> getAllWarnGroupVehicleType(); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/CarWarnListReq.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/CarWarnListReq.java index 77375bd..fb59ef9 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/CarWarnListReq.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/CarWarnListReq.java @@ -14,6 +14,8 @@ public class CarWarnListReq extends BasePage { @ApiModelProperty(value = "预警类型") private String warnType; + @ApiModelProperty(value = "车辆类型") + private String carType; @ApiModelProperty(value = "车辆号牌") private String vehicleNumber; @ApiModelProperty(value = "驾驶员姓名") diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java index 3dabe74..3c58f35 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java @@ -39,6 +39,14 @@ * @return */ PageInfo<CarWarnListResp> getCarWarnList(CarWarnListReq carWarnListReq); + + + /** + * 获取所有报警数据 + * @param carWarnListReq + * @return + */ + List<Warn> getAllCarWarnList(CarWarnListReq carWarnListReq); /** @@ -55,4 +63,11 @@ * @return */ List<Map<String, Object>> getWarnGroupCountTop10(); + + + /** + * 获取根据车辆类型的报警汇总数据 + * @return + */ + List<Map<String, Object>> getAllWarnGroupVehicleType(); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java index db0db5d..7ce498f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.dataInterchange.api.feignClient.UPWarnMsgAdptInfoClient; import com.ruoyi.dataInterchange.api.model.enums.WarnType; @@ -22,6 +23,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneOffset; @@ -71,10 +73,15 @@ List<Car> carList = carService.list(); List<Warn> warns = new ArrayList<>(); for (UPWarnMsgAdptInfoVo vo : list) { + String warnTypeName = WarnType.getWarnTypeName(vo.getWarnType()); warn = new Warn(); Optional<Car> carOptional = carList.stream().filter(s -> s.getVehicleNumber().equals(vo.getVehicleNo())).findFirst(); if (carOptional.isPresent()) { - warn.setCarId(carOptional.get().getId()); + Car car = carOptional.get(); + if(car.getOperateType().equals("出租车") && StringUtils.isNotEmpty(warnTypeName) && "疲劳驾驶报警".equals(warnTypeName)){ + continue; + } + warn.setCarId(car.getId()); } Optional<Driver> optional = driverList.stream().filter(s -> s.getVehicleNumber().equals(vo.getVehicleNo())).findFirst(); if (optional.isPresent()) { @@ -84,22 +91,22 @@ warn.setEnterpriseId(enterprise.getId()); warn.setStartTime(LocalDateTime.ofInstant(Instant.ofEpochMilli(vo.getCreateTime() * 1000), ZoneOffset.ofHours(8)).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); warn.setEndTime(LocalDateTime.ofInstant(Instant.ofEpochMilli(vo.getCreateTime() * 1000), ZoneOffset.ofHours(8)).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - warn.setWarnType(WarnType.getWarnTypeName(vo.getWarnType())); + warn.setWarnType(warnTypeName); warn.setWarnNumber(1); warn.setSpeed(null == vo.getSpeed() ? BigDecimal.ZERO : new BigDecimal(vo.getSpeed())); - if(null != vo.getLongitude()){ + if(null != vo.getLongitude() && 0 != vo.getLongitude()){ warn.setLongitude(new BigDecimal(vo.getLongitude()).divide(new BigDecimal(1000000)).toString()); } - if(null != vo.getLatitude()){ + if(null != vo.getLatitude() && 0 != vo.getLatitude()){ warn.setLatitude(new BigDecimal(vo.getLatitude()).divide(new BigDecimal(1000000)).toString()); + Map<String, String> geocode = null; + try { + geocode = GDMapGeocodingUtil.geocode(warn.getLongitude(), warn.getLatitude()); + } catch (Exception e) { + e.printStackTrace(); + } + warn.setAddress(geocode.get("address")); } - Map<String, String> geocode = null; - try { - geocode = GDMapGeocodingUtil.geocode(warn.getLongitude(), warn.getLatitude()); - } catch (Exception e) { - throw new RuntimeException(e); - } - warn.setAddress(geocode.get("address")); switch (vo.getResult()) { case 0x00: warn.setTreatmentState("处理中"); @@ -141,6 +148,11 @@ } Optional<Car> optional1 = carList.stream().filter(s -> s.getVehicleNumber().equals(warn.getVehicleNumber())).findFirst(); if (optional1.isPresent()) { + Car car = optional1.get(); + if(car.getOperateType().equals("出租车") && "疲劳驾驶报警".equals(warn.getWarnType())){ + this.removeById(warn.getId()); + continue; + } warn.setCarId(optional1.get().getId()); this.updateById(warn); } @@ -188,8 +200,18 @@ PageInfo<CarWarnListResp> pageInfo = new PageInfo<>(carWarnListReq.getPageCurr(), carWarnListReq.getPageSize()); return this.baseMapper.getCarWarnList(pageInfo, carWarnListReq); } - - + + + /** + * 获取所有报警数据 + * @param carWarnListReq + * @return + */ + @Override + public List<Warn> getAllCarWarnList(CarWarnListReq carWarnListReq) { + return this.baseMapper.getAllCarWarnList(carWarnListReq); + } + /** * 获取预警汇总统计最高的10类报警数据 * @@ -204,7 +226,10 @@ } if (!collect.isEmpty()) { List<Map<String, Object>> warnGroupCount = this.baseMapper.getWarnGroupCount(collect); - list.addAll(warnGroupCount); + Integer num = Integer.valueOf(warnGroupCount.get(0).get("num").toString()); + if(num > 0){ + list.addAll(warnGroupCount); + } } return list; } @@ -219,4 +244,24 @@ public List<Map<String, Object>> getWarnGroupCountTop10() { return this.baseMapper.getWarnGroupCountTop10(); } + + + /** + * 获取根据车辆类型的报警汇总数据 + * @return + */ + @Override + public List<Map<String, Object>> getAllWarnGroupVehicleType() { + List<Map<String, Object>> allWarnGroupVehicleType = this.baseMapper.getAllWarnGroupVehicleType(); + for (Map<String, Object> map : allWarnGroupVehicleType) { + Integer total = Integer.valueOf(map.get("total").toString()); + Integer processed = Integer.valueOf(map.get("processed").toString()); + if(total == 0){ + map.put("rate", BigDecimal.ZERO); + }else{ + map.put("rate", BigDecimal.valueOf(processed / total * 100).setScale(2, RoundingMode.HALF_EVEN)); + } + } + return allWarnGroupVehicleType; + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml index ae29535..296c272 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml @@ -30,6 +30,9 @@ <if test="null != item.warnType and '' != item.warnType"> and a.warn_type = #{item.warnType} </if> + <if test="null != item.carType and '' != item.carType"> + and b.operate_type = #{item.carType} + </if> <if test="null != item.vehicleNumber and '' != item.vehicleNumber"> and b.vehicle_number like CONCAT('%', #{item.vehicleNumber}, '%') </if> @@ -51,7 +54,43 @@ </where> order by a.create_time desc </select> - + + + <select id="getAllCarWarnList" resultType="com.ruoyi.system.api.model.Warn"> + select + a.* + from t_warn a + left join t_car b on (a.car_id = b.id) + left join t_driver c on (a.driver_id = c.id) + left join t_enterprise d on (a.enterprise_id = d.id) + <where> + <if test="null != item.warnType and '' != item.warnType"> + and a.warn_type = #{item.warnType} + </if> + <if test="null != item.carType and '' != item.carType"> + and b.operate_type = #{item.carType} + </if> + <if test="null != item.vehicleNumber and '' != item.vehicleNumber"> + and b.vehicle_number like CONCAT('%', #{item.vehicleNumber}, '%') + </if> + <if test="null != item.driverName and '' != item.driverName"> + and c.`name` like CONCAT('%', #{item.driverName}, '%') + </if> + <if test="null != item.enterpriseName and '' != item.enterpriseName"> + and d.`name` like CONCAT('%', #{item.enterpriseName}, '%') + </if> + <if test="null != item.startTime and '' != item.startTime"> + and a.start_time >= #{item.startTime} + </if> + <if test="null != item.endTime and '' != item.endTime"> + and a.end_time <= #{item.endTime} + </if> + <if test="null != item.treatmentState and '' != item.treatmentState"> + and a.treatment_state = #{item.treatmentState} + </if> + </where> + </select> + <select id="getWarnGroup10Count" resultType="map"> select aa.warn_type as warnType, aa.num @@ -72,8 +111,43 @@ select * from (select COUNT(1) as num, b.`name` from t_warn a - left join t_enterprise b on (a.enterprise_id = b.id) - group by a.enterprise_id) as aa + left join t_enterprise b on (a.enterprise_id = b.id) + group by a.enterprise_id) as aa where aa.num > 0 order by aa.num desc limit 10 </select> + + + + <select id="getAllWarnGroupVehicleType" resultType="map"> + select + ct.name, + ifnull(aa.total, 0) as total, + ifnull(bb.total, 0) as processed, + ifnull(cc.total, 0) as unprocessed + from t_car_type as ct + left join ( + select + b.operate_type, + count(1) as total + from t_warn a + left join t_car b on (a.car_id = b.id) + where a.car_id is not null group by b.operate_type + ) aa on (ct.name = aa.operate_type) + left join ( + select + b.operate_type, + count(1) as total + from t_warn a + left join t_car b on (a.car_id = b.id) + where a.car_id is not null and a.treatment_state = '已处理' group by b.operate_type + ) as bb on (ct.name = bb.operate_type) + left join ( + select + b.operate_type, + count(1) as total + from t_warn a + left join t_car b on (a.car_id = b.id) + where a.car_id is not null and a.treatment_state = '处理中' group by b.operate_type + ) as cc on (ct.name = cc.operate_type) + </select> </mapper> \ No newline at end of file diff --git a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java index ed57e60..8765d42 100644 --- a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java +++ b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java @@ -20,7 +20,7 @@ * @param result * @return */ - List<UPWarnMsgAdptInfo> findByResultIsAndPushTimeBefore(int result, long pushTime); + List<UPWarnMsgAdptInfo> findByResultIsAndLevelNotNullAndPushTimeBefore(int result, long pushTime); /** diff --git a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgUrgeTodoAckDao.java b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgUrgeTodoAckDao.java index 5c98563..898a0d5 100644 --- a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgUrgeTodoAckDao.java +++ b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgUrgeTodoAckDao.java @@ -17,6 +17,6 @@ * @param supervisionId * @return */ - UPWarnMsgUrgeTodoAck findBySupervisionId(Integer supervisionId); + UPWarnMsgUrgeTodoAck findBySupervisionId(String supervisionId); } diff --git a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/DOWNWarnMsgUrgeTodoReq.java b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/DOWNWarnMsgUrgeTodoReq.java index 955d26d..8315a6b 100644 --- a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/DOWNWarnMsgUrgeTodoReq.java +++ b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/DOWNWarnMsgUrgeTodoReq.java @@ -83,7 +83,7 @@ this.warnSrc = upWarnMsgAdptInfo.getWarnSrc(); this.warnType = upWarnMsgAdptInfo.getWarnType(); this.warnTime = upWarnMsgAdptInfo.getWarnTime(); - this.supervisionId = upWarnMsgAdptInfo.getInfoId(); + this.supervisionId = Integer.valueOf(upWarnMsgAdptInfo.getInfoId()); this.supervisionEndTime = LocalDateTime.now().plusDays(7).toEpochSecond(ZoneOffset.UTC); this.supervisionLevel = 0x01; this.supervisor = "谢茜"; diff --git a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/UPWarnMsgAdptInfo.java b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/UPWarnMsgAdptInfo.java index ae3245e..0b1be34 100644 --- a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/UPWarnMsgAdptInfo.java +++ b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/UPWarnMsgAdptInfo.java @@ -1,5 +1,6 @@ package com.ruoyi.dataInterchange.model; +import cn.hutool.core.util.ArrayUtil; import com.ruoyi.dataInterchange.pojo.BaseModel; import com.ruoyi.dataInterchange.util.jtt809.common.ByteArrayUtil; import com.ruoyi.dataInterchange.util.jtt809.common.Jtt809Util; @@ -9,6 +10,9 @@ import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.annotations.FieldType; + +import java.util.Arrays; +import java.util.List; /** * 上报报警信息 @@ -70,8 +74,70 @@ /** * 信息ID */ + @Field(type = FieldType.Text) + private String infoId; + /** + * 驾驶员姓名长度 + */ @Field(type = FieldType.Integer) - private int infoId; + private int driverLength; + /** + * 驾驶员姓名 + */ + @Field(type = FieldType.Text) + private String driver; + /** + * 驾驶员驾照号码长度 + */ + @Field(type = FieldType.Integer) + private int driverNoLength; + /** + * 驾驶员驾照号码 + */ + @Field(type = FieldType.Text) + private String driverNo; + /** + * 报警级别 + */ + @Field(type = FieldType.Integer) + private int level; + /** + * 经度 + */ + @Field(type = FieldType.Integer) + private int longitude; + /** + * 纬度 + */ + @Field(type = FieldType.Integer) + private int latitude; + /** + * 海拔 + */ + @Field(type = FieldType.Integer) + private int altitude; + /** + * 行车速度 + */ + @Field(type = FieldType.Integer) + private int speed; + /** + * 行驶记录速度 + */ + @Field(type = FieldType.Integer) + private int vec2; + /** + * 报警状态 + * 1:报警开始 + * 2:报警结束 + */ + @Field(type = FieldType.Integer) + private int status; + /** + * 方向 + */ + @Field(type = FieldType.Integer) + private int direction; /** * 报警数据长度 */ @@ -82,21 +148,6 @@ */ @Field(type = FieldType.Text) private String infoContent; - /** - * 速度 - */ - @Field(type = FieldType.Integer) - private Integer speed; - /** - * 经度 - */ - @Field(type = FieldType.Integer) - private Integer longitude; - /** - * 纬度 - */ - @Field(type = FieldType.Integer) - private Integer latitude; /** * 报警处理结果 * 0x00:处理中 @@ -111,12 +162,12 @@ */ @Field(type = FieldType.Long) private long pushTime; - + /** * 解析报文 */ - public UPWarnMsgAdptInfo decode(WarnMsg warnMsg) { + public UPWarnMsgAdptInfo decode1(WarnMsg warnMsg) { try { byte[] data = warnMsg.getData(); ByteBuf byteBuf = Unpooled.wrappedBuffer(data); @@ -124,7 +175,7 @@ this.vehicleColor = warnMsg.getVehicleColor(); this.dataType = warnMsg.getDataType(); this.dataLength = warnMsg.getDataLength(); - + //报警信息来源 this.warnSrc = byteBuf.readByte(); //报警类型 @@ -135,7 +186,7 @@ //报警时间 this.warnTime = Long.parseLong(time, 16); //信息ID - this.infoId = byteBuf.readInt(); + this.infoId = Integer.valueOf(byteBuf.readInt()).toString(); //报警数据长度 this.infoLength = byteBuf.readInt(); //上报报警信息内容 @@ -145,4 +196,62 @@ } return this; } + + /** + * 解析报文(川标) + */ + public UPWarnMsgAdptInfo decode2(WarnMsg warnMsg) { + try { + byte[] data = warnMsg.getData(); + ByteBuf byteBuf = Unpooled.wrappedBuffer(data); + this.vehicleNo = warnMsg.getVehicleNo(); + this.vehicleColor = warnMsg.getVehicleColor(); + this.dataType = warnMsg.getDataType(); + this.dataLength = warnMsg.getDataLength(); + + //报警信息来源 + this.warnSrc = byteBuf.readByte(); + //报警类型 + this.warnType = byteBuf.readShort(); + byte[] readableBytes = new byte[8]; + byteBuf.readBytes(readableBytes); + String time = ByteArrayUtil.bytes2HexStr(readableBytes); + //报警时间 + this.warnTime = Long.parseLong(time, 16); + //团标扩展 + //信息ID + this.infoId = Jtt809Util.readGBKString(byteBuf,32); + //驾驶员姓名长度 + this.driverLength = byteBuf.readByte(); + //驾驶员姓名 + this.driver = Jtt809Util.readGBKString(byteBuf,this.driverLength); + //驾驶员驾照号码长度 + this.driverNoLength = byteBuf.readByte(); + //驾驶员驾照号码 + this.driverNo = Jtt809Util.readGBKString(byteBuf,this.driverNoLength); + //报警级别 + this.level = byteBuf.readByte(); + //经度 + this.longitude = byteBuf.readInt(); + //纬度 + this.latitude = byteBuf.readInt(); + //海拔高度 + this.altitude = byteBuf.readUnsignedShort(); + //行车速度 + this.speed = byteBuf.readUnsignedShort(); + //行驶记录速度 + this.vec2 = byteBuf.readUnsignedShort(); + //报警状态 + this.status = byteBuf.readByte(); + //方向 + this.direction = byteBuf.readUnsignedShort(); + //报警数据长度 + this.infoLength = byteBuf.readUnsignedShort(); + //报警信息内容 + this.infoContent = Jtt809Util.readGBKString(byteBuf,this.infoLength); + }catch (Exception e){ + e.printStackTrace(); + } + return this; + } } diff --git a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/WarnMsgService.java b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/WarnMsgService.java index d401093..4951ede 100644 --- a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/WarnMsgService.java +++ b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/WarnMsgService.java @@ -20,6 +20,7 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.ZoneOffset; +import java.util.Arrays; import java.util.List; /** @@ -112,6 +113,13 @@ upWarnMsgUrgeTodoAck.setCreateTime(LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))); upWarnMsgUrgeTodoAckDao.save(upWarnMsgUrgeTodoAck); } + + + + + //走川标的公司 + private List<Integer> enterprise = Arrays.asList(17458936, 43984060, 13914394); + /** * 上报报警信息 @@ -121,16 +129,20 @@ * @param warnMsg */ public void up_warn_msg_adpt_info(ChannelHandlerContext ctx, int inferiorPlatformId, WarnMsg warnMsg) { - UPWarnMsgAdptInfo upWarnMsgAdptInfo = new UPWarnMsgAdptInfo().decode(warnMsg); + UPWarnMsgAdptInfo upWarnMsgAdptInfo = enterprise.contains(inferiorPlatformId) ? new UPWarnMsgAdptInfo().decode2(warnMsg) : new UPWarnMsgAdptInfo().decode1(warnMsg); upWarnMsgAdptInfo.setResult(0x00); upWarnMsgAdptInfo.setInferiorPlatformId(inferiorPlatformId); upWarnMsgAdptInfo.setCreateTime(LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))); - UPExgMsgRealLocation upExgMsgRealLocation = upExgMsgRealLocationDao.findByVehicleNoOrderByCreateTimeDesc(upWarnMsgAdptInfo.getVehicleNo()); - if (null != upExgMsgRealLocation) { - GnssData gnssData = upExgMsgRealLocation.getGnssData(); - upWarnMsgAdptInfo.setSpeed(gnssData.getVec1()); - upWarnMsgAdptInfo.setLongitude(gnssData.getLon()); - upWarnMsgAdptInfo.setLatitude(gnssData.getLat()); + if(0 == upWarnMsgAdptInfo.getLongitude()){ + UPExgMsgRealLocation upExgMsgRealLocation = upExgMsgRealLocationDao.findByVehicleNoOrderByCreateTimeDesc(upWarnMsgAdptInfo.getVehicleNo()); + if (null != upExgMsgRealLocation) { + GnssData gnssData = upExgMsgRealLocation.getGnssData(); + upWarnMsgAdptInfo.setSpeed(gnssData.getVec1()); + upWarnMsgAdptInfo.setLongitude(gnssData.getLon()); + upWarnMsgAdptInfo.setLatitude(gnssData.getLat()); + } + }else if(2 != upWarnMsgAdptInfo.getLevel()){ + return; } upWarnMsgAdptInfoDao.save(upWarnMsgAdptInfo); } @@ -140,7 +152,7 @@ * 定时任务督办报警请求 */ public void taskUrgeTodo() { - List<UPWarnMsgAdptInfo> list = upWarnMsgAdptInfoDao.findByResultIsAndPushTimeBefore(0x00, LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))); + List<UPWarnMsgAdptInfo> list = upWarnMsgAdptInfoDao.findByResultIsAndLevelNotNullAndPushTimeBefore(0x00, LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))); for (UPWarnMsgAdptInfo upWarnMsgAdptInfo : list) { down_warn_msg_urge_todo_req(upWarnMsgAdptInfo); } -- Gitblit v1.7.1