Commit cd459e7f authored by 施翔轲's avatar 施翔轲

企业管理页面操作栏增加添加账号功能

parent 01b1720f
...@@ -3,6 +3,7 @@ package com.dsk.web.controller.system; ...@@ -3,6 +3,7 @@ package com.dsk.web.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaCheckRole; import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.annotation.SaMode; import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.lock.annotation.Lock4j; import com.baomidou.lock.annotation.Lock4j;
import com.dsk.common.annotation.Log; import com.dsk.common.annotation.Log;
import com.dsk.common.annotation.RepeatSubmit; import com.dsk.common.annotation.RepeatSubmit;
...@@ -15,9 +16,13 @@ import com.dsk.common.core.validate.AddGroup; ...@@ -15,9 +16,13 @@ import com.dsk.common.core.validate.AddGroup;
import com.dsk.common.core.validate.EditGroup; import com.dsk.common.core.validate.EditGroup;
import com.dsk.common.enums.BusinessType; import com.dsk.common.enums.BusinessType;
import com.dsk.common.tenant.helper.TenantHelper; import com.dsk.common.tenant.helper.TenantHelper;
import com.dsk.common.utils.StringUtils;
import com.dsk.system.domain.SysUser;
import com.dsk.system.domain.bo.SysTenantAdminBo;
import com.dsk.system.domain.bo.SysTenantBo; import com.dsk.system.domain.bo.SysTenantBo;
import com.dsk.system.domain.vo.SysTenantVo; import com.dsk.system.domain.vo.SysTenantVo;
import com.dsk.system.service.ISysTenantService; import com.dsk.system.service.ISysTenantService;
import com.dsk.system.service.ISysUserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -39,11 +44,12 @@ import java.util.Arrays; ...@@ -39,11 +44,12 @@ import java.util.Arrays;
@RequestMapping("/system/tenant") @RequestMapping("/system/tenant")
public class SysTenantController extends BaseController { public class SysTenantController extends BaseController {
private final ISysTenantService tenantService; private final ISysTenantService tenantService;
private final ISysUserService userService;
/** /**
* 查询租户列表 * 查询租户列表
*/ */
@SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY,TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY},mode = SaMode.OR) @SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY, TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY}, mode = SaMode.OR)
@SaCheckPermission(value = "system:tenant:list", orRole = "accountAdmin") @SaCheckPermission(value = "system:tenant:list", orRole = "accountAdmin")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<SysTenantVo> list(SysTenantBo bo, PageQuery pageQuery) { public TableDataInfo<SysTenantVo> list(SysTenantBo bo, PageQuery pageQuery) {
...@@ -67,7 +73,7 @@ public class SysTenantController extends BaseController { ...@@ -67,7 +73,7 @@ public class SysTenantController extends BaseController {
* *
* @param id 主键 * @param id 主键
*/ */
@SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY,TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY},mode = SaMode.OR) @SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY, TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY}, mode = SaMode.OR)
@SaCheckPermission(value = "system:tenant:query", orRole = "accountAdmin") @SaCheckPermission(value = "system:tenant:query", orRole = "accountAdmin")
@GetMapping("/{id}") @GetMapping("/{id}")
public R<SysTenantVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { public R<SysTenantVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) {
...@@ -77,7 +83,7 @@ public class SysTenantController extends BaseController { ...@@ -77,7 +83,7 @@ public class SysTenantController extends BaseController {
/** /**
* 新增租户 * 新增租户
*/ */
@SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY,TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY},mode = SaMode.OR) @SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY, TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY}, mode = SaMode.OR)
@SaCheckPermission(value = "system:tenant:add", orRole = "accountAdmin") @SaCheckPermission(value = "system:tenant:add", orRole = "accountAdmin")
@Log(title = "租户", businessType = BusinessType.INSERT) @Log(title = "租户", businessType = BusinessType.INSERT)
@Lock4j @Lock4j
...@@ -90,10 +96,24 @@ public class SysTenantController extends BaseController { ...@@ -90,10 +96,24 @@ public class SysTenantController extends BaseController {
return toAjax(TenantHelper.ignore(() -> tenantService.insertByBo(bo))); return toAjax(TenantHelper.ignore(() -> tenantService.insertByBo(bo)));
} }
/**
* 新增企业普通管理员账号
*/
@SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY, TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY}, mode = SaMode.OR)
@SaCheckPermission(value = "system:user:add")
@Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping("/addTenantAdmin")
public R<Void> addTenantAdmin(@Validated @RequestBody SysTenantAdminBo tenantAdminBo) {
if (!userService.checkPhoneUnique(BeanUtil.toBean(tenantAdminBo, SysUser.class))) {
return R.fail("新增用户'" + tenantAdminBo.getPhonenumber() + "'失败,手机号码已存在");
}
return toAjax(TenantHelper.ignore(() -> tenantService.addTenantAdmin(tenantAdminBo)));
}
/** /**
* 修改租户 * 修改租户
*/ */
@SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY,TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY},mode = SaMode.OR) @SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY, TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY}, mode = SaMode.OR)
@SaCheckPermission(value = "system:tenant:edit", orRole = "accountAdmin") @SaCheckPermission(value = "system:tenant:edit", orRole = "accountAdmin")
@Log(title = "租户", businessType = BusinessType.UPDATE) @Log(title = "租户", businessType = BusinessType.UPDATE)
@RepeatSubmit() @RepeatSubmit()
...@@ -123,7 +143,7 @@ public class SysTenantController extends BaseController { ...@@ -123,7 +143,7 @@ public class SysTenantController extends BaseController {
* *
* @param ids 主键串 * @param ids 主键串
*/ */
@SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY,TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY},mode = SaMode.OR) @SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY, TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY}, mode = SaMode.OR)
@SaCheckPermission(value = "system:tenant:remove", orRole = "accountAdmin") @SaCheckPermission(value = "system:tenant:remove", orRole = "accountAdmin")
@Log(title = "租户", businessType = BusinessType.DELETE) @Log(title = "租户", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}") @DeleteMapping("/{ids}")
...@@ -146,7 +166,7 @@ public class SysTenantController extends BaseController { ...@@ -146,7 +166,7 @@ public class SysTenantController extends BaseController {
/** /**
* 清除动态租户 * 清除动态租户
*/ */
@SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY,TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY},mode = SaMode.OR) @SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY, TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY}, mode = SaMode.OR)
@GetMapping("/dynamic/clear") @GetMapping("/dynamic/clear")
public R<Void> dynamicClear() { public R<Void> dynamicClear() {
TenantHelper.clearDynamic(); TenantHelper.clearDynamic();
...@@ -159,7 +179,7 @@ public class SysTenantController extends BaseController { ...@@ -159,7 +179,7 @@ public class SysTenantController extends BaseController {
* @param tenantId 租户id * @param tenantId 租户id
* @param packageId 套餐id * @param packageId 套餐id
*/ */
@SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY,TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY},mode = SaMode.OR) @SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY, TenantConstants.DSK_TENANT_ADMIN_ROLE_KEY}, mode = SaMode.OR)
@SaCheckPermission(value = "system:tenant:edit", orRole = "accountAdmin") @SaCheckPermission(value = "system:tenant:edit", orRole = "accountAdmin")
@Log(title = "租户", businessType = BusinessType.UPDATE) @Log(title = "租户", businessType = BusinessType.UPDATE)
@GetMapping("/syncTenantPackage") @GetMapping("/syncTenantPackage")
......
package com.dsk.system.domain.bo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.baomidou.mybatisplus.annotation.TableName;
import com.dsk.common.annotation.Sensitive;
import com.dsk.common.core.validate.AddGroup;
import com.dsk.common.core.validate.EditGroup;
import com.dsk.common.enums.SensitiveStrategy;
import com.dsk.common.tenant.core.TenantEntity;
import com.dsk.common.xss.Xss;
import com.dsk.system.domain.SysDept;
import com.dsk.system.domain.SysRole;
import com.dsk.system.domain.SysUser;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
/**
* 用户对象 sys_user
*
* @author Lion Li
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class SysTenantAdminBo extends TenantEntity {
/**
* 租户ID
*/
@NotNull(message = "租户ID不能为空", groups = AddGroup.class)
private String tenantId;
/**
* 用户昵称
*/
@Xss(message = "用户昵称不能包含脚本字符")
@NotBlank(message = "用户昵称不能为空")
@Size(min = 0, max = 30, message = "用户昵称长度不能超过{max}个字符")
private String nickName;
/**
* 手机号码
*/
@Xss(message = "用户昵称不能包含脚本字符")
@NotBlank(message = "手机号码不能为空", groups = AddGroup.class)
@Sensitive(strategy = SensitiveStrategy.PHONE)
private String phonenumber;
/**
* 租户套餐编号
*/
@NotNull(message = "租户套餐不能为空", groups = AddGroup.class)
private Long packageId;
}
...@@ -2,6 +2,7 @@ package com.dsk.system.service; ...@@ -2,6 +2,7 @@ package com.dsk.system.service;
import com.dsk.common.core.domain.PageQuery; import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.system.domain.bo.SysTenantAdminBo;
import com.dsk.system.domain.bo.SysTenantBo; import com.dsk.system.domain.bo.SysTenantBo;
import com.dsk.system.domain.vo.SysTenantVo; import com.dsk.system.domain.vo.SysTenantVo;
...@@ -44,6 +45,14 @@ public interface ISysTenantService { ...@@ -44,6 +45,14 @@ public interface ISysTenantService {
*/ */
Boolean insertByBo(SysTenantBo bo); Boolean insertByBo(SysTenantBo bo);
/**
* 新增企业普通管理员账号
*
* @param tenantAdminBo 用户信息
* @return 结果
*/
Boolean addTenantAdmin(SysTenantAdminBo tenantAdminBo);
/** /**
* 校验租户是否允许操作 * 校验租户是否允许操作
*/ */
......
...@@ -26,6 +26,7 @@ import com.dsk.common.utils.PasswordUtils; ...@@ -26,6 +26,7 @@ import com.dsk.common.utils.PasswordUtils;
import com.dsk.common.utils.StringUtils; import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.redis.RedisUtils; import com.dsk.common.utils.redis.RedisUtils;
import com.dsk.system.domain.*; import com.dsk.system.domain.*;
import com.dsk.system.domain.bo.SysTenantAdminBo;
import com.dsk.system.domain.bo.SysTenantBo; import com.dsk.system.domain.bo.SysTenantBo;
import com.dsk.system.domain.vo.SysTenantVo; import com.dsk.system.domain.vo.SysTenantVo;
import com.dsk.system.mapper.*; import com.dsk.system.mapper.*;
...@@ -180,7 +181,9 @@ public class ISysTenantServiceImpl implements ISysTenantService { ...@@ -180,7 +181,9 @@ public class ISysTenantServiceImpl implements ISysTenantService {
bo.setId(add.getId()); bo.setId(add.getId());
// 根据套餐创建角色 // 根据套餐创建角色
Long roleId = createTenantRole(tenantId, bo.getPackageId()); Long roleId = createTenantRole(tenantId, bo.getPackageId(),
TenantConstants.TENANT_SUPER_ADMIN_ROLE_NAME,
TenantConstants.TENANT_SUPER_ADMIN_ROLE_KEY);
// 创建部门: 公司名是部门名称 // 创建部门: 公司名是部门名称
SysDept dept = new SysDept(); SysDept dept = new SysDept();
...@@ -268,6 +271,89 @@ public class ISysTenantServiceImpl implements ISysTenantService { ...@@ -268,6 +271,89 @@ public class ISysTenantServiceImpl implements ISysTenantService {
return true; return true;
} }
/**
* 新增企业普通管理员账号
*
* @param tenantAdminBo 用户信息
* @return 结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean addTenantAdmin(SysTenantAdminBo tenantAdminBo) {
String tenantId = tenantAdminBo.getTenantId();
// 根据套餐创建角色
Long roleId = createTenantRole(tenantId, tenantAdminBo.getPackageId(),
TenantConstants.TENANT_ADMIN_ROLE_NAME,
TenantConstants.TENANT_ADMIN_ROLE_KEY);
//获取部门ID
Long deptId = deptMapper.selectOne(new LambdaQueryWrapper<SysDept>()
.eq(SysDept::getTenantId, tenantId)).getDeptId();
// 角色和部门关联表
SysRoleDept roleDept = new SysRoleDept();
roleDept.setRoleId(roleId);
roleDept.setDeptId(deptId);
roleDeptMapper.insert(roleDept);
// 创建系统用户
SysUser user = new SysUser();
user.setTenantId(tenantId);
user.setPhonenumber(tenantAdminBo.getPhonenumber());
//默认新增用户名为手机号
user.setUserName(tenantAdminBo.getPhonenumber());
user.setNickName(tenantAdminBo.getNickName());
//生成8位随机密码
String password = PasswordUtils.generatePwd(8);
user.setPassword(BCrypt.hashpw(password));
user.setDeptId(deptId);
user.setCreateTime(new DateTime());
userMapper.insert(user);
// 用户和角色关联表
SysUserRole userRole = new SysUserRole();
userRole.setUserId(user.getUserId());
userRole.setRoleId(roleId);
userRoleMapper.insert(userRole);
String defaultTenantId = TenantConstants.DEFAULT_TENANT_ID;
//List<SysDictType> dictTypeList = dictTypeMapper.selectList(
// new LambdaQueryWrapper<SysDictType>().eq(SysDictType::getTenantId, defaultTenantId));
//List<SysDictData> dictDataList = dictDataMapper.selectList(
// new LambdaQueryWrapper<SysDictData>().eq(SysDictData::getTenantId, defaultTenantId));
//for (SysDictType dictType : dictTypeList) {
// dictType.setDictId(null);
// dictType.setTenantId(tenantId);
//}
//for (SysDictData dictData : dictDataList) {
// dictData.setDictCode(null);
// dictData.setTenantId(tenantId);
//}
//dictTypeMapper.insertBatch(dictTypeList);
//dictDataMapper.insertBatch(dictDataList);
List<SysConfig> sysConfigList = configMapper.selectList(
new LambdaQueryWrapper<SysConfig>()
.eq(SysConfig::getTenantId, defaultTenantId)
.eq(SysConfig::getConfigType, "Y"));
for (SysConfig config : sysConfigList) {
config.setConfigId(null);
config.setTenantId(tenantId);
}
configMapper.insertBatch(sysConfigList);
//管理员新增成功,发送短信通知用户
LinkedHashMap<String, String> map = new LinkedHashMap<>(1);
map.put("company", tenantAdminBo.getNickName());
map.put("pwd", password);
SmsBlend smsBlend = SmsFactory.createSmsBlend(SupplierType.ALIBABA);
SmsResponse smsResponse = smsBlend.sendMessage(tenantAdminBo.getPhonenumber(), "SMS_463175230", map);
if (!"OK".equals(smsResponse.getCode())) {
log.error("新增租户通知短信发送异常 => {}", smsResponse);
}
return true;
}
/** /**
* 生成租户id * 生成租户id
* *
...@@ -291,7 +377,7 @@ public class ISysTenantServiceImpl implements ISysTenantService { ...@@ -291,7 +377,7 @@ public class ISysTenantServiceImpl implements ISysTenantService {
* @param packageId 租户套餐id * @param packageId 租户套餐id
* @return 角色id * @return 角色id
*/ */
private Long createTenantRole(String tenantId, Long packageId) { private Long createTenantRole(String tenantId, Long packageId, String roleName, String roleKey) {
// 获取租户套餐 // 获取租户套餐
SysTenantPackage tenantPackage = tenantPackageMapper.selectById(packageId); SysTenantPackage tenantPackage = tenantPackageMapper.selectById(packageId);
if (ObjectUtil.isNull(tenantPackage)) { if (ObjectUtil.isNull(tenantPackage)) {
...@@ -303,8 +389,8 @@ public class ISysTenantServiceImpl implements ISysTenantService { ...@@ -303,8 +389,8 @@ public class ISysTenantServiceImpl implements ISysTenantService {
// 创建角色 // 创建角色
SysRole role = new SysRole(); SysRole role = new SysRole();
role.setTenantId(tenantId); role.setTenantId(tenantId);
role.setRoleName(TenantConstants.TENANT_SUPER_ADMIN_ROLE_NAME); role.setRoleName(roleName);
role.setRoleKey(TenantConstants.TENANT_SUPER_ADMIN_ROLE_KEY); role.setRoleKey(roleKey);
role.setRoleSort(1); role.setRoleSort(1);
role.setStatus(TenantConstants.NORMAL); role.setStatus(TenantConstants.NORMAL);
roleMapper.insert(role); roleMapper.insert(role);
......
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