From 63a661a78e1999423ea7d94277a645ed4b9e7e6d Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 周五, 25 8月 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();
- }
-
- /**
- * 计算从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);
- }
-
- 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("销毁minio");
- 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();
+ }
+
+ /**
+ * 计算从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));
+
+ }
+}
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("初始化minio配置"+"【"+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 @@
* 生成一个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;
}
-}
\ 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; //如果点位于多边形的顶点或边上,也算做点在多边形内,直接返回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;
- }
- }
-
-}
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