update 小改动

master
管理员 1 year ago
parent 081a42390f
commit f2f7c441ba

@ -9,6 +9,7 @@ const useUserStore = defineStore(
{ {
state: () => ({ state: () => ({
token: getToken(), token: getToken(),
user: {},
name: '', name: '',
avatar: '', avatar: '',
roles: [], roles: [],
@ -45,8 +46,9 @@ const useUserStore = defineStore(
} else { } else {
this.roles = ['ROLE_DEFAULT'] this.roles = ['ROLE_DEFAULT']
} }
this.name = user.userName this.name = user.userName;
this.avatar = avatar; this.avatar = avatar;
this.user = user;
resolve(res) resolve(res)
}).catch(error => { }).catch(error => {
reject(error) reject(error)

@ -0,0 +1,26 @@
package com.ruoyi.common.event;
import org.springframework.context.ApplicationEvent;
/**
* QAnything
*/
public class QaEvent extends ApplicationEvent {
public static enum Type {
ALL, ADD, UPDATE, REMOVE;
}
public QaEvent(Type source) {
super(source);
}
public QaEvent() {
super(Type.ALL);
}
@Override
public Type getSource() {
return (Type) super.getSource();
}
}

@ -61,6 +61,7 @@ public class MongoUtil {
} }
return c; return c;
} }
public static Criteria or(Criteria... criterias) { public static Criteria or(Criteria... criterias) {
Criteria c = new Criteria(); Criteria c = new Criteria();
if (ArrayUtil.isNotEmpty(criterias)) { if (ArrayUtil.isNotEmpty(criterias)) {
@ -73,6 +74,7 @@ public class MongoUtil {
/** /**
* (iseq)<br/> * (iseq)<br/>
* *
*
* @param obj * @param obj
* @return * @return
*/ */
@ -81,7 +83,7 @@ public class MongoUtil {
if (ObjUtil.isNull(obj)) { if (ObjUtil.isNull(obj)) {
return c; return c;
} }
for(PropDesc pd : BeanUtil.getBeanDesc(obj.getClass()).getProps()) { for (PropDesc pd : BeanUtil.getBeanDesc(obj.getClass()).getProps()) {
if (pd.getGetter() == null) { if (pd.getGetter() == null) {
continue; continue;
} }
@ -101,34 +103,44 @@ public class MongoUtil {
} }
/** age$gt /**
* age$gt
* *
* $ * $
*
* @param obj * @param obj
* @return * @return
*/ */
public static Criteria criteria(Object obj) { public static Criteria criteria(Object obj) {
Map<String,Object> map = MapUtil.newHashMap(); Map<String, Object> map = MapUtil.newHashMap();
for(PropDesc pd : BeanUtil.getBeanDesc(obj.getClass()).getProps()){ for (PropDesc pd : BeanUtil.getBeanDesc(obj.getClass()).getProps()) {
if(pd.getGetter()==null){ if (pd.getGetter() == null) {
continue; continue;
} }
Object val = pd.getValue(obj); Object val = pd.getValue(obj);
if(ObjUtil.isNull(val)){ if (ObjUtil.isNull(val)) {
continue; continue;
} }
if(pd.getFieldClass()==String.class){ if (pd.getFieldClass() == String.class) {
String str = (String)val; String str = (String) val;
if(StrUtil.isBlank(str)) { if (StrUtil.isBlank(str)) {
continue; continue;
} }
} }
map.put(pd.getFieldName(),val); map.put(pd.getFieldName(), val);
} }
return criteria(map); return criteria(map);
} }
public static Criteria criteria() {
return new Criteria();
}
public static Criteria criteria(String key) {
return Criteria.where(key);
}
/** /**
* mapkeyrule,value * mapkeyrule,value
* rule$() * rule$()
@ -334,12 +346,12 @@ public class MongoUtil {
return find(cls, new Query()); return find(cls, new Query());
} }
public static boolean findExists(Query query, Class<?> entityClass){ public static boolean findExists(Query query, Class<?> entityClass) {
return template.exists(query, entityClass); return template.exists(query, entityClass);
} }
public static boolean findExists(Query query, String collectionName){ public static boolean findExists(Query query, String collectionName) {
return template.exists(query, collectionName); return template.exists(query, collectionName);
} }
@ -461,11 +473,11 @@ public class MongoUtil {
return this; return this;
} }
public Criteria criteria(){ public Criteria criteria() {
return MongoUtil.criteria(this); return MongoUtil.criteria(this);
} }
public Query query(){ public Query query() {
return MongoUtil.query(this); return MongoUtil.query(this);
} }

@ -0,0 +1,37 @@
package com.ruoyi.cron.task;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.cron.TaskLog;
import com.ruoyi.cron.annotation.Cron;
import com.ruoyi.cron.annotation.CronComponent;
import com.ruoyi.cron.annotation.CronParam;
import com.ruoyi.cron.document.CronTaskLog;
import com.ruoyi.cron.runner.CronBeanPostProcessor;
import lombok.RequiredArgsConstructor;
import java.time.LocalDate;
import java.util.Date;
import static com.ruoyi.common.utils.MongoUtil.*;
@CronComponent
@RequiredArgsConstructor
public class CronTaskLogCleanTask {
private final TaskLog log;
private final CronBeanPostProcessor cronBeanPostProcessor;
@Cron("日志清理任务")
public void clear(@CronParam("几天前") Integer day, @CronParam("清理的组(null全部)") Integer groupId, @CronParam("清理的任务(null全部)") String taskId) {
log.log("开始执行日志清理...");
Date date = DateUtils.toDate(LocalDate.now().plusDays(-day));
log.log("清理时间(之前)" + DateUtil.formatDateTime(date));
log.log("清理的组编号:" + ((groupId == null) ? "全部" : groupId));
log.log("清理的任务:" + ((taskId == null) ? "全部" : cronBeanPostProcessor.getList().stream().filter(a -> a.getId().equals(taskId)).findFirst().get().getName()));
long count = doRemove(CronTaskLog.class, conditions().put("startTime$lt", date).query()).getDeletedCount();
log.log("日志清理完成,清理数量:" + count);
}
}

@ -38,307 +38,328 @@ import java.util.function.Supplier;
*/ */
public interface ISysOssService { public interface ISysOssService {
String IMAGE_WEBP = "webp"; /**
*
*/
public static enum Service {
minio, qiniu, aliyun, qcloud, image, upload;
}
String IMAGE_WEBP = "webp";
/**
*
*/
String PRE_DEFAULT = "default";
/**
*
*
* @param handle
*/
void setService(Service service, Runnable handle);
public <T> T setService(Service service, Supplier<T> handle);
/**
*
*
* @param handle
*/
void ignore(Runnable handle);
/**
*
*
* @param handle
*/
public <T> T ignore(Supplier<T> handle);
TableDataInfo<SysOssVo> queryPageList(SysOssBo sysOss, PageQuery pageQuery);
List<SysOssVo> listByIds(Collection<Long> ossIds);
SysOssVo getById(Long ossId);
default SysOssVo upload(MultipartFile file) {
return upload(file, PRE_DEFAULT);
}
/**
* @param file
* @param pre -
* @return
*/
default SysOssVo upload(MultipartFile file, String pre) {
if (file == null || file.isEmpty()) {
throw new RuntimeException("文件不能为空");
}
try {
return save(file.getInputStream(), file.getOriginalFilename(), file.getContentType(), pre);
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
/**
* , rule:{yyyy}/{MM}/{dd}/{id36}.{ext}
*
* @param in
* @param filename
* @param contentType
* @param pre
* @return
*/
default SysOssVo save(InputStream in, String filename, String contentType, String pre) {
return save(in, filename, contentType, pre, "{yyyy}/{MM}/{dd}/{id36}.{ext}");
}
/**
* ,rule:{yyyy}/{MM}/{dd}/{id36}/{filename}.{ext}
*
* @param in
* @param filename
* @param contentType
* @param pre
* @return
*/
default SysOssVo saveFilename(InputStream in, String filename, String contentType, String pre) {
return save(in, filename, contentType, pre, "{yyyy}/{MM}/{dd}/{id36}/{filename}.{ext}");
}
/**
* rule
* <pre>
* - URI
* -
* - {yyyy}/{MM}/{dd}/{HH}/{mm}/{ss}
* - {UUID} 32
* - {i} id
* - {id} intid,+
* - {id16} intid16,+
* - {id36} intid36,+
* - {filename}
* - {ext}
* </pre>
*
* @param in
* @param filename
* @param contentType
* @param pre
* @param rule
* @return
*/
SysOssVo save(InputStream in, String filename, String contentType, String pre, String rule);
SysOssVo uploadImgs(MultipartFile file, String pre);
default SysOssVo uploadImgs(MultipartFile file, String pre, int maxWidth, int maxHeight, BufferedImage watermark) {
if (file == null || file.isEmpty()) {
throw new RuntimeException("图片不能为空");
}
try {
return uploadImgs(file.getInputStream(), pre, maxWidth, maxHeight, watermark);
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
/** /**
* * @param in
*/ * @param pre -
String PRE_DEFAULT = "default"; * @param maxWidth - 1
* @param maxHeight - 1
* @param watermark - null
* @return
*/
SysOssVo uploadImgs(InputStream in, String pre, int maxWidth, int maxHeight,
BufferedImage watermark);
void download(Long ossId, HttpServletResponse response) throws IOException;
/** void download(String url, Service service, HttpServletResponse response) throws IOException;
*
*
* @param handle
*/
void ignore(Runnable handle);
InputStream download(Long ossId) throws IOException;
/** InputStream download(SysOssVo sysOss) throws IOException;
*
*
* @param handle
*/
public <T> T ignore(Supplier<T> handle);
InputStream download(String url, Service service) throws IOException;
TableDataInfo<SysOssVo> queryPageList(SysOssBo sysOss, PageQuery pageQuery); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
List<SysOssVo> listByIds(Collection<Long> ossIds);
SysOssVo getById(Long ossId); default InputStream formatImage(MultipartFile file, int maxWidth, int maxHeight,
BufferedImage watermark) {
try {
if (file == null || file.isEmpty()) {
throw new RuntimeException("上传图片不能为空");
}
if (!file.getContentType().startsWith("image/")) {
throw new RuntimeException("上传的文件不是图片");
}
return formatImage(file.getInputStream(), maxWidth, maxHeight, watermark);
} catch (IOException e) {
throw new RuntimeException("处理图片错误", e);
}
}
default SysOssVo upload(MultipartFile file) { default InputStream formatImage(Image img, int maxWidth, int maxHeight, BufferedImage watermark) {
return upload(file, PRE_DEFAULT); if (img == null) {
throw new RuntimeException("图片不能为空");
} }
return formatImage(Img.from(img), maxWidth, maxHeight, watermark);
}
default InputStream formatImage(InputStream in, int maxWidth, int maxHeight, BufferedImage watermark) {
return formatImage(Img.from(in), maxWidth, maxHeight, watermark);
}
default InputStream formatImage(Img img, int maxWidth, int maxHeight, BufferedImage watermark) {
try {
int w = img.getImg().getWidth(null);
int h = img.getImg().getHeight(null);
if (maxWidth > 0 && maxHeight > 0) {
if (w > maxWidth || h > maxHeight) {
int outWidth = 0;
int outHeight = 0;
outHeight = maxWidth * h / w;
if (outHeight > maxHeight) {
outHeight = maxHeight;
outWidth = outHeight * w / h;
} else {
outWidth = maxWidth;
}
img = img.scale(outWidth, outHeight);
w = outWidth;
h = outHeight;
/**
* @param file
* @param pre -
* @return
*/
default SysOssVo upload(MultipartFile file, String pre) {
if (file == null || file.isEmpty()) {
throw new RuntimeException("文件不能为空");
} }
try { }
return save(file.getInputStream(), file.getOriginalFilename(), file.getContentType(), pre);
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e); if (watermark != null) {
int ww = watermark.getWidth(null);
int wh = watermark.getHeight(null);
if (w > ww && h > wh) {
img = img.pressImage(watermark, 0, 0, 1f);
} }
} }
ByteArrayOutputStream pout = new ByteArrayOutputStream();
/** img.setTargetImageType(IMAGE_WEBP).write(pout);
* , rule:{yyyy}/{MM}/{dd}/{id36}.{ext}
*
* @param in
* @param filename
* @param contentType
* @param pre
* @return
*/
default SysOssVo save(InputStream in, String filename, String contentType, String pre) {
return save(in, filename, contentType, pre, "{yyyy}/{MM}/{dd}/{id36}.{ext}");
}
/** ByteArrayInputStream pin = new ByteArrayInputStream(pout.toByteArray());
* ,rule:{yyyy}/{MM}/{dd}/{id36}/{filename}.{ext} pout.close();
* pout = null;
* @param in return pin;
* @param filename } catch (Exception e) {
* @param contentType throw new RuntimeException("处理图片错误", e);
* @param pre
* @return
*/
default SysOssVo saveFilename(InputStream in, String filename, String contentType, String pre) {
return save(in, filename, contentType, pre, "{yyyy}/{MM}/{dd}/{id36}/{filename}.{ext}");
} }
}
/**
* rule
* <pre> /**
* - URI * <pre>
* - * - URI
* - {yyyy}/{MM}/{dd}/{HH}/{mm}/{ss} * -
* - {UUID} 32 * - {yyyy}/{MM}/{dd}/{HH}/{mm}/{ss}
* - {i} id * - {UUID} 32
* - {id} intid,+ * - {i} id
* - {id16} intid16,+ * - {id} intid,+
* - {id36} intid36,+ * - {id16} intid16,+
* - {filename} * - {id36} intid36,+
* - {ext} * - {filename}
* </pre> * - {ext}
* * </pre>
* @param in *
* @param filename * @param rule
* @param contentType * @param filename
* @param pre * @return
* @param rule */
* @return default String generateURI(String rule, String filename) {
*/ Calendar c = Calendar.getInstance();
SysOssVo save(InputStream in, String filename, String contentType, String pre, String rule); if (rule.contains("{yyyy}")) {
rule = rule.replace("{yyyy}", "" + c.get(Calendar.YEAR));
SysOssVo uploadImgs(MultipartFile file, String pre);
default SysOssVo uploadImgs(MultipartFile file, String pre, int maxWidth, int maxHeight, BufferedImage watermark) {
if (file == null || file.isEmpty()) {
throw new RuntimeException("图片不能为空");
}
try {
return uploadImgs(file.getInputStream(), pre, maxWidth, maxHeight, watermark);
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
} }
if (rule.contains("{MM}")) {
/** rule = rule.replace("{MM}", String.format("%02d", c.get(Calendar.MONTH) + 1));
* @param in
* @param pre -
* @param maxWidth - 1
* @param maxHeight - 1
* @param watermark - null
* @return
*/
SysOssVo uploadImgs(InputStream in, String pre, int maxWidth, int maxHeight,
BufferedImage watermark);
void download(Long ossId, HttpServletResponse response) throws IOException;
void download(String url, String service, HttpServletResponse response) throws IOException;
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
default InputStream formatImage(MultipartFile file, int maxWidth, int maxHeight,
BufferedImage watermark) {
try {
if (file == null || file.isEmpty()) {
throw new RuntimeException("上传图片不能为空");
}
if (!file.getContentType().startsWith("image/")) {
throw new RuntimeException("上传的文件不是图片");
}
return formatImage(file.getInputStream(), maxWidth, maxHeight, watermark);
} catch (IOException e) {
throw new RuntimeException("处理图片错误", e);
}
} }
if (rule.contains("{dd}")) {
default InputStream formatImage(Image img, int maxWidth, int maxHeight, BufferedImage watermark) { rule = rule.replace("{dd}", String.format("%02d", c.get(Calendar.DATE)));
if (img == null) {
throw new RuntimeException("图片不能为空");
}
return formatImage(Img.from(img), maxWidth, maxHeight, watermark);
} }
if (rule.contains("{HH}")) {
default InputStream formatImage(InputStream in, int maxWidth, int maxHeight, BufferedImage watermark) { rule = rule.replace("{HH}", String.format("%02d", c.get(Calendar.HOUR_OF_DAY)));
return formatImage(Img.from(in), maxWidth, maxHeight, watermark);
} }
if (rule.contains("{mm}")) {
default InputStream formatImage(Img img, int maxWidth, int maxHeight, BufferedImage watermark) { rule = rule.replace("{mm}", String.format("%02d", c.get(Calendar.MINUTE)));
try {
int w = img.getImg().getWidth(null);
int h = img.getImg().getHeight(null);
if (maxWidth > 0 && maxHeight > 0) {
if (w > maxWidth || h > maxHeight) {
int outWidth = 0;
int outHeight = 0;
outHeight = maxWidth * h / w;
if (outHeight > maxHeight) {
outHeight = maxHeight;
outWidth = outHeight * w / h;
} else {
outWidth = maxWidth;
}
img = img.scale(outWidth, outHeight);
w = outWidth;
h = outHeight;
}
}
if (watermark != null) {
int ww = watermark.getWidth(null);
int wh = watermark.getHeight(null);
if (w > ww && h > wh) {
img = img.pressImage(watermark, 0, 0, 1f);
}
}
ByteArrayOutputStream pout = new ByteArrayOutputStream();
img.setTargetImageType(IMAGE_WEBP).write(pout);
ByteArrayInputStream pin = new ByteArrayInputStream(pout.toByteArray());
pout.close();
pout = null;
return pin;
} catch (Exception e) {
throw new RuntimeException("处理图片错误", e);
}
} }
if (rule.contains("{ss}")) {
rule = rule.replace("{ss}", String.format("%02d", c.get(Calendar.SECOND)));
/** }
* <pre> if (rule.contains("{UUID}")) {
* - URI rule = rule.replace("{UUID}", UUID.fastUUID().toString(true));
* - }
* - {yyyy}/{MM}/{dd}/{HH}/{mm}/{ss} if (rule.contains("{i}")) {
* - {UUID} 32 rule = rule.replace("{i}", IdUtils.nextId(Id.groupName).toString());
* - {i} id }
* - {id} intid,+ if (rule.contains("{id}")) {
* - {id16} intid16,+ rule = rule.replace("{id}", Long.toString(id.nextId()));
* - {id36} intid36,+ }
* - {filename} if (rule.contains("{id16}")) {
* - {ext} rule = rule.replace("{id16}", Long.toString(id.nextId(), 16));
* </pre> }
* if (rule.contains("{id36}")) {
* @param rule rule = rule.replace("{id36}", Long.toString(id.nextId(), 36));
* @param filename }
* @return if (rule.contains("{filename}")) {
*/ String temp = null;
default String generateURI(String rule, String filename) { if (filename.contains(".")) {
Calendar c = Calendar.getInstance(); temp = filename.substring(0, filename.lastIndexOf("."));
if (rule.contains("{yyyy}")) { } else {
rule = rule.replace("{yyyy}", "" + c.get(Calendar.YEAR)); temp = filename;
} }
if (rule.contains("{MM}")) { rule = rule.replace("{filename}", temp);
rule = rule.replace("{MM}", String.format("%02d", c.get(Calendar.MONTH) + 1));
}
if (rule.contains("{dd}")) {
rule = rule.replace("{dd}", String.format("%02d", c.get(Calendar.DATE)));
}
if (rule.contains("{HH}")) {
rule = rule.replace("{HH}", String.format("%02d", c.get(Calendar.HOUR_OF_DAY)));
}
if (rule.contains("{mm}")) {
rule = rule.replace("{mm}", String.format("%02d", c.get(Calendar.MINUTE)));
}
if (rule.contains("{ss}")) {
rule = rule.replace("{ss}", String.format("%02d", c.get(Calendar.SECOND)));
}
if (rule.contains("{UUID}")) {
rule = rule.replace("{UUID}", UUID.fastUUID().toString(true));
}
if (rule.contains("{i}")) {
rule = rule.replace("{i}", IdUtils.nextId(Id.groupName).toString());
}
if (rule.contains("{id}")) {
rule = rule.replace("{id}", Long.toString(id.nextId()));
}
if (rule.contains("{id16}")) {
rule = rule.replace("{id16}", Long.toString(id.nextId(), 16));
}
if (rule.contains("{id36}")) {
rule = rule.replace("{id36}", Long.toString(id.nextId(), 36));
}
if (rule.contains("{filename}")) {
String temp = null;
if (filename.contains(".")) {
temp = filename.substring(0, filename.lastIndexOf("."));
} else {
temp = filename;
}
rule = rule.replace("{filename}", temp);
}
if (rule.contains("{ext}")) {
String temp = null;
if (filename.contains(".")) {
temp = filename.substring(filename.lastIndexOf(".") + 1);
} else {
temp = "";
}
rule = rule.replace("{ext}", temp.toLowerCase());
}
return rule;
} }
Id id = new Id(); if (rule.contains("{ext}")) {
String temp = null;
if (filename.contains(".")) {
temp = filename.substring(filename.lastIndexOf(".") + 1);
} else {
temp = "";
}
rule = rule.replace("{ext}", temp.toLowerCase());
}
return rule;
}
static class Id { Id id = new Id();
private static final String groupName = "file:id"; static class Id {
private SymmetricCrypto crypto; private static final String groupName = "file:id";
private String today = DateUtil.today(); private SymmetricCrypto crypto;
public synchronized Long nextId() { private String today = DateUtil.today();
if (crypto == null || !today.equals(DateUtil.today())) {
today = DateUtil.today();
byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue(), today.getBytes()).getEncoded();
crypto = new SymmetricCrypto(SymmetricAlgorithm.DES, key);
}
ByteBuffer buffer = ByteBuffer.allocate(Integer.BYTES);
buffer.putInt(IdUtils.nextDayId(groupName).intValue());
return Math.abs(ByteBuffer.wrap(crypto.encrypt(buffer.array())).getLong());
}
public synchronized Long nextId() {
if (crypto == null || !today.equals(DateUtil.today())) {
today = DateUtil.today();
byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue(), today.getBytes()).getEncoded();
crypto = new SymmetricCrypto(SymmetricAlgorithm.DES, key);
}
ByteBuffer buffer = ByteBuffer.allocate(Integer.BYTES);
buffer.putInt(IdUtils.nextDayId(groupName).intValue());
return Math.abs(ByteBuffer.wrap(crypto.encrypt(buffer.array())).getLong());
} }
}
// public static void main(String[] args) { // public static void main(String[] args) {
// byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue(),DateUtil.today().getBytes()).getEncoded(); // byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue(),DateUtil.today().getBytes()).getEncoded();
// System.out.println(HexUtil.encodeHexStr(key)); // System.out.println(HexUtil.encodeHexStr(key));
@ -361,4 +382,15 @@ public interface ISysOssService {
// System.out.println(ByteBuffer.wrap(aes.encrypt(buffer.array())).getLong()); // System.out.println(ByteBuffer.wrap(aes.encrypt(buffer.array())).getLong());
// } // }
SysOssVo url(SysOssVo oss, int second);
default SysOssVo url(SysOssVo oss) {
return url(oss, 120);
}
String url(Service service,String url,int second);
default String url(Service service,String url) {
return url(service,url, 120);
}
} }

@ -52,278 +52,337 @@ import java.util.stream.Collectors;
@Service @Service
public class SysOssServiceImpl implements ISysOssService, OssService { public class SysOssServiceImpl implements ISysOssService, OssService {
private static final String UPLOAD = "UPLOAD"; private static final String UPLOAD = "UPLOAD";
private final ISysConfigService configService; private final ISysConfigService configService;
private final FileService fileService; private final FileService fileService;
private final SysOssMapper baseMapper; private final SysOssMapper baseMapper;
private static ThreadLocal<Boolean> IGNORE_THREAD_LOCAL = new ThreadLocal<>(); private static ThreadLocal<Boolean> IGNORE_THREAD_LOCAL = new ThreadLocal<>();
private static ThreadLocal<Service> SERVICE_THREAD_LOCAL = new ThreadLocal<>();
@Override
public void ignore(Runnable handle) { @Override
IGNORE_THREAD_LOCAL.set(true); public void setService(Service service, Runnable handle) {
try { SERVICE_THREAD_LOCAL.set(service);
handle.run(); try {
} finally { handle.run();
IGNORE_THREAD_LOCAL.remove(); } finally {
} SERVICE_THREAD_LOCAL.remove();
} }
}
@Override @Override
public <T> T ignore(Supplier<T> handle) { public <T> T setService(Service service, Supplier<T> handle) {
IGNORE_THREAD_LOCAL.set(true); SERVICE_THREAD_LOCAL.set(service);
try { try {
return handle.get(); return handle.get();
} finally { } finally {
IGNORE_THREAD_LOCAL.remove(); SERVICE_THREAD_LOCAL.remove();
}
} }
}
@Override @Override
public TableDataInfo<SysOssVo> queryPageList(SysOssBo bo, PageQuery pageQuery) { public void ignore(Runnable handle) {
LambdaQueryWrapper<SysOss> lqw = buildQueryWrapper(bo); IGNORE_THREAD_LOCAL.set(true);
Page<SysOssVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); try {
List<SysOssVo> filterResult = result.getRecords().stream().map(this::matchingUrl).collect(Collectors.toList()); handle.run();
result.setRecords(filterResult); } finally {
return TableDataInfo.build(result); IGNORE_THREAD_LOCAL.remove();
} }
}
@Override @Override
public List<SysOssVo> listByIds(Collection<Long> ossIds) { public <T> T ignore(Supplier<T> handle) {
List<SysOssVo> list = new ArrayList<>(); IGNORE_THREAD_LOCAL.set(true);
for (Long id : ossIds) { try {
SysOssVo vo = SpringUtils.getBean(ISysOssService.class).getById(id); return handle.get();
if (ObjectUtil.isNotNull(vo)) { } finally {
list.add(this.matchingUrl(vo)); IGNORE_THREAD_LOCAL.remove();
}
}
return list;
} }
}
@Override @Override
public String selectUrlByIds(String ossIds) { public TableDataInfo<SysOssVo> queryPageList(SysOssBo bo, PageQuery pageQuery) {
List<String> list = new ArrayList<>(); LambdaQueryWrapper<SysOss> lqw = buildQueryWrapper(bo);
for (Long id : StringUtils.splitTo(ossIds, Convert::toLong)) { Page<SysOssVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
SysOssVo vo = SpringUtils.getBean(ISysOssService.class).getById(id); List<SysOssVo> filterResult = result.getRecords().stream().map(this::url).collect(Collectors.toList());
if (ObjectUtil.isNotNull(vo)) { result.setRecords(filterResult);
list.add(this.matchingUrl(vo).getUrl()); return TableDataInfo.build(result);
} }
}
return String.join(StringUtils.SEPARATOR, list); @Override
public List<SysOssVo> listByIds(Collection<Long> ossIds) {
List<SysOssVo> list = new ArrayList<>();
for (Long id : ossIds) {
SysOssVo vo = SpringUtils.getBean(ISysOssService.class).getById(id);
if (ObjectUtil.isNotNull(vo)) {
list.add(this.url(vo));
}
}
return list;
}
@Override
public String selectUrlByIds(String ossIds) {
List<String> list = new ArrayList<>();
for (Long id : StringUtils.splitTo(ossIds, Convert::toLong)) {
SysOssVo vo = SpringUtils.getBean(ISysOssService.class).getById(id);
if (ObjectUtil.isNotNull(vo)) {
list.add(this.url(vo).getUrl());
}
} }
return String.join(StringUtils.SEPARATOR, list);
}
private LambdaQueryWrapper<SysOss> buildQueryWrapper(SysOssBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysOss> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(bo.getFileName()), SysOss::getFileName, bo.getFileName());
lqw.like(StringUtils.isNotBlank(bo.getOriginalName()), SysOss::getOriginalName, bo.getOriginalName());
lqw.eq(StringUtils.isNotBlank(bo.getFileSuffix()), SysOss::getFileSuffix, bo.getFileSuffix());
lqw.eq(StringUtils.isNotBlank(bo.getUrl()), SysOss::getUrl, bo.getUrl());
lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null,
SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime"));
lqw.eq(StringUtils.isNotBlank(bo.getCreateBy()), SysOss::getCreateBy, bo.getCreateBy());
lqw.eq(StringUtils.isNotBlank(bo.getService()), SysOss::getService, bo.getService());
return lqw;
}
private LambdaQueryWrapper<SysOss> buildQueryWrapper(SysOssBo bo) { @Cacheable(cacheNames = CacheNames.SYS_OSS, key = "#ossId")
Map<String, Object> params = bo.getParams(); @Override
LambdaQueryWrapper<SysOss> lqw = Wrappers.lambdaQuery(); public SysOssVo getById(Long ossId) {
lqw.like(StringUtils.isNotBlank(bo.getFileName()), SysOss::getFileName, bo.getFileName()); return baseMapper.selectVoById(ossId);
lqw.like(StringUtils.isNotBlank(bo.getOriginalName()), SysOss::getOriginalName, bo.getOriginalName()); }
lqw.eq(StringUtils.isNotBlank(bo.getFileSuffix()), SysOss::getFileSuffix, bo.getFileSuffix());
lqw.eq(StringUtils.isNotBlank(bo.getUrl()), SysOss::getUrl, bo.getUrl()); @Override
lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, public void download(Long ossId, HttpServletResponse response) throws IOException {
SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); SysOssVo sysOss = SpringUtils.getBean(ISysOssService.class).getById(ossId);
lqw.eq(StringUtils.isNotBlank(bo.getCreateBy()), SysOss::getCreateBy, bo.getCreateBy()); if (ObjectUtil.isNull(sysOss)) {
lqw.eq(StringUtils.isNotBlank(bo.getService()), SysOss::getService, bo.getService()); throw new ServiceException("文件数据不存在!");
return lqw; }
FileUtils.setAttachmentResponseHeader(response, sysOss.getOriginalName());
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8");
if (UPLOAD.equals(sysOss.getService())) {
try (InputStream inputStream = new FileInputStream(fileService.getFile(sysOss.getUrl()))) {
int available = inputStream.available();
IoUtil.copy(inputStream, response.getOutputStream());
response.setContentLength(available);
} catch (Exception e) {
throw new ServiceException(e.getMessage());
}
} else {
OssClient storage = OssFactory.instance(sysOss.getService());
try (InputStream inputStream = storage.getObjectContent(sysOss.getUrl())) {
int available = inputStream.available();
IoUtil.copy(inputStream, response.getOutputStream());
response.setContentLength(available);
} catch (Exception e) {
throw new ServiceException(e.getMessage());
}
} }
}
@Cacheable(cacheNames = CacheNames.SYS_OSS, key = "#ossId") public void download(String url, Service service, HttpServletResponse response) throws IOException {
@Override FileUtils.setAttachmentResponseHeader(response, FileNameUtil.getName(url));
public SysOssVo getById(Long ossId) { response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8");
return baseMapper.selectVoById(ossId); if (UPLOAD.equalsIgnoreCase(service.name())) {
try (InputStream inputStream = new FileInputStream(fileService.getFile(url))) {
int available = inputStream.available();
IoUtil.copy(inputStream, response.getOutputStream());
response.setContentLength(available);
} catch (Exception e) {
throw new ServiceException(e.getMessage());
}
} else {
OssClient storage = OssFactory.instance(service.name());
try (InputStream inputStream = storage.getObjectContent(url)) {
int available = inputStream.available();
IoUtil.copy(inputStream, response.getOutputStream());
response.setContentLength(available);
} catch (Exception e) {
throw new ServiceException(e.getMessage());
}
} }
}
@Override @Override
public void download(Long ossId, HttpServletResponse response) throws IOException { public InputStream download(Long ossId) throws IOException {
SysOssVo sysOss = SpringUtils.getBean(ISysOssService.class).getById(ossId); SysOssVo sysOss = SpringUtils.getBean(ISysOssService.class).getById(ossId);
if (ObjectUtil.isNull(sysOss)) { return download(sysOss);
throw new ServiceException("文件数据不存在!"); }
}
FileUtils.setAttachmentResponseHeader(response, sysOss.getOriginalName()); @Override
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8"); public InputStream download(SysOssVo sysOss) throws IOException {
if (UPLOAD.equals(sysOss.getService())) { if (ObjectUtil.isNull(sysOss)) {
try (InputStream inputStream = new FileInputStream(fileService.getFile(sysOss.getUrl()))) { throw new ServiceException("文件数据不存在!");
int available = inputStream.available();
IoUtil.copy(inputStream, response.getOutputStream());
response.setContentLength(available);
} catch (Exception e) {
throw new ServiceException(e.getMessage());
}
} else {
OssClient storage = OssFactory.instance(sysOss.getService());
try (InputStream inputStream = storage.getObjectContent(sysOss.getUrl())) {
int available = inputStream.available();
IoUtil.copy(inputStream, response.getOutputStream());
response.setContentLength(available);
} catch (Exception e) {
throw new ServiceException(e.getMessage());
}
}
} }
if (UPLOAD.equals(sysOss.getService())) {
return new FileInputStream(fileService.getFile(sysOss.getUrl()));
} else {
OssClient storage = OssFactory.instance(sysOss.getService());
return storage.getObjectContent(sysOss.getUrl());
}
}
@Override @Override
public void download(String url, String service, HttpServletResponse response) throws IOException { public InputStream download(String url, Service service) throws IOException {
FileUtils.setAttachmentResponseHeader(response, FileNameUtil.getName(url)); if (UPLOAD.equalsIgnoreCase(service.name())) {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8"); return new FileInputStream(fileService.getFile(url));
if (UPLOAD.equalsIgnoreCase(service)) { } else {
try (InputStream inputStream = new FileInputStream(fileService.getFile(url))) { OssClient storage = OssFactory.instance(service.name());
int available = inputStream.available(); return storage.getObjectContent(url);
IoUtil.copy(inputStream, response.getOutputStream());
response.setContentLength(available);
} catch (Exception e) {
throw new ServiceException(e.getMessage());
}
} else {
OssClient storage = OssFactory.instance(service);
try (InputStream inputStream = storage.getObjectContent(url)) {
int available = inputStream.available();
IoUtil.copy(inputStream, response.getOutputStream());
response.setContentLength(available);
} catch (Exception e) {
throw new ServiceException(e.getMessage());
}
}
} }
}
@Override @Override
public SysOssVo save(InputStream in, String originalFileName, String contentType, String pre, String rule) { public SysOssVo save(InputStream in, String originalFileName, String contentType, String pre, String rule) {
String suffix = StringUtils.substring(originalFileName, originalFileName.lastIndexOf("."), originalFileName.length()); String suffix = StringUtils.substring(originalFileName, originalFileName.lastIndexOf("."), originalFileName.length());
SysOss oss = new SysOss(); SysOss oss = new SysOss();
oss.setOriginalName(originalFileName); oss.setOriginalName(originalFileName);
oss.setFileSuffix(suffix); oss.setFileSuffix(suffix);
if (configService.selectOssEnabled()) { if (configService.selectOssEnabled()) {
OssClient storage = OssFactory.instance(); OssClient storage = SERVICE_THREAD_LOCAL.get() == null ? OssFactory.instance() : OssFactory.instance(SERVICE_THREAD_LOCAL.get().name());
UploadResult uploadResult; UploadResult uploadResult;
try { try {
String path = ""; String path = "";
if (StrUtil.isNotBlank(storage.getProperties().getPrefix())) { if (StrUtil.isNotBlank(storage.getProperties().getPrefix())) {
path += storage.getProperties().getPrefix() + "/"; path += storage.getProperties().getPrefix() + "/";
}
if (StrUtil.isBlank(pre)) {
pre = PRE_DEFAULT;
}
path += pre + "/" + generateURI(rule, originalFileName);
uploadResult = storage.upload(in, path, contentType);
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
// 保存文件信息
oss.setUrl(uploadResult.getUrl());
oss.setFileName(uploadResult.getFilename());
oss.setService(storage.getConfigKey());
} else {
try {
String url = fileService.save(in, originalFileName, pre);
oss.setUrl(url);
oss.setFileName(url);
oss.setService(UPLOAD);
} catch (Exception e) {
throw new RuntimeException("保存文件失败", e);
}
} }
if (IGNORE_THREAD_LOCAL.get() == null) { if (StrUtil.isBlank(pre)) {
baseMapper.insert(oss); pre = PRE_DEFAULT;
} }
path += pre + "/" + generateURI(rule, originalFileName);
uploadResult = storage.upload(in, path, contentType);
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
// 保存文件信息
SysOssVo sysOssVo = new SysOssVo(); oss.setUrl(uploadResult.getUrl());
BeanCopyUtils.copy(oss, sysOssVo); oss.setFileName(uploadResult.getFilename());
return this.matchingUrl(sysOssVo); oss.setService(storage.getConfigKey());
}
public SysOssVo uploadImgs(MultipartFile file, String pre) { } else {
return uploadImgs(file, pre, configService.selectImageMaxWidth(), configService.selectImageMaxHeight(), configService.getWatermark()); try {
String url = fileService.save(in, originalFileName, pre);
oss.setUrl(url);
oss.setFileName(url);
oss.setService(UPLOAD);
} catch (Exception e) {
throw new RuntimeException("保存文件失败", e);
}
} }
if (IGNORE_THREAD_LOCAL.get() == null) {
baseMapper.insert(oss);
}
SysOssVo sysOssVo = new SysOssVo();
BeanCopyUtils.copy(oss, sysOssVo);
return this.url(sysOssVo);
}
public SysOssVo uploadImgs(MultipartFile file, String pre) {
return uploadImgs(file, pre, configService.selectImageMaxWidth(), configService.selectImageMaxHeight(), configService.getWatermark());
}
@Override
public SysOssVo uploadImgs(InputStream inputStream, String pre, int maxWidth, int maxHeight, BufferedImage watermark) {
String originalFileName = "temp.webp";
String suffix = StringUtils.substring(originalFileName, originalFileName.lastIndexOf("."), originalFileName.length());
SysOss oss = new SysOss();
oss.setFileSuffix(suffix);
oss.setOriginalName(originalFileName);
if (configService.selectOssEnabled()) {
OssClient storage = SERVICE_THREAD_LOCAL.get() == null ? OssFactory.instance() : OssFactory.instance(SERVICE_THREAD_LOCAL.get().name());
UploadResult uploadResult;
try (
InputStream in = formatImage(inputStream, maxWidth, maxWidth, watermark)
) {
String path = "";
if (StrUtil.isNotBlank(storage.getProperties().getPrefix())) {
path += storage.getProperties().getPrefix() + "/";
@Override
public SysOssVo uploadImgs(InputStream inputStream, String pre, int maxWidth, int maxHeight, BufferedImage watermark) {
String originalFileName = "temp.webp";
String suffix = StringUtils.substring(originalFileName, originalFileName.lastIndexOf("."), originalFileName.length());
SysOss oss = new SysOss();
oss.setFileSuffix(suffix);
oss.setOriginalName(originalFileName);
if (configService.selectOssEnabled()) {
OssClient storage = OssFactory.instance();
UploadResult uploadResult;
try (
InputStream in = formatImage(inputStream, maxWidth, maxWidth, watermark)
) {
String path = "";
if (StrUtil.isNotBlank(storage.getProperties().getPrefix())) {
path += storage.getProperties().getPrefix() + "/";
}
if (StrUtil.isNotBlank(pre)) {
path += pre + "/";
}
path += generateURI("{yyyy}/{MM}/{dd}/{id36}.webp", "a.webp");
uploadResult = storage.upload(in, path, "image/webp");
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
// 保存文件信息
oss.setUrl(uploadResult.getUrl());
oss.setFileName(uploadResult.getFilename());
oss.setService(storage.getConfigKey());
} else {
try (
InputStream in = formatImage(inputStream, maxWidth, maxWidth, watermark)
) {
String url = fileService.save(in, originalFileName + ".webp", pre);
oss.setUrl(url);
oss.setFileName(url);
oss.setService(UPLOAD);
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
} }
if (IGNORE_THREAD_LOCAL.get() == null) { if (StrUtil.isNotBlank(pre)) {
baseMapper.insert(oss); path += pre + "/";
} }
SysOssVo sysOssVo = new SysOssVo(); path += generateURI("{yyyy}/{MM}/{dd}/{id36}.webp", "a.webp");
BeanCopyUtils.copy(oss, sysOssVo);
return this.matchingUrl(sysOssVo); uploadResult = storage.upload(in, path, "image/webp");
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
// 保存文件信息
oss.setUrl(uploadResult.getUrl());
oss.setFileName(uploadResult.getFilename());
oss.setService(storage.getConfigKey());
} else {
try (
InputStream in = formatImage(inputStream, maxWidth, maxWidth, watermark)
) {
String url = fileService.save(in, originalFileName + ".webp", pre);
oss.setUrl(url);
oss.setFileName(url);
oss.setService(UPLOAD);
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
} }
if (IGNORE_THREAD_LOCAL.get() == null) {
baseMapper.insert(oss);
}
SysOssVo sysOssVo = new SysOssVo();
BeanCopyUtils.copy(oss, sysOssVo);
return this.url(sysOssVo);
}
@Override @Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) { if (isValid) {
// 做一些业务上的校验,判断是否需要校验 // 做一些业务上的校验,判断是否需要校验
} }
List<SysOss> list = baseMapper.selectBatchIds(ids); List<SysOss> list = baseMapper.selectBatchIds(ids);
for (SysOss sysOss : list) { for (SysOss sysOss : list) {
if (UPLOAD.equals(sysOss.getService())) { if (UPLOAD.equals(sysOss.getService())) {
fileService.delete(sysOss.getUrl()); fileService.delete(sysOss.getUrl());
} else { } else {
OssClient storage = OssFactory.instance(sysOss.getService()); OssClient storage = OssFactory.instance(sysOss.getService());
storage.delete(sysOss.getUrl()); storage.delete(sysOss.getUrl());
} }
}
return baseMapper.deleteBatchIds(ids) > 0;
} }
return baseMapper.deleteBatchIds(ids) > 0;
}
/** @Override
* Url public SysOssVo url(SysOssVo oss, int second) {
* if (UPLOAD.equals(oss.getService())) {
* @param oss OSS return oss;
* @return oss UrlOSS } else {
*/ OssClient storage = OssFactory.instance(oss.getService());
private SysOssVo matchingUrl(SysOssVo oss) { // 仅修改桶类型为 private 的URL临时URL时长为120s
if (UPLOAD.equals(oss.getService())) { if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) {
return oss; oss.setUrl(storage.getPrivateUrl(oss.getFileName(), second));
} else { }
OssClient storage = OssFactory.instance(oss.getService()); return oss;
// 仅修改桶类型为 private 的URL临时URL时长为120s }
if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) { }
oss.setUrl(storage.getPrivateUrl(oss.getFileName(), 120));
} @Override
return oss; public String url(Service service, String url, int second) {
} if (Service.upload.equals(service)) {
return url;
} else {
OssClient storage = OssFactory.instance(service.name());
// 仅修改桶类型为 private 的URL临时URL时长为120s
if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) {
return storage.getPrivateUrl(url, second);
}
return url;
} }
}
} }

Loading…
Cancel
Save