From 1cd8c5d420576fa5e53b4cd4a9c0be655a70aced Mon Sep 17 00:00:00 2001 From: ZZX9599 <536509593@qq.com> Date: Mon, 3 Nov 2025 14:51:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A8=E9=83=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- license/yjearth.lic | 2 +- .../java/com/yj/earth/auth/AuthGenerator.java | 19 +++- .../business/controller/MatterController.java | 10 +- .../business/controller/RoleController.java | 5 +- .../controller/RoleMenuController.java | 100 ++++++++++++++++ .../controller/RoleOperateController.java | 70 ++++++++++++ .../business/controller/SystemController.java | 1 - .../business/controller/TsPlanController.java | 107 ++++++++++++++++++ .../business/controller/UserController.java | 36 ++++-- .../yj/earth/business/domain/RoleMenu.java | 41 +++++++ .../yj/earth/business/domain/RoleOperate.java | 39 +++++++ .../com/yj/earth/business/domain/TsPlan.java | 42 +++++++ .../earth/business/mapper/RoleMenuMapper.java | 18 +++ .../business/mapper/RoleOperateMapper.java | 18 +++ .../earth/business/mapper/TsPlanMapper.java | 18 +++ .../business/service/RoleMenuService.java | 16 +++ .../business/service/RoleOperateService.java | 16 +++ .../earth/business/service/TsPlanService.java | 16 +++ .../service/impl/RoleMenuServiceImpl.java | 20 ++++ .../service/impl/RoleOperateServiceImpl.java | 20 ++++ .../service/impl/TsPlanServiceImpl.java | 20 ++++ .../com/yj/earth/common/util/CodeUtil.java | 2 +- .../yj/earth/datasource/DatabaseManager.java | 3 + .../java/com/yj/earth/design/RoleMenu.java | 22 ++++ .../java/com/yj/earth/design/RoleOperate.java | 20 ++++ src/main/java/com/yj/earth/design/TsPlan.java | 22 ++++ .../yj/earth/dto/roleMenu/AddRoleMenuDto.java | 16 +++ .../yj/earth/dto/roleMenu/UpdateMenuDto.java | 16 +++ .../dto/roleOperate/AddRoleOperateDto.java | 14 +++ .../dto/roleOperate/UpdateRoleOperateDto.java | 14 +++ .../com/yj/earth/dto/tsPlan/AddTsPlanDto.java | 12 ++ .../yj/earth/dto/tsPlan/UpdateTsPlanDto.java | 14 +++ src/main/resources/mapper/RoleMenuMapper.xml | 19 ++++ .../resources/mapper/RoleOperateMapper.xml | 19 ++++ src/main/resources/mapper/TsPlanMapper.xml | 20 ++++ 35 files changed, 826 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/yj/earth/business/controller/RoleMenuController.java create mode 100644 src/main/java/com/yj/earth/business/controller/RoleOperateController.java create mode 100644 src/main/java/com/yj/earth/business/controller/TsPlanController.java create mode 100644 src/main/java/com/yj/earth/business/domain/RoleMenu.java create mode 100644 src/main/java/com/yj/earth/business/domain/RoleOperate.java create mode 100644 src/main/java/com/yj/earth/business/domain/TsPlan.java create mode 100644 src/main/java/com/yj/earth/business/mapper/RoleMenuMapper.java create mode 100644 src/main/java/com/yj/earth/business/mapper/RoleOperateMapper.java create mode 100644 src/main/java/com/yj/earth/business/mapper/TsPlanMapper.java create mode 100644 src/main/java/com/yj/earth/business/service/RoleMenuService.java create mode 100644 src/main/java/com/yj/earth/business/service/RoleOperateService.java create mode 100644 src/main/java/com/yj/earth/business/service/TsPlanService.java create mode 100644 src/main/java/com/yj/earth/business/service/impl/RoleMenuServiceImpl.java create mode 100644 src/main/java/com/yj/earth/business/service/impl/RoleOperateServiceImpl.java create mode 100644 src/main/java/com/yj/earth/business/service/impl/TsPlanServiceImpl.java create mode 100644 src/main/java/com/yj/earth/design/RoleMenu.java create mode 100644 src/main/java/com/yj/earth/design/RoleOperate.java create mode 100644 src/main/java/com/yj/earth/design/TsPlan.java create mode 100644 src/main/java/com/yj/earth/dto/roleMenu/AddRoleMenuDto.java create mode 100644 src/main/java/com/yj/earth/dto/roleMenu/UpdateMenuDto.java create mode 100644 src/main/java/com/yj/earth/dto/roleOperate/AddRoleOperateDto.java create mode 100644 src/main/java/com/yj/earth/dto/roleOperate/UpdateRoleOperateDto.java create mode 100644 src/main/java/com/yj/earth/dto/tsPlan/AddTsPlanDto.java create mode 100644 src/main/java/com/yj/earth/dto/tsPlan/UpdateTsPlanDto.java create mode 100644 src/main/resources/mapper/RoleMenuMapper.xml create mode 100644 src/main/resources/mapper/RoleOperateMapper.xml create mode 100644 src/main/resources/mapper/TsPlanMapper.xml diff --git a/license/yjearth.lic b/license/yjearth.lic index deff4c5..7f91881 100644 --- a/license/yjearth.lic +++ b/license/yjearth.lic @@ -1 +1 @@ -41b/ujShRZRf9Aa433FD3uyIZuxWSSqXWXlc2dyQfJ75ED0HNbadcdsPF5CaMuJ6K2c3U/eBcWiXXw090/O7M5mJze/MavZ4dhk4dZIukMik2Jrufq9vkpQW+3/LWMFurfFWnFDZIf7Ptuoj4BvuX9h/qJ3oYUDCj14JFAR6ge7ZUtqT1yBvSl/eVexWpCiXfpNSm79whbkkpQjgjWts5/bgQ9cOYdBaVOBJnQkRxNzb4fKh3jkuyEADR+VZg2sRnjLJChAg7DYvIou8Zy16Ag== +41b/ujShRZRf9Aa433FD3uyIZuxWSSqXWXlc2dyQfJ75ED0HNbadcdsPF5CaMuJ624E+iLBfS14muki3Kp1qv3N0KPVdc0TjJDyrO+AVfwFoV1vsU7ttyFcYz2+yX4NkYcMHrSqrAypTaj5AfebZ3k5REN4ZYlZ5xc6tC4sbEIbwLryTr1ScTPGegLiv1C+rX1Pt+SSB5O9YehWlSuWw2JTA9+UoajQ1PHwDUdI7SfrD/jzSgRtVXcZ5k1UF3Fc8LypkZtybW+yeNEhnp/jeYw== \ No newline at end of file diff --git a/src/main/java/com/yj/earth/auth/AuthGenerator.java b/src/main/java/com/yj/earth/auth/AuthGenerator.java index e00a832..3d5f196 100644 --- a/src/main/java/com/yj/earth/auth/AuthGenerator.java +++ b/src/main/java/com/yj/earth/auth/AuthGenerator.java @@ -6,6 +6,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Base64; import java.util.Calendar; import java.util.Date; @@ -72,6 +75,20 @@ public class AuthGenerator { } public static void main(String[] args) { - System.out.println(generateAuth("标准版", 1000, 365, "35A0DF1D05AEAE77E1E2715CC36A7368")); + try { + // 生成加密的授权字符串 + String authContent = generateAuth("标准版", 1000, 365, "3A446222D1FE537F6C9EEF5C2AB3F957"); + + // 定义授权文件路径(当前目录下的 yjearth.lic) + Path licPath = Paths.get("yjearth.lic"); + + // 将授权字符串写入文件 + Files.write(licPath, authContent.getBytes(StandardCharsets.UTF_8)); + + System.out.println("授权文件生成成功:" + licPath.toAbsolutePath()); + } catch (Exception e) { + System.err.println("生成授权文件失败:" + e.getMessage()); + e.printStackTrace(); + } } } diff --git a/src/main/java/com/yj/earth/business/controller/MatterController.java b/src/main/java/com/yj/earth/business/controller/MatterController.java index a514b83..c9ad89c 100644 --- a/src/main/java/com/yj/earth/business/controller/MatterController.java +++ b/src/main/java/com/yj/earth/business/controller/MatterController.java @@ -59,15 +59,13 @@ public class MatterController { @Operation(summary = "物资列表") @PostMapping("/list") - public ApiResponse list(@Parameter(description = "分页数量") Integer pageNum, - @Parameter(description = "分页大小") Integer pageSize, - @Parameter(description = "物资名称") String name) { + public ApiResponse list(@Parameter(description = "分页数量") @RequestParam(value = "pageNum") Integer pageNum, + @Parameter(description = "分页大小") @RequestParam(value = "pageSize") Integer pageSize, + @Parameter(description = "物资名称") @RequestParam(value = "name") String name) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.isNotBlank(name)) { queryWrapper.like(Matter::getName, name); } - Page page = new Page<>(pageNum, pageSize); - List matterList = matterService.list(page, queryWrapper); - return ApiResponse.success(matterList); + return ApiResponse.success(matterService.page(new Page<>(pageNum, pageSize), queryWrapper)); } } diff --git a/src/main/java/com/yj/earth/business/controller/RoleController.java b/src/main/java/com/yj/earth/business/controller/RoleController.java index ad7792e..11de754 100644 --- a/src/main/java/com/yj/earth/business/controller/RoleController.java +++ b/src/main/java/com/yj/earth/business/controller/RoleController.java @@ -69,10 +69,7 @@ public class RoleController { @Operation(summary = "角色列表") @GetMapping("/list") - public ApiResponse list(@Parameter(description = "分页数量") Integer pageNum, - @Parameter(description = "分页大小") Integer pageSize, - @Parameter(description = "角色名称") String roleName, - @Parameter(description = "角色状态") Integer status) { + public ApiResponse list(@Parameter(description = "分页数量") Integer pageNum, @Parameter(description = "分页大小") Integer pageSize, @Parameter(description = "角色名称") String roleName, @Parameter(description = "角色状态") Integer status) { // 构建查询条件 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.isNotBlank(roleName)) { diff --git a/src/main/java/com/yj/earth/business/controller/RoleMenuController.java b/src/main/java/com/yj/earth/business/controller/RoleMenuController.java new file mode 100644 index 0000000..d6fb371 --- /dev/null +++ b/src/main/java/com/yj/earth/business/controller/RoleMenuController.java @@ -0,0 +1,100 @@ +package com.yj.earth.business.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yj.earth.business.domain.RoleMenu; +import com.yj.earth.business.service.RoleMenuService; +import com.yj.earth.common.util.ApiResponse; +import com.yj.earth.dto.roleMenu.AddRoleMenuDto; +import com.yj.earth.dto.roleMenu.UpdateMenuDto; +import com.yj.earth.dto.roleOperate.UpdateRoleOperateDto; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@Tag(name = "角色菜单权限") +@RestController +@RequestMapping("/roleMenu") +public class RoleMenuController { + @Resource + private RoleMenuService roleMenuService; + + @PostMapping("/add") + @Operation(summary = "添加角色菜单权限") + public ApiResponse add(@RequestBody AddRoleMenuDto addRoleMenuDto) { + String roleId = addRoleMenuDto.getRoleId(); + List>> permissionList = addRoleMenuDto.getPermissionList(); + + if (permissionList == null || permissionList.isEmpty()) { + return ApiResponse.success(null); + } + + // 遍历权限列表中的每一组配置 + for (Map> permissionMap : permissionList) { + if (permissionMap == null || permissionMap.isEmpty()) { + continue; + } + + // 遍历每个菜单的权限配置 + Set>> entries = permissionMap.entrySet(); + for (Map.Entry> entry : entries) { + String menu = entry.getKey(); + List permissions = entry.getValue(); + + if (permissions == null || permissions.isEmpty()) { + continue; + } + + // 为每个权限创建一条角色-菜单-权限关联记录 + for (String permission : permissions) { + RoleMenu roleMenu = new RoleMenu(); + roleMenu.setRoleId(roleId); + roleMenu.setMenu(menu); + roleMenu.setPermission(permission); + roleMenuService.save(roleMenu); + } + } + } + + return ApiResponse.success(null); + } + + @Operation(summary = "删除角色菜单权限") + @PostMapping("/delete") + public ApiResponse delete(@Parameter(description = "角色菜单权限ID") @RequestParam(required = true) String id) { + roleMenuService.removeById(id); + return ApiResponse.success(null); + } + + @Operation(summary = "修改角色菜单权限") + @PostMapping("/update") + public ApiResponse update(@RequestBody UpdateMenuDto updateMenuDto) { + RoleMenu roleMenu = new RoleMenu(); + BeanUtils.copyProperties(updateMenuDto, roleMenu); + roleMenuService.updateById(roleMenu); + return ApiResponse.success(null); + } + + @Operation(summary = "查询角色权限") + @PostMapping("/query") + public ApiResponse query(@Parameter(description = "角色权限ID") @RequestParam(required = true) String id) { + RoleMenu roleMenu = roleMenuService.getById(id); + return ApiResponse.success(roleMenu); + } + + @Operation(summary = "查询所有方案") + @PostMapping("/list") + public ApiResponse list(@Parameter(description = "分页数量") @RequestParam(value = "pageNum") Integer pageNum, + @Parameter(description = "分页大小") @RequestParam(value = "pageSize") Integer pageSize) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Page page = roleMenuService.page(new Page<>(pageNum, pageSize), queryWrapper); + return ApiResponse.success(page); + } +} diff --git a/src/main/java/com/yj/earth/business/controller/RoleOperateController.java b/src/main/java/com/yj/earth/business/controller/RoleOperateController.java new file mode 100644 index 0000000..9caa5bf --- /dev/null +++ b/src/main/java/com/yj/earth/business/controller/RoleOperateController.java @@ -0,0 +1,70 @@ +package com.yj.earth.business.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yj.earth.business.domain.RoleOperate; +import com.yj.earth.business.service.RoleOperateService; +import com.yj.earth.common.util.ApiResponse; +import com.yj.earth.dto.roleOperate.AddRoleOperateDto; +import com.yj.earth.dto.roleOperate.UpdateRoleOperateDto; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@Tag(name = "角色操作权限") +@RestController +@RequestMapping("/roleOperate") +public class RoleOperateController { + @Resource + private RoleOperateService roleOperateService; + + @PostMapping("/add") + @Operation(summary = "添加角色操作权限") + public ApiResponse add(@RequestBody AddRoleOperateDto addRoleOperateDto) { + List operateList = addRoleOperateDto.getOperateList(); + for (String operate : operateList) { + RoleOperate roleOperate = new RoleOperate(); + roleOperate.setRoleId(addRoleOperateDto.getRoleId()); + roleOperate.setOperate(operate); + roleOperateService.save(roleOperate); + } + return ApiResponse.success(null); + } + + @Operation(summary = "删除角色操作权限") + @PostMapping("/delete") + public ApiResponse delete(@Parameter(description = "角色操作权限ID") @RequestParam(required = true) String id) { + roleOperateService.removeById(id); + return ApiResponse.success(null); + } + + @Operation(summary = "修改角色操作权限") + @PostMapping("/update") + public ApiResponse update(@RequestBody UpdateRoleOperateDto updateRoleOperateDto) { + RoleOperate roleOperate = new RoleOperate(); + BeanUtils.copyProperties(updateRoleOperateDto, roleOperate); + roleOperateService.updateById(roleOperate); + return ApiResponse.success(null); + } + + @Operation(summary = "查询角色权限") + @PostMapping("/query") + public ApiResponse query(@Parameter(description = "角色权限ID") @RequestParam(required = true) String id) { + RoleOperate roleOperate = roleOperateService.getById(id); + return ApiResponse.success(roleOperate); + } + + @Operation(summary = "查询所有方案") + @PostMapping("/list") + public ApiResponse list(@Parameter(description = "分页数量") @RequestParam(value = "pageNum") Integer pageNum, + @Parameter(description = "分页大小") @RequestParam(value = "pageSize") Integer pageSize) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Page page = roleOperateService.page(new Page<>(pageNum, pageSize), queryWrapper); + return ApiResponse.success(page); + } +} diff --git a/src/main/java/com/yj/earth/business/controller/SystemController.java b/src/main/java/com/yj/earth/business/controller/SystemController.java index 95b73e1..182245c 100644 --- a/src/main/java/com/yj/earth/business/controller/SystemController.java +++ b/src/main/java/com/yj/earth/business/controller/SystemController.java @@ -225,7 +225,6 @@ public class SystemController { return sourceList; } - /** * 解压ZIP文件并获取SQLite文件 */ diff --git a/src/main/java/com/yj/earth/business/controller/TsPlanController.java b/src/main/java/com/yj/earth/business/controller/TsPlanController.java new file mode 100644 index 0000000..5059cd6 --- /dev/null +++ b/src/main/java/com/yj/earth/business/controller/TsPlanController.java @@ -0,0 +1,107 @@ +package com.yj.earth.business.controller; + +import cn.dev33.satoken.stp.StpUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yj.earth.business.domain.TsPlan; +import com.yj.earth.business.domain.User; +import com.yj.earth.business.service.TsPlanService; +import com.yj.earth.business.service.UserService; +import com.yj.earth.common.util.ApiResponse; +import com.yj.earth.dto.tsPlan.AddTsPlanDto; +import com.yj.earth.dto.tsPlan.UpdateTsPlanDto; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + + +@Tag(name = "态势方案管理") +@RestController +@RequestMapping("/tsPlan") +public class TsPlanController { + @Resource + private TsPlanService tsPlanService; + @Resource + private UserService userService; + + @PostMapping("/add") + @Operation(summary = "添加方案") + public ApiResponse add(@RequestBody AddTsPlanDto addTsPlanDto) { + TsPlan tsPlan = new TsPlan(); + BeanUtils.copyProperties(addTsPlanDto, tsPlan); + // 获取当前登录用户ID + tsPlan.setCreatedBy(StpUtil.getLoginIdAsString()); + tsPlanService.save(tsPlan); + return ApiResponse.success(null); + } + + @Operation(summary = "删除方案") + @PostMapping("/delete") + public ApiResponse delete(@Parameter(description = "态势方案ID") @RequestParam(required = true) String id) { + tsPlanService.removeById(id); + return ApiResponse.success(null); + } + + @Operation(summary = "修改方案") + @PostMapping("/update") + public ApiResponse update(@RequestBody UpdateTsPlanDto updateTsPlanDto) { + TsPlan tsPlan = new TsPlan(); + BeanUtils.copyProperties(updateTsPlanDto, tsPlan); + tsPlanService.updateById(tsPlan); + return ApiResponse.success(null); + } + + @Operation(summary = "查询方案") + @PostMapping("/query") + public ApiResponse query(@Parameter(description = "态势方案ID") @RequestParam(required = true) String id) { + TsPlan tsPlan = tsPlanService.getById(id); + return ApiResponse.success(tsPlan); + } + + @Operation(summary = "查询所有方案") + @PostMapping("/list") + public ApiResponse list(@Parameter(description = "分页数量") @RequestParam(value = "pageNum") Integer pageNum, + @Parameter(description = "分页大小") @RequestParam(value = "pageSize") Integer pageSize, + @Parameter(description = "方案名称") @RequestParam(value = "name", required = false) String name, + @Parameter(description = "用户名称") @RequestParam(value = "username", required = false) String username, + @Parameter(description = "开始时间") @RequestParam(value = "startTime", required = false) String startTime, + @Parameter(description = "结束时间") @RequestParam(value = "endTime", required = false) String endTime) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotBlank(name)) { + queryWrapper.like(TsPlan::getName, name); + } + if (StringUtils.isNotBlank(username)) { + // 根据用户名查询用户ID + LambdaQueryWrapper userQueryWrapper = new LambdaQueryWrapper<>(); + userQueryWrapper.like(User::getUsername, username); + User user = userService.getOne(userQueryWrapper); + if (user != null) { + queryWrapper.eq(TsPlan::getCreatedBy, user.getId()); + } + } + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + if (startTime != null && endTime != null) { + // 把字符串的时间字符串 转换成 LocalDateTime + LocalDateTime startTimeDate = LocalDateTime.parse(startTime, formatter); + LocalDateTime endTimeDate = LocalDateTime.parse(endTime, formatter); + queryWrapper.between(TsPlan::getCreatedAt, startTimeDate, endTimeDate); + } + Page page = tsPlanService.page(new Page<>(pageNum, pageSize), queryWrapper); + // 需要设置创建人名称 + page.getRecords().forEach(tsPlan -> { + // 根据用户ID查询用户名 + User user = userService.getById(tsPlan.getCreatedBy()); + if (user != null) { + tsPlan.setCreatedBy(user.getNickname()); + } + }); + return ApiResponse.success(page); + } +} diff --git a/src/main/java/com/yj/earth/business/controller/UserController.java b/src/main/java/com/yj/earth/business/controller/UserController.java index aff3ed4..d10a23e 100644 --- a/src/main/java/com/yj/earth/business/controller/UserController.java +++ b/src/main/java/com/yj/earth/business/controller/UserController.java @@ -6,17 +6,17 @@ import cn.hutool.crypto.digest.BCrypt; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.yj.earth.annotation.CheckAuth; -import com.yj.earth.annotation.EncryptResponse; -import com.yj.earth.annotation.ExcludeField; import com.yj.earth.annotation.RoleAccess; -import com.yj.earth.business.domain.Role; +import com.yj.earth.business.domain.RoleMenu; +import com.yj.earth.business.domain.RoleOperate; import com.yj.earth.business.domain.User; +import com.yj.earth.business.service.RoleMenuService; +import com.yj.earth.business.service.RoleOperateService; import com.yj.earth.business.service.RoleService; -import com.yj.earth.dto.relation.UserBindOrUnBindRoleDto; -import com.yj.earth.dto.user.*; import com.yj.earth.business.service.UserService; import com.yj.earth.common.util.ApiResponse; +import com.yj.earth.dto.relation.UserBindOrUnBindRoleDto; +import com.yj.earth.dto.user.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -24,6 +24,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,6 +37,11 @@ public class UserController { @Resource private RoleService roleService; + @Resource + private RoleOperateService roleOperateService; + @Resource + private RoleMenuService roleMenuService; + @Operation(summary = "新增用户") @PostMapping("/add") @RoleAccess(roleNames = "管理员") @@ -122,7 +128,23 @@ public class UserController { } StpUtil.login(user.getId()); SaTokenInfo tokenInfo = StpUtil.getTokenInfo(); - return ApiResponse.success(Map.of("header", tokenInfo.getTokenName(), "token", tokenInfo.getTokenValue())); + + // 获取该用户角色的操作权限 + LambdaQueryWrapper roleOperateWrapper = new LambdaQueryWrapper<>(); + roleOperateWrapper.eq(RoleOperate::getRoleId, user.getRoleId()); + List roleOperates = roleOperateService.list(roleOperateWrapper); + + // 获取该用户角色的菜单权限 + LambdaQueryWrapper roleMenuWrapper = new LambdaQueryWrapper<>(); + roleMenuWrapper.eq(RoleMenu::getRoleId, user.getRoleId()); + List roleMenus = roleMenuService.list(roleMenuWrapper); + + Map data = new HashMap<>(); + data.put("header", tokenInfo.getTokenName()); + data.put("token", tokenInfo.getTokenValue()); + data.put("roleOperates", roleOperates); + data.put("roleMenus", roleMenus); + return ApiResponse.success(data); } @Operation(summary = "用户登出") diff --git a/src/main/java/com/yj/earth/business/domain/RoleMenu.java b/src/main/java/com/yj/earth/business/domain/RoleMenu.java new file mode 100644 index 0000000..d524e44 --- /dev/null +++ b/src/main/java/com/yj/earth/business/domain/RoleMenu.java @@ -0,0 +1,41 @@ +package com.yj.earth.business.domain; + +import com.baomidou.mybatisplus.annotation.FieldFill; +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 java.io.Serializable; +import java.time.LocalDateTime; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +@Data +public class RoleMenu implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "主键") + @TableId(value = "id", type = IdType.ASSIGN_UUID) + private String id; + + @Schema(description = "角色ID") + private String roleId; + + @Schema(description = "菜单") + private String menu; + + @Schema(description = "权限") + private String permission; + + @Schema(description = "创建时间") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createdAt; + + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/yj/earth/business/domain/RoleOperate.java b/src/main/java/com/yj/earth/business/domain/RoleOperate.java new file mode 100644 index 0000000..05f3afc --- /dev/null +++ b/src/main/java/com/yj/earth/business/domain/RoleOperate.java @@ -0,0 +1,39 @@ +package com.yj.earth.business.domain; + +import com.baomidou.mybatisplus.annotation.FieldFill; +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 java.io.Serializable; +import java.time.LocalDateTime; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +@Data +public class RoleOperate implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "主键") + @TableId(value = "id", type = IdType.ASSIGN_UUID) + private String id; + + @Schema(description = "角色ID") + private String roleId; + + @Schema(description = "操作") + private String operate; + + @Schema(description = "创建时间") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/yj/earth/business/domain/TsPlan.java b/src/main/java/com/yj/earth/business/domain/TsPlan.java new file mode 100644 index 0000000..f990cfc --- /dev/null +++ b/src/main/java/com/yj/earth/business/domain/TsPlan.java @@ -0,0 +1,42 @@ +package com.yj.earth.business.domain; + +import com.baomidou.mybatisplus.annotation.FieldFill; +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 java.io.Serializable; +import java.time.LocalDateTime; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +@Data +public class TsPlan implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.ASSIGN_UUID) + @Schema(description = "主键") + private String id; + + @Schema(description = "方案名称") + private String name; + + @Schema(description = "方案描述") + private String desc; + + @Schema(description = "创建人") + private String createdBy; + + @Schema(description = "创建时间") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/yj/earth/business/mapper/RoleMenuMapper.java b/src/main/java/com/yj/earth/business/mapper/RoleMenuMapper.java new file mode 100644 index 0000000..ff797db --- /dev/null +++ b/src/main/java/com/yj/earth/business/mapper/RoleMenuMapper.java @@ -0,0 +1,18 @@ +package com.yj.earth.business.mapper; + +import com.yj.earth.business.domain.RoleMenu; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 周志雄 + * @since 2025-10-31 + */ +@Mapper +public interface RoleMenuMapper extends BaseMapper { + +} diff --git a/src/main/java/com/yj/earth/business/mapper/RoleOperateMapper.java b/src/main/java/com/yj/earth/business/mapper/RoleOperateMapper.java new file mode 100644 index 0000000..0093941 --- /dev/null +++ b/src/main/java/com/yj/earth/business/mapper/RoleOperateMapper.java @@ -0,0 +1,18 @@ +package com.yj.earth.business.mapper; + +import com.yj.earth.business.domain.RoleOperate; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 周志雄 + * @since 2025-10-31 + */ +@Mapper +public interface RoleOperateMapper extends BaseMapper { + +} diff --git a/src/main/java/com/yj/earth/business/mapper/TsPlanMapper.java b/src/main/java/com/yj/earth/business/mapper/TsPlanMapper.java new file mode 100644 index 0000000..17eed5b --- /dev/null +++ b/src/main/java/com/yj/earth/business/mapper/TsPlanMapper.java @@ -0,0 +1,18 @@ +package com.yj.earth.business.mapper; + +import com.yj.earth.business.domain.TsPlan; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 周志雄 + * @since 2025-10-31 + */ +@Mapper +public interface TsPlanMapper extends BaseMapper { + +} diff --git a/src/main/java/com/yj/earth/business/service/RoleMenuService.java b/src/main/java/com/yj/earth/business/service/RoleMenuService.java new file mode 100644 index 0000000..761842c --- /dev/null +++ b/src/main/java/com/yj/earth/business/service/RoleMenuService.java @@ -0,0 +1,16 @@ +package com.yj.earth.business.service; + +import com.yj.earth.business.domain.RoleMenu; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 周志雄 + * @since 2025-10-31 + */ +public interface RoleMenuService extends IService { + +} diff --git a/src/main/java/com/yj/earth/business/service/RoleOperateService.java b/src/main/java/com/yj/earth/business/service/RoleOperateService.java new file mode 100644 index 0000000..b43c899 --- /dev/null +++ b/src/main/java/com/yj/earth/business/service/RoleOperateService.java @@ -0,0 +1,16 @@ +package com.yj.earth.business.service; + +import com.yj.earth.business.domain.RoleOperate; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 周志雄 + * @since 2025-10-31 + */ +public interface RoleOperateService extends IService { + +} diff --git a/src/main/java/com/yj/earth/business/service/TsPlanService.java b/src/main/java/com/yj/earth/business/service/TsPlanService.java new file mode 100644 index 0000000..d325d4e --- /dev/null +++ b/src/main/java/com/yj/earth/business/service/TsPlanService.java @@ -0,0 +1,16 @@ +package com.yj.earth.business.service; + +import com.yj.earth.business.domain.TsPlan; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 周志雄 + * @since 2025-10-31 + */ +public interface TsPlanService extends IService { + +} diff --git a/src/main/java/com/yj/earth/business/service/impl/RoleMenuServiceImpl.java b/src/main/java/com/yj/earth/business/service/impl/RoleMenuServiceImpl.java new file mode 100644 index 0000000..5715293 --- /dev/null +++ b/src/main/java/com/yj/earth/business/service/impl/RoleMenuServiceImpl.java @@ -0,0 +1,20 @@ +package com.yj.earth.business.service.impl; + +import com.yj.earth.business.domain.RoleMenu; +import com.yj.earth.business.mapper.RoleMenuMapper; +import com.yj.earth.business.service.RoleMenuService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 周志雄 + * @since 2025-10-31 + */ +@Service +public class RoleMenuServiceImpl extends ServiceImpl implements RoleMenuService { + +} diff --git a/src/main/java/com/yj/earth/business/service/impl/RoleOperateServiceImpl.java b/src/main/java/com/yj/earth/business/service/impl/RoleOperateServiceImpl.java new file mode 100644 index 0000000..72ff5a4 --- /dev/null +++ b/src/main/java/com/yj/earth/business/service/impl/RoleOperateServiceImpl.java @@ -0,0 +1,20 @@ +package com.yj.earth.business.service.impl; + +import com.yj.earth.business.domain.RoleOperate; +import com.yj.earth.business.mapper.RoleOperateMapper; +import com.yj.earth.business.service.RoleOperateService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 周志雄 + * @since 2025-10-31 + */ +@Service +public class RoleOperateServiceImpl extends ServiceImpl implements RoleOperateService { + +} diff --git a/src/main/java/com/yj/earth/business/service/impl/TsPlanServiceImpl.java b/src/main/java/com/yj/earth/business/service/impl/TsPlanServiceImpl.java new file mode 100644 index 0000000..54076f1 --- /dev/null +++ b/src/main/java/com/yj/earth/business/service/impl/TsPlanServiceImpl.java @@ -0,0 +1,20 @@ +package com.yj.earth.business.service.impl; + +import com.yj.earth.business.domain.TsPlan; +import com.yj.earth.business.mapper.TsPlanMapper; +import com.yj.earth.business.service.TsPlanService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 周志雄 + * @since 2025-10-31 + */ +@Service +public class TsPlanServiceImpl extends ServiceImpl implements TsPlanService { + +} diff --git a/src/main/java/com/yj/earth/common/util/CodeUtil.java b/src/main/java/com/yj/earth/common/util/CodeUtil.java index c23ddcd..91d736c 100644 --- a/src/main/java/com/yj/earth/common/util/CodeUtil.java +++ b/src/main/java/com/yj/earth/common/util/CodeUtil.java @@ -34,7 +34,7 @@ public class CodeUtil { } // 传入需要生成代码的表名 - Generation("matter"); + Generation("role_menu"); } public static void Generation(String... tableName) { diff --git a/src/main/java/com/yj/earth/datasource/DatabaseManager.java b/src/main/java/com/yj/earth/datasource/DatabaseManager.java index 067ea74..2030830 100644 --- a/src/main/java/com/yj/earth/datasource/DatabaseManager.java +++ b/src/main/java/com/yj/earth/datasource/DatabaseManager.java @@ -56,6 +56,9 @@ public class DatabaseManager { classes.add(Device.class); classes.add(PoiInfo.class); classes.add(Matter.class); + classes.add(RoleOperate.class); + classes.add(RoleMenu.class); + classes.add(TsPlan.class); ENTITY_CLASSES = Collections.unmodifiableList(classes); } diff --git a/src/main/java/com/yj/earth/design/RoleMenu.java b/src/main/java/com/yj/earth/design/RoleMenu.java new file mode 100644 index 0000000..a8485cf --- /dev/null +++ b/src/main/java/com/yj/earth/design/RoleMenu.java @@ -0,0 +1,22 @@ +package com.yj.earth.design; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class RoleMenu { + @Schema(description = "主键") + private String id; + @Schema(description = "角色ID") + private String roleId; + @Schema(description = "菜单") + private String menu; + @Schema(description = "权限") + private String permission; + @Schema(description = "创建时间") + private LocalDateTime createdAt; + @Schema(description = "更新时间") + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/yj/earth/design/RoleOperate.java b/src/main/java/com/yj/earth/design/RoleOperate.java new file mode 100644 index 0000000..286ae35 --- /dev/null +++ b/src/main/java/com/yj/earth/design/RoleOperate.java @@ -0,0 +1,20 @@ +package com.yj.earth.design; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class RoleOperate { + @Schema(description = "主键") + private String id; + @Schema(description = "角色ID") + private String roleId; + @Schema(description = "操作") + private String operate; + @Schema(description = "创建时间") + private LocalDateTime createdAt; + @Schema(description = "更新时间") + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/yj/earth/design/TsPlan.java b/src/main/java/com/yj/earth/design/TsPlan.java new file mode 100644 index 0000000..5b460c0 --- /dev/null +++ b/src/main/java/com/yj/earth/design/TsPlan.java @@ -0,0 +1,22 @@ +package com.yj.earth.design; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class TsPlan { + @Schema(description = "主键") + private String id; + @Schema(description = "方案名称") + private String name; + @Schema(description = "方案描述") + private String desc; + @Schema(description = "创建人") + private String createdBy; + @Schema(description = "创建时间") + private LocalDateTime createdAt; + @Schema(description = "更新时间") + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/yj/earth/dto/roleMenu/AddRoleMenuDto.java b/src/main/java/com/yj/earth/dto/roleMenu/AddRoleMenuDto.java new file mode 100644 index 0000000..2031691 --- /dev/null +++ b/src/main/java/com/yj/earth/dto/roleMenu/AddRoleMenuDto.java @@ -0,0 +1,16 @@ +package com.yj.earth.dto.roleMenu; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class AddRoleMenuDto { + @Schema(description = "角色ID") + private String roleId; + @Schema(description = "权限列表") + // 键为菜单名、值为该菜单的权限集合 + private List>> permissionList; +} diff --git a/src/main/java/com/yj/earth/dto/roleMenu/UpdateMenuDto.java b/src/main/java/com/yj/earth/dto/roleMenu/UpdateMenuDto.java new file mode 100644 index 0000000..844fbce --- /dev/null +++ b/src/main/java/com/yj/earth/dto/roleMenu/UpdateMenuDto.java @@ -0,0 +1,16 @@ +package com.yj.earth.dto.roleMenu; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class UpdateMenuDto { + @Schema(description = "主键") + private String id; + @Schema(description = "角色ID") + private String roleId; + @Schema(description = "菜单") + private String menu; + @Schema(description = "权限") + private String permission; +} diff --git a/src/main/java/com/yj/earth/dto/roleOperate/AddRoleOperateDto.java b/src/main/java/com/yj/earth/dto/roleOperate/AddRoleOperateDto.java new file mode 100644 index 0000000..e22da2d --- /dev/null +++ b/src/main/java/com/yj/earth/dto/roleOperate/AddRoleOperateDto.java @@ -0,0 +1,14 @@ +package com.yj.earth.dto.roleOperate; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Data +public class AddRoleOperateDto { + @Schema(description = "角色ID") + private String roleId; + @Schema(description = "操作") + private List operateList; +} diff --git a/src/main/java/com/yj/earth/dto/roleOperate/UpdateRoleOperateDto.java b/src/main/java/com/yj/earth/dto/roleOperate/UpdateRoleOperateDto.java new file mode 100644 index 0000000..9c84924 --- /dev/null +++ b/src/main/java/com/yj/earth/dto/roleOperate/UpdateRoleOperateDto.java @@ -0,0 +1,14 @@ +package com.yj.earth.dto.roleOperate; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class UpdateRoleOperateDto { + @Schema(description = "主键") + private String id; + @Schema(description = "角色ID") + private String roleId; + @Schema(description = "操作") + private String operate; +} diff --git a/src/main/java/com/yj/earth/dto/tsPlan/AddTsPlanDto.java b/src/main/java/com/yj/earth/dto/tsPlan/AddTsPlanDto.java new file mode 100644 index 0000000..c5ea3a1 --- /dev/null +++ b/src/main/java/com/yj/earth/dto/tsPlan/AddTsPlanDto.java @@ -0,0 +1,12 @@ +package com.yj.earth.dto.tsPlan; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class AddTsPlanDto { + @Schema(description = "方案名称") + private String name; + @Schema(description = "方案描述") + private String desc; +} diff --git a/src/main/java/com/yj/earth/dto/tsPlan/UpdateTsPlanDto.java b/src/main/java/com/yj/earth/dto/tsPlan/UpdateTsPlanDto.java new file mode 100644 index 0000000..ccf053c --- /dev/null +++ b/src/main/java/com/yj/earth/dto/tsPlan/UpdateTsPlanDto.java @@ -0,0 +1,14 @@ +package com.yj.earth.dto.tsPlan; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class UpdateTsPlanDto { + @Schema(description = "方案Id") + private String id; + @Schema(description = "方案名称") + private String name; + @Schema(description = "方案描述") + private String desc; +} diff --git a/src/main/resources/mapper/RoleMenuMapper.xml b/src/main/resources/mapper/RoleMenuMapper.xml new file mode 100644 index 0000000..f9da869 --- /dev/null +++ b/src/main/resources/mapper/RoleMenuMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, role_id, menu, created_at, updated_at + + + diff --git a/src/main/resources/mapper/RoleOperateMapper.xml b/src/main/resources/mapper/RoleOperateMapper.xml new file mode 100644 index 0000000..820d780 --- /dev/null +++ b/src/main/resources/mapper/RoleOperateMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, role_id, operate, created_at, updated_at + + + diff --git a/src/main/resources/mapper/TsPlanMapper.xml b/src/main/resources/mapper/TsPlanMapper.xml new file mode 100644 index 0000000..32bbcb5 --- /dev/null +++ b/src/main/resources/mapper/TsPlanMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + id, name, desc, created_by, created_at, updated_at + + +