LIVE_YE 2 hónapja
szülő
commit
bedfc769cd

+ 7 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUserTenant.java

@@ -2,6 +2,7 @@ package org.dromara.system.domain;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
@@ -22,5 +23,11 @@ public class SysUserTenant{
 
     private String tenantId;
 
+    /**
+     * 删除标志(0代表存在 1代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
 
 }

+ 2 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java

@@ -124,4 +124,6 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
     @InterceptorIgnore(tenantLine = "true", dataPermission = "false")
     int updateUserByIdNoTenantId(SysUser user);
 
+    @InterceptorIgnore(tenantLine = "true", dataPermission = "false")
+    List<SysUser> selectUserByTenant(@Param("tenant")String tenant,@Param("roleKey")String roleKey);
 }

+ 7 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserTenantMapper.java

@@ -1,5 +1,7 @@
 package org.dromara.system.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
+import org.apache.ibatis.annotations.Param;
 import org.dromara.system.domain.SysUserTenant;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 
@@ -11,4 +13,9 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
  */
 public interface SysUserTenantMapper extends BaseMapperPlus<SysUserTenant, SysUserTenant> {
 
+    @InterceptorIgnore(tenantLine = "true", dataPermission = "false")
+    int selectByUserId(@Param("userId")Long userId);
+
+    @InterceptorIgnore(tenantLine = "true", dataPermission = "false")
+    void updateByTenantId(@Param("tenantId")String tenantId,@Param("userId")Long userId,@Param("delFlag")String delFlag);
 }

+ 41 - 5
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java

@@ -42,7 +42,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static org.dromara.common.core.constant.Constants.THR;
+import static org.dromara.common.core.constant.Constants.*;
 import static org.dromara.common.core.constant.TenantConstants.*;
 import static org.dromara.common.core.enums.UserType.APP_STAFF;
 import static org.dromara.common.core.enums.UserType.PC_USER;
@@ -350,10 +350,30 @@ public class SysTenantServiceImpl implements ISysTenantService {
     @CacheEvict(cacheNames = CacheNames.SYS_TENANT, key = "#bo.tenantId")
     @Override
     public int updateTenantStatus(SysTenantBo bo) {
-        SysTenant tenant = new SysTenant();
-        tenant.setId(bo.getId());
-        tenant.setStatus(bo.getStatus());
-        return baseMapper.updateById(tenant);
+        SysTenant tenan = new SysTenant();
+        //启用账号
+        if(SUCCESS.equals(bo.getStatus())){
+            //判断是否存在相同名字的租户
+            SysTenantBo sbo = new SysTenantBo();
+            sbo.setCompanyName(bo.getCompanyName());
+            LambdaQueryWrapper<SysTenant> lqw = buildQueryWrapper(bo);
+            List<SysTenantVo> sysTenantVos = baseMapper.selectVoList(lqw);
+            if(sysTenantVos!=null && sysTenantVos.size()>1){
+                throw new ServiceException("存在相同名字租户");
+            }
+            SysTenant tenant = MapstructUtils.convert(bo.getTenantId(), SysTenant.class);
+            List<SysUser> userList = userMapper.selectUserByTenant(tenant.getTenantId(),TENANT_ADMIN_ROLE_KEY);
+            for (SysUser sysUser : userList) {
+                sysUser.setDelFlag(SUCCESS);
+                sysUserTenantMapper.updateByTenantId(tenant.getTenantId(),sysUser.getUserId(),SUCCESS);
+            }
+            userMapper.updateBatchById(userList);
+            tenan.setDelFlag(SUCCESS);
+        }
+
+        tenan.setId(bo.getId());
+        tenan.setStatus(bo.getStatus());
+        return baseMapper.updateById(tenan);
     }
 
     /**
@@ -380,6 +400,22 @@ public class SysTenantServiceImpl implements ISysTenantService {
                 throw new ServiceException("超管租户不能删除");
             }
         }
+        for (Long id : ids) {
+            //查询租户信息
+            SysTenant tenant = MapstructUtils.convert(id, SysTenant.class);
+            //删除租户管理员账号,判断账号是否只有一个租户
+            List<SysUser> userList = userMapper.selectUserByTenant(tenant.getTenantId(),TENANT_ADMIN_ROLE_KEY);
+            for (SysUser sysUser : userList) {
+                //判断账号是否存在其他租户
+                int count = sysUserTenantMapper.selectByUserId(sysUser.getUserId());
+                //不删除账号只删除中间表
+                sysUserTenantMapper.updateByTenantId(tenant.getTenantId(),sysUser.getUserId(),ONE);
+                if(count<=1){
+                   //删除账号
+                    userMapper.deleteById(sysUser.getUserId());
+                }
+            }
+        }
         return baseMapper.deleteByIds(ids) > 0;
     }
 

+ 9 - 0
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -83,5 +83,14 @@
         select count(*) from sys_user where del_flag = '0' and user_id = #{userId}
     </select>
 
+    <select id="selectUserByTenant" resultMap="SysUserResult">
+        select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
+        from sys_user u
+                 left join sys_user_role sur on u.user_id = sur.user_id
+                 left join sys_role r on r.role_id = sur.role_id
+                 left join sys_user_tenant st on st.user_id = u.user_id
+                 where u.del_flag = '0' and st.tenant_id = #{tenant} and r.role_key = #{roleKey}
+    </select>
+
 
 </mapper>

+ 8 - 0
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserTenantMapper.xml

@@ -4,4 +4,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.dromara.system.mapper.SysUserTenantMapper">
 
+
+    <select id="selectByUserId" resultType="java.lang.Integer" parameterType="java.lang.Long">
+        select count(1) from sys_user_tenant where user_id = #{userId} and del_flag = '0';
+    </select>
+
+    <update id="updateByTenantId">
+        update sys_user_tenant set del_flag = #{delFlag} where user_id = #{userId} and tenant_id = #{tenantId}
+    </update>
 </mapper>