feat: 编码规范、新增组件
This commit is contained in:
@@ -5,8 +5,6 @@ import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 结果封装类
|
||||
*/
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package cn.odboy.base;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
@@ -32,16 +32,12 @@ public class MyEntity extends MyObject {
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@ApiModelProperty(value = "创建时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
// @JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
// @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private Timestamp createTime;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
@ApiModelProperty(value = "更新时间: yyyy-MM-dd HH:mm:ss", hidden = true)
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
// @JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
// @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private Timestamp updateTime;
|
||||
|
||||
/* 分组校验 */
|
||||
|
||||
@@ -23,4 +23,15 @@ public class SystemConst {
|
||||
* Token前缀
|
||||
*/
|
||||
public static final String TOKEN_PREFIX = "Bearer";
|
||||
|
||||
/**
|
||||
* 小数点
|
||||
*/
|
||||
public static final String SYMBOL_DOT = ".";
|
||||
public static final String SYMBOL_EQUAL = "=";
|
||||
public static final String SYMBOL_ADD = "+";
|
||||
public static final String SYMBOL_SUBTRACT = "-";
|
||||
public static final String SYMBOL_AT = "@";
|
||||
public static final String PROPERTY_OS_NAME = "os.name";
|
||||
public static final String OS_NAME_WINDOWS = "Windows";
|
||||
}
|
||||
|
||||
@@ -56,4 +56,9 @@ public interface SystemRedisKey {
|
||||
* 登录验证码
|
||||
*/
|
||||
String CAPTCHA_LOGIN = "captcha::login:";
|
||||
|
||||
/**
|
||||
* 用户信息
|
||||
*/
|
||||
String USER_INFO = "user::info:";
|
||||
}
|
||||
|
||||
@@ -89,11 +89,11 @@ public interface EasyMapper<E> extends BaseMapper<E> {
|
||||
Map<String, Object> result = new ConcurrentHashMap<>(1);
|
||||
List<E> list = this.selectList(wrapper);
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return new HashMap<>();
|
||||
return new HashMap<>(3);
|
||||
}
|
||||
E tempObj = list.stream().findFirst().orElse(null);
|
||||
if (tempObj == null) {
|
||||
return new HashMap<>();
|
||||
return new HashMap<>(3);
|
||||
}
|
||||
Field[] fields = ReflectUtil.getFields(tempObj.getClass());
|
||||
for (E e : list) {
|
||||
|
||||
@@ -109,10 +109,7 @@ public class CmdGenHelper {
|
||||
// 5.2.Controller策略配置
|
||||
// 开启生成@RestController控制器
|
||||
fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder().enableRestStyle());
|
||||
// 如果不需要生成Controller
|
||||
// fastAutoGenerator.templateConfig(templateConfig -> templateConfig.controller(""));
|
||||
// 5.3.Service策略配置
|
||||
// 格式化service接口和实现类的文件名称, 去掉默认的ServiceName前面的I
|
||||
// 如果不需要生成Controller,fastAutoGenerator.templateConfig(templateConfig -> templateConfig.controller(""))。5.3.Service策略配置:格式化service接口和实现类的文件名称, 去掉默认的ServiceName前面的I
|
||||
fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder
|
||||
.serviceBuilder()
|
||||
.formatServiceFileName("%sService")
|
||||
|
||||
@@ -110,10 +110,11 @@ public class MybatisHelper {
|
||||
if (fieldVal instanceof List) {
|
||||
List<Object> between = new ArrayList<>((List<?>) fieldVal);
|
||||
if (CollectionUtil.isNotEmpty(between)) {
|
||||
if (between.size() >= 2) {
|
||||
int minSize = 2;
|
||||
if (between.size() >= minSize) {
|
||||
queryWrapper.between(finalAttributeName, between.get(0), between.get(1));
|
||||
} else {
|
||||
throw new BadRequestException("BETWEEN类型的对象列表长度必须 >= 2");
|
||||
throw new BadRequestException("BETWEEN类型的对象列表长度必须 >= " + minSize);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -215,16 +216,9 @@ public class MybatisHelper {
|
||||
|
||||
public static void main(String[] args) {
|
||||
QueryWrapper<TestDomain> query = new QueryWrapper<TestDomain>();
|
||||
//query.or();
|
||||
query.or(wrapper -> wrapper.eq("username", 1).or().eq("nickname", 2));
|
||||
//query.like("a",1);
|
||||
//query.or();
|
||||
//query.like("b",2);
|
||||
//query.and(wrapper->wrapper.eq("c",1));
|
||||
query.eq("id", 1);
|
||||
query.orderByDesc("id");
|
||||
// query.apply("left join student t1 on t1.id = t1.id");
|
||||
// query.last("left join student t1 on t1.id = t1.id");
|
||||
System.err.println("getSqlSelect=================================");
|
||||
System.err.println(query.getSqlSelect());
|
||||
System.err.println("getSqlSegment=================================");
|
||||
|
||||
@@ -181,8 +181,8 @@ public class RedisConfiguration extends CachingConfigurerSupport {
|
||||
return null;
|
||||
}
|
||||
String str = new String(bytes, StandardCharsets.UTF_8);
|
||||
// 支持AutoType
|
||||
return JSON.parseObject(str, clazz, JSONReader.Feature.SupportAutoType);
|
||||
// 移除对 SupportAutoType 的使用
|
||||
return JSON.parseObject(str, clazz);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,6 @@ package cn.odboy.server;
|
||||
|
||||
import cn.odboy.constant.SystemConst;
|
||||
import cn.odboy.util.AnonTagUtil;
|
||||
import cn.odboy.util.SecurityUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
@@ -85,7 +84,7 @@ public class SwaggerConfig {
|
||||
|
||||
private SecurityContext getContextByPath() {
|
||||
Set<String> urls = AnonTagUtil.getAllAnonymousUrl(applicationContext);
|
||||
urls = urls.stream().filter(url -> !url.equals("/")).collect(Collectors.toSet());
|
||||
urls = urls.stream().filter(url -> !"/".equals(url)).collect(Collectors.toSet());
|
||||
String regExp = "^(?!" + apiPath + String.join("|" + apiPath, urls) + ").*$";
|
||||
return SecurityContext.builder()
|
||||
.securityReferences(defaultAuth())
|
||||
|
||||
@@ -63,10 +63,10 @@ public class AsyncExecutor implements AsyncConfigurer {
|
||||
|
||||
/**
|
||||
* 自定义线程池,用法,注入到类中使用
|
||||
* private ThreadPoolTaskExecutor taskExecutor;
|
||||
*/
|
||||
@Bean("taskAsync")
|
||||
public ThreadPoolTaskExecutor taskAsync() {
|
||||
// 用法 private ThreadPoolTaskExecutor taskExecutor
|
||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
||||
executor.setCorePoolSize(AsyncExecutor.corePoolSize);
|
||||
executor.setMaxPoolSize(AsyncExecutor.maxPoolSize);
|
||||
|
||||
@@ -17,9 +17,6 @@ package cn.odboy.util;
|
||||
|
||||
import cn.odboy.base.MyMetaOption;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.math.BigDecimal;
|
||||
@@ -37,7 +34,7 @@ import java.util.stream.Collectors;
|
||||
*/
|
||||
public class CollUtil extends cn.hutool.core.collection.CollUtil {
|
||||
private static <T, K> Predicate<T> distinctPredicate(Function<? super T, ? extends K> keyMapper) {
|
||||
Map<Object, Boolean> map = new HashMap<>();
|
||||
Map<Object, Boolean> map = new HashMap<>(3);
|
||||
return (t) -> null == map.putIfAbsent(keyMapper.apply(t), true);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ import java.nio.charset.StandardCharsets;
|
||||
/**
|
||||
* DES加密
|
||||
*/
|
||||
public class DESEncryptUtil {
|
||||
public class DesEncryptUtil {
|
||||
|
||||
private static final String STR_PARAM = "Passw0rd";
|
||||
private static final IvParameterSpec IV = new IvParameterSpec(STR_PARAM.getBytes(StandardCharsets.UTF_8));
|
||||
@@ -5,6 +5,7 @@ import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.poi.excel.BigExcelWriter;
|
||||
import cn.hutool.poi.excel.ExcelUtil;
|
||||
import cn.odboy.constant.FileTypeEnum;
|
||||
import cn.odboy.constant.SystemConst;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.util.IOUtils;
|
||||
@@ -25,6 +26,8 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.odboy.constant.SystemConst.*;
|
||||
|
||||
/**
|
||||
* File工具类,扩展 hutool 工具包
|
||||
*/
|
||||
@@ -175,8 +178,10 @@ public class FileUtil extends cn.hutool.core.io.FileUtil {
|
||||
if (value instanceof String) {
|
||||
String strValue = (String) value;
|
||||
// 检查并处理以特殊字符开头的值
|
||||
if (strValue.startsWith("=") || strValue.startsWith("+") || strValue.startsWith("-") || strValue.startsWith("@")) {
|
||||
strValue = "'" + strValue; // 添加单引号前缀
|
||||
if (strValue.startsWith(SYMBOL_EQUAL) || strValue.startsWith(SYMBOL_ADD)
|
||||
|| strValue.startsWith(SYMBOL_SUBTRACT) || strValue.startsWith(SYMBOL_AT)) {
|
||||
// 添加单引号前缀
|
||||
strValue = "'" + strValue;
|
||||
}
|
||||
sanitizedMap.put(key, strValue);
|
||||
} else {
|
||||
@@ -346,7 +351,7 @@ public class FileUtil extends cn.hutool.core.io.FileUtil {
|
||||
|
||||
// 不允许文件名超过255(在Mac和Linux中)或260(在Windows中)个字符
|
||||
int maxFileNameLength = 255;
|
||||
if (System.getProperty("os.name").startsWith("Windows")) {
|
||||
if (System.getProperty(SystemConst.PROPERTY_OS_NAME).startsWith(SystemConst.OS_NAME_WINDOWS)) {
|
||||
maxFileNameLength = 260;
|
||||
}
|
||||
if (fileName.length() > maxFileNameLength) {
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ import java.util.Enumeration;
|
||||
/**
|
||||
* IP地址 相关
|
||||
*/
|
||||
public class IPUtil {
|
||||
public class IpUtil {
|
||||
/**
|
||||
* 注入bean
|
||||
*/
|
||||
@@ -50,7 +50,8 @@ public class ListUtil {
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
List<MyEntity> entities = new ArrayList<>();
|
||||
for (int i = 0; i < 50; i++) {
|
||||
int total = 50;
|
||||
for (int i = 0; i < total; i++) {
|
||||
MyEntity entity = new MyEntity();
|
||||
if (i % 2 == 0) {
|
||||
entity.setCreateBy("odboy");
|
||||
|
||||
+7
-7
@@ -13,7 +13,7 @@ import java.security.spec.X509EncodedKeySpec;
|
||||
/**
|
||||
* Rsa 工具类,公钥私钥生成,加解密
|
||||
*/
|
||||
public class RSAEncryptUtil {
|
||||
public class RsaEncryptUtil {
|
||||
|
||||
private static final String SRC = "123456";
|
||||
|
||||
@@ -34,12 +34,12 @@ public class RSAEncryptUtil {
|
||||
*/
|
||||
private static void test1(RsaKeyPair keyPair) throws Exception {
|
||||
System.out.println("***************** 公钥加密私钥解密开始 *****************");
|
||||
String text1 = encryptByPublicKey(keyPair.getPublicKey(), RSAEncryptUtil.SRC);
|
||||
String text1 = encryptByPublicKey(keyPair.getPublicKey(), RsaEncryptUtil.SRC);
|
||||
String text2 = decryptByPrivateKey(keyPair.getPrivateKey(), text1);
|
||||
System.out.println("加密前:" + RSAEncryptUtil.SRC);
|
||||
System.out.println("加密前:" + RsaEncryptUtil.SRC);
|
||||
System.out.println("加密后:" + text1);
|
||||
System.out.println("解密后:" + text2);
|
||||
if (RSAEncryptUtil.SRC.equals(text2)) {
|
||||
if (RsaEncryptUtil.SRC.equals(text2)) {
|
||||
System.out.println("解密字符串和原始字符串一致,解密成功");
|
||||
} else {
|
||||
System.out.println("解密字符串和原始字符串不一致,解密失败");
|
||||
@@ -54,12 +54,12 @@ public class RSAEncryptUtil {
|
||||
*/
|
||||
private static void test2(RsaKeyPair keyPair) throws Exception {
|
||||
System.out.println("***************** 私钥加密公钥解密开始 *****************");
|
||||
String text1 = encryptByPrivateKey(keyPair.getPrivateKey(), RSAEncryptUtil.SRC);
|
||||
String text1 = encryptByPrivateKey(keyPair.getPrivateKey(), RsaEncryptUtil.SRC);
|
||||
String text2 = decryptByPublicKey(keyPair.getPublicKey(), text1);
|
||||
System.out.println("加密前:" + RSAEncryptUtil.SRC);
|
||||
System.out.println("加密前:" + RsaEncryptUtil.SRC);
|
||||
System.out.println("加密后:" + text1);
|
||||
System.out.println("解密后:" + text2);
|
||||
if (RSAEncryptUtil.SRC.equals(text2)) {
|
||||
if (RsaEncryptUtil.SRC.equals(text2)) {
|
||||
System.out.println("解密字符串和原始字符串一致,解密成功");
|
||||
} else {
|
||||
System.out.println("解密字符串和原始字符串不一致,解密失败");
|
||||
@@ -50,7 +50,7 @@ public class ScriptUtil {
|
||||
ScriptContext newContext = new SimpleScriptContext();
|
||||
if (compareObj != null) {
|
||||
Field[] fields = ReflectUtil.getFields(compareObj.getClass());
|
||||
Map<String, Object> filedNameValueMap = new HashMap<>();
|
||||
Map<String, Object> filedNameValueMap = new HashMap<>(3);
|
||||
Arrays.stream(fields).parallel().forEach(f -> filedNameValueMap.put(f.getName(), ReflectUtil.getFieldValue(compareObj, f)));
|
||||
Set<Map.Entry<String, Object>> entries = filedNameValueMap.entrySet();
|
||||
long count = entries.stream().filter(f -> f.getValue() != null).count();
|
||||
@@ -64,12 +64,6 @@ public class ScriptUtil {
|
||||
});
|
||||
newContext.setBindings(engineScope, ScriptContext.ENGINE_SCOPE);
|
||||
}
|
||||
// if (script.contains(FUNCTION_TAG)) {
|
||||
// // 由ScriptEngines实现的接口, 其方法允许调用以前已执行的脚本中的过程
|
||||
// Invocable inv = (Invocable) engine;
|
||||
// // 调用全局函数, 并传入参数
|
||||
// inv.invokeFunction("hello", "测试");
|
||||
// }
|
||||
// 执行脚本, 注意这里指定新的执行作用域上下文
|
||||
return engine.eval(script, newContext);
|
||||
} catch (ScriptException e) {
|
||||
|
||||
@@ -10,7 +10,6 @@ import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -18,9 +18,6 @@ import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author /
|
||||
*/
|
||||
@Slf4j
|
||||
public class SqlUtil {
|
||||
/**
|
||||
|
||||
+1
@@ -1,4 +1,5 @@
|
||||
package cn.odboy.websocket.context;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@@ -3,16 +3,13 @@ package cn.odboy.websocket.context;
|
||||
import cn.odboy.websocket.dto.WebSocketMsgDto;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.websocket.*;
|
||||
import javax.websocket.server.PathParam;
|
||||
import javax.websocket.server.ServerEndpoint;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
|
||||
@Slf4j
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.model.job.dto;
|
||||
package cn.odboy.model.job.request;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package cn.odboy.model.system.request;
|
||||
|
||||
import cn.odboy.base.MyObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class CreateDeptRequest extends MyObject {
|
||||
@NotBlank(message = "部门名称必填")
|
||||
private String name;
|
||||
@NotNull(message = "部门排序必填")
|
||||
private Integer deptSort;
|
||||
private Boolean enabled;
|
||||
private String isTop;
|
||||
private Long pid;
|
||||
private Integer subCount = 0;
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package cn.odboy.model.system.request;
|
||||
|
||||
import cn.odboy.base.MyObject;
|
||||
import cn.odboy.model.system.domain.Dict;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class CreateDictDetailRequest extends MyObject {
|
||||
@NotBlank(message = "参数dict必填")
|
||||
private Dict dict;
|
||||
@NotBlank(message = "字典标签必填")
|
||||
private String label;
|
||||
@NotBlank(message = "字典值必填")
|
||||
private String value;
|
||||
@NotNull(message = "字典排序必填")
|
||||
private Integer dictSort;
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package cn.odboy.model.system.request;
|
||||
|
||||
import cn.odboy.base.MyObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class CreateDictRequest extends MyObject {
|
||||
@NotBlank(message = "字典名称必填")
|
||||
private String name;
|
||||
private String description;
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package cn.odboy.model.system.request;
|
||||
|
||||
import cn.odboy.base.MyObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class CreateJobRequest extends MyObject {
|
||||
@NotBlank(message = "职位名称必填")
|
||||
private String name;
|
||||
@NotNull(message = "职位排序必填")
|
||||
private Integer jobSort;
|
||||
private Boolean enabled;
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package cn.odboy.model.system.request;
|
||||
|
||||
import cn.odboy.base.MyObject;
|
||||
import cn.odboy.model.system.domain.Dept;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Set;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class CreateRoleRequest extends MyObject {
|
||||
@NotBlank(message = "角色名称必填")
|
||||
private String name;
|
||||
@NotNull(message = "角色级别必填")
|
||||
private Integer level;
|
||||
@NotBlank(message = "数据范围必填")
|
||||
private String dataScope;
|
||||
private String description;
|
||||
/**
|
||||
* 关联的部门
|
||||
*/
|
||||
private Long id;
|
||||
private Set<Dept> depts;
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.model.system.dto;
|
||||
package cn.odboy.model.system.request;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.model.system.dto;
|
||||
package cn.odboy.model.system.request;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.model.system.dto;
|
||||
package cn.odboy.model.system.request;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.model.system.dto;
|
||||
package cn.odboy.model.system.request;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.model.system.dto;
|
||||
package cn.odboy.model.system.request;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.model.system.dto;
|
||||
package cn.odboy.model.system.request;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.model.system.dto;
|
||||
package cn.odboy.model.system.request;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Getter;
|
||||
@@ -8,7 +8,7 @@ import javax.validation.constraints.NotBlank;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class UserAuthDto {
|
||||
public class UserLoginRequest {
|
||||
|
||||
@NotBlank
|
||||
@ApiModelProperty(value = "用户名")
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.model.system.dto;
|
||||
package cn.odboy.model.system.request;
|
||||
|
||||
import cn.odboy.base.MyObject;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.model.system.dto;
|
||||
package cn.odboy.model.system.response;
|
||||
|
||||
import cn.odboy.base.MyObject;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.model.system.dto;
|
||||
package cn.odboy.model.system.response;
|
||||
|
||||
import cn.odboy.base.MyObject;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
package cn.odboy.model.system.response;
|
||||
|
||||
import cn.odboy.base.MyObject;
|
||||
import cn.odboy.model.system.domain.Dept;
|
||||
import cn.odboy.model.system.domain.Job;
|
||||
import cn.odboy.model.system.domain.Role;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class SimpleUserVo extends MyObject {
|
||||
@ApiModelProperty(value = "ID", hidden = true)
|
||||
private Long id;
|
||||
@ApiModelProperty(value = "用户角色")
|
||||
private Set<Role> roles;
|
||||
@ApiModelProperty(value = "用户岗位")
|
||||
private Set<Job> jobs;
|
||||
private Long deptId;
|
||||
@TableField(exist = false)
|
||||
private Dept dept;
|
||||
@ApiModelProperty(value = "用户名称")
|
||||
private String username;
|
||||
@ApiModelProperty(value = "用户昵称")
|
||||
private String nickName;
|
||||
@ApiModelProperty(value = "邮箱")
|
||||
private String email;
|
||||
@ApiModelProperty(value = "电话号码")
|
||||
private String phone;
|
||||
@ApiModelProperty(value = "用户性别")
|
||||
private String gender;
|
||||
@ApiModelProperty(value = "头像真实名称", hidden = true)
|
||||
private String avatarName;
|
||||
@ApiModelProperty(value = "是否启用")
|
||||
private Boolean enabled;
|
||||
@ApiModelProperty(value = "是否为admin账号", hidden = true)
|
||||
private Boolean isAdmin = false;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package cn.odboy.model.system.response;
|
||||
|
||||
import cn.odboy.base.MyObject;
|
||||
import cn.odboy.model.system.dto.RoleCodeDto;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class UserInfoVo extends MyObject {
|
||||
private SimpleUserVo user;
|
||||
private List<Long> dataScopes;
|
||||
private List<RoleCodeDto> authorities;
|
||||
|
||||
public Set<String> getRoles() {
|
||||
return authorities.stream().map(RoleCodeDto::getAuthority).collect(Collectors.toSet());
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.model.system.dto;
|
||||
package cn.odboy.model.system.response;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.model.tools.dto;
|
||||
package cn.odboy.model.tools.request;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.model.tools.dto;
|
||||
package cn.odboy.model.tools.request;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package cn.odboy.application.job.mapper;
|
||||
|
||||
import cn.odboy.model.job.domain.QuartzJob;
|
||||
import cn.odboy.model.job.dto.QuartzJobQueryCriteria;
|
||||
import cn.odboy.model.job.request.QuartzJobQueryCriteria;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package cn.odboy.application.job.mapper;
|
||||
|
||||
import cn.odboy.model.job.domain.QuartzLog;
|
||||
import cn.odboy.model.job.dto.QuartzJobQueryCriteria;
|
||||
import cn.odboy.model.job.request.QuartzJobQueryCriteria;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ import cn.odboy.context.SpringBeanHolder;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.job.domain.QuartzJob;
|
||||
import cn.odboy.model.job.domain.QuartzLog;
|
||||
import cn.odboy.model.job.dto.QuartzJobQueryCriteria;
|
||||
import cn.odboy.model.job.request.QuartzJobQueryCriteria;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ package cn.odboy.application.job.service;
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.model.job.domain.QuartzJob;
|
||||
import cn.odboy.model.job.domain.QuartzLog;
|
||||
import cn.odboy.model.job.dto.QuartzJobQueryCriteria;
|
||||
import cn.odboy.model.job.request.QuartzJobQueryCriteria;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ import cn.odboy.base.PageResult;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.job.domain.QuartzJob;
|
||||
import cn.odboy.model.job.domain.QuartzLog;
|
||||
import cn.odboy.model.job.dto.QuartzJobQueryCriteria;
|
||||
import cn.odboy.model.job.request.QuartzJobQueryCriteria;
|
||||
import cn.odboy.util.FileUtil;
|
||||
import cn.odboy.util.PageUtil;
|
||||
import cn.odboy.util.RedisUtil;
|
||||
|
||||
+3
-3
@@ -3,11 +3,11 @@ package cn.odboy.util;
|
||||
import lombok.SneakyThrows;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static cn.odboy.util.DESEncryptUtil.desDecrypt;
|
||||
import static cn.odboy.util.DESEncryptUtil.desEncrypt;
|
||||
import static cn.odboy.util.DesEncryptUtil.desDecrypt;
|
||||
import static cn.odboy.util.DesEncryptUtil.desEncrypt;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class DESEncryptUtilTest {
|
||||
public class DesEncryptUtilTest {
|
||||
|
||||
@SneakyThrows
|
||||
public static void main(String[] args) {
|
||||
-2
@@ -16,6 +16,4 @@ public class LoginProperties {
|
||||
* 账号单用户 登录
|
||||
*/
|
||||
private boolean singleLogin = false;
|
||||
|
||||
public static final String cacheKey = "user_login_cache:";
|
||||
}
|
||||
|
||||
-1
@@ -1,6 +1,5 @@
|
||||
package cn.odboy.application.core.config;
|
||||
|
||||
import cn.odboy.util.SecurityUtil;
|
||||
import lombok.Data;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
-1
@@ -5,7 +5,6 @@ import cn.odboy.application.core.config.SecurityProperties;
|
||||
import cn.odboy.application.core.service.impl.UserOnlineServiceImpl;
|
||||
import cn.odboy.constant.SystemConst;
|
||||
import cn.odboy.model.system.dto.UserOnlineDto;
|
||||
import cn.odboy.util.SecurityUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
|
||||
-1
@@ -8,7 +8,6 @@ import cn.odboy.constant.SystemConst;
|
||||
import cn.odboy.constant.SystemRedisKey;
|
||||
import cn.odboy.model.system.dto.UserJwtDto;
|
||||
import cn.odboy.util.RedisUtil;
|
||||
import cn.odboy.util.SecurityUtil;
|
||||
import io.jsonwebtoken.*;
|
||||
import io.jsonwebtoken.io.Decoders;
|
||||
import io.jsonwebtoken.security.Keys;
|
||||
|
||||
+18
-18
@@ -1,23 +1,24 @@
|
||||
package cn.odboy.application.core.rest;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.odboy.annotation.AnonymousDeleteMapping;
|
||||
import cn.odboy.annotation.AnonymousGetMapping;
|
||||
import cn.odboy.annotation.AnonymousPostMapping;
|
||||
import cn.odboy.application.core.config.CaptchaConfig;
|
||||
import cn.odboy.application.core.config.LoginProperties;
|
||||
import cn.odboy.application.core.config.SecurityProperties;
|
||||
import cn.odboy.application.core.constant.LoginCodeEnum;
|
||||
import cn.odboy.application.core.context.TokenProvider;
|
||||
import cn.odboy.application.core.context.UserDetailsHelper;
|
||||
import cn.odboy.application.core.service.impl.UserDetailsServiceImpl;
|
||||
import cn.odboy.application.core.service.impl.UserOnlineServiceImpl;
|
||||
import cn.odboy.constant.SystemConst;
|
||||
import cn.odboy.constant.SystemRedisKey;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.system.dto.UserAuthDto;
|
||||
import cn.odboy.model.system.response.UserInfoVo;
|
||||
import cn.odboy.model.system.dto.UserJwtDto;
|
||||
import cn.odboy.model.system.request.UserLoginRequest;
|
||||
import cn.odboy.properties.RsaProperties;
|
||||
import cn.odboy.util.RSAEncryptUtil;
|
||||
import cn.odboy.util.RsaEncryptUtil;
|
||||
import cn.odboy.util.RedisUtil;
|
||||
import cn.odboy.util.SecurityUtil;
|
||||
import cn.odboy.util.StringUtil;
|
||||
@@ -31,7 +32,6 @@ import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
@@ -53,32 +53,31 @@ import java.util.concurrent.TimeUnit;
|
||||
@RequiredArgsConstructor
|
||||
@Api(tags = "系统:系统授权接口")
|
||||
public class AuthController {
|
||||
private final SecurityProperties properties;
|
||||
private final RedisUtil redisUtil;
|
||||
private final UserOnlineServiceImpl onlineUserService;
|
||||
private final TokenProvider tokenProvider;
|
||||
private final CaptchaConfig captchaConfig;
|
||||
private final LoginProperties loginProperties;
|
||||
private final PasswordEncoder passwordEncoder;
|
||||
private final UserDetailsHelper userDetailsService;
|
||||
private final UserDetailsServiceImpl userDetailsService;
|
||||
|
||||
@ApiOperation("登录授权")
|
||||
@AnonymousPostMapping(value = "/login")
|
||||
public ResponseEntity<Object> login(@Validated @RequestBody UserAuthDto authUser, HttpServletRequest request) throws Exception {
|
||||
public ResponseEntity<Object> login(@Validated @RequestBody UserLoginRequest loginRequest, HttpServletRequest request) throws Exception {
|
||||
// 密码解密
|
||||
String password = RSAEncryptUtil.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword());
|
||||
String password = RsaEncryptUtil.decryptByPrivateKey(RsaProperties.privateKey, loginRequest.getPassword());
|
||||
// 查询验证码
|
||||
String code = redisUtil.get(authUser.getUuid(), String.class);
|
||||
String code = redisUtil.get(loginRequest.getUuid(), String.class);
|
||||
// 清除验证码
|
||||
redisUtil.del(authUser.getUuid());
|
||||
redisUtil.del(loginRequest.getUuid());
|
||||
if (StringUtil.isBlank(code)) {
|
||||
throw new BadRequestException("验证码不存在或已过期");
|
||||
}
|
||||
if (StringUtil.isBlank(authUser.getCode()) || !authUser.getCode().equalsIgnoreCase(code)) {
|
||||
if (StringUtil.isBlank(loginRequest.getCode()) || !loginRequest.getCode().equalsIgnoreCase(code)) {
|
||||
throw new BadRequestException("验证码错误");
|
||||
}
|
||||
// 获取用户信息
|
||||
UserJwtDto jwtUser = userDetailsService.loadUserByUsername(authUser.getUsername());
|
||||
UserJwtDto jwtUser = userDetailsService.loadUserByUsername(loginRequest.getUsername());
|
||||
// 验证用户密码
|
||||
if (!passwordEncoder.matches(password, jwtUser.getPassword())) {
|
||||
throw new BadRequestException("登录密码错误");
|
||||
@@ -90,11 +89,11 @@ public class AuthController {
|
||||
// 返回 token 与 用户信息
|
||||
Map<String, Object> authInfo = new HashMap<>(2) {{
|
||||
put("token", String.format("%s %s", SystemConst.TOKEN_PREFIX, token));
|
||||
put("user", jwtUser);
|
||||
put("user", BeanUtil.copyProperties(jwtUser, UserInfoVo.class));
|
||||
}};
|
||||
if (loginProperties.isSingleLogin()) {
|
||||
// 踢掉之前已经登录的token
|
||||
onlineUserService.kickOutByUsername(authUser.getUsername());
|
||||
onlineUserService.kickOutByUsername(loginRequest.getUsername());
|
||||
}
|
||||
// 保存在线信息
|
||||
onlineUserService.save(jwtUser, token, request);
|
||||
@@ -104,9 +103,10 @@ public class AuthController {
|
||||
|
||||
@ApiOperation("获取用户信息")
|
||||
@GetMapping(value = "/info")
|
||||
public ResponseEntity<UserDetails> getUserInfo() {
|
||||
public ResponseEntity<UserInfoVo> getUserInfo() {
|
||||
UserJwtDto jwtUser = (UserJwtDto) SecurityUtil.getCurrentUser();
|
||||
return ResponseEntity.ok(jwtUser);
|
||||
UserInfoVo userInfoVo = BeanUtil.copyProperties(jwtUser, UserInfoVo.class);
|
||||
return ResponseEntity.ok(userInfoVo);
|
||||
}
|
||||
|
||||
@ApiOperation("获取验证码")
|
||||
@@ -117,7 +117,7 @@ public class AuthController {
|
||||
String uuid = SystemRedisKey.CAPTCHA_LOGIN + IdUtil.simpleUUID();
|
||||
//当验证码类型为 arithmetic时且长度 >= 2 时,captcha.text()的结果有几率为浮点型
|
||||
String captchaValue = captcha.text();
|
||||
if (captcha.getCharType() - 1 == LoginCodeEnum.ARITHMETIC.ordinal() && captchaValue.contains(".")) {
|
||||
if (captcha.getCharType() - 1 == LoginCodeEnum.ARITHMETIC.ordinal() && captchaValue.contains(SystemConst.SYMBOL_DOT)) {
|
||||
captchaValue = captchaValue.split("\\.")[0];
|
||||
}
|
||||
// 保存
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ package cn.odboy.application.core.rest;
|
||||
import cn.odboy.application.core.service.UserOnlineService;
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.model.system.dto.UserOnlineDto;
|
||||
import cn.odboy.util.DESEncryptUtil;
|
||||
import cn.odboy.util.DesEncryptUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -45,7 +45,7 @@ public class OnlineController {
|
||||
public ResponseEntity<Object> deleteOnlineUser(@RequestBody Set<String> keys) throws Exception {
|
||||
for (String token : keys) {
|
||||
// 解密Key
|
||||
token = DESEncryptUtil.desDecrypt(token);
|
||||
token = DesEncryptUtil.desDecrypt(token);
|
||||
userOnlineService.logoutByToken(token);
|
||||
}
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
|
||||
+4
-4
@@ -1,8 +1,8 @@
|
||||
package cn.odboy.application.core.service.impl;
|
||||
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.odboy.application.core.config.LoginProperties;
|
||||
import cn.odboy.application.core.service.UserCacheService;
|
||||
import cn.odboy.constant.SystemRedisKey;
|
||||
import cn.odboy.model.system.dto.UserJwtDto;
|
||||
import cn.odboy.util.RedisUtil;
|
||||
import cn.odboy.util.StringUtil;
|
||||
@@ -24,7 +24,7 @@ public class UserCacheServiceImpl implements UserCacheService {
|
||||
username = StringUtil.lowerCase(username);
|
||||
if (StringUtil.isNotEmpty(username)) {
|
||||
// 获取数据
|
||||
return redisUtil.get(LoginProperties.cacheKey + username, UserJwtDto.class);
|
||||
return redisUtil.get(SystemRedisKey.USER_INFO + username, UserJwtDto.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -37,7 +37,7 @@ public class UserCacheServiceImpl implements UserCacheService {
|
||||
if (StringUtil.isNotEmpty(userName)) {
|
||||
// 添加数据, 避免数据同时过期(2小时左右)
|
||||
long time = 7200 + RandomUtil.randomInt(900, 1800);
|
||||
redisUtil.set(LoginProperties.cacheKey + userName, user, time);
|
||||
redisUtil.set(SystemRedisKey.USER_INFO + userName, user, time);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ public class UserCacheServiceImpl implements UserCacheService {
|
||||
userName = StringUtil.lowerCase(userName);
|
||||
if (StringUtil.isNotEmpty(userName)) {
|
||||
// 清除数据
|
||||
redisUtil.del(LoginProperties.cacheKey + userName);
|
||||
redisUtil.del(SystemRedisKey.USER_INFO + userName);
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.application.core.context;
|
||||
package cn.odboy.application.core.service.impl;
|
||||
|
||||
import cn.odboy.application.core.service.UserCacheService;
|
||||
import cn.odboy.application.system.service.DataService;
|
||||
@@ -18,7 +18,7 @@ import java.util.List;
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service("userDetailsService")
|
||||
public class UserDetailsHelper implements UserDetailsService {
|
||||
public class UserDetailsServiceImpl implements UserDetailsService {
|
||||
private final UserService userService;
|
||||
private final RoleService roleService;
|
||||
private final DataService dataService;
|
||||
+2
-2
@@ -34,7 +34,7 @@ public class UserOnlineServiceImpl implements UserOnlineService {
|
||||
String ip = BrowserUtil.getIp(request);
|
||||
String id = tokenProvider.getId(token);
|
||||
String version = BrowserUtil.getVersion(request);
|
||||
String address = IPUtil.getCityInfo(ip);
|
||||
String address = IpUtil.getCityInfo(ip);
|
||||
UserOnlineDto userOnlineDto = null;
|
||||
try {
|
||||
userOnlineDto = new UserOnlineDto();
|
||||
@@ -45,7 +45,7 @@ public class UserOnlineServiceImpl implements UserOnlineService {
|
||||
userOnlineDto.setBrowser(version);
|
||||
userOnlineDto.setIp(ip);
|
||||
userOnlineDto.setAddress(address);
|
||||
userOnlineDto.setKey(DESEncryptUtil.desEncrypt(token));
|
||||
userOnlineDto.setKey(DesEncryptUtil.desEncrypt(token));
|
||||
userOnlineDto.setLoginTime(new Date());
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package cn.odboy.application.system.mapper;
|
||||
|
||||
import cn.odboy.model.system.domain.Dept;
|
||||
import cn.odboy.model.system.dto.DeptQueryCriteria;
|
||||
import cn.odboy.model.system.request.DeptQueryCriteria;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package cn.odboy.application.system.mapper;
|
||||
|
||||
import cn.odboy.model.system.domain.DictDetail;
|
||||
import cn.odboy.model.system.dto.DictDetailQueryCriteria;
|
||||
import cn.odboy.model.system.request.DictDetailQueryCriteria;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package cn.odboy.application.system.mapper;
|
||||
|
||||
import cn.odboy.model.system.domain.Dict;
|
||||
import cn.odboy.model.system.dto.DictQueryCriteria;
|
||||
import cn.odboy.model.system.request.DictQueryCriteria;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package cn.odboy.application.system.mapper;
|
||||
|
||||
import cn.odboy.model.system.domain.Job;
|
||||
import cn.odboy.model.system.dto.JobQueryCriteria;
|
||||
import cn.odboy.model.system.request.JobQueryCriteria;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
package cn.odboy.application.system.mapper;
|
||||
|
||||
import cn.odboy.model.system.domain.Menu;
|
||||
import cn.odboy.model.system.dto.MenuQueryCriteria;
|
||||
import cn.odboy.model.system.request.MenuQueryCriteria;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
@@ -25,7 +25,7 @@ public interface MenuMapper extends BaseMapper<Menu> {
|
||||
|
||||
Menu getMenuByComponentName(@Param("name") String name);
|
||||
|
||||
int getMenuCountByPid(@Param("pid") Long pid);
|
||||
Integer getMenuCountByPid(@Param("pid") Long pid);
|
||||
|
||||
void updateSubCntById(@Param("count") int count, @Param("menuId") Long menuId);
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package cn.odboy.application.system.mapper;
|
||||
|
||||
import cn.odboy.model.system.domain.Role;
|
||||
import cn.odboy.model.system.dto.RoleQueryCriteria;
|
||||
import cn.odboy.model.system.request.RoleQueryCriteria;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package cn.odboy.application.system.mapper;
|
||||
|
||||
import cn.odboy.model.system.domain.User;
|
||||
import cn.odboy.model.system.dto.UserQueryCriteria;
|
||||
import cn.odboy.model.system.request.UserQueryCriteria;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
||||
+14
-14
@@ -1,10 +1,9 @@
|
||||
package cn.odboy.application.system.rest;
|
||||
|
||||
import cn.odboy.application.system.service.VerifyService;
|
||||
import cn.odboy.application.tools.service.CaptchaService;
|
||||
import cn.odboy.application.tools.service.EmailService;
|
||||
import cn.odboy.constant.CodeBiEnum;
|
||||
import cn.odboy.constant.CodeEnum;
|
||||
import cn.odboy.model.tools.dto.EmailDto;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -14,29 +13,30 @@ import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/api/code")
|
||||
@Api(tags = "系统:验证码管理")
|
||||
public class VerifyController {
|
||||
|
||||
private final VerifyService verificationCodeService;
|
||||
public class CaptchaController {
|
||||
private final CaptchaService captchaService;
|
||||
private final EmailService emailService;
|
||||
|
||||
@PostMapping(value = "/resetEmail")
|
||||
/**
|
||||
* 除了这个其他的接口都没有用上
|
||||
*
|
||||
* @param email 邮件地址
|
||||
*/
|
||||
@PostMapping(value = "/sendCaptcha")
|
||||
@ApiOperation("重置邮箱,发送验证码")
|
||||
public ResponseEntity<Object> resetEmail(@RequestParam String email) {
|
||||
EmailDto emailDto = verificationCodeService.sendEmailCode(email, CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey());
|
||||
emailService.sendEmail(emailDto);
|
||||
emailService.sendCaptcha(email, CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey());
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping(value = "/email/resetPass")
|
||||
@PostMapping(value = "/resetPass")
|
||||
@ApiOperation("重置密码,发送验证码")
|
||||
public ResponseEntity<Object> resetPass(@RequestParam String email) {
|
||||
EmailDto emailDto = verificationCodeService.sendEmailCode(email, CodeEnum.EMAIL_RESET_PWD_CODE.getKey());
|
||||
emailService.sendEmail(emailDto);
|
||||
emailService.sendCaptcha(email, CodeEnum.EMAIL_RESET_PWD_CODE.getKey());
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@@ -46,10 +46,10 @@ public class VerifyController {
|
||||
CodeBiEnum biEnum = CodeBiEnum.find(codeBi);
|
||||
switch (Objects.requireNonNull(biEnum)) {
|
||||
case ONE:
|
||||
verificationCodeService.validateEmailCode(CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey(), email, code);
|
||||
captchaService.checkCode(CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey(), email, code);
|
||||
break;
|
||||
case TWO:
|
||||
verificationCodeService.validateEmailCode(CodeEnum.EMAIL_RESET_PWD_CODE.getKey(), email, code);
|
||||
captchaService.checkCode(CodeEnum.EMAIL_RESET_PWD_CODE.getKey(), email, code);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
+3
-8
@@ -2,9 +2,9 @@ package cn.odboy.application.system.rest;
|
||||
|
||||
import cn.odboy.application.system.service.DeptService;
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.system.domain.Dept;
|
||||
import cn.odboy.model.system.dto.DeptQueryCriteria;
|
||||
import cn.odboy.model.system.request.DeptQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateDeptRequest;
|
||||
import cn.odboy.util.PageUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -24,9 +24,7 @@ import java.util.stream.Collectors;
|
||||
@Api(tags = "系统:部门管理")
|
||||
@RequestMapping("/api/dept")
|
||||
public class DeptController {
|
||||
|
||||
private final DeptService deptService;
|
||||
private static final String ENTITY_NAME = "dept";
|
||||
|
||||
@ApiOperation("导出部门数据")
|
||||
@GetMapping(value = "/download")
|
||||
@@ -68,10 +66,7 @@ public class DeptController {
|
||||
@ApiOperation("新增部门")
|
||||
@PostMapping
|
||||
@PreAuthorize("@el.check('dept:add')")
|
||||
public ResponseEntity<Object> createDept(@Validated @RequestBody Dept resources) {
|
||||
if (resources.getId() != null) {
|
||||
throw new BadRequestException("A new " + ENTITY_NAME + " cannot already have an ID");
|
||||
}
|
||||
public ResponseEntity<Object> createDept(@Validated @RequestBody CreateDeptRequest resources) {
|
||||
deptService.createDept(resources);
|
||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
+3
-8
@@ -2,9 +2,9 @@ package cn.odboy.application.system.rest;
|
||||
|
||||
import cn.odboy.application.system.service.DictService;
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.system.domain.Dict;
|
||||
import cn.odboy.model.system.dto.DictQueryCriteria;
|
||||
import cn.odboy.model.system.request.DictQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateDictRequest;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -25,9 +25,7 @@ import java.util.Set;
|
||||
@Api(tags = "系统:字典管理")
|
||||
@RequestMapping("/api/dict")
|
||||
public class DictController {
|
||||
|
||||
private final DictService dictService;
|
||||
private static final String ENTITY_NAME = "dict";
|
||||
|
||||
@ApiOperation("导出字典数据")
|
||||
@GetMapping(value = "/download")
|
||||
@@ -54,10 +52,7 @@ public class DictController {
|
||||
@ApiOperation("新增字典")
|
||||
@PostMapping
|
||||
@PreAuthorize("@el.check('dict:add')")
|
||||
public ResponseEntity<Object> createDict(@Validated @RequestBody Dict resources) {
|
||||
if (resources.getId() != null) {
|
||||
throw new BadRequestException("A new " + ENTITY_NAME + " cannot already have an ID");
|
||||
}
|
||||
public ResponseEntity<Object> createDict(@Validated @RequestBody CreateDictRequest resources) {
|
||||
dictService.saveDict(resources);
|
||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
+3
-8
@@ -2,9 +2,9 @@ package cn.odboy.application.system.rest;
|
||||
|
||||
import cn.odboy.application.system.service.DictDetailService;
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.system.domain.DictDetail;
|
||||
import cn.odboy.model.system.dto.DictDetailQueryCriteria;
|
||||
import cn.odboy.model.system.request.DictDetailQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateDictDetailRequest;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -24,9 +24,7 @@ import java.util.Map;
|
||||
@Api(tags = "系统:字典详情管理")
|
||||
@RequestMapping("/api/dictDetail")
|
||||
public class DictDetailController {
|
||||
|
||||
private final DictDetailService dictDetailService;
|
||||
private static final String ENTITY_NAME = "dictDetail";
|
||||
|
||||
@ApiOperation("查询字典详情")
|
||||
@GetMapping
|
||||
@@ -49,10 +47,7 @@ public class DictDetailController {
|
||||
@ApiOperation("新增字典详情")
|
||||
@PostMapping
|
||||
@PreAuthorize("@el.check('dict:add')")
|
||||
public ResponseEntity<Object> createDictDetail(@Validated @RequestBody DictDetail resources) {
|
||||
if (resources.getId() != null) {
|
||||
throw new BadRequestException("A new " + ENTITY_NAME + " cannot already have an ID");
|
||||
}
|
||||
public ResponseEntity<Object> createDictDetail(@Validated @RequestBody CreateDictDetailRequest resources) {
|
||||
dictDetailService.saveDictDetail(resources);
|
||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
+4
-9
@@ -2,9 +2,9 @@ package cn.odboy.application.system.rest;
|
||||
|
||||
import cn.odboy.application.system.service.JobService;
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.system.domain.Job;
|
||||
import cn.odboy.model.system.dto.JobQueryCriteria;
|
||||
import cn.odboy.model.system.request.JobQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateJobRequest;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -25,9 +25,7 @@ import java.util.Set;
|
||||
@Api(tags = "系统:岗位管理")
|
||||
@RequestMapping("/api/job")
|
||||
public class JobController {
|
||||
|
||||
private final JobService jobService;
|
||||
private static final String ENTITY_NAME = "job";
|
||||
|
||||
@ApiOperation("导出岗位数据")
|
||||
@GetMapping(value = "/download")
|
||||
@@ -47,11 +45,8 @@ public class JobController {
|
||||
@ApiOperation("新增岗位")
|
||||
@PostMapping
|
||||
@PreAuthorize("@el.check('job:add')")
|
||||
public ResponseEntity<Object> createJob(@Validated @RequestBody Job resources) {
|
||||
if (resources.getId() != null) {
|
||||
throw new BadRequestException("A new " + ENTITY_NAME + " cannot already have an ID");
|
||||
}
|
||||
jobService.saveJob(resources);
|
||||
public ResponseEntity<Object> createJob(@Validated @RequestBody CreateJobRequest resources) {
|
||||
jobService.createJob(resources);
|
||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@ import cn.odboy.application.system.service.MenuService;
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.system.domain.Menu;
|
||||
import cn.odboy.model.system.dto.MenuQueryCriteria;
|
||||
import cn.odboy.model.system.dto.MenuVo;
|
||||
import cn.odboy.model.system.request.MenuQueryCriteria;
|
||||
import cn.odboy.model.system.response.MenuVo;
|
||||
import cn.odboy.util.PageUtil;
|
||||
import cn.odboy.util.SecurityUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
|
||||
+3
-8
@@ -5,7 +5,8 @@ import cn.odboy.application.system.service.RoleService;
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.system.domain.Role;
|
||||
import cn.odboy.model.system.dto.RoleQueryCriteria;
|
||||
import cn.odboy.model.system.request.RoleQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateRoleRequest;
|
||||
import cn.odboy.util.SecurityUtil;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.annotations.Api;
|
||||
@@ -30,11 +31,8 @@ import java.util.stream.Collectors;
|
||||
@Api(tags = "系统:角色管理")
|
||||
@RequestMapping("/api/roles")
|
||||
public class RoleController {
|
||||
|
||||
private final RoleService roleService;
|
||||
|
||||
private static final String ENTITY_NAME = "role";
|
||||
|
||||
@ApiOperation("获取单个role")
|
||||
@GetMapping(value = "/{id}")
|
||||
@PreAuthorize("@el.check('roles:list')")
|
||||
@@ -73,10 +71,7 @@ public class RoleController {
|
||||
@ApiOperation("新增角色")
|
||||
@PostMapping
|
||||
@PreAuthorize("@el.check('roles:add')")
|
||||
public ResponseEntity<Object> createRole(@Validated @RequestBody Role resources) {
|
||||
if (resources.getId() != null) {
|
||||
throw new BadRequestException("A new " + ENTITY_NAME + " cannot already have an ID");
|
||||
}
|
||||
public ResponseEntity<Object> createRole(@Validated @RequestBody CreateRoleRequest resources) {
|
||||
getLevels(resources.getLevel());
|
||||
roleService.createRole(resources);
|
||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||
|
||||
+45
-13
@@ -1,19 +1,25 @@
|
||||
package cn.odboy.application.system.rest;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.odboy.application.system.service.*;
|
||||
import cn.odboy.application.system.service.DataService;
|
||||
import cn.odboy.application.system.service.DeptService;
|
||||
import cn.odboy.application.system.service.RoleService;
|
||||
import cn.odboy.application.system.service.UserService;
|
||||
import cn.odboy.application.tools.service.CaptchaService;
|
||||
import cn.odboy.base.MyMetaOption;
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.constant.CodeEnum;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.system.domain.Dept;
|
||||
import cn.odboy.model.system.domain.Role;
|
||||
import cn.odboy.model.system.domain.User;
|
||||
import cn.odboy.model.system.dto.UserPassVo;
|
||||
import cn.odboy.model.system.dto.UserQueryCriteria;
|
||||
import cn.odboy.model.system.response.UserPassVo;
|
||||
import cn.odboy.model.system.request.UserQueryCriteria;
|
||||
import cn.odboy.properties.RsaProperties;
|
||||
import cn.odboy.util.PageUtil;
|
||||
import cn.odboy.util.RSAEncryptUtil;
|
||||
import cn.odboy.util.RsaEncryptUtil;
|
||||
import cn.odboy.util.SecurityUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -30,9 +36,7 @@ import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Api(tags = "系统:用户管理")
|
||||
@@ -40,13 +44,12 @@ import java.util.stream.Collectors;
|
||||
@RequestMapping("/api/users")
|
||||
@RequiredArgsConstructor
|
||||
public class UserController {
|
||||
|
||||
private final PasswordEncoder passwordEncoder;
|
||||
private final UserService userService;
|
||||
private final DataService dataService;
|
||||
private final DeptService deptService;
|
||||
private final RoleService roleService;
|
||||
private final VerifyService verificationCodeService;
|
||||
private final CaptchaService verificationCodeService;
|
||||
|
||||
@ApiOperation("导出用户数据")
|
||||
@GetMapping(value = "/download")
|
||||
@@ -132,8 +135,8 @@ public class UserController {
|
||||
@ApiOperation("修改密码")
|
||||
@PostMapping(value = "/updatePass")
|
||||
public ResponseEntity<Object> updateUserPassword(@RequestBody UserPassVo passVo) throws Exception {
|
||||
String oldPass = RSAEncryptUtil.decryptByPrivateKey(RsaProperties.privateKey, passVo.getOldPass());
|
||||
String newPass = RSAEncryptUtil.decryptByPrivateKey(RsaProperties.privateKey, passVo.getNewPass());
|
||||
String oldPass = RsaEncryptUtil.decryptByPrivateKey(RsaProperties.privateKey, passVo.getOldPass());
|
||||
String newPass = RsaEncryptUtil.decryptByPrivateKey(RsaProperties.privateKey, passVo.getNewPass());
|
||||
User user = userService.getUserByUsername(SecurityUtil.getCurrentUsername());
|
||||
if (!passwordEncoder.matches(oldPass, user.getPassword())) {
|
||||
throw new BadRequestException("修改失败,旧密码错误");
|
||||
@@ -162,12 +165,12 @@ public class UserController {
|
||||
@ApiOperation("修改邮箱")
|
||||
@PostMapping(value = "/updateEmail/{code}")
|
||||
public ResponseEntity<Object> updateUserEmail(@PathVariable String code, @RequestBody User resources) throws Exception {
|
||||
String password = RSAEncryptUtil.decryptByPrivateKey(RsaProperties.privateKey, resources.getPassword());
|
||||
String password = RsaEncryptUtil.decryptByPrivateKey(RsaProperties.privateKey, resources.getPassword());
|
||||
User user = userService.getUserByUsername(SecurityUtil.getCurrentUsername());
|
||||
if (!passwordEncoder.matches(password, user.getPassword())) {
|
||||
throw new BadRequestException("密码错误");
|
||||
}
|
||||
verificationCodeService.validateEmailCode(CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey(), resources.getEmail(), code);
|
||||
verificationCodeService.checkCode(CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey(), resources.getEmail(), code);
|
||||
userService.updateEmailByUsername(user.getUsername(), resources.getEmail());
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
@@ -184,4 +187,33 @@ public class UserController {
|
||||
throw new BadRequestException("角色权限不足");
|
||||
}
|
||||
}
|
||||
|
||||
@ApiOperation("查询用户基础数据")
|
||||
@PostMapping(value = "/queryUserMetaPage")
|
||||
@PreAuthorize("@el.check('user:list')")
|
||||
public ResponseEntity<List<MyMetaOption>> queryUserMetaPage(@Validated @RequestBody UserQueryCriteria criteria) {
|
||||
int maxPageSize = 50;
|
||||
return new ResponseEntity<>(userService.page(new Page<>(criteria.getPage(), maxPageSize), new LambdaQueryWrapper<User>()
|
||||
.and(c -> {
|
||||
c.eq(User::getPhone, criteria.getBlurry());
|
||||
c.or();
|
||||
c.eq(User::getEmail, criteria.getBlurry());
|
||||
c.or();
|
||||
c.like(User::getUsername, criteria.getBlurry());
|
||||
c.or();
|
||||
c.like(User::getNickName, criteria.getBlurry());
|
||||
})
|
||||
).getRecords().stream().map(m -> {
|
||||
Map<String, Object> ext = new HashMap<>(1);
|
||||
ext.put("id", m.getId());
|
||||
ext.put("deptId", m.getDeptId());
|
||||
ext.put("email", m.getEmail());
|
||||
ext.put("phone", m.getPhone());
|
||||
return MyMetaOption.builder()
|
||||
.label(m.getNickName())
|
||||
.value(m.getUsername())
|
||||
.ext(ext)
|
||||
.build();
|
||||
}).collect(Collectors.toList()), HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -2,13 +2,13 @@ package cn.odboy.application.system.service;
|
||||
|
||||
import cn.odboy.base.BaseResult;
|
||||
import cn.odboy.model.system.domain.Dept;
|
||||
import cn.odboy.model.system.dto.DeptQueryCriteria;
|
||||
import cn.odboy.model.system.request.DeptQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateDeptRequest;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public interface DeptService extends IService<Dept> {
|
||||
@@ -36,7 +36,7 @@ public interface DeptService extends IService<Dept> {
|
||||
*
|
||||
* @param resources /
|
||||
*/
|
||||
void createDept(Dept resources);
|
||||
void createDept(CreateDeptRequest resources);
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
|
||||
+3
-2
@@ -2,7 +2,8 @@ package cn.odboy.application.system.service;
|
||||
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.model.system.domain.DictDetail;
|
||||
import cn.odboy.model.system.dto.DictDetailQueryCriteria;
|
||||
import cn.odboy.model.system.request.DictDetailQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateDictDetailRequest;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
@@ -16,7 +17,7 @@ public interface DictDetailService extends IService<DictDetail> {
|
||||
*
|
||||
* @param resources /
|
||||
*/
|
||||
void saveDictDetail(DictDetail resources);
|
||||
void saveDictDetail(CreateDictDetailRequest resources);
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
|
||||
+3
-2
@@ -2,7 +2,8 @@ package cn.odboy.application.system.service;
|
||||
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.model.system.domain.Dict;
|
||||
import cn.odboy.model.system.dto.DictQueryCriteria;
|
||||
import cn.odboy.model.system.request.DictQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateDictRequest;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
@@ -36,7 +37,7 @@ public interface DictService extends IService<Dict> {
|
||||
*
|
||||
* @param resources /
|
||||
*/
|
||||
void saveDict(Dict resources);
|
||||
void saveDict(CreateDictRequest resources);
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
|
||||
+3
-2
@@ -2,7 +2,8 @@ package cn.odboy.application.system.service;
|
||||
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.model.system.domain.Job;
|
||||
import cn.odboy.model.system.dto.JobQueryCriteria;
|
||||
import cn.odboy.model.system.request.JobQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateJobRequest;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
@@ -27,7 +28,7 @@ public interface JobService extends IService<Job> {
|
||||
*
|
||||
* @param resources /
|
||||
*/
|
||||
void saveJob(Job resources);
|
||||
void createJob(CreateJobRequest resources);
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
package cn.odboy.application.system.service;
|
||||
|
||||
import cn.odboy.model.system.domain.Menu;
|
||||
import cn.odboy.model.system.dto.MenuQueryCriteria;
|
||||
import cn.odboy.model.system.dto.MenuVo;
|
||||
import cn.odboy.model.system.request.MenuQueryCriteria;
|
||||
import cn.odboy.model.system.response.MenuVo;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
+3
-2
@@ -4,7 +4,8 @@ import cn.odboy.base.PageResult;
|
||||
import cn.odboy.model.system.domain.Role;
|
||||
import cn.odboy.model.system.domain.User;
|
||||
import cn.odboy.model.system.dto.RoleCodeDto;
|
||||
import cn.odboy.model.system.dto.RoleQueryCriteria;
|
||||
import cn.odboy.model.system.request.RoleQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateRoleRequest;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
@@ -53,7 +54,7 @@ public interface RoleService extends IService<Role> {
|
||||
*
|
||||
* @param resources /
|
||||
*/
|
||||
void createRole(Role resources);
|
||||
void createRole(CreateRoleRequest resources);
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ package cn.odboy.application.system.service;
|
||||
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.model.system.domain.User;
|
||||
import cn.odboy.model.system.dto.UserQueryCriteria;
|
||||
import cn.odboy.model.system.request.UserQueryCriteria;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
+1
-1
@@ -4,8 +4,8 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import cn.odboy.application.system.service.DataService;
|
||||
import cn.odboy.application.system.service.DeptService;
|
||||
import cn.odboy.application.system.service.RoleService;
|
||||
import cn.odboy.constant.SystemRedisKey;
|
||||
import cn.odboy.constant.DataScopeEnum;
|
||||
import cn.odboy.constant.SystemRedisKey;
|
||||
import cn.odboy.model.system.domain.Dept;
|
||||
import cn.odboy.model.system.domain.Role;
|
||||
import cn.odboy.model.system.domain.User;
|
||||
|
||||
+6
-4
@@ -1,5 +1,6 @@
|
||||
package cn.odboy.application.system.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
@@ -8,12 +9,13 @@ import cn.odboy.application.system.mapper.RoleMapper;
|
||||
import cn.odboy.application.system.mapper.UserMapper;
|
||||
import cn.odboy.application.system.service.DeptService;
|
||||
import cn.odboy.base.BaseResult;
|
||||
import cn.odboy.constant.SystemRedisKey;
|
||||
import cn.odboy.constant.DataScopeEnum;
|
||||
import cn.odboy.constant.SystemRedisKey;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.system.domain.Dept;
|
||||
import cn.odboy.model.system.domain.User;
|
||||
import cn.odboy.model.system.dto.DeptQueryCriteria;
|
||||
import cn.odboy.model.system.request.DeptQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateDeptRequest;
|
||||
import cn.odboy.util.*;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -93,8 +95,8 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements De
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createDept(Dept resources) {
|
||||
save(resources);
|
||||
public void createDept(CreateDeptRequest resources) {
|
||||
save(BeanUtil.copyProperties(resources, Dept.class));
|
||||
// 清理缓存
|
||||
updateSubCnt(resources.getPid());
|
||||
// 清理自定义角色权限的DataScope缓存
|
||||
|
||||
+8
-5
@@ -1,5 +1,6 @@
|
||||
package cn.odboy.application.system.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.odboy.application.system.mapper.DictDetailMapper;
|
||||
import cn.odboy.application.system.mapper.DictMapper;
|
||||
@@ -8,7 +9,8 @@ import cn.odboy.base.PageResult;
|
||||
import cn.odboy.constant.SystemRedisKey;
|
||||
import cn.odboy.model.system.domain.Dict;
|
||||
import cn.odboy.model.system.domain.DictDetail;
|
||||
import cn.odboy.model.system.dto.DictDetailQueryCriteria;
|
||||
import cn.odboy.model.system.request.DictDetailQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateDictDetailRequest;
|
||||
import cn.odboy.util.PageUtil;
|
||||
import cn.odboy.util.RedisUtil;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@@ -34,11 +36,12 @@ public class DictDetailServiceImpl extends ServiceImpl<DictDetailMapper, DictDet
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveDictDetail(DictDetail resources) {
|
||||
resources.setDictId(resources.getDict().getId());
|
||||
save(resources);
|
||||
public void saveDictDetail(CreateDictDetailRequest resources) {
|
||||
DictDetail dictDetail = BeanUtil.copyProperties(resources, DictDetail.class);
|
||||
dictDetail.setDictId(resources.getDict().getId());
|
||||
save(dictDetail);
|
||||
// 清理缓存
|
||||
delCaches(resources);
|
||||
delCaches(dictDetail);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+5
-3
@@ -1,5 +1,6 @@
|
||||
package cn.odboy.application.system.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.odboy.application.system.mapper.DictDetailMapper;
|
||||
import cn.odboy.application.system.mapper.DictMapper;
|
||||
@@ -8,7 +9,8 @@ import cn.odboy.base.PageResult;
|
||||
import cn.odboy.constant.SystemRedisKey;
|
||||
import cn.odboy.model.system.domain.Dict;
|
||||
import cn.odboy.model.system.domain.DictDetail;
|
||||
import cn.odboy.model.system.dto.DictQueryCriteria;
|
||||
import cn.odboy.model.system.request.DictQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateDictRequest;
|
||||
import cn.odboy.util.FileUtil;
|
||||
import cn.odboy.util.PageUtil;
|
||||
import cn.odboy.util.RedisUtil;
|
||||
@@ -43,8 +45,8 @@ public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements Di
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveDict(Dict resources) {
|
||||
save(resources);
|
||||
public void saveDict(CreateDictRequest resources) {
|
||||
save(BeanUtil.copyProperties(resources, Dict.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+5
-3
@@ -1,5 +1,6 @@
|
||||
package cn.odboy.application.system.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.odboy.application.system.mapper.JobMapper;
|
||||
import cn.odboy.application.system.mapper.UserMapper;
|
||||
import cn.odboy.application.system.service.JobService;
|
||||
@@ -8,7 +9,8 @@ import cn.odboy.constant.SystemRedisKey;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.exception.EntityExistException;
|
||||
import cn.odboy.model.system.domain.Job;
|
||||
import cn.odboy.model.system.dto.JobQueryCriteria;
|
||||
import cn.odboy.model.system.request.JobQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateJobRequest;
|
||||
import cn.odboy.util.FileUtil;
|
||||
import cn.odboy.util.PageUtil;
|
||||
import cn.odboy.util.RedisUtil;
|
||||
@@ -53,12 +55,12 @@ public class JobServiceImpl extends ServiceImpl<JobMapper, Job> implements JobSe
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveJob(Job resources) {
|
||||
public void createJob(CreateJobRequest resources) {
|
||||
Job job = jobMapper.getJobByName(resources.getName());
|
||||
if (job != null) {
|
||||
throw new EntityExistException(Job.class, "name", resources.getName());
|
||||
}
|
||||
save(resources);
|
||||
save(BeanUtil.copyProperties(resources, Job.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-3
@@ -15,9 +15,9 @@ import cn.odboy.exception.EntityExistException;
|
||||
import cn.odboy.model.system.domain.Menu;
|
||||
import cn.odboy.model.system.domain.Role;
|
||||
import cn.odboy.model.system.domain.User;
|
||||
import cn.odboy.model.system.dto.MenuMetaVo;
|
||||
import cn.odboy.model.system.dto.MenuQueryCriteria;
|
||||
import cn.odboy.model.system.dto.MenuVo;
|
||||
import cn.odboy.model.system.response.MenuMetaVo;
|
||||
import cn.odboy.model.system.request.MenuQueryCriteria;
|
||||
import cn.odboy.model.system.response.MenuVo;
|
||||
import cn.odboy.util.ClassUtil;
|
||||
import cn.odboy.util.FileUtil;
|
||||
import cn.odboy.util.RedisUtil;
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import cn.hutool.core.date.DateUtil;
|
||||
import cn.odboy.application.system.service.MonitorService;
|
||||
import cn.odboy.constant.SystemConst;
|
||||
import cn.odboy.util.FileUtil;
|
||||
import cn.odboy.util.IPUtil;
|
||||
import cn.odboy.util.IpUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import oshi.SystemInfo;
|
||||
@@ -178,7 +178,7 @@ public class MonitorServiceImpl implements MonitorService {
|
||||
// 系统信息
|
||||
systemInfo.put("os", os.toString());
|
||||
systemInfo.put("day", formatBetween);
|
||||
systemInfo.put("ip", IPUtil.getLocalIp());
|
||||
systemInfo.put("ip", IpUtil.getLocalIp());
|
||||
return systemInfo;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-5
@@ -1,5 +1,6 @@
|
||||
package cn.odboy.application.system.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.odboy.application.core.service.UserCacheService;
|
||||
@@ -16,7 +17,8 @@ import cn.odboy.model.system.domain.Menu;
|
||||
import cn.odboy.model.system.domain.Role;
|
||||
import cn.odboy.model.system.domain.User;
|
||||
import cn.odboy.model.system.dto.RoleCodeDto;
|
||||
import cn.odboy.model.system.dto.RoleQueryCriteria;
|
||||
import cn.odboy.model.system.request.RoleQueryCriteria;
|
||||
import cn.odboy.model.system.request.CreateRoleRequest;
|
||||
import cn.odboy.util.FileUtil;
|
||||
import cn.odboy.util.PageUtil;
|
||||
import cn.odboy.util.RedisUtil;
|
||||
@@ -74,11 +76,11 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements Ro
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createRole(Role resources) {
|
||||
public void createRole(CreateRoleRequest resources) {
|
||||
if (roleMapper.getRoleByName(resources.getName()) != null) {
|
||||
throw new EntityExistException(Role.class, "username", resources.getName());
|
||||
throw new EntityExistException(Role.class, "name", resources.getName());
|
||||
}
|
||||
save(resources);
|
||||
save(BeanUtil.copyProperties(resources, Role.class));
|
||||
// 判断是否有部门数据,若有,则需创建关联
|
||||
if (CollectionUtil.isNotEmpty(resources.getDepts())) {
|
||||
roleDeptMapper.insertBatchByRoleId(resources.getId(), resources.getDepts());
|
||||
@@ -91,7 +93,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements Ro
|
||||
Role role = getById(resources.getId());
|
||||
Role role1 = roleMapper.getRoleByName(resources.getName());
|
||||
if (role1 != null && !role1.getId().equals(role.getId())) {
|
||||
throw new EntityExistException(Role.class, "username", resources.getName());
|
||||
throw new EntityExistException(Role.class, "name", resources.getName());
|
||||
}
|
||||
role.setName(resources.getName());
|
||||
role.setDescription(resources.getDescription());
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
package cn.odboy.application.system.service.impl;
|
||||
|
||||
import cn.odboy.application.core.service.UserOnlineService;
|
||||
import cn.odboy.application.core.service.UserCacheService;
|
||||
import cn.odboy.application.core.service.UserOnlineService;
|
||||
import cn.odboy.application.system.mapper.UserJobMapper;
|
||||
import cn.odboy.application.system.mapper.UserMapper;
|
||||
import cn.odboy.application.system.mapper.UserRoleMapper;
|
||||
@@ -13,7 +13,7 @@ import cn.odboy.exception.EntityExistException;
|
||||
import cn.odboy.model.system.domain.Job;
|
||||
import cn.odboy.model.system.domain.Role;
|
||||
import cn.odboy.model.system.domain.User;
|
||||
import cn.odboy.model.system.dto.UserQueryCriteria;
|
||||
import cn.odboy.model.system.request.UserQueryCriteria;
|
||||
import cn.odboy.properties.FileProperties;
|
||||
import cn.odboy.util.*;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
||||
@@ -111,11 +111,11 @@
|
||||
FROM sys_menu
|
||||
WHERE name = #{name}
|
||||
</select>
|
||||
<update id="getMenuCountByPid">
|
||||
<select id="getMenuCountByPid">
|
||||
SELECT count(*)
|
||||
FROM sys_menu
|
||||
WHERE pid = #{pid}
|
||||
</update>
|
||||
</select>
|
||||
<update id="updateSubCntById">
|
||||
update sys_menu
|
||||
set sub_count = #{count}
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package cn.odboy.application.tools.mapper;
|
||||
|
||||
import cn.odboy.model.tools.domain.LocalStorage;
|
||||
import cn.odboy.model.tools.dto.LocalStorageQueryCriteria;
|
||||
import cn.odboy.model.tools.request.LocalStorageQueryCriteria;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package cn.odboy.application.tools.mapper;
|
||||
|
||||
import cn.odboy.model.tools.domain.QiniuContent;
|
||||
import cn.odboy.model.tools.dto.QiniuQueryCriteria;
|
||||
import cn.odboy.model.tools.request.QiniuQueryCriteria;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
||||
+1
-2
@@ -5,7 +5,7 @@ import cn.odboy.base.PageResult;
|
||||
import cn.odboy.constant.FileTypeEnum;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.tools.domain.LocalStorage;
|
||||
import cn.odboy.model.tools.dto.LocalStorageQueryCriteria;
|
||||
import cn.odboy.model.tools.request.LocalStorageQueryCriteria;
|
||||
import cn.odboy.util.FileUtil;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.annotations.Api;
|
||||
@@ -26,7 +26,6 @@ import java.io.IOException;
|
||||
@Api(tags = "工具:本地存储管理")
|
||||
@RequestMapping("/api/localStorage")
|
||||
public class LocalStorageController {
|
||||
|
||||
private final LocalStorageService localStorageService;
|
||||
|
||||
@GetMapping
|
||||
|
||||
+2
-3
@@ -5,7 +5,7 @@ import cn.odboy.application.tools.service.QiniuContentService;
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.model.tools.domain.QiniuConfig;
|
||||
import cn.odboy.model.tools.domain.QiniuContent;
|
||||
import cn.odboy.model.tools.dto.QiniuQueryCriteria;
|
||||
import cn.odboy.model.tools.request.QiniuQueryCriteria;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -31,7 +31,6 @@ import java.util.Map;
|
||||
@RequestMapping("/api/qiNiuContent")
|
||||
@Api(tags = "工具:七牛云存储管理")
|
||||
public class QiniuController {
|
||||
|
||||
private final QiniuContentService qiniuContentService;
|
||||
private final QiNiuConfigService qiNiuConfigService;
|
||||
|
||||
@@ -90,7 +89,7 @@ public class QiniuController {
|
||||
@ApiOperation("删除文件")
|
||||
@DeleteMapping(value = "/{id}")
|
||||
public ResponseEntity<Object> deleteQiNiu(@PathVariable Long id) {
|
||||
qiniuContentService.delete(qiniuContentService.getById(id));
|
||||
qiniuContentService.deleteFileById(id);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -1,9 +1,9 @@
|
||||
package cn.odboy.application.system.service;
|
||||
package cn.odboy.application.tools.service;
|
||||
|
||||
|
||||
import cn.odboy.model.tools.dto.EmailDto;
|
||||
|
||||
public interface VerifyService {
|
||||
public interface CaptchaService {
|
||||
/**
|
||||
* 发送验证码
|
||||
*
|
||||
@@ -11,7 +11,7 @@ public interface VerifyService {
|
||||
* @param key /
|
||||
* @return /
|
||||
*/
|
||||
EmailDto sendEmailCode(String email, String key);
|
||||
EmailDto renderCode(String email, String key);
|
||||
|
||||
|
||||
/**
|
||||
@@ -20,5 +20,5 @@ public interface VerifyService {
|
||||
* @param code /
|
||||
* @param key /
|
||||
*/
|
||||
void validateEmailCode(String key, String email, String code);
|
||||
void checkCode(String key, String email, String code);
|
||||
}
|
||||
+8
@@ -29,4 +29,12 @@ public interface EmailService extends IService<EmailConfig> {
|
||||
* @param emailDto 邮件发送的内容
|
||||
*/
|
||||
void sendEmail(EmailDto emailDto);
|
||||
|
||||
/**
|
||||
* 发送邮件验证码
|
||||
*
|
||||
* @param email 邮箱地址
|
||||
* @param key 类型
|
||||
*/
|
||||
void sendCaptcha(String email, String key);
|
||||
}
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ package cn.odboy.application.tools.service;
|
||||
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.model.tools.domain.LocalStorage;
|
||||
import cn.odboy.model.tools.dto.LocalStorageQueryCriteria;
|
||||
import cn.odboy.model.tools.request.LocalStorageQueryCriteria;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
+8
-8
@@ -2,7 +2,7 @@ package cn.odboy.application.tools.service;
|
||||
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.model.tools.domain.QiniuContent;
|
||||
import cn.odboy.model.tools.dto.QiniuQueryCriteria;
|
||||
import cn.odboy.model.tools.request.QiniuQueryCriteria;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
@@ -47,13 +47,6 @@ public interface QiniuContentService extends IService<QiniuContent> {
|
||||
*/
|
||||
String download(QiniuContent content);
|
||||
|
||||
/**
|
||||
* 删除文件
|
||||
*
|
||||
* @param content 文件
|
||||
*/
|
||||
void delete(QiniuContent content);
|
||||
|
||||
/**
|
||||
* 同步数据
|
||||
*/
|
||||
@@ -74,4 +67,11 @@ public interface QiniuContentService extends IService<QiniuContent> {
|
||||
* @throws IOException /
|
||||
*/
|
||||
void downloadExcel(List<QiniuContent> queryAll, HttpServletResponse response) throws IOException;
|
||||
|
||||
/**
|
||||
* 删除文件
|
||||
*
|
||||
* @param id 文件id
|
||||
*/
|
||||
void deleteFileById(Long id);
|
||||
}
|
||||
|
||||
+6
-7
@@ -1,4 +1,4 @@
|
||||
package cn.odboy.application.system.service.impl;
|
||||
package cn.odboy.application.tools.service.impl;
|
||||
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
@@ -6,7 +6,7 @@ import cn.hutool.extra.template.Template;
|
||||
import cn.hutool.extra.template.TemplateConfig;
|
||||
import cn.hutool.extra.template.TemplateEngine;
|
||||
import cn.hutool.extra.template.TemplateUtil;
|
||||
import cn.odboy.application.system.service.VerifyService;
|
||||
import cn.odboy.application.tools.service.CaptchaService;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.tools.dto.EmailDto;
|
||||
import cn.odboy.util.RedisUtil;
|
||||
@@ -19,15 +19,14 @@ import java.util.Collections;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class VerifyServiceImpl implements VerifyService {
|
||||
public class CaptchaServiceImpl implements CaptchaService {
|
||||
private final RedisUtil redisUtil;
|
||||
|
||||
@Value("${code.expiration}")
|
||||
private Long expiration;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public EmailDto sendEmailCode(String email, String key) {
|
||||
public EmailDto renderCode(String email, String key) {
|
||||
EmailDto emailDto;
|
||||
String content;
|
||||
String redisKey = key + email;
|
||||
@@ -41,8 +40,8 @@ public class VerifyServiceImpl implements VerifyService {
|
||||
if (!redisUtil.set(redisKey, code, expiration)) {
|
||||
throw new BadRequestException("服务异常,请联系网站负责人");
|
||||
}
|
||||
content = template.render(Dict.create().set("code", code));
|
||||
// 存在就再次发送原来的验证码
|
||||
content = template.render(Dict.create().set("code", code));
|
||||
} else {
|
||||
content = template.render(Dict.create().set("code", oldCode));
|
||||
}
|
||||
@@ -51,7 +50,7 @@ public class VerifyServiceImpl implements VerifyService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateEmailCode(String key, String email, String code) {
|
||||
public void checkCode(String key, String email, String code) {
|
||||
String value = redisUtil.get(key + email, String.class);
|
||||
if (value == null || !value.equals(code)) {
|
||||
throw new BadRequestException("无效验证码");
|
||||
+12
-3
@@ -3,11 +3,13 @@ package cn.odboy.application.tools.service.impl;
|
||||
import cn.hutool.extra.mail.Mail;
|
||||
import cn.hutool.extra.mail.MailAccount;
|
||||
import cn.odboy.application.tools.mapper.EmailConfigMapper;
|
||||
import cn.odboy.application.tools.service.CaptchaService;
|
||||
import cn.odboy.application.tools.service.EmailService;
|
||||
import cn.odboy.constant.CodeEnum;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.tools.domain.EmailConfig;
|
||||
import cn.odboy.model.tools.dto.EmailDto;
|
||||
import cn.odboy.util.DESEncryptUtil;
|
||||
import cn.odboy.util.DesEncryptUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.cache.annotation.CacheConfig;
|
||||
@@ -23,6 +25,8 @@ public class EmailServiceImpl extends ServiceImpl<EmailConfigMapper, EmailConfig
|
||||
@Lazy
|
||||
@Autowired
|
||||
private EmailService emailService;
|
||||
@Autowired
|
||||
private CaptchaService captchaService;
|
||||
|
||||
@Override
|
||||
@CachePut(key = "'config'")
|
||||
@@ -31,7 +35,7 @@ public class EmailServiceImpl extends ServiceImpl<EmailConfigMapper, EmailConfig
|
||||
EmailConfig localConfig = emailService.getEmailConfig();
|
||||
if (!emailConfig.getPassword().equals(localConfig.getPassword())) {
|
||||
// 对称加密
|
||||
emailConfig.setPassword(DESEncryptUtil.desEncrypt(emailConfig.getPassword()));
|
||||
emailConfig.setPassword(DesEncryptUtil.desEncrypt(emailConfig.getPassword()));
|
||||
}
|
||||
emailConfig.setId(1L);
|
||||
saveOrUpdate(emailConfig);
|
||||
@@ -61,7 +65,7 @@ public class EmailServiceImpl extends ServiceImpl<EmailConfigMapper, EmailConfig
|
||||
account.setAuth(true);
|
||||
try {
|
||||
// 对称解密
|
||||
account.setPass(DESEncryptUtil.desDecrypt(emailConfig.getPassword()));
|
||||
account.setPass(DesEncryptUtil.desDecrypt(emailConfig.getPassword()));
|
||||
} catch (Exception e) {
|
||||
throw new BadRequestException(e.getMessage());
|
||||
}
|
||||
@@ -89,4 +93,9 @@ public class EmailServiceImpl extends ServiceImpl<EmailConfigMapper, EmailConfig
|
||||
throw new BadRequestException("邮件发送失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendCaptcha(String email, String key) {
|
||||
emailService.sendEmail(captchaService.renderCode(email, CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey()));
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ import cn.odboy.application.tools.service.LocalStorageService;
|
||||
import cn.odboy.base.PageResult;
|
||||
import cn.odboy.exception.BadRequestException;
|
||||
import cn.odboy.model.tools.domain.LocalStorage;
|
||||
import cn.odboy.model.tools.dto.LocalStorageQueryCriteria;
|
||||
import cn.odboy.model.tools.request.LocalStorageQueryCriteria;
|
||||
import cn.odboy.properties.FileProperties;
|
||||
import cn.odboy.util.FileUtil;
|
||||
import cn.odboy.util.PageUtil;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user