Bläddra i källkod

add:中台增加权限管理(增加角色相关功能)

lyx 1 vecka sedan
förälder
incheckning
ca6bb43da2

+ 74 - 0
alien-entity/src/main/java/shop/alien/entity/store/LifeSysRole.java

@@ -0,0 +1,74 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 平台角色信息表
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@TableName("life_sys_role")
+@ApiModel(value = "LifeSysRole对象", description = "平台角色信息表")
+public class LifeSysRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "角色ID")
+    @TableId(value = "role_id", type = IdType.AUTO)
+    private Long roleId;
+
+    @ApiModelProperty(value = "角色名称")
+    @TableField("role_name")
+    private String roleName;
+
+    @ApiModelProperty(value = "显示顺序")
+    @TableField("role_sort")
+    private Integer roleSort;
+
+    @ApiModelProperty(value = "角色状态(0正常 1停用)")
+    @TableField("status")
+    private String status;
+
+    @ApiModelProperty(value = "角色描述")
+    @TableField("description")
+    private String description;
+
+    @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)")
+    @TableField("del_flag")
+    @TableLogic
+    private String delFlag;
+
+    @ApiModelProperty(value = "创建者")
+    @TableField("create_by")
+    private String createBy;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "更新者")
+    @TableField("update_by")
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(value = "updated_time", fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "备注")
+    @TableField("remark")
+    private String remark;
+}
+

+ 16 - 0
alien-entity/src/main/java/shop/alien/mapper/LifeSysRoleMapper.java

@@ -0,0 +1,16 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import shop.alien.entity.store.LifeSysRole;
+
+/**
+ * 平台角色信息表 Mapper 接口
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Mapper
+public interface LifeSysRoleMapper extends BaseMapper<LifeSysRole> {
+}
+

+ 28 - 0
alien-entity/src/main/resources/mapper/LifeSysRoleMapper.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="shop.alien.mapper.LifeSysRoleMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="shop.alien.entity.store.LifeSysRole">
+        <id column="role_id" property="roleId" />
+        <result column="role_name" property="roleName" />
+        <result column="role_key" property="roleKey" />
+        <result column="role_sort" property="roleSort" />
+        <result column="data_scope" property="dataScope" />
+        <result column="status" property="status" />
+        <result column="del_flag" property="delFlag" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        role_id, role_name, role_key, role_sort, data_scope, status, del_flag,
+        create_by, create_time, update_by, update_time, remark
+    </sql>
+
+</mapper>
+

+ 135 - 0
alien-store/src/main/java/shop/alien/store/controller/LifeSysRoleController.java

@@ -0,0 +1,135 @@
+package shop.alien.store.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.LifeSysRole;
+import shop.alien.store.service.LifeSysRoleService;
+
+import java.util.List;
+
+/**
+ * 平台角色信息表 前端控制器
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Slf4j
+@Api(tags = {"平台角色管理"})
+@ApiSort(1)
+@CrossOrigin
+@RestController
+@RequestMapping("/sys/role")
+@RequiredArgsConstructor
+public class LifeSysRoleController {
+
+    private final LifeSysRoleService lifeSysRoleService;
+
+    @ApiOperation("分页查询角色列表")
+    @ApiOperationSupport(order = 1)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "page", value = "页码", dataType = "int", paramType = "query", required = true),
+            @ApiImplicitParam(name = "size", value = "页容", dataType = "int", paramType = "query", required = true),
+            @ApiImplicitParam(name = "roleName", value = "角色名称(支持模糊查询)", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "description", value = "角色描述(支持模糊查询)", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "status", value = "角色状态(0正常 1停用)", dataType = "String", paramType = "query")
+    })
+    @GetMapping("/getRolePage")
+    public R<IPage<LifeSysRole>> getRolePage(
+            @RequestParam(name = "page", defaultValue = "1") int page,
+            @RequestParam(name = "size", defaultValue = "10") int size,
+            @RequestParam(value = "roleName", required = false) String roleName,
+            @RequestParam(value = "description", required = false) String description,
+            @RequestParam(value = "status", required = false) String status) {
+        log.info("LifeSysRoleController.getRolePage?page={}, size={}, roleName={}, roleKey={}, status={}", 
+                page, size, roleName, description, status);
+        IPage<LifeSysRole> rolePage = lifeSysRoleService.getRolePage(page, size, roleName, description, status);
+        return R.data(rolePage);
+    }
+
+    @ApiOperation("根据ID查询角色详情")
+    @ApiOperationSupport(order = 2)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "roleId", value = "角色ID", dataType = "Long", paramType = "path", required = true)
+    })
+    @GetMapping("/getRoleById")
+    public R<LifeSysRole> getRoleById(@RequestParam("roleId") Long roleId) {
+        log.info("LifeSysRoleController.getRoleById?roleId={}", roleId);
+        LifeSysRole role = lifeSysRoleService.getRoleById(roleId);
+        if (role == null) {
+            return R.fail("未找到该角色信息");
+        }
+        return R.data(role);
+    }
+
+    @ApiOperation("新增角色")
+    @ApiOperationSupport(order = 3)
+    @PostMapping("/saveRole")
+    public R<String> saveRole(@RequestBody LifeSysRole role) {
+        log.info("LifeSysRoleController.saveRole?role={}", role);
+        boolean result = lifeSysRoleService.saveRole(role);
+        if (result) {
+            return R.success("新增成功");
+        }
+        return R.fail("新增失败");
+    }
+
+    @ApiOperation("修改角色")
+    @ApiOperationSupport(order = 4)
+    @PostMapping("/updateRole")
+    public R<String> updateRole(@RequestBody LifeSysRole role) {
+        log.info("LifeSysRoleController.updateRole?role={}", role);
+        boolean result = lifeSysRoleService.updateRole(role);
+        if (result) {
+            return R.success("修改成功");
+        }
+        return R.fail("修改失败");
+    }
+
+    @ApiOperation("删除角色")
+    @ApiOperationSupport(order = 5)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "roleId", value = "角色ID", dataType = "Long", paramType = "path", required = true)
+    })
+    @DeleteMapping("/deleteRole")
+    public R<String> deleteRole(@RequestParam("roleId") Long roleId) {
+        log.info("LifeSysRoleController.deleteRole?roleId={}", roleId);
+        boolean result = lifeSysRoleService.deleteRole(roleId);
+        if (result) {
+            return R.success("删除成功");
+        }
+        return R.fail("删除失败");
+    }
+
+    @ApiOperation("修改角色状态")
+    @ApiOperationSupport(order = 6)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "roleId", value = "角色ID", dataType = "Long", paramType = "path", required = true),
+            @ApiImplicitParam(name = "status", value = "角色状态(0正常 1停用)", dataType = "String", paramType = "query", required = true)
+    })
+    @PutMapping("/updateStatus")
+    public R<String> updateStatus(
+            @RequestParam("roleId") Long roleId,
+            @RequestParam("status") String status) {
+        log.info("LifeSysRoleController.updateStatus?roleId={}, status={}", roleId, status);
+        boolean result = lifeSysRoleService.updateStatus(roleId, status);
+        if (result) {
+            return R.success("操作成功");
+        }
+        return R.fail("操作失败");
+    }
+
+    @ApiOperation("查询所有正常状态的角色列表")
+    @ApiOperationSupport(order = 7)
+    @GetMapping("/getAllNormalRoles")
+    public R<List<LifeSysRole>> getAllNormalRoles() {
+        log.info("LifeSysRoleController.getAllNormalRoles");
+        List<LifeSysRole> roles = lifeSysRoleService.getAllNormalRoles();
+        return R.data(roles);
+    }
+
+}
+

+ 77 - 0
alien-store/src/main/java/shop/alien/store/service/LifeSysRoleService.java

@@ -0,0 +1,77 @@
+package shop.alien.store.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import shop.alien.entity.store.LifeSysRole;
+
+import java.util.List;
+
+/**
+ * 平台角色信息表 服务类
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+public interface LifeSysRoleService extends IService<LifeSysRole> {
+
+    /**
+     * 分页查询角色列表
+     *
+     * @param page     页码
+     * @param size     页容
+     * @param roleName 角色名称(支持模糊查询)
+     * @param roleKey  角色权限字符串(支持模糊查询)
+     * @param status   角色状态(0正常 1停用)
+     * @return IPage<LifeSysRole>
+     */
+    IPage<LifeSysRole> getRolePage(int page, int size, String roleName, String roleKey, String status);
+
+    /**
+     * 根据ID查询角色详情
+     *
+     * @param roleId 角色ID
+     * @return LifeSysRole
+     */
+    LifeSysRole getRoleById(Long roleId);
+
+    /**
+     * 新增角色
+     *
+     * @param role 角色信息
+     * @return boolean
+     */
+    boolean saveRole(LifeSysRole role);
+
+    /**
+     * 修改角色
+     *
+     * @param role 角色信息
+     * @return boolean
+     */
+    boolean updateRole(LifeSysRole role);
+
+    /**
+     * 删除角色(逻辑删除)
+     *
+     * @param roleId 角色ID
+     * @return boolean
+     */
+    boolean deleteRole(Long roleId);
+
+    /**
+     * 修改角色状态
+     *
+     * @param roleId 角色ID
+     * @param status 角色状态(0正常 1停用)
+     * @return boolean
+     */
+    boolean updateStatus(Long roleId, String status);
+
+    /**
+     * 查询所有正常状态的角色列表
+     *
+     * @return List<LifeSysRole>
+     */
+    List<LifeSysRole> getAllNormalRoles();
+}
+

+ 135 - 0
alien-store/src/main/java/shop/alien/store/service/impl/LifeSysRoleServiceImpl.java

@@ -0,0 +1,135 @@
+package shop.alien.store.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+import shop.alien.entity.store.LifeSysRole;
+import shop.alien.mapper.LifeSysRoleMapper;
+import shop.alien.store.service.LifeSysRoleService;
+
+import java.util.List;
+
+/**
+ * 平台角色信息表 服务实现类
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+@Transactional
+public class LifeSysRoleServiceImpl extends ServiceImpl<LifeSysRoleMapper, LifeSysRole> implements LifeSysRoleService {
+
+    private final LifeSysRoleMapper lifeSysRoleMapper;
+
+    @Override
+    public IPage<LifeSysRole> getRolePage(int page, int size, String roleName, String description, String status) {
+        LambdaQueryWrapper<LifeSysRole> queryWrapper = new LambdaQueryWrapper<>();
+        
+        // 角色名称模糊查询
+        if (StringUtils.hasText(roleName)) {
+            queryWrapper.like(LifeSysRole::getRoleName, roleName);
+        }
+        // 角色描述模糊查询
+        if (StringUtils.hasText(description)) {
+            queryWrapper.like(LifeSysRole::getDescription, description);
+        }
+        
+        // 角色状态查询
+        if (StringUtils.hasText(status)) {
+            queryWrapper.eq(LifeSysRole::getStatus, status);
+        }
+        
+        // 按显示顺序和创建时间排序
+        queryWrapper.orderByAsc(LifeSysRole::getRoleSort);
+        queryWrapper.orderByDesc(LifeSysRole::getCreatedTime);
+
+        return lifeSysRoleMapper.selectPage(new Page<>(page, size), queryWrapper);
+    }
+
+    @Override
+    public LifeSysRole getRoleById(Long roleId) {
+        return lifeSysRoleMapper.selectById(roleId);
+    }
+
+    @Override
+    public boolean saveRole(LifeSysRole role) {
+        // 校验必填字段
+        if (!StringUtils.hasText(role.getRoleName())) {
+            log.error("角色名称不能为空");
+            return false;
+        }
+        // 设置默认值
+        if (role.getRoleSort() == null) {
+            role.setRoleSort(0);
+        }
+        if (!StringUtils.hasText(role.getStatus())) {
+            role.setStatus("0"); // 默认正常
+        }
+        if (!StringUtils.hasText(role.getDelFlag())) {
+            role.setDelFlag("0"); // 默认未删除
+        }
+        int result = lifeSysRoleMapper.insert(role);
+        return result > 0;
+    }
+
+    @Override
+    public boolean updateRole(LifeSysRole role) {
+        if (role.getRoleId() == null) {
+            log.error("角色ID不能为空");
+            return false;
+        }
+
+        int result = lifeSysRoleMapper.updateById(role);
+        return result > 0;
+    }
+
+    @Override
+    public boolean deleteRole(Long roleId) {
+        // 逻辑删除
+        LambdaUpdateWrapper<LifeSysRole> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(LifeSysRole::getRoleId, roleId);
+        updateWrapper.set(LifeSysRole::getDelFlag, "2"); // 2代表删除
+        
+        int result = lifeSysRoleMapper.update(null, updateWrapper);
+        return result > 0;
+    }
+
+    @Override
+    public boolean updateStatus(Long roleId, String status) {
+        if (roleId == null) {
+            log.error("角色ID不能为空");
+            return false;
+        }
+        if (!StringUtils.hasText(status)) {
+            log.error("角色状态不能为空");
+            return false;
+        }
+        
+        LambdaUpdateWrapper<LifeSysRole> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(LifeSysRole::getRoleId, roleId);
+        updateWrapper.set(LifeSysRole::getStatus, status);
+        
+        int result = lifeSysRoleMapper.update(null, updateWrapper);
+        return result > 0;
+    }
+
+    @Override
+    public List<LifeSysRole> getAllNormalRoles() {
+        LambdaQueryWrapper<LifeSysRole> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(LifeSysRole::getStatus, "0"); // 正常状态
+        queryWrapper.eq(LifeSysRole::getDelFlag, "0"); // 未删除
+        queryWrapper.orderByAsc(LifeSysRole::getRoleSort);
+        
+        return lifeSysRoleMapper.selectList(queryWrapper);
+    }
+}
+