serv-模块、权限、成就

This commit is contained in:
2025-10-25 17:45:39 +08:00
parent 42f8a0a136
commit f7057a0cc9
15 changed files with 682 additions and 394 deletions

View File

@@ -3,12 +3,11 @@ package org.xyzh.system.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.xyzh.api.system.module.ModuleService;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.core.page.PageRequest;
import org.xyzh.common.dto.permission.TbSysPermission;
import org.xyzh.common.dto.system.TbSysModule;
import org.xyzh.common.core.domain.ResultDomain;
import java.util.List;
/**
* @description 系统模块控制器
* @filename ModuleController.java
@@ -17,7 +16,7 @@ import java.util.List;
* @since 2025-10-16
*/
@RestController
@RequestMapping("/system/module")
@RequestMapping("/system/modules")
@CrossOrigin(origins = "*")
public class ModuleController {
@@ -44,7 +43,7 @@ public class ModuleController {
* @since 2025-10-16
*/
@GetMapping("/{moduleID}")
public ResultDomain<TbSysModule> getModuleById(@PathVariable String moduleID) {
public ResultDomain<TbSysModule> getModuleById(@PathVariable(name = "moduleID") String moduleID) {
return moduleService.getModuleById(moduleID);
}
@@ -56,7 +55,7 @@ public class ModuleController {
* @since 2025-10-16
*/
@GetMapping("/code/{code}")
public ResultDomain<TbSysModule> getModuleByCode(@PathVariable String code) {
public ResultDomain<TbSysModule> getModuleByCode(@PathVariable(name = "code") String code) {
return moduleService.getModuleByCode(code);
}
@@ -78,7 +77,7 @@ public class ModuleController {
* @author yslg
* @since 2025-10-16
*/
@PostMapping("/create")
@PostMapping("/module")
public ResultDomain<TbSysModule> createModule(@RequestBody TbSysModule module) {
return moduleService.createModule(module);
}
@@ -90,7 +89,7 @@ public class ModuleController {
* @author yslg
* @since 2025-10-16
*/
@PutMapping("/update")
@PutMapping("/module")
public ResultDomain<TbSysModule> updateModule(@RequestBody TbSysModule module) {
return moduleService.updateModule(module);
}
@@ -102,21 +101,9 @@ public class ModuleController {
* @author yslg
* @since 2025-10-16
*/
@DeleteMapping("/{moduleID}")
public ResultDomain<Boolean> deleteModule(@PathVariable String moduleID) {
return moduleService.deleteModule(moduleID);
}
/**
* @description 批量删除模块
* @param moduleIDs 模块ID列表
* @return ResultDomain<Boolean> 删除结果
* @author yslg
* @since 2025-10-16
*/
@DeleteMapping("/batch")
public ResultDomain<Boolean> batchDeleteModules(@RequestBody List<String> moduleIDs) {
return moduleService.batchDeleteModules(moduleIDs);
@DeleteMapping("/module")
public ResultDomain<Boolean> deleteModule(@RequestBody TbSysModule module) {
return moduleService.deleteModule(module.getModuleID());
}
/**
@@ -128,7 +115,7 @@ public class ModuleController {
* @since 2025-10-16
*/
@PutMapping("/{moduleID}/status/{status}")
public ResultDomain<Boolean> updateModuleStatus(@PathVariable String moduleID, @PathVariable Integer status) {
public ResultDomain<Boolean> updateModuleStatus(@PathVariable(name = "moduleID") String moduleID, @PathVariable(name = "status") Integer status) {
return moduleService.updateModuleStatus(moduleID, status);
}
@@ -141,7 +128,7 @@ public class ModuleController {
* @since 2025-10-16
*/
@PutMapping("/{moduleID}/order/{orderNum}")
public ResultDomain<Boolean> updateModuleOrder(@PathVariable String moduleID, @PathVariable Integer orderNum) {
public ResultDomain<Boolean> updateModuleOrder(@PathVariable(name = "moduleID") String moduleID, @PathVariable(name = "orderNum") Integer orderNum) {
return moduleService.updateModuleOrder(moduleID, orderNum);
}
@@ -154,11 +141,8 @@ public class ModuleController {
* @since 2025-10-16
*/
@PostMapping("/page")
public ResultDomain<TbSysModule> getModuleListPage(@RequestBody(required = false) TbSysModule filter,
@RequestParam(defaultValue = "1") int pageNumber,
@RequestParam(defaultValue = "10") int pageSize) {
PageParam pageParam = new PageParam(pageNumber, pageSize);
return moduleService.getModuleListPage(filter, pageParam);
public ResultDomain<TbSysModule> getModuleListPage(@RequestBody PageRequest<TbSysModule> pageRequest) {
return moduleService.getModuleListPage(pageRequest.getFilter(), pageRequest.getPageParam());
}
/**
@@ -182,76 +166,64 @@ public class ModuleController {
* @since 2025-10-16
*/
@GetMapping("/check-code")
public ResultDomain<Boolean> checkModuleCodeExists(@RequestParam String code,
@RequestParam(required = false) String excludeID) {
public ResultDomain<Boolean> checkModuleCodeExists(@RequestParam(name = "code") String code,
@RequestParam(required = false, value = "excludeID") String excludeID) {
return moduleService.checkModuleCodeExists(code, excludeID);
}
/**
* @description 绑定权限到模块
* @description 在模块中创建权限
* @param moduleID 模块ID
* @param permissionIds 权限ID列表
* @return ResultDomain<Boolean> 绑定结果
* @param permission 权限信息
* @return ResultDomain<TbSysPermission> 创建结果
* @author yslg
* @since 2025-10-16
*/
@PostMapping("/{moduleID}/bind-permissions")
public ResultDomain<Boolean> bindPermissionsToModule(@PathVariable String moduleID,
@RequestBody List<String> permissionIds) {
return moduleService.bindPermissionsToModule(moduleID, permissionIds);
@PostMapping("/{moduleID}/permissions")
public ResultDomain<TbSysPermission> createPermissionInModule(@PathVariable(name = "moduleID") String moduleID,
@RequestBody TbSysPermission permission) {
permission.setModuleID(moduleID);
return moduleService.createPermissionInModule(permission);
}
/**
* @description 解绑模块的权限
* @description 更新模块的权限
* @param moduleID 模块ID
* @param permissionIds 权限ID列表
* @return ResultDomain<Boolean> 解绑结果
* @param permission 权限信息
* @return ResultDomain<TbSysPermission> 更新结果
* @author yslg
* @since 2025-10-16
*/
@PostMapping("/{moduleID}/unbind-permissions")
public ResultDomain<Boolean> unbindPermissionsFromModule(@PathVariable String moduleID,
@RequestBody List<String> permissionIds) {
return moduleService.unbindPermissionsFromModule(moduleID, permissionIds);
@PutMapping("/{moduleID}/permissions")
public ResultDomain<TbSysPermission> updatePermissionInModule(@PathVariable(name = "moduleID") String moduleID,
@RequestBody TbSysPermission permission) {
permission.setModuleID(moduleID);
return moduleService.updatePermissionInModule(permission);
}
/**
* @description 删除模块中的权限
* @param moduleID 模块ID
* @param permissionID 权限ID
* @return ResultDomain<Boolean> 删除结果
* @author yslg
* @since 2025-10-16
*/
@DeleteMapping("/{moduleID}/permissions/{permissionID}")
public ResultDomain<Boolean> deletePermissionInModule(@PathVariable(name = "moduleID") String moduleID,
@PathVariable(name = "permissionID") String permissionID) {
return moduleService.deletePermissionInModule(moduleID, permissionID);
}
/**
* @description 获取模块的权限列表
* @param moduleID 模块ID
* @return ResultDomain<List<String>> 权限ID列表
* @return ResultDomain<TbSysPermission> 权限列表
* @author yslg
* @since 2025-10-16
*/
@GetMapping("/{moduleID}/permissions")
public ResultDomain<List<String>> getModulePermissions(@PathVariable String moduleID) {
public ResultDomain<TbSysPermission> getModulePermissions(@PathVariable(name = "moduleID") String moduleID) {
return moduleService.getModulePermissions(moduleID);
}
/**
* @description 批量绑定权限到模块
* @param moduleID 模块ID
* @param permissionIds 权限ID列表
* @return ResultDomain<Boolean> 绑定结果
* @author yslg
* @since 2025-10-16
*/
@PostMapping("/{moduleID}/batch-bind-permissions")
public ResultDomain<Boolean> batchBindPermissionsToModule(@PathVariable String moduleID,
@RequestBody List<String> permissionIds) {
return moduleService.batchBindPermissionsToModule(moduleID, permissionIds);
}
/**
* @description 批量解绑模块的权限
* @param moduleID 模块ID
* @param permissionIds 权限ID列表
* @return ResultDomain<Boolean> 解绑结果
* @author yslg
* @since 2025-10-16
*/
@PostMapping("/{moduleID}/batch-unbind-permissions")
public ResultDomain<Boolean> batchUnbindPermissionsFromModule(@PathVariable String moduleID,
@RequestBody List<String> permissionIds) {
return moduleService.batchUnbindPermissionsFromModule(moduleID, permissionIds);
}
}

View File

@@ -168,31 +168,11 @@ public interface PermissionMapper extends BaseMapper<TbSysPermission> {
List<TbSysPermission> selectPermissionsByModuleID(@Param("moduleID") String moduleID);
/**
* @description 绑定权限到模块
* @description 获取模块的权限列表
* @param moduleID 模块ID
* @param permissionIds 权限ID列表
* @return int 影响行数
* @return List<TbSysPermission> 权限列表
* @author yslg
* @since 2025-10-16
*/
int bindPermissionsToModule(@Param("moduleID") String moduleID, @Param("permissionIds") List<String> permissionIds);
/**
* @description 解绑模块的权限
* @param moduleID 模块ID
* @param permissionIds 权限ID列表
* @return int 影响行数
* @author yslg
* @since 2025-10-16
*/
int unbindPermissionsFromModule(@Param("moduleID") String moduleID, @Param("permissionIds") List<String> permissionIds);
/**
* @description 获取模块的权限ID列表
* @param moduleID 模块ID
* @return List<String> 权限ID列表
* @author yslg
* @since 2025-10-16
*/
List<String> getModulePermissionIds(@Param("moduleID") String moduleID);
List<TbSysPermission> getModulePermissionIds(@Param("moduleID") String moduleID);
}

View File

@@ -4,6 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.permission.TbSysPermission;
import org.xyzh.common.dto.system.TbSysModule;
import org.xyzh.common.utils.IDUtils;
import org.xyzh.common.core.domain.ResultDomain;
@@ -184,6 +185,15 @@ public class ModuleServiceImpl implements ModuleService {
return result;
}
// 级联删除模块下的所有权限
List<TbSysPermission> permissions = permissionMapper.selectPermissionsByModuleID(moduleID);
if (permissions != null && !permissions.isEmpty()) {
for (TbSysPermission permission : permissions) {
permission.setDeleteTime(new Date());
permissionMapper.deletePermission(permission);
}
}
module.setDeleteTime(new Date());
int result = moduleMapper.deleteModule(module);
if (result > 0) {
@@ -267,16 +277,12 @@ public class ModuleServiceImpl implements ModuleService {
@Override
public ResultDomain<TbSysModule> getModuleListPage(TbSysModule filter, PageParam pageParam) {
try {
List<TbSysModule> modules = moduleMapper.selectModulesPage(filter, pageParam);
ResultDomain<TbSysModule> result = new ResultDomain<>();
result.success("查询成功", modules);
return result;
} catch (Exception e) {
ResultDomain<TbSysModule> result = new ResultDomain<>();
result.fail("分页查询模块列表失败:" + e.getMessage());
return result;
}
pageParam.setOffset((pageParam.getPageNumber() - 1) * pageParam.getPageSize());
List<TbSysModule> modules = moduleMapper.selectModulesPage(filter, pageParam);
ResultDomain<TbSysModule> result = new ResultDomain<>();
result.success("查询成功", modules);
return result;
}
@Override
@@ -309,99 +315,124 @@ public class ModuleServiceImpl implements ModuleService {
@Override
@Transactional
public ResultDomain<Boolean> bindPermissionsToModule(String moduleID, List<String> permissionIds) {
public ResultDomain<TbSysPermission> createPermissionInModule(TbSysPermission permission) {
try {
int result = permissionMapper.bindPermissionsToModule(moduleID, permissionIds);
// 检查模块是否存在
TbSysModule module = moduleMapper.selectByModuleID(permission.getModuleID());
if (module == null) {
ResultDomain<TbSysPermission> result = new ResultDomain<>();
result.fail("模块不存在");
return result;
}
// 设置基础信息
permission.setID(IDUtils.generateID());
permission.setPermissionID(IDUtils.generateID());
permission.setCreateTime(new Date());
permission.setUpdateTime(new Date());
permission.setDeleted(false);
int result = permissionMapper.insertPermission(permission);
if (result > 0) {
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
resultDomain.success("绑定成功", true);
ResultDomain<TbSysPermission> resultDomain = new ResultDomain<>();
resultDomain.success("创建权限成功", permission);
return resultDomain;
} else {
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
resultDomain.fail("绑定权限到模块失败");
ResultDomain<TbSysPermission> resultDomain = new ResultDomain<>();
resultDomain.fail("创建权限失败");
return resultDomain;
}
} catch (Exception e) {
ResultDomain<Boolean> result = new ResultDomain<>();
result.fail("绑定权限到模块失败:" + e.getMessage());
ResultDomain<TbSysPermission> result = new ResultDomain<>();
result.fail("创建权限失败:" + e.getMessage());
return result;
}
}
@Override
@Transactional
public ResultDomain<Boolean> unbindPermissionsFromModule(String moduleID, List<String> permissionIds) {
public ResultDomain<TbSysPermission> updatePermissionInModule(TbSysPermission permission) {
try {
int result = permissionMapper.unbindPermissionsFromModule(moduleID, permissionIds);
// 检查权限是否存在
TbSysPermission existingPermission = permissionMapper.selectPermission(permission);
if (existingPermission == null) {
ResultDomain<TbSysPermission> result = new ResultDomain<>();
result.fail("权限不存在");
return result;
}
// 检查权限是否属于该模块
if (!existingPermission.getModuleID().equals(permission.getModuleID())) {
ResultDomain<TbSysPermission> result = new ResultDomain<>();
result.fail("权限不属于该模块");
return result;
}
permission.setID(existingPermission.getID());
permission.setUpdateTime(new Date());
int result = permissionMapper.updatePermission(permission);
if (result > 0) {
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
resultDomain.success("解绑成功", true);
ResultDomain<TbSysPermission> resultDomain = new ResultDomain<>();
resultDomain.success("更新权限成功", permission);
return resultDomain;
} else {
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
resultDomain.fail("解绑模块权限失败");
ResultDomain<TbSysPermission> resultDomain = new ResultDomain<>();
resultDomain.fail("更新权限失败");
return resultDomain;
}
} catch (Exception e) {
ResultDomain<Boolean> result = new ResultDomain<>();
result.fail("解绑模块权限失败:" + e.getMessage());
return result;
}
}
@Override
public ResultDomain<List<String>> getModulePermissions(String moduleID) {
try {
List<String> permissionIds = permissionMapper.getModulePermissionIds(moduleID);
ResultDomain<List<String>> result = new ResultDomain<>();
result.success("查询成功", permissionIds);
return result;
} catch (Exception e) {
ResultDomain<List<String>> result = new ResultDomain<>();
result.fail("获取模块权限失败:" + e.getMessage());
ResultDomain<TbSysPermission> result = new ResultDomain<>();
result.fail("更新权限失败:" + e.getMessage());
return result;
}
}
@Override
@Transactional
public ResultDomain<Boolean> batchBindPermissionsToModule(String moduleID, List<String> permissionIds) {
public ResultDomain<Boolean> deletePermissionInModule(String moduleID, String permissionID) {
try {
int result = permissionMapper.bindPermissionsToModule(moduleID, permissionIds);
// 检查权限是否存在
TbSysPermission permission = new TbSysPermission();
permission.setPermissionID(permissionID);
TbSysPermission existingPermission = permissionMapper.selectPermission(permission);
if (existingPermission == null) {
ResultDomain<Boolean> result = new ResultDomain<>();
result.fail("权限不存在");
return result;
}
// 检查权限是否属于该模块
if (!existingPermission.getModuleID().equals(moduleID)) {
ResultDomain<Boolean> result = new ResultDomain<>();
result.fail("权限不属于该模块");
return result;
}
existingPermission.setDeleteTime(new Date());
int result = permissionMapper.deletePermission(existingPermission);
if (result > 0) {
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
resultDomain.success("批量绑定成功", true);
resultDomain.success("删除权限成功", true);
return resultDomain;
} else {
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
resultDomain.fail("批量绑定权限到模块失败");
resultDomain.fail("删除权限失败");
return resultDomain;
}
} catch (Exception e) {
ResultDomain<Boolean> result = new ResultDomain<>();
result.fail("批量绑定权限到模块失败:" + e.getMessage());
result.fail("删除权限失败:" + e.getMessage());
return result;
}
}
@Override
@Transactional
public ResultDomain<Boolean> batchUnbindPermissionsFromModule(String moduleID, List<String> permissionIds) {
try {
int result = permissionMapper.unbindPermissionsFromModule(moduleID, permissionIds);
if (result > 0) {
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
resultDomain.success("批量解绑成功", true);
return resultDomain;
} else {
ResultDomain<Boolean> resultDomain = new ResultDomain<>();
resultDomain.fail("批量解绑模块权限失败");
return resultDomain;
}
} catch (Exception e) {
ResultDomain<Boolean> result = new ResultDomain<>();
result.fail("批量解绑模块权限失败:" + e.getMessage());
return result;
}
public ResultDomain<TbSysPermission> getModulePermissions(String moduleID) {
List<TbSysPermission> permissions = permissionMapper.getModulePermissionIds(moduleID);
ResultDomain<TbSysPermission> result = new ResultDomain<>();
result.success("查询成功", permissions);
return result;
}
}

View File

@@ -63,6 +63,9 @@ public class SysPermissionServiceImpl implements SysPermissionService {
@Autowired
private MenuService menuService;
@Autowired
private org.xyzh.system.mapper.ModuleMapper moduleMapper;
@Transactional
@Override
@@ -82,6 +85,19 @@ public class SysPermissionServiceImpl implements SysPermissionService {
return resultDomain;
}
// 检查所属模块ID是否存在权限必须在模块中创建
if (!StringUtils.hasText(permission.getModuleID())) {
resultDomain.fail("权限必须指定所属模块");
return resultDomain;
}
// 校验模块是否存在
org.xyzh.common.dto.system.TbSysModule module = moduleMapper.selectByModuleID(permission.getModuleID());
if (module == null) {
resultDomain.fail("指定的模块不存在");
return resultDomain;
}
// 检查权限名称是否已存在
ResultDomain<Boolean> nameCheckResult = checkPermissionNameExists(permission.getName(), null);
if (!nameCheckResult.isSuccess()) {

View File

@@ -53,6 +53,29 @@
</where>
</sql>
<sql id="Filter_Where_Clause">
<where>
deleted = 0
<if test="filter != null">
<if test="filter.id != null and filter.id != ''">
AND id = #{filter.id}
</if>
</if>
<if test="filter.moduleID != null and filter.moduleID != ''">
AND module_id = #{filter.moduleID}
</if>
<if test="filter.name != null and filter.name != ''">
AND name LIKE CONCAT('%', #{filter.name}, '%')
</if>
<if test="filter.code != null and filter.code != ''">
AND code = #{filter.code}
</if>
<if test="filter.status != null">
AND status = #{filter.status}
</if>
</where>
</sql>
<!-- 查询模块列表 -->
<select id="selectModules" resultMap="BaseResultMap">
SELECT
@@ -178,7 +201,7 @@
SELECT
<include refid="Base_Column_List" />
FROM tb_sys_module
<include refid="Base_Where_Clause" />
<include refid="Filter_Where_Clause" />
ORDER BY order_num ASC, create_time DESC
LIMIT #{pageParam.pageSize} OFFSET #{pageParam.offset}
</select>
@@ -187,7 +210,7 @@
<select id="countModules" resultType="long">
SELECT COUNT(1)
FROM tb_sys_module
<include refid="Base_Where_Clause" />
<include refid="Filter_Where_Clause" />
</select>
<!-- 更新模块状态 -->

View File

@@ -150,6 +150,7 @@
<if test="permission.name != null">name,</if>
<if test="permission.code != null">code,</if>
<if test="permission.description != null">description,</if>
<if test="permission.moduleID != null">module_id,</if>
<if test="permission.creator != null">creator,</if>
<if test="permission.createTime != null">create_time,</if>
deleted
@@ -160,6 +161,7 @@
<if test="permission.name != null">#{permission.name},</if>
<if test="permission.code != null">#{permission.code},</if>
<if test="permission.description != null">#{permission.description},</if>
<if test="permission.moduleID != null">#{permission.moduleID},</if>
<if test="permission.creator != null">#{permission.creator},</if>
<if test="permission.createTime != null">#{permission.createTime},</if>
0
@@ -174,6 +176,7 @@
<if test="permission.name != null">name = #{permission.name},</if>
<if test="permission.code != null">code = #{permission.code},</if>
<if test="permission.description != null">description = #{permission.description},</if>
<if test="permission.moduleID != null">module_id = #{permission.moduleID},</if>
<if test="permission.updater != null">updater = #{permission.updater},</if>
update_time = NOW()
</set>
@@ -298,32 +301,10 @@
ORDER BY create_time DESC
</select>
<!-- 绑定权限到模块 -->
<update id="bindPermissionsToModule">
UPDATE tb_sys_permission
SET module_id = #{moduleID}, update_time = NOW()
WHERE permission_id IN
<foreach collection="permissionIds" item="permissionId" open="(" separator="," close=")">
#{permissionId}
</foreach>
AND deleted = 0
</update>
<!-- 解绑模块的权限 -->
<update id="unbindPermissionsFromModule">
UPDATE tb_sys_permission
SET module_id = NULL, update_time = NOW()
WHERE permission_id IN
<foreach collection="permissionIds" item="permissionId" open="(" separator="," close=")">
#{permissionId}
</foreach>
AND module_id = #{moduleID}
AND deleted = 0
</update>
<!-- 获取模块的权限ID列表 -->
<select id="getModulePermissionIds" resultType="String">
SELECT permission_id
<!-- 获取模块的权限列表 -->
<select id="getModulePermissionIds" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List" />
FROM tb_sys_permission
WHERE module_id = #{moduleID} AND deleted = 0
ORDER BY create_time DESC