Pārlūkot izejas kodu

租户框架完善

qh 2 gadi atpakaļ
vecāks
revīzija
35bdcbab5a

+ 8 - 0
jeecg-boot-base-core/src/main/java/org/jeecg/common/util/TokenUtils.java

@@ -133,4 +133,12 @@ public class TokenUtils {
         return  sysUser;
     }
 
+    /**
+     * 获取当前登录的租户id
+     * @return
+     */
+    public static String currentTenantId(){
+        return getAuthUser().getRelTenantIds();
+    }
+
 }

+ 20 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java

@@ -19,6 +19,7 @@ import org.jeecg.common.constant.CacheConstant;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.util.PmsUtil;
+import org.jeecg.common.util.TokenUtils;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.system.entity.SysPermission;
 import org.jeecg.modules.system.entity.SysPermissionDataRule;
@@ -97,6 +98,15 @@ public class SysRoleController {
 		Result<IPage<SysRole>> result = new Result<IPage<SysRole>>();
 		QueryWrapper<SysRole> queryWrapper = QueryGenerator.initQueryWrapper(role, req.getParameterMap());
 		Page<SysRole> page = new Page<SysRole>(pageNo, pageSize);
+
+		// 租户条件筛选
+		String tenantId = TokenUtils.currentTenantId();
+		// 租户登录,就取到对应租户的角色
+		if(!TokenUtils.currentTenantId().isEmpty()){
+			queryWrapper.eq("tenant_id",tenantId);
+		} else { // 如果没有租户id,则取到平台角色
+			queryWrapper.isNull("tenant_id");
+		}
 		IPage<SysRole> pageList = sysRoleService.page(page, queryWrapper);
 		result.setSuccess(true);
 		result.setResult(pageList);
@@ -114,6 +124,11 @@ public class SysRoleController {
 		Result<SysRole> result = new Result<SysRole>();
 		try {
 			role.setCreateTime(new Date());
+			// 如果当前登录人是租户,添加的角色应该有租户id
+			String userTenant = TokenUtils.currentTenantId();
+			if(userTenant != null && !userTenant.isEmpty()){
+				role.setTenantId(Integer.parseInt(userTenant));
+			}
 			sysRoleService.save(role);
 			result.success("添加成功!");
 		} catch (Exception e) {
@@ -137,8 +152,12 @@ public class SysRoleController {
 			result.error500("未找到对应实体");
 		}else {
 			role.setUpdateTime(new Date());
+			// 编辑是默认给编辑的内容当前角色的租户
+			if(sysrole.getTenantId() != null) {
+				role.setTenantId(sysrole.getTenantId());
+			}
 			boolean ok = sysRoleService.updateById(role);
-			//TODO 返回false说明什么?
+			//TODO 返回false说明什么? qh:说明脑子有病毒,得清理一下
 			if(ok) {
 				result.success("修改成功!");
 			}

+ 2 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java

@@ -82,7 +82,8 @@ public class SysTenantController {
             return result.error500("该编号已存在!");
         }
         try {
-            sysTenantService.save(sysTenant);
+            sysTenantService.newTenant(sysTenant);
+
             result.success("添加成功!");
         } catch (Exception e) {
             log.error(e.getMessage(), e);

+ 5 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRole.java

@@ -78,5 +78,10 @@ public class SysRole implements Serializable {
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 
+    /**
+     * 租户id
+     */
+    private Integer tenantId;
+
 
 }

+ 27 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenant.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.system.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -62,4 +63,30 @@ public class SysTenant implements Serializable {
     @Dict(dicCode = "tenant_status")
     private Integer status;
 
+    /**
+     * 管理员账号
+     */
+    @TableField(exist = false)
+    private String account;
+
+    /**
+     * 管理员密码
+     */
+    @TableField(exist = false)
+    private String pwd;
+
+    /**
+     * 管理员姓名
+     */
+    @TableField(exist = false)
+    private String username;
+
+    /**
+     * 管理员手机号
+     */
+    @TableField(exist = false)
+    private String phone;
+
+    @TableField(exist = false)
+    private  String workNo;
 }

+ 6 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java

@@ -185,8 +185,14 @@ public class SysUser implements Serializable {
     private String clientId;
 
     /**
+     * 是否租户管理员
+     */
+    private Integer isAdmin;
+    /**
      * 登录首页地址
      */
     @TableField(exist = false)
     private String homePath;
+
+
 }

+ 7 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java

@@ -36,4 +36,11 @@ public interface ISysTenantService extends IService<SysTenant> {
      */
     boolean removeTenantById(String id);
 
+    /**
+     * 添加租户
+     * @param tenant
+     * @return
+     */
+    boolean newTenant(SysTenant tenant);
+
 }

+ 55 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java

@@ -1,17 +1,28 @@
 package org.jeecg.modules.system.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.hibernate.service.spi.ServiceException;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.util.PasswordUtil;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.system.entity.SysRole;
 import org.jeecg.modules.system.entity.SysTenant;
 import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.entity.SysUserRole;
 import org.jeecg.modules.system.mapper.SysTenantMapper;
+import org.jeecg.modules.system.service.ISysRoleService;
 import org.jeecg.modules.system.service.ISysTenantService;
+import org.jeecg.modules.system.service.ISysUserRoleService;
 import org.jeecg.modules.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Collection;
 import java.util.List;
@@ -26,6 +37,10 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
 
     @Autowired
     ISysUserService userService;
+    @Autowired
+    ISysRoleService roleService;
+    @Autowired
+    ISysUserRoleService userRoleService;
 
     @Override
     public List<SysTenant> queryEffectiveTenant(Collection<Integer> idList) {
@@ -57,4 +72,44 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
         return super.removeById(Integer.parseInt(id));
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean newTenant(SysTenant tenant) {
+        //  根据 先验证有无账号
+        // todo 判断参数
+        boolean exist = checkAccountExist(tenant.getAccount());
+        if(exist) {
+            throw new JeecgBootException("账号已存在");
+        }
+        // todo qh:参数账号密码校验,手机号校验
+        save(tenant);
+        SysUser adminUser = new SysUser();
+        adminUser.setActivitiSync(0);
+        adminUser.setUsername(tenant.getAccount());
+        adminUser.setRealname(tenant.getUsername());
+        adminUser.setRelTenantIds(tenant.getId().toString());
+        adminUser.setPhone(tenant.getPhone());
+        adminUser.setIsAdmin(1);
+        adminUser.setWorkNo(tenant.getAccount());
+        String salt = oConvertUtils.randomGen(8);
+        adminUser.setSalt(salt);
+        String passwordEncode = PasswordUtil.encrypt(adminUser.getUsername(), tenant.getPwd(), salt);
+        adminUser.setPassword(passwordEncode);
+        adminUser.setStatus(1);
+        adminUser.setDelFlag(CommonConstant.DEL_FLAG_0);
+        //用户表字段org_code不能在这里设置他的值
+        adminUser.setOrgCode(null);
+        userService.save(adminUser);
+        // 获取通用租户权限
+        SysRole tRole = roleService.getOne(Wrappers.<SysRole>query().eq("role_code","tenant_role_1"));
+        // 关联租户管理员到通用权限
+        SysUserRole uRole = new SysUserRole(adminUser.getId(),tRole.getId());
+        userRoleService.save(uRole);
+        return true;
+    }
+
+    private boolean checkAccountExist(String account){
+        return userService.getUserByName(account) != null;
+    }
+
 }

+ 2 - 2
jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml

@@ -143,9 +143,9 @@ spring:
   #redis 配置
   redis:
     database: 4
-    host: 118.195.195.200
+    host: localhost
     port: 6379
-    password: '123456'
+    password: ''
 #mybatis plus 设置
 mybatis-plus:
   mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml