‘liusuyi’
2023-08-25 63a661a78e1999423ea7d94277a645ed4b9e7e6d
优化minio工具类和其他工具类位置
优化派警管理列表分页问题
已添加2个文件
已重命名7个文件
已修改13个文件
已删除4个文件
987 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HCNetSDK.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HIKSDKStructure.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/GisUtil.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepComparator.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/scheduling/controller/SchedulingController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/scheduling/domian/SchedulingParam.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioConfig.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioService.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/gis/GisUtil.java 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/gis/Point.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/image/WaterMarkUtil.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/minio/MinioConfig.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/minio/MinioUtil.java 248 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/process/CmdUtils.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/tools/GisTool.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
@@ -34,8 +34,8 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.device.external.domain.ArdEquipExternal;
import com.ruoyi.device.external.mapper.ArdEquipExternalMapper;
import com.ruoyi.utils.gis.GisUtil;
import com.ruoyi.utils.tools.ArdTool;
import com.ruoyi.utils.tools.GisTool;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
@@ -49,7 +49,6 @@
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -748,7 +747,7 @@
                    continue;
                }
                double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
                double distance = GisTool.getDistance(targetPosition, camPosition);
                double distance = GisUtil.getDistance(targetPosition, camPosition);
                if (distance != 0.0 && distance <= camera.getCamMaxVisibleDistance()) {
                    distanceMap.put(camera.getId(), distance);
                    if (StringUtils.isNull(camera.getCamAlarmGuideEnable())) {
ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
@@ -7,9 +7,8 @@
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.storage.minio.utils.MinioUtils;
import com.ruoyi.rongcloud.service.RongCloudService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.utils.minio.MinioUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -46,8 +45,8 @@
    private IArdAppPositionService ardAppPositionService;
    @Autowired
    private ISysUserService sysUserService;
    @Autowired
    private MinioUtils minioUtil;
//    @Autowired
//    private MinioUtils minioUtil;
    /**
     * æŸ¥è¯¢app位置列表
@@ -201,7 +200,7 @@
    @ApiOperation("上传文件")
    public AjaxResult uploadFile(MultipartFile file,String type)
    {
        String url = minioUtil.putObjectAndGetUrl("app",type, file);
        String url = MinioUtil.putObjectAndGetUrl("app",type, file);
        return AjaxResult.success(url);
    }
}
ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
@@ -3,23 +3,18 @@
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 com.ruoyi.utils.tools.Point;
import com.ruoyi.utils.gis.GisUtil;
import com.ruoyi.utils.gis.Point;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -160,7 +155,7 @@
                    if (longitude == null || latitude == null) {
                        continue;
                    }
                    double distance = GisTool.getDistance(new double[]{longitude, latitude}, new double[]{lon, lat});
                    double distance = GisUtil.getDistance(new double[]{longitude, latitude}, new double[]{lon, lat});
                    if (distance <= radius) {
                        Map<String, Object> params = new HashMap<>();
                        params.put("longitude", lon);
@@ -205,7 +200,7 @@
                        continue;
                    }
                    Point point2D=new Point(lon,lat);
                    boolean inPolygon = GisTool.isInPolygon(point2D, partitionLocation);
                    boolean inPolygon = GisUtil.isInPolygon(point2D, partitionLocation);
                    if (inPolygon) {
                        Map<String, Object> params = new HashMap<>();
                        params.put("longitude", lon);
ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
@@ -13,14 +13,14 @@
import com.ruoyi.device.channel.domain.ArdChannel;
import com.ruoyi.device.channel.mapper.ArdChannelMapper;
import com.ruoyi.scheduling.domian.SchedulingParam;
import com.ruoyi.utils.gis.GisUtil;
import com.ruoyi.utils.tools.ArdTool;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
import com.ruoyi.device.camera.service.IArdCamerasService;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.utils.tools.GisTool;
import com.ruoyi.utils.tools.Point;
import com.ruoyi.utils.gis.Point;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -259,7 +259,7 @@
                    continue;
                }
                double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
                double distance = GisTool.getDistance(cmd.getTargetPosition(), camPosition);
                double distance = GisUtil.getDistance(cmd.getTargetPosition(), camPosition);
                if (camera.getCamMaxVisibleDistance() == null) {
                    continue;
                }
@@ -309,7 +309,7 @@
                    continue;
                }
                double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
                double distance = GisTool.getDistance(new double[]{longitude, latitude}, camPosition);
                double distance = GisUtil.getDistance(new double[]{longitude, latitude}, camPosition);
                if (distance <= radius) {
                    /*获取通道列表*/
                    ArdChannel ardChannel=new ArdChannel();
@@ -356,7 +356,7 @@
                }
                /*判断坐标是否在多边形范围内*/
                Point camPosition=new Point(camera.getLongitude(),camera.getLatitude());
                boolean inPolygon = GisTool.isInPolygon(camPosition, partitionLocation);
                boolean inPolygon = GisUtil.isInPolygon(camPosition, partitionLocation);
                if (inPolygon) {
                    /*获取通道列表*/
                    ArdChannel ardChannel=new ArdChannel();
ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HCNetSDK.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HCNetSDK.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.device.hiksdk.util.hikSdkUtil;
package com.ruoyi.device.hiksdk.sdk;
import com.sun.jna.*;
import com.sun.jna.examples.win32.W32API;
ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HIKSDKStructure.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HIKSDKStructure.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.device.hiksdk.util.hikSdkUtil;
package com.ruoyi.device.hiksdk.sdk;
import com.sun.jna.Structure;
ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.device.hiksdk.util.hikSdkUtil;
package com.ruoyi.device.hiksdk.sdk;
import com.ruoyi.alarm.global.domain.GuidePriorityQueue;
import com.ruoyi.alarm.global.domain.GuideTask;
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -9,11 +9,11 @@
import com.ruoyi.device.channel.domain.ArdChannel;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil;
import com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK;
import com.ruoyi.utils.gis.GisUtil;
import com.ruoyi.device.hiksdk.sdk.HCNetSDK;
import com.ruoyi.device.hiksdk.service.IHikClientService;
import com.ruoyi.device.hiksdk.util.hikSdkUtil.LoginResultCallBack;
import com.ruoyi.storage.minio.utils.MinioUtils;
import com.ruoyi.device.hiksdk.sdk.LoginResultCallBack;
import com.ruoyi.utils.minio.MinioUtil;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Platform;
@@ -29,10 +29,9 @@
import java.math.BigDecimal;
import java.nio.ByteBuffer;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import static com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK.*;
import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.*;
/**
 * @ClassName: hikClientServiceImpl
@@ -49,8 +48,6 @@
    private static String endpoint;
    @Resource
    private IArdCamerasService ardCamerasService;
    @Resource
    private MinioUtils minioUtil;
    private static HCNetSDK hCNetSDK;
@@ -1155,9 +1152,9 @@
            InputStream input = new ByteArrayInputStream(array);
            String url = "";
            try {
                boolean b = minioUtil.uploadObject(BucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG);
                boolean b = MinioUtil.uploadObject(BucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG);
                if (b) {
                    url = minioUtil.getBucketObjectUrl(BucketName, ObjectName);
                    url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName);
                    log.debug("上传文件成功!" + url);
                }
            } catch (IOException ex) {
@@ -1338,9 +1335,9 @@
            String BucketName = cmd.getRecordBucketName();
            String ObjectName = cmd.getRecordObjectName()+".mp4";
            FileInputStream stream = new FileInputStream(path);
            boolean b = minioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4");
            boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4");
            if (b) {
                url = minioUtil.getBucketObjectUrl(BucketName, ObjectName);
                url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName);
                log.debug("上传文件成功!" + url);
            }
            return url;
ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/GisUtil.java
ÎļþÒÑɾ³ý
ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepComparator.java
@@ -2,12 +2,8 @@
import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper;
import com.ruoyi.alarmpoints.well.service.IArdAlarmpointsWellService;
import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil;
import com.ruoyi.inspect.domain.ArdVideoInspectTask;
import com.ruoyi.utils.gis.GisUtil;
import com.ruoyi.inspect.domain.ArdVideoInspectTaskStep;
import com.ruoyi.inspect.service.IArdVideoInspectTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Comparator;
ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
@@ -6,21 +6,16 @@
import com.ruoyi.media.service.IMediaService;
import com.ruoyi.utils.forest.MediaClient;
import com.ruoyi.utils.tools.ArdTool;
import com.ruoyi.utils.tools.CmdUtils;
import com.ruoyi.utils.process.CmdUtils;
import com.sun.jna.Platform;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java
@@ -1,6 +1,6 @@
package com.ruoyi.media.service.impl;
import com.ruoyi.utils.tools.CmdUtils;
import com.ruoyi.utils.process.CmdUtils;
import com.sun.jna.Platform;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@@ -8,10 +8,7 @@
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
ard-work/src/main/java/com/ruoyi/scheduling/controller/SchedulingController.java
@@ -41,7 +41,6 @@
    @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);
ard-work/src/main/java/com/ruoyi/scheduling/domian/SchedulingParam.java
@@ -1,6 +1,6 @@
package com.ruoyi.scheduling.domian;
import com.ruoyi.utils.tools.Point;
import com.ruoyi.utils.gis.Point;
import lombok.Data;
import java.util.List;
ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioConfig.java
ÎļþÒÑɾ³ý
ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioService.java
ÎļþÒÑɾ³ý
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
@@ -17,13 +17,13 @@
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.utils.tools.Point;
import com.ruoyi.utils.gis.GisUtil;
import com.ruoyi.utils.gis.Point;
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.minio.MinioUtil;
import com.ruoyi.utils.websocket.util.WebSocketUtils;
import com.ruoyi.storage.minio.utils.MinioUtils;
import com.ruoyi.sy.domain.ArdSyUser;
import com.ruoyi.sy.gps31.PositionContainer;
import com.ruoyi.sy.mapper.ArdSyUserMapper;
@@ -79,8 +79,7 @@
    RedisCache redisCache;
    @Resource
    private ArdSyCarDayMapper ardSyCarDayMapper;
    @Resource
    private MinioUtils minioUtil;
    private Map<Integer, Map<String, String>> logInMap = new HashMap();
    private Map<String, Timer> userCarTimerMap = new HashMap();
@@ -144,7 +143,7 @@
                objectNames.add(ardSyCar.getCarPicture().split("/sycar/")[1]);
            }
        }
        minioUtil.removeObjects("sycar", objectNames);
        MinioUtil.removeObjects("sycar", objectNames);
        return ardSyCarMapper.deleteArdSyCarByIds(ids);
    }
@@ -261,12 +260,12 @@
    @Override
    public List<Map<String, String>> getAllCarModel() {
        boolean exsit = minioUtil.exitsBucket("sycar");
        boolean exsit = MinioUtil.exitsBucket("sycar");
        if (exsit) {
            List<Map<String, String>> listObjetcName = new ArrayList<>();
            try {
               // ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().prefix("carmodel/").bucket("sycar").build();
                Iterable<Result<Item>> myObjects = minioUtil.getObjectsByBucket("sycar","carmodel");
                Iterable<Result<Item>> myObjects = MinioUtil.getObjectsByBucket("sycar","carmodel");
                for (Result<Item> result : myObjects) {
                    Item item = result.get();
                    Map<String, String> map = new HashMap();
@@ -329,16 +328,16 @@
            if (ardSyCarr.getCarPicture() != null || !ardSyCarr.getCarPicture().equals("")) {
                String objectName = ardSyCarr.getCarPicture().split("/sycar/")[1];
                objectNames.add(objectName);
                minioUtil.removeObjects("sycar", objectNames);
                MinioUtil.removeObjects("sycar", objectNames);
            }
        }
        //判断文件是否为空
        if (null == carPicture || 0 == carPicture.getSize()) {
            return "";
        }
        boolean exsit = minioUtil.exitsBucket("sycar");
        boolean exsit = MinioUtil.exitsBucket("sycar");
        if (!exsit) {
            boolean bucket = minioUtil.createBucket("sycar");
            boolean bucket = MinioUtil.createBucket("sycar");
        }
        //文件名
        String originalFilename = carPicture.getOriginalFilename();
@@ -355,7 +354,7 @@
//                    .contentType(carPicture.getContentType())
//                    .build();
//            MinioConfig.getMinioClient().putObject(putObjectArgs);
            minioUtil.uploadObject("sycar",fileName,inputStream,carPicture.getSize(),carPicture.getContentType());
            MinioUtil.uploadObject("sycar",fileName,inputStream,carPicture.getSize(),carPicture.getContentType());
            inputStream.close();
            /*获取url*/
            GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
@@ -365,7 +364,7 @@
                    .method(Method.GET)
                    .build();
            //String presignedObjectUrl = MinioConfig.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
            String ObjectUrl = minioUtil.getBucketObjectUrl("sycar", fileName);
            String ObjectUrl = MinioUtil.getBucketObjectUrl("sycar", fileName);
            if (id != null && !id.equals("")) {//id为非必要
                ArdSyCar ardSyCar = new ArdSyCar();
                ardSyCar.setId(id);
@@ -1083,7 +1082,7 @@
            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});
            double distance = GisUtil.getDistance( new double[]{longitude,latitude}, new double[]{lng, lat});
            if (distance <= radius) {
                carMap.put("longitude",lng);
                carMap.put("latitude",lat);
@@ -1142,7 +1141,7 @@
                Double lng = Double.valueOf((String) carGPSMap.get(0).get("lng"));
                Double lat = Double.valueOf((String) carGPSMap.get(0).get("lat"));
                Point point = new Point(lng,lat);
                boolean inPolygon = GisTool.isInPolygon(point, partitionLocation);
                boolean inPolygon = GisUtil.isInPolygon(point, partitionLocation);
                if (inPolygon) {
                    carMap.put("longitude", lng);
                    carMap.put("latitude", lat);
ard-work/src/main/java/com/ruoyi/utils/gis/GisUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,195 @@
package com.ruoyi.utils.gis;
import org.gavaghan.geodesy.*;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class GisUtil {
    public static GeodeticCalculator geodeticCalculator = new GeodeticCalculator();
    /**
     * æ ¹æ®ç»çº¬åº¦ï¼Œè®¡ç®—两点间的距离
     *
     * @param From ç¬¬ä¸€ä¸ªç‚¹çš„经纬度
     * @param To  ç¬¬äºŒä¸ªç‚¹çš„经纬度
     * @return è¿”回距离 å•位米
     */
    public static double getDistance(double[] From, double[] To) {
        double longitudeFrom = From[0];
        double latitudeFrom = From[1];
        double longitudeTo = To[0];
        double latitudeTo = To[1];
        GlobalCoordinates source = new GlobalCoordinates(latitudeFrom, longitudeFrom);
        GlobalCoordinates target = new GlobalCoordinates(latitudeTo, longitudeTo);
        return geodeticCalculator.calculateGeodeticCurve(Ellipsoid.WGS84, source, target).getEllipsoidalDistance();
    }
    /**
     * æ ¹æ®ç»çº¬åº¦ï¼Œè®¡ç®—两点间的距离
     *
     * @param longitudeFrom ç¬¬ä¸€ä¸ªç‚¹çš„经度
     * @param latitudeFrom  ç¬¬ä¸€ä¸ªç‚¹çš„纬度
     * @param longitudeTo   ç¬¬äºŒä¸ªç‚¹çš„经度
     * @param latitudeTo    ç¬¬äºŒä¸ªç‚¹çš„纬度
     * @return è¿”回距离 å•位米
     */
    public static double getDistance(double longitudeFrom, double latitudeFrom, double longitudeTo, double latitudeTo) {
        GlobalCoordinates source = new GlobalCoordinates(latitudeFrom, longitudeFrom);
        GlobalCoordinates target = new GlobalCoordinates(latitudeTo, longitudeTo);
        return geodeticCalculator.calculateGeodeticCurve(Ellipsoid.WGS84, source, target).getEllipsoidalDistance();
    }
    /**
     * è®¡ç®—从from到to方向的直线与正北方向夹角
     *
     * @param longitudeFrom ç¬¬ä¸€ä¸ªç‚¹çš„经度
     * @param latitudeFrom  ç¬¬ä¸€ä¸ªç‚¹çš„纬度
     * @param longitudeTo   ç¬¬äºŒä¸ªç‚¹çš„经度
     * @param latitudeTo    ç¬¬äºŒä¸ªç‚¹çš„纬度
     * @return è¿”回角度
     */
    public static double getNorthAngle(double longitudeFrom, double latitudeFrom, double longitudeTo, double latitudeTo) {
        GlobalPosition source = new GlobalPosition(latitudeFrom, longitudeFrom, 0);
        GlobalPosition target = new GlobalPosition(latitudeTo, longitudeTo, 0);
        return geodeticCalculator.calculateGeodeticMeasurement(Ellipsoid.WGS84, source, target).getAzimuth();
    }
    /**
     * @param camera    ç»åº¦,纬度,高度 å¦‚:{125.097531, 46.60029, 120};
     * @param lookAt    ç»åº¦,纬度,高度 å¦‚:{125.124731, 46.584808, 0};
     * @param viewAngle ç›¸æœºå¯è§†è§’度 å¦‚:20
     * @param viewWidth è§†åŸŸå®½åº¦ å¦‚:150
     * @return ptz æ•°ç»„ å¦‚:[129.5355798969157, -2.5419097807416655, 23.3676043024458]
     */
    public static double[] getCameraPTZ(double[] camera, double[] lookAt, double viewAngle, double viewWidth) {
        double p = 0, t = 0, z = 0;
        double distance = GisUtil.getDistance(camera[0], camera[1], lookAt[0], lookAt[1]);
        double northAngle = GisUtil.getNorthAngle(camera[0], camera[1], lookAt[0], lookAt[1]);
        double height = camera[2];
        p = northAngle;
        t = Angle.toDegrees(Math.atan(height / distance)) * -1+360;
        z = distance * Math.tan(viewAngle / 2) * 2 / viewWidth;
      /*  p = new BigDecimal(p).setScale(1,BigDecimal.ROUND_HALF_UP).doubleValue();
        t = new BigDecimal(t).setScale(1,BigDecimal.ROUND_HALF_UP).doubleValue();
        z = new BigDecimal(z).setScale(1,BigDecimal.ROUND_HALF_UP).doubleValue();*/
        return new double[]{p, t, z};
    }
    /**
     * æ ¹æ®å¼€å§‹åæ ‡ç‚¹ï¼Œè§’度,计算结束点坐标
     * @param startGlobalCoordinates
     * @param startAngle æ–¹å‘(以起点为中心)
     * @param distance è·ç¦»ï¼ˆå•位:m)
     * @return
     */
    public static GlobalCoordinates getGlobalCoordinates(GlobalCoordinates startGlobalCoordinates, double startAngle, double distance){
        return new GeodeticCalculator().calculateEndingGlobalCoordinates(Ellipsoid.WGS84, startGlobalCoordinates, startAngle, distance);
    }
    /**
     * åˆ¤æ–­å½“前位置是否在多边形区域内
     * @param orderLocation å½“前点
     * @param partitionLocation åŒºåŸŸé¡¶ç‚¹
     * @return
     */
    public static boolean isInPolygon(Point orderLocation, List<Point> partitionLocation){
        double p_x =orderLocation.getLongitude();
        double p_y =orderLocation.getLatitude();
        Point2D.Double point = new Point2D.Double(p_x, p_y);
        List<Point2D.Double> pointList= new ArrayList<Point2D.Double>();
        for (Point points : partitionLocation){
            double polygonPoint_x=points.getLongitude();
            double polygonPoint_y=points.getLatitude();
            Point2D.Double polygonPoint = new Point2D.Double(polygonPoint_x,polygonPoint_y);
            pointList.add(polygonPoint);
        }
        return IsPtInPoly(point,pointList);
    }
    /**
     * åˆ¤æ–­ç‚¹æ˜¯å¦åœ¨å¤šè¾¹å½¢å†…,如果点位于多边形的顶点或边上,也算做点在多边形内,直接返回true
     * @param point æ£€æµ‹ç‚¹
     * @param pts   å¤šè¾¹å½¢çš„顶点
     * @return      ç‚¹åœ¨å¤šè¾¹å½¢å†…返回true,否则返回false
     */
    public static boolean IsPtInPoly(Point2D.Double point, List<Point2D.Double> pts){
        int N = pts.size();
        boolean boundOrVertex = true; //如果点位于多边形的顶点或边上,也算做点在多边形内,直接返回true
        int intersectCount = 0;//cross points count of x
        double precision = 2e-10; //浮点类型计算时候与0比较时候的容差
        Point2D.Double p1, p2;//neighbour bound vertices
        Point2D.Double p = point; //当前点
        p1 = pts.get(0);//left vertex
        for(int i = 1; i <= N; ++i){//check all rays
            if(p.equals(p1)){
                return boundOrVertex;//p is an vertex
            }
            p2 = pts.get(i % N);
            if(p.x < Math.min(p1.x, p2.x) || p.x > Math.max(p1.x, p2.x)){
                p1 = p2;
                continue;
            }
            if(p.x > Math.min(p1.x, p2.x) && p.x < Math.max(p1.x, p2.x)){
                if(p.y <= Math.max(p1.y, p2.y)){
                    if(p1.x == p2.x && p.y >= Math.min(p1.y, p2.y)){
                        return boundOrVertex;
                    }
                    if(p1.y == p2.y){
                        if(p1.y == p.y){
                            return boundOrVertex;
                        }else{//before ray
                            ++intersectCount;
                        }
                    }else{
                        double xinters = (p.x - p1.x) * (p2.y - p1.y) / (p2.x - p1.x) + p1.y;
                        if(Math.abs(p.y - xinters) < precision){
                            return boundOrVertex;
                        }
                        if(p.y < xinters){
                            ++intersectCount;
                        }
                    }
                }
            }else{
                if(p.x == p2.x && p.y <= p2.y){
                    Point2D.Double p3 = pts.get((i+1) % N);
                    if(p.x >= Math.min(p1.x, p3.x) && p.x <= Math.max(p1.x, p3.x)){
                        ++intersectCount;
                    }else{
                        intersectCount += 2;
                    }
                }
            }
            p1 = p2;
        }
        if(intersectCount % 2 == 0){//偶数在多边形外
            return false;
        } else { //奇数在多边形内
            return true;
        }
    }
    public static void main(String[] args) {
        // 125.097531,46.60029, 125.124731,46.584808
        //相机位置
        double[] camera = {125.146964331147,46.5580925811216,102};//经度,纬度,高度
        //看向的位置
        double[] lookAt = {125.155449,46.555108,0};//经度,纬度,高度
        double viewAngle = 20;//相机可视角度
        double viewWidth = 150;//相机视域宽度
        double[] ptz = GisUtil.getCameraPTZ(camera, lookAt, viewAngle, viewWidth);
        System.out.println("ptz:" + Arrays.toString(ptz));
    }
}
ard-work/src/main/java/com/ruoyi/utils/gis/Point.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/utils/tools/Point.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.utils.tools;
package com.ruoyi.utils.gis;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
ard-work/src/main/java/com/ruoyi/utils/image/WaterMarkUtil.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.device.hiksdk.util.imageUtil;
package com.ruoyi.utils.image;
import org.bytedeco.ffmpeg.global.avutil;
import org.bytedeco.javacv.FFmpegFrameGrabber;
@@ -11,7 +11,6 @@
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Random;
import java.awt.*;
import java.awt.image.BufferedImage;
/**
@@ -26,7 +25,7 @@
/**
 * å›¾ç‰‡æ°´å°å·¥å…·ç±»
 */
public class waterMarkUtil {
public class WaterMarkUtil {
    // æ°´å°é€æ˜Žåº¦
    private static final float alpha = 0.3f;
ard-work/src/main/java/com/ruoyi/utils/minio/MinioConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.ruoyi.utils.minio;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @Description:
 * @ClassName: MinioInit
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´08月25日14:03:45
 **/
@Configuration
@Slf4j(topic = "minio")
public class MinioConfig {
    @Value("${minio.endpoint}")
    private String endpoint;
    @Value("${minio.accessKey}")
    private String accessKey;
    @Value("${minio.secretKey}")
    private String secretKey;
    @Bean
    MinioUtil getMinioUtil()
    {
        log.info("初始化minio配置"+"【"+endpoint+"("+accessKey+"/"+secretKey+")】");
        return new MinioUtil(endpoint,accessKey,secretKey);
    }
}
ard-work/src/main/java/com/ruoyi/utils/minio/MinioUtil.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.storage.minio.utils;
package com.ruoyi.utils.minio;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
@@ -6,39 +6,70 @@
import io.minio.http.Method;
import io.minio.messages.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.*;
import java.util.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
 * @Description: Minio客户端工具类
 * @ClassName: MinioUtils
 * @Description: minio工具类
 * @ClassName: MinioUtil
 * @Author: åˆ˜è‹ä¹‰
 * @Date: 2023å¹´05月18日9:34
 * @Version: 1.0
 * @Date: 2023å¹´08月25日14:03:00
 **/
@SuppressWarnings("ALL")
@Slf4j(topic = "minio")
@Component
public class MinioUtils {
public class MinioUtil {
    @Resource
    MinioClient minioClient;
    private volatile static MinioClient minioClient;
    public static String domainUrl;
    public static String accessKey;
    public static String secretKey;
    private MinioUtil() {
    }
    public MinioUtil(String domainUrl, String accessKey, String secretKey) {
        this.domainUrl = domainUrl;
        this.accessKey = accessKey;
        this.secretKey = secretKey;
        creatMinioClient();
    }
    /**
     * èŽ·å–minio客户端实例
     *
     * @return {@link MinioClient}
     */
    public static MinioClient creatMinioClient() {
        if (minioClient == null) {
            synchronized (MinioUtil.class) {
                if (minioClient == null) {
                    minioClient = MinioClient.builder()
                            .endpoint(domainUrl)
                            .credentials(accessKey, secretKey)
                            .build();
                }
            }
        }
        return minioClient;
    }
    /**
     * åˆ¤æ–­æ¡¶æ˜¯å¦å­˜åœ¨
     */
    public boolean exitsBucket(String bucketName) {
    public static boolean exitsBucket(String bucket) {
        boolean found = false;
        try {
            if (StringUtils.isEmpty(bucketName)) {
            if (StringUtils.isEmpty(bucket)) {
                return false;
            }
            BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build();
            BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucket).build();
            found = minioClient.bucketExists(bucketExistsArgs);
        } catch (Exception ex) {
@@ -50,23 +81,23 @@
    /**
     * åˆ›å»ºæ¡¶,并设置桶策略为公共
     */
    public boolean createBucket(String bucketName) {
    public static boolean createBucket(String bucket) {
        try {
            if (StringUtils.isEmpty(bucketName)) {
            if (StringUtils.isEmpty(bucket)) {
                return false;
            }
            /*创建桶*/
            MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucketName).build();
            MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucket).build();
            minioClient.makeBucket(makeBucketArgs);
            /*设置策略*/
            String sb = "{\"Version\":\"2012-10-17\"," +
                    "\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":" +
                    "{\"AWS\":[\"*\"]},\"Action\":[\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"," +
                    "\"s3:GetBucketLocation\"],\"Resource\":[\"arn:aws:s3:::" + bucketName +
                    "\"s3:GetBucketLocation\"],\"Resource\":[\"arn:aws:s3:::" + bucket +
                    "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:PutObject\",\"s3:AbortMultipartUpload\",\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\"],\"Resource\":[\"arn:aws:s3:::" +
                    bucketName + "/*\"]}]}";
                    bucket + "/*\"]}]}";
            SetBucketPolicyArgs setBucketPolicyArgs = SetBucketPolicyArgs.builder()
                    .bucket(bucketName)
                    .bucket(bucket)
                    .config(sb)
                    .build();
            /*设置通知mqtt*/
@@ -85,7 +116,7 @@
            queueConfigurations.add(queueConfiguration);
            config.setQueueConfigurationList(queueConfigurations);
            SetBucketNotificationArgs setBucketNotificationArgs = SetBucketNotificationArgs.builder()
                    .bucket(bucketName)
                    .bucket(bucket)
                    .config(config).build();
            minioClient.setBucketPolicy(setBucketPolicyArgs);
            minioClient.setBucketNotification(setBucketNotificationArgs);
@@ -102,7 +133,7 @@
     *
     * @param bucket æ¡¶åç§°
     */
    public boolean removeBucket(String bucket) {
    public static boolean removeBucket(String bucket) {
        try {
            boolean found = exitsBucket(bucket);
            if (found) {
@@ -130,7 +161,7 @@
     *
     * @return
     */
    public List<Bucket> getListBuckets() {
    public static List<Bucket> getListBuckets() {
        try {
            return minioClient.listBuckets();
        } catch (Exception e) {
@@ -143,19 +174,19 @@
     * ç”Ÿæˆä¸€ä¸ªGET请求的带有失效时间的分享链接。
     * å¤±æ•ˆæ—¶é—´é»˜è®¤æ˜¯7天。
     *
     * @param bucketName å­˜å‚¨æ¡¶åç§°
     * @param objectName å­˜å‚¨æ¡¶é‡Œçš„对象名称
     * @param expires    å¤±æ•ˆæ—¶é—´ï¼ˆä»¥ç§’为单位),默认是7天,不得大于七天
     * @param bucket  å­˜å‚¨æ¡¶åç§°
     * @param object  å­˜å‚¨æ¡¶é‡Œçš„对象名称
     * @param expires å¤±æ•ˆæ—¶é—´ï¼ˆä»¥ç§’为单位),默认是7天,不得大于七天
     * @return
     */
    public String getObjectWithExpired(String bucketName, String objectName, Integer expires, TimeUnit timeUnit) {
    public static String getObjectWithExpired(String bucket, String object, Integer expires, TimeUnit timeUnit) {
        String url = "";
        if (exitsBucket(bucketName)) {
        if (exitsBucket(bucket)) {
            try {
                GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs.builder()
                        .method(Method.GET)
                        .bucket(bucketName)
                        .object(objectName)
                        .bucket(bucket)
                        .object(object)
                        .expiry(expires, timeUnit)
                        .build();
                url = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
@@ -163,7 +194,7 @@
                log.error("minio生成失效url异常", ex.getMessage());
            }
        } else {
            createBucket(bucketName);
            createBucket(bucket);
        }
        return url;
    }
@@ -176,20 +207,13 @@
     * @创建时间 2023/5/18 12:16
     * @修改人和其它信息
     */
    public String putObjectAndGetUrl(String bucketName, MultipartFile file) {
        if (!exitsBucket(bucketName)) {
            createBucket(bucketName);
    public static String putObjectAndGetUrl(String bucket, MultipartFile file) {
        if (!exitsBucket(bucket)) {
            createBucket(bucket);
        }
        //判断文件是否为空
        if (null == file || 0 == file.getSize()) {
            log.error("上传minio文件服务器错误,上传文件为空");
        }
        boolean exsit = exitsBucket(bucketName);
        if (!exsit) {
            boolean bucket = createBucket(bucketName);
            if (bucket) {
                log.info(bucketName + "-桶不存在,成功创建桶");
            }
        }
        //文件名
        String originalFilename = file.getOriginalFilename();
@@ -200,7 +224,7 @@
            /*上传对象*/
            PutObjectArgs putObjectArgs = PutObjectArgs
                    .builder()
                    .bucket(bucketName)
                    .bucket(bucket)
                    .object(fileName)
                    .stream(inputStream, file.getSize(), -1)
                    .contentType(file.getContentType())
@@ -210,7 +234,7 @@
            /*获取url*/
            GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
                    .builder()
                    .bucket(bucketName)
                    .bucket(bucket)
                    .object(fileName)
                    .method(Method.GET)
                    .build();
@@ -231,20 +255,13 @@
     * @创建时间 2023/5/18 12:16
     * @修改人和其它信息
     */
    public String putObjectAndGetUrl(String bucketName, String folder, MultipartFile file) {
        if (!exitsBucket(bucketName)) {
            createBucket(bucketName);
    public static String putObjectAndGetUrl(String bucket, String folder, MultipartFile file) {
        if (!exitsBucket(bucket)) {
            createBucket(bucket);
        }
        //判断文件是否为空
        if (null == file || 0 == file.getSize()) {
            log.error("上传minio文件服务器错误,上传文件为空");
        }
        boolean exsit = exitsBucket(bucketName);
        if (!exsit) {
            boolean bucket = createBucket(bucketName);
            if (bucket) {
                log.info(bucketName + "-桶不存在,成功创建桶");
            }
        }
        //文件名
        String originalFilename = file.getOriginalFilename();
@@ -255,7 +272,7 @@
            /*上传对象*/
            PutObjectArgs putObjectArgs = PutObjectArgs
                    .builder()
                    .bucket(bucketName)
                    .bucket(bucket)
                    .object(fileName)
                    .stream(inputStream, file.getSize(), -1)
                    .contentType(file.getContentType())
@@ -265,7 +282,7 @@
            /*获取url*/
            GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
                    .builder()
                    .bucket(bucketName)
                    .bucket(bucket)
                    .object(fileName)
                    .method(Method.GET)
                    .build();
@@ -281,15 +298,15 @@
    /**
     * åˆ é™¤æ–‡ä»¶
     *
     * @param bucket     æ¡¶åç§°
     * @param objectName å¯¹è±¡åç§°
     * @param bucket æ¡¶åç§°
     * @param object å¯¹è±¡åç§°
     * @return boolean
     */
    public boolean removeObject(String bucket, String objectName) {
    public static boolean removeObject(String bucket, String object) {
        try {
            boolean exsit = exitsBucket(bucket);
            if (exsit) {
                RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucket).object(objectName).build();
                RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucket).object(object).build();
                minioClient.removeObject(removeObjectArgs);
                return true;
            }
@@ -302,14 +319,14 @@
    /**
     * æ‰¹é‡åˆ é™¤æ–‡ä»¶
     *
     * @param objectNames å¯¹è±¡åç§°
     * @param objectList å¯¹è±¡åç§°åˆ—表
     * @return boolean
     */
    public boolean removeObjects(String bucket, List<String> objectNames) {
    public static boolean removeObjects(String bucket, List<String> objectList) {
        if (exitsBucket(bucket)) {
            try {
                List<DeleteObject> objects = new LinkedList<>();
                for (String str : objectNames) {
                for (String str : objectList) {
                    objects.add(new DeleteObject(str));
                }
                RemoveObjectsArgs removeObjectsArgs = RemoveObjectsArgs.builder().bucket(bucket).objects(objects).build();
@@ -334,7 +351,7 @@
     * @param bucket æ¡¶åç§°
     * @return {@link List}<{@link String}>
     */
    public List<String> getBucketObjectName(String bucket) {
    public static List<String> getBucketObjectName(String bucket) {
        boolean exsit = exitsBucket(bucket);
        if (exsit) {
            List<String> listObjetcName = new ArrayList<>();
@@ -356,10 +373,11 @@
    /**
     * èŽ·å–å•ä¸ªæ¡¶ä¸­çš„æ‰€æœ‰æ–‡ä»¶å¯¹è±¡åç§°
     *
     * @param [bucket,prefix]
     * @param bucket æ¡¶åç§°
     * @param prefix å‰ç¼€
     * @return {@link List}<{@link String}>
     */
    public List<String> getBucketObjectName(String bucket, String prefix) {
    public static List<String> getBucketObjectName(String bucket, String prefix) {
        boolean exsit = exitsBucket(bucket);
        if (exsit) {
            List<String> listObjetcName = new ArrayList<>();
@@ -381,19 +399,19 @@
    /**
     * èŽ·å–æŸä¸ªæ¡¶ä¸‹æŸä¸ªå¯¹è±¡çš„URL
     *
     * @param bucket     æ¡¶åç§°
     * @param objectName å¯¹è±¡å (文件夹名 + æ–‡ä»¶å)
     * @param bucket æ¡¶åç§°
     * @param object å¯¹è±¡å (文件夹名 + æ–‡ä»¶å)
     * @return
     */
    public String getBucketObjectUrl(String bucketName, String objectName) {
    public static String getBucketObjectUrl(String bucket, String object) {
        try {
            if (!exitsBucket(bucketName)) {
            if (!exitsBucket(bucket)) {
                return "";
            }
            GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
                    .builder()
                    .bucket(bucketName)
                    .object(objectName)
                    .bucket(bucket)
                    .object(object)
                    .method(Method.GET)
                    .build();
            String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
@@ -408,20 +426,20 @@
    /**
     * ä¸Šä¼ å¯¹è±¡-stream
     *
     * @param bucketName  bucket名称
     * @param objectName  â½‚件名称
     * @param bucket      bucket名称
     * @param object      â½‚件名称
     * @param stream      â½‚件流
     * @param size        â¼¤â¼©
     * @param contextType ç±»åž‹ Image/jpeg æµè§ˆå™¨å¯ä»¥ç›´æŽ¥æ‰“开,否则下载
     */
    public boolean uploadObject(String bucketName, String objectName, InputStream stream, long size, String contextType) {
    public static boolean uploadObject(String bucket, String object, InputStream stream, long size, String contextType) {
        try {
            if (!exitsBucket(bucketName)) {
                createBucket(bucketName);
            if (!exitsBucket(bucket)) {
                createBucket(bucket);
            }
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .bucket(bucketName)
                    .object(objectName)
                    .bucket(bucket)
                    .object(object)
                    .stream(stream, size, -1)
                    .contentType(contextType)
                    .build();
@@ -436,20 +454,20 @@
    /**
     * ä¸Šä¼ å¯¹è±¡-File
     *
     * @param bucketName  bucket名称
     * @param objectName  â½‚件名称
     * @param bucket      bucket名称
     * @param object      â½‚件名称
     * @param file        â½‚ä»¶
     * @param contextType ç±»åž‹ Image/jpeg æµè§ˆå™¨å¯ä»¥ç›´æŽ¥æ‰“开,否则下载
     */
    public boolean uploadObject(String bucketName, String objectName, File file, String contextType) {
    public static boolean uploadObject(String bucket, String object, File file, String contextType) {
        try {
            if (!exitsBucket(bucketName)) {
                createBucket(bucketName);
            if (!exitsBucket(bucket)) {
                createBucket(bucket);
            }
            FileInputStream fileInputStream = new FileInputStream(file);
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .bucket(bucketName)
                    .object(objectName)
                    .bucket(bucket)
                    .object(object)
                    .stream(fileInputStream, file.length(), -1)
                    .contentType(contextType)
                    .build();
@@ -464,20 +482,20 @@
    /**
     * ä¸Šä¼ å¯¹è±¡-MultipartFile
     *
     * @param bucketName    bucket名称
     * @param objectName    â½‚件名称
     * @param MultipartFile â½‚ä»¶
     * @param bucket        bucket名称
     * @param object        â½‚件名称
     * @param multipartFile â½‚ä»¶
     * @param contextType   ç±»åž‹ Image/jpeg æµè§ˆå™¨å¯ä»¥ç›´æŽ¥æ‰“开,否则下载
     */
    public boolean uploadObject(String bucketName, String objectName, MultipartFile multipartFile, String contextType) {
    public static boolean uploadObject(String bucket, String object, MultipartFile multipartFile, String contextType) {
        try {
            if (!exitsBucket(bucketName)) {
                createBucket(bucketName);
            if (!exitsBucket(bucket)) {
                createBucket(bucket);
            }
            InputStream inputStream = multipartFile.getInputStream();
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .bucket(bucketName)
                    .object(objectName)
                    .bucket(bucket)
                    .object(object)
                    .stream(inputStream, multipartFile.getSize(), -1)
                    .contentType(contextType)
                    .build();
@@ -492,15 +510,14 @@
    /**
     * ä¸Šä¼ å¯¹è±¡,用multipartFile名称作为对象名
     *
     * @param bucketName    bucket名称
     * @param objectName    â½‚件名称
     * @param MultipartFile â½‚ä»¶
     * @param bucket        bucket名称
     * @param multipartFile â½‚ä»¶
     * @param contextType   ç±»åž‹ Image/jpeg æµè§ˆå™¨å¯ä»¥ç›´æŽ¥æ‰“开,否则下载
     */
    public boolean uploadObject(String bucketName, MultipartFile multipartFile, String contextType) {
    public static boolean uploadObject(String bucket, MultipartFile multipartFile, String contextType) {
        try {
            if (!exitsBucket(bucketName)) {
                createBucket(bucketName);
            if (!exitsBucket(bucket)) {
                createBucket(bucket);
            }
            if (multipartFile == null) {
                log.error("上传文件为空");
@@ -509,7 +526,7 @@
            String objectName = multipartFile.getOriginalFilename();
            InputStream inputStream = multipartFile.getInputStream();
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .bucket(bucketName)
                    .bucket(bucket)
                    .object(objectName)
                    .stream(inputStream, multipartFile.getSize(), -1)
                    .contentType(contextType)
@@ -525,15 +542,15 @@
    /**
     * ä¸Šä¼ å¯¹è±¡-通过本地路径
     *
     * @param bulkName
     * @param objectName
     * @param localFilePathName
     * @return
     * @param bucket            æ¡¶åç§°
     * @param object            å¯¹è±¡åç§°
     * @param localFilePathName æ–‡ä»¶è·¯å¾„
     * @return boolean
     */
    public boolean uploadObject(String bucketName, String objectName, String localFilePathName, String contextType) {
    public static boolean uploadObject(String bucket, String object, String localFilePathName, String contextType) {
        try {
            if (!exitsBucket(bucketName)) {
                createBucket(bucketName);
            if (!exitsBucket(bucket)) {
                createBucket(bucket);
            }
            File file = new File(localFilePathName);
            if (!file.exists()) {
@@ -541,8 +558,8 @@
                return false;
            }
            UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder()
                    .bucket(bucketName)
                    .object(objectName)
                    .bucket(bucket)
                    .object(object)
                    .filename(localFilePathName)
                    .contentType(contextType)
                    .build();
@@ -562,7 +579,7 @@
     * @创建时间 2023/2/6 10:32
     * @修改人和其它信息
     */
    public Iterable<Result<Item>> getObjectsByBucket(String bucketName) {
    public static Iterable<Result<Item>> getObjectsByBucket(String bucketName) {
        Iterable<Result<Item>> listObjects = minioClient.listObjects(ListObjectsArgs.builder()
                .bucket(bucketName)
                .recursive(true)
@@ -578,7 +595,7 @@
     * @创建时间 2023/2/6 10:32
     * @修改人和其它信息
     */
    public Iterable<Result<Item>> getObjectsByBucket(String bucketName, String prefix) {
    public static Iterable<Result<Item>> getObjectsByBucket(String bucketName, String prefix) {
        Iterable<Result<Item>> listObjects = minioClient.listObjects(ListObjectsArgs.builder()
                .bucket(bucketName)
                .prefix(prefix)
@@ -586,4 +603,5 @@
                .build());
        return listObjects;
    }
}
}
ard-work/src/main/java/com/ruoyi/utils/process/CmdUtils.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.utils.tools;
package com.ruoyi.utils.process;
import lombok.extern.slf4j.Slf4j;
ard-work/src/main/java/com/ruoyi/utils/tools/GisTool.java
ÎļþÒÑɾ³ý
ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml
@@ -16,8 +16,16 @@
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <collection property="sysUserList" javaType="java.util.List" resultMap="SysUserListResult"/>
        <!-- å­æŸ¥è¯¢ï¼Œå…³è” ard_dispatch_police_user è¡¨ -->
        <collection property="sysUserList" ofType="java.util.List" select="getSysUserListByMainTableId" column="id"/>
    </resultMap>
    <select id="getSysUserListByMainTableId" resultType="SysUser">
        SELECT u.*
        FROM ard_dispatch_police_user b
                 left join sys_user u on b.user_id = u.user_id
        WHERE dispatch_id = #{id}
    </select>
    <resultMap id="ArdDispatchPoliceArdDispatchPoliceUserResult" type="ArdDispatchPolice"
               extends="ArdDispatchPoliceResult">
@@ -32,23 +40,18 @@
    </resultMap>
    <sql id="selectArdDispatchPoliceVo">
        SELECT adp.ID,
               adp.NAME,
               adp.text,
               adp.longitude,
               adp.latitude,
               adp.dept_id,
               adp.user_id,
               adp.create_by,
               adp.create_time,
               adp.update_by,
               adp.update_time,
               u.user_id     as sub_user_id,
               u.nick_name   as sub_nick_name,
               u.dept_id     as sub_dept_id
        FROM ard_dispatch_police adp
        left join ard_dispatch_police_user b on b.dispatch_id = adp.id
        left join sys_user u on b.user_id = u.user_id
        SELECT ID,
               NAME,
               text,
               longitude,
               latitude,
               dept_id,
               user_id,
               create_by,
               create_time,
               update_by,
               update_time
        FROM ard_dispatch_police
    </sql>
    <select id="selectArdDispatchPoliceList" parameterType="ArdDispatchPolice" resultMap="ArdDispatchPoliceResult">
@@ -75,9 +78,9 @@
               a.create_time,
               a.update_by,
               a.update_time,
               b.user_id     as sub_user_id,
               b.nick_name   as sub_nick_name,
               b.dept_id     as sub_dept_id
               b.user_id   as sub_user_id,
               b.nick_name as sub_nick_name,
               b.dept_id   as sub_dept_id
        from ard_dispatch_police a
                 left join ard_dispatch_police_user b on b.dispatch_id = a.id
        where a.id = #{id}
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java
@@ -1,11 +1,10 @@
package com.ruoyi.quartz.task;
import com.ruoyi.storage.minio.utils.MinioUtils;
import com.ruoyi.utils.minio.MinioUtil;
import io.minio.Result;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.ZoneId;
@@ -22,8 +21,6 @@
@Component("MinioTask")
@Slf4j(topic = "minio")
public class MinioTask {
    @Resource
    MinioUtils minioUtil;
    public void delHistoryTask(Integer saveDays) {
        log.debug("执行历史数据删除");
@@ -33,7 +30,7 @@
            buckets.add("pic");
            buckets.add("record");
            for (String name : buckets) {
                Iterable<Result<Item>> listObjectsPic = minioUtil.getObjectsByBucket(name);
                Iterable<Result<Item>> listObjectsPic = MinioUtil.getObjectsByBucket(name);
                for (Result<Item> result : listObjectsPic) {
                    Item item = result.get();
                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("Asia/Shanghai"));
@@ -51,7 +48,7 @@
                        log.debug("objectTime : " + objectTime);
                        log.debug("expireTime : " + expireTime);
                        log.debug("objectTime æ—¶é—´åœ¨ expireTime ä¹‹å‰,执行删除");
                        boolean b = minioUtil.removeObject(name, item.objectName());
                        boolean b = MinioUtil.removeObject(name, item.objectName());
                        if (b) {
                            log.debug("成功删除过期数据:" + item.objectName() + "---" + item.lastModified());
                        }