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()); }