Administrator
2023-08-17 20439bc0fa1ff714ed5f61e711272deebb76e2c9
Merge remote-tracking branch 'origin/master'
已添加2个文件
已修改9个文件
392 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/app/position/service/IArdAppPositionService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/service/IArdCamerasService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/scheduling/controller/SchedulingController.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/scheduling/domian/SchedulingParam.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java 160 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/logback.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
@@ -46,8 +46,7 @@
    private IArdAppPositionService ardAppPositionService;
    @Autowired
    private ISysUserService sysUserService;
    @Autowired
    private RongCloudService rongCloudService;
    /**
     * æŸ¥è¯¢app位置列表
ard-work/src/main/java/com/ruoyi/app/position/service/IArdAppPositionService.java
@@ -2,6 +2,8 @@
import java.util.List;
import com.ruoyi.app.position.domain.ArdAppPosition;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.scheduling.domian.SchedulingParam;
/**
@@ -65,4 +67,10 @@
     * @return ç»“æžœ
     */
    public int deleteArdAppPositionById(String id);
    /**
     * èŽ·å–å°æŽ§åœˆå†…æ‰€æœ‰åœ¨çº¿app用户
     * åˆ˜è‹ä¹‰
     * 2023/8/17 13:56:36
     */
    public List<SysUser>getNearAppUsers(SchedulingParam param);
}
ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
@@ -3,12 +3,17 @@
import com.ruoyi.app.position.domain.ArdAppPosition;
import com.ruoyi.app.position.mapper.ArdAppPositionMapper;
import com.ruoyi.app.position.service.IArdAppPositionService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.scheduling.domian.SchedulingParam;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.utils.tools.GisTool;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
@@ -17,6 +22,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -26,10 +32,12 @@
 * @date 2023-07-18
 */
@Service
@Slf4j
public class ArdAppPositionServiceImpl implements IArdAppPositionService {
    @Resource
    private ArdAppPositionMapper ardAppPositionMapper;
    @Resource
    private ISysUserService iSysUserService;
    /**
     * æŸ¥è¯¢app位置
@@ -41,6 +49,7 @@
    public ArdAppPosition selectArdAppPositionById(String id) {
        return ardAppPositionMapper.selectArdAppPositionById(id);
    }
    /**
     * æŒ‰ç”¨æˆ·id查询最后的位置信息
     *
@@ -51,6 +60,7 @@
    public ArdAppPosition selectLastArdAppPositionByUserId(String userId){
        return ardAppPositionMapper.selectLastArdAppPositionByUserId(userId);
    }
    /**
     * æŸ¥è¯¢app位置列表
     *
@@ -108,4 +118,50 @@
        return ardAppPositionMapper.deleteArdAppPositionById(id);
    }
    /**
     * èŽ·å–å°æŽ§åœˆå†…æ‰€æœ‰åœ¨çº¿app用户
     * åˆ˜è‹ä¹‰
     * 2023/8/17 13:56:36
     */
    @Override
    public List<SysUser> getNearAppUsers(SchedulingParam param) {
        Double longitude = param.getLongitude();
        Double latitude = param.getLatitude();
        if (longitude == null && latitude == null) {
            log.debug("原点坐标为空");
            return null;
        }
        Integer radius = param.getSealingRadius();
        if (radius == null) {
            log.debug("半径距离为空");
            return null;
        }
        SysUser user = new SysUser();
        List<SysUser> appUserList = iSysUserService.selectAllAppUserList(user);
        //过滤在线
        List<SysUser> onLineList = appUserList.stream()
                .filter(sysUser -> (sysUser.getAppOnlineState().equals("1")))
                .collect(Collectors.toList());
        //过滤范围
        List<SysUser> filteredList = new ArrayList<>();
        for(SysUser sysUser:onLineList) {
            ArdAppPosition ardAppPosition = ardAppPositionMapper.selectLastArdAppPositionByUserId(sysUser.getUserId());
            if (ardAppPosition != null) {
                Double lon = ardAppPosition.getLongitude();
                Double lat = ardAppPosition.getLatitude();
                if(longitude==null||latitude==null)
                {
                    continue;
                }
                double distance = GisTool.getDistance(new double[]{ longitude, latitude}, new double[]{ lon, lat});
                if (distance <= radius) {
                    filteredList.add(sysUser); // å°†æ»¡è¶³æ¡ä»¶çš„用户添加到筛选列表中
                }
            }
        }
        return filteredList;
    }
}
ard-work/src/main/java/com/ruoyi/device/camera/service/IArdCamerasService.java
@@ -7,6 +7,7 @@
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.scheduling.domian.SchedulingParam;
/**
 * ç›¸æœºè®¾å¤‡Service接口
@@ -83,4 +84,11 @@
    public TreeMap getNearCamerasBycoordinate(CameraCmd cmd);
    /**
     * èŽ·å–ç›‘æŽ§åœˆå†…æ‰€æœ‰åœ¨çº¿å…‰ç”µ
     * åˆ˜è‹ä¹‰
     * 2023/8/17 13:56:36
     */
    List<ArdCameras> getNearCameras(SchedulingParam param);
}
ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
@@ -2,6 +2,7 @@
import java.time.LocalTime;
import java.util.*;
import java.util.stream.Collectors;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.domain.entity.SysDept;
@@ -11,6 +12,7 @@
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
import com.ruoyi.scheduling.domian.SchedulingParam;
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.utils.tools.ArdTool;
import com.ruoyi.device.camera.domain.ArdCameras;
@@ -19,6 +21,7 @@
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.utils.tools.GisTool;
import com.sun.org.apache.bcel.internal.generic.NEW;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -137,10 +140,8 @@
    @Override
    public int deleteArdCamerasByIds(String[] ids) {
        int res = ardCamerasMapper.deleteArdCamerasByIds(ids);
        if(res>0)
        {
            for(String id:ids)
            {
        if (res > 0) {
            for (String id : ids) {
                redisCache.deleteObject(getCacheKey(id));
            }
        }
@@ -260,5 +261,50 @@
        return null;
    }
    /**
     * èŽ·å–ç›‘æŽ§åœˆå†…æ‰€æœ‰åœ¨çº¿å…‰ç”µ
     * åˆ˜è‹ä¹‰
     * 2023/8/17 13:57:21
     */
    @Override
    public List<ArdCameras> getNearCameras(SchedulingParam param) {
        try {
            Double longitude = param.getLongitude();
            Double latitude = param.getLatitude();
            if (longitude == null && latitude == null) {
                log.debug("原点坐标为空");
                return null;
            }
            Integer radius = param.getMonitoringRadius();
            if (radius == null) {
                log.debug("监控圈半径距离为空");
                return null;
            }
            String dayNightTime = redisCache.getCacheObject("sys_config:dayNightTime");
            //获取所有光电
            List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(new ArdCameras());
            //统计所有光电可视范围内与报警点的距离
            List<ArdCameras> ardCameras = new ArrayList<>();
            for (ArdCameras camera : ardCamerasList) {
                if (camera.getLongitude() == null && camera.getLatitude() == null) {
                    continue;
                }
                double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
                double distance = GisTool.getDistance(new double[]{longitude, latitude}, camPosition);
                if (distance <= radius) {
                    camera.setChannel(ArdTool.getChannelBydayNightTime(dayNightTime));
                    ardCameras.add(camera);
                }
            }
            //过滤在线相机
            List<ArdCameras> onlineList = ardCameras.stream()
                    .filter(ardCamera -> (!ardCamera.getLoginId().equals(-1)))
                    .collect(Collectors.toList());
            return onlineList;
        } catch (Exception ex) {
            log.error("获取附近相机异常:" + ex.getMessage());
        }
        return null;
    }
}
ard-work/src/main/java/com/ruoyi/scheduling/controller/SchedulingController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.ruoyi.scheduling.controller;
import com.ruoyi.app.position.service.IArdAppPositionService;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.service.IArdCamerasService;
import com.ruoyi.scheduling.domian.SchedulingParam;
import com.ruoyi.sy.service.IArdSyCarService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @Description:
 * @ClassName: SchedulingController
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´08月17日11:05:59
 * @Version: 1.0
 **/
@RestController
@RequestMapping("/scheduling")
@Api(tags = "一键调度")
public class SchedulingController {
    @Resource
    IArdSyCarService iArdSyCarService;
    @Resource
    IArdCamerasService iArdCamerasService;
    @Resource
    IArdAppPositionService iArdAppPositionService;
    @GetMapping("/getNearVehiPersonCam")
    @ApiOperation("获取附近的车人相机")
    AjaxResult getNearVehiPersonCam(SchedulingParam param) {
        Map<String, Object> nearMap = new HashMap<>();
        List<Map<String, Object>> Cars = iArdSyCarService.getNearCar(param);
        nearMap.put("car", Cars);
        List<ArdCameras> Cameras = iArdCamerasService.getNearCameras(param);
        nearMap.put("camera", Cameras);
        List<SysUser> AppUsers = iArdAppPositionService.getNearAppUsers(param);
        nearMap.put("users", AppUsers);
        return AjaxResult.success(nearMap);
    }
}
ard-work/src/main/java/com/ruoyi/scheduling/domian/SchedulingParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.scheduling.domian;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Description:
 * @ClassName: RequestParam
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´08月17日13:16:25
 * @Version: 1.0
 **/
@Data
public class SchedulingParam {
    Integer sealingRadius;
    Integer monitoringRadius;
    Double longitude;
    Double latitude;
}
ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java
@@ -3,6 +3,7 @@
import java.util.List;
import java.util.Map;
import com.ruoyi.scheduling.domian.SchedulingParam;
import com.ruoyi.sy.domain.ArdSyCar;
import com.ruoyi.sy.domain.ArdSyUser;
import com.ruoyi.utils.result.Results;
@@ -134,5 +135,8 @@
     * æ ¹æ®æ—¶é—´åŠè½¦è¾†ä¸»é”®æŸ¥è¯¢è¯¥æœˆæ¯å¤©æ˜¯å¦æœ‰è½¨è¿¹
     */
    public Results getExistTraceByCarIdAndMonth(String userId,String carId,String time);
    /**
     * èŽ·å–é™„è¿‘èŒƒå›´å†…çš„è½¦è¾†ä¿¡æ¯
     * */
    List<Map<String, Object>> getNearCar(SchedulingParam param);
}
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
@@ -13,9 +13,13 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.scheduling.domian.SchedulingParam;
import com.ruoyi.sy.domain.ArdSyCarDay;
import com.ruoyi.sy.mapper.ArdSyCarDayMapper;
import com.ruoyi.utils.tools.GisTool;
import com.ruoyi.utils.websocket.util.WebSocketUtils;
import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
import com.ruoyi.storage.minio.utils.MinioUtils;
@@ -33,6 +37,7 @@
import io.minio.Result;
import io.minio.http.Method;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
@@ -55,6 +60,7 @@
 * @date 2023-06-26
 */
@Service
@Slf4j(topic = "sy")
public class ArdSyCarServiceImpl implements IArdSyCarService {
    @Resource
    private ArdSyCarMapper ardSyCarMapper;
@@ -70,7 +76,8 @@
    @Resource
    private SYClient sYClient;
    @Resource
    RedisCache redisCache;
    @Resource
    private ArdSyCarDayMapper ardSyCarDayMapper;
@@ -265,18 +272,42 @@
                    Map<String,String> map = new HashMap();
                    map.put("carModel","sycar/" + item.objectName());
                    switch(item.objectName()){
                        case "carmodel/aodi.glb":map.put("carType","奥迪");break;
                        case "carmodel/baolai.glb":map.put("carType","宝来");break;
                        case "carmodel/bieke.glb":map.put("carType","别克");break;
                        case "carmodel/bus1.glb":map.put("carType","大客车");break;
                        case "carmodel/car.glb":map.put("carType","小型车");break;
                        case "carmodel/fire(1).glb":map.put("carType","消防车");break;
                        case "carmodel/fute.glb":map.put("carType","福特");break;
                        case "carmodel/jingche_a.glb":map.put("carType","警车");break;
                        case "carmodel/jiuhu.glb":map.put("carType","救护车");break;
                        case "carmodel/oil.glb":map.put("carType","油罐车");break;
                        case "carmodel/truck.glb":map.put("carType","工程用车");break;
                        case "carmodel/van1.glb":map.put("carType","大货车");break;
                        case "carmodel/aodi.glb":
                            map.put("carType", "奥迪");
                            break;
                        case "carmodel/baolai.glb":
                            map.put("carType", "宝来");
                            break;
                        case "carmodel/bieke.glb":
                            map.put("carType", "别克");
                            break;
                        case "carmodel/bus1.glb":
                            map.put("carType", "大客车");
                            break;
                        case "carmodel/car.glb":
                            map.put("carType", "小型车");
                            break;
                        case "carmodel/fire(1).glb":
                            map.put("carType", "消防车");
                            break;
                        case "carmodel/fute.glb":
                            map.put("carType", "福特");
                            break;
                        case "carmodel/jingche_a.glb":
                            map.put("carType", "警车");
                            break;
                        case "carmodel/jiuhu.glb":
                            map.put("carType", "救护车");
                            break;
                        case "carmodel/oil.glb":
                            map.put("carType", "油罐车");
                            break;
                        case "carmodel/truck.glb":
                            map.put("carType", "工程用车");
                            break;
                        case "carmodel/van1.glb":
                            map.put("carType", "大货车");
                            break;
                        default:
                            break;
                    }
@@ -437,6 +468,7 @@
    /**
     * æ ¹æ®ç”¨æˆ·èŽ·å–ä¸‰ä¸€åˆ—è¡¨
     *
     * @return
     */
    @Override
@@ -522,31 +554,44 @@
            for(Map<String,String> m : list){
                switch (m.get("state")) {
                    case "1":
                        m.put("carState", "离线-从未报定位");break;
                        m.put("carState", "离线-从未报定位");
                        break;
                    case "2":
                        m.put("carState", "离线-欠费");break;
                        m.put("carState", "离线-欠费");
                        break;
                    case "3":
                        m.put("carState", "离线");break;
                        m.put("carState", "离线");
                        break;
                    case "4":
                        m.put("carState", "离线-报警");break;
                        m.put("carState", "离线-报警");
                        break;
                    case "5":
                        m.put("carState", "在线-从未报定位");break;
                        m.put("carState", "在线-从未报定位");
                        break;
                    case "6":
                        m.put("carState", "在线-欠费");break;
                        m.put("carState", "在线-欠费");
                        break;
                    case "7":
                        m.put("carState", "在线-行驶");break;
                        m.put("carState", "在线-行驶");
                        break;
                    case "8":
                        m.put("carState", "在线-行驶-报警");break;
                        m.put("carState", "在线-行驶-报警");
                        break;
                    case "9":
                        m.put("carState", "在线-停车-ACC关");break;
                        m.put("carState", "在线-停车-ACC关");
                        break;
                    case "10":
                        m.put("carState", "在线-停车-ACC开");break;
                        m.put("carState", "在线-停车-ACC开");
                        break;
                    case "11":
                        m.put("carState", "在线-停车-ACC关-报警");break;
                        m.put("carState", "在线-停车-ACC关-报警");
                        break;
                    case "12":
                        m.put("carState", "在线-停车-ACC开-报警");break;
                        m.put("carState", "在线-停车-ACC开-报警");
                        break;
                    case "13":
                        m.put("carState", "在线-无效定位");break;
                        m.put("carState", "在线-无效定位");
                        break;
                    default:
                        break;
                }
@@ -557,6 +602,7 @@
    /**
     * æ ¹æ®dept集合查询出所有对应的carId
     *
     * @param deptList
     * @return
     */
@@ -982,4 +1028,66 @@
            return new HashMap();
        }
    }
    /**
     * èŽ·å–é™„è¿‘èŒƒå›´å†…çš„è½¦è¾†ä¿¡æ¯
     */
    @Override
    public List<Map<String, Object>> getNearCar(SchedulingParam param) {
        Double longitude = param.getLongitude();
        Double latitude = param.getLatitude();
        Integer radius = param.getSealingRadius();
        if (longitude == null && latitude == null) {
            log.debug("原点坐标为空");
            return null;
        }
        if (radius == null) {
            log.debug("半径距离为空");
            return null;
        }
        String userId = SecurityUtils.getUserId();
        ArdSyUser syUser = new ArdSyUser();
        syUser.setSysUserId(userId);
        List<ArdSyUser> ardSyUserList = ardSyUserMapper.selectArdSyUserList(syUser);
        if (ardSyUserList.size() == 0) {
            log.debug("用户未挂接三一车辆");
            return null;
        }
        ArdSyUser ardSyUser = ardSyUserList.get(0);
        String syUrl = redisCache.getCacheObject("sys_config:syCarPT");
        String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
        Map<String, Object> LogInResult = sYClient.logIn(syUrl, passwordMd5, ardSyUser.getUserId());
        String sessionId = (String) LogInResult.get("sessionId");
        Map<String, Object> teamList = sYClient.getTeamList(syUrl, ardSyUser.getUserId(), sessionId);
        List<Map<String, Object>> listMap = (List<Map<String, Object>>) teamList.get("list");
        List<Map<String, Object>> allList = new ArrayList<>();
        for (Map<String, Object> team : listMap) {
            String teamId = (String) team.get("teamId");
            Map<String, Object> carListMap = sYClient.getCarList1(syUrl, teamId, ardSyUser.getUserId(), sessionId);
            if (((String) carListMap.get("rspCode")).equals("1")) {
                List<Map<String, Object>> list = (List<Map<String, Object>>) carListMap.get("list");
                allList.addAll(list);
            }
        }
        //过滤在线车辆
        List<Map<String, Object>> onlineList = allList.stream()
                .filter(map -> !"离线".equals(map.get("stateCn")))
                .collect(Collectors.toList());
        List<Map<String, Object>> filteredList = new ArrayList<>();
        //过滤半径
        for (Map<String, Object> carMap : onlineList) {
            String carId = (String) carMap.get("carId");
            Map<String, Object> carGPSTrack = sYClient.getCarNearPositionByCarId(syUrl, carId, ardSyUser.getUserId(), sessionId);
            List<Map<String, Object>> carGPSMap = (List<Map<String, Object>>) carGPSTrack.get("list");
            Double lng = Double.valueOf((String) carGPSMap.get(0).get("lng"));
            Double lat = Double.valueOf((String) carGPSMap.get(0).get("lat"));
            double distance = GisTool.getDistance( new double[]{longitude,latitude}, new double[]{lng, lat});
            if (distance <= radius) {
                filteredList.add(carMap); // å°†æ»¡è¶³æ¡ä»¶çš„车辆添加到筛选列表中
            }
        }
        return filteredList;
    }
}
ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
@@ -49,6 +49,7 @@
               c.altitude,
               c.user_id,
               c.dept_id,
               c.login_id,
               c.cam_heading,
               c.cam_pitch,
               c.cam_roll,
ruoyi-admin/src/main/resources/logback.xml
@@ -198,11 +198,25 @@
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!--无人机日志输出-->
    <appender name="uav" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/uav.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--按天回滚daily-->
            <fileNamePattern>${log.path}/uav.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--日志最大的历史60天-->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!--三一车辆日志输出-->
    <appender name="sy" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sy.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--按天回滚daily-->
            <fileNamePattern>${log.path}/sy.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--日志最大的历史60天-->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
@@ -268,7 +282,12 @@
    <logger name="cmd" level="INFO">
        <appender-ref ref="cmd"/>
    </logger>
    <!--无人机日志打印等级-->
    <logger name="uav" level="INFO">
        <appender-ref ref="uav"/>
    </logger>
    <!--三一车辆日志打印等级-->
    <logger name="sy" level="INFO">
        <appender-ref ref="sy"/>
    </logger>
</configuration>