puzhibing
2 天以前 ea7595c4c75926f85388574b261b8ba90cf60e0d
修改bug和新增加川标报警适配
14个文件已修改
465 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/model/enums/WarnType.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CarType.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WarnMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/CarWarnListReq.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgUrgeTodoAckDao.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/DOWNWarnMsgUrgeTodoReq.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/UPWarnMsgAdptInfo.java 149 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/WarnMsgService.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 "其他报警";
    }
    
}
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;
}
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);
    }
    
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);
    }
}
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();
}
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 = "驾驶员姓名")
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();
}
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;
    }
}
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 &lt;= #{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>
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);
    
    
    /**
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);
    
}
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 = "谢茜";
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;
    }
}
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);
        }