From 63a661a78e1999423ea7d94277a645ed4b9e7e6d Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期五, 25 八月 2023 15:22:23 +0800 Subject: [PATCH] 优化minio工具类和其他工具类位置 优化派警管理列表分页问题 --- ard-work/src/main/java/com/ruoyi/utils/minio/MinioUtil.java | 248 +++++++++-------- ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HIKSDKStructure.java | 2 ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HCNetSDK.java | 2 ard-work/src/main/java/com/ruoyi/scheduling/controller/SchedulingController.java | 1 ard-work/src/main/java/com/ruoyi/utils/image/WaterMarkUtil.java | 5 ard-work/src/main/java/com/ruoyi/utils/gis/Point.java | 2 /dev/null | 141 ---------- ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java | 9 ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java | 9 ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepComparator.java | 6 ard-work/src/main/java/com/ruoyi/utils/gis/GisUtil.java | 195 +++++++++++++ ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java | 5 ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java | 21 ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml | 45 +- ard-work/src/main/java/com/ruoyi/scheduling/domian/SchedulingParam.java | 2 ard-work/src/main/java/com/ruoyi/utils/minio/MinioConfig.java | 32 ++ ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java | 13 ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java | 5 ard-work/src/main/java/com/ruoyi/utils/process/CmdUtils.java | 2 ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java | 10 ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java | 2 ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java | 7 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java | 29 +- 23 files changed, 436 insertions(+), 357 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java index 385f1d5..4cefccd 100644 --- a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java +++ b/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())) { diff --git a/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java b/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java index 6c2d3a8..c6a0d8c 100644 --- a/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java +++ b/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); } } diff --git a/ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java index bd751a8..c0143e5 100644 --- a/ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java +++ b/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); diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java index 245b74e..e79c3ec 100644 --- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java +++ b/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(); diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HCNetSDK.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HCNetSDK.java similarity index 99% rename from ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HCNetSDK.java rename to ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HCNetSDK.java index a07c6d0..a1baa8f 100644 --- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HCNetSDK.java +++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/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; diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HIKSDKStructure.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HIKSDKStructure.java similarity index 95% rename from ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HIKSDKStructure.java rename to ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HIKSDKStructure.java index 1baf0df..01f2b0c 100644 --- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HIKSDKStructure.java +++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HIKSDKStructure.java @@ -1,4 +1,4 @@ -package com.ruoyi.device.hiksdk.util.hikSdkUtil; +package com.ruoyi.device.hiksdk.sdk; import com.sun.jna.Structure; diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java similarity index 98% rename from ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java rename to ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java index d879397..66fb37b 100644 --- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java +++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/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; diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java index 4ed6415..5dd6550 100644 --- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java +++ b/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; diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/GisUtil.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/GisUtil.java deleted file mode 100644 index e9c916a..0000000 --- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/GisUtil.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.ruoyi.device.hiksdk.util.hikSdkUtil; - -import org.gavaghan.geodesy.*; - -import java.math.BigDecimal; -import java.util.Arrays; - -public class GisUtil { - - public static GeodeticCalculator geodeticCalculator = new GeodeticCalculator(); - - /** - * 鏍规嵁缁忕含搴︼紝璁$畻涓ょ偣闂寸殑璺濈 - * - * @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(); - } - - /** - * 璁$畻浠巉rom鍒皌o鏂瑰悜鐨勭洿绾夸笌姝e寳鏂瑰悜澶硅 - * - * @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); - } - - 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)); - - } -} diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepComparator.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepComparator.java index aa5b4c6..4c178c0 100644 --- a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepComparator.java +++ b/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; diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java index 5e61e05..578291c 100644 --- a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java +++ b/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; diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java index 36eede2..0a0c592 100644 --- a/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java +++ b/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; diff --git a/ard-work/src/main/java/com/ruoyi/scheduling/controller/SchedulingController.java b/ard-work/src/main/java/com/ruoyi/scheduling/controller/SchedulingController.java index 4727673..b5cba4a 100644 --- a/ard-work/src/main/java/com/ruoyi/scheduling/controller/SchedulingController.java +++ b/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); diff --git a/ard-work/src/main/java/com/ruoyi/scheduling/domian/SchedulingParam.java b/ard-work/src/main/java/com/ruoyi/scheduling/domian/SchedulingParam.java index 63840af..83dda6a 100644 --- a/ard-work/src/main/java/com/ruoyi/scheduling/domian/SchedulingParam.java +++ b/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; diff --git a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioConfig.java b/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioConfig.java deleted file mode 100644 index 28b2235..0000000 --- a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioConfig.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.ruoyi.storage.minio.utils; - -import io.minio.MinioClient; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; - -/** - * @Description: - * @ClassName: MinioClientSingleton - * @Author: 鍒樿嫃涔� - * @Date: 2023骞�05鏈�18鏃�9:32 - * @Version: 1.0 - **/ -@Slf4j(topic = "minio") -@Component -public class MinioConfig { - @Value("${minio.endpoint}") - private String endpoint; - @Value("${minio.accessKey}") - private String accessKey; - @Value("${minio.secretKey}") - private String secretKey; - - @Bean - public MinioClient getMinioClient() { - return MinioClient.builder() - .endpoint(endpoint) - .credentials(accessKey, secretKey) - .build(); - } - -} - diff --git a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioService.java b/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioService.java deleted file mode 100644 index 2e095bc..0000000 --- a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioService.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.ruoyi.storage.minio.utils; - -import com.ruoyi.utils.tools.CmdUtils; -import com.sun.jna.Platform; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import java.io.File; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @Description: - * @ClassName: MinioService - * @Author: 鍒樿嫃涔� - * @Date: 2023骞�08鏈�04鏃�10:32:40 - * @Version: 1.0 - **/ -@Component -@Slf4j(topic = "cmd") -public class MinioService { - String processName = "minio.exe"; - @Value("${minio.path}") - String minioPath; - @Value("${minio.accessKey}") - String accessKey; - @Value("${minio.secretKey}") - String secretKey; - @Value("${minio.enabled}") - Boolean minioEnabled; - - @PostConstruct - public void init() { - if (minioEnabled) { - if (Platform.isWindows()) { - String exePath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "minio" + File.separator + processName; - List<String> cmd = new ArrayList<>(); - cmd.add(exePath); - cmd.add("server"); - cmd.add(minioPath); - if (CmdUtils.isProcessRunning(processName)) { - // 杩涚▼宸茬粡鍦ㄨ繍琛岋紝缁撴潫璇ヨ繘绋� - CmdUtils.stopProcess(processName); - } - // 鍚姩鍚庡彴杩涚▼ - Map<String, String> envMap = new HashMap<>(); - envMap.put("MINIO_ROOT_USER", accessKey); - envMap.put("MINIO_ROOT_PASSWORD", secretKey); - CmdUtils.commandStart(processName, cmd, envMap); - // 鍚姩cmd绐楀彛 -// String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"}; -// CmdUtils.commandStart(command); - } - } - } - - @PreDestroy - public void destroyMediaMtx() { - if (minioEnabled) { - log.info("閿�姣乵inio"); - if (CmdUtils.isProcessRunning(processName)) { - // 杩涚▼宸茬粡鍦ㄨ繍琛岋紝缁撴潫璇ヨ繘绋� - CmdUtils.stopProcess(processName); - } - } - } -} diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java index 788a2b2..6cd7616 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java +++ b/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); diff --git a/ard-work/src/main/java/com/ruoyi/utils/gis/GisUtil.java b/ard-work/src/main/java/com/ruoyi/utils/gis/GisUtil.java new file mode 100644 index 0000000..3aafe29 --- /dev/null +++ b/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(); + } + + /** + * 璁$畻浠巉rom鍒皌o鏂瑰悜鐨勭洿绾夸笌姝e寳鏂瑰悜澶硅 + * + * @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; //濡傛灉鐐逛綅浜庡杈瑰舰鐨勯《鐐规垨杈逛笂锛屼篃绠楀仛鐐瑰湪澶氳竟褰㈠唴锛岀洿鎺ヨ繑鍥瀟rue + 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)); + + } +} diff --git a/ard-work/src/main/java/com/ruoyi/utils/tools/Point.java b/ard-work/src/main/java/com/ruoyi/utils/gis/Point.java similarity index 95% rename from ard-work/src/main/java/com/ruoyi/utils/tools/Point.java rename to ard-work/src/main/java/com/ruoyi/utils/gis/Point.java index 80d9235..979cc55 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/tools/Point.java +++ b/ard-work/src/main/java/com/ruoyi/utils/gis/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; diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java b/ard-work/src/main/java/com/ruoyi/utils/image/WaterMarkUtil.java similarity index 98% rename from ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java rename to ard-work/src/main/java/com/ruoyi/utils/image/WaterMarkUtil.java index 919cf10..14a4b1f 100644 --- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java +++ b/ard-work/src/main/java/com/ruoyi/utils/image/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; diff --git a/ard-work/src/main/java/com/ruoyi/utils/minio/MinioConfig.java b/ard-work/src/main/java/com/ruoyi/utils/minio/MinioConfig.java new file mode 100644 index 0000000..41c8cab --- /dev/null +++ b/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("鍒濆鍖杕inio閰嶇疆"+"銆�"+endpoint+"("+accessKey+"/"+secretKey+")銆�"); + return new MinioUtil(endpoint,accessKey,secretKey); + } +} diff --git a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java b/ard-work/src/main/java/com/ruoyi/utils/minio/MinioUtil.java similarity index 75% rename from ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java rename to ard-work/src/main/java/com/ruoyi/utils/minio/MinioUtil.java index 7cbcec6..62b93d6 100644 --- a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java +++ b/ard-work/src/main/java/com/ruoyi/utils/minio/MinioUtil.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 @@ * 鐢熸垚涓�涓狦ET璇锋眰鐨勫甫鏈夊け鏁堟椂闂寸殑鍒嗕韩閾炬帴銆� * 澶辨晥鏃堕棿榛樿鏄�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 @@ /** * 鑾峰彇鏌愪釜妗朵笅鏌愪釜瀵硅薄鐨刄RL * - * @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 @@ /** * 涓婁紶瀵硅薄,鐢╩ultipartFile鍚嶇О浣滀负瀵硅薄鍚� * - * @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; } -} \ No newline at end of file + +} diff --git a/ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java b/ard-work/src/main/java/com/ruoyi/utils/process/CmdUtils.java similarity index 98% rename from ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java rename to ard-work/src/main/java/com/ruoyi/utils/process/CmdUtils.java index 3204542..8322b3a 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java +++ b/ard-work/src/main/java/com/ruoyi/utils/process/CmdUtils.java @@ -1,4 +1,4 @@ -package com.ruoyi.utils.tools; +package com.ruoyi.utils.process; import lombok.extern.slf4j.Slf4j; diff --git a/ard-work/src/main/java/com/ruoyi/utils/tools/GisTool.java b/ard-work/src/main/java/com/ruoyi/utils/tools/GisTool.java deleted file mode 100644 index 4682ff7..0000000 --- a/ard-work/src/main/java/com/ruoyi/utils/tools/GisTool.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.ruoyi.utils.tools; - -import org.gavaghan.geodesy.Ellipsoid; -import org.gavaghan.geodesy.GeodeticCalculator; -import org.gavaghan.geodesy.GlobalCoordinates; - -import java.awt.geom.Point2D; -import java.util.ArrayList; -import java.util.List; - -/** - * @Description: - * @ClassName: GisTool - * @Author: 鍒樿嫃涔� - * @Date: 2023骞�06鏈�15鏃�13:26 - * @Version: 1.0 - **/ -public class GisTool { - 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(); - } - - public static void main(String[] args) { - // 琚娴嬬殑缁忕含搴︾偣 - Point point= new Point(126.649261,45.687377); - // 鍟嗕笟鍖哄煙锛堢櫨搴﹀杈瑰舰鍖哄煙缁忕含搴﹂泦鍚堬級 - List<Point> partitionLocation = new ArrayList<>(); - partitionLocation.add(new Point(126.64459,45.688548)); - partitionLocation.add(new Point(126.653376,45.68938)); - partitionLocation.add(new Point(126.645776,45.685048)); - partitionLocation.add(new Point(126.654184,45.685778)); - System.out.println(isInPolygon(point,partitionLocation)); - } - - /** - * 鍒ゆ柇褰撳墠浣嶇疆鏄惁鍦ㄥ杈瑰舰鍖哄煙鍐� - * @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; //濡傛灉鐐逛綅浜庡杈瑰舰鐨勯《鐐规垨杈逛笂锛屼篃绠楀仛鐐瑰湪澶氳竟褰㈠唴锛岀洿鎺ヨ繑鍥瀟rue - 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; - } - } - -} diff --git a/ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml b/ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml index 90d8a53..fffe942 100644 --- a/ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml +++ b/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} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java index 69ea287..7a8ef64 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java +++ b/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()); } -- Gitblit v1.9.3