增加存储模块,将minio工具类迁移到存储包
增加minio的通知功能,通过mqtt将通知入库
修复配置文件自定义字段标黄的问题
已添加18个文件
已重命名1个文件
已修改8个文件
1051 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/rongcloud/controller/RongCloudController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/controller/StorageMinioEventController.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/domain/StorageMinioEvent.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/Bucket.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/JsonsRootBean.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/Owneridentity.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/Records.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/Requestparameters.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/ResponseElements.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/S3.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/Usermetadata.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/mObject.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/mSource.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/userIdentity.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/mapper/StorageMinioEventMapper.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/service/IStorageMinioEventService.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/service/impl/StorageMinioEventServiceImpl.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/minio/StorageMinioEventMapper.xml 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/META-INF/spring-configuration-metadata.json 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
@@ -1,28 +1,19 @@
package com.ruoyi.app.position.controller;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.app.position.domain.ArdAppPosition;
import com.ruoyi.app.position.service.IArdAppPositionService;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.device.hiksdk.util.minio.MinioUtils;
import com.ruoyi.storage.minio.utils.MinioUtils;
import com.ruoyi.rongcloud.service.RongCloudService;
import com.ruoyi.system.domain.SysUserOnline;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserOnlineService;
import com.ruoyi.system.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
@@ -210,7 +201,7 @@
    @ApiOperation("上传文件")
    public AjaxResult uploadFile(MultipartFile file,String type)
    {
        String url = MinioUtils.putObjectAndGetUrl("app",type, file);
        String url = MinioUtils.putObjectAndGetUrl("app1",type, file);
        return AjaxResult.success(url);
    }
}
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -11,7 +11,7 @@
import com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK;
import com.ruoyi.device.hiksdk.service.IHikClientService;
import com.ruoyi.device.hiksdk.util.hikSdkUtil.LoginResultCallBack;
import com.ruoyi.device.hiksdk.util.minio.MinioUtils;
import com.ruoyi.storage.minio.utils.MinioUtils;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import com.sun.jna.Pointer;
ard-work/src/main/java/com/ruoyi/rongcloud/controller/RongCloudController.java
@@ -2,14 +2,10 @@
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
import com.ruoyi.device.hiksdk.util.minio.MinioUtils;
import com.ruoyi.rongcloud.service.RongCloudService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.List;
ard-work/src/main/java/com/ruoyi/storage/minio/controller/StorageMinioEventController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
package com.ruoyi.storage.minio.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.storage.minio.domain.StorageMinioEvent;
import com.ruoyi.storage.minio.service.IStorageMinioEventService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
 * å­˜å‚¨äº‹ä»¶Controller
 *
 * @author ard
 * @date 2023-08-05
 */
@RestController
@RequestMapping("/minio/event")
public class StorageMinioEventController extends BaseController
{
    @Autowired
    private IStorageMinioEventService storageMinioEventService;
    /**
     * æŸ¥è¯¢å­˜å‚¨äº‹ä»¶åˆ—表
     */
    @PreAuthorize("@ss.hasPermi('minio:event:list')")
    @GetMapping("/list")
    public TableDataInfo list(StorageMinioEvent storageMinioEvent)
    {
        startPage();
        List<StorageMinioEvent> list = storageMinioEventService.selectStorageMinioEventList(storageMinioEvent);
        return getDataTable(list);
    }
    /**
     * å¯¼å‡ºå­˜å‚¨äº‹ä»¶åˆ—表
     */
    @PreAuthorize("@ss.hasPermi('minio:event:export')")
    @Log(title = "存储事件", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, StorageMinioEvent storageMinioEvent)
    {
        List<StorageMinioEvent> list = storageMinioEventService.selectStorageMinioEventList(storageMinioEvent);
        ExcelUtil<StorageMinioEvent> util = new ExcelUtil<StorageMinioEvent>(StorageMinioEvent.class);
        util.exportExcel(response, list, "存储事件数据");
    }
    /**
     * èŽ·å–å­˜å‚¨äº‹ä»¶è¯¦ç»†ä¿¡æ¯
     */
    @PreAuthorize("@ss.hasPermi('minio:event:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id)
    {
        return success(storageMinioEventService.selectStorageMinioEventById(id));
    }
    /**
     * æ–°å¢žå­˜å‚¨äº‹ä»¶
     */
    @PreAuthorize("@ss.hasPermi('minio:event:add')")
    @Log(title = "存储事件", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody StorageMinioEvent storageMinioEvent)
    {
        return toAjax(storageMinioEventService.insertStorageMinioEvent(storageMinioEvent));
    }
    /**
     * ä¿®æ”¹å­˜å‚¨äº‹ä»¶
     */
    @PreAuthorize("@ss.hasPermi('minio:event:edit')")
    @Log(title = "存储事件", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody StorageMinioEvent storageMinioEvent)
    {
        return toAjax(storageMinioEventService.updateStorageMinioEvent(storageMinioEvent));
    }
    /**
     * åˆ é™¤å­˜å‚¨äº‹ä»¶
     */
    @PreAuthorize("@ss.hasPermi('minio:event:remove')")
    @Log(title = "存储事件", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids)
    {
        return toAjax(storageMinioEventService.deleteStorageMinioEventByIds(ids));
    }
}
ard-work/src/main/java/com/ruoyi/storage/minio/domain/StorageMinioEvent.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,167 @@
package com.ruoyi.storage.minio.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
 * å­˜å‚¨äº‹ä»¶å¯¹è±¡ storage_minio_event
 *
 * @author ard
 * @date 2023-08-05
 */
public class StorageMinioEvent extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** ID */
    private String id;
    /** äº‹ä»¶ç±»åž‹ */
    @Excel(name = "事件类型")
    private String eventType;
    /** æ¡¶åç§° */
    @Excel(name = "桶名称")
    private String bucketName;
    /** äº‹ä»¶æ—¶é—´ */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "事件时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date eventTime;
    /** è¯·æ±‚主机 */
    @Excel(name = "请求主机")
    private String host;
    /** è¯·æ±‚用户 */
    @Excel(name = "请求用户")
    private String userName;
    /** è¯·æ±‚地址 */
    @Excel(name = "请求地址")
    private String endpoint;
    /** å¯¹è±¡åç§° */
    @Excel(name = "对象名称")
    private String objectName;
    /** å¯¹è±¡ç±»åž‹ */
    @Excel(name = "对象类型")
    private String objectType;
    /** å¯¹è±¡å¤§å° */
    @Excel(name = "对象大小")
    private int objectSize;
    public void setId(String id)
    {
        this.id = id;
    }
    public String getId()
    {
        return id;
    }
    public void setEventType(String eventType)
    {
        this.eventType = eventType;
    }
    public String getEventType()
    {
        return eventType;
    }
    public void setBucketName(String bucketName)
    {
        this.bucketName = bucketName;
    }
    public String getBucketName()
    {
        return bucketName;
    }
    public void setEventTime(Date eventTime)
    {
        this.eventTime = eventTime;
    }
    public Date getEventTime()
    {
        return eventTime;
    }
    public void setHost(String host)
    {
        this.host = host;
    }
    public String getHost()
    {
        return host;
    }
    public void setUserName(String userName)
    {
        this.userName = userName;
    }
    public String getUserName()
    {
        return userName;
    }
    public void setEndpoint(String endpoint)
    {
        this.endpoint = endpoint;
    }
    public String getEndpoint()
    {
        return endpoint;
    }
    public void setObjectName(String objectName)
    {
        this.objectName = objectName;
    }
    public String getObjectName()
    {
        return objectName;
    }
    public void setObjectType(String objectType)
    {
        this.objectType = objectType;
    }
    public String getObjectType()
    {
        return objectType;
    }
    public void setObjectSize(int objectSize)
    {
        this.objectSize = objectSize;
    }
    public int getObjectSize()
    {
        return objectSize;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("eventType", getEventType())
            .append("bucketName", getBucketName())
            .append("eventTime", getEventTime())
            .append("host", getHost())
            .append("userName", getUserName())
            .append("endpoint", getEndpoint())
            .append("objectName", getObjectName())
            .append("objectType", getObjectType())
            .append("objectSize", getObjectSize())
            .append("createTime", getCreateTime())
            .toString();
    }
}
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/Bucket.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.storage.minio.domain.jsonbean;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
 * Auto-generated: 2023-08-05 11:37:3
 *
 * @author www.jsons.cn
 * @website http://www.jsons.cn/json2java/
 */
@Data
public class Bucket {
    private String name;
    @JsonProperty("ownerIdentity")
    private Owneridentity owneridentity;
    private String arn;
}
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/JsonsRootBean.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.storage.minio.domain.jsonbean;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
 * Auto-generated: 2023-08-05 11:37:3
 *
 * @author www.jsons.cn
 * @website http://www.jsons.cn/json2java/
 */
@Data
public class JsonsRootBean {
    @JsonProperty("EventName")
    private String eventname;
    @JsonProperty("Key")
    private String key;
    @JsonProperty("Records")
    private List<Records> records;
}
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/Owneridentity.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.storage.minio.domain.jsonbean;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
 * Auto-generated: 2023-08-05 11:37:3
 *
 * @author www.jsons.cn
 * @website http://www.jsons.cn/json2java/
 */
@Data
public class Owneridentity {
    @JsonProperty("principalId")
    private String principalid;
}
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/Records.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.ruoyi.storage.minio.domain.jsonbean;
import java.util.Date;
import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
 * Auto-generated: 2023-08-05 11:37:3
 *
 * @author www.jsons.cn
 * @website http://www.jsons.cn/json2java/
 */
@Data
public class Records {
    //    private String eventVersion;
//    private String eventSource;
//    private String awsRegion;
    private Date eventTime;
    private String eventName;
    //    private com.ruoyi.storage.minio.domain.jsonbean.userIdentity userIdentity;
    private Requestparameters requestParameters;
    private ResponseElements responseElements;
    private S3 s3;
    @JsonProperty("source")
    private mSource source;
}
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/Requestparameters.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.storage.minio.domain.jsonbean;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
 * Auto-generated: 2023-08-05 11:37:3
 *
 * @author www.jsons.cn
 * @website http://www.jsons.cn/json2java/
 */
@Data
public class Requestparameters {
    @JsonProperty("principalId")
    private String principalid;
    private String region;
    @JsonProperty("sourceIPAddress")
    private String sourceipaddress;
}
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/ResponseElements.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.storage.minio.domain.jsonbean;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
 * Auto-generated: 2023-08-05 11:37:3
 *
 * @author www.jsons.cn
 * @website http://www.jsons.cn/json2java/
 */
@Data
public class ResponseElements {
    private String contentLength;
    private String xAmzId2;
    private String xAmzRequestId;
    private String xMinioDeploymentId;
    @JsonProperty("x-minio-origin-endpoint")
    private String xMinioOriginEndpoint;
}
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/S3.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.storage.minio.domain.jsonbean;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
 * Auto-generated: 2023-08-05 11:37:3
 *
 * @author www.jsons.cn
 * @website http://www.jsons.cn/json2java/
 */
@Data
public class S3 {
//    @JsonProperty("s3SchemaVersion")
//    private String s3schemaversion;
//    @JsonProperty("configurationId")
//    private String configurationid;
    private Bucket bucket;
    @JsonProperty("object")
    private mObject mObject;
}
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/Usermetadata.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.ruoyi.storage.minio.domain.jsonbean;
import lombok.Data;
/**
 * Auto-generated: 2023-08-05 11:37:3
 *
 * @author www.jsons.cn
 * @website http://www.jsons.cn/json2java/
 */
@Data
public class Usermetadata {
    private String contentType;
}
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/mObject.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.storage.minio.domain.jsonbean;
import lombok.Data;
/**
 * Auto-generated: 2023-08-05 11:37:3
 *
 * @author www.jsons.cn
 * @website http://www.jsons.cn/json2java/
 */
@Data
public class mObject {
    private String key;
    private int size;
    private String eTag;
    private String contentType;
    private Usermetadata userMetadata;
    private String sequencer;
}
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/mSource.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.storage.minio.domain.jsonbean;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
 * Auto-generated: 2023-08-05 11:37:3
 *
 * @author www.jsons.cn
 * @website http://www.jsons.cn/json2java/
 */
@Data
public class mSource {
    private String host;
//    private String port;
//    @JsonProperty("userAgent")
//    private Date useragent;
}
ard-work/src/main/java/com/ruoyi/storage/minio/domain/jsonbean/userIdentity.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.ruoyi.storage.minio.domain.jsonbean;
import lombok.Data;
/**
 * Auto-generated: 2023-08-05 11:37:3
 *
 * @author www.jsons.cn
 * @website http://www.jsons.cn/json2java/
 */
@Data
public class userIdentity {
    private String principalId;
}
ard-work/src/main/java/com/ruoyi/storage/minio/mapper/StorageMinioEventMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.storage.minio.mapper;
import java.util.List;
import com.ruoyi.storage.minio.domain.StorageMinioEvent;
/**
 * å­˜å‚¨äº‹ä»¶Mapper接口
 *
 * @author ard
 * @date 2023-08-05
 */
public interface StorageMinioEventMapper
{
    /**
     * æŸ¥è¯¢å­˜å‚¨äº‹ä»¶
     *
     * @param id å­˜å‚¨äº‹ä»¶ä¸»é”®
     * @return å­˜å‚¨äº‹ä»¶
     */
    public StorageMinioEvent selectStorageMinioEventById(String id);
    /**
     * æŸ¥è¯¢å­˜å‚¨äº‹ä»¶åˆ—表
     *
     * @param storageMinioEvent å­˜å‚¨äº‹ä»¶
     * @return å­˜å‚¨äº‹ä»¶é›†åˆ
     */
    public List<StorageMinioEvent> selectStorageMinioEventList(StorageMinioEvent storageMinioEvent);
    /**
     * æ–°å¢žå­˜å‚¨äº‹ä»¶
     *
     * @param storageMinioEvent å­˜å‚¨äº‹ä»¶
     * @return ç»“æžœ
     */
    public int insertStorageMinioEvent(StorageMinioEvent storageMinioEvent);
    /**
     * ä¿®æ”¹å­˜å‚¨äº‹ä»¶
     *
     * @param storageMinioEvent å­˜å‚¨äº‹ä»¶
     * @return ç»“æžœ
     */
    public int updateStorageMinioEvent(StorageMinioEvent storageMinioEvent);
    /**
     * åˆ é™¤å­˜å‚¨äº‹ä»¶
     *
     * @param id å­˜å‚¨äº‹ä»¶ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteStorageMinioEventById(String id);
    /**
     * æ‰¹é‡åˆ é™¤å­˜å‚¨äº‹ä»¶
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteStorageMinioEventByIds(String[] ids);
}
ard-work/src/main/java/com/ruoyi/storage/minio/service/IStorageMinioEventService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.ruoyi.storage.minio.service;
import java.util.List;
import com.ruoyi.storage.minio.domain.StorageMinioEvent;
/**
 * å­˜å‚¨äº‹ä»¶Service接口
 *
 * @author ard
 * @date 2023-08-05
 */
public interface IStorageMinioEventService
{
    /**
     * æŸ¥è¯¢å­˜å‚¨äº‹ä»¶
     *
     * @param id å­˜å‚¨äº‹ä»¶ä¸»é”®
     * @return å­˜å‚¨äº‹ä»¶
     */
    public StorageMinioEvent selectStorageMinioEventById(String id);
    /**
     * æŸ¥è¯¢å­˜å‚¨äº‹ä»¶åˆ—表
     *
     * @param storageMinioEvent å­˜å‚¨äº‹ä»¶
     * @return å­˜å‚¨äº‹ä»¶é›†åˆ
     */
    public List<StorageMinioEvent> selectStorageMinioEventList(StorageMinioEvent storageMinioEvent);
    /**
     * æ–°å¢žå­˜å‚¨äº‹ä»¶
     *
     * @param storageMinioEvent å­˜å‚¨äº‹ä»¶
     * @return ç»“æžœ
     */
    public int insertStorageMinioEvent(StorageMinioEvent storageMinioEvent);
    /**
     * ä¿®æ”¹å­˜å‚¨äº‹ä»¶
     *
     * @param storageMinioEvent å­˜å‚¨äº‹ä»¶
     * @return ç»“æžœ
     */
    public int updateStorageMinioEvent(StorageMinioEvent storageMinioEvent);
    /**
     * æ‰¹é‡åˆ é™¤å­˜å‚¨äº‹ä»¶
     *
     * @param ids éœ€è¦åˆ é™¤çš„存储事件主键集合
     * @return ç»“æžœ
     */
    public int deleteStorageMinioEventByIds(String[] ids);
    /**
     * åˆ é™¤å­˜å‚¨äº‹ä»¶ä¿¡æ¯
     *
     * @param id å­˜å‚¨äº‹ä»¶ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteStorageMinioEventById(String id);
    /**
     * è§£æžminio事件
     *
     * @param message å­˜å‚¨äº‹ä»¶æ¶ˆæ¯
     * @return ç»“æžœ
     */
    public void parseStorageMinioEvent(String message);
}
ard-work/src/main/java/com/ruoyi/storage/minio/service/impl/StorageMinioEventServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,136 @@
package com.ruoyi.storage.minio.service.impl;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.storage.minio.domain.jsonbean.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import com.ruoyi.storage.minio.mapper.StorageMinioEventMapper;
import com.ruoyi.storage.minio.domain.StorageMinioEvent;
import com.ruoyi.storage.minio.service.IStorageMinioEventService;
import javax.annotation.Resource;
/**
 * å­˜å‚¨äº‹ä»¶Service业务层处理
 *
 * @author ard
 * @date 2023-08-05
 */
@Service
@Slf4j(topic = "minio")
public class StorageMinioEventServiceImpl implements IStorageMinioEventService {
    @Resource
    private StorageMinioEventMapper storageMinioEventMapper;
    /**
     * æŸ¥è¯¢å­˜å‚¨äº‹ä»¶
     *
     * @param id å­˜å‚¨äº‹ä»¶ä¸»é”®
     * @return å­˜å‚¨äº‹ä»¶
     */
    @Override
    public StorageMinioEvent selectStorageMinioEventById(String id) {
        return storageMinioEventMapper.selectStorageMinioEventById(id);
    }
    /**
     * æŸ¥è¯¢å­˜å‚¨äº‹ä»¶åˆ—表
     *
     * @param storageMinioEvent å­˜å‚¨äº‹ä»¶
     * @return å­˜å‚¨äº‹ä»¶
     */
    @Override
    public List<StorageMinioEvent> selectStorageMinioEventList(StorageMinioEvent storageMinioEvent) {
        return storageMinioEventMapper.selectStorageMinioEventList(storageMinioEvent);
    }
    /**
     * æ–°å¢žå­˜å‚¨äº‹ä»¶
     *
     * @param storageMinioEvent å­˜å‚¨äº‹ä»¶
     * @return ç»“æžœ
     */
    @Override
    public int insertStorageMinioEvent(StorageMinioEvent storageMinioEvent) {
        storageMinioEvent.setId(IdUtils.simpleUUID());
        storageMinioEvent.setCreateTime(DateUtils.getNowDate());
        return storageMinioEventMapper.insertStorageMinioEvent(storageMinioEvent);
    }
    /**
     * ä¿®æ”¹å­˜å‚¨äº‹ä»¶
     *
     * @param storageMinioEvent å­˜å‚¨äº‹ä»¶
     * @return ç»“æžœ
     */
    @Override
    public int updateStorageMinioEvent(StorageMinioEvent storageMinioEvent) {
        return storageMinioEventMapper.updateStorageMinioEvent(storageMinioEvent);
    }
    /**
     * æ‰¹é‡åˆ é™¤å­˜å‚¨äº‹ä»¶
     *
     * @param ids éœ€è¦åˆ é™¤çš„存储事件主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteStorageMinioEventByIds(String[] ids) {
        return storageMinioEventMapper.deleteStorageMinioEventByIds(ids);
    }
    /**
     * åˆ é™¤å­˜å‚¨äº‹ä»¶ä¿¡æ¯
     *
     * @param id å­˜å‚¨äº‹ä»¶ä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    public int deleteStorageMinioEventById(String id) {
        return storageMinioEventMapper.deleteStorageMinioEventById(id);
    }
    @Async
    @Override
    public void parseStorageMinioEvent(String message) {
        JsonsRootBean jsonsRootBean = JSONObject.parseObject(message, JsonsRootBean.class);
        if (jsonsRootBean != null) {
            Records records = jsonsRootBean.getRecords().get(0);
            StorageMinioEvent storageMinioEvent = new StorageMinioEvent();
            storageMinioEvent.setEventTime(records.getEventTime());
            storageMinioEvent.setEventType(records.getEventName());
            storageMinioEvent.setBucketName(records.getS3().getBucket().getName());
            String encode = null;
            try {
                encode = URLDecoder.decode(records.getS3().getMObject().getKey(), "UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            storageMinioEvent.setObjectName(encode);
            storageMinioEvent.setObjectSize(records.getS3().getMObject().getSize());
            storageMinioEvent.setObjectType(records.getS3().getMObject().getContentType());
            storageMinioEvent.setHost(records.getSource().getHost());
            storageMinioEvent.setEndpoint(records.getResponseElements().getXMinioOriginEndpoint());
            storageMinioEvent.setUserName(records.getRequestParameters().getPrincipalid());
            int i = insertStorageMinioEvent(storageMinioEvent);
            if(i>0)
            {
                log.debug("minio操作日志入库成功!【"+storageMinioEvent.getEventType()+"】");
            }
        }
    }
}
ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java
ÎļþÃû´Ó ard-work/src/main/java/com/ruoyi/device/hiksdk/util/minio/MinioUtils.java ÐÞ¸Ä
@@ -1,14 +1,11 @@
package com.ruoyi.device.hiksdk.util.minio;
package com.ruoyi.storage.minio.utils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteObject;
import io.minio.messages.Item;
import io.minio.messages.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;
@@ -33,12 +30,12 @@
    public static boolean exitsBucket(String bucketName) {
        boolean found = false;
        try {
            if(StringUtils.isEmpty(bucketName))
            {
            if (StringUtils.isEmpty(bucketName)) {
                return false;
            }
            BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build();
            found = MinioClientSingleton.getMinioClient().bucketExists(bucketExistsArgs);
        } catch (Exception ex) {
            log.error("minio判断桶存在异常:", ex.getMessage());
        }
@@ -50,8 +47,7 @@
     */
    public static boolean createBucket(String bucketName) {
        try {
            if(StringUtils.isEmpty(bucketName))
            {
            if (StringUtils.isEmpty(bucketName)) {
                return false;
            }
            /*创建桶*/
@@ -68,7 +64,27 @@
                    .bucket(bucketName)
                    .config(sb)
                    .build();
            /*设置通知mqtt*/
            //设置mqtt主题
            NotificationConfiguration config = new NotificationConfiguration();
            List<QueueConfiguration> queueConfigurations = new ArrayList<>();
            QueueConfiguration queueConfiguration = new QueueConfiguration();
            queueConfiguration.setQueue("arn:minio:sqs::_:mqtt");
            //设置事件
            List<EventType> events=new ArrayList<>();
            events.add(EventType.OBJECT_REMOVED_ANY);
            events.add(EventType.OBJECT_CREATED_ANY);
            queueConfiguration.setEvents(events);
            queueConfigurations.add(queueConfiguration);
            config.setQueueConfigurationList(queueConfigurations);
            SetBucketNotificationArgs setBucketNotificationArgs = SetBucketNotificationArgs.builder()
                    .bucket(bucketName)
                    .config(config).build();
            MinioClientSingleton.getMinioClient().setBucketPolicy(setBucketPolicyArgs);
            MinioClientSingleton.getMinioClient().setBucketNotification(setBucketNotificationArgs);
            return true;
        } catch (Exception ex) {
            log.error("minio创建桶异常:", ex.getMessage());
@@ -141,9 +157,7 @@
            } catch (Exception ex) {
                log.error("minio生成失效url异常", ex.getMessage());
            }
        }
        else
        {
        } else {
            createBucket(bucketName);
        }
        return url;
@@ -158,8 +172,7 @@
     * @修改人和其它信息
     */
    public static String putObjectAndGetUrl(String bucketName, MultipartFile file) {
         if(!exitsBucket(bucketName))
        {
        if (!exitsBucket(bucketName)) {
            createBucket(bucketName);
        }
        //判断文件是否为空
@@ -214,8 +227,7 @@
     * @修改人和其它信息
     */
    public static String putObjectAndGetUrl(String bucketName, String folder, MultipartFile file) {
        if(!exitsBucket(bucketName))
        {
        if (!exitsBucket(bucketName)) {
            createBucket(bucketName);
        }
        //判断文件是否为空
@@ -372,8 +384,7 @@
     */
    public static boolean uploadObject(String bucketName, String objectName, InputStream stream, long size, String contextType) {
        try {
            if(!exitsBucket(bucketName))
            {
            if (!exitsBucket(bucketName)) {
                createBucket(bucketName);
            }
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
@@ -400,8 +411,7 @@
     */
    public static boolean uploadObject(String bucketName, String objectName, File file, String contextType) {
        try {
            if(!exitsBucket(bucketName))
            {
            if (!exitsBucket(bucketName)) {
                createBucket(bucketName);
            }
            FileInputStream fileInputStream = new FileInputStream(file);
@@ -429,8 +439,7 @@
     */
    public static boolean uploadObject(String bucketName, String objectName, MultipartFile multipartFile, String contextType) {
        try {
            if(!exitsBucket(bucketName))
            {
            if (!exitsBucket(bucketName)) {
                createBucket(bucketName);
            }
            InputStream inputStream = multipartFile.getInputStream();
@@ -458,8 +467,7 @@
     */
    public static boolean uploadObject(String bucketName, MultipartFile multipartFile, String contextType) {
        try {
            if(!exitsBucket(bucketName))
            {
            if (!exitsBucket(bucketName)) {
                createBucket(bucketName);
            }
            if (multipartFile == null) {
@@ -492,8 +500,7 @@
     */
    public static boolean uploadObject(String bucketName, String objectName, String localFilePathName, String contextType) {
        try {
            if(!exitsBucket(bucketName))
            {
            if (!exitsBucket(bucketName)) {
                createBucket(bucketName);
            }
            File file = new File(localFilePathName);
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
@@ -11,7 +11,7 @@
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.utils.websocket.util.WebSocketUtils;
import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
import com.ruoyi.device.hiksdk.util.minio.MinioUtils;
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;
ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
@@ -2,6 +2,7 @@
import com.ruoyi.alarm.global.service.impl.GlobalAlarmServiceImpl;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.storage.minio.service.IStorageMinioEventService;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.*;
@@ -68,12 +69,17 @@
    public void messageArrived(String topic, MqttMessage message) {
        try {
            // subscribe后得到的消息会执行到这里面
            log.info("接收消息 ã€ä¸»é¢˜ã€‘:" + topic + " ã€å†…容】:" + new String(message.getPayload()));
            log.debug("接收消息 ã€ä¸»é¢˜ã€‘:" + topic + " ã€å†…容】:" + new String(message.getPayload()));
            //进行业务处理(接收报警数据)
            GlobalAlarmServiceImpl globalAlarmService = SpringUtils.getBean(GlobalAlarmServiceImpl.class);
            globalAlarmService.receiveAlarm(topic, new String(message.getPayload(), StandardCharsets.UTF_8));
            if (topic.equals("minioEvent"))
            {
                IStorageMinioEventService storageMinioEventService = SpringUtils.getBean(IStorageMinioEventService.class);
                storageMinioEventService.parseStorageMinioEvent(new String(message.getPayload(), StandardCharsets.UTF_8));
            }
        } catch (Exception e) {
            log.info("处理mqtt消息异常:" + e);
            log.debug("处理mqtt消息异常:" + e);
        }
    }
ard-work/src/main/resources/mapper/minio/StorageMinioEventMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.storage.minio.mapper.StorageMinioEventMapper">
    <resultMap type="StorageMinioEvent" id="StorageMinioEventResult">
        <result property="id"    column="id"    />
        <result property="eventType"    column="event_type"    />
        <result property="bucketName"    column="bucket_name"    />
        <result property="eventTime"    column="event_time"    />
        <result property="host"    column="host"    />
        <result property="userName"    column="user_name"    />
        <result property="endpoint"    column="endpoint"    />
        <result property="objectName"    column="object_name"    />
        <result property="objectType"    column="object_type"    />
        <result property="objectSize"    column="object_size"    />
        <result property="createTime"    column="create_time"    />
    </resultMap>
    <sql id="selectStorageMinioEventVo">
        select id, event_type, bucket_name, event_time, host, user_name, endpoint, object_name, object_type, object_size, create_time from storage_minio_event
    </sql>
    <select id="selectStorageMinioEventList" parameterType="StorageMinioEvent" resultMap="StorageMinioEventResult">
        <include refid="selectStorageMinioEventVo"/>
        <where>
            <if test="eventType != null  and eventType != ''"> and event_type = #{eventType}</if>
            <if test="host != null  and host != ''"> and host = #{host}</if>
        </where>
    </select>
    <select id="selectStorageMinioEventById" parameterType="String" resultMap="StorageMinioEventResult">
        <include refid="selectStorageMinioEventVo"/>
        where id = #{id}
    </select>
    <insert id="insertStorageMinioEvent" parameterType="StorageMinioEvent">
        insert into storage_minio_event
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="eventType != null">event_type,</if>
            <if test="bucketName != null">bucket_name,</if>
            <if test="eventTime != null">event_time,</if>
            <if test="host != null">host,</if>
            <if test="userName != null">user_name,</if>
            <if test="endpoint != null">endpoint,</if>
            <if test="objectName != null">object_name,</if>
            <if test="objectType != null">object_type,</if>
            <if test="objectSize != null">object_size,</if>
            <if test="createTime != null">create_time,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="eventType != null">#{eventType},</if>
            <if test="bucketName != null">#{bucketName},</if>
            <if test="eventTime != null">#{eventTime},</if>
            <if test="host != null">#{host},</if>
            <if test="userName != null">#{userName},</if>
            <if test="endpoint != null">#{endpoint},</if>
            <if test="objectName != null">#{objectName},</if>
            <if test="objectType != null">#{objectType},</if>
            <if test="objectSize != null">#{objectSize},</if>
            <if test="createTime != null">#{createTime},</if>
         </trim>
    </insert>
    <update id="updateStorageMinioEvent" parameterType="StorageMinioEvent">
        update storage_minio_event
        <trim prefix="SET" suffixOverrides=",">
            <if test="eventType != null">event_type = #{eventType},</if>
            <if test="bucketName != null">bucket_name = #{bucketName},</if>
            <if test="eventTime != null">event_time = #{eventTime},</if>
            <if test="host != null">host = #{host},</if>
            <if test="userName != null">user_name = #{userName},</if>
            <if test="endpoint != null">endpoint = #{endpoint},</if>
            <if test="objectName != null">object_name = #{objectName},</if>
            <if test="objectType != null">object_type = #{objectType},</if>
            <if test="objectSize != null">object_size = #{objectSize},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteStorageMinioEventById" parameterType="String">
        delete from storage_minio_event where id = #{id}
    </delete>
    <delete id="deleteStorageMinioEventByIds" parameterType="String">
        delete from storage_minio_event where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>
ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -19,7 +19,7 @@
{
    public static void main(String[] args)
    {
        System.setProperty("spring.devtools.restart.enabled", "false");//关闭热部署
        //System.setProperty("spring.devtools.restart.enabled", "false");//关闭热部署
        SpringApplication.run(RuoYiApplication.class, args);
        System.out.println("(♥◠‿◠)ノ゙  å®‰ç‘žè¾¾4.0平台启动成功   áƒš(´ڡ`ლ)゙  \n" +
                "      ___           ___                               \n" +
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
@@ -1,6 +1,5 @@
package com.ruoyi.web.controller.system;
import com.ruoyi.device.hiksdk.util.minio.MinioUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
ruoyi-admin/src/main/resources/META-INF/spring-configuration-metadata.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,108 @@
{
  "properties": [
    {
      "name": "webrtc.enabled",
      "type": "java.lang.String",
      "description": "Description for webrtc.enabled."
  },
    {
      "name": "webrtc.host",
      "type": "java.lang.String",
      "description": "Description for webrtc.host."
    },
    {
      "name": "minio.enabled",
      "type": "java.lang.String",
      "description": "Description for minio.enabled."
    },
    {
      "name": "minio.endpoint",
      "type": "java.lang.String",
      "description": "Description for minio.endpoint."
    },
    {
      "name": "minio.accessKey",
      "type": "java.lang.String",
      "description": "Description for minio.accessKey."
    },
    {
      "name": "minio.secretKey",
      "type": "java.lang.String",
      "description": "Description for minio.secretKey."
    },
    {
      "name": "minio.path",
      "type": "java.lang.String",
      "description": "Description for minio.path."
    },
    {
      "name": "mediamtx.enabled",
      "type": "java.lang.String",
      "description": "Description for mediamtx.enabled."
    },
    {
      "name": "mediamtx.host",
      "type": "java.lang.String",
      "description": "Description for mediamtx.host."
    },
    {
      "name": "mqtt.host",
      "type": "java.lang.String",
      "description": "Description for mqtt.host."
    },
    {
      "name": "mqtt.clientId",
      "type": "java.lang.String",
      "description": "Description for mqtt.clientId."
    },
    {
      "name": "mqtt.username",
      "type": "java.lang.String",
      "description": "Description for mqtt.username."
    },
    {
      "name": "mqtt.password",
      "type": "java.lang.String",
      "description": "Description for mqtt.password."
    },
    {
      "name": "mqtt.topic",
      "type": "java.lang.String",
      "description": "Description for mqtt.topic."
    },
    {
      "name": "mqtt.timeout",
      "type": "java.lang.String",
      "description": "Description for mqtt.timeout."
    },
    {
      "name": "mqtt.keepalive",
      "type": "java.lang.String",
      "description": "Description for mqtt.keepalive."
    },
    {
      "name": "mqtt.enabled",
      "type": "java.lang.String",
      "description": "Description for mqtt.enabled."
    },
    {
      "name": "ThreadPoolTask.corePoolSize",
      "type": "java.lang.String",
      "description": "Description for ThreadPoolTask.corePoolSize."
    },
    {
      "name": "ThreadPoolTask.maxPoolSize",
      "type": "java.lang.String",
      "description": "Description for ThreadPoolTask.maxPoolSize."
    },
    {
      "name": "ThreadPoolTask.keepAliveSeconds",
      "type": "java.lang.String",
      "description": "Description for ThreadPoolTask.keepAliveSeconds."
    },
    {
      "name": "ThreadPoolTask.queueCapacity",
      "type": "java.lang.String",
      "description": "Description for ThreadPoolTask.queueCapacity."
    }
] }
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java
@@ -1,6 +1,6 @@
package com.ruoyi.quartz.task;
import com.ruoyi.device.hiksdk.util.minio.MinioUtils;
import com.ruoyi.storage.minio.utils.MinioUtils;
import io.minio.Result;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;