Browse Source

2/26 修改租户会员类型功能时,同时修改掉选择了该会员类型的租户的功能

chendayu 2 years ago
parent
commit
c7350222f5

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

@@ -0,0 +1,24 @@
+package cn.cslg.permission.mapper;
+
+import cn.cslg.permission.common.model.vo.TenantVO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 租户表的Mapper层接口
+ *
+ * @Author chenyu
+ * @Date 2023/2/24
+ */
+@Repository
+public interface TenantMapper {
+    /**
+     * 根据租户会员类型查询租户ids
+     *
+     * @param tenantVipType 租户会员类型
+     * @return 返回查询到的数据
+     */
+    List<Integer> getTenantIdsByTenantVipType(Integer tenantVipType);
+
+}

+ 19 - 0
PCS/src/main/java/cn/cslg/permission/mapper/associate/AssoTenantFunctionMapper.java

@@ -6,6 +6,8 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
+import java.util.List;
+
 /**
  * @author 沈永艺
  * @date 2022-8-29
@@ -18,4 +20,21 @@ public interface AssoTenantFunctionMapper extends BaseMapper<AssoTenantFunction>
 
     @Select("UPDATE ASSOCIATE_TENANT_FUNCTION SET IS_DELETE=0 WHERE ID=#{id}")
     void updateIsDeleteById(@Param("id") Integer id);
+
+    /**
+     * 根据租户ids批量删除数据
+     *
+     * @param tenantIds 租户ids
+     * @return 返回受影响的行数
+     */
+    int deleteByTenantIds(List<Integer> tenantIds);
+
+    /**
+     * 批量插入数据
+     *
+     * @param assoTenantFunctions 数据对象集合
+     * @return 返回受影响的行数
+     */
+    int insertBatch(List<AssoTenantFunction> assoTenantFunctions);
+
 }

+ 9 - 0
PCS/src/main/java/cn/cslg/permission/service/FunctionService.java

@@ -8,6 +8,8 @@ import cn.cslg.permission.domain.Application;
 import cn.cslg.permission.domain.Function;
 import cn.cslg.permission.domain.associate.AssoTenantFunction;
 import cn.cslg.permission.mapper.FunctionMapper;
+import cn.cslg.permission.mapper.TenantEntityMapper;
+import cn.cslg.permission.mapper.TenantVipTypeMapper;
 import cn.cslg.permission.service.associate.RoleFunctionDataService;
 import cn.cslg.permission.service.associate.TenantFunctionService;
 import cn.dev33.satoken.stp.StpUtil;
@@ -40,6 +42,9 @@ public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
     private final RoleFunctionDataService roleFunctionDataService;
     private final TenantFunctionService tenantFunctionService;
     private final FunctionMapper functionMapper;
+    //private final TenantMapper tenantMapper;
+    private final TenantVipTypeMapper tenantVipTypeMapper;
+
     private final CacheUtils cacheUtils;
 
     @Transactional(rollbackFor = Exception.class)
@@ -267,6 +272,7 @@ public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
     }
 
     public String getFuncListByTypeIsShow(String tenant) {
+        //获得当前登陆人所属的租户的租户id
         Integer tenantId = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt()).getTenantId();
         LambdaQueryWrapper<AssoTenantFunction> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         if (tenant != null && !tenant.equals("")) {
@@ -277,6 +283,7 @@ public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
 
         List<Integer> functionIds = tenantFunctionService.list(lambdaQueryWrapper).stream().map(AssoTenantFunction::getFunctionId).collect(Collectors.toList());
 
+
         LambdaQueryWrapper<Function> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper
                 .eq(Function::getFunctionType, 1)
@@ -286,6 +293,8 @@ public class FunctionService extends ServiceImpl<FunctionMapper, Function> {
             lst = this.list(queryWrapper);
         }
 
+        //
+
         List<TreeNode<Integer>> nodeList = CollUtil.newArrayList();
         Set<Integer> set = new HashSet<>();
         for (Function data : lst) {

+ 47 - 41
PCS/src/main/java/cn/cslg/permission/service/SystemService.java

@@ -198,58 +198,62 @@ public class SystemService {
     public String getAllPersonnel() {
         return Response.success(personnelService.list());
     }
+
     /**
      * @author 沈永艺
      * @title 获取租户所有人员
      * @description 获取所有的人员
      */
     public String getTenantPersonnel(Integer tenantId) {
-        if(tenantId==null){
+        if (tenantId == null) {
 
             PersonnelVO personnelVO = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt());
-            tenantId= personnelVO.getTenantId();
+            tenantId = personnelVO.getTenantId();
         }
-        LambdaQueryWrapper<Personnel> queryWrapper =new LambdaQueryWrapper<>();
-        queryWrapper.eq(Personnel::getTenantId,tenantId);
+        LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Personnel::getTenantId, tenantId);
         return Response.success(personnelService.list(queryWrapper));
     }
+
     /**
      * @author 李仁杰
      * @title 根据id查询人员
      * @description 获取所有的人员 不分租户
      */
-    public  List<Integer> getPersonIdByName(String personName) {
-        LambdaQueryWrapper<Personnel> queryWrapper =new LambdaQueryWrapper<>();
+    public List<Integer> getPersonIdByName(String personName) {
+        LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.select(Personnel::getId);
-        queryWrapper.like(Personnel::getPersonnelName,personName);
+        queryWrapper.like(Personnel::getPersonnelName, personName);
 
-        java.util.function.Function <Object,Integer> f = (o -> Integer.parseInt(o.toString())) ;
-        List<Integer> ids =   personnelService.listObjs(queryWrapper,f);
+        java.util.function.Function<Object, Integer> f = (o -> Integer.parseInt(o.toString()));
+        List<Integer> ids = personnelService.listObjs(queryWrapper, f);
 
         return ids;
     }
+
     public String getPersonnelByIds(List<Integer> ids) {
-        LambdaQueryWrapper<Personnel> queryWrapper =new LambdaQueryWrapper<>();
-        queryWrapper.in(Personnel::getId,ids);
+        LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(Personnel::getId, ids);
         return Response.success(personnelService.list(queryWrapper));
     }
+
     /**
      * @author 李仁杰
      * @title 根据id查询部门
      * @description 获取所有的部门
      */
     public List<Integer> getDutyDeparts(Integer personId) {
-        List<Integer> ids =new ArrayList<>();
-        LambdaQueryWrapper<Department> queryWrapper1 =new LambdaQueryWrapper<>();
+        List<Integer> ids = new ArrayList<>();
+        LambdaQueryWrapper<Department> queryWrapper1 = new LambdaQueryWrapper<>();
         queryWrapper1.select(Department::getId);
-        queryWrapper1.in(Department::getCreateUser,personId);
-        List<Map<String,Object>> mapList =new ArrayList<>();
-        java.util.function.Function <Object,Integer> f = (o -> Integer.parseInt(o.toString())) ;
-        List<Integer> departIds =   departmentService.listObjs(queryWrapper1,f);
-        if(departIds.size()==0){
-            return  ids;
+        queryWrapper1.in(Department::getCreateUser, personId);
+        List<Map<String, Object>> mapList = new ArrayList<>();
+        java.util.function.Function<Object, Integer> f = (o -> Integer.parseInt(o.toString()));
+        List<Integer> departIds = departmentService.listObjs(queryWrapper1, f);
+        if (departIds.size() == 0) {
+            return ids;
         }
-        List<Integer> childIds =departmentService.getBaseMapper().getChildIds(departIds);
+        List<Integer> childIds = departmentService.getBaseMapper().getChildIds(departIds);
         ids.addAll(departIds);
         ids.addAll(childIds);
         return ids;
@@ -260,15 +264,15 @@ public class SystemService {
      * @title 根据id查询部门
      * @description 获取所有的部门
      */
-    public List<Map<String,Object>> getDeparts(List<Integer> departIds) {
-        LambdaQueryWrapper<Department> queryWrapper1 =new LambdaQueryWrapper<>();
-        queryWrapper1.in(Department::getId,departIds);
-        List<Map<String,Object>> mapList =new ArrayList<>();
-        List<Department> departmentList =departmentService.list(queryWrapper1);
-        departmentList.forEach(item->{
-            Map<String,Object> map =new HashMap<>();
-            map.put("departId",item.getId());
-            map.put("departName",item.getDepartmentName());
+    public List<Map<String, Object>> getDeparts(List<Integer> departIds) {
+        LambdaQueryWrapper<Department> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper1.in(Department::getId, departIds);
+        List<Map<String, Object>> mapList = new ArrayList<>();
+        List<Department> departmentList = departmentService.list(queryWrapper1);
+        departmentList.forEach(item -> {
+            Map<String, Object> map = new HashMap<>();
+            map.put("departId", item.getId());
+            map.put("departName", item.getDepartmentName());
             mapList.add(map);
         });
         return mapList;
@@ -277,8 +281,8 @@ public class SystemService {
     public String queryPersonPageList(PersonnelVO personnelVO) {
         PersonnelVO personnelVO1 = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt());
         LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
-        if(personnelVO.getName()==null)
-        {personnelVO.setName("");
+        if (personnelVO.getName() == null) {
+            personnelVO.setName("");
         }
         queryWrapper
                 .and((wrapper) ->
@@ -286,10 +290,10 @@ public class SystemService {
                                 .or()
                                 .like(Personnel::getPersonnelDescription, personnelVO.getName())
                 );
-            queryWrapper.eq(Personnel::getTenantId, personnelVO1.getTenantId());
-        if(personnelVO.getNotInPersonIds()!=null&&personnelVO.getNotInPersonIds().size()>0){
+        queryWrapper.eq(Personnel::getTenantId, personnelVO1.getTenantId());
+        if (personnelVO.getNotInPersonIds() != null && personnelVO.getNotInPersonIds().size() > 0) {
 
-           queryWrapper.notIn(Personnel::getId,personnelVO.getNotInPersonIds());
+            queryWrapper.notIn(Personnel::getId, personnelVO.getNotInPersonIds());
 
         }
 
@@ -299,15 +303,17 @@ public class SystemService {
         return Response.success(personnelService.setPersonnelToVO(personnelList), DataUtils.setPageColumn(personnelVO.getSize(), personnelVO.getCurrent(), Math.toIntExact(count)));
 
     }
-    public  IPage<PasUserVO>   getPASAssignedUser(PasUserDTO pasUserDTO){
-        IPage<PasUserVO> personnelList = personnelService.getBaseMapper().getPasUser(new Page<>(pasUserDTO.getCurrent(), pasUserDTO.getSize()),pasUserDTO);
 
-        return  personnelList;
+    public IPage<PasUserVO> getPASAssignedUser(PasUserDTO pasUserDTO) {
+        IPage<PasUserVO> personnelList = personnelService.getBaseMapper().getPasUser(new Page<>(pasUserDTO.getCurrent(), pasUserDTO.getSize()), pasUserDTO);
+
+        return personnelList;
     }
-    public Boolean  setPassword(Integer id ,String password){
-     Personnel personnel =  personnelService.getById(id);
-     personnel.setPersonnelPassword(password);
 
-        return   personnel.updateById();
+    public Boolean setPassword(Integer id, String password) {
+        Personnel personnel = personnelService.getById(id);
+        personnel.setPersonnelPassword(password);
+
+        return personnel.updateById();
     }
 }

+ 2 - 2
PCS/src/main/java/cn/cslg/permission/service/TenantService.java

@@ -188,9 +188,9 @@ public class TenantService extends ServiceImpl<TenantEntityMapper, Tenant> {
             personnelVO1.setId(tenant.getPersonnelId());
             personnelService.updatePersonnel(personnelVO1);
             //修改关联
-            //租户和功能关联表修改信息
+            //修改租户和功能关联表信息
             List<AssoTenantVipTypeAndFunctionVO> assoTenantVipTypeAndFunctionVOS = assoTenantVipTypeFunctionMapper.selectByTenantVipTypeId(tenant.getTenantVipType());
-            ArrayList<String> functions = new ArrayList<>();
+            List<String> functions = new ArrayList<>();
             for (AssoTenantVipTypeAndFunctionVO assoTenantVipTypeAndFunctionVO : assoTenantVipTypeAndFunctionVOS) {
                 String functionModifyPath = assoTenantVipTypeAndFunctionVO.getFunctionModifyPath();
                 functions.add(functionModifyPath);

+ 36 - 5
PCS/src/main/java/cn/cslg/permission/service/impl/TenantVipTypeService.java

@@ -4,14 +4,19 @@ import cn.cslg.permission.common.JsonPage;
 import cn.cslg.permission.common.model.dto.PageDTO2;
 import cn.cslg.permission.common.model.dto.TenantVipTypeFunctionAddNewDTO;
 import cn.cslg.permission.common.model.dto.TenantVipTypeFunctionUpdateDTO;
+import cn.cslg.permission.common.model.vo.AssoTenantVipTypeAndFunctionVO;
 import cn.cslg.permission.common.model.vo.TenantVipTypeFunctionVO;
 import cn.cslg.permission.domain.AssoTenantVipTypeAndFunction;
 import cn.cslg.permission.domain.FunctionIdPathNameDescription;
 import cn.cslg.permission.domain.TenantVipType;
+import cn.cslg.permission.domain.associate.AssoTenantFunction;
 import cn.cslg.permission.exception.XiaoShiException;
 import cn.cslg.permission.mapper.AssoTenantVipTypeFunctionMapper;
+import cn.cslg.permission.mapper.TenantMapper;
 import cn.cslg.permission.mapper.TenantVipTypeMapper;
+import cn.cslg.permission.mapper.associate.AssoTenantFunctionMapper;
 import cn.cslg.permission.service.ITenantVipTypeService;
+import cn.cslg.permission.service.associate.TenantFunctionService;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import lombok.RequiredArgsConstructor;
@@ -37,6 +42,9 @@ import java.util.stream.Collectors;
 public class TenantVipTypeService implements ITenantVipTypeService {
     private final TenantVipTypeMapper tenantVipTypeMapper;
     private final AssoTenantVipTypeFunctionMapper assoTenantVipTypeFunctionMapper;
+    private final TenantMapper tenantMapper;
+    private final AssoTenantFunctionMapper assoTenantFunctionMapper;
+    private final TenantFunctionService tenantFunctionService;
 
     /**
      * 新增租户会员类型(绑定对应的功能权限)
@@ -177,12 +185,12 @@ public class TenantVipTypeService implements ITenantVipTypeService {
             throw new XiaoShiException(message);
         }
 
-        //删除原有租户会员类型和功能关联表数据
-        log.info("删除原有租户会员类型和功能关联表数据");
+        //删除原有租户会员类型和功能关联表数据
+        log.info("删除原有租户会员类型和功能关联表数据");
         assoTenantVipTypeFunctionMapper.deleteByTenantVipTypeId(tenantVipTypeId);
 
-        //新租户会员类型和功能数据入关联表
-        ArrayList<AssoTenantVipTypeAndFunction> assoTenantVipTypeAndFunctions = new ArrayList<>();
+        //新数据入租户会员类型和功能关联表
+        List<AssoTenantVipTypeAndFunction> assoTenantVipTypeAndFunctions = new ArrayList<>();
         List<String> functionModifyPaths = tenantVipTypeFunctionUpdateDTO.getFunctionModifyPaths();
         for (String functionModifyPath : functionModifyPaths) {
             //按逗号拆分路径,取拆分后的String[]中最后一个元素,将该元素转换为Integer类型
@@ -198,7 +206,7 @@ public class TenantVipTypeService implements ITenantVipTypeService {
                     .setFunctionModifyPath(functionModifyPath);
             assoTenantVipTypeAndFunctions.add(assoTenantVipTypeAndFunction);
         }
-        log.info("数据租户会员类型和功能关联表");
+        log.info("数据入租户会员类型和功能关联表");
         rows = assoTenantVipTypeFunctionMapper.insertBatch(assoTenantVipTypeAndFunctions);
         if (rows != functionModifyPaths.size()) {
             String message = "数据插入新租户会员类型和功能关联表失败,修改失败,服务器忙请稍后再试";
@@ -206,6 +214,29 @@ public class TenantVipTypeService implements ITenantVipTypeService {
             throw new XiaoShiException(message);
         }
 
+        //修改租户和功能关联表数据 ↓
+        //根据租户会员类型查询租户tenantIds
+        log.info("根据租户会员类型查询租户表的tenantIds");
+        List<Integer> tenantIds = tenantMapper.getTenantIdsByTenantVipType(tenantVipTypeId);
+        //删除选择该租户会员类型的原租户和功能关联表数据
+        log.info("批量删除选择该租户会员类型的原租户和功能关联表数据");
+        assoTenantFunctionMapper.deleteByTenantIds(tenantIds);
+        //遍历选择该会员的租户,新数据入租户和功能关联表
+        for (Integer tenantId : tenantIds) {
+            List<AssoTenantFunction> assoTenantFunctions = new ArrayList<>();
+            for (String functionModifyPath : functionModifyPaths) {
+                String functionStringId = functionModifyPath.split(",")[functionModifyPath.split(",").length - 1];
+                int functionId = Integer.parseInt(functionStringId);
+                AssoTenantFunction assoTenantFunction = new AssoTenantFunction()
+                        .setTenantId(tenantId)
+                        .setFunctionId(functionId)
+                        .setFunctionModifyPath(functionModifyPath);
+                assoTenantFunctions.add(assoTenantFunction);
+            }
+            //用mybatis-plus的方法(因为这里数据插入租户和功能关联表时还有创建时间、创建人、IS_DELETE字段,租户和功能关联表实体类中使用了注解@TableField(value = "CREATE_USER", fill = FieldFill.INSERT))
+            tenantFunctionService.saveBatch(assoTenantFunctions);
+        }
+
         log.info("修改租户会员类型完成");
 
     }

+ 31 - 0
PCS/src/main/resources/mapper/AssoTenantFunctionMapper.xml

@@ -0,0 +1,31 @@
+<?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.associate.AssoTenantFunctionMapper">
+
+    <!--根据租户ids批量删除数据-->
+    <!--int deleteByTenantIds(List<Integer> tenantIds);-->
+    <delete id="deleteByTenantIds">
+        delete
+        from associate_tenant_function
+        where TENANT_ID in (
+        <foreach collection="list" item="n" separator=",">
+            #{n}
+        </foreach>
+        )
+    </delete>
+
+    <!--批量插入数据-->
+    <!--int insertBatch(List<AssoTenantFunction> assoTenantFunctions);-->
+    <insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">
+        insert into associate_tenant_function (TENANT_ID, FUNCTION_ID, FUNCTION_MODIFY_PATH, CREATE_USER,
+                                               CREATE_TIME, IS_DELETE)
+        VALUES
+        <foreach collection="list" item="n" separator=",">
+            (#{n.}, #{n.}, #{n.}, #{n.}, #{n.}, #{n.})
+        </foreach>
+    </insert>
+
+
+</mapper>

+ 14 - 0
PCS/src/main/resources/mapper/TenantMapper.xml

@@ -0,0 +1,14 @@
+<?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.TenantMapper">
+    <!--根据租户会员类型查询租户ids-->
+    <!--List<Integer> getTenantIdsByTenantVipType(Integer tenantVipType);-->
+    <select id="getTenantIdsByTenantVipType" resultType="int">
+        select ID
+        from tenant
+        where TENANT_VIP_TYPE = #{tenantVipType}
+    </select>
+
+</mapper>