Pu Zhibing
2025-04-04 3d4eeb82dd61f8951616dece2425e870116bc23d
提交最终版本和配置线上环境
28个文件已修改
9个文件已添加
951 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/factory/UPExgMsgTakeEwayBillAckClientFallbackFactory.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/factory/UPWarnMsgAdptInfoClientFallbackFactory.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/feignClient/UPExgMsgTakeEwayBillAckClient.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/feignClient/UPWarnMsgAdptInfoClient.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/model/enums/WarnType.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/vo/UPExgMsgRegisterVo.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/vo/UPExgMsgTakeEwayBillAckVo.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/vo/UPWarnMsgAdptInfoVo.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-dataInterchange/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/Car.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CarType.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/Order.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/src/main/resources/logback.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-gateway/src/main/resources/logback.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WarnMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICarService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CarServiceImpl.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DriverServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/TaskUtil.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/logback.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/controller/UPExgMsgRegisterController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/controller/UPExgMsgTakeEwayBillAckController.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/controller/UPWarnMsgAdptInfoController.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPExgMsgTakeEwayBillAckDao.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgUrgeTodoAckDao.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/UPWarnMsgAdptInfo.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/ExgMsgService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/WarnMsgService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-dataInterchange/src/main/resources/logback.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/factory/UPExgMsgTakeEwayBillAckClientFallbackFactory.java
New file
@@ -0,0 +1,26 @@
package com.ruoyi.dataInterchange.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.dataInterchange.api.feignClient.UPExgMsgTakeEwayBillAckClient;
import com.ruoyi.dataInterchange.api.vo.UPExgMsgTakeEwayBillAckVo;
import org.springframework.cloud.openfeign.FallbackFactory;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2025/4/2 11:43
 */
public class UPExgMsgTakeEwayBillAckClientFallbackFactory implements FallbackFactory<UPExgMsgTakeEwayBillAckClient> {
    @Override
    public UPExgMsgTakeEwayBillAckClient create(Throwable cause) {
        return new UPExgMsgTakeEwayBillAckClient() {
            @Override
            public R<List<UPExgMsgTakeEwayBillAckVo>> findByCreateTimeAfter(Long createTime) {
                return R.fail("获取大于给定日期的数据失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/factory/UPWarnMsgAdptInfoClientFallbackFactory.java
New file
@@ -0,0 +1,25 @@
package com.ruoyi.dataInterchange.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.dataInterchange.api.feignClient.UPWarnMsgAdptInfoClient;
import com.ruoyi.dataInterchange.api.vo.UPWarnMsgAdptInfoVo;
import org.springframework.cloud.openfeign.FallbackFactory;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2025/4/2 10:30
 */
public class UPWarnMsgAdptInfoClientFallbackFactory implements FallbackFactory<UPWarnMsgAdptInfoClient> {
    @Override
    public UPWarnMsgAdptInfoClient create(Throwable cause) {
        return new UPWarnMsgAdptInfoClient() {
            @Override
            public R<List<UPWarnMsgAdptInfoVo>> findByCreateTimeAfter(Long createTime) {
                return R.fail("查询大于给定日期的所有报警数据失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/feignClient/UPExgMsgTakeEwayBillAckClient.java
New file
@@ -0,0 +1,29 @@
package com.ruoyi.dataInterchange.api.feignClient;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.dataInterchange.api.factory.UPExgMsgTakeEwayBillAckClientFallbackFactory;
import com.ruoyi.dataInterchange.api.vo.UPExgMsgTakeEwayBillAckVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2025/4/2 11:43
 */
@FeignClient(contextId = "UPExgMsgTakeEwayBillAckClient", value = ServiceNameConstants.DATA_INTERCHANGE_SERVICE, fallbackFactory = UPExgMsgTakeEwayBillAckClientFallbackFactory.class)
public interface UPExgMsgTakeEwayBillAckClient {
    /**
     * 获取大于给定日期的数据
     *
     * @param createTime
     * @return
     */
    @PostMapping("/exgMsgTakeEwayBillAck/findByCreateTimeAfter")
    R<List<UPExgMsgTakeEwayBillAckVo>> findByCreateTimeAfter(@RequestParam("createTime") Long createTime);
}
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/feignClient/UPWarnMsgAdptInfoClient.java
New file
@@ -0,0 +1,29 @@
package com.ruoyi.dataInterchange.api.feignClient;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.dataInterchange.api.factory.UPWarnMsgAdptInfoClientFallbackFactory;
import com.ruoyi.dataInterchange.api.vo.UPWarnMsgAdptInfoVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2025/4/2 10:29
 */
@FeignClient(contextId = "UPWarnMsgAdptInfoClient", value = ServiceNameConstants.DATA_INTERCHANGE_SERVICE, fallbackFactory = UPWarnMsgAdptInfoClientFallbackFactory.class)
public interface UPWarnMsgAdptInfoClient {
    /**
     * 查询大于给定日期的所有报警数据
     *
     * @param createTime
     * @return
     */
    @PostMapping("/warnMsgAdptInfo/findByCreateTimeAfter")
    R<List<UPWarnMsgAdptInfoVo>> findByCreateTimeAfter(@RequestParam("createTime") Long createTime);
}
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/model/enums/WarnType.java
New file
@@ -0,0 +1,46 @@
package com.ruoyi.dataInterchange.api.model.enums;
/**
 * 报警类型
 *
 * @author zhibing.pu
 * @Date 2025/3/13 12:02
 */
public enum WarnType {
    OVERSPEED_ALARM(0x0001, "超速报警"),
    FATIGUE_DRIVING_ALARM(0x0002, "疲劳驾驶报警"),
    EMERGENCY_ALARM(0x0003, "紧急报警"),
    ENTER_THE_DESIGNATED_AREA_TO_ALERT(0x0004, "进入指定区域报警"),
    LEAVE_THE_DESIGNATED_AREA_TO_CALL_THE_POLICE(0x0005, "离开指定区域报警"),
    ROAD_BLOCKING_ALARM(0x0006, "路段堵塞报警"),
    DANGEROUS_ROAD_WARNING(0x0007, "危险路段报警"),
    CROSSING_ALARM(0x0008, "越界报警"),
    BURGLAR_ALARM(0x0009, "盗警"),
    ROBBERY_POLICE(0x000A, "劫警"),
    OFF_COURSE_ALARM(0x000B, "偏离路线报警"),
    VEHICLE_MOVEMENT_ALARM(0x000C, "车辆移动报警"),
    OVERTIME_DRIVING_ALARM(0x000D, "超时驾驶报警"),
    OTHER_ALARM(0x00FF, "其他报警");
    private Integer code;
    private String name;
    WarnType(Integer code, String name) {
        this.code = code;
        this.name = name;
    }
    public static String getWarnTypeName(int code) {
        WarnType[] values = WarnType.values();
        for (WarnType value : values) {
            if (value.code == code) {
                return value.name;
            }
        }
        return "";
    }
}
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/vo/UPExgMsgRegisterVo.java
@@ -1,5 +1,6 @@
package com.ruoyi.dataInterchange.api.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
/**
@@ -56,4 +57,13 @@
     * 添加时间
     */
    private Long createTime;
    /**
     * 实时经度
     */
    private String longitude;
    /**
     * 实时纬度
     */
    @TableField("latitude")
    private String latitude;
}
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/vo/UPExgMsgTakeEwayBillAckVo.java
New file
@@ -0,0 +1,44 @@
package com.ruoyi.dataInterchange.api.vo;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/4/2 11:37
 */
@Data
public class UPExgMsgTakeEwayBillAckVo {
    private String id;
    /**
     * 下级平台唯一标识
     */
    private Integer inferiorPlatformId;
    /**
     * 添加时间
     */
    private Long createTime;
    /**
     * 车牌号
     */
    private String vehicleNo;
    /**
     * 车牌颜色
     */
    private int vehicleColor;
    /**
     * 子业务类型标识
     */
    private int dataType;
    /**
     * 后续数据长度
     */
    private int dataLength;
    /**
     * 电子运单数据体长度
     */
    private int ewayBillLength;
    /**
     * 电子运单数据内容
     */
    private String ewayBillInfo;
}
ruoyi-api/ruoyi-api-dataInterchange/src/main/java/com/ruoyi/dataInterchange/api/vo/UPWarnMsgAdptInfoVo.java
New file
@@ -0,0 +1,93 @@
package com.ruoyi.dataInterchange.api.vo;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/4/2 10:15
 */
@Data
public class UPWarnMsgAdptInfoVo {
    private String id;
    /**
     * 下级平台唯一标识
     */
    private Integer inferiorPlatformId;
    /**
     * 添加时间
     */
    private Long createTime;
    /**
     * 车牌号
     */
    private String vehicleNo;
    /**
     * 车牌颜色
     */
    private int vehicleColor;
    /**
     * 子业务类型标识
     */
    private int dataType;
    /**
     * 后续数据长度
     */
    private int dataLength;
    /**
     * 报警信息来源
     * 0x01: 车载终端
     * 0x02: 企业监控平台
     * 0x03: 政府监管平台
     * 0x09: 其他
     */
    private int warnSrc;
    /**
     * 报警类型
     * 0x0001: 超速报警
     * 0x0002: 疲劳驾驶报警
     * 0x0003: 紧急报警
     * 0x0004: 进入指定区域报警
     * 0x0005: 离开指定区域报警
     * 0x0006: 路段堵塞报警
     * 0x0007: 危险路段报警
     * 0x0008: 越界报警
     * 0x0009: 盗警
     */
    private int warnType;
    /**
     * 报警时间
     */
    private long warnTime;
    /**
     * 信息ID
     */
    private int infoId;
    /**
     * 报警数据长度
     */
    private int infoLength;
    /**
     * 上报报警信息内容
     */
    private String infoContent;
    /**
     * 速度
     */
    private Integer speed;
    /**
     * 经度
     */
    private Integer longitude;
    /**
     * 纬度
     */
    private Integer latitude;
    /**
     * 报警处理结果
     * 0x00:处理中
     * 0x01:已处理完毕
     * 0x02:不作处理
     * 0x03:将来处理
     */
    private int result;
}
ruoyi-api/ruoyi-api-dataInterchange/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,4 +1,7 @@
com.ruoyi.dataInterchange.api.factory.UPExgMsgRegisterClientFallbackFactory
com.ruoyi.dataInterchange.api.factory.UPExgMsgReportDriverInfoClientFallbackFactory
com.ruoyi.dataInterchange.api.factory.RealVideoMsgClientFallbackFactory
com.ruoyi.dataInterchange.api.factory.UPExgMsgRealLocationClientFallbackFactory
com.ruoyi.dataInterchange.api.factory.UPExgMsgRealLocationClientFallbackFactory
com.ruoyi.dataInterchange.api.factory.UPWarnMsgAdptInfoClientFallbackFactory
com.ruoyi.dataInterchange.api.factory.UPExgMsgTakeEwayBillAckClientFallbackFactory
com.ruoyi.dataInterchange.api.factory.PlaybackMsgClientFallbackFactory
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/Car.java
@@ -198,6 +198,18 @@
    @ApiModelProperty(value = "运输证字号")
    private String transportCertificateNumber;
    /**
     * 实时经度
     */
    @TableField("longitude")
    @ApiModelProperty(value = "实时经度")
    private String longitude;
    /**
     * 实时纬度
     */
    @TableField("latitude")
    @ApiModelProperty(value = "实时纬度")
    private String latitude;
    /**
     * 车辆状态(1=在线,2=异常,3=离线,4=故障)
     */
    @TableField("status")
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CarType.java
@@ -38,5 +38,5 @@
     */
    @TableField("car_num")
    @ApiModelProperty("车辆数")
    private Integer carNum;
    private Long carNum;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/Order.java
@@ -8,6 +8,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * @author zhibing.pu
@@ -129,4 +131,9 @@
    @TableField("remark")
    @ApiModelProperty(value = "乘客备注")
    private String remark;
    /**
     * 添加时间
     */
    @TableField("create_time")
    private LocalDateTime createTime;
}
ruoyi-auth/src/main/resources/logback.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 日志存放路径 -->
    <property name="log.path" value="/mnt/app/ruoyi-auth" />
    <property name="log.path" value="E:/VehicleSupervisionPlatform/app/logs/ruoyi-auth" />
   <!-- 日志输出格式 -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
ruoyi-gateway/src/main/resources/logback.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 日志存放路径 -->
    <property name="log.path" value="/mnt/app/ruoyi-gateway" />
    <property name="log.path" value="E:/VehicleSupervisionPlatform/app/logs/ruoyi-gateway" />
   <!-- 日志输出格式 -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CarController.java
@@ -7,6 +7,7 @@
import com.ruoyi.dataInterchange.api.feignClient.PlaybackMsgClient;
import com.ruoyi.dataInterchange.api.feignClient.RealVideoMsgClient;
import com.ruoyi.dataInterchange.api.feignClient.UPExgMsgRealLocationClient;
import com.ruoyi.dataInterchange.api.vo.GnssDataVo;
import com.ruoyi.dataInterchange.api.vo.OrderTravelVo;
import com.ruoyi.dataInterchange.api.vo.UPPlaybackMsgStartupAckVo;
import com.ruoyi.dataInterchange.api.vo.UPRealvideoMsgStartupAckVo;
@@ -22,6 +23,7 @@
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -60,6 +62,9 @@
    
    @Resource
    private ICarTypeService carTypeService;
    @Resource
    private RedisTemplate redisTemplate;
    
    
    @GetMapping("/getCarList")
@@ -201,4 +206,16 @@
        return R.ok(carStatusCount);
    }
    
    @GetMapping("/getMapCarList")
    @ApiOperation(value = "获取地图司机数据", tags = {"首页"})
    public R<List<Car>> getMapCarList() {
        List<Car> list = carService.list();
        for (Car car : list) {
            GnssDataVo gnssDataVo = (GnssDataVo) redisTemplate.opsForValue().get("location:" + car.getVehicleNumber());
            car.setLongitude(Double.valueOf(gnssDataVo.getLon() / 1000000).toString());
            car.setLatitude(Double.valueOf(gnssDataVo.getLat() / 1000000).toString());
        }
        return R.ok(list);
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WarnController.java
@@ -92,8 +92,17 @@
        return R.ok(carWarnInfoResp);
    }
    
    @GetMapping("/getWarnGroupCount")
    @ApiOperation(value = "获取预警情况统计", tags = {"首页"})
    public R<List<Map<String, Object>>> getWarnGroupCount() {
        List<Map<String, Object>> warnGroupCount = warnService.getWarnGroupCount();
        return R.ok(warnGroupCount);
    }
    
    @GetMapping("/getWarnGroupCountTop10")
    @ApiOperation(value = "获取预警排行榜前10", tags = {"首页"})
    public R<List<Map<String, Object>>> getWarnGroupCountTop10() {
        List<Map<String, Object>> warnGroupCountTop10 = warnService.getWarnGroupCountTop10();
        return R.ok(warnGroupCountTop10);
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WarnMapper.java
@@ -27,10 +27,20 @@
    PageInfo<CarWarnListResp> getCarWarnList(PageInfo<CarWarnListResp> pageInfo, @Param("item") CarWarnListReq carWarnListReq);
    
    
    List<Map<String, Object>> getWarnGroup10Count();
    /**
     * 获取预警汇总统计最高的10类报警数据
     *
     * @return
     */
    List<Map<String, Object>> getWarnGroupCount();
    List<Map<String, Object>> getWarnGroupCount(@Param("collect") List<String> collect);
    /**
     * 获取预警汇总前10排行榜
     *
     * @return
     */
    List<Map<String, Object>> getWarnGroupCountTop10();
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICarService.java
@@ -26,4 +26,9 @@
     * @return
     */
    PageInfo<CarListResp> getCarList(CarListReq carListReq);
    /**
     * 定时任务修改车辆状态
     */
    void taskUpdateCarStatus();
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderService.java
@@ -11,9 +11,15 @@
 */
public interface IOrderService extends IService<Order> {
    
    /**
     * 存储新订单数据
     */
    void taskSaveNewOrder();
    
    /**
     * 获取订单列表
     *
     * @param req
     * @return
     */
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IWarnService.java
@@ -17,6 +17,12 @@
    
    
    /**
     * 存储新的报警数据
     */
    void taskSaveNewWarn();
    /**
     * 获取车辆预警列表
     *
     * @param carWarnListReq
@@ -31,4 +37,12 @@
     * @return
     */
    List<Map<String, Object>> getWarnGroupCount();
    /**
     * 获取预警汇总前10排行榜
     *
     * @return
     */
    List<Map<String, Object>> getWarnGroupCountTop10();
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CarServiceImpl.java
@@ -5,22 +5,29 @@
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.dataInterchange.api.feignClient.UPExgMsgRegisterClient;
import com.ruoyi.dataInterchange.api.model.enums.VehicleColorEnum;
import com.ruoyi.dataInterchange.api.vo.GnssDataVo;
import com.ruoyi.dataInterchange.api.vo.UPExgMsgRegisterVo;
import com.ruoyi.system.api.model.Car;
import com.ruoyi.system.api.model.CarType;
import com.ruoyi.system.api.model.Driver;
import com.ruoyi.system.api.model.Enterprise;
import com.ruoyi.system.mapper.CarMapper;
import com.ruoyi.system.query.CarListReq;
import com.ruoyi.system.query.CarListResp;
import com.ruoyi.system.service.ICarService;
import com.ruoyi.system.service.ICarTypeService;
import com.ruoyi.system.service.IDriverService;
import com.ruoyi.system.service.IEnterpriseService;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
 * @author zhibing.pu
@@ -38,6 +45,12 @@
    @Resource
    private IDriverService driverService;
    
    @Resource
    private ICarTypeService carTypeService;
    @Resource
    private RedisTemplate redisTemplate;
    
    /**
     * 定时任务存储最新的车辆数据
@@ -54,6 +67,7 @@
            return;
        }
        List<Enterprise> list1 = enterpriseService.list();
        List<Driver> driverList = driverService.list(new LambdaQueryWrapper<Driver>().eq(Driver::getStatus, 1));
        List<Car> carList = new ArrayList<>();
        for (UPExgMsgRegisterVo vo : list) {
            car = new Car();
@@ -61,15 +75,29 @@
            car.setLicensePlateColor(VehicleColorEnum.getName(vo.getVehicleColor()));
            Enterprise enterprise = list1.stream().filter(s -> s.getCode().equals(vo.getInferiorPlatformId().toString())).findFirst().get();
            car.setEnterpriseId(enterprise.getId());
            Driver driver = driverService.getOne(new LambdaQueryWrapper<Driver>().eq(Driver::getVehicleNumber, vo.getVehicleNo()).eq(Driver::getStatus, 1));
            if (null != driver) {
                car.setDriverId(driver.getId());
            car.setOperateType(enterprise.getOperationType());
            Optional<Driver> optional = driverList.stream().filter(s -> s.getVehicleNumber().equals(vo.getVehicleNo())).findFirst();
            if (optional.isPresent()) {
                car.setDriverId(optional.get().getId());
            }
            car.setGpsModel(vo.getTerminalModelType());
            car.setGpsImei(vo.getTerminalSIMCode());
            car.setLongitude(vo.getLongitude());
            car.setLatitude(vo.getLatitude());
            car.setCreateTime(LocalDateTime.now());
            carList.add(car);
        }
        this.saveBatch(carList);
        if (carList.size() > 0) {
            this.saveBatch(carList);
            //更新车辆类型统计数据
            List<CarType> carTypeList = carTypeService.list();
            List<Car> cars = this.list();
            for (CarType carType : carTypeList) {
                long count = cars.stream().filter(s -> s.getOperateType().equals(carType.getName())).count();
                carType.setCarNum(count);
            }
            carTypeService.updateBatchById(carTypeList);
        }
    }
    
    
@@ -84,4 +112,31 @@
        PageInfo<CarListResp> pageInfo = new PageInfo<>(carListReq.getPageCurr(), carListReq.getPageSize());
        return this.baseMapper.getCarList(pageInfo, carListReq);
    }
    /**
     * 定时任务修改车辆状态
     */
    @Override
    public void taskUpdateCarStatus() {
        List<Car> list = this.list();
        for (Car car : list) {
            GnssDataVo gnssDataVo = (GnssDataVo) redisTemplate.opsForValue().get("location:" + car.getVehicleNumber());
            if (null == gnssDataVo) {
                car.setStatus(1);
            } else {
                String dateTime = gnssDataVo.getDate() + " " + gnssDataVo.getTime();
                LocalDateTime localDateTime = LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
                long second = localDateTime.toEpochSecond(ZoneOffset.ofHours(8));
                if (System.currentTimeMillis() / 1000 > second + 60) {
                    car.setStatus(4);
                } else {
                    car.setStatus(1);
                }
            }
        }
        if (list.size() > 0) {
            this.updateBatchById(list);
        }
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DriverServiceImpl.java
@@ -65,9 +65,12 @@
            driver.setStatus(1);
            driver.setFlag(1);
            driver.setUpdateTime(LocalDateTime.now());
            driver.setVehicleNumber(vo.getVehicleNo());
            driverList.add(driver);
        }
        this.saveBatch(driverList);
        if (driverList.size() > 0) {
            this.saveBatch(driverList);
        }
    }
    
    
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java
@@ -1,12 +1,30 @@
package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.dataInterchange.api.feignClient.UPExgMsgTakeEwayBillAckClient;
import com.ruoyi.dataInterchange.api.vo.UPExgMsgTakeEwayBillAckVo;
import com.ruoyi.system.api.model.Car;
import com.ruoyi.system.api.model.Driver;
import com.ruoyi.system.api.model.Enterprise;
import com.ruoyi.system.api.model.Order;
import com.ruoyi.system.mapper.OrderMapper;
import com.ruoyi.system.query.OrderListReq;
import com.ruoyi.system.service.ICarService;
import com.ruoyi.system.service.IDriverService;
import com.ruoyi.system.service.IEnterpriseService;
import com.ruoyi.system.service.IOrderService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
@@ -16,9 +34,64 @@
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
    
    @Resource
    private UPExgMsgTakeEwayBillAckClient upExgMsgTakeEwayBillAckClient;
    @Resource
    private IEnterpriseService enterpriseService;
    @Resource
    private IDriverService driverService;
    @Resource
    private ICarService carService;
    /**
     * 存储新订单数据
     */
    @Override
    public void taskSaveNewOrder() {
        Order order = this.getOne(new LambdaQueryWrapper<Order>().orderByDesc(Order::getCreateTime).last(" limit 1"));
        Long createTime = -1L;
        if (null != order) {
            createTime = order.getCreateTime().toEpochSecond(ZoneOffset.ofHours(8));
        }
        List<UPExgMsgTakeEwayBillAckVo> list = upExgMsgTakeEwayBillAckClient.findByCreateTimeAfter(createTime).getData();
        if (null == list || list.isEmpty()) {
            return;
        }
        List<Enterprise> list1 = enterpriseService.list();
        List<Driver> driverList = driverService.list(new LambdaQueryWrapper<Driver>().eq(Driver::getStatus, 1));
        List<Car> carList = carService.list();
        List<Order> orders = new ArrayList<>();
        for (UPExgMsgTakeEwayBillAckVo vo : list) {
            order = new Order();
            Optional<Car> carOptional = carList.stream().filter(s -> s.getVehicleNumber().equals(vo.getVehicleNo())).findFirst();
            if (carOptional.isPresent()) {
                order.setCarId(carOptional.get().getId());
            }
            Optional<Driver> optional = driverList.stream().filter(s -> s.getVehicleNumber().equals(vo.getVehicleNo())).findFirst();
            if (optional.isPresent()) {
                order.setDriverId(optional.get().getId());
            }
            Enterprise enterprise = list1.stream().filter(s -> s.getCode().equals(vo.getInferiorPlatformId().toString())).findFirst().get();
            order.setEnterpriseId(enterprise.getId());
            order.setOrderTime(LocalDateTime.ofInstant(Instant.ofEpochMilli(vo.getCreateTime() * 1000), ZoneOffset.ofHours(8)).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            order.setCreateTime(LocalDateTime.now());
            orders.add(order);
        }
        if (orders.size() > 0) {
            this.saveBatch(orders);
        }
    }
    
    /**
     * 获取订单列表
     *
     * @param req
     * @return
     */
@@ -28,6 +101,6 @@
        PageInfo<Order> pageInfo = new PageInfo<>(req.getPageCurr(), req.getPageSize());
        return this.baseMapper.getOrderList(pageInfo, req);
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WarnServiceImpl.java
@@ -1,16 +1,35 @@
package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.dataInterchange.api.feignClient.UPWarnMsgAdptInfoClient;
import com.ruoyi.dataInterchange.api.model.enums.WarnType;
import com.ruoyi.dataInterchange.api.vo.UPWarnMsgAdptInfoVo;
import com.ruoyi.system.api.model.Car;
import com.ruoyi.system.api.model.Driver;
import com.ruoyi.system.api.model.Enterprise;
import com.ruoyi.system.api.model.Warn;
import com.ruoyi.system.mapper.WarnMapper;
import com.ruoyi.system.query.CarWarnListReq;
import com.ruoyi.system.query.CarWarnListResp;
import com.ruoyi.system.service.ICarService;
import com.ruoyi.system.service.IDriverService;
import com.ruoyi.system.service.IEnterpriseService;
import com.ruoyi.system.service.IWarnService;
import com.ruoyi.system.util.GDMapGeocodingUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
@@ -20,6 +39,84 @@
@Service
public class WarnServiceImpl extends ServiceImpl<WarnMapper, Warn> implements IWarnService {
    
    @Resource
    private UPWarnMsgAdptInfoClient upWarnMsgAdptInfoClient;
    @Resource
    private IEnterpriseService enterpriseService;
    @Resource
    private IDriverService driverService;
    @Resource
    private ICarService carService;
    /**
     * 存储新的报警数据
     */
    @Override
    public void taskSaveNewWarn() {
        Warn warn = this.getOne(new LambdaQueryWrapper<Warn>().orderByDesc(Warn::getCreateTime).last(" limit 1"));
        Long createTime = -1L;
        if (null != warn) {
            createTime = warn.getCreateTime().toEpochSecond(ZoneOffset.ofHours(8));
        }
        List<UPWarnMsgAdptInfoVo> list = upWarnMsgAdptInfoClient.findByCreateTimeAfter(createTime).getData();
        if (null == list || list.isEmpty()) {
            return;
        }
        List<Enterprise> list1 = enterpriseService.list();
        List<Driver> driverList = driverService.list(new LambdaQueryWrapper<Driver>().eq(Driver::getStatus, 1));
        List<Car> carList = carService.list();
        List<Warn> warns = new ArrayList<>();
        for (UPWarnMsgAdptInfoVo vo : list) {
            warn = new Warn();
            Optional<Car> carOptional = carList.stream().filter(s -> s.getVehicleNumber().equals(vo.getVehicleNo())).findFirst();
            if (carOptional.isPresent()) {
                warn.setCarId(carOptional.get().getId());
            }
            Optional<Driver> optional = driverList.stream().filter(s -> s.getVehicleNumber().equals(vo.getVehicleNo())).findFirst();
            if (optional.isPresent()) {
                warn.setDriverId(optional.get().getId());
            }
            Enterprise enterprise = list1.stream().filter(s -> s.getCode().equals(vo.getInferiorPlatformId().toString())).findFirst().get();
            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.setWarnNumber(1);
            warn.setSpeed(new BigDecimal(vo.getSpeed()));
            warn.setLongitude(Double.valueOf(vo.getLongitude()).toString());
            warn.setLatitude(Double.valueOf(vo.getLatitude()).toString());
            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("处理中");
                    break;
                case 0x01:
                    warn.setTreatmentState("已处理完毕");
                    break;
                case 0x02:
                    warn.setTreatmentState("不作处理");
                    break;
                case 0x03:
                    warn.setTreatmentState("将来处理");
                    break;
            }
            warn.setCreateTime(LocalDateTime.now());
            warns.add(warn);
        }
        if (warns.size() > 0) {
            this.saveBatch(warns);
        }
    }
    
    /**
     * 获取车辆预警
@@ -41,6 +138,24 @@
     */
    @Override
    public List<Map<String, Object>> getWarnGroupCount() {
        return this.baseMapper.getWarnGroupCount();
        List<Map<String, Object>> list = this.baseMapper.getWarnGroup10Count();
        List<String> collect = new ArrayList<>();
        for (Map<String, Object> map : list) {
            collect.add(map.get("warnType").toString());
        }
        List<Map<String, Object>> warnGroupCount = this.baseMapper.getWarnGroupCount(collect);
        list.addAll(warnGroupCount);
        return list;
    }
    /**
     * 获取预警汇总前10排行榜
     *
     * @return
     */
    @Override
    public List<Map<String, Object>> getWarnGroupCountTop10() {
        return this.baseMapper.getWarnGroupCountTop10();
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/TaskUtil.java
@@ -2,6 +2,8 @@
import com.ruoyi.system.service.ICarService;
import com.ruoyi.system.service.IDriverService;
import com.ruoyi.system.service.IOrderService;
import com.ruoyi.system.service.IWarnService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -20,6 +22,12 @@
    @Resource
    private IDriverService driverService;
    
    @Resource
    private IWarnService warnService;
    @Resource
    private IOrderService orderService;
    
    /**
     * 定时任务获取新车辆数据
@@ -37,4 +45,32 @@
    public void taskSaveNewDriver() {
        driverService.taskSaveNewDriver();
    }
    /**
     * 定时任务获取新报警数据
     */
    @Scheduled(fixedRate = 1000 * 60)
    public void taskSaveNewWarn() {
        warnService.taskSaveNewWarn();
    }
    /**
     * 定时任务获取新订单数据
     */
    @Scheduled(fixedRate = 1000 * 60)
    public void taskSaveNewOrder() {
        orderService.taskSaveNewOrder();
    }
    /**
     * 定时任务修改车辆状态
     */
    @Scheduled(fixedRate = 1000 * 60 * 5)
    public void taskUpdateCarStatus() {
        carService.taskUpdateCarStatus();
    }
}
ruoyi-modules/ruoyi-system/src/main/resources/logback.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 日志存放路径 -->
    <property name="log.path" value="/mnt/app/ruoyi-system" />
    <property name="log.path" value="E:/VehicleSupervisionPlatform/app/logs/ruoyi-system" />
   <!-- 日志输出格式 -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
ruoyi-modules/ruoyi-system/src/main/resources/mapping/system/WarnMapper.xml
@@ -51,7 +51,27 @@
    </select>
    
    
    <select id="getWarnGroupCount" resultType="map">
    <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
        order by aa.num desc limit 10
    </select>
    
    <select id="getWarnGroupCount" resultType="map">
        select COUNT(1) as num, "其他" as warnType from t_warn where warn_type not in
        <foreach collection="collect" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>
    <select id="getWarnGroupCountTop10" resultType="map">
        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
        order by aa.num desc limit 10
    </select>
</mapper>
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/controller/UPExgMsgRegisterController.java
@@ -3,7 +3,10 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.dataInterchange.api.vo.UPExgMsgRegisterVo;
import com.ruoyi.dataInterchange.dao.UPExgMsgRealLocationDao;
import com.ruoyi.dataInterchange.dao.UPExgMsgRegisterDao;
import com.ruoyi.dataInterchange.model.GnssData;
import com.ruoyi.dataInterchange.model.UPExgMsgRealLocation;
import com.ruoyi.dataInterchange.model.UPExgMsgRegister;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -26,6 +29,9 @@
    @Resource
    private UPExgMsgRegisterDao upExgMsgRegisterDao;
    
    @Resource
    private UPExgMsgRealLocationDao upExgMsgRealLocationDao;
    
    /**
     * 查询添加时间大于等于给定时间的车辆基础数据
@@ -42,6 +48,12 @@
                UPExgMsgRegister register = iterator.next();
                UPExgMsgRegisterVo vo = new UPExgMsgRegisterVo();
                BeanUtils.copyProperties(register, vo);
                UPExgMsgRealLocation realLocation = upExgMsgRealLocationDao.findByVehicleNoOrderByCreateTimeDesc(register.getVehicleNo());
                if (null != realLocation) {
                    GnssData gnssData = realLocation.getGnssData();
                    vo.setLongitude(Double.valueOf(gnssData.getLon() / 1000000).toString());
                    vo.setLatitude(Double.valueOf(gnssData.getLat() / 1000000).toString());
                }
                voList.add(vo);
            }
            
@@ -50,6 +62,12 @@
            for (UPExgMsgRegister register : list) {
                UPExgMsgRegisterVo vo = new UPExgMsgRegisterVo();
                BeanUtils.copyProperties(register, vo);
                UPExgMsgRealLocation realLocation = upExgMsgRealLocationDao.findByVehicleNoOrderByCreateTimeDesc(register.getVehicleNo());
                if (null != realLocation) {
                    GnssData gnssData = realLocation.getGnssData();
                    vo.setLongitude(Double.valueOf(gnssData.getLon() / 1000000).toString());
                    vo.setLatitude(Double.valueOf(gnssData.getLat() / 1000000).toString());
                }
                voList.add(vo);
            }
        }
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/controller/UPExgMsgTakeEwayBillAckController.java
New file
@@ -0,0 +1,58 @@
package com.ruoyi.dataInterchange.controller;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.dataInterchange.api.vo.UPExgMsgTakeEwayBillAckVo;
import com.ruoyi.dataInterchange.dao.UPExgMsgTakeEwayBillAckDao;
import com.ruoyi.dataInterchange.model.UPExgMsgTakeEwayBillAck;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2025/4/2 11:36
 */
@RestController
@RequestMapping("/exgMsgTakeEwayBillAck")
public class UPExgMsgTakeEwayBillAckController {
    @Resource
    private UPExgMsgTakeEwayBillAckDao upExgMsgTakeEwayBillAckDao;
    /**
     * 获取大于给定日期的数据
     *
     * @param createTime
     * @return
     */
    @PostMapping("/findByCreateTimeAfter")
    public R<List<UPExgMsgTakeEwayBillAckVo>> findByCreateTimeAfter(@RequestParam("createTime") Long createTime) {
        List<UPExgMsgTakeEwayBillAckVo> list = new ArrayList<>();
        if (-1 == createTime) {
            Iterator<UPExgMsgTakeEwayBillAck> iterator = upExgMsgTakeEwayBillAckDao.findAll().iterator();
            if (iterator.hasNext()) {
                UPExgMsgTakeEwayBillAck takeEwayBillAck = iterator.next();
                UPExgMsgTakeEwayBillAckVo vo = new UPExgMsgTakeEwayBillAckVo();
                BeanUtils.copyProperties(takeEwayBillAck, vo);
                list.add(vo);
            }
        } else {
            List<UPExgMsgTakeEwayBillAck> takeEwayBillAcks = upExgMsgTakeEwayBillAckDao.findByCreateTimeAfter(createTime);
            for (UPExgMsgTakeEwayBillAck takeEwayBillAck : takeEwayBillAcks) {
                UPExgMsgTakeEwayBillAckVo vo = new UPExgMsgTakeEwayBillAckVo();
                BeanUtils.copyProperties(takeEwayBillAck, vo);
                list.add(vo);
            }
        }
        return R.ok(list);
    }
}
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/controller/UPWarnMsgAdptInfoController.java
New file
@@ -0,0 +1,74 @@
package com.ruoyi.dataInterchange.controller;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.dataInterchange.api.vo.UPWarnMsgAdptInfoVo;
import com.ruoyi.dataInterchange.dao.UPWarnMsgAdptInfoDao;
import com.ruoyi.dataInterchange.dao.UPWarnMsgUrgeTodoAckDao;
import com.ruoyi.dataInterchange.model.UPWarnMsgAdptInfo;
import com.ruoyi.dataInterchange.model.UPWarnMsgUrgeTodoAck;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
 * 报警信息控制器
 *
 * @author zhibing.pu
 * @Date 2025/4/2 10:08
 */
@RestController
@RequestMapping("/warnMsgAdptInfo")
public class UPWarnMsgAdptInfoController {
    @Resource
    private UPWarnMsgAdptInfoDao upWarnMsgAdptInfoDao;
    @Resource
    private UPWarnMsgUrgeTodoAckDao upWarnMsgUrgeTodoAckDao;
    /**
     * 查询大于给定日期的所有报警数据
     *
     * @param createTime
     * @return
     */
    @PostMapping("/findByCreateTimeAfter")
    public R<List<UPWarnMsgAdptInfoVo>> findByCreateTimeAfter(@RequestParam("createTime") Long createTime) {
        if (-1 == createTime) {
            Iterator<UPWarnMsgAdptInfo> iterator = upWarnMsgAdptInfoDao.findAll().iterator();
            List<UPWarnMsgAdptInfoVo> list = new ArrayList<>();
            while (iterator.hasNext()) {
                UPWarnMsgAdptInfo upWarnMsgAdptInfo = iterator.next();
                UPWarnMsgAdptInfoVo vo = new UPWarnMsgAdptInfoVo();
                BeanUtils.copyProperties(upWarnMsgAdptInfo, vo);
                UPWarnMsgUrgeTodoAck warnMsgUrgeTodoAck = upWarnMsgUrgeTodoAckDao.findBySupervisionId(upWarnMsgAdptInfo.getInfoId());
                if (null != warnMsgUrgeTodoAck) {
                    vo.setResult(warnMsgUrgeTodoAck.getResult());
                }
                list.add(vo);
            }
            return R.ok(list);
        } else {
            List<UPWarnMsgAdptInfo> adptInfoList = upWarnMsgAdptInfoDao.findByCreateTimeAfter(createTime);
            List<UPWarnMsgAdptInfoVo> list = new ArrayList<>();
            for (UPWarnMsgAdptInfo upWarnMsgAdptInfo : adptInfoList) {
                UPWarnMsgAdptInfoVo vo = new UPWarnMsgAdptInfoVo();
                BeanUtils.copyProperties(upWarnMsgAdptInfo, vo);
                UPWarnMsgUrgeTodoAck warnMsgUrgeTodoAck = upWarnMsgUrgeTodoAckDao.findBySupervisionId(upWarnMsgAdptInfo.getInfoId());
                if (null != warnMsgUrgeTodoAck) {
                    vo.setResult(warnMsgUrgeTodoAck.getResult());
                }
                list.add(vo);
            }
            return R.ok(list);
        }
    }
}
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPExgMsgTakeEwayBillAckDao.java
@@ -4,6 +4,8 @@
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2025/3/7 17:18
@@ -13,4 +15,13 @@
    
    
    UPExgMsgTakeEwayBillAck findByVehicleNo(String vehicleNo);
    /**
     * 查询大于给定时间的所有数据
     *
     * @param createTime
     * @return
     */
    List<UPExgMsgTakeEwayBillAck> findByCreateTimeAfter(Long createTime);
}
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgAdptInfoDao.java
@@ -22,4 +22,13 @@
     */
    List<UPWarnMsgAdptInfo> findByResultIsAndPushTimeBefore(int result, long pushTime);
    
    /**
     * 查询大于给定时间的所有数据
     *
     * @param createTime
     * @return
     */
    List<UPWarnMsgAdptInfo> findByCreateTimeAfter(Long createTime);
}
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/dao/UPWarnMsgUrgeTodoAckDao.java
@@ -10,4 +10,13 @@
 */
@Repository
public interface UPWarnMsgUrgeTodoAckDao extends ElasticsearchRepository<UPWarnMsgUrgeTodoAck, String> {
    /**
     * 根据报警督办id查询处理结果
     *
     * @param supervisionId
     * @return
     */
    UPWarnMsgUrgeTodoAck findBySupervisionId(Integer supervisionId);
}
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/model/UPWarnMsgAdptInfo.java
@@ -83,6 +83,21 @@
    @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:处理中
     * 0x01:已处理完毕
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/ExgMsgService.java
@@ -1,6 +1,7 @@
package com.ruoyi.dataInterchange.server;
import com.alibaba.fastjson.JSON;
import com.ruoyi.dataInterchange.api.vo.GnssDataVo;
import com.ruoyi.dataInterchange.dao.*;
import com.ruoyi.dataInterchange.model.*;
import com.ruoyi.dataInterchange.model.enu.DataType;
@@ -12,6 +13,7 @@
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
@@ -19,6 +21,7 @@
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Iterator;
import java.util.List;
/**
 * @author zhibing.pu
@@ -194,6 +197,10 @@
        upExgMsgRealLocation.setInferiorPlatformId(inferiorPlatformId);
        upExgMsgRealLocation.setCreateTime(LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8)));
        upExgMsgRealLocationDao.save(upExgMsgRealLocation);
        //修改车辆实时定位
        GnssDataVo vo = new GnssDataVo();
        BeanUtils.copyProperties(upExgMsgRealLocation.getGnssData(), vo);
        redisTemplate.opsForValue().set("location:" + upExgMsgRealLocation.getVehicleNo(), vo);
    }
    
    
@@ -248,6 +255,19 @@
        upExgMsgHistoryLocation.setInferiorPlatformId(inferiorPlatformId);
        upExgMsgHistoryLocation.setCreateTime(LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8)));
        upExgMsgHistoryLocationDao.save(upExgMsgHistoryLocation);
        //将数据存储实时定位数据表中
        List<GnssData> gnssData = upExgMsgHistoryLocation.getGnssData();
        for (GnssData gnssDatum : gnssData) {
            UPExgMsgRealLocation upExgMsgRealLocation = new UPExgMsgRealLocation();
            upExgMsgRealLocation.setVehicleNo(upExgMsgHistoryLocation.getVehicleNo());
            upExgMsgRealLocation.setVehicleColor(upExgMsgHistoryLocation.getVehicleColor());
            upExgMsgRealLocation.setInferiorPlatformId(inferiorPlatformId);
            upExgMsgRealLocation.setDataType(DataType.UP_EXG_MSG_REAL_LOCATION.getCode());
            upExgMsgRealLocation.setGnssData(gnssDatum);
            upExgMsgRealLocation.setCreateTime(LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8)));
            upExgMsgRealLocationDao.save(upExgMsgRealLocation);
        }
    }
    
    
ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/server/WarnMsgService.java
@@ -1,12 +1,10 @@
package com.ruoyi.dataInterchange.server;
import com.alibaba.fastjson.JSON;
import com.ruoyi.dataInterchange.dao.UPExgMsgRealLocationDao;
import com.ruoyi.dataInterchange.dao.UPWarnMsgAdptInfoDao;
import com.ruoyi.dataInterchange.dao.UPWarnMsgUrgeTodoAckDao;
import com.ruoyi.dataInterchange.model.DOWNWarnMsgUrgeTodoReq;
import com.ruoyi.dataInterchange.model.UPWarnMsgAdptInfo;
import com.ruoyi.dataInterchange.model.UPWarnMsgUrgeTodoAck;
import com.ruoyi.dataInterchange.model.WarnMsg;
import com.ruoyi.dataInterchange.model.*;
import com.ruoyi.dataInterchange.model.enu.DataType;
import com.ruoyi.dataInterchange.netty.client.ChannelMap;
import com.ruoyi.dataInterchange.util.jtt809.common.Jtt809Util;
@@ -43,6 +41,9 @@
    
    @Resource
    private RedisTemplate redisTemplate;
    @Resource
    private UPExgMsgRealLocationDao upExgMsgRealLocationDao;
    
    
    public void up_warn_msg(ChannelHandlerContext ctx, OuterPacket out) {
@@ -124,6 +125,13 @@
        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());
        }
        upWarnMsgAdptInfoDao.save(upWarnMsgAdptInfo);
    }
    
ruoyi-service/ruoyi-dataInterchange/src/main/resources/logback.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 日志存放路径 -->
    <property name="log.path" value="/mnt/app/ruoyi-order" />
    <property name="log.path" value="E:/VehicleSupervisionPlatform/app/logs/ruoyi-order" />
   <!-- 日志输出格式 -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />