From d35a24e6db76e4e083b90f28b6a1e83b065d0414 Mon Sep 17 00:00:00 2001 From: GPU is all you need <2778335106@qq.com> Date: Sat, 21 May 2022 19:12:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90User,Role?= =?UTF-8?q?=E7=9A=84=E5=BC=80=E5=8F=91=EF=BC=8C=E5=88=A0=E9=99=A4=E4=BA=86?= =?UTF-8?q?=E4=BB=A5=E5=89=8D=E5=8A=A0=E5=85=A5=E7=9A=84=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E4=BB=A3=E7=A0=81=EF=BC=8C=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E4=BA=86=E4=B8=80=E4=BA=9B=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../edu/ncst/award/common/annotation/Log.java | 41 ++++ .../common/annotation/enums/BusinessType.java | 58 +++++ .../common/annotation/enums/OperatorType.java | 23 ++ .../core/controller/BaseController.java | 10 +- .../common/util/treeUtils/TreeNodeConfig.java | 75 ++++++ .../common/util/treeUtils/TreeNodeMap.java | 65 ++++++ .../CustomAccessDeniedHandler.java | 2 +- .../CustomDelegatingPasswordEncoder.java | 4 +- .../config/security/CustomUserCache.java | 14 +- .../{ => security}/DataBaseUrlVoter.java | 7 +- .../config/{ => security}/SecurityConfig.java | 10 +- .../security/filter/AuthCheckFilter.java | 28 +-- .../config/security/filter/LoginFilter.java | 102 ++++---- .../token/JwtAuthenticationToken.java | 2 +- .../edu/ncst/award/config/swaggerConfig.java | 43 ++++ .../award/controller/CaptchaController.java | 5 +- .../award/controller/LoginController.java | 86 +++++++ .../ncst/award/controller/MenuController.java | 20 +- .../award/controller/ProjectController.java | 38 --- .../ncst/award/controller/RoleController.java | 164 +++++++++++-- .../ncst/award/controller/UserController.java | 79 ++++--- .../dict/DictCountryController.java | 36 --- .../dict/DictEvaluateLevelController.java | 36 --- .../controller/dict/DictNationController.java | 18 -- .../dict/DictRecommendLevelController.java | 18 -- .../dict/DictRewardsTypeController.java | 18 -- .../dict/DictSecretLevelController.java | 18 -- .../java/edu/ncst/award/domain/UserRole.java | 34 +++ .../award/{ => domain}/vo/ListResultVO.java | 2 +- .../edu/ncst/award/{ => domain}/vo/Query.java | 2 +- .../main/java/edu/ncst/award/domain/vo/R.java | 79 +++++++ .../ncst/award/{ => domain}/vo/RouterVo.java | 2 +- .../ncst/award/{ => domain}/vo/Sorter.java | 2 +- .../{ => domain}/vo/param/CurrentUserDTO.java | 2 +- .../{ => domain}/vo/param/ResetMenuDTO.java | 2 +- .../{ => domain}/vo/param/UserLoginDTO.java | 5 +- .../vo/param/query/LoginLogQuery.java | 6 +- .../vo/param/query/PageQuery.java | 2 +- .../vo/param/query/UserQuery.java | 2 +- .../{ => domain}/vo/result/UserInfoVO.java | 2 +- .../award/framework/aspectj/LogAspect.java | 30 +++ .../award/mapper/{system => }/MenuMapper.java | 3 +- .../mapper/{system => }/ResourceMapper.java | 3 +- .../SysRoleMapper.java => RoleMapper.java} | 9 +- .../award/mapper/{system => }/UserMapper.java | 32 ++- .../edu/ncst/award/mapper/UserRoleMapper.java | 8 + .../award/mapper/dict/DictCountryMapper.java | 16 -- .../mapper/dict/DictEvaluateLevelMapper.java | 16 -- .../award/mapper/dict/DictNationMapper.java | 16 -- .../mapper/dict/DictRecommendLevelMapper.java | 16 -- .../mapper/dict/DictRewardsTypeMapper.java | 16 -- .../mapper/dict/DictSecretLevelMapper.java | 16 -- .../award/mapper/system/ProjectMapper.java | 17 -- .../ncst/award/model/dict/DictCountry.java | 53 ----- .../award/model/dict/DictEvaluateLevel.java | 53 ----- .../edu/ncst/award/model/dict/DictNation.java | 53 ----- .../award/model/dict/DictRecommendLevel.java | 53 ----- .../award/model/dict/DictRewardsType.java | 53 ----- .../award/model/dict/DictSecretLevel.java | 53 ----- .../edu/ncst/award/model/log/LoginLog.java | 2 +- .../edu/ncst/award/model/project/Project.java | 210 ----------------- .../edu/ncst/award/model/system/User.java | 12 + .../edu/ncst/award/service/IDictCountry.java | 16 -- .../award/service/IDictEvaluateLevel.java | 16 -- .../edu/ncst/award/service/IDictNation.java | 16 -- .../ncst/award/service/IDictRewardsType.java | 16 -- .../ncst/award/service/IDictSecretLevel.java | 16 -- .../ncst/award/service/ILoginLogService.java | 5 +- .../edu/ncst/award/service/IMenuService.java | 5 +- .../ncst/award/service/IProjectService.java | 7 - .../ncst/award/service/IResourceService.java | 4 +- .../edu/ncst/award/service/IRoleService.java | 114 +++++++++ .../ncst/award/service/ISysRoleService.java | 39 ---- .../edu/ncst/award/service/IUserService.java | 41 +++- .../service/impl/dict/DictCountryImpl.java | 22 -- .../impl/dict/DictEvaluateLevelImpl.java | 21 -- .../service/impl/dict/DictNationImpl.java | 21 -- .../impl/dict/DictRewardsTypeImpl.java | 21 -- .../impl/dict/DictSecretLevelImpl.java | 21 -- .../service/impl/log/LoginLogServiceImpl.java | 13 +- .../impl/project/ProjectServiceImpl.java | 14 -- .../service/impl/system/MenuServiceImpl.java | 6 +- .../impl/system/ResourceServiceImpl.java | 6 +- .../service/impl/system/RoleServiceImpl.java | 220 ++++++++++++++++++ .../impl/system/SysRoleServiceImpl.java | 59 ----- .../service/impl/system/UserServiceImpl.java | 116 +++++++-- .../edu/ncst/award/utils/ResponseUtils.java | 26 +-- .../edu/ncst/award/utils/ResultUtils.java | 84 ------- .../edu/ncst/award/utils/SessionUtils.java | 2 +- .../main/java/edu/ncst/award/vo/ResultVO.java | 19 -- awardBE/src/main/resources/application.yml | 12 +- .../src/main/resources/mapper/MenuMapper.xml | 2 +- ...sResourceMapper.xml => ResourceMapper.xml} | 2 +- .../{SysRoleMapper.xml => RoleMapper.xml} | 12 +- .../src/main/resources/mapper/UserMapper.xml | 34 ++- .../award/RewardsApplyApplicationTests.java | 13 -- .../java/edu/ncst/award/TestRoleService.java | 24 +- .../java/edu/ncst/award/TestUserService.java | 11 + awardFE/config/routes.ts | 6 +- awardFE/mock/listTableList.ts | 59 ++--- awardFE/mock/user.ts | 131 +++++++++++ .../src/pages/login/components/UpdateForm.tsx | 6 +- .../components/BaseInfo/index.tsx | 20 +- .../pages/sysAdmin/components/UpdateForm.tsx | 2 +- .../src/services/ant-design-pro/typings.d.ts | 17 ++ 105 files changed, 1670 insertions(+), 1549 deletions(-) create mode 100644 awardBE/src/main/java/edu/ncst/award/common/annotation/Log.java create mode 100644 awardBE/src/main/java/edu/ncst/award/common/annotation/enums/BusinessType.java create mode 100644 awardBE/src/main/java/edu/ncst/award/common/annotation/enums/OperatorType.java create mode 100644 awardBE/src/main/java/edu/ncst/award/common/util/treeUtils/TreeNodeConfig.java create mode 100644 awardBE/src/main/java/edu/ncst/award/common/util/treeUtils/TreeNodeMap.java rename awardBE/src/main/java/edu/ncst/award/config/{ => security}/CustomAccessDeniedHandler.java (96%) rename awardBE/src/main/java/edu/ncst/award/config/{ => security}/CustomDelegatingPasswordEncoder.java (96%) rename awardBE/src/main/java/edu/ncst/award/config/{ => security}/DataBaseUrlVoter.java (96%) rename awardBE/src/main/java/edu/ncst/award/config/{ => security}/SecurityConfig.java (96%) create mode 100644 awardBE/src/main/java/edu/ncst/award/config/swaggerConfig.java create mode 100644 awardBE/src/main/java/edu/ncst/award/controller/LoginController.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/controller/ProjectController.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/controller/dict/DictCountryController.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/controller/dict/DictEvaluateLevelController.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/controller/dict/DictNationController.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/controller/dict/DictRecommendLevelController.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/controller/dict/DictRewardsTypeController.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/controller/dict/DictSecretLevelController.java create mode 100644 awardBE/src/main/java/edu/ncst/award/domain/UserRole.java rename awardBE/src/main/java/edu/ncst/award/{ => domain}/vo/ListResultVO.java (95%) rename awardBE/src/main/java/edu/ncst/award/{ => domain}/vo/Query.java (97%) create mode 100644 awardBE/src/main/java/edu/ncst/award/domain/vo/R.java rename awardBE/src/main/java/edu/ncst/award/{ => domain}/vo/RouterVo.java (98%) rename awardBE/src/main/java/edu/ncst/award/{ => domain}/vo/Sorter.java (92%) rename awardBE/src/main/java/edu/ncst/award/{ => domain}/vo/param/CurrentUserDTO.java (95%) rename awardBE/src/main/java/edu/ncst/award/{ => domain}/vo/param/ResetMenuDTO.java (79%) rename awardBE/src/main/java/edu/ncst/award/{ => domain}/vo/param/UserLoginDTO.java (86%) rename awardBE/src/main/java/edu/ncst/award/{ => domain}/vo/param/query/LoginLogQuery.java (83%) rename awardBE/src/main/java/edu/ncst/award/{ => domain}/vo/param/query/PageQuery.java (98%) rename awardBE/src/main/java/edu/ncst/award/{ => domain}/vo/param/query/UserQuery.java (86%) rename awardBE/src/main/java/edu/ncst/award/{ => domain}/vo/result/UserInfoVO.java (95%) create mode 100644 awardBE/src/main/java/edu/ncst/award/framework/aspectj/LogAspect.java rename awardBE/src/main/java/edu/ncst/award/mapper/{system => }/MenuMapper.java (95%) rename awardBE/src/main/java/edu/ncst/award/mapper/{system => }/ResourceMapper.java (95%) rename awardBE/src/main/java/edu/ncst/award/mapper/{system/SysRoleMapper.java => RoleMapper.java} (87%) rename awardBE/src/main/java/edu/ncst/award/mapper/{system => }/UserMapper.java (71%) create mode 100644 awardBE/src/main/java/edu/ncst/award/mapper/UserRoleMapper.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/mapper/dict/DictCountryMapper.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/mapper/dict/DictEvaluateLevelMapper.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/mapper/dict/DictNationMapper.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/mapper/dict/DictRecommendLevelMapper.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/mapper/dict/DictRewardsTypeMapper.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/mapper/dict/DictSecretLevelMapper.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/mapper/system/ProjectMapper.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/model/dict/DictCountry.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/model/dict/DictEvaluateLevel.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/model/dict/DictNation.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/model/dict/DictRecommendLevel.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/model/dict/DictRewardsType.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/model/dict/DictSecretLevel.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/model/project/Project.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/service/IDictCountry.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/service/IDictEvaluateLevel.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/service/IDictNation.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/service/IDictRewardsType.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/service/IDictSecretLevel.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/service/IProjectService.java create mode 100644 awardBE/src/main/java/edu/ncst/award/service/IRoleService.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/service/ISysRoleService.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictCountryImpl.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictEvaluateLevelImpl.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictNationImpl.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictRewardsTypeImpl.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictSecretLevelImpl.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/service/impl/project/ProjectServiceImpl.java create mode 100644 awardBE/src/main/java/edu/ncst/award/service/impl/system/RoleServiceImpl.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/service/impl/system/SysRoleServiceImpl.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/utils/ResultUtils.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/vo/ResultVO.java rename awardBE/src/main/resources/mapper/{SysResourceMapper.xml => ResourceMapper.xml} (97%) rename awardBE/src/main/resources/mapper/{SysRoleMapper.xml => RoleMapper.xml} (88%) delete mode 100644 awardBE/src/test/java/edu/ncst/award/RewardsApplyApplicationTests.java diff --git a/awardBE/src/main/java/edu/ncst/award/common/annotation/Log.java b/awardBE/src/main/java/edu/ncst/award/common/annotation/Log.java new file mode 100644 index 0000000..1b5a2e2 --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/common/annotation/Log.java @@ -0,0 +1,41 @@ +package edu.ncst.award.common.annotation; + +import edu.ncst.award.common.annotation.enums.BusinessType; +import edu.ncst.award.common.annotation.enums.OperatorType; + +import java.lang.annotation.*; + +/** + * 自定义操作日志记录注解 + * + * @author ruoyi + */ +@Target({ElementType.PARAMETER, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Log { + /** + * 模块 + */ + String title() default ""; + + /** + * 功能 + */ + BusinessType businessType() default BusinessType.OTHER; + + /** + * 操作人类别 + */ + OperatorType operatorType() default OperatorType.MANAGE; + + /** + * 是否保存请求的参数 + */ + boolean isSaveRequestData() default true; + + /** + * 是否保存响应的参数 + */ + boolean isSaveResponseData() default true; +} diff --git a/awardBE/src/main/java/edu/ncst/award/common/annotation/enums/BusinessType.java b/awardBE/src/main/java/edu/ncst/award/common/annotation/enums/BusinessType.java new file mode 100644 index 0000000..5f0e4a1 --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/common/annotation/enums/BusinessType.java @@ -0,0 +1,58 @@ +package edu.ncst.award.common.annotation.enums; + +/** + * 业务操作类型 + * + * @author ruoyi + */ +public enum BusinessType { + /** + * 其它 + */ + OTHER, + + /** + * 新增 + */ + INSERT, + + /** + * 修改 + */ + UPDATE, + + /** + * 删除 + */ + DELETE, + + /** + * 授权 + */ + GRANT, + + /** + * 导出 + */ + EXPORT, + + /** + * 导入 + */ + IMPORT, + + /** + * 强退 + */ + FORCE, + + /** + * 生成代码 + */ + GENCODE, + + /** + * 清空数据 + */ + CLEAN, +} diff --git a/awardBE/src/main/java/edu/ncst/award/common/annotation/enums/OperatorType.java b/awardBE/src/main/java/edu/ncst/award/common/annotation/enums/OperatorType.java new file mode 100644 index 0000000..2efd67d --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/common/annotation/enums/OperatorType.java @@ -0,0 +1,23 @@ +package edu.ncst.award.common.annotation.enums; + +/** + * 操作人类别 + * + * @author ruoyi + */ +public enum OperatorType { + /** + * 其它 + */ + OTHER, + + /** + * 后台用户 + */ + MANAGE, + + /** + * 手机端用户 + */ + MOBILE +} diff --git a/awardBE/src/main/java/edu/ncst/award/common/core/controller/BaseController.java b/awardBE/src/main/java/edu/ncst/award/common/core/controller/BaseController.java index 2e7a345..56a34bb 100644 --- a/awardBE/src/main/java/edu/ncst/award/common/core/controller/BaseController.java +++ b/awardBE/src/main/java/edu/ncst/award/common/core/controller/BaseController.java @@ -1,7 +1,7 @@ package edu.ncst.award.common.core.controller; import edu.ncst.award.utils.ResultUtils; -import edu.ncst.award.vo.ResultVO; +import edu.ncst.award.domain.vo.R; /** * web层通用数据处理 @@ -16,8 +16,8 @@ public class BaseController { * @param rows 影响行数 * @return 操作结果 */ - protected ResultVO toAjax(int rows) { - return rows > 0 ? ResultUtils.success() : ResultUtils.error(); + protected R toAjax(int rows) { + return rows > 0 ? ResultUtils.ok() : ResultUtils.fail(); } /** @@ -26,8 +26,8 @@ public class BaseController { * @param result 结果 * @return 操作结果 */ - protected ResultVO toAjax(boolean result) { - return result ? ResultUtils.success() : ResultUtils.error(); + protected R toAjax(boolean result) { + return result ? ResultUtils.ok() : ResultUtils.fail(); } } diff --git a/awardBE/src/main/java/edu/ncst/award/common/util/treeUtils/TreeNodeConfig.java b/awardBE/src/main/java/edu/ncst/award/common/util/treeUtils/TreeNodeConfig.java new file mode 100644 index 0000000..296da08 --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/common/util/treeUtils/TreeNodeConfig.java @@ -0,0 +1,75 @@ +package edu.ncst.award.common.util.treeUtils; + +import cn.hutool.core.util.ObjectUtil; + +public class TreeNodeConfig { + + // 默认属性的单例对象 + private static final TreeNodeConfig DEFAULT_CONFIG = new TreeNodeConfig(); + + // 树节点默认常量属性 + static final String TREE_ID = "id"; + static final String TREE_NAME = "name"; + static final String TREE_CODE = "code"; + static final String TREE_CHILDREN = "children"; + static final String TREE_PARENT_ID = "parentId"; + + // 属性 + private String idKey; + private String codeKey; + private String nameKey; + private String childrenKey; + private String parentIdKey; + + public String getIdKey() { + return getOrDefault(idKey, TREE_ID); + } + + public void setIdKey(String idKey) { + this.idKey = idKey; + } + + public String getCodeKey() { + return getOrDefault(codeKey, TREE_CODE); + } + + public void setCodeKey(String codeKey) { + this.codeKey = codeKey; + } + + public String getNameKey() { + return getOrDefault(nameKey, TREE_NAME); + } + + public void setNameKey(String nameKey) { + this.nameKey = nameKey; + } + + public String getChildrenKey() { + return getOrDefault(childrenKey, TREE_CHILDREN); + } + + public void setChildrenKey(String childrenKey) { + this.childrenKey = childrenKey; + } + + public String getParentIdKey() { + return getOrDefault(parentIdKey, TREE_PARENT_ID); + } + + public void setParentIdKey(String parentIdKey) { + this.parentIdKey = parentIdKey; + } + + public T getOrDefault(T key, T defaultKey) { + if (ObjectUtil.isNull(key)) { + return defaultKey; + } + return key; + } + + public static TreeNodeConfig getDefaultConfig(){ + return DEFAULT_CONFIG; + } + +} diff --git a/awardBE/src/main/java/edu/ncst/award/common/util/treeUtils/TreeNodeMap.java b/awardBE/src/main/java/edu/ncst/award/common/util/treeUtils/TreeNodeMap.java new file mode 100644 index 0000000..5faa248 --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/common/util/treeUtils/TreeNodeMap.java @@ -0,0 +1,65 @@ +package edu.ncst.award.common.util.treeUtils; + +import java.util.HashMap; +import java.util.List; + +/** + * 泛型还没玩明白 + * 只能这样了 + */ +@SuppressWarnings("unchecked") +public class TreeNodeMap extends HashMap { + + private final TreeNodeConfig treeNodeConfig; + + public TreeNodeMap(){ + this.treeNodeConfig = TreeNodeConfig.getDefaultConfig(); + } + + public TreeNodeMap(TreeNodeConfig treeNodeConfig){ + this.treeNodeConfig = treeNodeConfig; + } + + public T getId() { return (T)super.get(treeNodeConfig.getIdKey()); } + + public void setId(Integer id) { + super.put(treeNodeConfig.getIdKey(), id); + } + + public T getParentId() { + return (T)super.get(treeNodeConfig.getParentIdKey()); + } + + public void setParentId(Integer parentId) { + super.put(treeNodeConfig.getParentIdKey(), parentId); + } + + public T getName() { + return (T)super.get(treeNodeConfig.getNameKey()); + } + + public void setName(String name) { + super.put(treeNodeConfig.getNameKey(), name); + } + + public T getCode() { + return (T)super.get(treeNodeConfig.getCodeKey()); + } + + public TreeNodeMap setCode(String code) { + super.put(treeNodeConfig.getCodeKey(), code); + return this; + } + + public List getChildren() { + return (List)super.get(treeNodeConfig.getChildrenKey()); + } + + public void setChildren(List children) { + super.put(treeNodeConfig.getChildrenKey(),children); + } + + public void extra(String key,Object value){ + super.put(key,value); + } +} \ No newline at end of file diff --git a/awardBE/src/main/java/edu/ncst/award/config/CustomAccessDeniedHandler.java b/awardBE/src/main/java/edu/ncst/award/config/security/CustomAccessDeniedHandler.java similarity index 96% rename from awardBE/src/main/java/edu/ncst/award/config/CustomAccessDeniedHandler.java rename to awardBE/src/main/java/edu/ncst/award/config/security/CustomAccessDeniedHandler.java index ad04f58..3bf0e1c 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/CustomAccessDeniedHandler.java +++ b/awardBE/src/main/java/edu/ncst/award/config/security/CustomAccessDeniedHandler.java @@ -1,4 +1,4 @@ -package edu.ncst.award.config; +package edu.ncst.award.config.security; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/awardBE/src/main/java/edu/ncst/award/config/CustomDelegatingPasswordEncoder.java b/awardBE/src/main/java/edu/ncst/award/config/security/CustomDelegatingPasswordEncoder.java similarity index 96% rename from awardBE/src/main/java/edu/ncst/award/config/CustomDelegatingPasswordEncoder.java rename to awardBE/src/main/java/edu/ncst/award/config/security/CustomDelegatingPasswordEncoder.java index 911aede..37d900a 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/CustomDelegatingPasswordEncoder.java +++ b/awardBE/src/main/java/edu/ncst/award/config/security/CustomDelegatingPasswordEncoder.java @@ -1,13 +1,11 @@ -package edu.ncst.award.config; +package edu.ncst.award.config.security; -import org.springframework.context.annotation.Bean; import org.springframework.security.crypto.argon2.Argon2PasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.DelegatingPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder; import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder; -import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; diff --git a/awardBE/src/main/java/edu/ncst/award/config/security/CustomUserCache.java b/awardBE/src/main/java/edu/ncst/award/config/security/CustomUserCache.java index 247de6b..5baa206 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/security/CustomUserCache.java +++ b/awardBE/src/main/java/edu/ncst/award/config/security/CustomUserCache.java @@ -4,9 +4,10 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import edu.ncst.award.model.system.User; -import edu.ncst.award.utils.StringUtils; +import edu.ncst.award.domain.vo.result.UserInfoVO; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserCache; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; @@ -33,7 +34,7 @@ public class CustomUserCache implements UserCache { UserDetails userDetails = null; try { String userJson = redisCacheTemplate.opsForValue().get(username); - if (!StrUtil.isEmpty(userJson)){ + if (!StrUtil.isEmpty(userJson)) { userDetails = JSONUtil.toBean(userJson, User.class); } log.info("Cache read" + "username: " + username); @@ -79,4 +80,13 @@ public class CustomUserCache implements UserCache { e.printStackTrace(); } } + + public User getLoginUser() { + UserInfoVO userInfoVO = (UserInfoVO) SecurityContextHolder.getContext().getAuthentication().getDetails(); + User currentUser = null; + if (ObjectUtil.isNotNull(userInfoVO) && ObjectUtil.isNull(userInfoVO.getUsername())) { + currentUser = (User) getUserFromCache(userInfoVO.getUsername()); + } + return currentUser; + } } diff --git a/awardBE/src/main/java/edu/ncst/award/config/DataBaseUrlVoter.java b/awardBE/src/main/java/edu/ncst/award/config/security/DataBaseUrlVoter.java similarity index 96% rename from awardBE/src/main/java/edu/ncst/award/config/DataBaseUrlVoter.java rename to awardBE/src/main/java/edu/ncst/award/config/security/DataBaseUrlVoter.java index 3f38965..f27a324 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/DataBaseUrlVoter.java +++ b/awardBE/src/main/java/edu/ncst/award/config/security/DataBaseUrlVoter.java @@ -1,11 +1,10 @@ -package edu.ncst.award.config; +package edu.ncst.award.config.security; import edu.ncst.award.model.system.Resource; import edu.ncst.award.model.system.Role; import edu.ncst.award.service.IResourceService; import edu.ncst.award.utils.URLUtils; -import edu.ncst.award.vo.result.UserInfoVO; -import org.springframework.beans.factory.annotation.Autowired; +import edu.ncst.award.domain.vo.result.UserInfoVO; import org.springframework.security.access.AccessDecisionVoter; import org.springframework.security.access.ConfigAttribute; import org.springframework.security.core.Authentication; @@ -24,7 +23,7 @@ import java.util.stream.Collectors; @Component public class DataBaseUrlVoter implements AccessDecisionVoter { - @Autowired + @javax.annotation.Resource private IResourceService resourceService; @Override diff --git a/awardBE/src/main/java/edu/ncst/award/config/SecurityConfig.java b/awardBE/src/main/java/edu/ncst/award/config/security/SecurityConfig.java similarity index 96% rename from awardBE/src/main/java/edu/ncst/award/config/SecurityConfig.java rename to awardBE/src/main/java/edu/ncst/award/config/security/SecurityConfig.java index 5954f97..06a23ef 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/SecurityConfig.java +++ b/awardBE/src/main/java/edu/ncst/award/config/security/SecurityConfig.java @@ -1,8 +1,6 @@ -package edu.ncst.award.config; +package edu.ncst.award.config.security; -import cn.hutool.extra.spring.SpringUtil; import com.fasterxml.jackson.databind.ObjectMapper; -import edu.ncst.award.config.security.CustomUserCache; import edu.ncst.award.config.security.filter.AuthCheckFilter; import edu.ncst.award.config.security.filter.LoginFilter; import edu.ncst.award.exception.CodeMsg; @@ -13,7 +11,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.cache.RedisCache; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.security.access.AccessDecisionManager; import org.springframework.security.access.AccessDecisionVoter; @@ -29,7 +26,6 @@ import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.core.userdetails.cache.SpringCacheBasedUserCache; import org.springframework.security.web.access.expression.WebExpressionVoter; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; @@ -165,7 +161,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { response.setContentType("application/json;charset=utf-8"); PrintWriter out = response.getWriter(); - out.write(new ObjectMapper().writeValueAsString(ResultUtils.error(CodeMsg.USER_NEED_LOGIN))); + out.write(new ObjectMapper().writeValueAsString(ResultUtils.fail(CodeMsg.USER_NEED_LOGIN))); out.flush(); out.close(); })); @@ -177,7 +173,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .logoutSuccessHandler(((request, response, authentication) -> { PrintWriter out = response.getWriter(); response.setContentType("application/json"); - out.write(new ObjectMapper().writeValueAsString(ResultUtils.success("注销成功"))); + out.write(new ObjectMapper().writeValueAsString(ResultUtils.ok("注销成功"))); out.flush(); out.close(); })); diff --git a/awardBE/src/main/java/edu/ncst/award/config/security/filter/AuthCheckFilter.java b/awardBE/src/main/java/edu/ncst/award/config/security/filter/AuthCheckFilter.java index d04d3d9..8d3cb98 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/security/filter/AuthCheckFilter.java +++ b/awardBE/src/main/java/edu/ncst/award/config/security/filter/AuthCheckFilter.java @@ -6,8 +6,8 @@ import edu.ncst.award.exception.CodeMsg; import edu.ncst.award.model.system.Role; import edu.ncst.award.utils.ResponseUtils; import edu.ncst.award.utils.ResultUtils; -import edu.ncst.award.vo.ResultVO; -import edu.ncst.award.vo.result.UserInfoVO; +import edu.ncst.award.domain.vo.R; +import edu.ncst.award.domain.vo.result.UserInfoVO; import io.jsonwebtoken.Claims; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.Jws; @@ -41,6 +41,7 @@ public class AuthCheckFilter extends OncePerRequestFilter { super(); this.stringRedisTemplate = stringRedisTemplate; } + @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String jwtToken = null; @@ -48,7 +49,7 @@ public class AuthCheckFilter extends OncePerRequestFilter { // 优先从 Cookie 中获取 jwtTOKEN Cookie[] cookies = request.getCookies(); - log.info("开始鉴权====cookies====" +cookies); + log.info("开始鉴权====cookies====" + cookies); boolean cookieHasToken = false; if (cookies != null) { for (Cookie cookie : cookies) { @@ -64,7 +65,7 @@ public class AuthCheckFilter extends OncePerRequestFilter { // 如果 Cookie 中不存在 TOKEN,则尝试从 Header 中获取 TOKEN if (!cookieHasToken) { String authorization = request.getHeader("Authorization"); - log.info("开始鉴权====header Authorization====" +authorization); + log.info("开始鉴权====header Authorization====" + authorization); if (authorization != null && authorization.startsWith("Bearer ")) { jwtToken = authorization.replace("Bearer ", ""); log.info("获取到token====header===="); @@ -77,11 +78,10 @@ public class AuthCheckFilter extends OncePerRequestFilter { if (jwtToken == null || "".equals(jwtToken)) { log.error("鉴权TOKEN:未获取,用户需要登录"); - ResultVO resultVO = ResultUtils.error(CodeMsg.USER_NEED_LOGIN); - ResponseUtils.output(response, resultVO); - } - else { - log.info("鉴权TOKEN:" +"Bearer " + jwtToken); + R r = ResultUtils.fail(CodeMsg.USER_NEED_LOGIN); + ResponseUtils.output(response, r); + } else { + log.info("鉴权TOKEN:" + "Bearer " + jwtToken); } try { @@ -92,15 +92,15 @@ public class AuthCheckFilter extends OncePerRequestFilter { Claims claims = jws.getBody(); String userName = claims.getSubject(); //可以通过控制redis数据从服务端强制下线用户 - if(!stringRedisTemplate.hasKey("jwt_token:"+userName)){ - throw new ExpiredJwtException(null,jws.getBody(),"登录失效"); + if (!stringRedisTemplate.hasKey("jwt_token:" + userName)) { + throw new ExpiredJwtException(null, jws.getBody(), "登录失效"); } // 获取用户信息 String userInfoJSON = (String) claims.get("userInfo"); ObjectMapper objectMapper = new ObjectMapper(); UserInfoVO userInfoVO = objectMapper.readValue(userInfoJSON, UserInfoVO.class); - + log.info(userInfoVO.toString()); // 获取角色列表 List roles = userInfoVO.getRoles(); List authorities = new ArrayList<>(); @@ -115,8 +115,8 @@ public class AuthCheckFilter extends OncePerRequestFilter { JwtAuthenticationToken token = new JwtAuthenticationToken(userName, authorities, userInfoVO); SecurityContextHolder.getContext().setAuthentication(token); } catch (ExpiredJwtException e) { - ResultVO resultVO = ResultUtils.error(CodeMsg.USER_TOKEN_EXPIRED);// 用户凭证过期 - ResponseUtils.output(response, resultVO); + R r = ResultUtils.fail(CodeMsg.USER_TOKEN_EXPIRED);// 用户凭证过期 + ResponseUtils.output(response, r); } finally { filterChain.doFilter(request, response); } diff --git a/awardBE/src/main/java/edu/ncst/award/config/security/filter/LoginFilter.java b/awardBE/src/main/java/edu/ncst/award/config/security/filter/LoginFilter.java index 47db9e1..809ae77 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/security/filter/LoginFilter.java +++ b/awardBE/src/main/java/edu/ncst/award/config/security/filter/LoginFilter.java @@ -7,11 +7,10 @@ import edu.ncst.award.exception.CodeMsg; import edu.ncst.award.model.system.Role; import edu.ncst.award.model.system.User; import edu.ncst.award.service.ILoginLogService; -import edu.ncst.award.utils.CookieUtils; import edu.ncst.award.utils.ResultUtils; -import edu.ncst.award.vo.ResultVO; -import edu.ncst.award.vo.param.UserLoginDTO; -import edu.ncst.award.vo.result.UserInfoVO; +import edu.ncst.award.domain.vo.R; +import edu.ncst.award.domain.vo.param.UserLoginDTO; +import edu.ncst.award.domain.vo.result.UserInfoVO; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import lombok.extern.slf4j.Slf4j; @@ -22,6 +21,7 @@ import org.springframework.security.authentication.*; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; @@ -50,7 +50,7 @@ public class LoginFilter extends AbstractAuthenticationProcessingFilter {//OnceP private final RedisTemplate stringRedisTemplate; - private String tempToken=""; + private String tempToken = ""; private final int MAX_ATTEMPT = 20; public LoginFilter(AuthenticationManager authenticationManager, ILoginLogService loginLogService, RedisTemplate stringRedisTemplate) { @@ -67,7 +67,7 @@ public class LoginFilter extends AbstractAuthenticationProcessingFilter {//OnceP */ @Override public Authentication attemptAuthentication( - HttpServletRequest request, HttpServletResponse response + HttpServletRequest request, HttpServletResponse response ) throws AuthenticationException, IOException, ServletException { UserLoginDTO paramUserLoginVO = new ObjectMapper().readValue(request.getInputStream(), UserLoginDTO.class); AuthenticationManager authenticationManager = getAuthenticationManager(); @@ -75,34 +75,35 @@ public class LoginFilter extends AbstractAuthenticationProcessingFilter {//OnceP request.setAttribute("userLoginVO", paramUserLoginVO); // 登录类型 String loginType = paramUserLoginVO.getType(); - log.info("尝试登录===="+ paramUserLoginVO); + log.info("尝试登录====" + paramUserLoginVO); if ("ACCOUNT".equalsIgnoreCase(loginType)) { - // 校验 TOKEN - Cookie tempTokenCookie = CookieUtils.getCookie(request, "TEMP_TOKEN");//cookie中的TEMP_TOKEN携带验证码的sessionid,去redis获取有效期内的验证码 - - - if (tempTokenCookie == null || "".equals(tempTokenCookie.getValue())) { - throw new InternalAuthenticationServiceException("无效的请求"); - } - - tempToken = tempTokenCookie.getValue(); - Boolean tokenIsValid = stringRedisTemplate.hasKey("tempToken:" + tempToken); - - if (tokenIsValid == null || !tokenIsValid) { - throw new InternalAuthenticationServiceException("无效的请求"); - } - // 校验验证码 - String rightCaptcha = stringRedisTemplate.opsForValue().get("captcha:" + tempToken); - String loginCaptcha = paramUserLoginVO.getLoginCaptcha(); - - if (loginCaptcha == null || "".equals(loginCaptcha)) { - throw new BusinessException(CodeMsg.CAPTCHA_IS_EMPTY); - } else if (rightCaptcha == null || "".equals(rightCaptcha)) { - throw new BusinessException(CodeMsg.CAPTCHA_IS_EXPIRED); - } else if (!loginCaptcha.equalsIgnoreCase(rightCaptcha)) { - throw new BusinessException(CodeMsg.CAPTCHA_IS_NOT_RIGHT); - } + // 方便测试我就给注释了 +// 校验 TOKEN +// Cookie tempTokenCookie = CookieUtils.getCookie(request, "TEMP_TOKEN");//cookie中的TEMP_TOKEN携带验证码的sessionid,去redis获取有效期内的验证码 + + +// if (tempTokenCookie == null || "".equals(tempTokenCookie.getValue())) { +// throw new InternalAuthenticationServiceException("无效的请求"); +// } +// +// tempToken = tempTokenCookie.getValue(); +// Boolean tokenIsValid = stringRedisTemplate.hasKey("tempToken:" + tempToken); +// +// if (tokenIsValid == null || !tokenIsValid) { +// throw new InternalAuthenticationServiceException("无效的请求"); +// } +// // 校验验证码 +// String rightCaptcha = stringRedisTemplate.opsForValue().get("captcha:" + tempToken); +// String loginCaptcha = paramUserLoginVO.getLoginCaptcha(); +// +// if (loginCaptcha == null || "".equals(loginCaptcha)) { +// throw new BusinessException(CodeMsg.CAPTCHA_IS_EMPTY); +// } else if (rightCaptcha == null || "".equals(rightCaptcha)) { +// throw new BusinessException(CodeMsg.CAPTCHA_IS_EXPIRED); +// } else if (!loginCaptcha.equalsIgnoreCase(rightCaptcha)) { +// throw new BusinessException(CodeMsg.CAPTCHA_IS_NOT_RIGHT); +// } // 用户名密码登录,用户名可以是用户账号名、手机号或电子邮箱 UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(paramUserLoginVO.getUsername(), paramUserLoginVO.getPassword()); request.setAttribute("token", token); @@ -125,7 +126,7 @@ public class LoginFilter extends AbstractAuthenticationProcessingFilter {//OnceP */ @Override protected void successfulAuthentication( - HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult + HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult ) throws IOException { Object principal = authResult.getPrincipal(); UserInfoVO userInfoVO = new UserInfoVO(); @@ -155,13 +156,13 @@ public class LoginFilter extends AbstractAuthenticationProcessingFilter {//OnceP .setId(jwtTokenId) .compact(); - stringRedisTemplate.opsForValue().set("jwt_token:"+authResult.getName(),jwt,10, TimeUnit.DAYS); + stringRedisTemplate.opsForValue().set("jwt_token:" + authResult.getName(), jwt, 10, TimeUnit.DAYS); // stringRedisTemplate.delete("user_attempts:"+request.getRemoteAddr()); // 记录登录日志 loginLogService.addLoginLog(userInfoVO.getId(), true); // 返回结果 - ResultVO result = ResultUtils.success("登录成功", jwt); + R result = ResultUtils.ok("登录成功", jwt); response.setContentType("application/json;charset=utf-8"); Cookie cookieToken = new Cookie("SYS_TOKEN", jwt); cookieToken.setHttpOnly(true); @@ -214,40 +215,47 @@ public class LoginFilter extends AbstractAuthenticationProcessingFilter {//OnceP */ @Override protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException, ServletException { - ResultVO resultVO = new ResultVO<>(); - log.debug("登录失败:"+failed); + R r = new R<>(); + log.debug("登录失败:" + failed); if (failed instanceof LockedException) { - resultVO = ResultUtils.error(CodeMsg.USER_IS_LOCKED); + r = ResultUtils.fail(CodeMsg.USER_IS_LOCKED); } else if (failed instanceof CredentialsExpiredException) { - resultVO = ResultUtils.error(CodeMsg.USER_CREDENTIALS_EXPIRED); + if (failed.getMessage() != null) { + r = ResultUtils.fail(failed.getMessage()); + } + r = ResultUtils.fail(CodeMsg.USER_CREDENTIALS_EXPIRED); } else if (failed instanceof AccountExpiredException) { - resultVO = ResultUtils.error(CodeMsg.USER_ACCOUNT_EXPIRED); + r = ResultUtils.fail(CodeMsg.USER_ACCOUNT_EXPIRED); } else if (failed instanceof DisabledException) { - resultVO = ResultUtils.error(CodeMsg.USER_IS_DISABLED); + r = ResultUtils.fail(CodeMsg.USER_IS_DISABLED); } else if (failed instanceof AuthenticationException) { if (failed instanceof BusinessException) { stringRedisTemplate.delete("captcha:" + tempToken); BusinessException businessException = (BusinessException) failed; - resultVO = ResultUtils.error(businessException.getError()); + r = ResultUtils.fail(businessException.getError()); - }else{ + } else { Throwable cause = failed.getCause(); if (cause instanceof BusinessException) { BusinessException businessException = (BusinessException) cause; - resultVO = ResultUtils.error(businessException.getError()); + r = ResultUtils.fail(businessException.getError()); } else { - resultVO = ResultUtils.error(CodeMsg.USER_BAD_CREDENTIALS); + if (failed instanceof UsernameNotFoundException) { + r = ResultUtils.fail(failed.getMessage(), false); + } else { + r = ResultUtils.fail(CodeMsg.USER_BAD_CREDENTIALS); + } } } } else { - resultVO = ResultUtils.error(CodeMsg.LOGIN_FAIL); + r = ResultUtils.fail(CodeMsg.LOGIN_FAIL); } // 拦截后直接将错误信息反馈给前端,不经过全局异常处理器(GlobalExceptionHandler)处理 response.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); PrintWriter out = response.getWriter(); - out.write(new ObjectMapper().writeValueAsString(resultVO)); + out.write(new ObjectMapper().writeValueAsString(r)); out.flush(); out.close(); } diff --git a/awardBE/src/main/java/edu/ncst/award/config/security/token/JwtAuthenticationToken.java b/awardBE/src/main/java/edu/ncst/award/config/security/token/JwtAuthenticationToken.java index 26fb482..845e9cb 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/security/token/JwtAuthenticationToken.java +++ b/awardBE/src/main/java/edu/ncst/award/config/security/token/JwtAuthenticationToken.java @@ -1,6 +1,6 @@ package edu.ncst.award.config.security.token; -import edu.ncst.award.vo.result.UserInfoVO; +import edu.ncst.award.domain.vo.result.UserInfoVO; import org.springframework.security.authentication.AbstractAuthenticationToken; import org.springframework.security.core.GrantedAuthority; diff --git a/awardBE/src/main/java/edu/ncst/award/config/swaggerConfig.java b/awardBE/src/main/java/edu/ncst/award/config/swaggerConfig.java new file mode 100644 index 0000000..a157833 --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/config/swaggerConfig.java @@ -0,0 +1,43 @@ +package edu.ncst.award.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.oas.annotations.EnableOpenApi; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; + +@EnableOpenApi +@Configuration +public class swaggerConfig implements WebMvcConfigurer { + + @Bean + public Docket createRestApi() { + //返回文档摘要信息 + return new Docket(DocumentationType.OAS_30) + .apiInfo(apiInfo()) + .select() + //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) + //配合@EnableOpenApi 找到API位置,不需要再在启动类上配置 + .apis(RequestHandlerSelectors.basePackage("edu.ncst.award.controller")) + .paths(PathSelectors.any()) + .build(); + + } + + //生成接口信息,包括标题、联系人等 + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("Swagger3接口文档") + .description("Rabbit用Swagger3.0。") + .contact(new Contact("Rabbit", "https://swagger.io/", "362250024@qq.com")) + .version("1.0") + .build(); + } + +} diff --git a/awardBE/src/main/java/edu/ncst/award/controller/CaptchaController.java b/awardBE/src/main/java/edu/ncst/award/controller/CaptchaController.java index b03f7b5..d3db827 100644 --- a/awardBE/src/main/java/edu/ncst/award/controller/CaptchaController.java +++ b/awardBE/src/main/java/edu/ncst/award/controller/CaptchaController.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import javax.annotation.Resource; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.Cookie; @@ -19,12 +20,12 @@ import java.io.IOException; import java.util.UUID; import java.util.concurrent.TimeUnit; -@Api("验证码") +@Api( tags = "验证码") @Controller @RequestMapping("/api") public class CaptchaController { - @Autowired + @Resource private StringRedisTemplate stringRedisTemplate; @GetMapping("/captcha.jpg") diff --git a/awardBE/src/main/java/edu/ncst/award/controller/LoginController.java b/awardBE/src/main/java/edu/ncst/award/controller/LoginController.java new file mode 100644 index 0000000..2667c2a --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/controller/LoginController.java @@ -0,0 +1,86 @@ +package edu.ncst.award.controller; + + +import edu.ncst.award.config.security.CustomUserCache; +import edu.ncst.award.domain.vo.R; +import edu.ncst.award.domain.vo.RouterVo; +import edu.ncst.award.domain.vo.result.UserInfoVO; +import edu.ncst.award.model.system.Menu; +import edu.ncst.award.model.system.User; +import edu.ncst.award.service.impl.system.MenuServiceImpl; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +@Api(tags = "登录信息管理") +@RestController +@RequestMapping("/api") +@Slf4j +public class LoginController { + + @Resource + MenuServiceImpl menuService; + + @Resource + CustomUserCache userCache; + + + @ApiOperation("注销登录") + @GetMapping("/logout") + public R logout(HttpServletRequest request, HttpServletResponse response) { + Cookie[] cookies = request.getCookies(); + + if (cookies != null) { + for (Cookie cookie : cookies) { + cookie.setValue(""); + cookie.setPath("/api"); + cookie.setMaxAge(0); + response.addCookie(cookie); + } + } + + return R.ok("注销成功", null); + } + + /** + * 获取路由信息 + * + * @return 路由信息 + */ + @ApiOperation("获取路由信息") + @GetMapping("/getRouters/{userId}") + public R> getRouters(@PathVariable Integer userId) { + if (userId == null) { + log.error("用户id不能为空"); + } + List menus = menuService.selectMenuTreeByUserId(userId); + return R.ok(menuService.buildMenus(menus)); + } + + /** + * 获取当前用户 + * + * @return 当前用户信息 + */ + @ApiOperation("获取当前用户信息") + @GetMapping("/getCurrentUser") + public UserDetails getRouters() { + UserInfoVO userInfoVO = (UserInfoVO) SecurityContextHolder.getContext().getAuthentication().getDetails(); + User currentUser = (User) userCache.getUserFromCache(userInfoVO.getUsername()); + currentUser.setPassword(null); + return currentUser; + } + +} diff --git a/awardBE/src/main/java/edu/ncst/award/controller/MenuController.java b/awardBE/src/main/java/edu/ncst/award/controller/MenuController.java index 7c52778..adb418c 100644 --- a/awardBE/src/main/java/edu/ncst/award/controller/MenuController.java +++ b/awardBE/src/main/java/edu/ncst/award/controller/MenuController.java @@ -1,17 +1,24 @@ package edu.ncst.award.controller; +import edu.ncst.award.domain.vo.R; +import edu.ncst.award.model.system.Menu; import edu.ncst.award.service.IMenuService; +import edu.ncst.award.service.IUserService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * 菜单 控制器 */ -@Api(tags = "MenuController") +@Api(value = "菜单信息控制器", tags = {"菜单信息管理"}) @Slf4j @RequiredArgsConstructor @RestController @@ -19,6 +26,17 @@ import org.springframework.web.bind.annotation.RestController; public class MenuController { private final IMenuService menuService; + private final IUserService userService; + + /** + * 获取菜单列表 + */ + @ApiOperation("获取菜单列表") + @GetMapping("/list") + public R> list(Menu menu) { + List menus = menuService.selectMenuList(menu, userService.getCurrentUser().getId()); + return R.ok(menus); + } // // public MenuController(IMenuService menuService) { diff --git a/awardBE/src/main/java/edu/ncst/award/controller/ProjectController.java b/awardBE/src/main/java/edu/ncst/award/controller/ProjectController.java deleted file mode 100644 index aec2acc..0000000 --- a/awardBE/src/main/java/edu/ncst/award/controller/ProjectController.java +++ /dev/null @@ -1,38 +0,0 @@ -package edu.ncst.award.controller; - - -import edu.ncst.award.model.project.Project; -import edu.ncst.award.service.impl.project.ProjectServiceImpl; -import edu.ncst.award.utils.ResultUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 项目 保存到数据库 - */ -@Api(tags = "ProjectController") -@Slf4j -@RestController -@RequestMapping(value = "/api/project") -public class ProjectController { - - @Autowired - ProjectServiceImpl projectService; - - @ApiOperation("保存project数据") - @PostMapping("") -// @RequestBody Project project - public Project saveProject(@RequestBody Project project) { - System.out.println(project); - projectService.save(project); - ResultUtils.success("success"); - return new Project(); - } - -} diff --git a/awardBE/src/main/java/edu/ncst/award/controller/RoleController.java b/awardBE/src/main/java/edu/ncst/award/controller/RoleController.java index 20cf73b..709b8bb 100644 --- a/awardBE/src/main/java/edu/ncst/award/controller/RoleController.java +++ b/awardBE/src/main/java/edu/ncst/award/controller/RoleController.java @@ -1,18 +1,24 @@ package edu.ncst.award.controller; +import cn.hutool.core.util.ObjectUtil; +import edu.ncst.award.common.annotation.Log; +import edu.ncst.award.common.annotation.enums.BusinessType; +import edu.ncst.award.common.constant.UserConstants; +import edu.ncst.award.common.core.controller.BaseController; import edu.ncst.award.common.core.page.TableDataInfo; +import edu.ncst.award.config.security.CustomUserCache; +import edu.ncst.award.domain.UserRole; +import edu.ncst.award.domain.vo.R; +import edu.ncst.award.domain.vo.param.query.PageQuery; import edu.ncst.award.model.system.Role; -import edu.ncst.award.service.ISysRoleService; -import edu.ncst.award.vo.ResultVO; -import edu.ncst.award.vo.param.query.PageQuery; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; +import edu.ncst.award.model.system.User; +import edu.ncst.award.service.IRoleService; +import edu.ncst.award.service.IUserService; +import io.swagger.annotations.*; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; import java.util.List; /** @@ -22,30 +28,146 @@ import java.util.List; @RestController @RequiredArgsConstructor @RequestMapping("/api/role") -public abstract class RoleController { +public class RoleController extends BaseController { - private final ISysRoleService roleService; + private final IRoleService roleService; + private final IUserService userService; + + private final CustomUserCache userCache; /** * 获取角色列表 */ @ApiOperation("获取角色列表") @GetMapping("/list") - public TableDataInfo list(Role role, PageQuery pageQuery){ - return roleService.selectPageRoleList(role,pageQuery); + public TableDataInfo list(Role role, PageQuery pageQuery) { + return roleService.selectPageRoleList(role, pageQuery); } - // 增加权限 - abstract ResultVO addAllRole(); + /** + * 根据角色编号获取详细信息 + */ + @ApiOperation("根据角色编号获取详细信息") + @GetMapping(value = "/{roleId}") + public R getInfo(@ApiParam("角色ID") @PathVariable Long roleId) { + return R.ok(roleService.selectRoleById(roleId)); + } - // 分配权限 - abstract ResultVO assignRole(); + /** + * 新增角色 + */ + @ApiOperation("新增角色") + @Log(title = "角色管理", businessType = BusinessType.INSERT) + @PostMapping + public R add(@Validated @RequestBody Role role) { + if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) { + return R.fail("新增角色'" + role.getName() + "'失败,角色名称已存在"); + } else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleLabelUnique(role))) { + return R.fail("新增角色'" + role.getLabel() + "'失败,角色权限已存在"); + } + return toAjax(roleService.insertRole(role)); + } - // 修改权限 - abstract ResultVO updateByRoleId(); + /** + * 修改保存角色 + */ + @ApiOperation("修改保存角色") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping + public R edit(@Validated @RequestBody Role role) { + if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) { + return R.fail("修改角色'" + role.getName() + "'失败,角色名称已存在"); + } else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleLabelUnique(role))) { + return R.fail("修改角色'" + role.getLabel() + "'失败,角色权限已存在"); + } - // 删除权限 - abstract ResultVO deleteRoleByUserId(); + if (roleService.updateRole(role)) { + // 更新缓存用户权限 + User loginUser = userCache.getLoginUser(); + User user = userService.selectUserById(loginUser.getId()); + if (ObjectUtil.isNotNull(user) && !user.isAdmin()) { +// loginUser.setMenuPermission(permissionService.getMenuPermission(sysUser)); + userCache.putUserInCache(user); + } + return R.ok(); + } + return R.fail("修改角色'" + role.getName() + "'失败,请联系管理员"); + } + /** + * 状态修改 + */ + @ApiOperation("状态修改") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public R changeStatus(@RequestBody Role role) { + return toAjax(roleService.updateRoleStatus(role)); + } + + /** + * 删除角色 + */ + @ApiOperation("删除角色") + @Log(title = "角色管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{roleIds}") + public R remove(@ApiParam("角色ID串") @PathVariable Long[] roleIds) { + return toAjax(roleService.deleteRoleByIds(roleIds)); + } + + /** + * 获取角色选择框列表 + */ + @ApiOperation("获取角色选择框列表") + @GetMapping("/optionSelect") + public R> optionSelect() { + return R.ok(roleService.selectRoleAll()); + } + + /** + * 查询已分配用户角色列表 + */ + @ApiOperation("查询已分配用户角色列表") + @GetMapping("/authUser/allocatedList") + public TableDataInfo allocatedList(User user, PageQuery pageQuery) { + return userService.selectAllocatedList(user, pageQuery); + } + + /** + * 查询未分配用户角色列表 + */ + @ApiOperation("查询未分配用户角色列表") + @GetMapping("/authUser/unallocatedList") + public TableDataInfo unallocatedList(User user, PageQuery pageQuery) { + return userService.selectUnallocatedList(user, pageQuery); + } + + /** + * 取消授权用户 + */ + @ApiOperation("取消授权用户") + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/cancel") + public R cancelAuthUser(@RequestBody UserRole userRole) { + return toAjax(roleService.deleteAuthUser(userRole)); + } + + /** + * 批量取消授权用户 + */ + @ApiOperation("批量取消授权用户") + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/cancelAll") + public R cancelAuthUserAll(Long roleId, Long[] userIds) { + return toAjax(roleService.deleteAuthUsers(roleId, userIds)); + } + + /** + * 批量选择用户授权 + */ + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/selectAll") + public R selectAuthUserAll(Long roleId, Long[] userIds) { + return toAjax(roleService.insertAuthUsers(roleId, userIds)); + } } diff --git a/awardBE/src/main/java/edu/ncst/award/controller/UserController.java b/awardBE/src/main/java/edu/ncst/award/controller/UserController.java index 1889ffa..8391d44 100644 --- a/awardBE/src/main/java/edu/ncst/award/controller/UserController.java +++ b/awardBE/src/main/java/edu/ncst/award/controller/UserController.java @@ -1,26 +1,23 @@ package edu.ncst.award.controller; +import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; +import edu.ncst.award.common.annotation.Log; +import edu.ncst.award.common.annotation.enums.BusinessType; import edu.ncst.award.common.constant.UserConstants; import edu.ncst.award.common.core.controller.BaseController; import edu.ncst.award.common.core.page.TableDataInfo; +import edu.ncst.award.domain.vo.R; +import edu.ncst.award.domain.vo.param.query.PageQuery; import edu.ncst.award.model.system.Role; import edu.ncst.award.model.system.User; -import edu.ncst.award.service.ISysRoleService; +import edu.ncst.award.service.IRoleService; import edu.ncst.award.service.IUserService; -import edu.ncst.award.utils.ResponseUtils; -import edu.ncst.award.utils.ResultUtils; import edu.ncst.award.utils.StringUtils; -import edu.ncst.award.vo.ResultVO; -import edu.ncst.award.vo.param.CurrentUserDTO; -import edu.ncst.award.vo.param.query.PageQuery; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; +import io.swagger.annotations.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.ResponseEntity; import org.springframework.security.crypto.bcrypt.BCrypt; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -34,14 +31,14 @@ import java.util.stream.Collectors; * 用户 控制器 */ @Slf4j -@Api(tags = "用户") +@Api(tags = "用户信息管理") @RestController @RequiredArgsConstructor @RequestMapping("/api/user") public class UserController extends BaseController { private final IUserService userService; - private final ISysRoleService roleService; + private final IRoleService roleService; /** @@ -58,7 +55,7 @@ public class UserController extends BaseController { */ @ApiOperation("根据用户编号获取详细信息") @GetMapping(value = {"/", "/{id}"}) - public ResultVO> getInfo(@ApiParam("用户ID") @PathVariable(value = "id", required = false) Long userId) { + public R> getInfo(@ApiParam("用户ID") @PathVariable(value = "id", required = false) Long userId) { // admin 具有超级权限你不能修改他 Map ajax = new HashMap<>(); List roles = roleService.selectRoleAll(); @@ -68,7 +65,7 @@ public class UserController extends BaseController { ajax.put("user", sysUser); ajax.put("roleIds", sysUser.getRoles().stream().map(Role::getRoleId).collect(Collectors.toList())); } - return ResultUtils.success(ajax); + return R.ok(ajax); } @@ -77,21 +74,21 @@ public class UserController extends BaseController { */ @ApiOperation("处理新增用户请求") @PostMapping - public ResultVO list(@RequestBody User user) { + public R list(@RequestBody User user) { if (StringUtils.isNotEmpty(user.getUsername()) && UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) { - return ResultUtils.error("新增用户" + user.getUsername() + "失败,账号已存在"); + return R.fail("新增用户" + user.getUsername() + "失败,账号已存在"); } else if (StringUtils.isNotEmpty(user.getMobilePhone()) && UserConstants.NOT_UNIQUE.equals(userService.checkUserMobilePhoneUnique(user))) { - return ResultUtils.error("新增用户" + user.getUsername() + "失败,用户手机号已存在"); + return R.fail("新增用户" + user.getUsername() + "失败,用户手机号已存在"); } else if (StringUtils.isNotEmpty(user.getEmail()) && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) { - return ResultUtils.error("新增用户" + user.getUsername() + "失败,用户邮箱邮箱已存在"); + return R.fail("新增用户" + user.getUsername() + "失败,用户邮箱邮箱已存在"); } if (StringUtils.isEmpty(user.getPassword())) { user.setPassword(BCrypt.hashpw(user.getPassword(), BCrypt.gensalt("$2a"))); } log.info("新增{}用户成功", user.getUsername()); - return userService.insertUser(user) > 0 ? ResultUtils.success() : ResultUtils.error(); + return userService.insertUser(user) > 0 ? R.ok() : R.fail(); } /** @@ -99,14 +96,14 @@ public class UserController extends BaseController { */ @ApiOperation("修改用户") @PutMapping - public ResultVO edit(@Validated @RequestBody User user) { + public R edit(@Validated @RequestBody User user) { userService.checkUserAllowed(user); if (StringUtils.isNotEmpty(user.getMobilePhone()) && UserConstants.NOT_UNIQUE.equals(userService.checkUserMobilePhoneUnique(user))) { - return ResultUtils.error("修改用户'" + user.getUsername() + "'失败,手机号码已存在"); + return R.fail("修改用户'" + user.getUsername() + "'失败,手机号码已存在"); } else if (StringUtils.isNotEmpty(user.getEmail()) && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) { - return ResultUtils.error("修改用户'" + user.getUsername() + "'失败,邮箱账号已存在"); + return R.fail("修改用户'" + user.getUsername() + "'失败,邮箱账号已存在"); } return toAjax(userService.updateUser(user)); } @@ -116,22 +113,36 @@ public class UserController extends BaseController { */ @ApiOperation("删除用户") @DeleteMapping("/{userIds}") - public ResultVO remove(@ApiParam("角色ID串") @PathVariable Long[] userIds, @RequestBody User user) { - // 前端回传来一个deleteUserId我用User对象接收 -// if (ArrayUtil.contains(userIds, getUserId())) { - // this getUserId will return current User id -// return ResultUtils.error("当前用户不能删除"); -// } + public R remove(@ApiParam("角色ID串") @PathVariable Long[] userIds) { + if (ArrayUtil.contains(userIds, userService.getCurrentUser().getId())) { + return R.fail("当前用户不能删除"); + } return toAjax(userService.deleteUserByIds(userIds)); } - - @ApiOperation("获取当前用户信息") - @GetMapping("/current") - public ResponseEntity getCurrentUser() { - CurrentUserDTO currentUserDTO = userService.getCurrentUser(); - return ResponseUtils.success(currentUserDTO); + /** + * 根据用户编号获取授权角色 + */ + @ApiOperation("根据用户编号获取授权角色") + @GetMapping("/authRole/{userId}") + public R> authRole(@ApiParam("用户ID") @PathVariable("userId") Long userId) { + User user = userService.selectUserById(userId); + List roles = roleService.selectRolesByUserId(userId); + Map ajax = new HashMap<>(); + ajax.put("user", user); + ajax.put("roles", roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); + return R.ok(ajax); } + /** + * 用户授权角色 + */ + @ApiOperation("用户授权角色") + @Log(title = "用户管理", businessType = BusinessType.GRANT) + @PutMapping("/authRole") + public R insertAuthRole(Long userId, Long[] roleIds) { + userService.insertUserAuth(userId, roleIds); + return R.ok(); + } } diff --git a/awardBE/src/main/java/edu/ncst/award/controller/dict/DictCountryController.java b/awardBE/src/main/java/edu/ncst/award/controller/dict/DictCountryController.java deleted file mode 100644 index aa9d45a..0000000 --- a/awardBE/src/main/java/edu/ncst/award/controller/dict/DictCountryController.java +++ /dev/null @@ -1,36 +0,0 @@ -package edu.ncst.award.controller.dict; - -import edu.ncst.award.model.dict.DictCountry; -import edu.ncst.award.service.impl.dict.DictCountryImpl; -import edu.ncst.award.utils.ResultUtils; -import edu.ncst.award.vo.ResultVO; -import lombok.val; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -/** - *

- * 职位 前端控制器 - *

- * - * @author Erwin Feng - * @since 2022-03-16 - */ -@RestController -@RequestMapping("/api/dict/country") -public class DictCountryController { - - @Autowired - DictCountryImpl dictCountry; - - @GetMapping - public ResultVO> getAllCountry() { - val countries = dictCountry.list(); - return ResultUtils.success("ok", countries); - } -} diff --git a/awardBE/src/main/java/edu/ncst/award/controller/dict/DictEvaluateLevelController.java b/awardBE/src/main/java/edu/ncst/award/controller/dict/DictEvaluateLevelController.java deleted file mode 100644 index 72c909e..0000000 --- a/awardBE/src/main/java/edu/ncst/award/controller/dict/DictEvaluateLevelController.java +++ /dev/null @@ -1,36 +0,0 @@ -package edu.ncst.award.controller.dict; - -import edu.ncst.award.model.dict.DictCountry; -import edu.ncst.award.model.dict.DictEvaluateLevel; -import edu.ncst.award.service.impl.dict.DictCountryImpl; -import edu.ncst.award.service.impl.dict.DictEvaluateLevelImpl; -import edu.ncst.award.utils.ResultUtils; -import edu.ncst.award.vo.ResultVO; -import lombok.val; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -/** - *

- * 职位 前端控制器 - *

- * - * @author Erwin Feng - * @since 2022-03-16 - */ -@RestController -@RequestMapping("/dict/evaluate-level-entity") -public class DictEvaluateLevelController { - @Autowired - DictEvaluateLevelImpl evaluateLevel; - - @GetMapping - public ResultVO> getAllCountry() { - val evaluateLevels = evaluateLevel.list(); - return ResultUtils.success("ok", evaluateLevels); - } -} diff --git a/awardBE/src/main/java/edu/ncst/award/controller/dict/DictNationController.java b/awardBE/src/main/java/edu/ncst/award/controller/dict/DictNationController.java deleted file mode 100644 index be966f4..0000000 --- a/awardBE/src/main/java/edu/ncst/award/controller/dict/DictNationController.java +++ /dev/null @@ -1,18 +0,0 @@ -package edu.ncst.award.controller.dict; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - *

- * 职位 前端控制器 - *

- * - * @author Erwin Feng - * @since 2022-03-16 - */ -@RestController -@RequestMapping("/dict/nation-entity") -public class DictNationController { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/controller/dict/DictRecommendLevelController.java b/awardBE/src/main/java/edu/ncst/award/controller/dict/DictRecommendLevelController.java deleted file mode 100644 index 2f22840..0000000 --- a/awardBE/src/main/java/edu/ncst/award/controller/dict/DictRecommendLevelController.java +++ /dev/null @@ -1,18 +0,0 @@ -package edu.ncst.award.controller.dict; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - *

- * 职位 前端控制器 - *

- * - * @author Erwin Feng - * @since 2022-03-16 - */ -@RestController -@RequestMapping("/dict/recommend-level-entity") -public class DictRecommendLevelController { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/controller/dict/DictRewardsTypeController.java b/awardBE/src/main/java/edu/ncst/award/controller/dict/DictRewardsTypeController.java deleted file mode 100644 index 5fca940..0000000 --- a/awardBE/src/main/java/edu/ncst/award/controller/dict/DictRewardsTypeController.java +++ /dev/null @@ -1,18 +0,0 @@ -package edu.ncst.award.controller.dict; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - *

- * 职位 前端控制器 - *

- * - * @author Erwin Feng - * @since 2022-03-16 - */ -@RestController -@RequestMapping("/dict/rewards-type-entity") -public class DictRewardsTypeController { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/controller/dict/DictSecretLevelController.java b/awardBE/src/main/java/edu/ncst/award/controller/dict/DictSecretLevelController.java deleted file mode 100644 index fc9cfdf..0000000 --- a/awardBE/src/main/java/edu/ncst/award/controller/dict/DictSecretLevelController.java +++ /dev/null @@ -1,18 +0,0 @@ -package edu.ncst.award.controller.dict; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - *

- * 职位 前端控制器 - *

- * - * @author Erwin Feng - * @since 2022-03-16 - */ -@RestController -@RequestMapping("/dict/secret-level-entity") -public class DictSecretLevelController { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/domain/UserRole.java b/awardBE/src/main/java/edu/ncst/award/domain/UserRole.java new file mode 100644 index 0000000..1959fba --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/domain/UserRole.java @@ -0,0 +1,34 @@ +package edu.ncst.award.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 用户和角色关联 sys_user_role + * + * @author Lion Li + */ + +@Data +@TableName("sys_user_role") +@ApiModel("用户和角色关联") +public class UserRole { + + /** + * 用户ID + */ + @TableId(type = IdType.INPUT) + @ApiModelProperty(value = "用户ID") + private Long userId; + + /** + * 角色ID + */ + @ApiModelProperty(value = "角色ID") + private Long roleId; + +} diff --git a/awardBE/src/main/java/edu/ncst/award/vo/ListResultVO.java b/awardBE/src/main/java/edu/ncst/award/domain/vo/ListResultVO.java similarity index 95% rename from awardBE/src/main/java/edu/ncst/award/vo/ListResultVO.java rename to awardBE/src/main/java/edu/ncst/award/domain/vo/ListResultVO.java index 4b0228e..8b07ec6 100644 --- a/awardBE/src/main/java/edu/ncst/award/vo/ListResultVO.java +++ b/awardBE/src/main/java/edu/ncst/award/domain/vo/ListResultVO.java @@ -1,4 +1,4 @@ -package edu.ncst.award.vo; +package edu.ncst.award.domain.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/awardBE/src/main/java/edu/ncst/award/vo/Query.java b/awardBE/src/main/java/edu/ncst/award/domain/vo/Query.java similarity index 97% rename from awardBE/src/main/java/edu/ncst/award/vo/Query.java rename to awardBE/src/main/java/edu/ncst/award/domain/vo/Query.java index 7e8d591..07da5e7 100644 --- a/awardBE/src/main/java/edu/ncst/award/vo/Query.java +++ b/awardBE/src/main/java/edu/ncst/award/domain/vo/Query.java @@ -1,4 +1,4 @@ -package edu.ncst.award.vo; +package edu.ncst.award.domain.vo; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/awardBE/src/main/java/edu/ncst/award/domain/vo/R.java b/awardBE/src/main/java/edu/ncst/award/domain/vo/R.java new file mode 100644 index 0000000..1d74224 --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/domain/vo/R.java @@ -0,0 +1,79 @@ +package edu.ncst.award.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 统一的接口返回数据格式 + */ +@ApiModel("请求响应对象") +@NoArgsConstructor +@Data +public class R { + private static final long serialVersionUID = 1L; + + /** + * 成功 + */ + public static final int SUCCESS = 200; + + /** + * 失败 + */ + public static final int FAIL = 500; + + @ApiModelProperty("消息状态码") + private int code; + + @ApiModelProperty("消息内容") + private String msg; + + @ApiModelProperty("数据对象") + private T data; + + public static R ok() { + return restResult(null, SUCCESS, "操作成功"); + } + + public static R ok(T data) { + return restResult(data, SUCCESS, "操作成功"); + } + + public static R ok(String msg) { + return restResult(null, SUCCESS, msg); + } + + public static R ok(String msg, T data) { + return restResult(data, SUCCESS, msg); + } + + public static R fail() { + return restResult(null, FAIL, "操作失败"); + } + + public static R fail(String msg) { + return restResult(null, FAIL, msg); + } + + public static R fail(T data) { + return restResult(data, FAIL, "操作失败"); + } + + public static R fail(String msg, T data) { + return restResult(data, FAIL, msg); + } + + public static R fail(int code, String msg) { + return restResult(null, code, msg); + } + + private static R restResult(T data, int code, String msg) { + R r = new R<>(); + r.setCode(code); + r.setData(data); + r.setMsg(msg); + return r; + } +} diff --git a/awardBE/src/main/java/edu/ncst/award/vo/RouterVo.java b/awardBE/src/main/java/edu/ncst/award/domain/vo/RouterVo.java similarity index 98% rename from awardBE/src/main/java/edu/ncst/award/vo/RouterVo.java rename to awardBE/src/main/java/edu/ncst/award/domain/vo/RouterVo.java index 5d08d24..862d50c 100644 --- a/awardBE/src/main/java/edu/ncst/award/vo/RouterVo.java +++ b/awardBE/src/main/java/edu/ncst/award/domain/vo/RouterVo.java @@ -1,4 +1,4 @@ -package edu.ncst.award.vo; +package edu.ncst.award.domain.vo; import com.fasterxml.jackson.annotation.JsonInclude; import edu.ncst.award.common.util.treeUtils.TreeNode; diff --git a/awardBE/src/main/java/edu/ncst/award/vo/Sorter.java b/awardBE/src/main/java/edu/ncst/award/domain/vo/Sorter.java similarity index 92% rename from awardBE/src/main/java/edu/ncst/award/vo/Sorter.java rename to awardBE/src/main/java/edu/ncst/award/domain/vo/Sorter.java index 20209f5..f827722 100644 --- a/awardBE/src/main/java/edu/ncst/award/vo/Sorter.java +++ b/awardBE/src/main/java/edu/ncst/award/domain/vo/Sorter.java @@ -1,4 +1,4 @@ -package edu.ncst.award.vo; +package edu.ncst.award.domain.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/awardBE/src/main/java/edu/ncst/award/vo/param/CurrentUserDTO.java b/awardBE/src/main/java/edu/ncst/award/domain/vo/param/CurrentUserDTO.java similarity index 95% rename from awardBE/src/main/java/edu/ncst/award/vo/param/CurrentUserDTO.java rename to awardBE/src/main/java/edu/ncst/award/domain/vo/param/CurrentUserDTO.java index 361f092..b7ce6e9 100644 --- a/awardBE/src/main/java/edu/ncst/award/vo/param/CurrentUserDTO.java +++ b/awardBE/src/main/java/edu/ncst/award/domain/vo/param/CurrentUserDTO.java @@ -1,4 +1,4 @@ -package edu.ncst.award.vo.param; +package edu.ncst.award.domain.vo.param; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/awardBE/src/main/java/edu/ncst/award/vo/param/ResetMenuDTO.java b/awardBE/src/main/java/edu/ncst/award/domain/vo/param/ResetMenuDTO.java similarity index 79% rename from awardBE/src/main/java/edu/ncst/award/vo/param/ResetMenuDTO.java rename to awardBE/src/main/java/edu/ncst/award/domain/vo/param/ResetMenuDTO.java index 444a8f6..a51d107 100644 --- a/awardBE/src/main/java/edu/ncst/award/vo/param/ResetMenuDTO.java +++ b/awardBE/src/main/java/edu/ncst/award/domain/vo/param/ResetMenuDTO.java @@ -1,4 +1,4 @@ -package edu.ncst.award.vo.param; +package edu.ncst.award.domain.vo.param; import edu.ncst.award.model.system.Menu; import lombok.Data; diff --git a/awardBE/src/main/java/edu/ncst/award/vo/param/UserLoginDTO.java b/awardBE/src/main/java/edu/ncst/award/domain/vo/param/UserLoginDTO.java similarity index 86% rename from awardBE/src/main/java/edu/ncst/award/vo/param/UserLoginDTO.java rename to awardBE/src/main/java/edu/ncst/award/domain/vo/param/UserLoginDTO.java index 5831dbd..dbd6082 100644 --- a/awardBE/src/main/java/edu/ncst/award/vo/param/UserLoginDTO.java +++ b/awardBE/src/main/java/edu/ncst/award/domain/vo/param/UserLoginDTO.java @@ -1,4 +1,4 @@ -package edu.ncst.award.vo.param; +package edu.ncst.award.domain.vo.param; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -31,4 +31,7 @@ public class UserLoginDTO { @ApiModelProperty("临时TOKEN") private String tempToken; + @ApiModelProperty("是否自动登录") + private Boolean autoLogin; + } diff --git a/awardBE/src/main/java/edu/ncst/award/vo/param/query/LoginLogQuery.java b/awardBE/src/main/java/edu/ncst/award/domain/vo/param/query/LoginLogQuery.java similarity index 83% rename from awardBE/src/main/java/edu/ncst/award/vo/param/query/LoginLogQuery.java rename to awardBE/src/main/java/edu/ncst/award/domain/vo/param/query/LoginLogQuery.java index 4a1f332..6fef918 100644 --- a/awardBE/src/main/java/edu/ncst/award/vo/param/query/LoginLogQuery.java +++ b/awardBE/src/main/java/edu/ncst/award/domain/vo/param/query/LoginLogQuery.java @@ -1,13 +1,15 @@ -package edu.ncst.award.vo.param.query; +package edu.ncst.award.domain.vo.param.query; -import edu.ncst.award.vo.Query; +import edu.ncst.award.domain.vo.Query; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; +@EqualsAndHashCode(callSuper = true) @ApiModel(description = "登录日志查询对象") @Data public class LoginLogQuery extends Query { diff --git a/awardBE/src/main/java/edu/ncst/award/vo/param/query/PageQuery.java b/awardBE/src/main/java/edu/ncst/award/domain/vo/param/query/PageQuery.java similarity index 98% rename from awardBE/src/main/java/edu/ncst/award/vo/param/query/PageQuery.java rename to awardBE/src/main/java/edu/ncst/award/domain/vo/param/query/PageQuery.java index ef737a8..4eb9669 100644 --- a/awardBE/src/main/java/edu/ncst/award/vo/param/query/PageQuery.java +++ b/awardBE/src/main/java/edu/ncst/award/domain/vo/param/query/PageQuery.java @@ -1,4 +1,4 @@ -package edu.ncst.award.vo.param.query; +package edu.ncst.award.domain.vo.param.query; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.metadata.OrderItem; diff --git a/awardBE/src/main/java/edu/ncst/award/vo/param/query/UserQuery.java b/awardBE/src/main/java/edu/ncst/award/domain/vo/param/query/UserQuery.java similarity index 86% rename from awardBE/src/main/java/edu/ncst/award/vo/param/query/UserQuery.java rename to awardBE/src/main/java/edu/ncst/award/domain/vo/param/query/UserQuery.java index 167a2fb..f940b03 100644 --- a/awardBE/src/main/java/edu/ncst/award/vo/param/query/UserQuery.java +++ b/awardBE/src/main/java/edu/ncst/award/domain/vo/param/query/UserQuery.java @@ -1,4 +1,4 @@ -package edu.ncst.award.vo.param.query; +package edu.ncst.award.domain.vo.param.query; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/awardBE/src/main/java/edu/ncst/award/vo/result/UserInfoVO.java b/awardBE/src/main/java/edu/ncst/award/domain/vo/result/UserInfoVO.java similarity index 95% rename from awardBE/src/main/java/edu/ncst/award/vo/result/UserInfoVO.java rename to awardBE/src/main/java/edu/ncst/award/domain/vo/result/UserInfoVO.java index 5887acc..b30a5ca 100644 --- a/awardBE/src/main/java/edu/ncst/award/vo/result/UserInfoVO.java +++ b/awardBE/src/main/java/edu/ncst/award/domain/vo/result/UserInfoVO.java @@ -1,4 +1,4 @@ -package edu.ncst.award.vo.result; +package edu.ncst.award.domain.vo.result; import edu.ncst.award.model.system.Role; import io.swagger.annotations.ApiModel; diff --git a/awardBE/src/main/java/edu/ncst/award/framework/aspectj/LogAspect.java b/awardBE/src/main/java/edu/ncst/award/framework/aspectj/LogAspect.java new file mode 100644 index 0000000..e075787 --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/framework/aspectj/LogAspect.java @@ -0,0 +1,30 @@ +package edu.ncst.award.framework.aspectj; + +import edu.ncst.award.common.annotation.Log; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.stereotype.Component; + +/** + * 操作日志记录处理 + * + * @author Gpu is all you need + */ +@Slf4j +@Aspect +@Component +public class LogAspect { + + /** + * 处理完请求后执行 + * + * @param joinPoint 切点 + */ + @AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult") + public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult){ + System.out.println(joinPoint); + } + +} diff --git a/awardBE/src/main/java/edu/ncst/award/mapper/system/MenuMapper.java b/awardBE/src/main/java/edu/ncst/award/mapper/MenuMapper.java similarity index 95% rename from awardBE/src/main/java/edu/ncst/award/mapper/system/MenuMapper.java rename to awardBE/src/main/java/edu/ncst/award/mapper/MenuMapper.java index 727bb2f..59e2a73 100644 --- a/awardBE/src/main/java/edu/ncst/award/mapper/system/MenuMapper.java +++ b/awardBE/src/main/java/edu/ncst/award/mapper/MenuMapper.java @@ -1,4 +1,4 @@ -package edu.ncst.award.mapper.system; +package edu.ncst.award.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -11,7 +11,6 @@ import java.util.List; /** * 菜单 Mapper 接口 */ -@Repository public interface MenuMapper extends BaseMapper { // int batchInsert(List menuList); diff --git a/awardBE/src/main/java/edu/ncst/award/mapper/system/ResourceMapper.java b/awardBE/src/main/java/edu/ncst/award/mapper/ResourceMapper.java similarity index 95% rename from awardBE/src/main/java/edu/ncst/award/mapper/system/ResourceMapper.java rename to awardBE/src/main/java/edu/ncst/award/mapper/ResourceMapper.java index babc293..54c5607 100644 --- a/awardBE/src/main/java/edu/ncst/award/mapper/system/ResourceMapper.java +++ b/awardBE/src/main/java/edu/ncst/award/mapper/ResourceMapper.java @@ -1,4 +1,4 @@ -package edu.ncst.award.mapper.system; +package edu.ncst.award.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import edu.ncst.award.model.system.Resource; @@ -6,7 +6,6 @@ import org.springframework.stereotype.Repository; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; -@Repository public interface ResourceMapper extends BaseMapper { List getRolesResourceUrls(List roleNames); diff --git a/awardBE/src/main/java/edu/ncst/award/mapper/system/SysRoleMapper.java b/awardBE/src/main/java/edu/ncst/award/mapper/RoleMapper.java similarity index 87% rename from awardBE/src/main/java/edu/ncst/award/mapper/system/SysRoleMapper.java rename to awardBE/src/main/java/edu/ncst/award/mapper/RoleMapper.java index d091cb2..9b293d2 100644 --- a/awardBE/src/main/java/edu/ncst/award/mapper/system/SysRoleMapper.java +++ b/awardBE/src/main/java/edu/ncst/award/mapper/RoleMapper.java @@ -1,9 +1,8 @@ -package edu.ncst.award.mapper.system; +package edu.ncst.award.mapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import edu.ncst.award.common.mapper.BaseMapperPlus; import edu.ncst.award.model.system.Role; -import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -13,7 +12,7 @@ import java.util.List; * * @author Lion Li */ -public interface SysRoleMapper extends BaseMapperPlus { +public interface RoleMapper extends BaseMapperPlus { /** @@ -25,6 +24,10 @@ public interface SysRoleMapper extends BaseMapperPlus List selectRoleList(Role role); Page selectPageRoleList(@Param("page") Page page, @Param("role") Role role); + + List getUserRolesById(long id); + + // // /** // * 根据用户ID查询角色 diff --git a/awardBE/src/main/java/edu/ncst/award/mapper/system/UserMapper.java b/awardBE/src/main/java/edu/ncst/award/mapper/UserMapper.java similarity index 71% rename from awardBE/src/main/java/edu/ncst/award/mapper/system/UserMapper.java rename to awardBE/src/main/java/edu/ncst/award/mapper/UserMapper.java index 74787a1..f438324 100644 --- a/awardBE/src/main/java/edu/ncst/award/mapper/system/UserMapper.java +++ b/awardBE/src/main/java/edu/ncst/award/mapper/UserMapper.java @@ -1,26 +1,19 @@ -package edu.ncst.award.mapper.system; +package edu.ncst.award.mapper; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import edu.ncst.award.common.core.page.TableDataInfo; +import edu.ncst.award.domain.vo.param.query.PageQuery; import edu.ncst.award.model.system.Role; import edu.ncst.award.model.system.User; -import io.swagger.models.auth.In; -import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import org.springframework.stereotype.Repository; -import java.util.Date; import java.util.List; /** * 用户 Mapper 接口 */ -@Mapper public interface UserMapper extends BaseMapper { // Page getUserPage( @@ -30,7 +23,7 @@ public interface UserMapper extends BaseMapper { // // List getUserList( @Param(Constants.WRAPPER) QueryWrapper queryWrapper); - + List getUserRolesById(long id); // User getUserDetail(Integer userId); @@ -65,4 +58,21 @@ public interface UserMapper extends BaseMapper { * @return 用户对象信息 */ User selectUserById(Long userId); + + /** + * 根据条件分页查询已分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + Page selectAllocatedList(@Param("page") Page page, @Param("user") User user); + + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + Page selectUnallocatedList(@Param("page") Page page, @Param("user") User user); } diff --git a/awardBE/src/main/java/edu/ncst/award/mapper/UserRoleMapper.java b/awardBE/src/main/java/edu/ncst/award/mapper/UserRoleMapper.java new file mode 100644 index 0000000..e3d448d --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/mapper/UserRoleMapper.java @@ -0,0 +1,8 @@ +package edu.ncst.award.mapper; + + +import edu.ncst.award.common.mapper.BaseMapperPlus; +import edu.ncst.award.domain.UserRole; + +public interface UserRoleMapper extends BaseMapperPlus { +} diff --git a/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictCountryMapper.java b/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictCountryMapper.java deleted file mode 100644 index ca5bb79..0000000 --- a/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictCountryMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package edu.ncst.award.mapper.dict; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import edu.ncst.award.model.dict.DictCountry; - -/** - *

- * 职位 Mapper 接口 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -public interface DictCountryMapper extends BaseMapper { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictEvaluateLevelMapper.java b/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictEvaluateLevelMapper.java deleted file mode 100644 index 09ce084..0000000 --- a/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictEvaluateLevelMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package edu.ncst.award.mapper.dict; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import edu.ncst.award.model.dict.DictEvaluateLevel; - -/** - *

- * 职位 Mapper 接口 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -public interface DictEvaluateLevelMapper extends BaseMapper { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictNationMapper.java b/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictNationMapper.java deleted file mode 100644 index 7350b77..0000000 --- a/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictNationMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package edu.ncst.award.mapper.dict; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import edu.ncst.award.model.dict.DictNation; - -/** - *

- * 职位 Mapper 接口 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -public interface DictNationMapper extends BaseMapper { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictRecommendLevelMapper.java b/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictRecommendLevelMapper.java deleted file mode 100644 index f93b5e9..0000000 --- a/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictRecommendLevelMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package edu.ncst.award.mapper.dict; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import edu.ncst.award.model.dict.DictRecommendLevel; - -/** - *

- * 职位 Mapper 接口 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -public interface DictRecommendLevelMapper extends BaseMapper { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictRewardsTypeMapper.java b/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictRewardsTypeMapper.java deleted file mode 100644 index bf72647..0000000 --- a/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictRewardsTypeMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package edu.ncst.award.mapper.dict; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import edu.ncst.award.model.dict.DictRewardsType; - -/** - *

- * 职位 Mapper 接口 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -public interface DictRewardsTypeMapper extends BaseMapper { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictSecretLevelMapper.java b/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictSecretLevelMapper.java deleted file mode 100644 index ba863dc..0000000 --- a/awardBE/src/main/java/edu/ncst/award/mapper/dict/DictSecretLevelMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package edu.ncst.award.mapper.dict; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import edu.ncst.award.model.dict.DictSecretLevel; - -/** - *

- * 职位 Mapper 接口 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -public interface DictSecretLevelMapper extends BaseMapper { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/mapper/system/ProjectMapper.java b/awardBE/src/main/java/edu/ncst/award/mapper/system/ProjectMapper.java deleted file mode 100644 index b52a941..0000000 --- a/awardBE/src/main/java/edu/ncst/award/mapper/system/ProjectMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package edu.ncst.award.mapper.system; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import edu.ncst.award.model.project.Project; -import edu.ncst.award.model.system.Menu; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Repository; - -import java.util.List; - -/** - * project Mapper 接口 - */ -@Repository -public interface ProjectMapper extends BaseMapper { -} diff --git a/awardBE/src/main/java/edu/ncst/award/model/dict/DictCountry.java b/awardBE/src/main/java/edu/ncst/award/model/dict/DictCountry.java deleted file mode 100644 index 19444cb..0000000 --- a/awardBE/src/main/java/edu/ncst/award/model/dict/DictCountry.java +++ /dev/null @@ -1,53 +0,0 @@ -package edu.ncst.award.model.dict; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - *

- * 职位 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -@Getter -@Setter -@Accessors(chain = true) -@TableName("dict_country") -@ApiModel(value = "DictCountry对象", description = "职位") -public class DictCountry implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty("ID") - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - @ApiModelProperty("符号") - @TableField("value") - private String value; - - @ApiModelProperty("显示文本") - @TableField("label") - private String label; - - @ApiModelProperty("排序") - @TableField("sort") - private Integer sort; - - @ApiModelProperty("是否启用") - @TableField("enable") - private Boolean enable; - - -} diff --git a/awardBE/src/main/java/edu/ncst/award/model/dict/DictEvaluateLevel.java b/awardBE/src/main/java/edu/ncst/award/model/dict/DictEvaluateLevel.java deleted file mode 100644 index 74c8f52..0000000 --- a/awardBE/src/main/java/edu/ncst/award/model/dict/DictEvaluateLevel.java +++ /dev/null @@ -1,53 +0,0 @@ -package edu.ncst.award.model.dict; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - *

- * 职位 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -@Getter -@Setter -@Accessors(chain = true) -@TableName("dict_evaluate_level") -@ApiModel(value = "DictEvaluateLevel对象", description = "职位") -public class DictEvaluateLevel implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty("ID") - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - @ApiModelProperty("符号") - @TableField("value") - private String value; - - @ApiModelProperty("显示文本") - @TableField("label") - private String label; - - @ApiModelProperty("排序") - @TableField("sort") - private Integer sort; - - @ApiModelProperty("是否启用") - @TableField("enable") - private Boolean enable; - - -} diff --git a/awardBE/src/main/java/edu/ncst/award/model/dict/DictNation.java b/awardBE/src/main/java/edu/ncst/award/model/dict/DictNation.java deleted file mode 100644 index 595672c..0000000 --- a/awardBE/src/main/java/edu/ncst/award/model/dict/DictNation.java +++ /dev/null @@ -1,53 +0,0 @@ -package edu.ncst.award.model.dict; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - *

- * 职位 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -@Getter -@Setter -@Accessors(chain = true) -@TableName("dict_nation") -@ApiModel(value = "DictNation对象", description = "职位") -public class DictNation implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty("ID") - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - @ApiModelProperty("符号") - @TableField("value") - private String value; - - @ApiModelProperty("显示文本") - @TableField("label") - private String label; - - @ApiModelProperty("排序") - @TableField("sort") - private Integer sort; - - @ApiModelProperty("是否启用") - @TableField("enable") - private Boolean enable; - - -} diff --git a/awardBE/src/main/java/edu/ncst/award/model/dict/DictRecommendLevel.java b/awardBE/src/main/java/edu/ncst/award/model/dict/DictRecommendLevel.java deleted file mode 100644 index 5568157..0000000 --- a/awardBE/src/main/java/edu/ncst/award/model/dict/DictRecommendLevel.java +++ /dev/null @@ -1,53 +0,0 @@ -package edu.ncst.award.model.dict; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - *

- * 职位 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -@Getter -@Setter -@Accessors(chain = true) -@TableName("dict_recommend_level") -@ApiModel(value = "DictRecommendLevel对象", description = "职位") -public class DictRecommendLevel implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty("ID") - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - @ApiModelProperty("符号") - @TableField("value") - private String value; - - @ApiModelProperty("显示文本") - @TableField("label") - private String label; - - @ApiModelProperty("排序") - @TableField("sort") - private Integer sort; - - @ApiModelProperty("是否启用") - @TableField("enable") - private Boolean enable; - - -} diff --git a/awardBE/src/main/java/edu/ncst/award/model/dict/DictRewardsType.java b/awardBE/src/main/java/edu/ncst/award/model/dict/DictRewardsType.java deleted file mode 100644 index 37ae35f..0000000 --- a/awardBE/src/main/java/edu/ncst/award/model/dict/DictRewardsType.java +++ /dev/null @@ -1,53 +0,0 @@ -package edu.ncst.award.model.dict; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - *

- * 职位 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -@Getter -@Setter -@Accessors(chain = true) -@TableName("dict_rewards_type") -@ApiModel(value = "DictRewardsType对象", description = "职位") -public class DictRewardsType implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty("ID") - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - @ApiModelProperty("符号") - @TableField("value") - private String value; - - @ApiModelProperty("显示文本") - @TableField("label") - private String label; - - @ApiModelProperty("排序") - @TableField("sort") - private Integer sort; - - @ApiModelProperty("是否启用") - @TableField("enable") - private Boolean enable; - - -} diff --git a/awardBE/src/main/java/edu/ncst/award/model/dict/DictSecretLevel.java b/awardBE/src/main/java/edu/ncst/award/model/dict/DictSecretLevel.java deleted file mode 100644 index 38d72d4..0000000 --- a/awardBE/src/main/java/edu/ncst/award/model/dict/DictSecretLevel.java +++ /dev/null @@ -1,53 +0,0 @@ -package edu.ncst.award.model.dict; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - *

- * 职位 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -@Getter -@Setter -@Accessors(chain = true) -@TableName("dict_secret_level") -@ApiModel(value = "DictSecretLevel对象", description = "职位") -public class DictSecretLevel implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty("ID") - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - - @ApiModelProperty("符号") - @TableField("value") - private String value; - - @ApiModelProperty("显示文本") - @TableField("label") - private String label; - - @ApiModelProperty("排序") - @TableField("sort") - private Integer sort; - - @ApiModelProperty("是否启用") - @TableField("enable") - private Boolean enable; - - -} diff --git a/awardBE/src/main/java/edu/ncst/award/model/log/LoginLog.java b/awardBE/src/main/java/edu/ncst/award/model/log/LoginLog.java index 3d46506..dfd2e36 100644 --- a/awardBE/src/main/java/edu/ncst/award/model/log/LoginLog.java +++ b/awardBE/src/main/java/edu/ncst/award/model/log/LoginLog.java @@ -4,11 +4,11 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import edu.ncst.award.model.system.User; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.security.core.userdetails.User; import java.io.Serializable; import java.util.Date; diff --git a/awardBE/src/main/java/edu/ncst/award/model/project/Project.java b/awardBE/src/main/java/edu/ncst/award/model/project/Project.java deleted file mode 100644 index a99e928..0000000 --- a/awardBE/src/main/java/edu/ncst/award/model/project/Project.java +++ /dev/null @@ -1,210 +0,0 @@ -package edu.ncst.award.model.project; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; - -import java.io.Serializable; -import java.time.LocalDate; -import java.time.LocalDateTime; - -import io.swagger.annotations.ApiModel; -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; - -/** - *

- * - *

- * - * @author Erwin Feng - * @since 2022-03-16 - */ -@Getter -@Setter -@Accessors(chain = true) -@TableName("project") -@ApiModel(value = "ProjectEntity对象") -public class Project implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty("项目ID") - @TableId(value = "Id", type = IdType.ASSIGN_ID) - private Long id; - - @ApiModelProperty("项目中文名") - @TableField("chn_name") - private String chnName; - - @ApiModelProperty("项目英文名") - @TableField("eng_name") - private String engName; - - @ApiModelProperty("主要完成人") - @TableField("response_person_id") - private Long responsePersonId; - - @ApiModelProperty("主要完成单位") - @TableField("unit_id") - private Integer unitId; - - @ApiModelProperty("完成单位贡献情况阐述") - @TableField("unit_contribution") - private String unitContribution; - - @ApiModelProperty("奖励类别 APP_TECH:应用技术成果 BASIC_TECH:基础技术成果 EXTENSION:推广成果 TECH_BASIC:技术基础成果 SOFT_TECH:软科学成果 OTHER:其他") - @TableField("award_type") - private Integer awardType; - - @ApiModelProperty("推荐单位") - @TableField("recomend_unit_id") - private Integer recomendUnitId; - - @ApiModelProperty("推荐等级") - @TableField("recomend_level") - private Integer recomendLevel; - - @ApiModelProperty("推荐日期") - @TableField("recommend_date") - private LocalDate recommendDate; - - @ApiModelProperty("密级") - @TableField("secret_level") - private Integer secretLevel; - - @ApiModelProperty("主管部门") - @TableField("department_id") - private Integer departmentId; - - @ApiModelProperty("成果登记号") - @TableField("achieve_code") - private String achieveCode; - - @ApiModelProperty("主题词") - @TableField("theme") - private String theme; - - @ApiModelProperty("任务来源 A、国家计划 B、省部级计划、集团公司计划 C、计划外 ") - @TableField("task_source") - private String taskSource; - - @ApiModelProperty("专业分类") - @TableField("major_category_id") - private Integer majorCategoryId; - - @ApiModelProperty("计划名称") - @TableField("plan") - private String plan; - - @ApiModelProperty("计划编号") - @TableField("plan_code") - private String planCode; - - @ApiModelProperty("项目开始日期") - @TableField("project_start_time") - private LocalDate projectStartTime; - - @ApiModelProperty("项目终止日期") - @TableField("project_end_time") - private LocalDate projectEndTime; - - @ApiModelProperty("应用领域 A、民用 B、军民通用 ") - @TableField("app_field") - private String appField; - - @ApiModelProperty("应用日期") - @TableField("app_date") - private LocalDate appDate; - - @ApiModelProperty("成果评价机构") - @TableField("evaluate_org_id") - private Integer evaluateOrgId; - - @ApiModelProperty("评价水平") - @TableField("evaluate_level") - private Integer evaluateLevel; - - @ApiModelProperty("评价日期") - @TableField("evaluate_date") - private LocalDate evaluateDate; - - - @ApiModelProperty("授权发明专利") - @TableField("invention_patent") - private Integer inventionPatent; - - @ApiModelProperty("授权的其他知识产权") - @TableField("intellectual_property") - private Integer intellectualProperty; - - @ApiModelProperty("项目简介") - @TableField("project_info") - private String projectInfo; - - @ApiModelProperty("技术创新") - @TableField("tech_innovation") - private String techInnovation; - - @ApiModelProperty("技术局限性") - @TableField("tech_limitation") - private String techLimitation; - - @ApiModelProperty("第三方评价描述") - @TableField("third_evaluation") - private String thirdEvaluation; - - @ApiModelProperty("应用推广情况概述") - @TableField("application_summary") - private String applicationSummary; - - @ApiModelProperty("直接经济效益概述") - @TableField("direct_benifit") - private String directBenifit; - - @ApiModelProperty("间接经济效益概述") - @TableField("indirect_benifit") - private String indirectBenifit; - - @ApiModelProperty("社会效益概述") - @TableField("social_benifit") - private String socialBenifit; - - @ApiModelProperty("项目状态 {0:保存;1:提交;2::已分配专家;3:专家评审通过;4:已通过;6:专家评审未通过;7:打回修改;8:已拒绝;-1:无效项目") - @TableField("status") - private Integer status; - - @ApiModelProperty("项目备注") - @TableField("remark") - private String remark; - - @ApiModelProperty("创建者") - @TableField("create_user_id") - private Integer createUserId; - - - @ApiModelProperty("创建时间") - @TableField("create_time") - private LocalDateTime createTime; - - @ApiModelProperty("最后修改者") - @TableField("last_modify_user_id") - private Integer lastModifyUserId; - - @ApiModelProperty("最后修改时间") - @TableField("last_modify_time") - private LocalDateTime lastModifyTime; - - @ApiModelProperty("删除者") - @TableField("delete_user_id") - private Integer deleteUserId; - - @ApiModelProperty("删除时间") - @TableField("delete_time") - private LocalDate deleteTime; - - -} diff --git a/awardBE/src/main/java/edu/ncst/award/model/system/User.java b/awardBE/src/main/java/edu/ncst/award/model/system/User.java index f8391b6..986e41c 100644 --- a/awardBE/src/main/java/edu/ncst/award/model/system/User.java +++ b/awardBE/src/main/java/edu/ncst/award/model/system/User.java @@ -147,6 +147,10 @@ public class User extends BaseEntity implements Serializable, UserDetails { @TableField(exist = false) private List roles; + @ApiModelProperty(value = "角色组") + @TableField(exist = false) + private Long[] roleIds; + @ApiModelProperty(value = "是否启用 1:启用 0:禁用") @TableField("enable") private String enable; @@ -156,6 +160,14 @@ public class User extends BaseEntity implements Serializable, UserDetails { @TableLogic private String delFlag; + /** + * 数据权限 当前角色ID + */ + @ApiModelProperty(value = "角色ID") + @TableField(exist = false) + private Long roleId; + + public User() { } diff --git a/awardBE/src/main/java/edu/ncst/award/service/IDictCountry.java b/awardBE/src/main/java/edu/ncst/award/service/IDictCountry.java deleted file mode 100644 index 85d5273..0000000 --- a/awardBE/src/main/java/edu/ncst/award/service/IDictCountry.java +++ /dev/null @@ -1,16 +0,0 @@ -package edu.ncst.award.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import edu.ncst.award.model.dict.DictCountry; - -/** - *

- * 职位 服务类 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -public interface IDictCountry extends IService { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/service/IDictEvaluateLevel.java b/awardBE/src/main/java/edu/ncst/award/service/IDictEvaluateLevel.java deleted file mode 100644 index e8b55cf..0000000 --- a/awardBE/src/main/java/edu/ncst/award/service/IDictEvaluateLevel.java +++ /dev/null @@ -1,16 +0,0 @@ -package edu.ncst.award.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import edu.ncst.award.model.dict.DictEvaluateLevel; - -/** - *

- * 职位 服务类 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -public interface IDictEvaluateLevel extends IService { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/service/IDictNation.java b/awardBE/src/main/java/edu/ncst/award/service/IDictNation.java deleted file mode 100644 index 75e1c13..0000000 --- a/awardBE/src/main/java/edu/ncst/award/service/IDictNation.java +++ /dev/null @@ -1,16 +0,0 @@ -package edu.ncst.award.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import edu.ncst.award.model.dict.DictNation; - -/** - *

- * 职位 服务类 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -public interface IDictNation extends IService { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/service/IDictRewardsType.java b/awardBE/src/main/java/edu/ncst/award/service/IDictRewardsType.java deleted file mode 100644 index be58126..0000000 --- a/awardBE/src/main/java/edu/ncst/award/service/IDictRewardsType.java +++ /dev/null @@ -1,16 +0,0 @@ -package edu.ncst.award.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import edu.ncst.award.model.dict.DictRewardsType; - -/** - *

- * 职位 服务类 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -public interface IDictRewardsType extends IService { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/service/IDictSecretLevel.java b/awardBE/src/main/java/edu/ncst/award/service/IDictSecretLevel.java deleted file mode 100644 index 8a7714c..0000000 --- a/awardBE/src/main/java/edu/ncst/award/service/IDictSecretLevel.java +++ /dev/null @@ -1,16 +0,0 @@ -package edu.ncst.award.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import edu.ncst.award.model.dict.DictSecretLevel; - -/** - *

- * 职位 服务类 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -public interface IDictSecretLevel extends IService { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/service/ILoginLogService.java b/awardBE/src/main/java/edu/ncst/award/service/ILoginLogService.java index b516ba5..166b2d8 100644 --- a/awardBE/src/main/java/edu/ncst/award/service/ILoginLogService.java +++ b/awardBE/src/main/java/edu/ncst/award/service/ILoginLogService.java @@ -1,9 +1,8 @@ package edu.ncst.award.service; import edu.ncst.award.model.log.LoginLog; -import edu.ncst.award.vo.ListResultVO; -import edu.ncst.award.vo.param.query.LoginLogQuery; -import org.springframework.stereotype.Service; +import edu.ncst.award.domain.vo.ListResultVO; +import edu.ncst.award.domain.vo.param.query.LoginLogQuery; /** * 登录日志 服务类 diff --git a/awardBE/src/main/java/edu/ncst/award/service/IMenuService.java b/awardBE/src/main/java/edu/ncst/award/service/IMenuService.java index 588de86..8033a79 100644 --- a/awardBE/src/main/java/edu/ncst/award/service/IMenuService.java +++ b/awardBE/src/main/java/edu/ncst/award/service/IMenuService.java @@ -2,10 +2,7 @@ package edu.ncst.award.service; import com.baomidou.mybatisplus.extension.service.IService; import edu.ncst.award.model.system.Menu; -import edu.ncst.award.vo.ListResultVO; -import edu.ncst.award.vo.Query; -import edu.ncst.award.vo.RouterVo; -import edu.ncst.award.vo.param.ResetMenuDTO; +import edu.ncst.award.domain.vo.RouterVo; import java.util.List; diff --git a/awardBE/src/main/java/edu/ncst/award/service/IProjectService.java b/awardBE/src/main/java/edu/ncst/award/service/IProjectService.java deleted file mode 100644 index 409afbd..0000000 --- a/awardBE/src/main/java/edu/ncst/award/service/IProjectService.java +++ /dev/null @@ -1,7 +0,0 @@ -package edu.ncst.award.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import edu.ncst.award.model.project.Project; - -public interface IProjectService extends IService { -} diff --git a/awardBE/src/main/java/edu/ncst/award/service/IResourceService.java b/awardBE/src/main/java/edu/ncst/award/service/IResourceService.java index c0d9fc5..b78cc09 100644 --- a/awardBE/src/main/java/edu/ncst/award/service/IResourceService.java +++ b/awardBE/src/main/java/edu/ncst/award/service/IResourceService.java @@ -2,8 +2,8 @@ package edu.ncst.award.service; import com.baomidou.mybatisplus.extension.service.IService; import edu.ncst.award.model.system.Resource; -import edu.ncst.award.vo.ListResultVO; -import edu.ncst.award.vo.Query; +import edu.ncst.award.domain.vo.ListResultVO; +import edu.ncst.award.domain.vo.Query; import java.util.List; diff --git a/awardBE/src/main/java/edu/ncst/award/service/IRoleService.java b/awardBE/src/main/java/edu/ncst/award/service/IRoleService.java new file mode 100644 index 0000000..879868a --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/service/IRoleService.java @@ -0,0 +1,114 @@ +package edu.ncst.award.service; + +import edu.ncst.award.common.core.page.TableDataInfo; +import edu.ncst.award.domain.UserRole; +import edu.ncst.award.domain.vo.param.query.PageQuery; +import edu.ncst.award.model.system.Role; + +import java.util.List; + +/** + * 角色业务层 + * + * @author Lion Li + */ +public interface IRoleService { + /** + * 查询所有角色 + * + * @return 角色列表 + */ + List selectRoleAll(); + + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * @return 角色数据集合信息 + */ + TableDataInfo selectPageRoleList(Role role, PageQuery pageQuery); + + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * @return 角色数据集合信息 + */ + List selectRoleList(Role role); + + /** + * 根据角色编号查询详细信息 + * + * @param roleId 角色id + * @return 角色详细信息 + */ + Role selectRoleById(Long roleId); + + String checkRoleNameUnique(Role role); + + String checkRoleLabelUnique(Role role); + + int insertRole(Role role); + + boolean updateRole(Role role); + + /** + * 修改角色状态 + * + * @param role 角色信息 + * @return 结果 + */ + int updateRoleStatus(Role role); + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * @return 结果 + */ + int deleteRoleByIds(Long[] roleIds); + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * @return 结果 + */ + long countUserRoleByRoleId(Long roleId); + + /** + * 根据用户ID查询角色列表 + * + * @param userId 用户ID + * @return 角色列表 + */ + List selectRolesByUserId(Long userId); + + + /** + * 取消授权用户角色 + * + * @param userRole 用户和角色关联信息 + * @return 结果 + */ + int deleteAuthUser(UserRole userRole); + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要取消授权的用户数据ID + * @return 结果 + */ + int deleteAuthUsers(Long roleId, Long[] userIds); + + + /** + * 批量选择授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要删除的用户数据ID + * @return 结果 + */ + int insertAuthUsers(Long roleId, Long[] userIds); +} diff --git a/awardBE/src/main/java/edu/ncst/award/service/ISysRoleService.java b/awardBE/src/main/java/edu/ncst/award/service/ISysRoleService.java deleted file mode 100644 index 9780f57..0000000 --- a/awardBE/src/main/java/edu/ncst/award/service/ISysRoleService.java +++ /dev/null @@ -1,39 +0,0 @@ -package edu.ncst.award.service; - -import edu.ncst.award.common.core.page.TableDataInfo; -import edu.ncst.award.model.system.Role; -import edu.ncst.award.model.system.User; -import edu.ncst.award.vo.param.query.PageQuery; - -import java.util.List; -import java.util.Set; - -/** - * 角色业务层 - * - * @author Lion Li - */ -public interface ISysRoleService { - /** - * 查询所有角色 - * - * @return 角色列表 - */ - List selectRoleAll(); - - /** - * 根据条件分页查询角色数据 - * - * @param role 角色信息 - * @return 角色数据集合信息 - */ - TableDataInfo selectPageRoleList(Role role, PageQuery pageQuery); - - /** - * 根据条件分页查询角色数据 - * - * @param role 角色信息 - * @return 角色数据集合信息 - */ - List selectRoleList(Role role); -} diff --git a/awardBE/src/main/java/edu/ncst/award/service/IUserService.java b/awardBE/src/main/java/edu/ncst/award/service/IUserService.java index 538668c..444e47d 100644 --- a/awardBE/src/main/java/edu/ncst/award/service/IUserService.java +++ b/awardBE/src/main/java/edu/ncst/award/service/IUserService.java @@ -4,11 +4,10 @@ import com.baomidou.mybatisplus.extension.service.IService; import edu.ncst.award.common.core.page.TableDataInfo; import edu.ncst.award.model.system.Role; import edu.ncst.award.model.system.User; -import edu.ncst.award.vo.ListResultVO; -import edu.ncst.award.vo.param.CurrentUserDTO; -import edu.ncst.award.vo.param.query.PageQuery; -import edu.ncst.award.vo.param.query.UserQuery; -import edu.ncst.award.vo.result.UserInfoVO; +import edu.ncst.award.domain.vo.ListResultVO; +import edu.ncst.award.domain.vo.param.query.PageQuery; +import edu.ncst.award.domain.vo.param.query.UserQuery; +import edu.ncst.award.domain.vo.result.UserInfoVO; import java.util.List; @@ -19,7 +18,7 @@ public interface IUserService extends IService { /** * 获取用户信息列表 * - * @param user user实体类对象 + * @param user user实体类对象 * @param pageQuery 分页参数 * @return antdPro tableDataSource */ @@ -27,7 +26,7 @@ public interface IUserService extends IService { ListResultVO getUserList(); - CurrentUserDTO getCurrentUser(); + User getCurrentUser(); List getRoles(); @@ -58,7 +57,6 @@ public interface IUserService extends IService { /** * 校验用户手机号是否唯一 * - * * @param user@return 结果 */ String checkUserMobilePhoneUnique(User user); @@ -93,4 +91,31 @@ public interface IUserService extends IService { * @return 结果 */ int deleteUserByIds(Long[] userIds); + + /** + * 根据条件分页查询已分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + TableDataInfo selectAllocatedList(User user, PageQuery pageQuery); + + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + TableDataInfo selectUnallocatedList(User user, PageQuery pageQuery); + + + /** + * 用户授权角色 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + void insertUserAuth(Long userId, Long[] roleIds); + } diff --git a/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictCountryImpl.java b/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictCountryImpl.java deleted file mode 100644 index 0de1e3d..0000000 --- a/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictCountryImpl.java +++ /dev/null @@ -1,22 +0,0 @@ -package edu.ncst.award.service.impl.dict; - - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import edu.ncst.award.mapper.dict.DictCountryMapper; -import edu.ncst.award.model.dict.DictCountry; -import edu.ncst.award.service.IDictCountry; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - *

- * 职位 服务实现类 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -@Service -public class DictCountryImpl extends ServiceImpl implements IDictCountry { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictEvaluateLevelImpl.java b/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictEvaluateLevelImpl.java deleted file mode 100644 index 5560521..0000000 --- a/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictEvaluateLevelImpl.java +++ /dev/null @@ -1,21 +0,0 @@ -package edu.ncst.award.service.impl.dict; - - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import edu.ncst.award.mapper.dict.DictEvaluateLevelMapper; -import edu.ncst.award.model.dict.DictEvaluateLevel; -import edu.ncst.award.service.IDictEvaluateLevel; -import org.springframework.stereotype.Service; - -/** - *

- * 职位 服务实现类 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -@Service -public class DictEvaluateLevelImpl extends ServiceImpl implements IDictEvaluateLevel { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictNationImpl.java b/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictNationImpl.java deleted file mode 100644 index 5ec245f..0000000 --- a/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictNationImpl.java +++ /dev/null @@ -1,21 +0,0 @@ -package edu.ncst.award.service.impl.dict; - - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import edu.ncst.award.mapper.dict.DictNationMapper; -import edu.ncst.award.model.dict.DictNation; -import edu.ncst.award.service.IDictNation; -import org.springframework.stereotype.Service; - -/** - *

- * 职位 服务实现类 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -@Service -public class DictNationImpl extends ServiceImpl implements IDictNation { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictRewardsTypeImpl.java b/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictRewardsTypeImpl.java deleted file mode 100644 index 447ae08..0000000 --- a/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictRewardsTypeImpl.java +++ /dev/null @@ -1,21 +0,0 @@ -package edu.ncst.award.service.impl.dict; - - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import edu.ncst.award.mapper.dict.DictRewardsTypeMapper; -import edu.ncst.award.model.dict.DictRewardsType; -import edu.ncst.award.service.IDictRewardsType; -import org.springframework.stereotype.Service; - -/** - *

- * 职位 服务实现类 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -@Service -public class DictRewardsTypeImpl extends ServiceImpl implements IDictRewardsType { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictSecretLevelImpl.java b/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictSecretLevelImpl.java deleted file mode 100644 index b37fccd..0000000 --- a/awardBE/src/main/java/edu/ncst/award/service/impl/dict/DictSecretLevelImpl.java +++ /dev/null @@ -1,21 +0,0 @@ -package edu.ncst.award.service.impl.dict; - - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import edu.ncst.award.mapper.dict.DictSecretLevelMapper; -import edu.ncst.award.model.dict.DictSecretLevel; -import edu.ncst.award.service.IDictSecretLevel; -import org.springframework.stereotype.Service; - -/** - *

- * 职位 服务实现类 - *

- * - * @author Erwin Feng - * @since 2022-03-21 - */ -@Service -public class DictSecretLevelImpl extends ServiceImpl implements IDictSecretLevel { - -} diff --git a/awardBE/src/main/java/edu/ncst/award/service/impl/log/LoginLogServiceImpl.java b/awardBE/src/main/java/edu/ncst/award/service/impl/log/LoginLogServiceImpl.java index e4c5dff..4952314 100644 --- a/awardBE/src/main/java/edu/ncst/award/service/impl/log/LoginLogServiceImpl.java +++ b/awardBE/src/main/java/edu/ncst/award/service/impl/log/LoginLogServiceImpl.java @@ -1,20 +1,11 @@ package edu.ncst.award.service.impl.log; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - import edu.ncst.award.model.log.LoginLog; import edu.ncst.award.service.ILoginLogService; -import edu.ncst.award.vo.ListResultVO; -import edu.ncst.award.vo.param.query.LoginLogQuery; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.Authentication; +import edu.ncst.award.domain.vo.ListResultVO; +import edu.ncst.award.domain.vo.param.query.LoginLogQuery; import org.springframework.stereotype.Service; -import javax.servlet.http.HttpServletRequest; -import java.util.Date; -import java.util.Set; - /** * 登录日志 服务实现类 */ diff --git a/awardBE/src/main/java/edu/ncst/award/service/impl/project/ProjectServiceImpl.java b/awardBE/src/main/java/edu/ncst/award/service/impl/project/ProjectServiceImpl.java deleted file mode 100644 index 2a659f0..0000000 --- a/awardBE/src/main/java/edu/ncst/award/service/impl/project/ProjectServiceImpl.java +++ /dev/null @@ -1,14 +0,0 @@ -package edu.ncst.award.service.impl.project; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import edu.ncst.award.mapper.system.ProjectMapper; -import edu.ncst.award.model.project.Project; -import edu.ncst.award.service.IProjectService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - - -@Service -@Slf4j -public class ProjectServiceImpl extends ServiceImpl implements IProjectService { -} diff --git a/awardBE/src/main/java/edu/ncst/award/service/impl/system/MenuServiceImpl.java b/awardBE/src/main/java/edu/ncst/award/service/impl/system/MenuServiceImpl.java index 1d5a088..aa2fb65 100644 --- a/awardBE/src/main/java/edu/ncst/award/service/impl/system/MenuServiceImpl.java +++ b/awardBE/src/main/java/edu/ncst/award/service/impl/system/MenuServiceImpl.java @@ -2,16 +2,15 @@ package edu.ncst.award.service.impl.system; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import edu.ncst.award.common.util.treeUtils.TreeUtils; -import edu.ncst.award.mapper.system.MenuMapper; +import edu.ncst.award.mapper.MenuMapper; import edu.ncst.award.model.system.Menu; import edu.ncst.award.service.IMenuService; -import edu.ncst.award.vo.RouterVo; +import edu.ncst.award.domain.vo.RouterVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.*; -import java.util.stream.Collectors; /** * 菜单 服务实现类 @@ -27,7 +26,6 @@ public class MenuServiceImpl extends ServiceImpl implements IM * 获取当前用户能够访问的路由菜单列表 * * @param userId 用户id - * @return */ @Override public List selectMenuTreeByUserId(Integer userId) { diff --git a/awardBE/src/main/java/edu/ncst/award/service/impl/system/ResourceServiceImpl.java b/awardBE/src/main/java/edu/ncst/award/service/impl/system/ResourceServiceImpl.java index 65d8f37..2a8ec31 100644 --- a/awardBE/src/main/java/edu/ncst/award/service/impl/system/ResourceServiceImpl.java +++ b/awardBE/src/main/java/edu/ncst/award/service/impl/system/ResourceServiceImpl.java @@ -7,11 +7,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import edu.ncst.award.exception.BusinessException; import edu.ncst.award.exception.CodeMsg; -import edu.ncst.award.mapper.system.ResourceMapper; +import edu.ncst.award.mapper.ResourceMapper; import edu.ncst.award.model.system.Resource; import edu.ncst.award.service.IResourceService; -import edu.ncst.award.vo.ListResultVO; -import edu.ncst.award.vo.Query; +import edu.ncst.award.domain.vo.ListResultVO; +import edu.ncst.award.domain.vo.Query; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; diff --git a/awardBE/src/main/java/edu/ncst/award/service/impl/system/RoleServiceImpl.java b/awardBE/src/main/java/edu/ncst/award/service/impl/system/RoleServiceImpl.java new file mode 100644 index 0000000..eac33f4 --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/service/impl/system/RoleServiceImpl.java @@ -0,0 +1,220 @@ +package edu.ncst.award.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import edu.ncst.award.common.constant.UserConstants; +import edu.ncst.award.common.core.exception.ServiceException; +import edu.ncst.award.common.core.page.TableDataInfo; +import edu.ncst.award.common.util.spring.SpringUtils; +import edu.ncst.award.domain.UserRole; +import edu.ncst.award.domain.vo.param.query.PageQuery; +import edu.ncst.award.mapper.RoleMapper; +import edu.ncst.award.mapper.UserRoleMapper; +import edu.ncst.award.model.system.Role; +import edu.ncst.award.service.IRoleService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * 角色 业务层处理 + * + * @author Lion Li + */ +@RequiredArgsConstructor +@Service +public class RoleServiceImpl implements IRoleService { + + private final RoleMapper baseMapper; + private final UserRoleMapper userRoleMapper; + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + @Override + @Transactional + public List selectRoleAll() { +// 若依框架是这样写的但是不太理解 +// SpringUtils.getAopProxy(this).selectRoleList(new Role()); +// SpringUtils.getBean(SysRoleServiceImpl.class).selectRoleList(new Role()); + return SpringUtils.getAopProxy(this).selectRoleList(new Role()); + } + + + @Override + public TableDataInfo selectPageRoleList(Role role, PageQuery pageQuery) { + Page page = baseMapper.selectPageRoleList(pageQuery.build(), role); + return TableDataInfo.build(page); + } + + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * @return 角色数据集合信息 + */ + @Override + public List selectRoleList(Role role) { + return baseMapper.selectRoleList(role); + } + + /** + * 根据角色编号查询详细信息 + * + * @param roleId 角色id + * @return 角色详细信息 + */ + @Override + public Role selectRoleById(Long roleId) { + return baseMapper.selectById(roleId); + } + + @Override + public String checkRoleNameUnique(Role role) { + if (baseMapper.exists(new LambdaQueryWrapper().eq(Role::getName, role.getName()))) { + return UserConstants.NOT_UNIQUE; + } else { + return UserConstants.UNIQUE; + } + } + + @Override + public String checkRoleLabelUnique(Role role) { + if (baseMapper.exists(new LambdaQueryWrapper() + .eq(Role::getLabel, role.getLabel()) + .ne(ObjectUtil.isNotNull(role.getRoleId()), Role::getRoleId, role.getRoleId()) + )) { + return UserConstants.NOT_UNIQUE; + } else { + return UserConstants.UNIQUE; + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int insertRole(Role role) { +// // 新增角色信息 +// baseMapper.insert(role); +// return insertRoleMenu(role); + return baseMapper.insert(role); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean updateRole(Role role) { +// // 修改角色信息 +// baseMapper.updateById(role); +// // 删除角色与菜单关联 +// roleMenuMapper.delete(new LambdaQueryWrapper().eq(SysRoleMenu::getRoleId, role.getRoleId())); + int i = baseMapper.updateById(role); + return i > 0; + } + + /** + * 修改角色状态 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public int updateRoleStatus(Role role) { + return baseMapper.updateById(role); + } + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * @return 结果 + */ + @Override + public int deleteRoleByIds(Long[] roleIds) { + //TODO 删除角色的同时删除和角色绑定的菜单和资源 + Arrays.stream(roleIds).forEach(roleId -> { + if (countUserRoleByRoleId(roleId) > 0) { + throw new ServiceException(String.format("%1$s已分配,不能删除", roleId)); + } + }); + return baseMapper.deleteBatchIds(Arrays.asList(roleIds)); + } + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * @return 结果 + */ + @Override + public long countUserRoleByRoleId(Long roleId) { + return userRoleMapper.selectCount(new LambdaQueryWrapper().eq(UserRole::getRoleId, roleId)); + } + + /** + * 根据用户ID查询角色列表 + * + * @param userId 用户ID + * @return 角色列表 + */ + @Override + public List selectRolesByUserId(Long userId) { + return baseMapper.getUserRolesById(userId); + } + + /** + * 取消授权用户角色 + * + * @param userRole 用户和角色关联信息 + * @return 结果 + */ + @Override + public int deleteAuthUser(UserRole userRole) { + return userRoleMapper.delete(new LambdaQueryWrapper() + .eq(UserRole::getRoleId, userRole.getRoleId()) + .eq(UserRole::getUserId, userRole.getUserId())); + } + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要取消授权的用户数据ID + * @return 结果 + */ + @Override + public int deleteAuthUsers(Long roleId, Long[] userIds) { + return userRoleMapper.delete(new LambdaQueryWrapper() + .eq(UserRole::getRoleId, roleId) + .in(UserRole::getUserId, Arrays.asList(userIds))); + } + + /** + * 批量选择授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要删除的用户数据ID + * @return 结果 + */ + @Override + public int insertAuthUsers(Long roleId, Long[] userIds) { + // 新增用户与角色管理 + int rows = 1; + List list = new ArrayList<>(); + for (Long userId : userIds) { + UserRole ur = new UserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + if (list.size() > 0) { + rows = userRoleMapper.insertBatch(list) ? list.size() : 0; + } + return rows; + } +} diff --git a/awardBE/src/main/java/edu/ncst/award/service/impl/system/SysRoleServiceImpl.java b/awardBE/src/main/java/edu/ncst/award/service/impl/system/SysRoleServiceImpl.java deleted file mode 100644 index 5caa893..0000000 --- a/awardBE/src/main/java/edu/ncst/award/service/impl/system/SysRoleServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package edu.ncst.award.service.impl.system; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import edu.ncst.award.common.core.page.TableDataInfo; -import edu.ncst.award.common.util.spring.SpringUtils; -import edu.ncst.award.mapper.system.SysRoleMapper; -import edu.ncst.award.model.system.Role; -import edu.ncst.award.model.system.User; -import edu.ncst.award.service.ISysRoleService; -import edu.ncst.award.vo.param.query.PageQuery; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -/** - * 角色 业务层处理 - * - * @author Lion Li - */ -@RequiredArgsConstructor -@Service -public class SysRoleServiceImpl implements ISysRoleService { - - private final SysRoleMapper baseMapper; - - /** - * 查询所有角色 - * - * @return 角色列表 - */ - @Override - @Transactional - public List selectRoleAll() { -// 若依框架是这样写的但是不太理解 -// SpringUtils.getAopProxy(this).selectRoleList(new Role()); -// SpringUtils.getBean(SysRoleServiceImpl.class).selectRoleList(new Role()); - return SpringUtils.getAopProxy(this).selectRoleList(new Role()); - } - - - @Override - public TableDataInfo selectPageRoleList(Role role, PageQuery pageQuery) { - Page page = baseMapper.selectPageRoleList(pageQuery.build(), role); - return TableDataInfo.build(page); - } - - /** - * 根据条件分页查询角色数据 - * - * @param role 角色信息 - * @return 角色数据集合信息 - */ - @Override - public List selectRoleList(Role role) { - return baseMapper.selectRoleList(role); - } -} diff --git a/awardBE/src/main/java/edu/ncst/award/service/impl/system/UserServiceImpl.java b/awardBE/src/main/java/edu/ncst/award/service/impl/system/UserServiceImpl.java index 66fc7f8..df3e25f 100644 --- a/awardBE/src/main/java/edu/ncst/award/service/impl/system/UserServiceImpl.java +++ b/awardBE/src/main/java/edu/ncst/award/service/impl/system/UserServiceImpl.java @@ -8,15 +8,18 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import edu.ncst.award.common.constant.UserConstants; import edu.ncst.award.common.core.exception.ServiceException; import edu.ncst.award.common.core.page.TableDataInfo; -import edu.ncst.award.mapper.system.UserMapper; +import edu.ncst.award.config.security.CustomUserCache; +import edu.ncst.award.domain.UserRole; +import edu.ncst.award.domain.vo.ListResultVO; +import edu.ncst.award.domain.vo.param.CurrentUserDTO; +import edu.ncst.award.domain.vo.param.query.PageQuery; +import edu.ncst.award.domain.vo.param.query.UserQuery; +import edu.ncst.award.domain.vo.result.UserInfoVO; +import edu.ncst.award.mapper.UserMapper; +import edu.ncst.award.mapper.UserRoleMapper; import edu.ncst.award.model.system.Role; import edu.ncst.award.model.system.User; import edu.ncst.award.service.IUserService; -import edu.ncst.award.vo.ListResultVO; -import edu.ncst.award.vo.param.CurrentUserDTO; -import edu.ncst.award.vo.param.query.PageQuery; -import edu.ncst.award.vo.param.query.UserQuery; -import edu.ncst.award.vo.result.UserInfoVO; import lombok.RequiredArgsConstructor; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; @@ -35,6 +38,8 @@ import java.util.List; public class UserServiceImpl extends ServiceImpl implements IUserService, UserDetailsService { private final UserMapper baseMapper; + private final UserRoleMapper userRoleMapper; + private final CustomUserCache userCache; @Override public UserInfoVO getUserInfo(UserQuery query) { @@ -61,12 +66,8 @@ public class UserServiceImpl extends ServiceImpl implements IU } @Override - public CurrentUserDTO getCurrentUser() { - UserInfoVO details = (UserInfoVO) SecurityContextHolder.getContext().getAuthentication().getDetails(); - CurrentUserDTO user = new CurrentUserDTO(); - user.setUsername(details.getUsername()); - user.setNickname(details.getFullName()); - return user; + public User getCurrentUser() { + return userCache.getLoginUser(); } @@ -137,6 +138,7 @@ public class UserServiceImpl extends ServiceImpl implements IU } return UserConstants.UNIQUE; } + /** * 校验用户是否允许操作 * @@ -160,12 +162,34 @@ public class UserServiceImpl extends ServiceImpl implements IU public int updateUser(User user) { Long userId = user.getId(); // 删除用户与角色关联 -// userRoleMapper.delete(new LambdaQueryWrapper().eq(SysUserRole::getUserId, userId)); + userRoleMapper.delete(new LambdaQueryWrapper().eq(UserRole::getUserId, userId)); // 新增用户与角色管理 -// insertUserRole(user); + insertUserRole(user); return baseMapper.updateById(user); } + /** + * 新增用户角色信息 + * + * @param user 用户对象 + */ + public void insertUserRole(User user) { + Long[] roles = user.getRoleIds(); + if (ObjectUtil.isNotNull(roles)) { + // 新增用户与角色管理 + List list = new ArrayList<>(); + for (Long roleId : roles) { + UserRole ur = new UserRole(); + ur.setUserId(user.getId()); + ur.setRoleId(roleId); + list.add(ur); + } + if (list.size() > 0) { + userRoleMapper.insertBatch(list); + } + } + } + /** * 通过用户ID查询用户 * @@ -180,6 +204,7 @@ public class UserServiceImpl extends ServiceImpl implements IU /** * 批量删除用户信息 * 依靠mybatis的逻辑删除是不能记录删除人的id以后重写 + * * @param userIds 需要删除的用户ID * @return 结果 */ @@ -191,10 +216,35 @@ public class UserServiceImpl extends ServiceImpl implements IU } List ids = Arrays.asList(userIds); // 删除用户与角色关联 -// userRoleMapper.delete(new LambdaQueryWrapper().in(SysUserRole::getUserId, ids)); + userRoleMapper.delete(new LambdaQueryWrapper().in(UserRole::getUserId, ids)); return baseMapper.deleteBatchIds(ids); } + /** + * 根据条件分页查询已分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + @Override + public TableDataInfo selectAllocatedList(User user, PageQuery pageQuery) { + Page page = baseMapper.selectAllocatedList(pageQuery.build(), user); + return TableDataInfo.build(page); + } + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + @Override + public TableDataInfo selectUnallocatedList(User user, PageQuery pageQuery) { + Page page = baseMapper.selectUnallocatedList(pageQuery.build(), user); + return TableDataInfo.build(page); + } + + @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = getOne(new QueryWrapper().lambda().eq(User::getUsername, username)); @@ -204,4 +254,40 @@ public class UserServiceImpl extends ServiceImpl implements IU user.setRoles(baseMapper.getUserRolesById(user.getId())); return user; } + + /** + * 用户授权角色 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void insertUserAuth(Long userId, Long[] roleIds) { + userRoleMapper.delete(new LambdaQueryWrapper() + .eq(UserRole::getUserId, userId)); + insertUserRole(userId, roleIds); + } + + /** + * 新增用户角色信息 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + public void insertUserRole(Long userId, Long[] roleIds) { + if (ObjectUtil.isNotNull(roleIds)) { + // 新增用户与角色管理 + List list = new ArrayList<>(); + for (Long roleId : roleIds) { + UserRole ur = new UserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + if (list.size() > 0) { + userRoleMapper.insertBatch(list); + } + } + } } diff --git a/awardBE/src/main/java/edu/ncst/award/utils/ResponseUtils.java b/awardBE/src/main/java/edu/ncst/award/utils/ResponseUtils.java index 77d2b95..f3b9a9f 100644 --- a/awardBE/src/main/java/edu/ncst/award/utils/ResponseUtils.java +++ b/awardBE/src/main/java/edu/ncst/award/utils/ResponseUtils.java @@ -2,7 +2,7 @@ package edu.ncst.award.utils; import com.fasterxml.jackson.databind.ObjectMapper; import edu.ncst.award.exception.CodeMsg; -import edu.ncst.award.vo.ResultVO; +import edu.ncst.award.domain.vo.R; import org.springframework.http.ResponseEntity; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; @@ -21,12 +21,12 @@ public class ResponseUtils { // 成功 // 成功 public static ResponseEntity success(String msg, T data) { - ResultVO resultVO = new ResultVO<>(); - resultVO.setCode(0); - resultVO.setMsg(msg); - resultVO.setData(data); + R r = new R<>(); + r.setCode(0); + r.setMsg(msg); + r.setData(data); - return ResponseEntity.ok(resultVO); + return ResponseEntity.ok(r); } public static ResponseEntity success(Object data) { @@ -43,10 +43,10 @@ public class ResponseUtils { // 失败 public static ResponseEntity error(Integer code, String msg) { - ResultVO resultVO = new ResultVO<>(); - resultVO.setCode(code); - resultVO.setMsg(msg); - return ResponseEntity.ok().body(resultVO); + R r = new R<>(); + r.setCode(code); + r.setMsg(msg); + return ResponseEntity.ok().body(r); } public static ResponseEntity error(CodeMsg codeMsg) { @@ -55,7 +55,7 @@ public class ResponseUtils { // 输出字段错误信息 public static ResponseEntity fieldError(BindingResult bindingResult) { - ResultVO resultVO = new ResultVO<>(); + R r = new R<>(); String msg = "未知字段错误"; if (bindingResult.hasFieldErrors()) { @@ -67,9 +67,9 @@ public class ResponseUtils { } } - resultVO.setMsg(msg); + r.setMsg(msg); - return ResponseEntity.ok().body(resultVO); + return ResponseEntity.ok().body(r); } // 调用 diff --git a/awardBE/src/main/java/edu/ncst/award/utils/ResultUtils.java b/awardBE/src/main/java/edu/ncst/award/utils/ResultUtils.java deleted file mode 100644 index 971e202..0000000 --- a/awardBE/src/main/java/edu/ncst/award/utils/ResultUtils.java +++ /dev/null @@ -1,84 +0,0 @@ -package edu.ncst.award.utils; - -import edu.ncst.award.exception.CodeMsg; -import edu.ncst.award.vo.ResultVO; - -public class ResultUtils { - - // 成功 - public static ResultVO success(String msg, T data) { - ResultVO resultVO = new ResultVO<>(); - resultVO.setCode(0); - resultVO.setMsg(msg); - resultVO.setData(data); - - return resultVO; - } - - public static ResultVO success(String msg) { - ResultVO resultVO = new ResultVO<>(); - resultVO.setCode(0); - resultVO.setMsg(msg); - resultVO.setData(null); - - return resultVO; - } - - // 成功 - public static ResultVO success(T data) { - ResultVO resultVO = new ResultVO<>(); - resultVO.setCode(0); - resultVO.setMsg("success"); - resultVO.setData(data); - - return resultVO; - } - - public static ResultVO success() { - ResultVO resultVO = new ResultVO<>(); - resultVO.setCode(0); - resultVO.setMsg("success"); - return resultVO; - } - - // 错误 - public static ResultVO error(CodeMsg codeMsg) { - ResultVO resultVO = new ResultVO<>(); - resultVO.setCode(codeMsg.getCode()); - resultVO.setMsg(codeMsg.getMsg()); - resultVO.setData(null); - - return resultVO; - } - - public static ResultVO error() { - ResultVO resultVO = new ResultVO<>(); - resultVO.setMsg("fail"); - resultVO.setData(null); - return resultVO; - } - - - // 错误 - public static ResultVO error(String codeMsg, Boolean showCode) { - ResultVO resultVO = new ResultVO<>(); - resultVO.setMsg(codeMsg); - if (showCode) { - resultVO.setCode(500); - } - resultVO.setData(null); - - return resultVO; - } - - // 错误 - public static ResultVO error(String codeMsg) { - ResultVO resultVO = new ResultVO<>(); - resultVO.setCode(500); - resultVO.setMsg(codeMsg); - resultVO.setData(null); - - return resultVO; - } - -} diff --git a/awardBE/src/main/java/edu/ncst/award/utils/SessionUtils.java b/awardBE/src/main/java/edu/ncst/award/utils/SessionUtils.java index b58d347..e209e15 100644 --- a/awardBE/src/main/java/edu/ncst/award/utils/SessionUtils.java +++ b/awardBE/src/main/java/edu/ncst/award/utils/SessionUtils.java @@ -3,7 +3,7 @@ package edu.ncst.award.utils; import edu.ncst.award.exception.BusinessException; import edu.ncst.award.exception.CodeMsg; import edu.ncst.award.service.IUserService; -import edu.ncst.award.vo.result.UserInfoVO; +import edu.ncst.award.domain.vo.result.UserInfoVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; diff --git a/awardBE/src/main/java/edu/ncst/award/vo/ResultVO.java b/awardBE/src/main/java/edu/ncst/award/vo/ResultVO.java deleted file mode 100644 index f472a55..0000000 --- a/awardBE/src/main/java/edu/ncst/award/vo/ResultVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package edu.ncst.award.vo; - -import com.fasterxml.jackson.annotation.JsonInclude; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -/** - * 统一的接口返回数据格式 - */ -@ApiModel(value = "ResultVO", description = "返回信息") -@Data -public class ResultVO { - private Integer code=0; - private String msg="success"; - // 数据 - @ApiModelProperty(value = "数据", dataType = "Object",name = "data") - @JsonInclude(JsonInclude.Include.NON_EMPTY) - private T data; -} diff --git a/awardBE/src/main/resources/application.yml b/awardBE/src/main/resources/application.yml index ace6a5b..0f6a7e9 100644 --- a/awardBE/src/main/resources/application.yml +++ b/awardBE/src/main/resources/application.yml @@ -54,17 +54,21 @@ swagger: logging: config: classpath:logback.xml level: + edu.ncst.award.mapper: debug edu.ncst.equmanager: info org.springframework: info java.sql: debug # MyBatis Plus mybatis-plus: + global-config: db-config: - logic-delete-field: deleteAt - logic-delete-value: now() - logic-not-delete-value: null + +# logic-delete-field: 这个感觉是全局配置删除字段的但是我还不熟练 + logic-delete-value: '2' + logic-not-delete-value: '0' banner: false # 关闭控制台的 LOGO - mapper-locations: classpath*:/mapper/**/*.xml + mapper-locations: classpath*:/mapper/**/*Mapper.xml configuration: log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl + type-aliases-package: edu.ncst.award.model diff --git a/awardBE/src/main/resources/mapper/MenuMapper.xml b/awardBE/src/main/resources/mapper/MenuMapper.xml index e914e40..a5302bf 100644 --- a/awardBE/src/main/resources/mapper/MenuMapper.xml +++ b/awardBE/src/main/resources/mapper/MenuMapper.xml @@ -1,6 +1,6 @@ - + select id diff --git a/awardBE/src/main/resources/mapper/SysRoleMapper.xml b/awardBE/src/main/resources/mapper/RoleMapper.xml similarity index 88% rename from awardBE/src/main/resources/mapper/SysRoleMapper.xml rename to awardBE/src/main/resources/mapper/RoleMapper.xml index 2566c64..d23cd6d 100644 --- a/awardBE/src/main/resources/mapper/SysRoleMapper.xml +++ b/awardBE/src/main/resources/mapper/RoleMapper.xml @@ -2,7 +2,7 @@ - + @@ -63,4 +63,14 @@ and date_format(r.create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') + + diff --git a/awardBE/src/main/resources/mapper/UserMapper.xml b/awardBE/src/main/resources/mapper/UserMapper.xml index ab9b203..26a1864 100644 --- a/awardBE/src/main/resources/mapper/UserMapper.xml +++ b/awardBE/src/main/resources/mapper/UserMapper.xml @@ -1,6 +1,6 @@ - + @@ -51,7 +51,7 @@ - SELECT * FROM sys_role WHERE id in ( @@ -60,7 +60,7 @@ INNER JOIN sys_user ON sys_user_role.user_id = sys_user.id AND sys_user.id = #{id}) - select u.id, u.nickname, u.username, u.email, u.mobile_phone, u.enable, u.create_time, u.delete_time from sys_user u where true and u.del_flag = '0' @@ -97,4 +97,32 @@ where true and u.`id` = #{userId} + + \ No newline at end of file diff --git a/awardBE/src/test/java/edu/ncst/award/RewardsApplyApplicationTests.java b/awardBE/src/test/java/edu/ncst/award/RewardsApplyApplicationTests.java deleted file mode 100644 index ae7ae20..0000000 --- a/awardBE/src/test/java/edu/ncst/award/RewardsApplyApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package edu.ncst.award; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class AwardApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/awardBE/src/test/java/edu/ncst/award/TestRoleService.java b/awardBE/src/test/java/edu/ncst/award/TestRoleService.java index a7ce6b8..fd43717 100644 --- a/awardBE/src/test/java/edu/ncst/award/TestRoleService.java +++ b/awardBE/src/test/java/edu/ncst/award/TestRoleService.java @@ -1,21 +1,37 @@ package edu.ncst.award; -import edu.ncst.award.service.impl.system.SysRoleServiceImpl; +import cn.hutool.core.date.DateTime; +import edu.ncst.award.model.system.Role; +import edu.ncst.award.service.impl.system.RoleServiceImpl; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; +import java.util.List; @SpringBootTest public class TestRoleService { @Resource - SysRoleServiceImpl sysRoleService; + RoleServiceImpl sysRoleService; @Test - public void selectRoleList(){ - sysRoleService.selectRoleAll(); + public void selectRoleList() { + List roles = sysRoleService.selectRoleAll(); + System.out.println(roles.toString()); + } + + @Test + public void addNewRole() { + Role role = new Role(); + role.setCreateTime(new DateTime()); + role.setCreateUserId(1); + role.setName("ni42377547547hao"); + role.setLabel("hh56754h4523"); + role.setEnable(true); + System.out.println(sysRoleService.insertRole(role)); System.out.println(); } + } diff --git a/awardBE/src/test/java/edu/ncst/award/TestUserService.java b/awardBE/src/test/java/edu/ncst/award/TestUserService.java index 28a9530..ef250d4 100644 --- a/awardBE/src/test/java/edu/ncst/award/TestUserService.java +++ b/awardBE/src/test/java/edu/ncst/award/TestUserService.java @@ -1,5 +1,8 @@ package edu.ncst.award; +import edu.ncst.award.common.core.page.TableDataInfo; +import edu.ncst.award.domain.vo.param.query.PageQuery; +import edu.ncst.award.model.system.User; import edu.ncst.award.service.impl.system.ResourceServiceImpl; import edu.ncst.award.service.impl.system.UserServiceImpl; import lombok.RequiredArgsConstructor; @@ -26,4 +29,12 @@ public class TestUserService { userService.getCurrentUser(); } + @Test + public void selectAllocatedList() { + User user = new User(); + user.setId(2L); + TableDataInfo roles = userService.selectAllocatedList(user, new PageQuery()); + System.out.println(); + } + } diff --git a/awardFE/config/routes.ts b/awardFE/config/routes.ts index e4bf5bb..6949d2f 100644 --- a/awardFE/config/routes.ts +++ b/awardFE/config/routes.ts @@ -23,9 +23,9 @@ { path: '/', component: '../layouts/BasicLayout', - // Routes: ['src/pages/Authorized'], + Routes: ['src/pages/Authorized'], wrappers: ['../pages/Authorized'], - // authority: ['admin', 'user'], + authority: ['admin', 'user'], routes: [ { path: '/welcome', @@ -43,7 +43,7 @@ path: '/admin/account', name: 'account', icon: 'smile', - component: './sysAdmin', + component: './sysAdmin/components/account', }, { path: '/admin/role', diff --git a/awardFE/mock/listTableList.ts b/awardFE/mock/listTableList.ts index 3260b4f..fac9d24 100644 --- a/awardFE/mock/listTableList.ts +++ b/awardFE/mock/listTableList.ts @@ -2,28 +2,21 @@ import { Request, Response } from 'express'; import moment from 'moment'; import { parse } from 'url'; + // mock tableListDataSource const genList = (current: number, pageSize: number) => { - const tableListDataSource: APID.RuleListItem[] = []; + const tableListDataSource: APID.User[] = []; for (let i = 0; i < pageSize; i += 1) { const index = (current - 1) * 10 + i; tableListDataSource.push({ - key: index, - disabled: i % 6 === 0, - href: 'https://ant.design', - avatar: [ - 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', - 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', - ][i % 2], - name: `TradeCode ${index}`, - owner: '曲丽丽', - desc: '这是一段描述', - callNo: Math.floor(Math.random() * 1000), - status: Math.floor(Math.random() * 10) % 4, - updatedAt: moment().format('YYYY-MM-DD'), - createdAt: moment().format('YYYY-MM-DD'), - progress: Math.ceil(Math.random() * 100), + id: index, + username: 'sdfasfas', + nickname: "nihao", + email: "nihao@gmail.com", + mobile_phone: "180234804423", + enable: 1, + create_time: moment().format("YYYY-MM-DD HH:MM:SS"), }); } tableListDataSource.reverse(); @@ -90,7 +83,7 @@ function getRule(req: Request, res: Response, u: string) { } if (params.name) { - dataSource = dataSource.filter((data) => data?.name?.includes(params.name || '')); + dataSource = dataSource.filter((data) => data?.nickname?.includes(params.name || '')); } const result = { data: dataSource, @@ -115,29 +108,21 @@ function postRule(req: Request, res: Response, u: string, b: Request) { switch (method) { /* eslint no-case-declarations:0 */ case 'delete': - tableListDataSource = tableListDataSource.filter((item) => key.indexOf(item.key) === -1); + tableListDataSource = tableListDataSource.filter((item) => key.indexOf(item.id) === -1); break; case 'post': (() => { - const i = Math.ceil(Math.random() * 10000); - const newRule: APID.RuleListItem = { - key: tableListDataSource.length, - href: 'https://ant.design', - avatar: [ - 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', - 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', - ][i % 2], - name, - owner: '曲丽丽', - desc, - callNo: Math.floor(Math.random() * 1000), - status: Math.floor(Math.random() * 10) % 2, - updatedAt: moment().format('YYYY-MM-DD'), - createdAt: moment().format('YYYY-MM-DD'), - progress: Math.ceil(Math.random() * 100), + const newUser: APID.User = { + id: 1, + username: 'sdfasfas', + nickname: "nihao", + email: "nihao@gmail.com", + mobile_phone: "180234804423", + enable: 1, + create_time: moment().format('YYYY-MM-DD'), }; - tableListDataSource.unshift(newRule); - return res.json(newRule); + tableListDataSource.unshift(newUser); + return res.json(newUser); })(); return; @@ -145,7 +130,7 @@ function postRule(req: Request, res: Response, u: string, b: Request) { (() => { let newRule = {}; tableListDataSource = tableListDataSource.map((item) => { - if (item.key === key) { + if (item.id === key) { newRule = { ...item, desc, name }; return { ...item, desc, name }; } diff --git a/awardFE/mock/user.ts b/awardFE/mock/user.ts index 75edd34..360fbe0 100644 --- a/awardFE/mock/user.ts +++ b/awardFE/mock/user.ts @@ -1,4 +1,35 @@ import { Request, Response } from 'express'; +import moment from 'moment'; +import { parse } from 'url'; + +const genList = (current: number, pageSize: number) => { + const tableListDataSource: APID.RuleListItem[] = []; + + for (let i = 0; i < pageSize; i += 1) { + const index = (current - 1) * 10 + i; + tableListDataSource.push({ + key: index, + disabled: i % 6 === 0, + href: 'https://ant.design', + avatar: [ + 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png', + 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png', + ][i % 2], + name: `TradeCode ${index}`, + owner: '曲丽丽', + desc: '这是一段描述', + callNo: Math.floor(Math.random() * 1000), + status: Math.floor(Math.random() * 10) % 4, + updatedAt: moment().format('YYYY-MM-DD'), + createdAt: moment().format('YYYY-MM-DD'), + progress: Math.ceil(Math.random() * 100), + }); + } + tableListDataSource.reverse(); + return tableListDataSource; +}; + +let tableListDataSource = genList(1, 100); const waitTime = (time: number = 100) => { return new Promise((resolve) => { @@ -200,4 +231,104 @@ export default { }, 'GET /api/login/captcha': getFakeCaptcha, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 'GET /api/sys/user':function getRule(req: Request, res: Response, u: string) { + let realUrl = u; + if (!realUrl || Object.prototype.toString.call(realUrl) !== '[object String]') { + realUrl = req.url; + } + const { current = 1, pageSize = 10 } = req.query; + const params = parse(realUrl, true).query as unknown as APID.PageParams & + APID.RuleListItem & { + sorter: any; + filter: any; + }; + + let dataSource = [...tableListDataSource].slice( + ((current as number) - 1) * (pageSize as number), + (current as number) * (pageSize as number), + ); + if (params.sorter) { + const sorter = JSON.parse(params.sorter); + dataSource = dataSource.sort((prev, next) => { + let sortNumber = 0; + Object.keys(sorter).forEach((key) => { + if (sorter[key] === 'descend') { + if (prev[key] - next[key] > 0) { + sortNumber += -1; + } else { + sortNumber += 1; + } + return; + } + if (prev[key] - next[key] > 0) { + sortNumber += 1; + } else { + sortNumber += -1; + } + }); + return sortNumber; + }); + } + if (params.filter) { + const filter = JSON.parse(params.filter as any) as { + [key: string]: string[]; + }; + if (Object.keys(filter).length > 0) { + dataSource = dataSource.filter((item) => { + return Object.keys(filter).some((key) => { + if (!filter[key]) { + return true; + } + if (filter[key].includes(`${item[key]}`)) { + return true; + } + return false; + }); + }); + } + } + + if (params.name) { + dataSource = dataSource.filter((data) => data?.name?.includes(params.name || '')); + } + const result = { + data: dataSource, + total: tableListDataSource.length, + success: true, + pageSize, + current: parseInt(`${params.current}`, 10) || 1, + }; + + return res.json(result); + } }; diff --git a/awardFE/src/pages/login/components/UpdateForm.tsx b/awardFE/src/pages/login/components/UpdateForm.tsx index 967b265..ec9b1ae 100644 --- a/awardFE/src/pages/login/components/UpdateForm.tsx +++ b/awardFE/src/pages/login/components/UpdateForm.tsx @@ -67,8 +67,8 @@ const UpdateForm: React.FC = (props) => { = (props) => { required: true, message: ( ), diff --git a/awardFE/src/pages/projectDeclare/components/BaseInfo/index.tsx b/awardFE/src/pages/projectDeclare/components/BaseInfo/index.tsx index f359ff0..554559b 100644 --- a/awardFE/src/pages/projectDeclare/components/BaseInfo/index.tsx +++ b/awardFE/src/pages/projectDeclare/components/BaseInfo/index.tsx @@ -39,7 +39,7 @@ const BaseInfo = forwardRef((props, ref) => { // 校验表单,保存数据 const onSave = async (): Promise => { try { - var values = await form.validateFields(); // Promise fulfilled result为PromiseResult + const values = await form.validateFields(); // Promise fulfilled result为PromiseResult console.log('succ:', values); if (values) { // dosomething @@ -173,7 +173,7 @@ const BaseInfo = forwardRef((props, ref) => { name="recommendDate" rules={[{ required: true, message: '请选择推荐日期' }]} > - + @@ -203,7 +203,7 @@ const BaseInfo = forwardRef((props, ref) => { name="achieveNum" rules={[{ required: true, message: '请输入成果登记号' }]} > - + @@ -234,7 +234,7 @@ const BaseInfo = forwardRef((props, ref) => { name="theme" rules={[{ required: true, message: '请输入主题词' }]} > - + @@ -253,7 +253,7 @@ const BaseInfo = forwardRef((props, ref) => { name="plan" rules={[{ required: true, message: '请输入计划名称' }]} > - + @@ -262,7 +262,7 @@ const BaseInfo = forwardRef((props, ref) => { name="planNum" rules={[{ required: true, message: '请输入计划编号' }]} > - + @@ -283,7 +283,7 @@ const BaseInfo = forwardRef((props, ref) => { name="appDate" rules={[{ required: true, message: '请选择应用日期' }]} > - + @@ -314,7 +314,7 @@ const BaseInfo = forwardRef((props, ref) => { name="evaluateDate" rules={[{ required: true, message: '请选择评价日期' }]} > - + @@ -324,7 +324,7 @@ const BaseInfo = forwardRef((props, ref) => { name="intellectualProperty" rules={[{ required: true, message: '请输入授权的其他知识产权' }]} > - 项 + 项 @@ -334,7 +334,7 @@ const BaseInfo = forwardRef((props, ref) => { name="inventionPatent" rules={[{ required: true, message: '请输入授权发明专利' }]} > - 项 + 项 diff --git a/awardFE/src/pages/sysAdmin/components/UpdateForm.tsx b/awardFE/src/pages/sysAdmin/components/UpdateForm.tsx index 967b265..6171f62 100644 --- a/awardFE/src/pages/sysAdmin/components/UpdateForm.tsx +++ b/awardFE/src/pages/sysAdmin/components/UpdateForm.tsx @@ -68,7 +68,7 @@ const UpdateForm: React.FC = (props) => { name="name" label={intl.formatMessage({ id: 'pages.searchTable.updateForm.ruleName.nameLabel', - defaultMessage: '规则名称', + defaultMessage: '用户名称', })} width="md" rules={[ diff --git a/awardFE/src/services/ant-design-pro/typings.d.ts b/awardFE/src/services/ant-design-pro/typings.d.ts index ca42e86..bc49ae1 100644 --- a/awardFE/src/services/ant-design-pro/typings.d.ts +++ b/awardFE/src/services/ant-design-pro/typings.d.ts @@ -2,6 +2,23 @@ /* eslint-disable */ declare namespace APID { + + type User = { + id?: number, + nickname: string, + username: string, + email: string, + mobile_phone: string, + // dept_id: number, + // position: string, + // address: string, + // ID_card: string, + // enable: number, + enable: number, + create_time: string, + // callNo: number, + } + type CurrentUser = { name?: string; avatar?: string;