Merge pull request 'master' (#11) from master into dev

Reviewed-on: https://git.landaiqing.space/Schisandra-Cloud-Storage/schisandra-cloud-storage/pulls/11
This commit is contained in:
2024-07-13 11:32:05 +08:00
34 changed files with 526 additions and 253 deletions

View File

@@ -1,5 +1,6 @@
package com.schisandra.auth.api;
import com.schisandra.auth.entity.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

View File

@@ -120,7 +120,13 @@ public class SchisandraAuthPermissionController {
return Result.fail("删除权限信息失败");
}
}
/**
* @description: 查询用户菜单权限
* @param: [userId]
* @return: com.schisandra.auth.common.entity.Result<java.lang.Object>
* @author: landaiqing
* @date: 2024/7/8 下午4:09
*/
@GetMapping("selectUserPermission")
public Result<Object> selectUserPermission(@RequestParam("userId") Long userId) {
if (userId == null) {

View File

@@ -1,6 +1,5 @@
package com.schisandra.auth.application.controller;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
@@ -32,9 +31,12 @@ import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.http.HttpRequest;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -367,7 +369,7 @@ public class SchisandraAuthUserController {
public Result getClientToken(String clientId) {
String key = redisUtil.buildKey(WX_LOGIN_TOKEN, clientId);
String result = redisUtil.get(key);
if(StringUtils.isBlank(result)){
if (StringUtils.isBlank(result)) {
return Result.fail();
}
return Result.ok(JSONObject.parseObject(result));

View File

@@ -32,7 +32,7 @@ public class SchisandraAuthPermissionDTO implements Serializable {
/**
* 权限路径
*/
private String menuUrl;
private String path;
/**
* 权限状态
*/
@@ -49,25 +49,6 @@ public class SchisandraAuthPermissionDTO implements Serializable {
* 权限标识
*/
private String permissionKey;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updateBy;
/**
* 更新时间
*/
private Date updateTime;
/**
* 是否删除
*/
private Integer isDeleted;

View File

@@ -2,11 +2,33 @@ package com.schisandra.auth.common.utils;
import java.lang.reflect.Field;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.function.Function;
/**
* @ClassName: Tree
* @Author: landaiqing
* @Description:
* @CreateTime: 2024/01/05 15:32
*/
public class TreeUtils {
/**
* @param nodesList 数据
* @param pid 父ID
* @param idFieldName ID字段名称
* @param parentIdFieldName 父ID字段名称
* @param childrenFieldName 子集字段名称
* @param function 操作子集函数 通常可以做排序 如stream -> stream.sorted(Comparator.comparing(TreeNode::getId, Comparator.reverseOrder())) 根据ID倒序
* 如果不想排序直接 stream -> stream
* @param <T>
* @param <R>
* @return
*/
public static <T, R> List<T> buildTree(List<T> nodesList, R pid, String idFieldName, String parentIdFieldName, String childrenFieldName, Function<Stream<T>, Stream<T>> function) {
Map<Object, List<T>> map = nodesList.stream().collect(Collectors.groupingBy(a -> {
try {
Field field = a.getClass().getDeclaredField(parentIdFieldName);
@@ -18,6 +40,7 @@ public class TreeUtils {
}));
List<T> roots = new ArrayList<>();
// 逐层构建树结构
roots.addAll(function.apply(Optional.ofNullable(map.get(pid)).orElse(new ArrayList<>()).stream()).collect(Collectors.toList()));
Queue<T> queue = new LinkedList<>(roots);
@@ -41,7 +64,8 @@ public class TreeUtils {
throw new RuntimeException("Error reading id field: " + e.getMessage());
}
}
return roots;
}
}
}

View File

@@ -26,7 +26,7 @@ SchisandraAuthPermissionBO implements Serializable {
private Integer type;
private String menuUrl;
private String path;
private Integer status;

View File

@@ -52,11 +52,11 @@ public class SchisandraAuthPermissionDomainServiceImpl implements SchisandraAuth
public Result<Object> selectUserPermissionTree(Long userId) {
SchisandraAuthUserRole schisandraAuthRole = schisandraAuthUserRoleService.queryById(userId);
if (schisandraAuthRole == null||schisandraAuthRole.getRoleId()==null) {
return Result.ok("用户没有角色");
return Result.fail("用户没有角色");
}
List<SchisandraAuthRolePermission> schisandraAuthRolePermissions = schisandraAuthRolePermissionService.queryByRoleId(schisandraAuthRole.getRoleId());
if (schisandraAuthRolePermissions.size()==0){
return Result.ok("当前角色用户没有权限");
return Result.fail("当前角色用户没有权限");
}
List<SchisandraAuthPermissionBO> schisandraAuthPermissions =new ArrayList<>();
List<SchisandraAuthPermissionBO> schisandraAuthPermissionParents = new ArrayList<>();
@@ -77,55 +77,58 @@ public class SchisandraAuthPermissionDomainServiceImpl implements SchisandraAuth
/**
* @description: 更新
* @param: [schisandraAuthPermissionBO]
* @return: java.lang.Object
* @param: [schisandraAuthPermissionBO]
* @return: java.lang.Object
* @author zhang
* @date: 2024/4/17 17:06
*/
*/
@Override
public int update(SchisandraAuthPermissionBO schisandraAuthPermissionBO) {
SchisandraAuthPermission schisandraAuthPermission = SchisandraAuthPermissionBOConverter.INSTANCE.convertBOToEntity(schisandraAuthPermissionBO);
return schisandraAuthPermissionService.update(schisandraAuthPermission);
}
/**
* @description: 删除
* @param: [schisandraAuthPermissionBO]
* @return: java.lang.Object
* @author zhang
* @date: 2024/4/17 17:06
*/
/**
* @description: 删除
* @param: [schisandraAuthPermissionBO]
* @return: java.lang.Object
* @author zhang
* @date: 2024/4/17 17:06
*/
@Override
public Object delete(SchisandraAuthPermissionBO schisandraAuthPermissionBO) {
SchisandraAuthPermission schisandraAuthPermission = SchisandraAuthPermissionBOConverter.INSTANCE.convertBOToEntity(schisandraAuthPermissionBO);
boolean schisandraAuthPermission1 =schisandraAuthPermissionService.deleteById(schisandraAuthPermission.getId());
boolean schisandraAuthPermission1 = schisandraAuthPermissionService.deleteById(schisandraAuthPermission.getId());
return schisandraAuthPermission1;
}
/**
* @description: 插入
* @param: [schisandraAuthPermissionBO]
* @return: java.lang.Object
* @author zhang
* @date: 2024/4/17 17:06
*/
/**
* @description: 插入
* @param: [schisandraAuthPermissionBO]
* @return: java.lang.Object
* @author zhang
* @date: 2024/4/17 17:06
*/
@Override
public Object insert(SchisandraAuthPermissionBO schisandraAuthPermissionBO) {
SchisandraAuthPermission schisandraAuthPermission = SchisandraAuthPermissionBOConverter.INSTANCE.convertBOToEntity(schisandraAuthPermissionBO);
SchisandraAuthPermission schisandraAuthPermission1 =schisandraAuthPermissionService.insert(schisandraAuthPermission);
SchisandraAuthPermission schisandraAuthPermission1 = schisandraAuthPermissionService.insert(schisandraAuthPermission);
return schisandraAuthPermission1;
}
/**
* @description: 查询
* @param: [schisandraAuthPermissionBO]
* @return: java.lang.Object
* @author zhang
* @date: 2024/4/17 17:07
*/
/**
* @description: 查询
* @param: [schisandraAuthPermissionBO]
* @return: java.lang.Object
* @author zhang
* @date: 2024/4/17 17:07
*/
@Override
public SchisandraAuthPermissionBO select(SchisandraAuthPermissionBO schisandraAuthPermissionBO) {
SchisandraAuthPermission schisandraAuthPermission = SchisandraAuthPermissionBOConverter.INSTANCE.convertBOToEntity(schisandraAuthPermissionBO);
SchisandraAuthPermission schisandraAuthPermission1 =schisandraAuthPermissionService.queryById(schisandraAuthPermission.getId());
SchisandraAuthPermission schisandraAuthPermission1 = schisandraAuthPermissionService.queryById(schisandraAuthPermission.getId());
SchisandraAuthPermissionBO schisandraAuthPermissionBO1 = SchisandraAuthPermissionBOConverter.INSTANCE.convertEntityToBO(schisandraAuthPermission1);
return schisandraAuthPermissionBO1;
}

View File

@@ -29,7 +29,7 @@ public class SchisandraAuthPermission implements Serializable {
private Integer type;
private String menuUrl;
private String path;
private Integer status;

View File

@@ -102,7 +102,7 @@ public class SchisandraSocialUserServiceImpl implements SchisandraSocialUserServ
}
/**
* @description: 根据appId和openId查询用户
* @description: 根据openId查询用户
* @param: [appId, openId]
* @return: com.schisandra.auth.infra.basic.entity.SchisandraSocialUser
* @author: landaiqing

View File

@@ -7,7 +7,7 @@
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="parentId" column="parent_id" jdbcType="INTEGER"/>
<result property="type" column="type" jdbcType="INTEGER"/>
<result property="menuUrl" column="menu_url" jdbcType="VARCHAR"/>
<result property="path" column="path" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="INTEGER"/>
<result property="show" column="show" jdbcType="INTEGER"/>
<result property="icon" column="icon" jdbcType="VARCHAR"/>

View File

@@ -2,21 +2,16 @@ package com.schisandra.oss.application.controller;
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions;
import com.schisandra.oss.application.convert.SchisandraOssAliDTOConverter;
import com.schisandra.oss.application.dto.SchisandraOssAliDTO;
import com.schisandra.oss.application.oss.core.ali.AliOssClient;
import com.schisandra.oss.application.oss.core.ali.AliOssConfiguration;
import com.schisandra.oss.application.oss.model.OssInfo;
import com.schisandra.oss.common.entity.Result;
import com.schisandra.oss.domain.bo.SchisandraOssAliBO;
import com.schisandra.oss.domain.redis.RedisUtil;
import com.schisandra.oss.domain.service.SchisandraOssAliDomainService;
import com.schisandra.oss.infra.basic.dao.SchisandraOssAliDao;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -33,7 +28,7 @@ import java.util.List;
/**
* controller
* controller
*
* @author landaiqing
* @since 2024-05-14 20:45:32
@@ -54,6 +49,7 @@ public class SchisandraOssAliController {
/**
* 返回ali表所有数据
*
* @return
*/
@GetMapping("returnAll")
@@ -62,9 +58,8 @@ public class SchisandraOssAliController {
}
@GetMapping("init")
public void init(@RequestParam String userId){
public void init(@RequestParam String userId) {
if (log.isInfoEnabled()) {
log.info("SchisandraOssAliController.init.userId:{}", userId);
}
@@ -98,7 +93,6 @@ public class SchisandraOssAliController {
}
/**
* 修改
*/
@@ -146,22 +140,21 @@ public class SchisandraOssAliController {
* @date: 2024/7/5 13:55
*/
@GetMapping("listDir")
public Result<String> listAliDir(@RequestParam String userId,@RequestParam String bucket,@RequestParam String prefix) throws Exception {
public Result<String> listAliDir(@RequestParam String userId, @RequestParam String bucket, @RequestParam String prefix) throws Exception {
Preconditions.checkNotNull(userId, "不能为空");
AliOssClient bean = SpringUtil.getBean(userId);
bean.getAliOssConfig().setBucketName(bucket);
if(prefix==null)
prefix="";
return Result.ok(bean.listAliInfo(bucket,prefix));
if (prefix == null)
prefix = "";
return Result.ok(bean.listAliInfo(bucket, prefix));
}
/**
* 查找bucket
*
* @param userId
*/
@PostMapping("seleteBucket")
public Result<String> seleteBucket(@RequestParam String userId) {
Preconditions.checkNotNull(userId, "不能为空");
@@ -187,6 +180,7 @@ public class SchisandraOssAliController {
/**
* 删除bucket
*
* @param userId
* @param bucket
* @return
@@ -214,15 +208,15 @@ public class SchisandraOssAliController {
Preconditions.checkNotNull(bucket, "不能为空");
//设置热力图
Date date =new Date();
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));
}else {
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));
} else {
redisUtil.set(key, String.valueOf(1));
}
// 获取文件输入流
@@ -233,7 +227,6 @@ public class SchisandraOssAliController {
}
/**
* @description: 下载文件
* @param: [schisandraOssMinioDTO]
@@ -251,8 +244,9 @@ public class SchisandraOssAliController {
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filePath.substring(filePath.lastIndexOf("/") + 1), "UTF-8"));
response.setContentType("application/octet-stream");
response.setCharacterEncoding("UTF-8");
bean.downLoad(output,filePath);
bean.downLoad(output, filePath);
}
/**
* @description: 删除文件
* @param: [schisandraOssAliDTO]
@@ -288,7 +282,7 @@ public class SchisandraOssAliController {
bean.getAliOssConfig().setBucketName(bucket);
try {
bean.rename(oldFileName, newFileName);
}catch (Exception e){
} catch (Exception e) {
return Result.fail(e.getMessage());
}
return Result.ok();

View File

@@ -3,21 +3,16 @@ 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.amazonaws.util.IOUtils;
import com.google.common.base.Preconditions;
import com.google.gson.Gson;
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.core.minio.MinioOssClient;
import com.schisandra.oss.application.oss.core.minio.MinioOssConfiguration;
import com.schisandra.oss.application.oss.model.OssInfo;
import com.schisandra.oss.common.entity.Result;
import com.schisandra.oss.domain.bo.SchisandraOssMinioBO;
import com.schisandra.oss.domain.redis.RedisUtil;
import com.schisandra.oss.domain.service.SchisandraOssMinioDomainService;
import io.minio.errors.*;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -31,8 +26,9 @@ import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
* controller
@@ -58,6 +54,7 @@ public class SchisandraOssMinioController {
/**
* 返回minio表所有数据
*
* @return
*/
@GetMapping("returnAll")
@@ -87,6 +84,7 @@ public class SchisandraOssMinioController {
log.error("用户: {}-> minio 初始化完成!", userId);
}
}
/**
* @description: 获取文件目录信息
* @param: [target, userId, dirName]
@@ -95,7 +93,7 @@ public class SchisandraOssMinioController {
* @date: 2024/6/26 13:55
*/
@GetMapping("listMinioDir")
public Result<String> listMinioInfo( @RequestParam String userId, @RequestParam String dirName,@RequestParam String bucket) throws Exception {
public Result<String> listMinioInfo(@RequestParam String userId, @RequestParam String dirName, @RequestParam String bucket) throws Exception {
Preconditions.checkNotNull(userId, "不能为空");
MinioOssClient bean = SpringUtil.getBean(userId);
bean.getMinioOssConfig().setBucketName(bucket);
@@ -110,21 +108,21 @@ public class SchisandraOssMinioController {
* @date: 2024/6/26 13:56
*/
@GetMapping("downloadMinioFile")
public void getMinioFile(@RequestParam String bucket, @RequestParam String userId, @RequestParam List<String> listObjectsArgs , HttpServletResponse response) throws Exception {
public void getMinioFile(@RequestParam String bucket, @RequestParam String userId, @RequestParam List<String> listObjectsArgs, HttpServletResponse response) throws Exception {
Preconditions.checkNotNull(bucket, "不能为空");
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(listObjectsArgs, "不能为空");
MinioOssClient bean = SpringUtil.getBean(userId);
bean.getMinioOssConfig().setBucketName(bucket);
HashMap<String, InputStream> list=bean.getTargetDir(listObjectsArgs);
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");
response.setCharacterEncoding("UTF-8");
String[] path = new String[list.size()];
InputStream[] inputStreams= new InputStream[list.size()];
path=list.keySet().toArray(path);
inputStreams=list.values().toArray(inputStreams);
InputStream[] inputStreams = new InputStream[list.size()];
path = list.keySet().toArray(path);
inputStreams = list.values().toArray(inputStreams);
ZipUtil.zip(output, path, inputStreams);
}
@@ -159,15 +157,15 @@ public class SchisandraOssMinioController {
Preconditions.checkNotNull(fileName, "不能为空");
Preconditions.checkNotNull(bucket, "不能为空");
//设置热力图
Date date =new Date();
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));
}else {
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));
} else {
redisUtil.set(key, String.valueOf(1));
}
@@ -198,11 +196,12 @@ public class SchisandraOssMinioController {
bean.getMinioOssConfig().setBucketName(bucket);
try {
bean.rename(oldFileName, newFileName);
}catch (Exception e){
} catch (Exception e) {
return Result.fail(e.getMessage());
}
return Result.ok();
}
/**
* @description: 拷贝文件
* @param: [userId, bucket, oldFilePath, newFilePath]
@@ -221,11 +220,12 @@ public class SchisandraOssMinioController {
bean.getMinioOssConfig().setBucketName(bucket);
try {
bean.copy(oldFilePath, newFilePath);
}catch (Exception e){
} catch (Exception e) {
return Result.fail(e.getMessage());
}
return Result.ok();
}
/**
* @description: 预览文件
* @param: [userId, bucket, filePath]
@@ -245,7 +245,9 @@ public class SchisandraOssMinioController {
} catch (Exception e) {
return Result.fail(e.getMessage());
}
}
/**
* @description: 分享文件
* @param: [userId, bucket, filePath]
@@ -261,7 +263,7 @@ public class SchisandraOssMinioController {
MinioOssClient bean = SpringUtil.getBean(userId);
bean.getMinioOssConfig().setBucketName(bucket);
try {
return Result.ok(bean.shareMinioFile(filePath,time));
return Result.ok(bean.shareMinioFile(filePath, time));
} catch (Exception e) {
return Result.fail(e.getMessage());
}
@@ -280,6 +282,7 @@ public class SchisandraOssMinioController {
MinioOssClient bean = SpringUtil.getBean(userId);
return Result.ok(bean.selectAllBucket());
}
/**
* @description: 创建bucket
* @param: [userId, bucket]
@@ -386,7 +389,7 @@ public class SchisandraOssMinioController {
log.error("容器获取失败!");
return null;
}
return Result.ok(bean.getInfo(fileName,true));
return Result.ok(bean.getInfo(fileName, true));
}
@GetMapping("getAllMinioInfo")
@@ -397,11 +400,6 @@ public class SchisandraOssMinioController {
}
private void parameterCheck(SchisandraOssMinioDTO schisandraOssMinioDTO) {
Preconditions.checkNotNull(schisandraOssMinioDTO.getId(), "不能为空");
Preconditions.checkNotNull(schisandraOssMinioDTO.getUserId(), "不能为空");

View File

@@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions;
import com.schisandra.oss.application.convert.SchisandraOssQiniuDTOConverter;
import com.schisandra.oss.application.dto.SchisandraOssQiniuDTO;
import com.schisandra.oss.application.dto.SchisandraOssUpDTO;
import com.schisandra.oss.application.oss.core.qiniu.QiNiuOssClient;
import com.schisandra.oss.application.oss.core.qiniu.QiNiuOssConfiguration;
import com.schisandra.oss.application.oss.model.OssInfo;
@@ -16,6 +15,7 @@ import com.schisandra.oss.domain.service.SchisandraOssQiniuDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
@@ -48,6 +48,7 @@ public class SchisandraOssQiniuController {
/**
* 返回七牛表所有数据
*
* @return
*/
@GetMapping("returnAll")
@@ -86,7 +87,7 @@ public class SchisandraOssQiniuController {
bean.getQiNiuOssConfig().setBucketName(bucket);
try {
bean.rename(oldFileName, newFileName);
}catch (Exception e){
} catch (Exception e) {
return Result.fail(e.getMessage());
}
return Result.ok();
@@ -110,7 +111,7 @@ public class SchisandraOssQiniuController {
bean.getQiNiuOssConfig().setBucketName(bucket);
try {
bean.copy(oldFilePath, newFilePath);
}catch (Exception e){
} catch (Exception e) {
return Result.fail(e.getMessage());
}
return Result.ok();
@@ -125,7 +126,7 @@ public class SchisandraOssQiniuController {
* @date: 2024/7/8 13:56
*/
@GetMapping("downloadFile")
public void download_open(@RequestParam String userId,@RequestParam String endpoint, @RequestParam String filename,HttpServletResponse response) throws IOException {
public void download_open(@RequestParam String userId, @RequestParam String endpoint, @RequestParam String filename, HttpServletResponse response) throws IOException {
QiNiuOssClient bean = SpringUtil.getBean(userId);
bean.getQiNiuOssConfig().setEndpoint(endpoint);
ServletOutputStream output = response.getOutputStream();
@@ -134,7 +135,7 @@ public class SchisandraOssQiniuController {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "utf-8"));
bean.downLoad_open(output,filename,endpoint);
bean.downLoad_open(output, filename, endpoint);
}
@@ -169,15 +170,15 @@ public class SchisandraOssQiniuController {
Preconditions.checkNotNull(bucket, "不能为空");
//设置热力图
Date date =new Date();
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));
}else {
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));
} else {
redisUtil.set(key, String.valueOf(1));
}
@@ -219,19 +220,20 @@ public class SchisandraOssQiniuController {
/**
* 创建桶createbucket
*
* @param userId
* @param bucket
* @return
*/
@PostMapping("createBucket")
public Result<String> createBucket(@RequestParam String userId, @RequestParam String bucket,@RequestParam String region) {
public Result<String> createBucket(@RequestParam String userId, @RequestParam String bucket, @RequestParam String region) {
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(bucket, "不能为空");
QiNiuOssClient bean = SpringUtil.getBean(userId);
bean.getQiNiuOssConfig().setBucketName(bucket);
bean.getQiNiuOssConfig().setRegion(region);
try {
return Result.ok(bean.createBucket(bucket,region));
return Result.ok(bean.createBucket(bucket, region));
} catch (IOException e) {
throw new RuntimeException(e);
}
@@ -259,7 +261,6 @@ public class SchisandraOssQiniuController {
}
/**
* 新增七牛云对象存储配置表
*/

View File

@@ -5,10 +5,6 @@ import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions;
import com.schisandra.oss.application.convert.SchisandraOssSftpDTOConverter;
import com.schisandra.oss.application.dto.SchisandraOssSftpDTO;
import com.schisandra.oss.application.dto.SchisandraOssUpDTO;
import com.schisandra.oss.application.oss.core.ali.AliOssClient;
import com.schisandra.oss.application.oss.core.ftp.FtpOssClient;
import com.schisandra.oss.application.oss.core.ftp.FtpOssConfiguration;
import com.schisandra.oss.application.oss.core.qiniu.QiNiuOssClient;
import com.schisandra.oss.application.oss.core.sftp.SftpOssClient;
import com.schisandra.oss.application.oss.core.sftp.SftpOssConfiguration;
@@ -55,6 +51,7 @@ public class SchisandraOssSftpController {
/**
* 返回up表所有数据
*
* @return
*/
@GetMapping("returnAll")
@@ -77,7 +74,7 @@ public class SchisandraOssSftpController {
QiNiuOssClient bean = SpringUtil.getBean(userId);
try {
bean.copy(oldFilePath, newFilePath);
}catch (Exception e){
} catch (Exception e) {
return Result.fail(e.getMessage());
}
return Result.ok();
@@ -87,7 +84,7 @@ public class SchisandraOssSftpController {
* 重命名
*/
@PostMapping("renameFile")
public Result renameSftpFile(@RequestParam String userId, @RequestParam String oldFileName, @RequestParam String newFileName) throws IOException {
public Result renameSftpFile(@RequestParam String userId, @RequestParam String oldFileName, @RequestParam String newFileName) throws IOException {
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(oldFileName, "不能为空");
@@ -95,7 +92,7 @@ public class SchisandraOssSftpController {
SftpOssClient bean = SpringUtil.getBean(userId);
try {
bean.rename(oldFileName, newFileName);
}catch (Exception e){
} catch (Exception e) {
return Result.fail(e.getMessage());
}
return Result.ok();
@@ -131,7 +128,7 @@ public class SchisandraOssSftpController {
*/
@GetMapping("downloadFile")
public void downloadSftpFile(@RequestParam String userId, @RequestParam String filename, HttpServletResponse response) throws IOException {
public void downloadSftpFile(@RequestParam String userId, @RequestParam String filename, HttpServletResponse response) throws IOException {
SftpOssClient bean = SpringUtil.getBean(userId);
ServletOutputStream output = response.getOutputStream();
@@ -139,7 +136,7 @@ public class SchisandraOssSftpController {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "utf-8"));
bean.downLoad(output,filename);
bean.downLoad(output, filename);
}
/**
@@ -147,21 +144,21 @@ public class SchisandraOssSftpController {
*/
@PostMapping("uploadFile")
@SneakyThrows
public Result<OssInfo> uploadSftpFile(@RequestParam String userId , @RequestParam MultipartFile file, @RequestParam String fileName) {
public Result<OssInfo> uploadSftpFile(@RequestParam String userId, @RequestParam MultipartFile file, @RequestParam String fileName) {
Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(fileName, "不能为空");
//设置热力图
Date date =new Date();
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));
}else {
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));
} else {
redisUtil.set(key, String.valueOf(1));
}

View File

@@ -1,20 +1,25 @@
package com.schisandra.oss.application.controller;
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions;
import com.schisandra.oss.application.convert.SchisandraOssUpDTOConverter;
import com.schisandra.oss.application.dto.SchisandraOssUpDTO;
import com.schisandra.oss.application.oss.core.up.UpOssClient;
import com.schisandra.oss.application.oss.core.up.UpOssConfiguration;
import com.schisandra.oss.application.oss.model.OssInfo;
import com.schisandra.oss.common.entity.Result;
import com.schisandra.oss.domain.bo.SchisandraOssUpBO;
import com.schisandra.oss.domain.service.SchisandraOssUpDomainService;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;
/**
@@ -35,6 +40,7 @@ public class SchisandraOssUpController {
/**
* 返回up表所有数据
*
* @return
*/
@GetMapping("returnAll")
@@ -43,35 +49,106 @@ public class SchisandraOssUpController {
}
/**
* 新增又拍云对象存储配置表
* @description: 初始化
* @param: []
* @return: void
* @author: landaiqing
* @date: 2024/6/28 上午11:36
*/
@RequestMapping("add")
@PostMapping("init")
public void init(@RequestParam("userId") String userId) {
try {
upOssConfiguration.upOssClient(userId);
log.info("用户:{} 又拍云oss初始化成功", userId);
} catch (Exception e) {
log.error("用户:{} 又拍云oss初始化失败", userId);
}
}
/**
* @description: 获取指定文件信息
* @param: [userIdfileName]
* @return: com.schisandra.oss.common.entity.Result
* @author: landaiqing
* @date: 2024/6/28 上午11:42
*/
@PostMapping("getInfo")
public Result getInfo(@RequestParam("userId") String userId, @RequestParam("fileName") String fileName) {
UpOssClient bean = SpringUtil.getBean(userId);
OssInfo info = bean.getInfo(fileName);
return Result.ok(info);
}
/**
* @description: 单个文件上传
* @param: [userId, fileName, file, isOverride]
* @return: com.schisandra.oss.common.entity.Result
* @author: landaiqing
* @date: 2024/6/28 下午3:00
*/
@SneakyThrows
@PostMapping("upload")
public Result upload(@RequestParam("userId") String userId, @RequestParam("file") MultipartFile file, @RequestParam("isOverride") Boolean isOverride) {
UpOssClient bean = SpringUtil.getBean(userId);
String originalFileName = file.getOriginalFilename();
InputStream is = file.getInputStream();
OssInfo ossInfo = bean.upLoad(is, originalFileName, isOverride);
return Result.ok(ossInfo);
}
/**
* @description: 删除文件
* @param: [userId, fileName]
* @return: com.schisandra.oss.common.entity.Result
* @author: landaiqing
* @date: 2024/6/28 下午3:21
*/
@PostMapping("deleteFile")
public Result deleteFile(@RequestParam("userId") String userId, @RequestParam("fileName") String fileName) {
UpOssClient bean = SpringUtil.getBean(userId);
bean.delete(fileName);
return Result.ok();
}
/**
* @description: 下载文件
* @param: [userId, fileName, response]
* @return: com.schisandra.oss.common.entity.Result
* @author: landaiqing
* @date: 2024/6/28 下午3:55
*/
@SneakyThrows
@GetMapping("download")
public Result download(@RequestParam("userId") String userId, @RequestParam("fileName") String fileName, HttpServletResponse response) {
UpOssClient bean = SpringUtil.getBean(userId);
ServletOutputStream output = response.getOutputStream();
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
response.setContentType("application/octet-stream");
response.setCharacterEncoding("UTF-8");
bean.downLoad(output, fileName);
return Result.ok();
}
/**
* @description: 新增又拍云对象存储配置
* @param: [schisandraOssUpDTO]
* @return: com.schisandra.oss.common.entity.Result<java.lang.Boolean>
* @author: landaiqing
* @date: 2024/6/28 下午3:14
*/
@PostMapping("add")
public Result<Boolean> add(@RequestBody SchisandraOssUpDTO schisandraOssUpDTO) {
try {
if (log.isInfoEnabled()) {
log.info("SchisandraOssUpController.add.dto:{}", JSON.toJSONString(schisandraOssUpDTO));
}
Preconditions.checkNotNull(schisandraOssUpDTO.getId(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getUserId(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getBasePath(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getBucketName(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getUserName(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getPassword(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getTimeout(), "默认的超时时间30秒不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getApiDomain(), "默认为自动识别接入点不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getPartSize(), "分片大小,默认5MB不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getTaskNum(), "并发线程数,默认等于CPU的核数不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getStatus(), "状态不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getOpenAdvancedSetup(), "是否开启高级设置不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getCreatedBy(), "创建人不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getCreatedTime(), "创建时间不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getUpdateTime(), "更新时间不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getUpdateBy(), "更新人不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getIsDeleted(), "是否删除 0 未删除 1已删除不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getExtraJson(), "额外字段不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getCreateBucket(), "当桶不存在,是否创建不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getCheckBucket(), "启动检测桶,是否存在不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getUserId(), "UserId不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getBasePath(), "BasePath不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getBucketName(), "BucketName不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getUserName(), "UserName不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getPassword(), "Password不能为空");
SchisandraOssUpBO SchisandraOssUpBO = SchisandraOssUpDTOConverter.INSTANCE.convertDTOToBO(schisandraOssUpDTO);
return Result.ok(schisandraOssUpDomainService.add(SchisandraOssUpBO));
} catch (Exception e) {
@@ -82,35 +159,19 @@ public class SchisandraOssUpController {
}
/**
* 修改又拍云对象存储配置
* @description: 修改又拍云对象存储配置
* @param: [schisandraOssUpDTO]
* @return: com.schisandra.oss.common.entity.Result<java.lang.Boolean>
* @author: landaiqing
* @date: 2024/6/28 下午3:14
*/
@RequestMapping("update")
@PostMapping("update")
public Result<Boolean> update(@RequestBody SchisandraOssUpDTO schisandraOssUpDTO) {
try {
if (log.isInfoEnabled()) {
log.info("SchisandraOssUpController.update.dto:{}", JSON.toJSONString(schisandraOssUpDTO));
}
Preconditions.checkNotNull(schisandraOssUpDTO.getId(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getUserId(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getBasePath(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getBucketName(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getUserName(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getPassword(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getTimeout(), "默认的超时时间30秒不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getApiDomain(), "默认为自动识别接入点不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getPartSize(), "分片大小,默认5MB不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getTaskNum(), "并发线程数,默认等于CPU的核数不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getStatus(), "状态不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getOpenAdvancedSetup(), "是否开启高级设置不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getCreatedBy(), "创建人不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getCreatedTime(), "创建时间不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getUpdateTime(), "更新时间不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getUpdateBy(), "更新人不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getIsDeleted(), "是否删除 0 未删除 1已删除不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getExtraJson(), "额外字段不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getCreateBucket(), "当桶不存在,是否创建不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getCheckBucket(), "启动检测桶,是否存在不能为空");
SchisandraOssUpBO schisandraOssUpBO = SchisandraOssUpDTOConverter.INSTANCE.convertDTOToBO(schisandraOssUpDTO);
return Result.ok(schisandraOssUpDomainService.update(schisandraOssUpBO));
} catch (Exception e) {
@@ -120,36 +181,22 @@ public class SchisandraOssUpController {
}
/**
* 删除又拍云对象存储配置
* @description: 删除又拍云对象存储配置
* @param: [schisandraOssUpDTO]
* @return: com.schisandra.oss.common.entity.Result<java.lang.Boolean>
* @author: landaiqing
* @date: 2024/6/28 下午3:14
*/
@RequestMapping("delete")
@DeleteMapping("delete")
public Result<Boolean> delete(@RequestBody SchisandraOssUpDTO schisandraOssUpDTO) {
try {
if (log.isInfoEnabled()) {
log.info("SchisandraOssUpController.delete.dto:{}", JSON.toJSONString(schisandraOssUpDTO));
}
Preconditions.checkNotNull(schisandraOssUpDTO.getId(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getUserId(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getBasePath(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getBucketName(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getUserName(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getPassword(), "不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getTimeout(), "默认的超时时间30秒不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getApiDomain(), "默认为自动识别接入点不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getPartSize(), "分片大小,默认5MB不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getTaskNum(), "并发线程数,默认等于CPU的核数不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getStatus(), "状态不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getOpenAdvancedSetup(), "是否开启高级设置不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getCreatedBy(), "创建人不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getCreatedTime(), "创建时间不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getUpdateTime(), "更新时间不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getUpdateBy(), "更新人不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getIsDeleted(), "是否删除 0 未删除 1已删除不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getExtraJson(), "额外字段不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getCreateBucket(), "当桶不存在,是否创建不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getCheckBucket(), "启动检测桶,是否存在不能为空");
Preconditions.checkNotNull(schisandraOssUpDTO.getId(), "Id不能为空");
SchisandraOssUpBO schisandraOssUpBO = SchisandraOssUpDTOConverter.INSTANCE.convertDTOToBO(schisandraOssUpDTO);
return Result.ok(schisandraOssUpDomainService.delete(schisandraOssUpBO));
} catch (Exception e) {

View File

@@ -45,6 +45,8 @@ public class SchisandraOssTencentDTO implements Serializable {
*/
private String secretKey;
private String appId;
/**
* 地域
*/

View File

@@ -22,6 +22,7 @@ import com.schisandra.oss.application.oss.utils.OssPathUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.junit.Test;
import java.io.File;
import java.io.InputStream;

View File

@@ -29,7 +29,7 @@ public class AwsOssConfig {
private AwsRegion region;
private DefaultsMode mode;
private DefaultsMode mode;
private AwsOssClientConfig clientConfig;
/**

View File

@@ -20,36 +20,35 @@ import com.schisandra.oss.application.oss.utils.OssPathUtil;
import com.upyun.ParallelUploader;
import com.upyun.RestManager;
import com.upyun.UpException;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import okhttp3.Headers;
import okhttp3.Response;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* @author zlg
* @description:
* @param:
* @return:
* @author zlg
* @date: 2024/6/25 14:40
*/
@Slf4j
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class UpOssClient implements StandardOssClient {
public static final String REST_OBJECT_NAME = "restManager";
public static final String PARALLEL_OBJECT_NAME = "parallelUploader";
private RestManager restManager;
private ParallelUploader parallelUploader;
private UpOssConfig upOssConfig;
@@ -206,8 +205,8 @@ public class UpOssClient implements StandardOssClient {
Response fileInfo = restManager.getFileInfo(key);
Headers headers = fileInfo.headers();
ossInfo.setLength(headers.get(RestManager.PARAMS.X_UPYUN_FILE_SIZE.getValue()));
ossInfo.setCreateTime(DateUtil.date(headers.getDate(RestManager.PARAMS.X_UPYUN_FILE_DATE.getValue())).toString(DatePattern.NORM_DATETIME_PATTERN));
ossInfo.setLastUpdateTime(DateUtil.date(headers.getDate(RestManager.PARAMS.X_UPYUN_FILE_DATE.getValue())).toString(DatePattern.NORM_DATETIME_PATTERN));
ossInfo.setCreateTime(DateUtil.date(Long.parseLong(Objects.requireNonNull(headers.get(RestManager.PARAMS.X_UPYUN_FILE_DATE.getValue())))).toString(DatePattern.NORM_DATETIME_PATTERN));
ossInfo.setLastUpdateTime(DateUtil.date(Long.parseLong(Objects.requireNonNull(headers.get(RestManager.PARAMS.X_UPYUN_FILE_DATE.getValue())))).toString(DatePattern.NORM_DATETIME_PATTERN));
} else {
ossInfo = getDirectoryOssInfo(key);
}

View File

@@ -68,26 +68,32 @@ public class UpOssConfiguration {
public StandardOssClient upOssClient(String userId) {
SchisandraOssUpBO schisandraOssUpBO = schisandraOssUpDomainService.getUpOssConfig(userId);
SchisandraOssUpDTO schisandraOssUpDTO = SchisandraOssUpDTOConverter.INSTANCE.convertBOToDTO(schisandraOssUpBO);
log.info("Up oss配置信息获取成功{}", schisandraOssUpDTO);
if (ObjectUtil.isEmpty(schisandraOssUpDTO)) {
log.error("Up oss配置信息获取失败");
return null;
}
String userName = schisandraOssUpDTO.getUserName();
String password = schisandraOssUpDTO.getPassword();
String bucketName = schisandraOssUpDTO.getBucketName();
String basePath = schisandraOssUpDTO.getBasePath();
UpOssConfig upOssConfig = new UpOssConfig();
upOssConfig.setUserName(userName);
upOssConfig.setPassword(password);
upOssConfig.setBucketName(bucketName);
upOssConfig.setBasePath(basePath);
SpringUtil.registerBean(userId, upOssClient(upOssConfig));
return upOssClient(upOssConfig);
}
private StandardOssClient upOssClient(UpOssConfig upOssConfig) {
private UpOssClient upOssClient(UpOssConfig upOssConfig) {
RestManager restManager = restManager(upOssConfig);
ParallelUploader parallelUploader = parallelUploader(upOssConfig);
return upOssClient(restManager, parallelUploader, upOssConfig);
}
public StandardOssClient upOssClient(RestManager restManager, ParallelUploader parallelUploader, UpOssConfig upOssConfig) {
public UpOssClient upOssClient(RestManager restManager, ParallelUploader parallelUploader, UpOssConfig upOssConfig) {
return new UpOssClient(restManager, parallelUploader, upOssConfig);
}

View File

@@ -1,8 +1,7 @@
package com.schisandra.oss.domain.service.impl;
import com.schisandra.oss.common.enums.IsDeletedFlagEnum;
import com.schisandra.oss.domain.convert.SchisandraFileHeatmapBOConverter;
import com.schisandra.oss.domain.bo.SchisandraFileHeatmapBO;
import com.schisandra.oss.domain.convert.SchisandraFileHeatmapBOConverter;
import com.schisandra.oss.domain.service.SchisandraFileHeatmapDomainService;
import com.schisandra.oss.infra.basic.entity.SchisandraFileHeatmap;
import com.schisandra.oss.infra.basic.service.SchisandraFileHeatmapService;

View File

@@ -8,7 +8,6 @@ import com.schisandra.oss.domain.service.SchisandraOssAliDomainService;
import com.schisandra.oss.infra.basic.entity.SchisandraOssAli;
import com.schisandra.oss.infra.basic.service.SchisandraOssAliService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -58,7 +57,7 @@ public class SchisandraOssAliDomainServiceImpl implements SchisandraOssAliDomain
@Override
public List<SchisandraOssAliBO> selectAll(){
public List<SchisandraOssAliBO> selectAll() {
List<SchisandraOssAli> list = schisandraOssAliService.selectAll();
List<SchisandraOssAliBO> schisandraOssAliBO_list = new ArrayList<>();
for (SchisandraOssAli schisandraOssAli : list) {

View File

@@ -55,9 +55,8 @@ public class SchisandraOssTencent implements Serializable {
*/
@Column("secret_key")
private String secretKey;
/**
* 地域
*
*/
@Column("app_id")
private String appId;

View File

@@ -124,6 +124,11 @@
<artifactId>schisandra-cloud-storage-auth-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<version>2.4.2</version>
</dependency>
</dependencies>
<dependencyManagement>

View File

@@ -1,4 +1,4 @@
package com.schisandra.wechat.config;
package com.schisandra.wechat.config.job;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;

View File

@@ -0,0 +1,15 @@
package com.schisandra.wechat.config.websocket;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}

View File

@@ -0,0 +1,29 @@
package com.schisandra.wechat.config.websocket;
import com.alibaba.nacos.common.utils.CollectionUtils;
import org.springframework.stereotype.Component;
import javax.websocket.HandshakeResponse;
import javax.websocket.server.HandshakeRequest;
import javax.websocket.server.ServerEndpointConfig;
import java.util.List;
import java.util.Map;
@Component
public class WebSocketServerConfig extends ServerEndpointConfig.Configurator {
@Override
public boolean checkOrigin(String originHeaderValue) {
return true;
}
@Override
public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
Map<String, List<String>> parameterMap = request.getParameterMap();
List<String> erpList = parameterMap.get("clientId");
if(!CollectionUtils.isEmpty(erpList)){
sec.getUserProperties().put("clientId", erpList.get(0));
}
}
}

View File

@@ -1,4 +1,4 @@
package com.schisandra.wechat.config;
package com.schisandra.wechat.config.wx;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;

View File

@@ -1,4 +1,4 @@
package com.schisandra.wechat.config;
package com.schisandra.wechat.config.wx;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

View File

@@ -1,11 +1,12 @@
package com.schisandra.wechat.controller;
import com.schisandra.wechat.common.entity.Result;
import com.schisandra.wechat.config.WxConfig;
import com.schisandra.wechat.config.wx.WxConfig;
import com.schisandra.wechat.dto.AccessTokenResult;
import com.schisandra.wechat.dto.MpQrCodeCreateRequest;
import com.schisandra.wechat.dto.MpQrCodeCreateResult;
import com.schisandra.wechat.service.WXService;
import com.schisandra.wechat.websocket.WeChatSocket;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.springframework.web.bind.annotation.GetMapping;
@@ -14,7 +15,6 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.UUID;
/**
* @Classname WxController
@@ -32,8 +32,9 @@ public class WxController {
@Resource
private WXService wxService;
@Resource
WxConfig wxConfig;
private WxConfig wxConfig;
@Resource
private WeChatSocket weChatSocket;
/**
* @description: 获取微信access_token
* @param: []

View File

@@ -1,6 +1,6 @@
package com.schisandra.wechat.job;
import com.schisandra.wechat.config.WxConfig;
import com.schisandra.wechat.config.wx.WxConfig;
import com.schisandra.wechat.service.WXService;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;

View File

@@ -5,21 +5,23 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.schisandra.wechat.aes.AesException;
import com.schisandra.wechat.common.exception.ParameterException;
import com.schisandra.wechat.config.WxConfig;
import com.schisandra.wechat.common.redis.RedisUtil;
import com.schisandra.wechat.config.wx.WxConfig;
import com.schisandra.wechat.dto.MpBaseEventRequest;
import com.schisandra.wechat.dto.MpCommonRequest;
import com.schisandra.wechat.dto.MpSubscribeEventRequest;
import com.schisandra.wechat.dto.MpTextEventRequest;
import com.schisandra.wechat.rpc.AuthUserRpc;
import com.schisandra.wechat.service.WxMpEventService;
import com.schisandra.wechat.websocket.WeChatSocket;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.security.MessageDigest;
import java.util.Arrays;
@@ -30,9 +32,7 @@ import java.util.Objects;
@Slf4j
public class WxMpEventServiceImpl implements WxMpEventService {
@Resource
ApplicationContext applicationContext;
@Resource
WxConfig wxConfig;
private WxConfig wxConfig;
@Resource
private AuthUserRpc authUserRpc;
@@ -68,20 +68,33 @@ public class WxMpEventServiceImpl implements WxMpEventService {
MpTextEventRequest mpTextEventRequest = mapper.convertValue(object, MpTextEventRequest.class);
log.info(mpTextEventRequest.toString());
log.info("推送消息MpTextEventRequest...");
// applicationContext.publishEvent(mpTextEventRequest);
//...
}
if ("event".equals(mpBaseEventRequest.getMsgType())) {
MpSubscribeEventRequest mpSubscribeEventRequest = mapper.convertValue(object, MpSubscribeEventRequest.class);
log.info(mpSubscribeEventRequest.toString());
log.info("推送消息MpSubscribeEventRequest...");
// applicationContext.publishEvent(mpSubscribeEventRequest);
// ...
if ("subscribe".equals(mpSubscribeEventRequest.getEvent())
&& Strings.isNotBlank(mpSubscribeEventRequest.getEventKey())) {
String[] keys = mpSubscribeEventRequest.getEventKey().split("_");
if ("qrscene".equals(keys[0]) && "ScanReg".equals(keys[1])) {
log.info("AppId{}ClientId{}", keys[2], keys[3]);
authUserRpc.wechatRegister(keys[2], mpSubscribeEventRequest.getFromUserName(), keys[3]);
return null;
Boolean result = authUserRpc.wechatRegister(keys[2], mpSubscribeEventRequest.getFromUserName(), keys[3]);
String replyContent;
if (result){
replyContent = "登录成功!";
}else{
replyContent = "登录失败!";
}
String content = "<xml>\n" +
" <ToUserName><![CDATA[" + mpSubscribeEventRequest.getFromUserName() + "]]></ToUserName>\n" +
" <FromUserName><![CDATA[" + mpSubscribeEventRequest.getToUserName() + "]]></FromUserName>\n" +
" <CreateTime>12345678</CreateTime>\n" +
" <MsgType><![CDATA[text]]></MsgType>\n" +
" <Content><![CDATA[" + replyContent + "]]></Content>\n" +
"</xml>";
return content;
}
}
@@ -90,9 +103,21 @@ public class WxMpEventServiceImpl implements WxMpEventService {
String[] keys = mpSubscribeEventRequest.getEventKey().split("_");
if ("ScanReg".equals(keys[0])) {
log.info("AppId{}ClientId{}", keys[1], keys[2]);
authUserRpc.wechatRegister(keys[1], mpSubscribeEventRequest.getFromUserName(), keys[2]);
return null;
Boolean result = authUserRpc.wechatRegister(keys[1], mpSubscribeEventRequest.getFromUserName(), keys[2]);
String replyContent;
if (result){
replyContent = "登录成功!";
}else{
replyContent = "登录失败!";
}
String content = "<xml>\n" +
" <ToUserName><![CDATA[" + mpSubscribeEventRequest.getFromUserName() + "]]></ToUserName>\n" +
" <FromUserName><![CDATA[" + mpSubscribeEventRequest.getToUserName() + "]]></FromUserName>\n" +
" <CreateTime>12345678</CreateTime>\n" +
" <MsgType><![CDATA[text]]></MsgType>\n" +
" <Content><![CDATA[" + replyContent + "]]></Content>\n" +
"</xml>";
return content;
}
}
}

View File

@@ -0,0 +1,139 @@
package com.schisandra.wechat.websocket;
import com.schisandra.wechat.config.websocket.WebSocketServerConfig;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
@ServerEndpoint(value = "/wx/socket", configurator = WebSocketServerConfig.class)
@Component
public class WeChatSocket {
/**
* 记录当前在线连接数
*/
private static final AtomicInteger onlineCount = new AtomicInteger(0);
/**
* 存放所有在线的客户端
*/
private static final Map<String, WeChatSocket> clients = new ConcurrentHashMap<>();
/**
* 与某个客户端的连接会话,需要通过它来给客户端发送数据
*/
@Getter
private Session session;
/**
* clientId唯一标识
*/
private String clientId = "";
/**
* 连接建立成功调用的方法
*/
@OnOpen
public void onOpen(Session session, EndpointConfig conf) throws IOException {
//获取用户信息
try {
Map<String, Object> usclientIdroperties = conf.getUserProperties();
String clientId = (String) usclientIdroperties.get("clientId");
this.clientId = clientId;
this.session = session;
if (clients.containsKey(this.clientId)) {
clients.get(this.clientId).session.close();
clients.remove(this.clientId);
onlineCount.decrementAndGet();
}
clients.put(this.clientId, this);
onlineCount.incrementAndGet();
log.info("有新连接加入:{},当前在线人数为:{}", clientId, onlineCount.get());
sendMessage("连接成功", this.session);
} catch (Exception e) {
log.error("建立链接错误{}", e.getMessage(), e);
}
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose() {
try {
if (clients.containsKey(clientId)) {
clients.get(clientId).session.close();
clients.remove(clientId);
onlineCount.decrementAndGet();
}
log.info("有一连接关闭:{},当前在线人数为:{}", this.clientId, onlineCount.get());
} catch (Exception e) {
log.error("连接关闭错误,错误原因{}", e.getMessage(), e);
}
}
/**
* 收到客户端消息后调用的方法
*/
@OnMessage
public void onMessage(String message, Session session) {
log.info("服务端收到客户端[{}]的消息:{}", this.clientId, message);
//心跳机制
if (message.equals("ping")) {
this.sendMessage("pong", session);
}
}
@OnError
public void onError(Session session, Throwable error) {
log.error("Socket:{},发生错误,错误原因{}", clientId, error.getMessage(), error);
try {
session.close();
} catch (Exception e) {
log.error("onError.Exception{}", e.getMessage(), e);
}
}
/**
* 指定发送消息
*/
public void sendMessage(String message, Session session) {
log.info("服务端给客户端[{}]发送消息{}", this.clientId, message);
try {
session.getBasicRemote().sendText(message);
} catch (IOException e) {
log.error("{}发送消息发生异常,异常原因{}", this.clientId, message);
}
}
/**
* 群发消息
*/
public void sendMessage(String message) {
for (Map.Entry<String, WeChatSocket> sessionEntry : clients.entrySet()) {
String clientId = sessionEntry.getKey();
WeChatSocket socket = sessionEntry.getValue();
Session session = socket.session;
log.info("服务端给客户端[{}]发送消息{}", clientId, message);
try {
session.getBasicRemote().sendText(message);
} catch (IOException e) {
log.error("{}发送消息发生异常,异常原因{}", this.clientId, message);
}
}
}
public WeChatSocket getSocket(String userName) {
return clients.get(userName);
}
}