| | |
| | | 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; |
| | | |
| | |
| | | return value.name; |
| | | } |
| | | } |
| | | return ""; |
| | | return "其他报警"; |
| | | } |
| | | |
| | | } |
| | |
| | | @TableField("car_num") |
| | | @ApiModelProperty("车辆数") |
| | | private Long carNum; |
| | | /** |
| | | * 排序 |
| | | */ |
| | | @TableField("sort") |
| | | private Integer sort; |
| | | } |
| | |
| | | @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); |
| | | } |
| | | |
| | |
| | | @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); |
| | | } |
| | | |
| | |
| | | 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()); |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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(); |
| | | |
| | | /** |
| | |
| | | * @return |
| | | */ |
| | | List<Map<String, Object>> getWarnGroupCountTop10(); |
| | | |
| | | |
| | | /** |
| | | * 获取根据车辆类型的报警汇总数据 |
| | | * @return |
| | | */ |
| | | List<Map<String, Object>> getAllWarnGroupVehicleType(); |
| | | } |
| | |
| | | public class CarWarnListReq extends BasePage { |
| | | @ApiModelProperty(value = "预警类型") |
| | | private String warnType; |
| | | @ApiModelProperty(value = "车辆类型") |
| | | private String carType; |
| | | @ApiModelProperty(value = "车辆号牌") |
| | | private String vehicleNumber; |
| | | @ApiModelProperty(value = "驾驶员姓名") |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取所有报警数据 |
| | | * @param carWarnListReq |
| | | * @return |
| | | */ |
| | | List<Warn> getAllCarWarnList(CarWarnListReq carWarnListReq); |
| | | |
| | | |
| | | /** |
| | | * 获取预警汇总统计最高的10类报警数据 |
| | | * |
| | | * @return |
| | |
| | | * @return |
| | | */ |
| | | List<Map<String, Object>> getWarnGroupCountTop10(); |
| | | |
| | | |
| | | /** |
| | | * 获取根据车辆类型的报警汇总数据 |
| | | * @return |
| | | */ |
| | | List<Map<String, Object>> getAllWarnGroupVehicleType(); |
| | | } |
| | |
| | | |
| | | 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; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.time.Instant; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneOffset; |
| | |
| | | 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()) { |
| | |
| | | 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) { |
| | | throw new RuntimeException(e); |
| | | e.printStackTrace(); |
| | | } |
| | | warn.setAddress(geocode.get("address")); |
| | | } |
| | | switch (vo.getResult()) { |
| | | case 0x00: |
| | | warn.setTreatmentState("处理中"); |
| | |
| | | } |
| | | 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); |
| | | } |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取所有报警数据 |
| | | * @param carWarnListReq |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<Warn> getAllCarWarnList(CarWarnListReq carWarnListReq) { |
| | | return this.baseMapper.getAllCarWarnList(carWarnListReq); |
| | | } |
| | | |
| | | /** |
| | | * 获取预警汇总统计最高的10类报警数据 |
| | | * |
| | | * @return |
| | |
| | | } |
| | | if (!collect.isEmpty()) { |
| | | List<Map<String, Object>> warnGroupCount = this.baseMapper.getWarnGroupCount(collect); |
| | | Integer num = Integer.valueOf(warnGroupCount.get(0).get("num").toString()); |
| | | if(num > 0){ |
| | | list.addAll(warnGroupCount); |
| | | } |
| | | } |
| | | return list; |
| | | } |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | <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> |
| | |
| | | </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 |
| | | from (select COUNT(1) as num, warn_type from t_warn group by warn_type) as aa |
| | |
| | | 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 |
| | | 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> |
| | |
| | | * @param result |
| | | * @return |
| | | */ |
| | | List<UPWarnMsgAdptInfo> findByResultIsAndPushTimeBefore(int result, long pushTime); |
| | | List<UPWarnMsgAdptInfo> findByResultIsAndLevelNotNullAndPushTimeBefore(int result, long pushTime); |
| | | |
| | | |
| | | /** |
| | |
| | | * @param supervisionId |
| | | * @return |
| | | */ |
| | | UPWarnMsgUrgeTodoAck findBySupervisionId(Integer supervisionId); |
| | | UPWarnMsgUrgeTodoAck findBySupervisionId(String supervisionId); |
| | | |
| | | } |
| | |
| | | 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 = "谢茜"; |
| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * 上报报警信息 |
| | |
| | | /** |
| | | * 信息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; |
| | | /** |
| | | * 报警数据长度 |
| | | */ |
| | |
| | | */ |
| | | @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:处理中 |
| | |
| | | /** |
| | | * 解析报文 |
| | | */ |
| | | public UPWarnMsgAdptInfo decode(WarnMsg warnMsg) { |
| | | public UPWarnMsgAdptInfo decode1(WarnMsg warnMsg) { |
| | | try { |
| | | byte[] data = warnMsg.getData(); |
| | | ByteBuf byteBuf = Unpooled.wrappedBuffer(data); |
| | |
| | | //报警时间 |
| | | this.warnTime = Long.parseLong(time, 16); |
| | | //信息ID |
| | | this.infoId = byteBuf.readInt(); |
| | | this.infoId = Integer.valueOf(byteBuf.readInt()).toString(); |
| | | //报警数据长度 |
| | | this.infoLength = byteBuf.readInt(); |
| | | //上报报警信息内容 |
| | |
| | | } |
| | | 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; |
| | | } |
| | | } |
| | |
| | | import javax.annotation.Resource; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneOffset; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | upWarnMsgUrgeTodoAckDao.save(upWarnMsgUrgeTodoAck); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | //走川标的公司 |
| | | private List<Integer> enterprise = Arrays.asList(17458936, 43984060, 13914394); |
| | | |
| | | |
| | | /** |
| | | * 上报报警信息 |
| | | * |
| | |
| | | * @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))); |
| | | 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); |
| | | } |
| | |
| | | * 定时任务督办报警请求 |
| | | */ |
| | | 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); |
| | | } |