diff --git a/pom.xml b/pom.xml
index 54394d3..c24d332 100644
--- a/pom.xml
+++ b/pom.xml
@@ -173,7 +173,7 @@
com.imyeyu.spring
timi-spring
- 0.0.16
+ 0.0.17
com.imyeyu.network
@@ -183,7 +183,12 @@
com.imyeyu.lang
timi-lang
- 0.0.4
+ 0.0.5
+
+
+ com.imyeyu.java
+ timi-java
+ 0.0.6
com.imyeyu.utils
diff --git a/src/main/java/com/imyeyu/api/annotation/RequestRateLimitInterceptor.java b/src/main/java/com/imyeyu/api/annotation/RequestRateLimitInterceptor.java
index ebe951d..66d3ce6 100644
--- a/src/main/java/com/imyeyu/api/annotation/RequestRateLimitInterceptor.java
+++ b/src/main/java/com/imyeyu/api/annotation/RequestRateLimitInterceptor.java
@@ -40,7 +40,7 @@ public class RequestRateLimitInterceptor extends RequestRateLimitAbstractInterce
redis.setAndKeepTTL(key, ++count);
} else {
log.warn("请求频率过高:[" + key + "].C" + count + "L" + limit);
- throw new TimiException(TimiCode.REQUEST_BAD).msgKey("request_rate_limit");
+ throw new TimiException(TimiCode.REQUEST_BAD, "request_rate_limit");
}
}
return true;
diff --git a/src/main/java/com/imyeyu/api/modules/common/service/implement/AttachmentServiceImplement.java b/src/main/java/com/imyeyu/api/modules/common/service/implement/AttachmentServiceImplement.java
index 1238392..0abacf8 100644
--- a/src/main/java/com/imyeyu/api/modules/common/service/implement/AttachmentServiceImplement.java
+++ b/src/main/java/com/imyeyu/api/modules/common/service/implement/AttachmentServiceImplement.java
@@ -97,7 +97,7 @@ public class AttachmentServiceImplement extends AbstractEntityService {
@Select("SELECT * FROM `gao_customer` WHERE `code` = #{code} AND `deleted_at` IS NULL LIMIT 1")
GaoCustomer selectByCode(@Param("code") String code);
+ @Select("SELECT * FROM `gao_customer` WHERE `name` = #{name} AND `deleted_at` IS NULL LIMIT 1")
+ GaoCustomer selectByName(@Param("name") String name);
+
List search(@Param("keyword") String keyword, @Param("introducerCustomerId") String introducerCustomerId);
Long countSearch(@Param("keyword") String keyword, @Param("introducerCustomerId") String introducerCustomerId);
diff --git a/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoCustomerServiceImplement.java b/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoCustomerServiceImplement.java
index 72d0222..f4789f3 100644
--- a/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoCustomerServiceImplement.java
+++ b/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoCustomerServiceImplement.java
@@ -258,10 +258,16 @@ public class GaoCustomerServiceImplement extends AbstractEntityService request) {
// if (IOSize.MB * 120 < request.getData().getFile().getSize()) {
-// throw new TimiException(TimiCode.ARG_BAD).msgKey("lyric.correct_request.too_big");
+// throw new TimiException(TimiCode.ARG_BAD, "lyric.correct_request.too_big");
// }
// return correctService.correctRequest(request.getData());
// }
diff --git a/src/main/java/com/imyeyu/api/modules/lyric/service/implement/LyricServiceImplement.java b/src/main/java/com/imyeyu/api/modules/lyric/service/implement/LyricServiceImplement.java
index df73a5f..148cfe8 100644
--- a/src/main/java/com/imyeyu/api/modules/lyric/service/implement/LyricServiceImplement.java
+++ b/src/main/java/com/imyeyu/api/modules/lyric/service/implement/LyricServiceImplement.java
@@ -135,7 +135,7 @@ public class LyricServiceImplement extends AbstractEntityService
return lyric;
} catch (Exception e) {
log.error("fetch lyric fail", e);
- throw new TimiException(TimiCode.ERROR).msgKey("无法获取歌词");
+ throw new TimiException(TimiCode.ERROR, "无法获取歌词");
}
}
}
diff --git a/src/main/java/com/imyeyu/api/modules/mirror/AbstractMirror.java b/src/main/java/com/imyeyu/api/modules/mirror/AbstractMirror.java
index 32af595..49a4fb2 100644
--- a/src/main/java/com/imyeyu/api/modules/mirror/AbstractMirror.java
+++ b/src/main/java/com/imyeyu/api/modules/mirror/AbstractMirror.java
@@ -94,7 +94,7 @@ abstract class AbstractMirror {
onException(mirror, e);
if (e instanceof TimiException te) {
- log.warn("[%s] Fail: %s".formatted(mirror.getBean(), te.getMsg()));
+ log.warn("[%s] Fail: %s".formatted(mirror.getBean(), te.getMessage()));
} else {
log.error("[%s] Error".formatted(mirror.getBean()), e);
}
diff --git a/src/main/java/com/imyeyu/api/modules/system/bean/TerminalPipe.java b/src/main/java/com/imyeyu/api/modules/system/bean/TerminalPipe.java
index 187bc9b..085922a 100644
--- a/src/main/java/com/imyeyu/api/modules/system/bean/TerminalPipe.java
+++ b/src/main/java/com/imyeyu/api/modules/system/bean/TerminalPipe.java
@@ -132,7 +132,7 @@ public class TerminalPipe implements TimiJava {
*/
public void exec(CallbackArg callback, String command) {
if (status == Status.DIED) {
- throw new TimiException(TimiCode.RESULT_BAD).msgKey("该会话已终止");
+ throw new TimiException(TimiCode.RESULT_BAD, "该会话已终止");
}
this.status = Status.RUNNING;
this.callback = callback;
diff --git a/src/main/java/com/imyeyu/api/modules/system/controller/FileController.java b/src/main/java/com/imyeyu/api/modules/system/controller/FileController.java
index ba9cf58..4111308 100644
--- a/src/main/java/com/imyeyu/api/modules/system/controller/FileController.java
+++ b/src/main/java/com/imyeyu/api/modules/system/controller/FileController.java
@@ -87,7 +87,7 @@ public class FileController implements TimiJava, OS.FileSystem {
public ServerFile object(HttpServletRequest req, HttpServletResponse resp) {
String path = req.getServletPath().substring("/system/file/object".length());
if (TimiJava.isEmpty(path)) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("TODO 缺少参数:object");
+ throw new TimiException(TimiCode.ARG_MISS, "TODO 缺少参数:object");
}
ServerFile file = new ServerFile(new File(path));
service.checkAccessPermission(file.getAbsolutePath());
@@ -105,10 +105,10 @@ public class FileController implements TimiJava, OS.FileSystem {
@PostMapping("/search")
public List search(@RequestBody Map params) {
if (TimiJava.isEmpty(params.get("path"))) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少参数:path");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少参数:path");
}
if (TimiJava.isEmpty(params.get("keyword"))) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少参数:keyword");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少参数:keyword");
}
return service.doFilter(service.search(params.get("path"), params.get("keyword")));
}
@@ -126,7 +126,7 @@ public class FileController implements TimiJava, OS.FileSystem {
public boolean exist(HttpServletRequest req, HttpServletResponse resp) {
String path = req.getServletPath().substring("/system/file/exist".length());
if (TimiJava.isEmpty(path)) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少参数:path");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少参数:path");
}
return service.canAccess(path) && service.isExist(path);
}
@@ -237,10 +237,10 @@ public class FileController implements TimiJava, OS.FileSystem {
@PostMapping("/mkdir")
public String mkdir(@RequestBody Map params) {
if (TimiJava.isEmpty(params.get("path"))) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少参数:path");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少参数:path");
}
if (TimiJava.isEmpty(params.get("name"))) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少参数:name");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少参数:name");
}
return service.mkdir(params.get("path"), params.get("name")).getAbsolutePath();
}
@@ -256,10 +256,10 @@ public class FileController implements TimiJava, OS.FileSystem {
@PostMapping("/rename")
public boolean rename(@RequestBody Map params) {
if (TimiJava.isEmpty(params.get("from"))) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少参数:from");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少参数:from");
}
if (TimiJava.isEmpty(params.get("to"))) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少参数:to");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少参数:to");
}
return service.rename(params.get("from"), params.get("to"));
}
@@ -275,10 +275,10 @@ public class FileController implements TimiJava, OS.FileSystem {
@PostMapping("/zip")
public String zip(@RequestBody ListFileToRequest listFileToRequest) {
if (TimiJava.isEmpty(listFileToRequest.getList())) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少参数:list[]");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少参数:list[]");
}
if (TimiJava.isEmpty(listFileToRequest.getTo())) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少参数:to");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少参数:to");
}
// 异步任务
FileZipAsyncTask task = new FileZipAsyncTask(listFileToRequest.getList(), listFileToRequest.getTo());
@@ -298,14 +298,14 @@ public class FileController implements TimiJava, OS.FileSystem {
public String unzip(@RequestBody Map params) {
String zipFilePath = params.get("zipFile");
if (TimiJava.isEmpty(zipFilePath)) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少参数:zipFile");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少参数:zipFile");
}
File zipFile = new File(zipFilePath);
if (!zipFile.exists()) {
- throw new TimiException(TimiCode.ARG_BAD).msgKey("文件不存在:" + zipFilePath);
+ throw new TimiException(TimiCode.ARG_BAD, "文件不存在:" + zipFilePath);
}
if (TimiJava.isEmpty(params.get("to"))) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少参数:to");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少参数:to");
}
// 异步任务
FileUnZipAsyncTask task = new FileUnZipAsyncTask(zipFile, params.get("to"));
@@ -341,14 +341,14 @@ public class FileController implements TimiJava, OS.FileSystem {
// TODO 具名入参
String tarFilePath = params.get("tarFile");
if (TimiJava.isEmpty(tarFilePath)) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少参数:tarFile");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少参数:tarFile");
}
File tarFile = new File(tarFilePath);
if (!tarFile.exists()) {
- throw new TimiException(TimiCode.ARG_BAD).msgKey("文件不存在:" + tarFilePath);
+ throw new TimiException(TimiCode.ARG_BAD, "文件不存在:" + tarFilePath);
}
if (TimiJava.isEmpty(params.get("to"))) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少参数:to");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少参数:to");
}
FileUnTarAsyncTask task = new FileUnTarAsyncTask(tarFile, params.get("to"));
asyncTaskService.addAsyncTask(task);
diff --git a/src/main/java/com/imyeyu/api/modules/system/service/implement/AbstractAsyncTask.java b/src/main/java/com/imyeyu/api/modules/system/service/implement/AbstractAsyncTask.java
index d7b02db..70c5921 100644
--- a/src/main/java/com/imyeyu/api/modules/system/service/implement/AbstractAsyncTask.java
+++ b/src/main/java/com/imyeyu/api/modules/system/service/implement/AbstractAsyncTask.java
@@ -116,7 +116,7 @@ public abstract class AbstractAsyncTask extends AsyncTask {
/** 开始 */
void start() {
if (status != AsyncTask.Status.IDLE && status != AsyncTask.Status.PAUSE) {
- throw new TimiException(TimiCode.RESULT_BAD).msgKey("can not start this task");
+ throw new TimiException(TimiCode.RESULT_BAD, "can not start this task");
}
synchronized (pauseLocker) {
pauseLocker.notifyAll();
@@ -127,7 +127,7 @@ public abstract class AbstractAsyncTask extends AsyncTask {
/** 暂停 */
void pause() {
if (!canPause || (status != AsyncTask.Status.WAITING && status != AsyncTask.Status.RUNNING)) {
- throw new TimiException(TimiCode.RESULT_BAD).msgKey("can not pause this task");
+ throw new TimiException(TimiCode.RESULT_BAD, "can not pause this task");
}
status = Status.PAUSE;
onPause();
@@ -139,7 +139,7 @@ public abstract class AbstractAsyncTask extends AsyncTask {
return;
}
if (!canInterrupt || (status != AsyncTask.Status.WAITING && status != AsyncTask.Status.RUNNING && status != AsyncTask.Status.PAUSE)) {
- throw new TimiException(TimiCode.RESULT_BAD).msgKey("can not interrupt this task");
+ throw new TimiException(TimiCode.RESULT_BAD, "can not interrupt this task");
}
if (status == AsyncTask.Status.PAUSE) {
status = AsyncTask.Status.INTERRUPT;
diff --git a/src/main/java/com/imyeyu/api/modules/system/service/implement/AsyncTaskServiceImplement.java b/src/main/java/com/imyeyu/api/modules/system/service/implement/AsyncTaskServiceImplement.java
index 01d6c84..45ece57 100644
--- a/src/main/java/com/imyeyu/api/modules/system/service/implement/AsyncTaskServiceImplement.java
+++ b/src/main/java/com/imyeyu/api/modules/system/service/implement/AsyncTaskServiceImplement.java
@@ -109,7 +109,7 @@ public class AsyncTaskServiceImplement implements AsyncTaskService {
task.setMessage(task.logBuffer.toString());
return task;
}
- throw new TimiException(TimiCode.RESULT_NULL).msgKey("TODO not found task");
+ throw new TimiException(TimiCode.RESULT_NULL, "TODO not found task");
}
@Override
diff --git a/src/main/java/com/imyeyu/api/modules/system/service/implement/FileServiceImplement.java b/src/main/java/com/imyeyu/api/modules/system/service/implement/FileServiceImplement.java
index c969a3d..820276d 100644
--- a/src/main/java/com/imyeyu/api/modules/system/service/implement/FileServiceImplement.java
+++ b/src/main/java/com/imyeyu/api/modules/system/service/implement/FileServiceImplement.java
@@ -114,7 +114,7 @@ public class FileServiceImplement implements TimiJava, FileService {
if (canAccess(path)) {
return;
}
- throw new TimiException(TimiCode.PERMISSION_ERROR).msgKey("TODO invalid permission");
+ throw new TimiException(TimiCode.PERMISSION_ERROR, "TODO invalid permission");
}
@Override
@@ -139,7 +139,7 @@ public class FileServiceImplement implements TimiJava, FileService {
}
return result;
} else {
- throw new TimiException(TimiCode.RESULT_NULL).msgKey("文件或路径不存在");
+ throw new TimiException(TimiCode.RESULT_NULL, "文件或路径不存在");
}
}
@@ -176,7 +176,7 @@ public class FileServiceImplement implements TimiJava, FileService {
}
return result;
} else {
- throw new TimiException(TimiCode.RESULT_NULL).msgKey("文件或路径不存在");
+ throw new TimiException(TimiCode.RESULT_NULL, "文件或路径不存在");
}
}
@@ -186,7 +186,7 @@ public class FileServiceImplement implements TimiJava, FileService {
try {
return IO.dir(uri);
} catch (NoPermissionException e) {
- throw new TimiException(TimiCode.PERMISSION_ERROR).msgKey("权限错误");
+ throw new TimiException(TimiCode.PERMISSION_ERROR, "权限错误");
}
}
@@ -205,7 +205,7 @@ public class FileServiceImplement implements TimiJava, FileService {
try {
return IO.getInputStream(getPath(path));
} catch (FileNotFoundException e) {
- throw new TimiException(TimiCode.RESULT_NULL).msgKey("找不到文件");
+ throw new TimiException(TimiCode.RESULT_NULL, "找不到文件");
}
}
@@ -213,25 +213,25 @@ public class FileServiceImplement implements TimiJava, FileService {
public void upload(TransferFile file) {
String path = getPath(Decoder.url(file.getPath()));
if (file.getName() == null) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少参数:name");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少参数:name");
}
String fileName = Decoder.url(file.getName());
if (!OS.isValidFileName(path)) {
- throw new TimiException(TimiCode.ARG_BAD).msgKey("路径名称不合法:" + path);
+ throw new TimiException(TimiCode.ARG_BAD, "路径名称不合法:" + path);
}
if (!OS.isValidFileName(fileName)) {
- throw new TimiException(TimiCode.ARG_BAD).msgKey("文件名称不合法:" + fileName);
+ throw new TimiException(TimiCode.ARG_BAD, "文件名称不合法:" + fileName);
}
if (file.getLength() == file.getFile().getSize()) {
try {
toFile(new File(path + fileName), file.getFile().getInputStream());
} catch (IOException e) {
log.error("get request input stream error", e);
- throw new TimiException(TimiCode.ARG_BAD).msgKey("获取文件输入流失败");
+ throw new TimiException(TimiCode.ARG_BAD, "获取文件输入流失败");
}
} else {
log.error("request submit request size: {}, receive request size: {}", file.getLength(), file.getFile().getSize());
- throw new TimiException(TimiCode.ERROR).msgKey("不完整上传文件,已忽略");
+ throw new TimiException(TimiCode.ERROR, "不完整上传文件,已忽略");
}
}
diff --git a/src/main/java/com/imyeyu/api/modules/system/task/async/FileMoveAsyncTask.java b/src/main/java/com/imyeyu/api/modules/system/task/async/FileMoveAsyncTask.java
index dfa07f4..51d7004 100644
--- a/src/main/java/com/imyeyu/api/modules/system/task/async/FileMoveAsyncTask.java
+++ b/src/main/java/com/imyeyu/api/modules/system/task/async/FileMoveAsyncTask.java
@@ -63,7 +63,7 @@ public class FileMoveAsyncTask extends AbstractAsyncTask {
File toFile = new File(IO.fitPath(to) + item.getValue());
IO.dir(toFile.getParent());
if (!item.getKey().renameTo(toFile)) {
- throw new TimiException(TimiCode.ERROR).msgKey("移动失败:" + item.getKey().getAbsolutePath() + " -> " + toFile.getAbsolutePath());
+ throw new TimiException(TimiCode.ERROR, "移动失败:" + item.getKey().getAbsolutePath() + " -> " + toFile.getAbsolutePath());
}
}
diff --git a/src/main/java/com/imyeyu/api/modules/system/util/DockerEngineClient.java b/src/main/java/com/imyeyu/api/modules/system/util/DockerEngineClient.java
index 291b578..abd9c34 100644
--- a/src/main/java/com/imyeyu/api/modules/system/util/DockerEngineClient.java
+++ b/src/main/java/com/imyeyu/api/modules/system/util/DockerEngineClient.java
@@ -67,10 +67,10 @@ public class DockerEngineClient {
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
log.error("docker engine request interrupted: {}", requestPath, e);
- throw new TimiException(TimiCode.ERROR).msgKey("TODO docker engine request interrupted");
+ throw new TimiException(TimiCode.ERROR, "TODO docker engine request interrupted");
} catch (IOException e) {
log.error("docker engine request error: {}", requestPath, e);
- throw new TimiException(TimiCode.ERROR).msgKey("TODO docker engine request error");
+ throw new TimiException(TimiCode.ERROR, "TODO docker engine request error");
}
}
diff --git a/src/main/java/com/imyeyu/api/modules/system/util/SystemAPIInterceptor.java b/src/main/java/com/imyeyu/api/modules/system/util/SystemAPIInterceptor.java
index b1cadf0..d04e1ad 100644
--- a/src/main/java/com/imyeyu/api/modules/system/util/SystemAPIInterceptor.java
+++ b/src/main/java/com/imyeyu/api/modules/system/util/SystemAPIInterceptor.java
@@ -53,7 +53,7 @@ public class SystemAPIInterceptor implements HandlerInterceptor {
// TimiSpring.setRequestAttr(HIGH_AUTHORITY, keyMap.get(key));
// return true;
// }
-// throw new TimiException(TimiCode.PERMISSION_ERROR).msgKey("TODO invalid key");
+// throw new TimiException(TimiCode.PERMISSION_ERROR, "TODO invalid key");
return true;
}
diff --git a/src/main/java/com/imyeyu/api/modules/system/util/UpsStatusClient.java b/src/main/java/com/imyeyu/api/modules/system/util/UpsStatusClient.java
index afb8626..ad6250b 100644
--- a/src/main/java/com/imyeyu/api/modules/system/util/UpsStatusClient.java
+++ b/src/main/java/com/imyeyu/api/modules/system/util/UpsStatusClient.java
@@ -43,14 +43,14 @@ public class UpsStatusClient {
public JsonNode getStatusJson() {
if (statusUrl == null || statusUrl.isBlank()) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("缺少配置:ups.status-url");
+ throw new TimiException(TimiCode.ARG_MISS, "缺少配置:ups.status-url");
}
try {
String response = CommonRequest.post(statusUrl).bodyEntity(ArgMap.of("portName", "USBusbdev3").toEntity()).asString();
return jackson.readTree(response);
} catch (IOException e) {
log.error("request ups status error: {}", statusUrl, e);
- throw new TimiException(TimiCode.ERROR).msgKey("UPS 状态请求失败");
+ throw new TimiException(TimiCode.ERROR, "UPS 状态请求失败");
}
}
diff --git a/src/main/java/com/imyeyu/api/modules/user/service/implement/PermissionCheckerImplement.java b/src/main/java/com/imyeyu/api/modules/user/service/implement/PermissionCheckerImplement.java
index a975026..fd6427c 100644
--- a/src/main/java/com/imyeyu/api/modules/user/service/implement/PermissionCheckerImplement.java
+++ b/src/main/java/com/imyeyu/api/modules/user/service/implement/PermissionCheckerImplement.java
@@ -53,7 +53,7 @@ public class PermissionCheckerImplement implements PermissionChecker {
public void checkAll(ModuleCode moduleCode, String... permissionCodeList) {
if (!hasAll(moduleCode, permissionCodeList)) {
String codeList = buildPermissionKeys(moduleCode, permissionCodeList).toString();
- throw new TimiException(TimiCode.PERMISSION_ERROR).msgKey("权限不足:%s".formatted(codeList));
+ throw new TimiException(TimiCode.PERMISSION_ERROR, "权限不足:%s".formatted(codeList));
}
}
@@ -61,7 +61,7 @@ public class PermissionCheckerImplement implements PermissionChecker {
public void checkAny(ModuleCode moduleCode, String... permissionCodeList) {
if (!hasAny(moduleCode, permissionCodeList)) {
String codeList = buildPermissionKeys(moduleCode, permissionCodeList).toString();
- throw new TimiException(TimiCode.PERMISSION_ERROR).msgKey("权限不足:%s".formatted(codeList));
+ throw new TimiException(TimiCode.PERMISSION_ERROR, "权限不足:%s".formatted(codeList));
}
}
diff --git a/src/main/java/com/imyeyu/api/modules/user/service/implement/PermissionServiceImplement.java b/src/main/java/com/imyeyu/api/modules/user/service/implement/PermissionServiceImplement.java
index cfc1922..a80a34f 100644
--- a/src/main/java/com/imyeyu/api/modules/user/service/implement/PermissionServiceImplement.java
+++ b/src/main/java/com/imyeyu/api/modules/user/service/implement/PermissionServiceImplement.java
@@ -8,8 +8,8 @@ import com.imyeyu.api.modules.user.mapper.PermissionMapper;
import com.imyeyu.api.modules.user.mapper.RolePermissionMapper;
import com.imyeyu.api.modules.user.service.PermissionService;
import com.imyeyu.api.modules.user.vo.permission.BatchCreateReq;
-import com.imyeyu.api.util.RedisMultilingual;
import com.imyeyu.java.TimiJava;
+import com.imyeyu.lang.message.MessageResolver;
import com.imyeyu.spring.TimiSpring;
import com.imyeyu.spring.mapper.BaseMapper;
import com.imyeyu.spring.service.AbstractEntityService;
@@ -35,7 +35,7 @@ public class PermissionServiceImplement extends AbstractEntityService mapper() {
@@ -61,7 +61,7 @@ public class PermissionServiceImplement extends AbstractEntityService im
TimiException.required(req, "not found req");
TimiException.required(req.getUserId(), "not found req.userId");
if (req.getModuleCode() == null) {
- throw new TimiException(TimiCode.ARG_MISS).msgKey("moduleCode");
+ throw new TimiException(TimiCode.ARG_MISS, "moduleCode");
}
List bindingList = userRoleService.listByUserId(req.getUserId());
List bindingRoleIdList = bindingList.stream().map(UserRole::getRoleId).toList();
diff --git a/src/main/java/com/imyeyu/api/util/CaptchaManager.java b/src/main/java/com/imyeyu/api/util/CaptchaManager.java
index 152b27a..7cc8281 100644
--- a/src/main/java/com/imyeyu/api/util/CaptchaManager.java
+++ b/src/main/java/com/imyeyu/api/util/CaptchaManager.java
@@ -200,10 +200,10 @@ public class CaptchaManager {
String cacheKey = CACHE_KEY.formatted(uniqueId);
String cacheValue = redisCaptcha.get(cacheKey);
if (TimiJava.isEmpty(cacheValue)) {
- throw new TimiException(TimiCode.ARG_EXPIRED).msgKey("captcha.expire");
+ throw new TimiException(TimiCode.ARG_EXPIRED, "captcha.expire");
}
if (!value.trim().equalsIgnoreCase(cacheValue)) {
- throw new TimiException(TimiCode.RESULT_BAD).msgKey("captcha.error");
+ throw new TimiException(TimiCode.RESULT_BAD, "captcha.error");
}
// 清除缓存
redisCaptcha.destroy(cacheKey);
diff --git a/src/main/java/com/imyeyu/api/util/InitApplication.java b/src/main/java/com/imyeyu/api/util/InitApplication.java
index ce08ece..a4e92fe 100644
--- a/src/main/java/com/imyeyu/api/util/InitApplication.java
+++ b/src/main/java/com/imyeyu/api/util/InitApplication.java
@@ -1,9 +1,6 @@
package com.imyeyu.api.util;
import com.imyeyu.api.modules.common.service.SettingService;
-import com.imyeyu.lang.mapper.AbstractLanguageMapper;
-import com.imyeyu.spring.TimiSpring;
-import com.imyeyu.spring.util.GlobalReturnHandler;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.jgit.api.ArchiveCommand;
@@ -42,20 +39,11 @@ public class InitApplication implements ApplicationRunner {
private String devLang;
private final SettingService settingService;
- private final RedisMultilingual redisMultilingual;
- private final GlobalReturnHandler globalReturnHandler;
private void initGitCommand() {
ArchiveCommand.registerFormat("tar.gz", new TarFormat());
}
- private void initMultilingual() {
- globalReturnHandler.setMultilingualHeader(mapping -> {
- AbstractLanguageMapper map = redisMultilingual.map(TimiSpring.getLanguage());
- return map.textArgs(mapping.getMsgKey(), mapping.getMsgArgs());
- });
- }
-
@Override
public void run(ApplicationArguments args) throws Exception {
Method[] methods = getClass().getDeclaredMethods();
diff --git a/src/main/java/com/imyeyu/api/util/RedisLanguage.java b/src/main/java/com/imyeyu/api/util/RedisLanguage.java
deleted file mode 100644
index 51aadd9..0000000
--- a/src/main/java/com/imyeyu/api/util/RedisLanguage.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.imyeyu.api.util;
-
-import com.imyeyu.api.TimiServerAPI;
-import com.imyeyu.api.modules.common.service.MultilingualService;
-import com.imyeyu.java.bean.Language;
-import com.imyeyu.lang.mapper.AbstractLanguageMapper;
-import com.imyeyu.utils.StringInterpolator;
-import org.jcodec.api.NotSupportedException;
-
-import java.util.Map;
-
-/**
- * @author 夜雨
- * @version 2024-04-03 11:01
- */
-public class RedisLanguage extends AbstractLanguageMapper {
-
- private static final StringInterpolator INTERPOLATOR = new StringInterpolator(StringInterpolator.SIMPLE_OBJ);
-
- public RedisLanguage(Language.Enum language) {
- super(language);
- }
-
- @Override
- public void add(String id, String value) {
- throw new NotSupportedException("not supported to add value, MultilingualService will auto cache when not found value");
- }
-
- @Override
- public boolean has(String id) {
- return text(id).equals(id);
- }
-
- @Override
- public String text(String id) {
- return TimiServerAPI.applicationContext.getBean(MultilingualService.class).get(id).getValue(language);
- }
-
- @Override
- public String textArgs(String id, Map args) {
- return INTERPOLATOR.inject(text(id), args);
- }
-}
diff --git a/src/main/java/com/imyeyu/api/util/RedisMessageResolver.java b/src/main/java/com/imyeyu/api/util/RedisMessageResolver.java
new file mode 100644
index 0000000..f3a7c87
--- /dev/null
+++ b/src/main/java/com/imyeyu/api/util/RedisMessageResolver.java
@@ -0,0 +1,44 @@
+package com.imyeyu.api.util;
+
+import com.imyeyu.api.modules.common.entity.Multilingual;
+import com.imyeyu.api.modules.common.service.MultilingualService;
+import com.imyeyu.java.TimiJava;
+import com.imyeyu.java.bean.Language;
+import com.imyeyu.lang.message.MessageResolver;
+import com.imyeyu.utils.StringInterpolator;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * Redis 消息解析器
+ *
+ * @author 夜雨
+ * @since 2026-08-01 00:00
+ */
+@Component
+@RequiredArgsConstructor
+public class RedisMessageResolver implements MessageResolver {
+
+ private static final StringInterpolator INTERPOLATOR = new StringInterpolator(StringInterpolator.SIMPLE_OBJ);
+
+ private final MultilingualService multilingualService;
+
+ @Override
+ public String resolve(String messageCode, Map messageArgs, Language.Enum language) {
+ if (TimiJava.isEmpty(messageCode)) {
+ return "";
+ }
+ Language.Enum actualLanguage = language == null ? Language.Enum.zh_CN : language;
+ Multilingual multilingual = multilingualService.get(messageCode);
+ if (multilingual == null) {
+ return INTERPOLATOR.inject(messageCode, messageArgs);
+ }
+ String template = multilingual.getValue(actualLanguage);
+ if (TimiJava.isEmpty(template)) {
+ return INTERPOLATOR.inject(messageCode, messageArgs);
+ }
+ return INTERPOLATOR.inject(template, messageArgs);
+ }
+}
diff --git a/src/main/java/com/imyeyu/api/util/RedisMultilingual.java b/src/main/java/com/imyeyu/api/util/RedisMultilingual.java
deleted file mode 100644
index 731f905..0000000
--- a/src/main/java/com/imyeyu/api/util/RedisMultilingual.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.imyeyu.api.util;
-
-import com.imyeyu.java.bean.Language;
-import com.imyeyu.lang.multi.Multilingual;
-import jakarta.annotation.PostConstruct;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Component;
-
-/**
- * @author 夜雨
- * @version 2024-04-03 11:15
- */
-@Component
-@RequiredArgsConstructor
-public class RedisMultilingual extends Multilingual {
-
- @PostConstruct
- private void postConstruct() {
- Language.Enum[] languages = Language.Enum.values();
- for (Language.Enum language : languages) {
- add(language, new RedisLanguage(language));
- }
- }
-}
diff --git a/src/main/resources/db/migration/timiserver/V17__add_gao_customer_active_name_unique_index.sql b/src/main/resources/db/migration/timiserver/V17__add_gao_customer_active_name_unique_index.sql
new file mode 100644
index 0000000..0afe384
--- /dev/null
+++ b/src/main/resources/db/migration/timiserver/V17__add_gao_customer_active_name_unique_index.sql
@@ -0,0 +1,5 @@
+ALTER TABLE `gao_customer`
+ ADD COLUMN `active_name` VARCHAR(64) GENERATED ALWAYS AS (
+ CASE WHEN `deleted_at` IS NULL THEN NULLIF(TRIM(`name`), '') ELSE NULL END
+ ) STORED COMMENT '未删除客户姓名' INVISIBLE,
+ ADD UNIQUE KEY `uk_gao_customer_active_name` (`active_name`);