Compare commits
11 Commits
b14c03fc32
...
feature/me
Author | SHA1 | Date | |
---|---|---|---|
16b1cb62d3 | |||
e9fe187c43 | |||
6ba7d9b906 | |||
e4b06d8b2d | |||
fcdf69026f | |||
4e4debaec9 | |||
0dc78a2b89 | |||
7ef0776296 | |||
b2bc6b3a6f | |||
b6301d2dc9 | |||
e59dc804ab |
@@ -2,8 +2,6 @@ package xyz.zhouxy.plusone.constant;
|
|||||||
|
|
||||||
public class ErrorCodeConsts {
|
public class ErrorCodeConsts {
|
||||||
public static final int DEFAULT_ERROR_CODE = 9999999;
|
public static final int DEFAULT_ERROR_CODE = 9999999;
|
||||||
public static final int DEFAULT_SYS_ERROR_CODE = 5000000;
|
|
||||||
public static final int DEFAULT_BIZ_ERROR_CODE = 4000000;
|
|
||||||
|
|
||||||
private ErrorCodeConsts() {
|
private ErrorCodeConsts() {
|
||||||
throw new IllegalStateException("Utility class");
|
throw new IllegalStateException("Utility class");
|
||||||
|
@@ -8,7 +8,7 @@ import java.sql.SQLException;
|
|||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* 通过在 {@link #map(ResultSet)} 中配置 {@link ResultSet} 到对象的映射,
|
* 通过在 {@link #map(ResultSet)} 中配置 {@link ResultSet} 到对象的映射,
|
||||||
* 可将 {@link #rowMapper(ResultSet, int)} 的方法引用,
|
* 可将 {@link #rowMapper(ResultSet, int)} 的方法应用,
|
||||||
* 直接当成 {@link org.springframework.jdbc.core.RowMapper} 对象传给
|
* 直接当成 {@link org.springframework.jdbc.core.RowMapper} 对象传给
|
||||||
* {@link org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate}
|
* {@link org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate}
|
||||||
* 的查询方法,
|
* 的查询方法,
|
||||||
|
@@ -1,17 +1,8 @@
|
|||||||
package xyz.zhouxy.plusone.oss;
|
package xyz.zhouxy.plusone.oss;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.math.BigInteger;
|
|
||||||
import java.security.MessageDigest;
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import org.csource.common.MyException;
|
import org.csource.common.MyException;
|
||||||
import org.csource.common.NameValuePair;
|
import org.csource.common.NameValuePair;
|
||||||
@@ -23,10 +14,7 @@ import org.csource.fastdfs.TrackerServer;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import com.google.common.io.Files;
|
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import xyz.zhouxy.plusone.exception.SysException;
|
|
||||||
|
|
||||||
public class FastDFSUtil {
|
public class FastDFSUtil {
|
||||||
|
|
||||||
@@ -56,7 +44,7 @@ public class FastDFSUtil {
|
|||||||
* @throws FastDFSException
|
* @throws FastDFSException
|
||||||
*/
|
*/
|
||||||
public String[] upload(FastDFSFile file) throws FastDFSException {
|
public String[] upload(FastDFSFile file) throws FastDFSException {
|
||||||
logger.info("File Name: {}, File Length: {}", file.getFileName(), file.getContent().length);
|
logger.info("File Name: {}, File Length: {}", file.getName(), file.getContent().length);
|
||||||
|
|
||||||
NameValuePair[] metaList = new NameValuePair[1];
|
NameValuePair[] metaList = new NameValuePair[1];
|
||||||
metaList[0] = new NameValuePair("author", file.getAuthor());
|
metaList[0] = new NameValuePair("author", file.getAuthor());
|
||||||
@@ -75,7 +63,7 @@ public class FastDFSUtil {
|
|||||||
uploadResults[0], uploadResults[1], System.currentTimeMillis() - startTime);
|
uploadResults[0], uploadResults[1], System.currentTimeMillis() - startTime);
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new FastDFSException("IO Exception when uploadind the file:" + file.getFileName(), e);
|
throw new FastDFSException("IO Exception when uploadind the file:" + file.getName(), e);
|
||||||
} catch (MyException e) {
|
} catch (MyException e) {
|
||||||
throw new FastDFSException(e);
|
throw new FastDFSException(e);
|
||||||
}
|
}
|
||||||
@@ -121,68 +109,18 @@ public class FastDFSUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
public static final class FastDFSFile {
|
public static final class FastDFSFile {
|
||||||
@Getter
|
private String name;
|
||||||
private final String fileName;
|
private byte[] content;
|
||||||
private final byte[] content;
|
private String ext;
|
||||||
@Getter
|
private String md5;
|
||||||
private final String ext;
|
private String author;
|
||||||
@Getter
|
|
||||||
private final String md5;
|
|
||||||
@Getter
|
|
||||||
private final String author;
|
|
||||||
|
|
||||||
private FastDFSFile(@Nonnull File file, @Nullable String author) throws IOException {
|
public FastDFSFile(String name, byte[] content, String ext) {
|
||||||
this.fileName = file.getName();
|
this.name = name;
|
||||||
this.content = Files.toByteArray(file);
|
|
||||||
this.ext = Files.getFileExtension(fileName);
|
|
||||||
this.md5 = md5Hex(content);
|
|
||||||
this.author = author;
|
|
||||||
}
|
|
||||||
|
|
||||||
private FastDFSFile(@Nonnull String fileName, @Nonnull byte[] content, @Nullable String author) {
|
|
||||||
this.fileName = fileName;
|
|
||||||
this.content = content;
|
this.content = content;
|
||||||
this.ext = Files.getFileExtension(fileName);
|
this.ext = ext;
|
||||||
this.md5 = md5Hex(content);
|
|
||||||
this.author = author;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
public static FastDFSFile of(@Nonnull File file) throws IOException {
|
|
||||||
return new FastDFSFile(file, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
public static FastDFSFile of(@Nonnull File file, @Nullable String author) throws IOException {
|
|
||||||
return new FastDFSFile(file, author);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
public static FastDFSFile of(@Nonnull String fileName, @Nonnull byte[] content) {
|
|
||||||
return new FastDFSFile(fileName, content, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
public static FastDFSFile of(@Nonnull String fileName, @Nonnull byte[] content, @Nullable String author) {
|
|
||||||
return new FastDFSFile(fileName, content, author);
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getContent() {
|
|
||||||
return Arrays.copyOf(content, content.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
private static String md5Hex(byte[] data) {
|
|
||||||
try {
|
|
||||||
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
|
|
||||||
messageDigest.update(data);
|
|
||||||
byte[] result = messageDigest.digest();
|
|
||||||
var sha512Hex = new BigInteger(1, result).toString(16);
|
|
||||||
return Objects.requireNonNull(sha512Hex);
|
|
||||||
} catch (NoSuchAlgorithmException e) {
|
|
||||||
throw new SysException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
package xyz.zhouxy.plusone.sms;
|
package xyz.zhouxy.plusone.sms;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.tencentcloudapi.common.Credential;
|
import com.tencentcloudapi.common.Credential;
|
||||||
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
|
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
|
||||||
import com.tencentcloudapi.common.profile.ClientProfile;
|
import com.tencentcloudapi.common.profile.ClientProfile;
|
||||||
@@ -8,11 +10,8 @@ import com.tencentcloudapi.sms.v20210111.SmsClient;
|
|||||||
import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
|
import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
|
||||||
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
|
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
|
||||||
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import xyz.zhouxy.plusone.constant.ErrorCodeConsts;
|
import xyz.zhouxy.plusone.exception.SysException;
|
||||||
import xyz.zhouxy.plusone.exception.BizException;
|
|
||||||
import xyz.zhouxy.plusone.sms.SmsProperties.SmsCredentialProperties;
|
import xyz.zhouxy.plusone.sms.SmsProperties.SmsCredentialProperties;
|
||||||
import xyz.zhouxy.plusone.sms.SmsProperties.SmsHttpProperties;
|
import xyz.zhouxy.plusone.sms.SmsProperties.SmsHttpProperties;
|
||||||
import xyz.zhouxy.plusone.sms.SmsProperties.SmsProxyProperties;
|
import xyz.zhouxy.plusone.sms.SmsProperties.SmsProxyProperties;
|
||||||
@@ -62,14 +61,13 @@ public class TencentSmsServiceImpl implements SmsService {
|
|||||||
var res = client.SendSms(req);
|
var res = client.SendSms(req);
|
||||||
|
|
||||||
// 输出json格式的字符串回包
|
// 输出json格式的字符串回包
|
||||||
System.out.println(SendSmsResponse.toJsonString(res));
|
log.info(SendSmsResponse.toJsonString(res));
|
||||||
|
|
||||||
// 也可以取出单个值,你可以通过官网接口文档或跳转到response对象的定义处查看返回字段的定义
|
// 也可以取出单个值,你可以通过官网接口文档或跳转到response对象的定义处查看返回字段的定义
|
||||||
// System.out.println(res.getRequestId());
|
// System.out.println(res.getRequestId());
|
||||||
|
|
||||||
} catch (TencentCloudSDKException e) {
|
} catch (TencentCloudSDKException e) {
|
||||||
log.error(e.getMessage(), e);
|
throw new SysException(e);
|
||||||
throw new BizException(ErrorCodeConsts.DEFAULT_ERROR_CODE, e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,11 +1,12 @@
|
|||||||
package xyz.zhouxy.plusone;
|
package xyz.zhouxy.plusone;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
@@ -23,7 +24,10 @@ class FastDFSTests {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testOSS() throws FileNotFoundException, IOException, FastDFSException {
|
void testOSS() throws FileNotFoundException, IOException, FastDFSException {
|
||||||
String[] upload = fastDFSUtil.upload(FastDFSFile.of(new File("D:\\ZhouXY\\Desktop\\666.png")));
|
try (FileInputStream in = new FileInputStream("D:\\ZhouXY\\Desktop\\666.png");) {
|
||||||
log.info(String.join("/", upload));
|
byte[] content = IOUtils.toByteArray(in);
|
||||||
|
String[] upload = fastDFSUtil.upload(new FastDFSFile("666.png", content, "png"));
|
||||||
|
log.info(String.join("/", upload));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import xyz.zhouxy.plusone.system.application.query.params.MenuQueryParams;
|
||||||
import xyz.zhouxy.plusone.system.application.service.MenuManagementService;
|
import xyz.zhouxy.plusone.system.application.service.MenuManagementService;
|
||||||
import xyz.zhouxy.plusone.system.application.service.command.CreateMenuCommand;
|
import xyz.zhouxy.plusone.system.application.service.command.CreateMenuCommand;
|
||||||
import xyz.zhouxy.plusone.system.application.service.command.UpdateMenuCommand;
|
import xyz.zhouxy.plusone.system.application.service.command.UpdateMenuCommand;
|
||||||
@@ -66,7 +67,14 @@ public class MenuManagementController {
|
|||||||
public RestfulResult findById(@PathVariable("id") Long id) {
|
public RestfulResult findById(@PathVariable("id") Long id) {
|
||||||
adminAuthLogic.checkPermission("sys-menu-details");
|
adminAuthLogic.checkPermission("sys-menu-details");
|
||||||
var result = service.findById(id);
|
var result = service.findById(id);
|
||||||
return RestfulResult.success("查询成功", result);
|
return success("查询成功", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public RestfulResult queryMenuTree(MenuQueryParams queryParams) {
|
||||||
|
adminAuthLogic.checkPermission("sys-menu-query");
|
||||||
|
var result = service.queryMenuTree(queryParams);
|
||||||
|
return success("查询成功", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("queryByAccountId")
|
@GetMapping("queryByAccountId")
|
||||||
|
@@ -0,0 +1,23 @@
|
|||||||
|
package xyz.zhouxy.plusone.system.application.query;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import xyz.zhouxy.plusone.system.application.query.params.MenuQueryParams;
|
||||||
|
import xyz.zhouxy.plusone.system.application.query.result.MenuViewObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author <a href="https://gitee.com/zhouxy108">ZhouXY</a>
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class MenuQueries {
|
||||||
|
|
||||||
|
public List<MenuViewObject> queryMenuTree(MenuQueryParams queryParams) {
|
||||||
|
// TODO【添加】 实现该查询
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -1,10 +0,0 @@
|
|||||||
package xyz.zhouxy.plusone.system.application.query;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @author <a href="https://gitee.com/zhouxy108">ZhouXY</a>
|
|
||||||
*/
|
|
||||||
public interface PermissionQueries {
|
|
||||||
// TODO【添加】 权限信息查询器
|
|
||||||
}
|
|
@@ -0,0 +1,18 @@
|
|||||||
|
package xyz.zhouxy.plusone.system.application.query.params;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
import xyz.zhouxy.plusone.constant.EntityStatus;
|
||||||
|
|
||||||
|
@ToString
|
||||||
|
public class MenuQueryParams {
|
||||||
|
private @Getter @Setter String name;
|
||||||
|
private @Getter @Setter String path;
|
||||||
|
private @Getter @Setter String title;
|
||||||
|
private @Getter @Setter Boolean hidden;
|
||||||
|
private @Getter @Setter EntityStatus status;
|
||||||
|
private @Getter @Setter String component;
|
||||||
|
private @Getter @Setter Boolean cache;
|
||||||
|
private @Getter @Setter String resource;
|
||||||
|
}
|
@@ -25,60 +25,28 @@ import xyz.zhouxy.plusone.system.domain.model.menu.Menu.MenuType;
|
|||||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
public class MenuViewObject implements IWithOrderNumber {
|
public class MenuViewObject implements IWithOrderNumber {
|
||||||
|
|
||||||
@Getter
|
private @Getter @Setter Integer type;
|
||||||
@Setter
|
|
||||||
Integer type;
|
|
||||||
|
|
||||||
@Getter
|
private @Getter @Setter String typeName;
|
||||||
@Setter
|
|
||||||
String typeName;
|
|
||||||
|
|
||||||
@Getter
|
private @Getter @Setter Long id;
|
||||||
@Setter
|
private @Getter @Setter Long parentId;
|
||||||
Long id;
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
Long parentId;
|
|
||||||
|
|
||||||
@Getter
|
private @Getter @Setter String name;
|
||||||
@Setter
|
|
||||||
String name;
|
|
||||||
// 若 type 为 MENU_ITEM 且 path 以 http:// 或 https:// 开头则被识别为外链
|
// 若 type 为 MENU_ITEM 且 path 以 http:// 或 https:// 开头则被识别为外链
|
||||||
@Getter
|
private @Getter @Setter String path;
|
||||||
@Setter
|
private @Getter @Setter String title;
|
||||||
String path;
|
private @Getter @Setter String icon;
|
||||||
@Getter
|
private @Getter @Setter boolean hidden;
|
||||||
@Setter
|
private @Getter @Setter int orderNumber;
|
||||||
String title;
|
private @Getter @Setter Integer status;
|
||||||
@Getter
|
private @Getter @Setter String remarks;
|
||||||
@Setter
|
|
||||||
String icon;
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
boolean hidden;
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
int orderNumber;
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
Integer status;
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
String remarks;
|
|
||||||
|
|
||||||
// MENU_ITEM
|
// MENU_ITEM
|
||||||
@Getter
|
private @Getter @Setter String component;
|
||||||
@Setter
|
private @Getter @Setter Boolean cache;
|
||||||
String component;
|
private @Getter @Setter String resource;
|
||||||
@Getter
|
private @Getter @Setter List<Action> actions;
|
||||||
@Setter
|
|
||||||
Boolean cache;
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
String resource;
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
List<Action> actions;
|
|
||||||
|
|
||||||
// MENU_LIST
|
// MENU_LIST
|
||||||
List<MenuViewObject> children;
|
List<MenuViewObject> children;
|
||||||
|
@@ -17,6 +17,8 @@ import xyz.zhouxy.plusone.constant.EntityStatus;
|
|||||||
import xyz.zhouxy.plusone.domain.IWithOrderNumber;
|
import xyz.zhouxy.plusone.domain.IWithOrderNumber;
|
||||||
import xyz.zhouxy.plusone.exception.DataNotExistException;
|
import xyz.zhouxy.plusone.exception.DataNotExistException;
|
||||||
import xyz.zhouxy.plusone.system.application.exception.UnsupportedMenuTypeException;
|
import xyz.zhouxy.plusone.system.application.exception.UnsupportedMenuTypeException;
|
||||||
|
import xyz.zhouxy.plusone.system.application.query.MenuQueries;
|
||||||
|
import xyz.zhouxy.plusone.system.application.query.params.MenuQueryParams;
|
||||||
import xyz.zhouxy.plusone.system.application.query.result.MenuViewObject;
|
import xyz.zhouxy.plusone.system.application.query.result.MenuViewObject;
|
||||||
import xyz.zhouxy.plusone.system.application.service.command.CreateMenuCommand;
|
import xyz.zhouxy.plusone.system.application.service.command.CreateMenuCommand;
|
||||||
import xyz.zhouxy.plusone.system.application.service.command.UpdateMenuCommand;
|
import xyz.zhouxy.plusone.system.application.service.command.UpdateMenuCommand;
|
||||||
@@ -36,10 +38,12 @@ public class MenuManagementService {
|
|||||||
|
|
||||||
private final MenuService menuService;
|
private final MenuService menuService;
|
||||||
private final MenuRepository menuRepository;
|
private final MenuRepository menuRepository;
|
||||||
|
private final MenuQueries menuQueries;
|
||||||
|
|
||||||
MenuManagementService(MenuService roleRepository, MenuRepository menuRepository) {
|
MenuManagementService(MenuService menuService, MenuRepository menuRepository, MenuQueries menuQueries) {
|
||||||
this.menuService = roleRepository;
|
this.menuService = menuService;
|
||||||
this.menuRepository = menuRepository;
|
this.menuRepository = menuRepository;
|
||||||
|
this.menuQueries = menuQueries;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== create ====================
|
// ==================== create ====================
|
||||||
@@ -123,6 +127,11 @@ public class MenuManagementService {
|
|||||||
return MenuViewObject.of(menu.orElseThrow(DataNotExistException::new));
|
return MenuViewObject.of(menu.orElseThrow(DataNotExistException::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional(propagation = Propagation.SUPPORTS)
|
||||||
|
public List<MenuViewObject> queryMenuTree(MenuQueryParams queryParams) {
|
||||||
|
return menuQueries.queryMenuTree(queryParams);
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional(propagation = Propagation.SUPPORTS)
|
@Transactional(propagation = Propagation.SUPPORTS)
|
||||||
public List<MenuViewObject> queryByAccountId(Long accountId) {
|
public List<MenuViewObject> queryByAccountId(Long accountId) {
|
||||||
var menus = menuService.queryAllMenuListByAccountId(accountId);
|
var menus = menuService.queryAllMenuListByAccountId(accountId);
|
||||||
|
@@ -4,12 +4,10 @@ import java.math.BigInteger;
|
|||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
import xyz.zhouxy.plusone.constant.ErrorCodeConsts;
|
import xyz.zhouxy.plusone.exception.SysException;
|
||||||
import xyz.zhouxy.plusone.exception.BizException;
|
|
||||||
import xyz.zhouxy.plusone.util.RandomUtil;
|
import xyz.zhouxy.plusone.util.RandomUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -34,12 +32,11 @@ public final class PasswordUtil {
|
|||||||
int i = length > 0 ? length / 2 : 0;
|
int i = length > 0 ? length / 2 : 0;
|
||||||
var passwordWithSalt = salt.substring(0, i)
|
var passwordWithSalt = salt.substring(0, i)
|
||||||
+ password
|
+ password
|
||||||
+ salt.substring(1);
|
+ salt.substring(i);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return sha512Hex(passwordWithSalt);
|
return sha512Hex(passwordWithSalt);
|
||||||
} catch (Exception e) {
|
} catch (NoSuchAlgorithmException e) {
|
||||||
throw new BizException(ErrorCodeConsts.DEFAULT_ERROR_CODE, "哈希加密失败!", e);
|
throw new SysException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,11 +55,11 @@ public final class PasswordUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
|
@SuppressWarnings("null")
|
||||||
private static String sha512Hex(String data) throws NoSuchAlgorithmException {
|
private static String sha512Hex(String data) throws NoSuchAlgorithmException {
|
||||||
MessageDigest messageDigest = MessageDigest.getInstance("SHA-512");
|
MessageDigest messageDigest = MessageDigest.getInstance("SHA-512");
|
||||||
messageDigest.update(data.getBytes(StandardCharsets.UTF_8));
|
messageDigest.update(data.getBytes(StandardCharsets.UTF_8));
|
||||||
byte[] result = messageDigest.digest();
|
byte[] result = messageDigest.digest();
|
||||||
var sha512Hex = new BigInteger(1, result).toString(16);
|
return new BigInteger(1, result).toString(16);
|
||||||
return Objects.requireNonNull(sha512Hex);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,7 +6,6 @@ import java.util.Optional;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod;
|
|
||||||
import xyz.zhouxy.plusone.domain.AggregateRoot;
|
import xyz.zhouxy.plusone.domain.AggregateRoot;
|
||||||
import xyz.zhouxy.plusone.domain.IWithVersion;
|
import xyz.zhouxy.plusone.domain.IWithVersion;
|
||||||
import xyz.zhouxy.plusone.exception.UserOperationException;
|
import xyz.zhouxy.plusone.exception.UserOperationException;
|
||||||
@@ -165,7 +164,6 @@ public class Account extends AggregateRoot<Long> implements IWithVersion {
|
|||||||
return newInstance;
|
return newInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Account.class)
|
|
||||||
public static Account register(
|
public static Account register(
|
||||||
Username username,
|
Username username,
|
||||||
Email email,
|
Email email,
|
||||||
@@ -195,7 +193,6 @@ public class Account extends AggregateRoot<Long> implements IWithVersion {
|
|||||||
password, status, accountInfo, roleRefs, createdBy, updatedBy, version);
|
password, status, accountInfo, roleRefs, createdBy, updatedBy, version);
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Account.class)
|
|
||||||
public static Account newInstance(
|
public static Account newInstance(
|
||||||
String username,
|
String username,
|
||||||
String email,
|
String email,
|
||||||
@@ -213,7 +210,6 @@ public class Account extends AggregateRoot<Long> implements IWithVersion {
|
|||||||
return newInstance;
|
return newInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Account.class)
|
|
||||||
public static Account register(
|
public static Account register(
|
||||||
String username,
|
String username,
|
||||||
String email,
|
String email,
|
||||||
|
@@ -4,7 +4,6 @@ import java.util.Objects;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import cn.hutool.core.util.DesensitizedUtil;
|
import cn.hutool.core.util.DesensitizedUtil;
|
||||||
import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod;
|
|
||||||
import xyz.zhouxy.plusone.commons.constant.PatternConsts;
|
import xyz.zhouxy.plusone.commons.constant.PatternConsts;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -27,12 +26,10 @@ public class Email extends Principal {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Email.class)
|
|
||||||
public static Email of(String email) {
|
public static Email of(String email) {
|
||||||
return new Email(email);
|
return new Email(email);
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Email.class)
|
|
||||||
public static Email ofNullable(String email) {
|
public static Email ofNullable(String email) {
|
||||||
return Objects.nonNull(email) ? new Email(email) : null;
|
return Objects.nonNull(email) ? new Email(email) : null;
|
||||||
}
|
}
|
||||||
|
@@ -4,7 +4,6 @@ import java.util.Objects;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import cn.hutool.core.util.DesensitizedUtil;
|
import cn.hutool.core.util.DesensitizedUtil;
|
||||||
import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod;
|
|
||||||
import xyz.zhouxy.plusone.commons.constant.PatternConsts;
|
import xyz.zhouxy.plusone.commons.constant.PatternConsts;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -27,12 +26,10 @@ public class MobilePhone extends Principal {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(MobilePhone.class)
|
|
||||||
public static MobilePhone of(String mobilePhone) {
|
public static MobilePhone of(String mobilePhone) {
|
||||||
return new MobilePhone(mobilePhone);
|
return new MobilePhone(mobilePhone);
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(MobilePhone.class)
|
|
||||||
public static MobilePhone ofNullable(String mobilePhone) {
|
public static MobilePhone ofNullable(String mobilePhone) {
|
||||||
return Objects.nonNull(mobilePhone) ? new MobilePhone(mobilePhone) : null;
|
return Objects.nonNull(mobilePhone) ? new MobilePhone(mobilePhone) : null;
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,6 @@ package xyz.zhouxy.plusone.system.domain.model.account;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod;
|
|
||||||
import xyz.zhouxy.plusone.commons.constant.PatternConsts;
|
import xyz.zhouxy.plusone.commons.constant.PatternConsts;
|
||||||
import xyz.zhouxy.plusone.domain.ValidatableStringRecord;
|
import xyz.zhouxy.plusone.domain.ValidatableStringRecord;
|
||||||
|
|
||||||
@@ -27,12 +26,10 @@ public class Nickname extends ValidatableStringRecord {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Nickname.class)
|
|
||||||
public static Nickname of(String nickname) {
|
public static Nickname of(String nickname) {
|
||||||
return new Nickname(nickname);
|
return new Nickname(nickname);
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Nickname.class)
|
|
||||||
public static Nickname ofNullable(String nickname) {
|
public static Nickname ofNullable(String nickname) {
|
||||||
return Objects.nonNull(nickname) ? new Nickname(nickname) : null;
|
return Objects.nonNull(nickname) ? new Nickname(nickname) : null;
|
||||||
}
|
}
|
||||||
|
@@ -7,11 +7,9 @@ import javax.annotation.Nonnull;
|
|||||||
|
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod;
|
|
||||||
import xyz.zhouxy.plusone.commons.constant.PatternConsts;
|
import xyz.zhouxy.plusone.commons.constant.PatternConsts;
|
||||||
import xyz.zhouxy.plusone.constant.ErrorCodeConsts;
|
|
||||||
import xyz.zhouxy.plusone.domain.IValueObject;
|
import xyz.zhouxy.plusone.domain.IValueObject;
|
||||||
import xyz.zhouxy.plusone.exception.BizException;
|
import xyz.zhouxy.plusone.exception.SysException;
|
||||||
import xyz.zhouxy.plusone.system.util.PasswordUtil;
|
import xyz.zhouxy.plusone.system.util.PasswordUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -38,7 +36,7 @@ public class Password implements IValueObject {
|
|||||||
}
|
}
|
||||||
var salt = PasswordUtil.generateRandomSalt();
|
var salt = PasswordUtil.generateRandomSalt();
|
||||||
if (salt == null) {
|
if (salt == null) {
|
||||||
throw new BizException(ErrorCodeConsts.DEFAULT_ERROR_CODE, "未知错误:生成随机盐失败");
|
throw new SysException("未知错误:生成随机盐失败");
|
||||||
}
|
}
|
||||||
this.saltVal = salt;
|
this.saltVal = salt;
|
||||||
this.passwordVal = PasswordUtil.hashPassword(password, salt);
|
this.passwordVal = PasswordUtil.hashPassword(password, salt);
|
||||||
@@ -52,18 +50,15 @@ public class Password implements IValueObject {
|
|||||||
this.saltVal = salt;
|
this.saltVal = salt;
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Password.class)
|
|
||||||
public static Password of(String password, String salt) {
|
public static Password of(String password, String salt) {
|
||||||
return new Password(password, salt);
|
return new Password(password, salt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Password.class)
|
|
||||||
public static Password newPassword(String newPassword, String passwordConfirmation) {
|
public static Password newPassword(String newPassword, String passwordConfirmation) {
|
||||||
Assert.isTrue(Objects.equals(newPassword, passwordConfirmation), "两次输入的密码不一致");
|
Assert.isTrue(Objects.equals(newPassword, passwordConfirmation), "两次输入的密码不一致");
|
||||||
return newPassword(newPassword);
|
return newPassword(newPassword);
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Password.class)
|
|
||||||
public static Password newPassword(String newPassword) {
|
public static Password newPassword(String newPassword) {
|
||||||
return new Password(newPassword);
|
return new Password(newPassword);
|
||||||
}
|
}
|
||||||
@@ -84,7 +79,6 @@ public class Password implements IValueObject {
|
|||||||
return saltVal;
|
return saltVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Nickname.class)
|
|
||||||
public static Password newDefaultPassword() {
|
public static Password newDefaultPassword() {
|
||||||
return newPassword(DEFAULT_PASSWORD);
|
return newPassword(DEFAULT_PASSWORD);
|
||||||
}
|
}
|
||||||
|
@@ -4,7 +4,6 @@ import java.util.Collection;
|
|||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod;
|
|
||||||
import xyz.zhouxy.plusone.commons.util.Enumeration;
|
import xyz.zhouxy.plusone.commons.util.Enumeration;
|
||||||
import xyz.zhouxy.plusone.domain.IValueObject;
|
import xyz.zhouxy.plusone.domain.IValueObject;
|
||||||
|
|
||||||
@@ -28,7 +27,6 @@ public final class Sex extends Enumeration<Sex> implements IValueObject {
|
|||||||
private static final ValueSet<Sex> VALUE_SET = new ValueSet<>(UNSET, MALE, FEMALE);
|
private static final ValueSet<Sex> VALUE_SET = new ValueSet<>(UNSET, MALE, FEMALE);
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@StaticFactoryMethod(Sex.class)
|
|
||||||
public static Sex of(int value) {
|
public static Sex of(int value) {
|
||||||
return VALUE_SET.get(value);
|
return VALUE_SET.get(value);
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,6 @@ package xyz.zhouxy.plusone.system.domain.model.account;
|
|||||||
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod;
|
|
||||||
import xyz.zhouxy.plusone.commons.constant.PatternConsts;
|
import xyz.zhouxy.plusone.commons.constant.PatternConsts;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -25,7 +24,6 @@ public class Username extends Principal {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Username.class)
|
|
||||||
public static Username of(String username) {
|
public static Username of(String username) {
|
||||||
return new Username(username);
|
return new Username(username);
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,6 @@ import java.util.Optional;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod;
|
|
||||||
import xyz.zhouxy.plusone.domain.AggregateRoot;
|
import xyz.zhouxy.plusone.domain.AggregateRoot;
|
||||||
import xyz.zhouxy.plusone.domain.IWithLabel;
|
import xyz.zhouxy.plusone.domain.IWithLabel;
|
||||||
import xyz.zhouxy.plusone.domain.IWithVersion;
|
import xyz.zhouxy.plusone.domain.IWithVersion;
|
||||||
@@ -71,14 +70,12 @@ public class Dict extends AggregateRoot<Long> implements IWithLabel, IWithVersio
|
|||||||
this.version = version;
|
this.version = version;
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Dict.class)
|
|
||||||
public static Dict newInstance(
|
public static Dict newInstance(
|
||||||
String dictType,
|
String dictType,
|
||||||
String dictLabel) {
|
String dictLabel) {
|
||||||
return new Dict(null, dictType, dictLabel, Collections.emptySet(), 0);
|
return new Dict(null, dictType, dictLabel, Collections.emptySet(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Dict.class)
|
|
||||||
public static Dict newInstance(
|
public static Dict newInstance(
|
||||||
String dictType,
|
String dictType,
|
||||||
String dictLabel,
|
String dictLabel,
|
||||||
@@ -86,7 +83,6 @@ public class Dict extends AggregateRoot<Long> implements IWithLabel, IWithVersio
|
|||||||
return new Dict(null, dictType, dictLabel, values, 0);
|
return new Dict(null, dictType, dictLabel, values, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Dict.class)
|
|
||||||
public static Dict newInstance(
|
public static Dict newInstance(
|
||||||
String dictType,
|
String dictType,
|
||||||
String dictLabel,
|
String dictLabel,
|
||||||
|
@@ -4,7 +4,6 @@ import java.util.Objects;
|
|||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod;
|
|
||||||
import xyz.zhouxy.plusone.domain.IValueObject;
|
import xyz.zhouxy.plusone.domain.IValueObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -26,7 +25,6 @@ public class DictValue implements IValueObject {
|
|||||||
this.label = label;
|
this.label = label;
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(DictValue.class)
|
|
||||||
public static DictValue of(int key, String label) {
|
public static DictValue of(int key, String label) {
|
||||||
return new DictValue(key, label);
|
return new DictValue(key, label);
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,6 @@ package xyz.zhouxy.plusone.system.domain.model.menu;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod;
|
|
||||||
import xyz.zhouxy.plusone.constant.EntityStatus;
|
import xyz.zhouxy.plusone.constant.EntityStatus;
|
||||||
import xyz.zhouxy.plusone.system.domain.model.menu.Menu.MenuType;
|
import xyz.zhouxy.plusone.system.domain.model.menu.Menu.MenuType;
|
||||||
|
|
||||||
@@ -17,7 +16,6 @@ public class MenuConstructor {
|
|||||||
throw new IllegalStateException("Utility class");
|
throw new IllegalStateException("Utility class");
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Menu.class)
|
|
||||||
public static Menu newMenuItem(
|
public static Menu newMenuItem(
|
||||||
long parentId,
|
long parentId,
|
||||||
String path,
|
String path,
|
||||||
@@ -41,7 +39,6 @@ public class MenuConstructor {
|
|||||||
remarks, component, cache, resource, actions, 0L);
|
remarks, component, cache, resource, actions, 0L);
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Menu.class)
|
|
||||||
public static Menu newMenuList(
|
public static Menu newMenuList(
|
||||||
long parentId,
|
long parentId,
|
||||||
String path,
|
String path,
|
||||||
|
@@ -3,7 +3,6 @@ package xyz.zhouxy.plusone.system.domain.model.permission;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod;
|
|
||||||
import xyz.zhouxy.plusone.domain.Entity;
|
import xyz.zhouxy.plusone.domain.Entity;
|
||||||
import xyz.zhouxy.plusone.domain.IWithLabel;
|
import xyz.zhouxy.plusone.domain.IWithLabel;
|
||||||
import xyz.zhouxy.plusone.domain.IWithVersion;
|
import xyz.zhouxy.plusone.domain.IWithVersion;
|
||||||
@@ -21,7 +20,7 @@ public class Action extends Entity<Long> implements IWithLabel, IWithVersion {
|
|||||||
@Getter String label;
|
@Getter String label;
|
||||||
@Getter long version;
|
@Getter long version;
|
||||||
|
|
||||||
private Action(Long id, String resource, String identifier, String label, long version) {
|
public Action(Long id, String resource, String identifier, String label, long version) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.resource = resource;
|
this.resource = resource;
|
||||||
this.identifier = identifier;
|
this.identifier = identifier;
|
||||||
@@ -29,12 +28,10 @@ public class Action extends Entity<Long> implements IWithLabel, IWithVersion {
|
|||||||
this.version = version;
|
this.version = version;
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Action.class)
|
|
||||||
static Action newInstance(String resource, String identifier, String label) {
|
static Action newInstance(String resource, String identifier, String label) {
|
||||||
return new Action(null, resource, identifier, label, 0L);
|
return new Action(null, resource, identifier, label, 0L);
|
||||||
}
|
}
|
||||||
|
|
||||||
@StaticFactoryMethod(Action.class)
|
|
||||||
static Action existingInstance(Long id, String resource, String action, String label, Long version) {
|
static Action existingInstance(Long id, String resource, String action, String label, Long version) {
|
||||||
return new Action(id, resource, action, label, version);
|
return new Action(id, resource, action, label, version);
|
||||||
}
|
}
|
||||||
|
@@ -6,7 +6,6 @@ import java.util.Objects;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod;
|
|
||||||
import xyz.zhouxy.plusone.domain.AggregateRoot;
|
import xyz.zhouxy.plusone.domain.AggregateRoot;
|
||||||
import xyz.zhouxy.plusone.domain.IWithVersion;
|
import xyz.zhouxy.plusone.domain.IWithVersion;
|
||||||
|
|
||||||
@@ -38,7 +37,6 @@ public class Permission extends AggregateRoot<Long> implements IWithVersion {
|
|||||||
|
|
||||||
// ==================== 实例化 ====================
|
// ==================== 实例化 ====================
|
||||||
|
|
||||||
@StaticFactoryMethod(Permission.class)
|
|
||||||
public static Permission newInstance(String resource) {
|
public static Permission newInstance(String resource) {
|
||||||
return new Permission(
|
return new Permission(
|
||||||
null, resource,
|
null, resource,
|
||||||
|
Reference in New Issue
Block a user