From fcddc4fc8c785321d683a5deb798d4813168e3db Mon Sep 17 00:00:00 2001
From: Jerry Yan <792602257@qq.com>
Date: Mon, 31 Mar 2025 18:19:36 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../controller/pc/PermissionController.java   | 56 +++++++++++++++++++
 .../ycwl/basic/mapper/PermissionMapper.java   | 15 +++++
 .../permission/entity/PermissionEntity.java   | 31 ++++++++++
 .../pc/permission/req/PermissionSaveReq.java  | 10 ++++
 .../pc/permission/resp/PermissionResp.java    | 12 ++++
 .../basic/service/pc/PermissionService.java   | 10 ++++
 .../pc/impl/PermissionServiceImpl.java        | 31 ++++++++++
 .../resources/mapper/PermissionMapper.xml     | 22 ++++++++
 8 files changed, 187 insertions(+)
 create mode 100644 src/main/java/com/ycwl/basic/controller/pc/PermissionController.java
 create mode 100644 src/main/java/com/ycwl/basic/mapper/PermissionMapper.java
 create mode 100644 src/main/java/com/ycwl/basic/model/pc/permission/entity/PermissionEntity.java
 create mode 100644 src/main/java/com/ycwl/basic/model/pc/permission/req/PermissionSaveReq.java
 create mode 100644 src/main/java/com/ycwl/basic/model/pc/permission/resp/PermissionResp.java
 create mode 100644 src/main/java/com/ycwl/basic/service/pc/PermissionService.java
 create mode 100644 src/main/java/com/ycwl/basic/service/pc/impl/PermissionServiceImpl.java
 create mode 100644 src/main/resources/mapper/PermissionMapper.xml

diff --git a/src/main/java/com/ycwl/basic/controller/pc/PermissionController.java b/src/main/java/com/ycwl/basic/controller/pc/PermissionController.java
new file mode 100644
index 0000000..c353762
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/controller/pc/PermissionController.java
@@ -0,0 +1,56 @@
+package com.ycwl.basic.controller.pc;
+
+import com.ycwl.basic.constant.BaseContextHandler;
+import com.ycwl.basic.model.pc.permission.entity.PermissionEntity;
+import com.ycwl.basic.model.pc.permission.req.PermissionSaveReq;
+import com.ycwl.basic.model.pc.permission.resp.PermissionResp;
+import com.ycwl.basic.service.pc.PermissionService;
+import com.ycwl.basic.utils.ApiResponse;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+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;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+@RestController
+@RequestMapping("/api/permission/v1")
+@Api(tags = "权限管理接口")
+public class PermissionController {
+    @Autowired
+    private PermissionService permissionService;
+
+    @GetMapping("/get/")
+    public ApiResponse<PermissionResp> getPermissionByUser() {
+        String userId = BaseContextHandler.getUserId();
+        PermissionEntity permission = permissionService.getPermissionByUserId(Long.parseLong(userId));
+        if (permission == null || StringUtils.isEmpty(permission.getPermString())) {
+            return ApiResponse.success(new PermissionResp(new ArrayList<>()));
+        }
+        return ApiResponse.success(new PermissionResp(Arrays.asList(StringUtils.split(permission.getPermString(), ","))));
+    }
+
+    @ApiOperation("根据用户ID查询权限信息")
+    @GetMapping("/get/{userId}")
+    public ApiResponse<PermissionResp> getPermissionByUser(@PathVariable Long userId) {
+        PermissionEntity permission = permissionService.getPermissionByUserId(userId);
+        if (permission == null || StringUtils.isEmpty(permission.getPermString())) {
+            return ApiResponse.success(new PermissionResp(new ArrayList<>()));
+        }
+        return ApiResponse.success(new PermissionResp(Arrays.asList(StringUtils.split(permission.getPermString(), ","))));
+    }
+
+    @ApiOperation("保存或更新权限信息")
+    @PostMapping("/save/{userId}")
+    public ApiResponse saveOrUpdate(@PathVariable Long userId, @RequestBody PermissionSaveReq req) {
+        permissionService.saveOrUpdate(userId, StringUtils.join(req.getPermissions(), ","));
+        return ApiResponse.success(true);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ycwl/basic/mapper/PermissionMapper.java b/src/main/java/com/ycwl/basic/mapper/PermissionMapper.java
new file mode 100644
index 0000000..d2f60f1
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/mapper/PermissionMapper.java
@@ -0,0 +1,15 @@
+package com.ycwl.basic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycwl.basic.model.pc.permission.entity.PermissionEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface PermissionMapper extends BaseMapper<PermissionEntity> {
+    // 新增用户ID查询方法
+    PermissionEntity selectByUserId(@Param("userId") Long userId);
+
+    void insertPermission(PermissionEntity entity);
+    void updatePermission(PermissionEntity entity);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ycwl/basic/model/pc/permission/entity/PermissionEntity.java b/src/main/java/com/ycwl/basic/model/pc/permission/entity/PermissionEntity.java
new file mode 100644
index 0000000..a0c2202
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/model/pc/permission/entity/PermissionEntity.java
@@ -0,0 +1,31 @@
+package com.ycwl.basic.model.pc.permission.entity;
+
+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 lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("permission")
+public class PermissionEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("user_id")
+    private Long userId; // 确保字段映射
+
+    @TableField("perm_str")
+    private String permString;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ycwl/basic/model/pc/permission/req/PermissionSaveReq.java b/src/main/java/com/ycwl/basic/model/pc/permission/req/PermissionSaveReq.java
new file mode 100644
index 0000000..f8cbe77
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/model/pc/permission/req/PermissionSaveReq.java
@@ -0,0 +1,10 @@
+package com.ycwl.basic.model.pc.permission.req;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PermissionSaveReq {
+    private List<String> permissions;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ycwl/basic/model/pc/permission/resp/PermissionResp.java b/src/main/java/com/ycwl/basic/model/pc/permission/resp/PermissionResp.java
new file mode 100644
index 0000000..cde7837
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/model/pc/permission/resp/PermissionResp.java
@@ -0,0 +1,12 @@
+package com.ycwl.basic.model.pc.permission.resp;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+public class PermissionResp {
+    private List<String> permissions;
+}
diff --git a/src/main/java/com/ycwl/basic/service/pc/PermissionService.java b/src/main/java/com/ycwl/basic/service/pc/PermissionService.java
new file mode 100644
index 0000000..b539031
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/service/pc/PermissionService.java
@@ -0,0 +1,10 @@
+package com.ycwl.basic.service.pc;
+
+import com.ycwl.basic.model.pc.permission.entity.PermissionEntity;
+
+public interface PermissionService {
+    // 新增权限查询接口
+    PermissionEntity getPermissionByUserId(Long userId);
+
+    boolean saveOrUpdate(Long userId, String permStr);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ycwl/basic/service/pc/impl/PermissionServiceImpl.java b/src/main/java/com/ycwl/basic/service/pc/impl/PermissionServiceImpl.java
new file mode 100644
index 0000000..045ede1
--- /dev/null
+++ b/src/main/java/com/ycwl/basic/service/pc/impl/PermissionServiceImpl.java
@@ -0,0 +1,31 @@
+package com.ycwl.basic.service.pc.impl;
+
+import com.ycwl.basic.mapper.PermissionMapper;
+import com.ycwl.basic.model.pc.permission.entity.PermissionEntity;
+import com.ycwl.basic.service.pc.PermissionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class PermissionServiceImpl implements PermissionService {
+    @Autowired
+    private PermissionMapper permissionMapper;
+
+    @Override
+    public PermissionEntity getPermissionByUserId(Long userId) {
+        return permissionMapper.selectByUserId(userId);
+    }
+
+    @Override
+    public boolean saveOrUpdate(Long userId, String permStr) {
+        PermissionEntity entity = new PermissionEntity();
+        entity.setUserId(userId);
+        entity.setPermString(permStr);
+        if (permissionMapper.selectByUserId(userId) == null) {
+            permissionMapper.insertPermission(entity);
+        } else {
+            permissionMapper.updatePermission(entity);
+        }
+        return true;
+    }
+}
\ No newline at end of file
diff --git a/src/main/resources/mapper/PermissionMapper.xml b/src/main/resources/mapper/PermissionMapper.xml
new file mode 100644
index 0000000..22f9431
--- /dev/null
+++ b/src/main/resources/mapper/PermissionMapper.xml
@@ -0,0 +1,22 @@
+<?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="com.ycwl.basic.mapper.PermissionMapper">
+    <!-- 新增插入语句 -->
+    <insert id="insertPermission">
+        INSERT INTO permission (user_id, perm_str, create_time, update_time)
+        VALUES (#{userId}, #{permString}, NOW(), NOW())
+    </insert>
+
+    <!-- 新增更新语句 -->
+    <update id="updatePermission">
+        UPDATE permission
+        SET perm_str = #{permString}, update_time = NOW()
+        WHERE user_id = #{userId}
+    </update>
+    <select id="selectByUserId" resultType="com.ycwl.basic.model.pc.permission.entity.PermissionEntity">
+        SELECT id, user_id, perm_str as permString, create_time, update_time
+        FROM permission
+        WHERE user_id = #{userId}
+        limit 1
+    </select>
+</mapper>
\ No newline at end of file