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`);