chendayu 2 年 前
コミット
1cf2d9933a

+ 51 - 0
PCS/src/main/java/cn/cslg/permission/common/model/dto/TenantVipTypeFunctionDTO.java

@@ -0,0 +1,51 @@
+package cn.cslg.permission.common.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 租户会员类型和功能的前端传输DTO类
+ *
+ * @Author chenyu
+ * @Data 2023/2/15
+ */
+@Accessors(chain = true)
+@Data
+public class TenantVipTypeFunctionDTO implements Serializable {
+    /**
+     * 租户会员类型名称
+     */
+    private String tenantVipName;
+    /**
+     * 功能组件权限集合
+     */
+    private List<List<Integer>> functions;
+    /**
+     * 功能组件权限路径集合
+     */
+    private List<String> functionModifyPaths;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 是否启用
+     */
+    private Integer enable;
+    /**
+     * 创建人ID
+     */
+    private Integer createPersonId;
+    /**
+     * 创建人姓名
+     */
+    private String createPersonName;
+
+
+}

+ 47 - 0
PCS/src/main/java/cn/cslg/permission/controller/TenantVipTypeController.java

@@ -0,0 +1,47 @@
+package cn.cslg.permission.controller;
+
+import cn.cslg.permission.common.core.base.Constants;
+import cn.cslg.permission.common.model.dto.TenantVipTypeFunctionDTO;
+import cn.cslg.permission.common.utils.Response;
+import cn.cslg.permission.exception.XiaoShiException;
+import cn.cslg.permission.service.ITenantVipTypeService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+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;
+
+/**
+ * 租户会员类型控制层
+ *
+ * @Author chenyu
+ * @Data 2023/2/15
+ */
+@Tag(name = "租户会员类型管理")
+@RequiredArgsConstructor
+@Slf4j
+@RequestMapping(Constants.PERMISSION_API + "/tenantVipType")
+@RestController
+public class TenantVipTypeController {
+    private final ITenantVipTypeService tenantVipTypeService;  //租户会员类型的Service层接口装配
+
+    @Operation(summary = "新增租户会员类型")
+    @PostMapping("/addNew")
+    public String addNew(@RequestBody TenantVipTypeFunctionDTO tenantVipTypeFunctionDTO) {
+        log.info("开始处理【新增租户会员类型】的请求,参数为:{}", tenantVipTypeFunctionDTO);
+        if (tenantVipTypeFunctionDTO != null) {
+            try {
+                tenantVipTypeService.addNew(tenantVipTypeFunctionDTO);
+                return Response.success("新增租户会员类型完成");
+            } catch (XiaoShiException e) {
+                return Response.error(e.getMessage());
+            }
+        }
+        return Response.error();
+    }
+
+
+}

+ 35 - 0
PCS/src/main/java/cn/cslg/permission/domain/AssoTenantVipTypeAndFunction.java

@@ -0,0 +1,35 @@
+package cn.cslg.permission.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 租户会员类型和功能关联表实体类
+ *
+ * @Author chenyu
+ * @Data 2023/2/15
+ */
+@Accessors(chain = true)
+@Data
+public class AssoTenantVipTypeAndFunction implements Serializable {
+    /**
+     * 主键ID
+     */
+    private Integer id;
+    /**
+     * 租户会员类型ID
+     */
+    private Integer tenantVipTypeId;
+    /**
+     * 功能ID
+     */
+    private Integer functionId;
+    /**
+     * 功能编辑组件路径
+     */
+    private String functionModifyPath;
+
+}

+ 48 - 0
PCS/src/main/java/cn/cslg/permission/domain/TenantVipType.java

@@ -0,0 +1,48 @@
+package cn.cslg.permission.domain;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 租户会员类型表的实体类
+ *
+ * @Author chenyu
+ * @Data 2023/2/15
+ */
+@Accessors(chain = true)
+@Data
+public class TenantVipType implements Serializable {
+    /**
+     * 主键ID
+     */
+    private Integer id;
+    /**
+     * 租户会员类型名称
+     */
+    private String tenantVipName;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 是否启用
+     */
+    private Integer enable;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 创建人ID
+     */
+    private Integer createPersonId;
+    /**
+     * 创建人姓名
+     */
+    private String createPersonName;
+
+}

+ 15 - 0
PCS/src/main/java/cn/cslg/permission/exception/XiaoShiException.java

@@ -0,0 +1,15 @@
+package cn.cslg.permission.exception;
+
+/**
+ * 整个项目通用异常类
+ *
+ * @Author chenyu
+ * @Data 2023/2/15
+ */
+public class XiaoShiException extends RuntimeException {
+
+    public XiaoShiException(String message) {
+        super(message);
+    }
+
+}

+ 24 - 0
PCS/src/main/java/cn/cslg/permission/mapper/AssoTenantVipTypeFunctionMapper.java

@@ -0,0 +1,24 @@
+package cn.cslg.permission.mapper;
+
+import cn.cslg.permission.domain.AssoTenantVipTypeAndFunction;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 租户会员类型和功能关联表的Mapper层接口
+ *
+ * @Author chenyu
+ * @Data 2023/2/15
+ */
+@Repository
+public interface AssoTenantVipTypeFunctionMapper {
+    /**
+     * 批量插入数据
+     *
+     * @param assoTenantVipTypeAndFunctions 数据对象集合
+     * @return 返回受影响的行数
+     */
+    int insertBatch(List<AssoTenantVipTypeAndFunction> assoTenantVipTypeAndFunctions);
+
+}

+ 30 - 0
PCS/src/main/java/cn/cslg/permission/mapper/TenantVipTypeMapper.java

@@ -0,0 +1,30 @@
+package cn.cslg.permission.mapper;
+
+import cn.cslg.permission.domain.TenantVipType;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 租户会员类型表的Mapper层接口
+ *
+ * @Author chenyu
+ * @Data 2023/2/15
+ */
+@Repository
+public interface TenantVipTypeMapper {
+    /**
+     * 插入数据
+     *
+     * @param tenantVipType 租户会员类型数据对象
+     * @return 返回受影响的行数
+     */
+    int insert(TenantVipType tenantVipType);
+
+    /**
+     * 根据名称统计数量
+     *
+     * @param tenantVipName 租户会员名称
+     * @return 返回统计到的数量
+     */
+    int countByTenantVipName(String tenantVipName);
+
+}

+ 21 - 0
PCS/src/main/java/cn/cslg/permission/service/ITenantVipTypeService.java

@@ -0,0 +1,21 @@
+package cn.cslg.permission.service;
+
+import cn.cslg.permission.common.model.dto.TenantVipTypeFunctionDTO;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 租户会员类型管理的Service层接口
+ *
+ * @Author chenyu
+ * @Data 2023/2/15
+ */
+public interface ITenantVipTypeService {
+    /**
+     * 新增租户会员类型(绑定对应的功能权限)
+     *
+     * @param tenantVipTypeFunctionDTO 租户会员类型和功能数据对象
+     */
+    @Transactional
+    void addNew(TenantVipTypeFunctionDTO tenantVipTypeFunctionDTO);
+
+}

+ 91 - 0
PCS/src/main/java/cn/cslg/permission/service/impl/TenantVipTypeService.java

@@ -0,0 +1,91 @@
+package cn.cslg.permission.service.impl;
+
+import cn.cslg.permission.common.model.dto.TenantVipTypeFunctionDTO;
+import cn.cslg.permission.domain.AssoTenantVipTypeAndFunction;
+import cn.cslg.permission.domain.TenantVipType;
+import cn.cslg.permission.exception.XiaoShiException;
+import cn.cslg.permission.mapper.AssoTenantVipTypeFunctionMapper;
+import cn.cslg.permission.mapper.TenantVipTypeMapper;
+import cn.cslg.permission.service.ITenantVipTypeService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 租户会员类型管理的Service层接口实现类
+ *
+ * @Author chenyu
+ * @Data 2023/2/15
+ */
+@RequiredArgsConstructor
+@Slf4j
+@Service
+public class TenantVipTypeService implements ITenantVipTypeService {
+    private final TenantVipTypeMapper tenantVipTypeMapper;
+    private final AssoTenantVipTypeFunctionMapper assoTenantVipTypeFunctionMapper;
+
+    /**
+     * 新增租户会员类型(绑定对应的功能权限)
+     *
+     * @param tenantVipTypeFunctionDTO 租户会员类型和功能数据对象
+     */
+    @Override
+    public void addNew(TenantVipTypeFunctionDTO tenantVipTypeFunctionDTO) {
+        log.info("开始处理【新增租户会员类型】的业务,参数为:{}", tenantVipTypeFunctionDTO);
+
+        //检查租户会员类型名称是否已存在
+        String tenantVipName = tenantVipTypeFunctionDTO.getTenantVipName();
+        log.info("检查租户会员类型名称是否已存在");
+        int count = tenantVipTypeMapper.countByTenantVipName(tenantVipName);
+        if (count > 0) {
+            String message = "新增租户会员类型失败,【" + tenantVipName + "】已存在,请尝试更换名称";
+            log.info("{}", message);
+            throw new XiaoShiException(message);
+        }
+
+        //将DTO数据对象复制给实体类
+        TenantVipType tenantVipType = new TenantVipType();
+        BeanUtils.copyProperties(tenantVipTypeFunctionDTO, tenantVipType);
+        //是否启用属性暂时默认都设置为启用(禁用0 启用1),若以后前端有需求再调整
+        tenantVipType.setCreateTime(new Date()).setEnable(1);
+
+        //数据插入租户会员类型表
+        log.info("数据插入租户会员类型表");
+        int rows = tenantVipTypeMapper.insert(tenantVipType);
+        if (rows != 1) {
+            String message = "新增租户会员类型失败,服务器忙请稍后再试";
+            log.info("{}", message);
+            throw new XiaoShiException(message);
+        }
+
+        //创建租户会员类型和功能关联表实体类集合,准备将集合进行批量插入租户会员类型和功能关联表
+        ArrayList<AssoTenantVipTypeAndFunction> assoTenantVipTypeAndFunctions = new ArrayList<>();
+        //从DTO对象中取出功能组件权限路径集合,遍历集合进行操作依次给租户会员类型和功能关联表实体类赋值
+        List<String> functionModifyPaths = tenantVipTypeFunctionDTO.getFunctionModifyPaths();
+        for (String functionModifyPath : functionModifyPaths) {
+            AssoTenantVipTypeAndFunction assoTenantVipTypeAndFunction = new AssoTenantVipTypeAndFunction()
+                    .setTenantVipTypeId(tenantVipType.getId())
+                    //仁杰的方法:.setFunctionId(Integer.parseInt(functionModifyPath.split(",")[functionModifyPath.split(",").length - 1]))
+                    .setFunctionId(Integer.parseInt(functionModifyPath.substring(functionModifyPath.lastIndexOf(",") + 1)))
+                    .setFunctionModifyPath(functionModifyPath);
+            assoTenantVipTypeAndFunctions.add(assoTenantVipTypeAndFunction);
+        }
+        //数据插入租户会员类型和功能关联表
+        log.info("数据插入租户会员类型和功能关联表");
+        rows = assoTenantVipTypeFunctionMapper.insertBatch(assoTenantVipTypeAndFunctions);
+        if (rows != assoTenantVipTypeAndFunctions.size()) {
+            String message = "新增租户会员类型失败,服务器忙请稍后再试";
+            log.info("{}", message);
+            throw new XiaoShiException(message);
+        }
+
+        log.info("新增租户会员类型完成");
+
+    }
+
+}

+ 18 - 0
PCS/src/main/resources/mapper/AssoTenantVipTypeFunctionMapper.xml

@@ -0,0 +1,18 @@
+<?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="cn.cslg.permission.mapper.AssoTenantVipTypeFunctionMapper">
+
+    <!--批量插入数据-->
+    <!--int insertBatch(List<AssoTenantVipTypeAndFunction> assoTenantVipTypeAndFunctions);-->
+    <insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">
+        insert into ASSO_TENANTVIPTYPE_FUNCTION (TENANT_VIP_TYPE_ID, FUNCTION_ID, FUNCTION_MODIFY_PATH)
+        VALUES
+        <foreach collection="list" item="n" separator=",">
+            (#{n.tenantVipTypeId}, #{n.functionId}, #{n.functionModifyPath})
+        </foreach>
+    </insert>
+
+
+</mapper>

+ 22 - 0
PCS/src/main/resources/mapper/TenantVipTypeMapper.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="cn.cslg.permission.mapper.TenantVipTypeMapper">
+
+    <!--插入数据-->
+    <!--int insert(TenantVipType tenantVipType);-->
+    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
+        insert into TENANT_VIP_TYPE (TENANT_VIP_NAME, REMARK, ENABLE, CREATE_TIME, CREATE_PERSON_ID, CREATE_PERSON_NAME)
+        VALUES (#{tenantVipName}, #{remark}, #{enable}, #{createTime}, #{createPersonId}, #{createPersonName})
+    </insert>
+
+    <!--根据名称统计数量-->
+    <!--int countByTenantVipName(String tenantVipName);-->
+    <select id="countByTenantVipName" resultType="int">
+        select count(*)
+        from TENANT_VIP_TYPE
+        where TENANT_VIP_NAME = #{tenantVipName}
+    </select>
+
+</mapper>