From 46d74b1dcf5114f1c68d44c97b0945cf2e3b2226 Mon Sep 17 00:00:00 2001 From: lizw-2015 <1183409807@qq.com> Date: Mon, 30 Jun 2025 11:32:16 +0800 Subject: [PATCH 1/3] =?UTF-8?q?refactor(servo):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E5=92=8C=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 注释掉 rcsService 的初始化方法 - 优化 multipartConfigElement 方法的代码格式 - 设置全局异常处理器,默认返回详细的错误信息 --- .../workbench/autoconfigure/AppAutoConfiguration.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/servo/src/main/java/com/yvan/workbench/autoconfigure/AppAutoConfiguration.java b/servo/src/main/java/com/yvan/workbench/autoconfigure/AppAutoConfiguration.java index 4d5cb8e..d7a3749 100644 --- a/servo/src/main/java/com/yvan/workbench/autoconfigure/AppAutoConfiguration.java +++ b/servo/src/main/java/com/yvan/workbench/autoconfigure/AppAutoConfiguration.java @@ -17,8 +17,10 @@ import org.clever.core.AppBasicsConfig; import org.clever.core.AppContextHolder; import org.clever.core.Assert; import org.clever.core.ResourcePathUtils; +import org.clever.core.exception.ExceptionUtils; import org.clever.core.json.jackson.JacksonConfig; import org.clever.core.mapper.JacksonMapper; +import org.clever.core.model.response.ErrorResponse; import org.clever.core.reflection.ReflectionsUtils; import org.clever.core.task.StartupTaskBootstrap; import org.clever.data.jdbc.JdbcBootstrap; @@ -33,6 +35,7 @@ import org.clever.web.config.HttpConfig; import org.clever.web.config.WebConfig; import org.clever.web.filter.*; import org.clever.web.utils.ApplyWebConfig; +import org.clever.web.utils.GlobalExceptionHandler; import org.springframework.boot.autoconfigure.AutoConfigureOrder; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -122,10 +125,10 @@ public class AppAutoConfiguration { public MultipartConfigElement multipartConfigElement(AppBasicsConfig appBasicsConfig, WebConfig webConfig) { HttpConfig.Multipart multipart = webConfig.getHttp().getMultipart(); return new MultipartConfigElement( - ResourcePathUtils.getAbsolutePath(appBasicsConfig.getRootPath(), multipart.getLocation()), - multipart.getMaxFileSize().toBytes(), - multipart.getMaxTotalRequestSize().toBytes(), - (int) multipart.getMaxInMemoryFileSize().toBytes() + ResourcePathUtils.getAbsolutePath(appBasicsConfig.getRootPath(), multipart.getLocation()), + multipart.getMaxFileSize().toBytes(), + multipart.getMaxTotalRequestSize().toBytes(), + (int) multipart.getMaxInMemoryFileSize().toBytes() ); } @@ -193,6 +196,11 @@ public class AppAutoConfiguration { @Bean public FilterRegistrationBean exceptionHandlerFilter() { + GlobalExceptionHandler.setDefaultHandler((exception, request, response) -> { + ErrorResponse res = GlobalExceptionHandler.newErrorResponse(request, exception); + res.setError(ExceptionUtils.getStackTraceAsString(exception)); + return res; + }); FilterRegistrationBean filterBean = new FilterRegistrationBean<>(); filterBean.setOrder(Ordered.HIGHEST_PRECEDENCE + 300); filterBean.addUrlPatterns(PathConstants.ALL); From a70af6708cdd9ebeeaf58fd71073f710aa6a14ca Mon Sep 17 00:00:00 2001 From: lizw-2015 <1183409807@qq.com> Date: Mon, 30 Jun 2025 13:42:28 +0800 Subject: [PATCH 2/3] =?UTF-8?q?refactor(yvan-lcc-bench):=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=20RCSService=20=E5=88=9D=E5=A7=8B=E5=8C=96=E5=92=8C?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 注释掉 RCSService 的 init 方法调用 - 清空 GlobalExceptionHandler 中的自定义异常处理器- 在异常处理中添加异常信息的输出 --- .../java/com/yvan/workbench/autoconfigure/AppAutoConfiguration.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/servo/src/main/java/com/yvan/workbench/autoconfigure/AppAutoConfiguration.java b/servo/src/main/java/com/yvan/workbench/autoconfigure/AppAutoConfiguration.java index d7a3749..9845384 100644 --- a/servo/src/main/java/com/yvan/workbench/autoconfigure/AppAutoConfiguration.java +++ b/servo/src/main/java/com/yvan/workbench/autoconfigure/AppAutoConfiguration.java @@ -196,8 +196,10 @@ public class AppAutoConfiguration { @Bean public FilterRegistrationBean exceptionHandlerFilter() { + GlobalExceptionHandler.clearHandler(); GlobalExceptionHandler.setDefaultHandler((exception, request, response) -> { ErrorResponse res = GlobalExceptionHandler.newErrorResponse(request, exception); + res.setMessage(exception.getMessage()); res.setError(ExceptionUtils.getStackTraceAsString(exception)); return res; }); From 1007f18efe460509374d2ae84e090a9538c1cb4b Mon Sep 17 00:00:00 2001 From: lizw-2015 <1183409807@qq.com> Date: Mon, 30 Jun 2025 14:04:51 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat(user):=20=E6=96=B0=E5=A2=9E=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加角色查询、新增、编辑和删除功能 - 实现角色信息的分页查询和动态加载 - 优化用户界面,增加角色管理相关按钮和对话框 - 新增角色请求模型类 --- .../yvan/workbench/controller/UserPermissions.java | 53 +++++++++++++++++++--- .../yvan/workbench/model/request/AddRoleReq.java | 22 +++++++++ .../yvan/workbench/model/request/QueryRoleReq.java | 15 ++++++ .../workbench/model/request/UpdateRoleReq.java | 25 ++++++++++ 4 files changed, 108 insertions(+), 7 deletions(-) create mode 100644 servo/src/main/java/com/yvan/workbench/model/request/AddRoleReq.java create mode 100644 servo/src/main/java/com/yvan/workbench/model/request/QueryRoleReq.java create mode 100644 servo/src/main/java/com/yvan/workbench/model/request/UpdateRoleReq.java diff --git a/servo/src/main/java/com/yvan/workbench/controller/UserPermissions.java b/servo/src/main/java/com/yvan/workbench/controller/UserPermissions.java index c805350..bfb089a 100644 --- a/servo/src/main/java/com/yvan/workbench/controller/UserPermissions.java +++ b/servo/src/main/java/com/yvan/workbench/controller/UserPermissions.java @@ -1,22 +1,20 @@ package com.yvan.workbench.controller; import com.querydsl.sql.SQLQuery; -import com.yvan.workbench.model.request.AddUserReq; -import com.yvan.workbench.model.request.QueryUserReq; -import com.yvan.workbench.model.request.UpdateUserReq; +import com.yvan.workbench.model.request.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.clever.core.Assert; import org.clever.core.Conv; import org.clever.core.id.SnowFlake; import org.clever.core.mapper.BeanCopyUtils; -import org.clever.core.mapper.JacksonMapper; import org.clever.core.model.request.QueryByPage; import org.clever.core.model.response.R; import org.clever.data.jdbc.DaoFactory; import org.clever.data.jdbc.QueryDSL; import org.clever.data.jdbc.querydsl.utils.QueryDslUtils; import org.clever.security.SecurityContextHolder; +import org.clever.security.impl.model.entity.SysRole; import org.clever.security.impl.model.entity.SysUser; import org.clever.security.model.SecurityContext; import org.clever.web.mvc.annotation.RequestBody; @@ -27,6 +25,7 @@ import org.clever.web.mvc.annotation.Validated; import java.util.Map; import java.util.Objects; +import static org.clever.security.impl.model.query.QSysRole.sysRole; import static org.clever.security.impl.model.query.QSysUser.sysUser; /** @@ -46,9 +45,7 @@ public class UserPermissions { if (req.getIsEnable() != null) { query.where(sysUser.isEnable.eq(req.getIsEnable())); } - Object res = QueryDslUtils.queryByPage(query, queryByPage); - log.info("--> {}", JacksonMapper.getInstance().toJson(res)); - return res; + return QueryDslUtils.queryByPage(query, queryByPage); } @Transactional @@ -84,4 +81,46 @@ public class UserPermissions { QUERY_DSL.delete(sysUser).where(sysUser.id.eq(id)).execute(); return R.success(); } + + public static Object queryRole(QueryRoleReq req) { + QueryByPage queryByPage = QueryByPage.getCurrent(); + SQLQuery query = QUERY_DSL.selectFrom(sysRole); + if (StringUtils.isNotBlank(req.getRoleCode())) { + query.where(sysRole.roleCode.eq(req.getRoleCode().trim())); + } + if (req.getIsEnable() != null) { + query.where(sysRole.isEnable.eq(req.getIsEnable())); + } + return QueryDslUtils.queryByPage(query, queryByPage); + } + + @Transactional + public static R addRole(@RequestBody @Validated AddRoleReq req) { + SecurityContext securityContext = SecurityContextHolder.getContext(); + long count = QUERY_DSL.selectFrom(sysRole).where(sysRole.roleCode.eq(req.getRoleCode())).fetchCount(); + Assert.isTrue(count <= 0, "角色编号已经存在:" + req.getRoleCode()); + SysRole role = BeanCopyUtils.mapper(SysRole.class, req); + role.setId(SnowFlake.SNOW_FLAKE.nextId()); + role.setCreateBy(securityContext.getUserInfo().getUserId()); + QUERY_DSL.insert(sysRole).populate(role).execute(); + return R.success(); + } + + @Transactional + public static R updateRole(@RequestBody @Validated UpdateRoleReq req) { + SecurityContext securityContext = SecurityContextHolder.getContext(); + SysRole oldRole = QUERY_DSL.selectFrom(sysRole).where(sysRole.roleCode.eq(req.getRoleCode())).fetchOne(); + Assert.notNull(oldRole, "角色不存在:" + req.getRoleCode()); + SysRole role = BeanCopyUtils.mapper(SysRole.class, req); + role.setUpdateBy(securityContext.getUserInfo().getUserId()); + QUERY_DSL.update(sysRole).populate(role).where(sysRole.id.eq(oldRole.getId())).execute(); + return R.success(); + } + + @Transactional + public static R delRole(@RequestParam Map req) { + long id = Conv.asLong(req.get("id")); + QUERY_DSL.delete(sysRole).where(sysRole.id.eq(id)).execute(); + return R.success(); + } } diff --git a/servo/src/main/java/com/yvan/workbench/model/request/AddRoleReq.java b/servo/src/main/java/com/yvan/workbench/model/request/AddRoleReq.java new file mode 100644 index 0000000..f3ebcde --- /dev/null +++ b/servo/src/main/java/com/yvan/workbench/model/request/AddRoleReq.java @@ -0,0 +1,22 @@ +package com.yvan.workbench.model.request; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * 作者:lizw
+ * 创建时间:2025/06/30 13:52
+ */ +@Data +public class AddRoleReq { + /** 角色编号 */ + @NotBlank + private String roleCode; + /** 角色名称 */ + @NotBlank + private String roleName; + /** 是否启用: 0:禁用,1:启用 */ + @NotNull + private Integer isEnable; +} diff --git a/servo/src/main/java/com/yvan/workbench/model/request/QueryRoleReq.java b/servo/src/main/java/com/yvan/workbench/model/request/QueryRoleReq.java new file mode 100644 index 0000000..1ae3492 --- /dev/null +++ b/servo/src/main/java/com/yvan/workbench/model/request/QueryRoleReq.java @@ -0,0 +1,15 @@ +package com.yvan.workbench.model.request; + +import lombok.Data; + +/** + * 作者:lizw
+ * 创建时间:2025/06/27 17:59
+ */ +@Data +public class QueryRoleReq { + /** 角色编号 */ + private String roleCode; + /** 是否启用: 0:禁用,1:启用 */ + private Integer isEnable; +} diff --git a/servo/src/main/java/com/yvan/workbench/model/request/UpdateRoleReq.java b/servo/src/main/java/com/yvan/workbench/model/request/UpdateRoleReq.java new file mode 100644 index 0000000..9564d9e --- /dev/null +++ b/servo/src/main/java/com/yvan/workbench/model/request/UpdateRoleReq.java @@ -0,0 +1,25 @@ +package com.yvan.workbench.model.request; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +/** + * 作者:lizw
+ * 创建时间:2025/06/30 13:57
+ */ +@Data +public class UpdateRoleReq { + /** + * 角色编号 + */ + @NotBlank + private String roleCode; + /** + * 角色名称 + */ + private String roleName; + /** + * 是否启用: 0:禁用,1:启用 + */ + private Integer isEnable; +}