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
@@ -2,3 +2,6 @@ com.ruoyi.dataInterchange.api.factory.UPExgMsgReportDriverInfoClientFallbackFactory com.ruoyi.dataInterchange.api.factory.RealVideoMsgClientFallbackFactory 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); } 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,10 +65,13 @@ driver.setStatus(1); driver.setFlag(1); driver.setUpdateTime(LocalDateTime.now()); driver.setVehicleNumber(vo.getVehicleNo()); driverList.add(driver); } 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 */ 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" />