Commit 7949dea9 authored by 施翔轲's avatar 施翔轲

完成租户相关改造、联调

parent 11528755
package com.dsk.web.controller.system;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaCheckRole;
import com.baomidou.lock.annotation.Lock4j;
......@@ -15,7 +14,6 @@ import com.dsk.common.core.validate.AddGroup;
import com.dsk.common.core.validate.EditGroup;
import com.dsk.common.enums.BusinessType;
import com.dsk.common.tenant.helper.TenantHelper;
import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.system.domain.bo.SysTenantBo;
import com.dsk.system.domain.vo.SysTenantVo;
import com.dsk.system.service.ISysTenantService;
......@@ -23,12 +21,10 @@ import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* 租户管理
......@@ -53,26 +49,17 @@ public class SysTenantController extends BaseController {
return tenantService.queryPageList(bo, pageQuery);
}
@PostMapping("/init")
public R<Void> init(@Validated(AddGroup.class) @RequestBody SysTenantBo bo) {
// if (!tenantService.checkCompanyNameUnique(bo)) {
// return R.fail("新增租户'" + bo.getCompanyName() + "'失败,企业名称已存在");
// /**
// * 导出租户列表
// */
// @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
// @SaCheckPermission("system:tenant:export")
// @Log(title = "租户", businessType = BusinessType.EXPORT)
// @PostMapping("/export")
// public void export(SysTenantBo bo, HttpServletResponse response) {
// List<SysTenantVo> list = tenantService.queryList(bo);
// ExcelUtil.exportExcel(list, "租户", SysTenantVo.class, response);
// }
return toAjax(tenantService.saveTenant(bo));
}
/**
* 导出租户列表
*/
@SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
@SaCheckPermission("system:tenant:export")
@Log(title = "租户", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SysTenantBo bo, HttpServletResponse response) {
List<SysTenantVo> list = tenantService.queryList(bo);
ExcelUtil.exportExcel(list, "租户", SysTenantVo.class, response);
}
/**
* 获取租户详细信息
......@@ -118,17 +105,17 @@ public class SysTenantController extends BaseController {
return toAjax(tenantService.updateByBo(bo));
}
/**
* 状态修改
*/
@SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
@SaCheckPermission("system:tenant:edit")
@Log(title = "租户", businessType = BusinessType.UPDATE)
@PutMapping("/changeStatus")
public R<Void> changeStatus(@RequestBody SysTenantBo bo) {
tenantService.checkTenantAllowed(bo.getTenantId());
return toAjax(tenantService.updateTenantStatus(bo));
}
// /**
// * 状态修改
// */
// @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
// @SaCheckPermission("system:tenant:edit")
// @Log(title = "租户", businessType = BusinessType.UPDATE)
// @PutMapping("/changeStatus")
// public R<Void> changeStatus(@RequestBody SysTenantBo bo) {
// tenantService.checkTenantAllowed(bo.getTenantId());
// return toAjax(tenantService.updateTenantStatus(bo));
// }
/**
* 删除租户
......@@ -143,17 +130,17 @@ public class SysTenantController extends BaseController {
return toAjax(tenantService.deleteWithValidByIds(Arrays.asList(ids), Boolean.TRUE));
}
/**
* 动态切换租户
*
* @param tenantId 租户ID
*/
@SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
@GetMapping("/dynamic/{tenantId}")
public R<Void> dynamicTenant(@NotBlank(message = "租户ID不能为空") @PathVariable String tenantId) {
TenantHelper.setDynamic(tenantId);
return R.ok();
}
// /**
// * 动态切换租户
// *
// * @param tenantId 租户ID
// */
// @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
// @GetMapping("/dynamic/{tenantId}")
// public R<Void> dynamicTenant(@NotBlank(message = "租户ID不能为空") @PathVariable String tenantId) {
// TenantHelper.setDynamic(tenantId);
// return R.ok();
// }
/**
* 清除动态租户
......
......@@ -59,11 +59,11 @@ public class SysTenantBo extends BaseEntity {
// @NotBlank(message = "用户名不能为空", groups = {AddGroup.class})
// private String username;
/**
* 密码(创建系统用户)
*/
@NotBlank(message = "密码不能为空", groups = {AddGroup.class})
private String password;
// /**
// * 密码(创建系统用户)
// */
// @NotBlank(message = "密码不能为空", groups = {AddGroup.class})
// private String password;
/**
* 统一社会信用代码
......@@ -93,7 +93,7 @@ public class SysTenantBo extends BaseEntity {
/**
* 租户套餐编号
*/
@NotNull(message = "租户套餐不能为空", groups = {AddGroup.class})
@NotNull(message = "租户套餐不能为空", groups = {AddGroup.class, EditGroup.class})
private Long packageId;
/**
......@@ -114,7 +114,9 @@ public class SysTenantBo extends BaseEntity {
/**
* 用户数量(-1不限制)
* 即企业规模
*/
@NotNull(message = "企业规模不能为空", groups = {AddGroup.class, EditGroup.class})
private Long accountCount;
/**
......
......@@ -90,6 +90,12 @@ public class SysTenantVo implements Serializable {
@ExcelProperty(value = "租户套餐编号")
private Long packageId;
/**
* 租户套餐名称
*/
@ExcelProperty(value = "租户套餐名称")
private String packageName;
/**
* 开始时间
*/
......@@ -102,6 +108,12 @@ public class SysTenantVo implements Serializable {
@ExcelProperty(value = "过期时间")
private Date expireTime;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 用户数量(-1不限制)
*/
......
......@@ -19,10 +19,10 @@ public interface ISysTenantService {
*/
TableDataInfo<SysTenantVo> queryPageList(SysTenantBo bo, PageQuery pageQuery);
/**
* 查询租户列表
*/
List<SysTenantVo> queryList(SysTenantBo bo);
// /**
// * 查询租户列表
// */
// List<SysTenantVo> queryList(SysTenantBo bo);
/**
* 查询租户
......@@ -49,10 +49,10 @@ public interface ISysTenantService {
*/
Boolean updateByBo(SysTenantBo bo);
/**
* 修改租户状态
*/
int updateTenantStatus(SysTenantBo bo);
// /**
// * 修改租户状态
// */
// int updateTenantStatus(SysTenantBo bo);
/**
* 校验并批量删除租户信息
......@@ -63,7 +63,6 @@ public interface ISysTenantService {
* 同步租户套餐
*/
Boolean syncTenantPackage(String tenantId, Long packageId);
Boolean saveTenant(SysTenantBo bo);
List<SysTenantVo> selectTenantList(String username);
......
......@@ -16,7 +16,7 @@ import com.dsk.common.core.domain.entity.SysDictData;
import com.dsk.common.core.domain.entity.SysDictType;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.MapStructUtils;
import com.dsk.common.utils.DingTalkUtil;
import com.dsk.common.utils.StringUtils;
import com.dsk.system.domain.*;
import com.dsk.system.domain.bo.SysTenantBo;
......@@ -33,6 +33,7 @@ import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;
/**
* @author sxk
......@@ -71,18 +72,24 @@ public class ISysTenantServiceImpl implements ISysTenantService {
@Override
public TableDataInfo<SysTenantVo> queryPageList(SysTenantBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<SysTenant> lqw = buildQueryWrapper(bo);
pageQuery.setIsAsc("desc");
pageQuery.setOrderByColumn("createTime");
Page<SysTenantVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
for (SysTenantVo sysTenantVo : result.getRecords()) {
SysTenantPackage sysTenantPackage = tenantPackageMapper.selectById(sysTenantVo.getPackageId());
sysTenantVo.setPackageName(sysTenantPackage.getPackageName());
}
return TableDataInfo.build(result);
}
/**
* 查询租户列表
*/
@Override
public List<SysTenantVo> queryList(SysTenantBo bo) {
LambdaQueryWrapper<SysTenant> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
// /**
// * 查询租户列表
// */
// @Override
// public List<SysTenantVo> queryList(SysTenantBo bo) {
// LambdaQueryWrapper<SysTenant> lqw = buildQueryWrapper(bo);
// return baseMapper.selectVoList(lqw);
// }
/**
* 基于租户ID查询租户
......@@ -93,12 +100,6 @@ public class ISysTenantServiceImpl implements ISysTenantService {
return baseMapper.selectVoOne(new LambdaQueryWrapper<SysTenant>().eq(SysTenant::getTenantId, tenantId));
}
@Override
public Boolean saveTenant(SysTenantBo bo) {
return null;
}
@Override
public List<SysTenantVo> selectTenantList(String username) {
return baseMapper.selectTenantList(username);
......@@ -181,9 +182,12 @@ public class ISysTenantServiceImpl implements ISysTenantService {
SysUser user = new SysUser();
user.setTenantId(tenantId);
user.setPhonenumber(bo.getContactPhone());
user.setUserName(bo.getContactUserName());
//默认新增用户名为手机号
user.setUserName(bo.getContactPhone());
user.setNickName(bo.getContactUserName());
user.setPassword(BCrypt.hashpw(bo.getPassword()));
//生成8位随机密码
String password = generatePassword(8);
user.setPassword(BCrypt.hashpw(password));
user.setDeptId(deptId);
userMapper.insert(user);
//新增系统用户后,默认当前用户为部门的负责人
......@@ -221,9 +225,29 @@ public class ISysTenantServiceImpl implements ISysTenantService {
config.setTenantId(tenantId);
}
configMapper.insertBatch(sysConfigList);
//租户新增成功,发送短信通知租户
//此处暂用钉钉机器人模拟发送短信
String content = "【央企数字经营管理系统通知】:" + bo.getCompanyName() + "您好,您已经成功注册央企数字经营管理系统,请使用手机号码登录,初始密码为" + password + "。友情提示:为了您的账号安全,请勿泄露密码。若需要修改密码,请联系管理员。";
DingTalkUtil.sendDingTalkMsg(content);
System.out.println("👉🏻:" + content);
return true;
}
// 生成随机密码
public static String generatePassword(int length) {
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*_+=";
StringBuilder password = new StringBuilder();
Random random = new Random();
for (int i = 0; i < length; i++) {
int index = random.nextInt(characters.length());
password.append(characters.charAt(index));
}
return password.toString();
}
/**
* 生成租户id
*
......@@ -295,26 +319,25 @@ public class ISysTenantServiceImpl implements ISysTenantService {
* 修改租户
*/
@Override
@CacheEvict(cacheNames = CacheNames.SYS_TENANT,key = "#bo.tenantId")
@CacheEvict(cacheNames = CacheNames.SYS_TENANT, key = "#bo.tenantId")
public Boolean updateByBo(SysTenantBo bo) {
SysTenant tenant = MapStructUtils.convert(bo, SysTenant.class);
SysTenant tenant = BeanUtil.toBean(bo, SysTenant.class);
tenant.setTenantId(null);
tenant.setPackageId(null);
return baseMapper.updateById(tenant) > 0;
}
/**
* 修改租户状态
*
* @param bo 租户信息
* @return 结果
*/
@Override
@CacheEvict(cacheNames = CacheNames.SYS_TENANT, key = "#bo.tenantId")
public int updateTenantStatus(SysTenantBo bo) {
SysTenant tenant = MapStructUtils.convert(bo, SysTenant.class);
return baseMapper.updateById(tenant);
}
// /**
// * 修改租户状态
// *
// * @param bo 租户信息
// * @return 结果
// */
// @Override
// @CacheEvict(cacheNames = CacheNames.SYS_TENANT, key = "#bo.tenantId")
// public int updateTenantStatus(SysTenantBo bo) {
// SysTenant tenant = MapStructUtils.convert(bo, SysTenant.class);
// return baseMapper.updateById(tenant);
// }
/**
* 校验并批量删除租户信息
......
package com.dsk.system.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
......@@ -8,18 +9,16 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsk.common.constant.Constants;
import com.dsk.common.constant.UserConstants;
import com.dsk.system.domain.SysMenu;
import com.dsk.system.domain.SysRole;
import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.StreamUtils;
import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.TreeBuildUtils;
import com.dsk.system.domain.SysRoleMenu;
import com.dsk.system.domain.*;
import com.dsk.system.domain.vo.MetaVo;
import com.dsk.system.domain.vo.RouterVo;
import com.dsk.system.mapper.SysMenuMapper;
import com.dsk.system.mapper.SysRoleMapper;
import com.dsk.system.mapper.SysRoleMenuMapper;
import com.dsk.system.domain.vo.SysTenantPackageVo;
import com.dsk.system.domain.vo.SysTenantVo;
import com.dsk.system.mapper.*;
import com.dsk.system.service.ISysMenuService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
......@@ -38,6 +37,8 @@ public class SysMenuServiceImpl implements ISysMenuService {
private final SysMenuMapper baseMapper;
private final SysRoleMapper roleMapper;
private final SysRoleMenuMapper roleMenuMapper;
private final SysTenantMapper tenantMapper;
private final SysTenantPackageMapper tenantPackageMapper;
/**
* 根据用户查询系统菜单列表
......@@ -126,8 +127,17 @@ public class SysMenuServiceImpl implements ISysMenuService {
public List<SysMenu> selectMenuTreeByUserId(Long userId) {
List<SysMenu> menus = null;
if (LoginHelper.isSuperAdmin(userId)) {
//Sass超管
menus = baseMapper.selectMenuTreeAll();
} else if (LoginHelper.isTenantAdmin()) {
//租户管理员
// String ids = baseMapper.selectMenuIdsByTenantId(LoginHelper.getTenantId());
SysTenantVo sysTenantVo = tenantMapper.selectVoOne(new LambdaQueryWrapper<SysTenant>().eq(SysTenant::getTenantId, LoginHelper.getTenantId()));
SysTenantPackageVo sysTenantPackageVo = tenantPackageMapper.selectVoOne(new LambdaQueryWrapper<SysTenantPackage>().eq(SysTenantPackage::getPackageId, sysTenantVo.getPackageId()));
List<Long> menuIds = StringUtils.splitTo(sysTenantPackageVo.getMenuIds(), Convert::toLong);
menus = baseMapper.selectBatchIds(menuIds);
} else {
//租户下的员工
menus = baseMapper.selectMenuTreeByUserId(userId);
}
return getChildPerms(menus, 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment