feat: 近期文件模块设计

This commit is contained in:
zlg
2024-07-15 14:09:20 +08:00
parent d8007b6c72
commit cb3cc9d9f5
26 changed files with 818 additions and 97 deletions

View File

@@ -167,7 +167,7 @@ public class SchisandraAuthUserDomainServiceImpl implements SchisandraAuthUserDo
/**
* @param Long
* @param
* @return
* @description 查询用户信息
* @author msz

View File

@@ -3,22 +3,22 @@ package com.schisandra.oss.application.controller;
import cn.hutool.core.util.ZipUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSON;
import com.aliyun.oss.internal.OSSConstants;
import com.google.common.base.Preconditions;
import com.schisandra.oss.application.convert.SchisandraOssMinioDTOConverter;
import com.schisandra.oss.application.convert.SchisandraOssQiniuDTOConverter;
import com.schisandra.oss.application.dto.SchisandraOssMinioDTO;
import com.schisandra.oss.application.oss.constant.OssConstant;
import com.schisandra.oss.application.oss.core.minio.MinioOssClient;
import com.schisandra.oss.application.oss.core.minio.MinioOssConfiguration;
import com.schisandra.oss.common.entity.Result;
import com.schisandra.oss.domain.bo.SchisandraOssAliBO;
import com.schisandra.oss.domain.bo.SchisandraOssMinioBO;
import com.schisandra.oss.domain.bo.SchisandraOssQiniuBO;
import com.schisandra.oss.domain.redis.RedisUtil;
import com.schisandra.oss.domain.service.SchisandraOssMinioDomainService;
import io.minio.errors.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -34,6 +34,7 @@ import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* controller
@@ -80,39 +81,46 @@ public class SchisandraOssMinioController {
* @date: 2024/5/15 13:34
*/
@PostMapping("init")
public Result initMinio(@RequestParam String userId,@RequestParam String Id) {
public Result<Object> initMinio(@RequestParam String userId, @RequestParam String Id) {
if (log.isInfoEnabled()) {
log.info("SchisandraOssMinioController.init.userId:{}", userId);
}
Preconditions.checkNotNull(userId, "用户id不能为空");
List<SchisandraOssMinioBO> list= schisandraOssMinioDomainService.getAllMinioInfoByUserId(Long.valueOf(userId));
if (list.size() != 0) {
return Result.fail(list);
}
SchisandraOssMinioBO bo = new SchisandraOssMinioBO();
bo.setId(Long.valueOf(Id));
bo.setUserId(Long.valueOf(userId));
bo.setStatus(String.valueOf(true));
if(schisandraOssMinioDomainService.update(bo)){
if (schisandraOssMinioDomainService.update(bo)) {
return minioOssConfiguration.minioOssClient(userId);
}else{
return Result.fail("初始化失败");
} else {
return Result.fail();
}
}
@PostMapping("shutdown")
public Result shutdownMinio(@RequestParam String userId,@RequestParam String Id){
public Result<Object> shutdownMinio(@RequestParam String userId, @RequestParam String Id) {
if (log.isInfoEnabled()) {
log.info("SchisandraOssMinioController.shutdown.userId:{}", JSON.toJSONString(userId));
log.info("SchisandraOssMinioController.shutdown.userId:{}", userId);
}
SchisandraOssMinioBO bo = new SchisandraOssMinioBO();
bo.setId(Long.valueOf(Id));
bo.setUserId(Long.valueOf(userId));
bo.setStatus(String.valueOf(false));
if(schisandraOssMinioDomainService.update(bo)){
SpringUtil.unregisterBean(OssConstant.OssType.MINIO + userId);
return Result.ok("关闭成功");
}else{
return Result.fail("关闭失败");
if (schisandraOssMinioDomainService.update(bo)) {
SpringUtil.unregisterBean(OssConstant.OssType.MINIO+userId);
return Result.ok();
} else {
return Result.fail();
}
}
/**
* @description: 获取文件目录信息
* @param: [target, userId, dirName]
@@ -120,10 +128,11 @@ public class SchisandraOssMinioController {
* @author zlg
* @date: 2024/6/26 13:55
*/
@Cacheable(value = "MinioListDir", key = "#userId+#bucket+#dirName")
@GetMapping("listDir")
public Result<String> listMinioInfo(@RequestParam String userId, @RequestParam String dirName, @RequestParam String bucket) throws Exception {
Preconditions.checkNotNull(userId, "不能为空");
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO + userId);
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO+userId);
bean.getMinioOssConfig().setBucketName(bucket);
return Result.ok(bean.listDir(bucket, dirName));
}
@@ -140,9 +149,10 @@ public class SchisandraOssMinioController {
Preconditions.checkNotNull(bucket, "不能为空");
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(listObjectsArgs, "不能为空");
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO + userId);
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO+userId);
bean.getMinioOssConfig().setBucketName(bucket);
HashMap<String, InputStream> list = bean.getTargetDir(listObjectsArgs);
ServletOutputStream output = response.getOutputStream();
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("下载.zip", "UTF-8"));
response.setContentType("application/octet-stream");
@@ -151,6 +161,24 @@ public class SchisandraOssMinioController {
InputStream[] inputStreams = new InputStream[list.size()];
path = list.keySet().toArray(path);
inputStreams = list.values().toArray(inputStreams);
//记录用户下载
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = dateFormat.format(date);
list.keySet().forEach( name -> {
try {
byte[] bytes = StreamUtils.copyToByteArray(list.get(name));
String key = redisUtil.buildKey(USER_OSS_PREFIX, "download", formattedDate, userId, name);
HashMap<Object, Object> map = new HashMap<>();
map.put("size", bytes.length);
map.put("time",formattedDate);
redisUtil.setNx(key, map, 30L, TimeUnit.DAYS);
} catch (IOException e) {
throw new RuntimeException(e);
}
});
ZipUtil.zip(output, path, inputStreams);
}
@@ -161,12 +189,13 @@ public class SchisandraOssMinioController {
* @author zlg
* @date: 2024/6/26 14:34
*/
@CacheEvict(value = "MinioListDir", key = "#userId+#bucket+#dirName")
@PostMapping("deleteFile")
public Result deleteMinioFile(@RequestParam String bucket, @RequestParam String userId, @RequestParam String filePath) {
Preconditions.checkNotNull(bucket, "不能为空");
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(filePath, "不能为空");
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO + userId);
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO+userId);
bean.getMinioOssConfig().setBucketName(bucket);
bean.delete(filePath);
return Result.ok();
@@ -179,30 +208,31 @@ public class SchisandraOssMinioController {
* @author zlg
* @date: 2024/6/26 14:34
*/
@PostMapping("uploadFile")
public Result<Object> uploadMinioFile(@RequestParam String userId, @RequestParam MultipartFile file, @RequestParam String fileName, @RequestParam String bucket) throws IOException {
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(fileName, "不能为空");
Preconditions.checkNotNull(bucket, "不能为空");
// 获取文件输入流
InputStream is = file.getInputStream();
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO+userId);
bean.getMinioOssConfig().setBucketName(bucket);
//设置热力图
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = dateFormat.format(date);
String key = redisUtil.buildKey(USER_OSS_PREFIX + ":" + userId, formattedDate);
int count = 1;
if (redisUtil.exist(key)) {
count = Integer.parseInt(redisUtil.get(key));
redisUtil.set(key, String.valueOf(count + 1));
String key = redisUtil.buildKey(USER_OSS_PREFIX, "upload", formattedDate, userId, fileName);
HashMap<Object, Object> map = new HashMap<>();
map.put("descreption", "这是一个文件");
map.put("size", String.valueOf(file.getSize()));
map.put("time",formattedDate);
if (bean.upLoad(is, fileName, true) != null) {
redisUtil.setNx(key, map, 30L, TimeUnit.DAYS);
return Result.ok();
} else {
redisUtil.set(key, String.valueOf(1));
return Result.fail();
}
// 获取文件输入流
InputStream is = file.getInputStream();
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO + userId);
bean.getMinioOssConfig().setBucketName(bucket);
return Result.ok(bean.upLoad(is, fileName, true));
}
@@ -213,6 +243,7 @@ public class SchisandraOssMinioController {
* @author zlg
* @date: 2024/6/27 9:41
*/
@Caching(cacheable = @Cacheable(value = "MinioListDir", key = "#userId+#bucket+#newFileName"), evict = @CacheEvict(value = "MinioListDir", key = "#userId+#bucket+#oldFileName"))
@PostMapping("renameFile")
public Result renameMinioFile(@RequestParam String userId, @RequestParam String bucket, @RequestParam String oldFileName, @RequestParam String newFileName) throws IOException {
@@ -220,7 +251,7 @@ public class SchisandraOssMinioController {
Preconditions.checkNotNull(bucket, "不能为空");
Preconditions.checkNotNull(oldFileName, "不能为空");
Preconditions.checkNotNull(newFileName, "不能为空");
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO + userId);
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO+userId);
bean.getMinioOssConfig().setBucketName(bucket);
try {
bean.rename(oldFileName, newFileName);
@@ -237,6 +268,7 @@ public class SchisandraOssMinioController {
* @author zlg
* @date: 2024/6/27 9:52
*/
@PostMapping("copyFile")
public Result copyMinioFile(@RequestParam String userId, @RequestParam String bucket, @RequestParam String oldFilePath, @RequestParam String newFilePath) throws IOException {
@@ -244,7 +276,7 @@ public class SchisandraOssMinioController {
Preconditions.checkNotNull(bucket, "不能为空");
Preconditions.checkNotNull(oldFilePath, "不能为空");
Preconditions.checkNotNull(newFilePath, "不能为空");
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO + userId);
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO+userId);
bean.getMinioOssConfig().setBucketName(bucket);
try {
bean.copy(oldFilePath, newFilePath);
@@ -266,10 +298,19 @@ public class SchisandraOssMinioController {
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(bucket, "不能为空");
Preconditions.checkNotNull(filePath, "不能为空");
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO + userId);
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO+userId);
bean.getMinioOssConfig().setBucketName(bucket);
try {
return Result.ok(bean.getMinioPreviewUrl(filePath));
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = dateFormat.format(date);
String key = redisUtil.buildKey(USER_OSS_PREFIX, "previewFile", formattedDate, userId, filePath);
HashMap<Object, Object> map = new HashMap<>();
String url=bean.getMinioPreviewUrl(filePath);
map.put("url", url);
map.put("time", formattedDate);
redisUtil.setNx(key, map, 30L, TimeUnit.DAYS);
return Result.ok(url);
} catch (Exception e) {
return Result.fail(e.getMessage());
}
@@ -288,7 +329,7 @@ public class SchisandraOssMinioController {
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(bucket, "不能为空");
Preconditions.checkNotNull(filePath, "不能为空");
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO + userId);
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO+userId);
bean.getMinioOssConfig().setBucketName(bucket);
try {
return Result.ok(bean.shareMinioFile(filePath, time));
@@ -307,7 +348,7 @@ public class SchisandraOssMinioController {
@PostMapping("seleteBucket")
public Result<String> seleteBucket(@RequestParam String userId) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
Preconditions.checkNotNull(userId, "不能为空");
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO + userId);
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO+userId);
return Result.ok(bean.selectAllBucket());
}
@@ -322,7 +363,7 @@ public class SchisandraOssMinioController {
public Result<String> createBucket(@RequestParam String userId, @RequestParam String bucket) {
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(bucket, "不能为空");
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO + userId);
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO+userId);
bean.getMinioOssConfig().setBucketName(bucket);
return Result.ok(bean.createBucket(bucket));
}
@@ -338,7 +379,7 @@ public class SchisandraOssMinioController {
public Result<String> deleteBucket(@RequestParam String userId, @RequestParam String bucket) {
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(bucket, "不能为空");
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO + userId);
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO+userId);
bean.getMinioOssConfig().setBucketName(bucket);
return Result.ok(bean.deleteBucket(bucket));
}
@@ -412,7 +453,7 @@ public class SchisandraOssMinioController {
@PostMapping("getBaseInfo")
public Result getBaseInfo(@RequestParam String fileName, @RequestParam String userId) {
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO + userId);
MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO+userId);
if (bean == null) {
log.error("容器获取失败!");
return null;

View File

@@ -7,13 +7,13 @@ import com.schisandra.oss.application.dto.SchisandraUserOssDTO;
import com.schisandra.oss.common.entity.Result;
import com.schisandra.oss.domain.bo.SchisandraUserOssBO;
import com.schisandra.oss.domain.redis.RedisUtil;
import com.schisandra.oss.domain.service.SchisandraFileHeatmapDomainService;
import com.schisandra.oss.domain.service.SchisandraUserOssDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
@@ -27,12 +27,20 @@ import java.util.List;
@Slf4j
public class SchisandraUserOssController {
@Resource
private SchisandraUserOssDomainService schisandraUserOssDomainService;
private final String USER_OSS_PREFIX = "oss:user:heat";
@Resource
RedisUtil redisUtil;
@Resource
private SchisandraUserOssDomainService schisandraUserOssDomainService;
/**
* @description: 查询用户文件热度
* @param: [userId]
* @return: com.schisandra.oss.common.entity.Result<java.lang.Object>
* @author zlg
* @date: 2024/7/11 14:41
*/
@Resource
private SchisandraFileHeatmapDomainService schisandraFileHeatmapDomainService;
/**
* 新增用户对象存储映射表
@@ -123,6 +131,7 @@ public class SchisandraUserOssController {
}
}
/**
* @description: 查询用户对象存储映射表
* @param: [userId]
@@ -131,26 +140,125 @@ public class SchisandraUserOssController {
* @date: 2024/7/11 14:41
*/
@GetMapping("selectUserOSSType")
public Result<Object> selectUserOSSType(Long userId){
public Result<Object> selectUserOSSType(Long userId) {
Preconditions.checkNotNull(userId, "不能为空");
List<SchisandraUserOssDTO> SchisandraUserOssDTOList=SchisandraUserOssDTOConverter.INSTANCE.convertBOListToDTOList(schisandraUserOssDomainService.queryOSSByUserId(userId));
List<SchisandraUserOssDTO> SchisandraUserOssDTOList = SchisandraUserOssDTOConverter.INSTANCE.convertBOListToDTOList(schisandraUserOssDomainService.queryOSSByUserId(userId));
if (SchisandraUserOssDTOList.isEmpty()) {
return Result.fail("没有查询到用户对象存储映射表信息");
}else {
} else {
return Result.ok(SchisandraUserOssDTOList);
}
}
/**
* @description: 查询用户文件热度
* @param: [userId]
* @return: com.schisandra.oss.common.entity.Result<java.lang.Object>
* @author zlg
* @date: 2024/7/11 14:41
* @date: 2024/7/13 11:09
*/
@GetMapping("selectUserFileHeat")
public Result<Object> selectUserFileHeat(@RequestParam Long userId){
Preconditions.checkNotNull(userId, "不能为空");
String key = redisUtil.buildKey(USER_OSS_PREFIX+":"+userId);
return Result.ok(redisUtil.getDataFromDirectory(key));
public Result<Object> selectUserFileHeat(@RequestParam Long userId) {
Preconditions.checkNotNull(userId, "userId不能为空");
HashMap<Object, Object> map = new HashMap<>();
map.put("download", schisandraFileHeatmapDomainService.selectUserDownloadFileHeatMap(String.valueOf(userId)));
map.put("upload", schisandraFileHeatmapDomainService.selectUserUploadFileHeatMap(String.valueOf(userId)));
return Result.ok(map);
}
/**
* @description: 查询用户上传和下载流量
* @param: [userId]
* @return: com.schisandra.oss.common.entity.Result<java.lang.Object>
* @author zlg
* @date: 2024/7/13 11:09
*/
@GetMapping("selectFileFlow")
public Result<Object> selectFileFlow(@RequestParam Long userId) {
Preconditions.checkNotNull(userId, "userId不能为空");
return Result.ok(schisandraFileHeatmapDomainService.selectUserUploadAndDownloadflow(String.valueOf(userId)));
}
/**
* @description: 查询用户上传和下载次数
* @param: [userId]
* @return: com.schisandra.oss.common.entity.Result<java.lang.Object>
* @author zlg
* @date: 2024/7/13 11:09
*/
@GetMapping("selectFileCount")
public Result<Object> selectFileCount(@RequestParam Long userId) {
Preconditions.checkNotNull(userId, "userId不能为空");
return Result.ok(schisandraFileHeatmapDomainService.selectUserUploadAndDownloadCount(String.valueOf(userId)));
}
/**
* @description: 查询用户最近上传文件
* @param: [userId]
* @return: com.schisandra.oss.common.entity.Result<java.lang.Object>
* @author zlg
* @date: 2024/7/13 11:10
*/
@GetMapping("selectRecentUploadFile")
public Result<Object> selectRecentUploadFile(@RequestParam Long userId) {
Preconditions.checkNotNull(userId, "userId不能为空");
return Result.ok(schisandraFileHeatmapDomainService.selectRecentUploadFile(String.valueOf(userId)));
}
/**
* @description: 查询用户最近下载文件
* @param: [userId]
* @return: com.schisandra.oss.common.entity.Result<java.lang.Object>
* @author zlg
* @date: 2024/7/13 11:10
*/
@GetMapping("selectRecentDownloadFile")
public Result<Object> selectRecentDownloadFile(@RequestParam Long userId) {
Preconditions.checkNotNull(userId, "userId不能为空");
return Result.ok(schisandraFileHeatmapDomainService.selectRecentDownloadFile(String.valueOf(userId)));
}
/**
* @description: 查询用户上传文件每月
* @param: [userId]
* @return: com.schisandra.oss.common.entity.Result<java.lang.Object>
* @author zlg
* @date: 2024/7/15 11:05
*/
@GetMapping("selectUploadFileDiagramPerMonth")
public Result<Object> selectFileDiagramPerMonth(@RequestParam Long userId) {
Preconditions.checkNotNull(userId, "userId不能为空");
return Result.ok(schisandraFileHeatmapDomainService.selectFileDiagramPerMonth(String.valueOf(userId),0)
.get("month"));
}
/**
* @description: 查询用户下载文件每月
* @param: [userId]
* @return: com.schisandra.oss.common.entity.Result<java.lang.Object>
* @author zlg
* @date: 2024/7/15 11:26
*/
@GetMapping("selectDownloadFileDiagramPerMonth")
public Result<Object> selectDownloadFileDiagramPerMonth(@RequestParam Long userId) {
Preconditions.checkNotNull(userId, "userId不能为空");
return Result.ok(schisandraFileHeatmapDomainService.selectFileDiagramPerMonth(String.valueOf(userId),1)
.get("month"));
}
/**
* @description: 查询用户最近预览文件
* @param: [userId]
* @return: com.schisandra.oss.common.entity.Result<java.lang.Object>
* @author zlg
* @date: 2024/7/15 11:19
*/
@GetMapping("selectPreviewFile")
public Result<Object> selectShareFileDiagramPerMonth(@RequestParam Long userId) {
Preconditions.checkNotNull(userId, "userId不能为空");
return Result.ok(schisandraFileHeatmapDomainService.selectRecentPreviewFile(String.valueOf(userId)));
}
@GetMapping("TEST")
public Result<Object> TEST() {
return Result.ok(schisandraFileHeatmapDomainService.downloadHeatMapRedisToMysql());
}
}

View File

@@ -27,7 +27,7 @@ public class SchisandraFileHeatmapDTO implements Serializable {
/**
*
*/
private Date date;
private String date;
/**
*

View File

@@ -70,6 +70,7 @@ public class MinioOssClient implements StandardOssClient {
private MinioOssConfig minioOssConfig;
public MinioOssConfig getMinioOssConfig() {
return minioOssConfig;
}
@@ -150,16 +151,20 @@ public class MinioOssClient implements StandardOssClient {
return "success";
}
public HashMap<String, String> selectAllBucket() throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
public List<HashMap<String,String>> selectAllBucket() throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
List<Bucket> list = minioClient.listBuckets();
HashMap<String, String> names = new HashMap<>();
List<HashMap<String,String>> list1=new ArrayList<>();
list.forEach(bucket -> {
names.put(bucket.name(), getMinioBucketSize(bucket.name()));
HashMap<String, String> names = new HashMap<>();
names.put("name", bucket.name());
names.put("size",getMinioBucketSize(bucket.name()));
list1.add(names);
});
return names;
return list1;
}
public HashMap<String,InputStream> getTargetDir(List<String> listObjectsArgs) throws Exception {
HashMap<String,InputStream> list = new HashMap<>();
List<WorkerWrapper> wrappers=new ArrayList<>();
listObjectsArgs.forEach(args -> {
@@ -175,7 +180,6 @@ public class MinioOssClient implements StandardOssClient {
}
return null;
}).param(r.get().objectName()).id(r.get().versionId()).callback((boolean success, String param,WorkResult<InputStream> re)->{
System.out.println("success:"+success+" param:");
}).build();
wrappers.add(wrapper1);
} catch (Exception e) {

View File

@@ -2,12 +2,16 @@ package com.schisandra.oss.application.oss.core.minio;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.schisandra.oss.application.convert.SchisandraOssAliDTOConverter;
import com.schisandra.oss.application.convert.SchisandraOssMinioDTOConverter;
import com.schisandra.oss.application.dto.SchisandraOssAliDTO;
import com.schisandra.oss.application.dto.SchisandraOssMinioDTO;
import com.schisandra.oss.application.oss.constant.OssConstant;
import com.schisandra.oss.application.oss.core.StandardOssClient;
import com.schisandra.oss.application.oss.core.minio.model.MinioOssClientConfig;
import com.schisandra.oss.application.oss.core.minio.model.MinioOssConfig;
import com.schisandra.oss.common.entity.Result;
import com.schisandra.oss.domain.bo.SchisandraOssAliBO;
import com.schisandra.oss.domain.bo.SchisandraOssMinioBO;
import com.schisandra.oss.domain.service.SchisandraOssMinioDomainService;
import io.minio.MinioClient;
@@ -16,6 +20,8 @@ import okhttp3.OkHttpClient;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
@@ -28,33 +34,67 @@ import java.util.concurrent.TimeUnit;
@Slf4j
public class MinioOssConfiguration {
@Resource
MinioOssConfiguration minioOssConfiguration;
@Resource
private SchisandraOssMinioDomainService schisandraOssMinioDomainService;
public List<SchisandraOssMinioDTO> selectAll(){
List<SchisandraOssMinioBO> schisandraOssMinioBO_list = schisandraOssMinioDomainService.selectAll();
List<SchisandraOssMinioDTO> schisandraOssAliDTO_list = new ArrayList<>();
for (SchisandraOssMinioBO schisandraOssMinioBO : schisandraOssMinioBO_list ){
SchisandraOssMinioDTO schisandraOssMinioDTO = SchisandraOssMinioDTOConverter.INSTANCE.convertBOToDTO(schisandraOssMinioBO);
schisandraOssAliDTO_list.add(schisandraOssMinioDTO);
}
return schisandraOssAliDTO_list;
}
public Result minioOssClient(String userId) {
try {
SchisandraOssMinioDTO minio = minioOssConfiguration.getSchisandraOssMinioDTO(userId);
if (minio == null) return null;
MinioOssConfig minioOssConfig = new MinioOssConfig();
minioOssConfig.setBasePath(minio.getBasePath());
minioOssConfig.setBucketName(minio.getBucketName());
minioOssConfig.setAccessKey(minio.getAccessKey());
minioOssConfig.setSecretKey(minio.getSecretKey());
minioOssConfig.setEndpoint(minio.getEndpoint());
minioOssConfig.init();
if (Boolean.parseBoolean(minio.getOpenAdvancedSetup())) {
MinioOssClientConfig minioOssClientConfig = new MinioOssClientConfig();
minioOssClientConfig.setWriteTimeout(minio.getWriteTimeout());
minioOssClientConfig.setConnectTimeout(minio.getConnectTimeout());
minioOssClientConfig.setReadTimeout(minio.getReadTimeout());
minioOssClientConfig.setFollowSslRedirects(Boolean.parseBoolean(minio.getFollowSslRedirects()));
minioOssClientConfig.setRetryOnConnectionFailure(Boolean.parseBoolean(minio.getRetryOnConnectionFailure()));
minioOssClientConfig.setPingInterval(minio.getPingInterval());
minioOssClientConfig.setFollowRedirects(Boolean.parseBoolean(minio.getFollowRedirects()));
minioOssClientConfig.setCallTimeout(minio.getCallTimeout());
minioOssConfig.setClientConfig(minioOssClientConfig);
}
SpringUtil.registerBean(OssConstant.OssType.MINIO+userId,minioOssClient(minioOssConfig));
// this.minioOssClient1= minioOssClient(minioOssConfig);
return Result.ok();
} catch (Exception e) {
log.error("MinioOssConfiguration.minioOssClient:{}", e.getMessage(), e);
return Result.fail();
}
}
public SchisandraOssMinioDTO getSchisandraOssMinioDTO(String userId) {
CompletableFuture<SchisandraOssMinioDTO> futurePrice = CompletableFuture.supplyAsync(() -> {
SchisandraOssMinioBO schisandraOssMinioBO = schisandraOssMinioDomainService.getMinioConfig(Long.valueOf(userId));
SchisandraOssMinioDTO schisandraOssMinioDTO = SchisandraOssMinioDTOConverter.INSTANCE.convertBOToDTO(schisandraOssMinioBO);
return schisandraOssMinioDTO;
SchisandraOssMinioBO minioBO = schisandraOssMinioDomainService.getMinioConfig(Long.valueOf(userId));
SchisandraOssMinioDTO minioDTO = SchisandraOssMinioDTOConverter.INSTANCE.convertBOToDTO(minioBO);
return minioDTO;
});
SchisandraOssMinioDTO minio = futurePrice.join();
if (ObjectUtil.isEmpty(minio)) {
log.error("minio oss配置信息获取失败");
return Result.fail();
}
MinioOssConfig minioOssConfig = new MinioOssConfig();
minioOssConfig.setEndpoint(minio.getEndpoint());
minioOssConfig.setAccessKey(minio.getAccessKey());
minioOssConfig.setSecretKey(minio.getSecretKey());
minioOssConfig.setBasePath(minio.getBasePath());
try {
SpringUtil.registerBean(OssConstant.OssType.MINIO + userId, minioOssClient(minioOssConfig));
return Result.ok();
} catch (Exception e) {
e.printStackTrace();
return Result.fail();
log.error("minio配置信息获取失败");
return null;
}
return minio;
}
public MinioOssClient minioOssClient(MinioOssConfig minioOssConfig) {

View File

@@ -20,6 +20,15 @@
</properties>
<dependencies>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.schisandra</groupId>
<artifactId>schisandra-cloud-storage-oss-domain</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,78 @@
package com.schisandra.oss.job.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* xxl-job config
*
* @author xuxueli 2017-04-28
*/
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.appname}")
private String appname;
@Value("${xxl.job.executor.address}")
private String address;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
/**
* 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP
*
* 1、引入依赖
* <dependency>
* <groupId>org.springframework.cloud</groupId>
* <artifactId>spring-cloud-commons</artifactId>
* <version>${version}</version>
* </dependency>
*
* 2、配置文件或者容器启动变量
* spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
*
* 3、获取IP
* String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
*/
}

View File

@@ -0,0 +1,35 @@
package com.schisandra.oss.job.job;
import com.schisandra.oss.domain.bo.SchisandraFileHeatmapBO;
import com.schisandra.oss.domain.service.SchisandraFileHeatmapDomainService;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
@Component
@Slf4j
public class OssHeatMapRedisToMysqlHandler {
@Resource
SchisandraFileHeatmapDomainService schisandraFileHeatmapDomainService;
@XxlJob("ossHeatMapRedisToMysqlHandler")
public void ossHeatMapRedisToMysqlHandler() throws Exception {
XxlJobHelper.log("ossHeatMapRedisToMysqlHandler.starter");
if (schisandraFileHeatmapDomainService.uploadHeatMapRedisToMysql()==1 ){
XxlJobHelper.log("ossHeatMapRedisToMysqlHandler.upload.success");
log.info("1");
}else {
XxlJobHelper.log("ossHeatMapRedisToMysqlHandler.fail");
}
if (schisandraFileHeatmapDomainService.downloadHeatMapRedisToMysql()==1){
XxlJobHelper.log("ossHeatMapRedisToMysqlHandler.success");
}else {
XxlJobHelper.log("ossHeatMapRedisToMysqlHandler.download.fail");
}
}
}

View File

@@ -23,15 +23,15 @@ public class SchisandraFileHeatmapBO implements Serializable {
*/
private Long userId;
/**
*
*/
private Date date;
/**
*
*/
private Long count;
private Long size;
private Date updateTime;
private Integer type;
}

View File

@@ -5,6 +5,8 @@ import com.schisandra.oss.infra.basic.entity.SchisandraFileHeatmap;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
* 文件上传热力图表 bo转换器
*
@@ -19,4 +21,6 @@ public interface SchisandraFileHeatmapBOConverter {
SchisandraFileHeatmap convertBOToEntity(SchisandraFileHeatmapBO schisandraFileHeatmapBO);
SchisandraFileHeatmapBO convertEntityToBO(SchisandraFileHeatmap schisandraFileHeatmap);
List<SchisandraFileHeatmap> convertBOListToEntityList(List<SchisandraFileHeatmapBO> schisandraFileHeatmapBOList);
}

View File

@@ -1,15 +1,12 @@
package com.schisandra.oss.domain.redis;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -42,6 +39,18 @@ public class RedisUtil {
});
return keysList;
}
public List<HashMap<Object,Object>> getDataFromDir(String directory) {
Set<String>keys=redisTemplate.keys(directory);
List<HashMap<Object,Object>> keysList=new ArrayList<>();
keys.forEach(key->{
HashMap<Object,Object> map=new HashMap<>();
HashMap<Object,Object> value= (HashMap<Object, Object>) redisTemplate.opsForValue().get(key);
map.put(key,value);
keysList.add(map);
});
return keysList;
}
@@ -133,4 +142,7 @@ public class RedisUtil {
}
public void setNx(String key, HashMap<Object, Object> map, Long time, TimeUnit timeUnit) {
redisTemplate.opsForValue().set(key, map, time, timeUnit);
}
}

View File

@@ -2,6 +2,9 @@ package com.schisandra.oss.domain.service;
import com.schisandra.oss.domain.bo.SchisandraFileHeatmapBO;
import java.util.HashMap;
import java.util.List;
/**
* 文件上传热力图表 领域service
*
@@ -25,4 +28,86 @@ public interface SchisandraFileHeatmapDomainService {
*/
Boolean delete(SchisandraFileHeatmapBO schisandraFileHeatmapBO);
/**
* @description: 查询用户上传文件热力图
* @param: [userId]
* @return: java.util.List<java.util.HashMap < java.lang.Object, java.lang.Object>>
* @author zlg
* @date: 2024/7/13 10:31
*/
List<HashMap<Object, Object>> selectUserUploadFileHeatMap(String userId);
/**
* @description: 查询用户下载文件热力图
* @param: [userId]
* @return: java.util.List<java.util.HashMap < java.lang.Object, java.lang.Object>>
* @author zlg
* @date: 2024/7/13 10:32
*/
List<HashMap<Object, Object>> selectUserDownloadFileHeatMap(String userId);
/**
* @description: 查询用户上传和下载流量
* @param: [userId]
* @return: java.util.HashMap<java.lang.Object, java.lang.Object>
* @author zlg
* @date: 2024/7/13 10:32
*/
HashMap<Object, Object> selectUserUploadAndDownloadflow(String userId);
/**
* @description: 将redis中的文件上传热力图数据同步到mysql中
* @param: []
* @return: int
* @author zlg
* @date: 2024/7/13 10:32
*/
int uploadHeatMapRedisToMysql();
/**
* @description: 将redis中的文件下载热力图数据同步到mysql中
* @param: []
* @return: int
* @author zlg
* @date: 2024/7/13 10:32
*/
int downloadHeatMapRedisToMysql();
/**
* @description: 查询用户最近上传的文件
* @param: [userId]
* @return: java.util.List<java.util.HashMap < java.lang.Object, java.lang.Object>>
* @author zlg
* @date: 2024/7/13 10:32
*/
List<HashMap<Object, Object>> selectRecentUploadFile(String userId);
/**
* @description: 查询用户最近下载的文件
* @param: [userId]
* @return: java.util.List<java.util.HashMap < java.lang.Object, java.lang.Object>>
* @author zlg
* @date: 2024/7/13 10:32
*/
List<HashMap<Object, Object>> selectRecentDownloadFile(String userId);
/**
* @description: 查询用户上传和下载次数
* @param: [userId]
* @return: java.util.HashMap<java.lang.Object, java.lang.Object>
* @author zlg
* @date: 2024/7/13 10:33
*/
HashMap<Object, Object> selectUserUploadAndDownloadCount(String userId);
/**
* @description: 插入文件上传热力图数据
* @param: [schisandraFileHeatmapBOList]
* @return: int
* @author zlg
* @date: 2024/7/13 10:33
*/
int insertFileHeatmapBatch(List<SchisandraFileHeatmapBO> schisandraFileHeatmapBOList);
HashMap<Object,Object> selectFileDiagramPerMonth(String userId,int type);
List<HashMap<Object,Object>> selectRecentPreviewFile(String userId);
}

View File

@@ -31,6 +31,7 @@ public interface SchisandraOssMinioDomainService {
SchisandraOssMinioBO getMinioConfig(Long userId);
List<SchisandraOssMinioBO> getAllMinioInfoByUserId(Long userId);
List<SchisandraOssMinioBO> getAllMinioInfo();
List<SchisandraOssMinioBO> selectAll();

View File

@@ -1,6 +1,9 @@
package com.schisandra.oss.domain.service.impl;
import cn.hutool.core.io.unit.DataSizeUtil;
import com.schisandra.oss.domain.convert.SchisandraFileHeatmapBOConverter;
import com.schisandra.oss.domain.bo.SchisandraFileHeatmapBO;
import com.schisandra.oss.domain.redis.RedisUtil;
import com.schisandra.oss.domain.convert.SchisandraFileHeatmapBOConverter;
import com.schisandra.oss.domain.service.SchisandraFileHeatmapDomainService;
import com.schisandra.oss.infra.basic.entity.SchisandraFileHeatmap;
@@ -9,6 +12,12 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
import static jdk.nashorn.internal.runtime.GlobalFunctions.encodeURIComponent;
/**
* 文件上传热力图表 领域service实现了
@@ -22,6 +31,9 @@ public class SchisandraFileHeatmapDomainServiceImpl implements SchisandraFileHea
@Resource
private SchisandraFileHeatmapService schisandraFileHeatmapService;
@Resource
RedisUtil redisUtil;
private final String USER_OSS_PREFIX = "oss:user:heat";
@Override
public Boolean add(SchisandraFileHeatmapBO schisandraFileHeatmapBO) {
@@ -42,4 +54,175 @@ public class SchisandraFileHeatmapDomainServiceImpl implements SchisandraFileHea
return schisandraFileHeatmapService.update(schisandraFileHeatmap) > 0;
}
@Override
public List<HashMap<Object, Object>> selectUserUploadFileHeatMap(String userId) {
String dire=redisUtil.buildKey(USER_OSS_PREFIX,"upload","*",userId,"*");
List<HashMap<Object,Object>> list=redisUtil.getDataFromDir(dire);
Map<Object, List<HashMap<Object, Object>>> list1=list.stream().collect(Collectors
.groupingBy(obj->String.valueOf(obj.keySet().toArray()[0]).split(":")[4]));
List<HashMap<Object,Object>> mapList =new ArrayList<>();
list1.keySet().forEach(obj->{
HashMap<Object,Object> map=new HashMap<>();
map.put(obj,Long.valueOf(list1.get(obj).size()));
mapList.add(map);
});
return mapList;
}
@Override
public List<HashMap<Object, Object>> selectUserDownloadFileHeatMap(String userId) {
String dire=redisUtil.buildKey(USER_OSS_PREFIX,"download","*",userId,"*");
List<HashMap<Object,Object>> list=redisUtil.getDataFromDir(dire);
Map<Object, List<HashMap<Object, Object>>> list1=list.stream().collect(Collectors
.groupingBy(obj->String.valueOf(obj.keySet().toArray()[0]).split(":")[4]));
List<HashMap<Object,Object>> mapList =new ArrayList<>();
list1.keySet().forEach(obj->{
HashMap<Object,Object> map=new HashMap<>();
map.put(obj,Long.valueOf(list1.get(obj).size()));
mapList.add(map);
});
return mapList;
}
@Override
public HashMap<Object, Object> selectUserUploadAndDownloadflow(String userId) {
Long uploadflow=schisandraFileHeatmapService.selectUserUploadAndDownloadflow(userId,0);
Long downloadflow=schisandraFileHeatmapService.selectUserUploadAndDownloadflow(userId,1);
HashMap<Object,Object> map=new HashMap<>();
map.put("uploadflow", DataSizeUtil.format(uploadflow));
map.put("downloadflow",DataSizeUtil.format(downloadflow));
return map;
}
@Override
public int uploadHeatMapRedisToMysql() {
Date date =new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = dateFormat.format(date);
String dire=redisUtil.buildKey(USER_OSS_PREFIX,"upload",formattedDate,"*");
List<HashMap<Object,Object>> list=redisUtil.getDataFromDir(dire);
if (list.isEmpty()){
return 1;
}
Map<Object, List<HashMap<Object, Object>>> list1=list.stream().collect(Collectors
.groupingBy(obj->String.valueOf(obj.keySet().toArray()[0]).split(":")[5]));
List<SchisandraFileHeatmapBO> schisandraFileHeatmapBOList = new ArrayList<>();
list1.keySet().forEach(obj->{
SchisandraFileHeatmapBO schisandraFileHeatmapBO1 = new SchisandraFileHeatmapBO();
schisandraFileHeatmapBO1.setUserId(Long.valueOf(String.valueOf(obj)));
schisandraFileHeatmapBO1.setCount(Long.valueOf(list1.get(obj).size()));
schisandraFileHeatmapBO1.setType(0);
schisandraFileHeatmapBO1.setSize(0L);
list1.get(obj).forEach(obj1->{
String key= String.valueOf(obj1.keySet().toArray()[0]);
HashMap<Object,Object>temp= (HashMap<Object, Object>) obj1.get(key);
schisandraFileHeatmapBO1.setSize(Long.valueOf(temp.get("size").toString())
+ schisandraFileHeatmapBO1.getSize());
});
schisandraFileHeatmapBOList.add(schisandraFileHeatmapBO1);
});
return insertFileHeatmapBatch(schisandraFileHeatmapBOList);
}
@Override
public int downloadHeatMapRedisToMysql() {
Date date =new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = dateFormat.format(date);
String dire=redisUtil.buildKey(USER_OSS_PREFIX,"download",formattedDate,"*");
List<HashMap<Object,Object>> list=redisUtil.getDataFromDir(dire);
if (list.isEmpty()){
return 1;
}
Map<Object, List<HashMap<Object, Object>>> list1=list.stream().collect(Collectors
.groupingBy(obj->String.valueOf(obj.keySet().toArray()[0]).split(":")[5]));
List<SchisandraFileHeatmapBO> schisandraFileHeatmapBOList = new ArrayList<>();
list1.keySet().forEach(obj->{
SchisandraFileHeatmapBO schisandraFileHeatmapBO1 = new SchisandraFileHeatmapBO();
schisandraFileHeatmapBO1.setUserId(Long.valueOf(String.valueOf(obj)));
schisandraFileHeatmapBO1.setCount(Long.valueOf(list1.get(obj).size()));
schisandraFileHeatmapBO1.setType(1);
schisandraFileHeatmapBO1.setSize(0L);
list1.get(obj).forEach(obj1->{
String key= String.valueOf(obj1.keySet().toArray()[0]);
HashMap<Object,Object>temp= (HashMap<Object, Object>) obj1.get(key);
schisandraFileHeatmapBO1.setSize(Long.valueOf(temp.get("size").toString())
+ schisandraFileHeatmapBO1.getSize());
});
schisandraFileHeatmapBOList.add(schisandraFileHeatmapBO1);
});
return insertFileHeatmapBatch(schisandraFileHeatmapBOList);
}
@Override
public List<HashMap<Object, Object>> selectRecentUploadFile(String userId) {
String recent=redisUtil.buildKey(USER_OSS_PREFIX,"upload","*",userId,"*");
List<HashMap<Object,Object>> list=redisUtil.getDataFromDir(recent);
List<HashMap<Object, Object>> list1 = new ArrayList<>();
list.forEach(obj->{
HashMap<Object,Object> recentFile = new HashMap<>();
String key= String.valueOf(obj.keySet().toArray()[0]);
String fileName=key.split(":")[6];
HashMap<Object,Object>temp= (HashMap<Object, Object>) obj.get(key);
recentFile.put(fileName,temp);
list1.add(recentFile);
});
return list1;
}
@Override
public List<HashMap<Object, Object>> selectRecentDownloadFile(String userId) {
String recent=redisUtil.buildKey(USER_OSS_PREFIX,"download","*",userId,"*");
List<HashMap<Object,Object>> list=redisUtil.getDataFromDir(recent);
List<HashMap<Object, Object>> list1 = new ArrayList<>();
list.forEach(obj->{
HashMap<Object,Object> recentFile = new HashMap<>();
String key= String.valueOf(obj.keySet().toArray()[0]);
String fileName=key.split(":")[6];
HashMap<Object,Object>temp= (HashMap<Object, Object>) obj.get(key);
recentFile.put(fileName,temp);
list1.add(recentFile);
});
return list1;
}
@Override
public HashMap<Object, Object> selectUserUploadAndDownloadCount(String userId) {
HashMap<Object, Object> map = new HashMap<>();
map.put("upload", schisandraFileHeatmapService.selectUserUploadAndDownloadCount(userId,0));
map.put("download", schisandraFileHeatmapService.selectUserUploadAndDownloadCount(userId,1));
return map;
}
@Override
public int insertFileHeatmapBatch(List<SchisandraFileHeatmapBO> schisandraFileHeatmapBOList) {
List<SchisandraFileHeatmap> schisandraFileHeatmapList=SchisandraFileHeatmapBOConverter
.INSTANCE.convertBOListToEntityList(schisandraFileHeatmapBOList);
return schisandraFileHeatmapService.insertFileHeatmapBatch(schisandraFileHeatmapList);
}
@Override
public HashMap<Object, Object> selectFileDiagramPerMonth(String userId,int type) {
return schisandraFileHeatmapService.selectFileDiagramPerMonth(userId, type);
}
@Override
public List<HashMap<Object, Object>> selectRecentPreviewFile(String userId) {
String recent=redisUtil.buildKey(USER_OSS_PREFIX,"previewFile","*",userId,"*");
List<HashMap<Object,Object>> list=redisUtil.getDataFromDir(recent);
List<HashMap<Object, Object>> list1 = new ArrayList<>();
list.forEach(obj->{
HashMap<Object,Object> recentFile = new HashMap<>();
String key= String.valueOf(obj.keySet().toArray()[0]);
String fileName=key.split(":")[6];
HashMap<Object,Object>temp= (HashMap<Object, Object>) obj.get(key);
recentFile.put(fileName,temp);
list1.add(recentFile);
});
return list1;
}
}

View File

@@ -79,6 +79,13 @@ public class SchisandraOssMinioDomainServiceImpl implements SchisandraOssMinioDo
return schisandraOssMinioBO;
}
@Override
public List<SchisandraOssMinioBO> getAllMinioInfoByUserId(Long userId) {
List<SchisandraOssMinio> schisandraOssMinios = schisandraOssMinioService.getAllMinioInfoByUserId(userId);
List<SchisandraOssMinioBO> schisandraOssMinioBO = SchisandraOssMinioBOConverter.INSTANCE.convertEntityToBOList(schisandraOssMinios);
return schisandraOssMinioBO;
}
@Override
public List<SchisandraOssMinioBO> getAllMinioInfo() {
List<SchisandraOssMinio> allMinioInfo = schisandraOssMinioService.getAllMinioInfo();

View File

@@ -31,11 +31,6 @@ public class SchisandraFileHeatmap implements Serializable {
@Column("user_id")
private Long userId;
/**
*
*/
@Column("date")
private Date date;
/**
*
@@ -43,5 +38,13 @@ public class SchisandraFileHeatmap implements Serializable {
@Column("count")
private Long count;
@Column("type")
private Integer type;
@Column(value = "update_time",onUpdateValue = "now()",onInsertValue ="now()" )
private Date updateTime;
@Column("size")
private Long size;
}

View File

@@ -2,6 +2,9 @@ package com.schisandra.oss.infra.basic.service;
import com.schisandra.oss.infra.basic.entity.SchisandraFileHeatmap;
import java.util.HashMap;
import java.util.List;
/**
* 文件上传热力图表 表服务接口
*
@@ -42,5 +45,18 @@ public interface SchisandraFileHeatmapService {
*/
boolean deleteById(Long id);
/**
* @description: 将redis中的热力图数据保存到mysql中
* @param: [schisandraFileHeatmaps]
* @return: boolean
* @author zlg
* @date: 2024/7/11 16:05
*/
int insertFileHeatmapBatch(List<SchisandraFileHeatmap> schisandraFileHeatmaps);
Long selectUserUploadAndDownloadflow (String userId,int type);
Long selectUserUploadAndDownloadCount(String userId ,int type);
HashMap<Object,Object>selectFileDiagramPerMonth(String userId,int type);
}

View File

@@ -46,7 +46,7 @@ public interface SchisandraOssMinioService {
*/
boolean deleteById(Long id);
List<SchisandraOssMinio> getAllMinioInfoByUserId(Long userId);
SchisandraOssMinio getMinioConfig(Long userId);
List<SchisandraOssMinio> getAllMinioInfo();

View File

@@ -1,11 +1,21 @@
package com.schisandra.oss.infra.basic.service.impl;
import com.schisandra.oss.infra.basic.entity.SchisandraFileHeatmap;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.row.Db;
import com.schisandra.oss.infra.basic.dao.SchisandraFileHeatmapDao;
import com.schisandra.oss.infra.basic.entity.SchisandraFileHeatmap;
import com.schisandra.oss.infra.basic.entity.table.SchisandraFileHeatmapTableDef;
import com.schisandra.oss.infra.basic.service.SchisandraFileHeatmapService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import static com.mybatisflex.core.query.QueryMethods.*;
import static io.lettuce.core.protocol.CommandKeyword.DB;
/**
* 文件上传热力图表 表服务实现类
@@ -49,7 +59,7 @@ public class SchisandraFileHeatmapServiceImpl implements SchisandraFileHeatmapSe
*/
@Override
public int update(SchisandraFileHeatmap schisandraFileHeatmap) {
return this.schisandraFileHeatmapDao.update(schisandraFileHeatmap,true);
return this.schisandraFileHeatmapDao.update(schisandraFileHeatmap, true);
}
/**
@@ -63,5 +73,60 @@ public class SchisandraFileHeatmapServiceImpl implements SchisandraFileHeatmapSe
return this.schisandraFileHeatmapDao.deleteById(id) > 0;
}
/**
* @description: 将redis中的数据同步到mysql中
* @param: [schisandraFileHeatmaps]
* @return: boolean
* @author zlg
* @date: 2024/7/11 16:06
*/
@Override
public int insertFileHeatmapBatch(List<SchisandraFileHeatmap> schisandraFileHeatmaps) {
return schisandraFileHeatmapDao.insertBatch(schisandraFileHeatmaps);
}
@Override
public Long selectUserUploadAndDownloadflow(String userId, int type) {
QueryWrapper queryFlow = new QueryWrapper().select(sum(SchisandraFileHeatmapTableDef.SCHISANDRA_FILE_HEATMAP.SIZE))
.from(SchisandraFileHeatmapTableDef.SCHISANDRA_FILE_HEATMAP)
.where(SchisandraFileHeatmapTableDef.SCHISANDRA_FILE_HEATMAP.USER_ID.eq(userId))
.and(SchisandraFileHeatmapTableDef.SCHISANDRA_FILE_HEATMAP.TYPE.eq(type));
Long count = schisandraFileHeatmapDao.selectOneByQueryAs(queryFlow, Long.class);
if (count == null) {
return 0L;
} else {
return count;
}
}
@Override
public Long selectUserUploadAndDownloadCount(String userId, int type) {
QueryWrapper queryFlow = new QueryWrapper().select(sum(SchisandraFileHeatmapTableDef.SCHISANDRA_FILE_HEATMAP.COUNT))
.from(SchisandraFileHeatmapTableDef.SCHISANDRA_FILE_HEATMAP)
.where(SchisandraFileHeatmapTableDef.SCHISANDRA_FILE_HEATMAP.USER_ID.eq(userId))
.and(SchisandraFileHeatmapTableDef.SCHISANDRA_FILE_HEATMAP.TYPE.eq(type));
Long count = schisandraFileHeatmapDao.selectOneByQueryAs(queryFlow, Long.class);
if (count == null) {
return 0L;
} else {
return count;
}
}
@Override
public HashMap<Object,Object> selectFileDiagramPerMonth(String userId, int type) {
QueryWrapper queryFlow = new QueryWrapper().select(sum(SchisandraFileHeatmapTableDef.SCHISANDRA_FILE_HEATMAP.COUNT).as("count"),
dateFormat(SchisandraFileHeatmapTableDef.SCHISANDRA_FILE_HEATMAP.UPDATE_TIME,"%Y-%m").as("date"))
.from(SchisandraFileHeatmapTableDef.SCHISANDRA_FILE_HEATMAP)
.groupBy(dateFormat(SchisandraFileHeatmapTableDef.SCHISANDRA_FILE_HEATMAP.UPDATE_TIME, "%Y-%m"))
.where(SchisandraFileHeatmapTableDef.SCHISANDRA_FILE_HEATMAP.USER_ID.eq(userId))
.and(SchisandraFileHeatmapTableDef.SCHISANDRA_FILE_HEATMAP.TYPE.eq(type));
HashMap<Object, Object> map = new HashMap<>();
map.put("month", schisandraFileHeatmapDao.selectRowsByQuery(queryFlow));
return map;
}
}

View File

@@ -73,6 +73,12 @@ public class SchisandraOssMinioServiceImpl implements SchisandraOssMinioService
return this.schisandraOssMinioDao.deleteById(id) > 0;
}
@Override
public List<SchisandraOssMinio> getAllMinioInfoByUserId(Long userId) {
return schisandraOssMinioDao.selectListByCondition(SchisandraOssMinioTableDef.SCHISANDRA_OSS_MINIO.USER_ID.eq(userId)
.and(SchisandraOssMinioTableDef.SCHISANDRA_OSS_MINIO.STATUS.eq("true")));
}
@Override
public SchisandraOssMinio getMinioConfig(Long userId) {

View File

@@ -5,8 +5,11 @@
<resultMap id="BaseResultMap" type="com.schisandra.oss.infra.basic.entity.SchisandraFileHeatmap">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="user_id" jdbcType="BIGINT" property="userId"/>
<result column="date" jdbcType="DATE" property="date"/>
<result column="count" jdbcType="BIGINT" property="count"/>
<result column="size" jdbcType="BIGINT" property="size"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="type" jdbcType="INTEGER" property="type"/>
</resultMap>
</mapper>

View File

@@ -58,6 +58,11 @@
<artifactId>schisandra-cloud-storage-oss-infra</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.schisandra</groupId>
<artifactId>schisandra-cloud-storage-oss-application-job</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>

View File

@@ -3,6 +3,7 @@ package com.schisandra.oss;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.ComponentScan;
/**
@@ -14,6 +15,7 @@ import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan("com.schisandra")
@MapperScan("com.schisandra.**.dao")
@EnableCaching
public class OssApplication {
public static void main(String[] args) {
SpringApplication.run(OssApplication.class);

View File

@@ -63,3 +63,16 @@ mybatis-flex:
mapper-locations:
- "classpath*:/mapper/**/*.xml"
# xxl-job配置
xxl:
job:
admin:
addresses: http://127.0.0.1:8080/xxl-job-admin
accessToken: default_token
executor:
appname: schisandra-cloud-storage-oss
address:
ip: 127.0.0.1
port: 9999
logpath: /data/applogs/xxl-job/jobhandler
logretentiondays: 30

View File

@@ -35,4 +35,5 @@ public class GenerateAccessTokenJob {
XxlJobHelper.log("generateAccessTokenJobHandler.error");
}
}
//ossHeatMapRedisToMysqlHandler
}