Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dsk-operate-sys-cscec
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fulixin
dsk-operate-sys-cscec
Commits
54157196
Commit
54157196
authored
Nov 15, 2023
by
tianhongyang
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'V20230915' of
http://192.168.60.201/root/dsk-operate-sys
into V20230915
parents
71e5d68e
cd459e7f
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
481 additions
and
50 deletions
+481
-50
SysRoleController.java
...java/com/dsk/web/controller/system/SysRoleController.java
+5
-1
SysTenantController.java
...va/com/dsk/web/controller/system/SysTenantController.java
+27
-7
SysUserController.java
...java/com/dsk/web/controller/system/SysUserController.java
+16
-4
pom.xml
dsk-common/pom.xml
+6
-0
TenantConstants.java
...rc/main/java/com/dsk/common/constant/TenantConstants.java
+20
-10
LoginHelper.java
...mmon/src/main/java/com/dsk/common/helper/LoginHelper.java
+1
-1
Chinese2PinyinUtils.java
...c/main/java/com/dsk/common/utils/Chinese2PinyinUtils.java
+67
-0
vue.config.js
dsk-operate-ui/vue.config.js
+3
-2
SysRole.java
dsk-system/src/main/java/com/dsk/system/domain/SysRole.java
+1
-1
SysTenantAdminBo.java
.../main/java/com/dsk/system/domain/bo/SysTenantAdminBo.java
+63
-0
ISysTenantService.java
...c/main/java/com/dsk/system/service/ISysTenantService.java
+9
-0
ISysUserService.java
...src/main/java/com/dsk/system/service/ISysUserService.java
+7
-1
SysLoginService.java
...src/main/java/com/dsk/system/service/SysLoginService.java
+4
-4
ISysTenantServiceImpl.java
...va/com/dsk/system/service/impl/ISysTenantServiceImpl.java
+91
-5
SysRoleServiceImpl.java
.../java/com/dsk/system/service/impl/SysRoleServiceImpl.java
+71
-10
SysUserServiceImpl.java
.../java/com/dsk/system/service/impl/SysUserServiceImpl.java
+78
-2
SysUserMapper.xml
...system/src/main/resources/mapper/system/SysUserMapper.xml
+2
-2
pom.xml
pom.xml
+10
-0
No files found.
dsk-admin/src/main/java/com/dsk/web/controller/system/SysRoleController.java
View file @
54157196
...
...
@@ -5,6 +5,7 @@ import com.dsk.common.annotation.Log;
import
com.dsk.common.core.controller.BaseController
;
import
com.dsk.common.core.domain.PageQuery
;
import
com.dsk.common.core.domain.R
;
import
com.dsk.common.utils.Chinese2PinyinUtils
;
import
com.dsk.system.domain.SysDept
;
import
com.dsk.system.domain.SysRole
;
import
com.dsk.system.domain.SysUser
;
...
...
@@ -81,13 +82,16 @@ public class SysRoleController extends BaseController {
@PostMapping
public
R
<
Void
>
add
(
@Validated
@RequestBody
SysRole
role
)
{
roleService
.
checkRoleAllowed
(
role
);
//应产品经理强!烈!要求,让后台自动生成权限字符,为方便后期排查bug,经考虑后将角色名的拼音设置为权限字符
role
.
setRoleKey
(
Chinese2PinyinUtils
.
toLowerPinyin
(
role
.
getRoleName
()));
if
(!
roleService
.
checkRoleNameUnique
(
role
))
{
return
R
.
fail
(
"新增角色'"
+
role
.
getRoleName
()
+
"'失败,角色名称已存在"
);
}
else
if
(!
roleService
.
checkRoleKeyUnique
(
role
))
{
return
R
.
fail
(
"新增角色'"
+
role
.
getRoleName
()
+
"'失败,角色权限已存在"
);
}
return
toAjax
(
roleService
.
insertRole
(
role
));
}
/**
...
...
dsk-admin/src/main/java/com/dsk/web/controller/system/SysTenantController.java
View file @
54157196
...
...
@@ -3,6 +3,7 @@ package com.dsk.web.controller.system;
import
cn.dev33.satoken.annotation.SaCheckPermission
;
import
cn.dev33.satoken.annotation.SaCheckRole
;
import
cn.dev33.satoken.annotation.SaMode
;
import
cn.hutool.core.bean.BeanUtil
;
import
com.baomidou.lock.annotation.Lock4j
;
import
com.dsk.common.annotation.Log
;
import
com.dsk.common.annotation.RepeatSubmit
;
...
...
@@ -15,9 +16,13 @@ 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.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.vo.SysTenantVo
;
import
com.dsk.system.service.ISysTenantService
;
import
com.dsk.system.service.ISysUserService
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
...
...
@@ -39,11 +44,12 @@ import java.util.Arrays;
@RequestMapping
(
"/system/tenant"
)
public
class
SysTenantController
extends
BaseController
{
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"
)
@GetMapping
(
"/list"
)
public
TableDataInfo
<
SysTenantVo
>
list
(
SysTenantBo
bo
,
PageQuery
pageQuery
)
{
...
...
@@ -67,7 +73,7 @@ public class SysTenantController extends BaseController {
*
* @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"
)
@GetMapping
(
"/{id}"
)
public
R
<
SysTenantVo
>
getInfo
(
@NotNull
(
message
=
"主键不能为空"
)
@PathVariable
Long
id
)
{
...
...
@@ -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"
)
@Log
(
title
=
"租户"
,
businessType
=
BusinessType
.
INSERT
)
@Lock4j
...
...
@@ -90,10 +96,24 @@ public class SysTenantController extends BaseController {
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"
)
@Log
(
title
=
"租户"
,
businessType
=
BusinessType
.
UPDATE
)
@RepeatSubmit
()
...
...
@@ -123,7 +143,7 @@ public class SysTenantController extends BaseController {
*
* @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"
)
@Log
(
title
=
"租户"
,
businessType
=
BusinessType
.
DELETE
)
@DeleteMapping
(
"/{ids}"
)
...
...
@@ -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"
)
public
R
<
Void
>
dynamicClear
()
{
TenantHelper
.
clearDynamic
();
...
...
@@ -159,7 +179,7 @@ public class SysTenantController extends BaseController {
* @param tenantId 租户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"
)
@Log
(
title
=
"租户"
,
businessType
=
BusinessType
.
UPDATE
)
@GetMapping
(
"/syncTenantPackage"
)
...
...
dsk-admin/src/main/java/com/dsk/web/controller/system/SysUserController.java
View file @
54157196
package
com
.
dsk
.
web
.
controller
.
system
;
import
cn.dev33.satoken.annotation.SaCheckPermission
;
import
cn.dev33.satoken.annotation.SaCheckRole
;
import
cn.dev33.satoken.annotation.SaMode
;
import
cn.dev33.satoken.secure.BCrypt
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.lang.tree.Tree
;
...
...
@@ -9,6 +11,7 @@ import cn.hutool.core.util.ObjectUtil;
import
com.dsk.biz.utils.ExcelUtils
;
import
com.dsk.common.annotation.Log
;
import
com.dsk.common.constant.GlobalConstants
;
import
com.dsk.common.constant.TenantConstants
;
import
com.dsk.common.core.controller.BaseController
;
import
com.dsk.common.core.domain.PageQuery
;
import
com.dsk.common.core.domain.R
;
...
...
@@ -16,6 +19,7 @@ import com.dsk.common.core.page.TableDataInfo;
import
com.dsk.common.enums.BusinessType
;
import
com.dsk.common.exception.ServiceException
;
import
com.dsk.common.helper.LoginHelper
;
import
com.dsk.common.tenant.helper.TenantHelper
;
import
com.dsk.common.utils.StreamUtils
;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.common.utils.poi.ExcelUtil
;
...
...
@@ -37,6 +41,7 @@ import org.springframework.web.bind.annotation.*;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.validation.constraints.NotNull
;
import
java.util.*
;
/**
...
...
@@ -55,6 +60,16 @@ public class SysUserController extends BaseController {
private
final
ISysPostService
postService
;
private
final
ISysDeptService
deptService
;
/**
* 根据租户ID查询大司空超管or租户管理员为其创建的企业管理员和管理员账号数量
*/
@SaCheckRole
(
value
=
{
TenantConstants
.
SUPER_ADMIN_ROLE_KEY
,
TenantConstants
.
DSK_TENANT_ADMIN_ROLE_KEY
},
mode
=
SaMode
.
OR
)
@SaCheckPermission
(
value
=
"system:user:query"
,
orRole
=
"accountAdmin"
)
@GetMapping
(
"/queryTenantAdminNumCreatedByDSK/{tenantId}"
)
public
R
<
Long
>
queryTenantAdminNumCreatedByDSK
(
@NotNull
(
message
=
"租户ID不能为空"
)
@PathVariable
Long
tenantId
)
{
return
R
.
ok
(
TenantHelper
.
ignore
(()
->
userService
.
queryTenantAdminNumCreatedByDSK
(
tenantId
)));
}
/**
* 获取用户列表
*/
...
...
@@ -121,10 +136,6 @@ public class SysUserController extends BaseController {
throw
new
ServiceException
(
"表格中不存在待导入数据!"
);
}
for
(
SysUserImportVo
userImportVo
:
userImportList
)
{
System
.
out
.
println
(
"👉🏻:"
+
userImportVo
);
}
//开始导入业务
List
<
SysUserImportVo
>
failImportUsers
=
userService
.
batchImportUser
(
userImportList
,
updateSupport
);
...
...
@@ -216,6 +227,7 @@ public class SysUserController extends BaseController {
@Log
(
title
=
"用户管理"
,
businessType
=
BusinessType
.
DELETE
)
@DeleteMapping
(
"/{userIds}"
)
public
R
<
Void
>
remove
(
@PathVariable
Long
[]
userIds
)
{
//不能删除当前登录账号
if
(
ArrayUtil
.
contains
(
userIds
,
getUserId
()))
{
return
R
.
fail
(
"当前用户不能删除"
);
}
...
...
dsk-common/pom.xml
View file @
54157196
...
...
@@ -187,6 +187,12 @@
<scope>
compile
</scope>
</dependency>
<!--中文转拼音-->
<dependency>
<groupId>
com.belerweb
</groupId>
<artifactId>
pinyin4j
</artifactId>
</dependency>
</dependencies>
</project>
dsk-common/src/main/java/com/dsk/common/constant/TenantConstants.java
View file @
54157196
...
...
@@ -18,34 +18,44 @@ public interface TenantConstants {
String
DISABLE
=
"1"
;
/**
* 超级管理员ID
*
大司空
超级管理员ID
*/
Long
SUPER_ADMIN_ID
=
1L
;
/**
* 超级管理员角色 roleKey
*
大司空
超级管理员角色 roleKey
*/
String
SUPER_ADMIN_ROLE_KEY
=
"superadmin"
;
/**
*
租户管理员角色 roleKey
*
大司空租户管理员角色
*/
String
TENANT_ADMIN_ROLE_KEY
=
"a
dmin"
;
String
DSK_TENANT_ADMIN_ROLE_KEY
=
"accountA
dmin"
;
/**
* 租户管理员角色名称
*
大司空
租户管理员角色名称
*/
String
TENANT_ADMIN_ROLE_NAME
=
"
管理员"
;
String
DSK_TENANT_ADMIN_ROLE_NAME
=
"企业账号
管理员"
;
/**
*
大司空租户管理员角色
*
企业超级管理员角色 roleKey
*/
String
DSK_TENANT_ADMIN_ROLE_KEY
=
"account
Admin"
;
String
TENANT_SUPER_ADMIN_ROLE_KEY
=
"tenantSuper
Admin"
;
/**
*
大司空租户
管理员角色名称
*
企业超级
管理员角色名称
*/
String
DSK_TENANT_ADMIN_ROLE_NAME
=
"企业账号管理员"
;
String
TENANT_SUPER_ADMIN_ROLE_NAME
=
"企业管理员"
;
/**
* 企业普通管理员角色 roleKey
*/
String
TENANT_ADMIN_ROLE_KEY
=
"tenantAdmin"
;
/**
* 企业普通管理员角色名称
*/
String
TENANT_ADMIN_ROLE_NAME
=
"管理员"
;
/**
* 默认租户ID
...
...
dsk-common/src/main/java/com/dsk/common/helper/LoginHelper.java
View file @
54157196
...
...
@@ -169,7 +169,7 @@ public class LoginHelper {
* @return 结果
*/
public
static
boolean
isTenantAdmin
(
Set
<
String
>
rolePermission
)
{
return
rolePermission
.
contains
(
TenantConstants
.
TENANT_ADMIN_ROLE_KEY
);
return
rolePermission
.
contains
(
TenantConstants
.
TENANT_
SUPER_
ADMIN_ROLE_KEY
);
}
public
static
boolean
isTenantAdmin
()
{
...
...
dsk-common/src/main/java/com/dsk/common/utils/Chinese2PinyinUtils.java
0 → 100644
View file @
54157196
package
com
.
dsk
.
common
.
utils
;
import
net.sourceforge.pinyin4j.PinyinHelper
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinCaseType
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinToneType
;
import
net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination
;
/**
* 中文转拼音工具类
*
* @author sxk
* @date 2023.11.13
*/
public
class
Chinese2PinyinUtils
{
/**
* 中文转小写拼音
* @param chinese 待转义中文
* @return 转义后的拼音
*/
public
static
String
toLowerPinyin
(
String
chinese
)
{
StringBuilder
pinyin
=
new
StringBuilder
();
HanyuPinyinOutputFormat
format
=
new
HanyuPinyinOutputFormat
();
format
.
setCaseType
(
HanyuPinyinCaseType
.
LOWERCASE
);
format
.
setToneType
(
HanyuPinyinToneType
.
WITHOUT_TONE
);
char
[]
chars
=
chinese
.
toCharArray
();
for
(
char
c
:
chars
)
{
try
{
String
[]
arr
=
PinyinHelper
.
toHanyuPinyinStringArray
(
c
,
format
);
if
(
arr
==
null
||
arr
.
length
==
0
)
{
pinyin
.
append
(
c
);
}
else
{
pinyin
.
append
(
arr
[
0
]);
}
}
catch
(
BadHanyuPinyinOutputFormatCombination
e
)
{
e
.
printStackTrace
();
}
}
return
pinyin
.
toString
();
}
/**
* 中文转大写拼音
* @param chinese 待转义中文
* @return 转义后的拼音
*/
public
static
String
toUpperPinyin
(
String
chinese
)
{
StringBuilder
pinyin
=
new
StringBuilder
();
HanyuPinyinOutputFormat
format
=
new
HanyuPinyinOutputFormat
();
format
.
setCaseType
(
HanyuPinyinCaseType
.
UPPERCASE
);
format
.
setToneType
(
HanyuPinyinToneType
.
WITHOUT_TONE
);
char
[]
chars
=
chinese
.
toCharArray
();
for
(
char
c
:
chars
)
{
try
{
String
[]
arr
=
PinyinHelper
.
toHanyuPinyinStringArray
(
c
,
format
);
if
(
arr
==
null
||
arr
.
length
==
0
)
{
pinyin
.
append
(
c
);
}
else
{
pinyin
.
append
(
arr
[
0
]);
}
}
catch
(
BadHanyuPinyinOutputFormatCombination
e
)
{
e
.
printStackTrace
();
}
}
return
pinyin
.
toString
();
}
}
dsk-operate-ui/vue.config.js
View file @
54157196
...
...
@@ -35,10 +35,11 @@ module.exports = {
proxy
:
{
// detail: https://cli.vuejs.org/config/#devserver-proxy
[
process
.
env
.
VUE_APP_BASE_API
]:
{
//
target: `http://47.104.91.229:9099/prod-api`,//测试
target
:
`http://47.104.91.229:9099/prod-api`
,
//测试
// target: `https://szhapi.jiansheku.com`,//线上
// target: `http://122.9.160.122:9011`, //线上
target
:
`http://192.168.60.46:9098`
,
//施
// target: `http://192.168.0.165:9098`,//施-无线
// target: `http://192.168.60.46:9098`,//施-有线
// target: `http://192.168.60.6:9098`,//谭
changeOrigin
:
true
,
pathRewrite
:
{
...
...
dsk-system/src/main/java/com/dsk/system/domain/SysRole.java
View file @
54157196
...
...
@@ -51,7 +51,7 @@ public class SysRole extends TenantEntity {
* 角色权限
*/
@ExcelProperty
(
value
=
"角色权限"
)
@NotBlank
(
message
=
"权限字符不能为空"
)
//
@NotBlank(message = "权限字符不能为空")
@Size
(
min
=
0
,
max
=
100
,
message
=
"权限字符长度不能超过{max}个字符"
)
private
String
roleKey
;
...
...
dsk-system/src/main/java/com/dsk/system/domain/bo/SysTenantAdminBo.java
0 → 100644
View file @
54157196
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
;
}
dsk-system/src/main/java/com/dsk/system/service/ISysTenantService.java
View file @
54157196
...
...
@@ -2,6 +2,7 @@ package com.dsk.system.service;
import
com.dsk.common.core.domain.PageQuery
;
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.vo.SysTenantVo
;
...
...
@@ -44,6 +45,14 @@ public interface ISysTenantService {
*/
Boolean
insertByBo
(
SysTenantBo
bo
);
/**
* 新增企业普通管理员账号
*
* @param tenantAdminBo 用户信息
* @return 结果
*/
Boolean
addTenantAdmin
(
SysTenantAdminBo
tenantAdminBo
);
/**
* 校验租户是否允许操作
*/
...
...
dsk-system/src/main/java/com/dsk/system/service/ISysUserService.java
View file @
54157196
...
...
@@ -13,7 +13,13 @@ import java.util.List;
* @author Lion Li
*/
public
interface
ISysUserService
{
/**
* 根据租户ID查询大司空超管or租户管理员为其创建的企业管理员和管理员账号数量
*
* @param tenantId 租户ID
* @return 该企业下企业管理员和管理员账号数量
*/
Long
queryTenantAdminNumCreatedByDSK
(
Long
tenantId
);
TableDataInfo
<
SysUser
>
selectPageUserList
(
SysUser
user
,
PageQuery
pageQuery
);
...
...
dsk-system/src/main/java/com/dsk/system/service/SysLoginService.java
View file @
54157196
...
...
@@ -99,7 +99,7 @@ public class SysLoginService {
if
(
ReUtil
.
isMatch
(
RegexPool
.
MOBILE
,
username
))
{
String
defaultTenantId
=
RedisUtils
.
getCacheObject
(
GlobalConstants
.
PHONE_DEFAULT_TENANT
+
username
);
log
.
info
(
"登录用户:{} 获取缓存默认租户:"
+
tenantId
,
username
);
if
(
StrUtil
.
isNotBlank
(
defaultTenantId
)){
if
(
StrUtil
.
is
Empty
(
tenantId
)&&
StrUtil
.
is
NotBlank
(
defaultTenantId
)){
defaultTenantId
=
checkDefaultTenant
(
defaultTenantId
,
username
);
tenantId
=
defaultTenantId
;
}
...
...
@@ -557,16 +557,16 @@ public class SysLoginService {
if
(
ReUtil
.
isMatch
(
RegexPool
.
MOBILE
,
username
))
{
LambdaQueryWrapper
<
SysUser
>
lqw
=
new
LambdaQueryWrapper
<
SysUser
>()
.
select
(
SysUser:
:
getUserName
,
SysUser:
:
getStatus
,
SysUser:
:
getTenantId
)
.
select
(
SysUser:
:
getUserName
,
SysUser:
:
getStatus
,
SysUser:
:
getTenantId
,
SysUser:
:
getDelFlag
)
.
eq
(
SysUser:
:
getPhonenumber
,
username
)
.
orderByDesc
(
SysUser:
:
getUserId
);
sysUsers
=
userMapper
.
selectList
(
lqw
);
// sysUsers = userMapper.selectUserByTenantPhone(username
);
}
else
{
LambdaQueryWrapper
<
SysUser
>
lqw
=
new
LambdaQueryWrapper
<
SysUser
>()
.
select
(
SysUser:
:
getUserName
,
SysUser:
:
getStatus
,
SysUser:
:
getTenantId
)
.
eq
(
SysUser:
:
getUserName
,
username
)
.
orderByDesc
(
SysUser:
:
getUserId
);
sysUsers
=
userMapper
.
selectList
(
lqw
);
// sysUsers = userMapper.selectUserByTenantUsername(username
);
}
return
sysUsers
;
});
...
...
dsk-system/src/main/java/com/dsk/system/service/impl/ISysTenantServiceImpl.java
View file @
54157196
...
...
@@ -26,6 +26,7 @@ import com.dsk.common.utils.PasswordUtils;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.common.utils.redis.RedisUtils
;
import
com.dsk.system.domain.*
;
import
com.dsk.system.domain.bo.SysTenantAdminBo
;
import
com.dsk.system.domain.bo.SysTenantBo
;
import
com.dsk.system.domain.vo.SysTenantVo
;
import
com.dsk.system.mapper.*
;
...
...
@@ -180,7 +181,9 @@ public class ISysTenantServiceImpl implements ISysTenantService {
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
();
...
...
@@ -268,6 +271,89 @@ public class ISysTenantServiceImpl implements ISysTenantService {
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
*
...
...
@@ -291,7 +377,7 @@ public class ISysTenantServiceImpl implements ISysTenantService {
* @param packageId 租户套餐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
);
if
(
ObjectUtil
.
isNull
(
tenantPackage
))
{
...
...
@@ -303,8 +389,8 @@ public class ISysTenantServiceImpl implements ISysTenantService {
// 创建角色
SysRole
role
=
new
SysRole
();
role
.
setTenantId
(
tenantId
);
role
.
setRoleName
(
TenantConstants
.
TENANT_ADMIN_ROLE_NAME
);
role
.
setRoleKey
(
TenantConstants
.
TENANT_ADMIN_ROLE_KEY
);
role
.
setRoleName
(
roleName
);
role
.
setRoleKey
(
roleKey
);
role
.
setRoleSort
(
1
);
role
.
setStatus
(
TenantConstants
.
NORMAL
);
roleMapper
.
insert
(
role
);
...
...
@@ -386,7 +472,7 @@ public class ISysTenantServiceImpl implements ISysTenantService {
List
<
Long
>
roleIds
=
new
ArrayList
<>(
roles
.
size
()
-
1
);
List
<
Long
>
menuIds
=
StringUtils
.
splitTo
(
tenantPackage
.
getMenuIds
(),
Convert:
:
toLong
);
roles
.
forEach
(
item
->
{
if
(
TenantConstants
.
TENANT_ADMIN_ROLE_KEY
.
equals
(
item
.
getRoleKey
()))
{
if
(
TenantConstants
.
TENANT_
SUPER_
ADMIN_ROLE_KEY
.
equals
(
item
.
getRoleKey
()))
{
List
<
SysRoleMenu
>
roleMenus
=
new
ArrayList
<>(
menuIds
.
size
());
menuIds
.
forEach
(
menuId
->
{
SysRoleMenu
roleMenu
=
new
SysRoleMenu
();
...
...
dsk-system/src/main/java/com/dsk/system/service/impl/SysRoleServiceImpl.java
View file @
54157196
...
...
@@ -7,26 +7,21 @@ import cn.hutool.core.util.ObjectUtil;
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.Assert
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.dsk.common.constant.TenantConstants
;
import
com.dsk.system.mapper.SysRoleDeptMapper
;
import
com.dsk.system.mapper.SysRoleMapper
;
import
com.dsk.system.mapper.SysRoleMenuMapper
;
import
com.dsk.system.mapper.SysUserRoleMapper
;
import
com.dsk.system.domain.*
;
import
com.dsk.system.mapper.*
;
import
com.dsk.system.service.ISysRoleService
;
import
com.dsk.common.constant.UserConstants
;
import
com.dsk.common.core.domain.PageQuery
;
import
com.dsk.system.domain.SysRole
;
import
com.dsk.common.core.domain.model.LoginUser
;
import
com.dsk.common.core.page.TableDataInfo
;
import
com.dsk.common.exception.ServiceException
;
import
com.dsk.common.helper.LoginHelper
;
import
com.dsk.common.utils.StreamUtils
;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.system.domain.SysRoleDept
;
import
com.dsk.system.domain.SysRoleMenu
;
import
com.dsk.system.domain.SysUserRole
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
...
...
@@ -46,6 +41,7 @@ public class SysRoleServiceImpl implements ISysRoleService {
private
final
SysRoleMenuMapper
roleMenuMapper
;
private
final
SysUserRoleMapper
userRoleMapper
;
private
final
SysRoleDeptMapper
roleDeptMapper
;
private
final
SysUserMapper
userMapper
;
@Override
public
TableDataInfo
<
SysRole
>
selectPageRoleList
(
SysRole
role
,
PageQuery
pageQuery
)
{
...
...
@@ -203,7 +199,7 @@ public class SysRoleServiceImpl implements ISysRoleService {
// 新增不允许使用 管理员标识符
if
(
ObjectUtil
.
isNull
(
role
.
getRoleId
())
&&
StringUtils
.
equalsAny
(
role
.
getRoleKey
(),
TenantConstants
.
SUPER_ADMIN_ROLE_KEY
,
TenantConstants
.
TENANT_ADMIN_ROLE_KEY
))
{
TenantConstants
.
SUPER_ADMIN_ROLE_KEY
,
TenantConstants
.
TENANT_
SUPER_
ADMIN_ROLE_KEY
))
{
throw
new
ServiceException
(
"不允许使用系统内置管理员角色标识符!"
);
}
// 修改不允许修改 管理员标识符
...
...
@@ -212,7 +208,7 @@ public class SysRoleServiceImpl implements ISysRoleService {
// 如果标识符不相等 判断为修改了管理员标识符
if
(!
StringUtils
.
equals
(
sysRole
.
getRoleKey
(),
role
.
getRoleKey
())
&&
StringUtils
.
equalsAny
(
sysRole
.
getRoleKey
(),
TenantConstants
.
SUPER_ADMIN_ROLE_KEY
,
TenantConstants
.
TENANT_ADMIN_ROLE_KEY
))
{
TenantConstants
.
SUPER_ADMIN_ROLE_KEY
,
TenantConstants
.
TENANT_
SUPER_
ADMIN_ROLE_KEY
))
{
throw
new
ServiceException
(
"不允许修改系统内置管理员角色标识符!"
);
}
}
...
...
@@ -385,6 +381,9 @@ public class SysRoleServiceImpl implements ISysRoleService {
public
int
deleteRoleByIds
(
Long
[]
roleIds
)
{
for
(
Long
roleId
:
roleIds
)
{
SysRole
role
=
selectRoleById
(
roleId
);
if
(
TenantConstants
.
TENANT_SUPER_ADMIN_ROLE_KEY
.
equals
(
role
.
getRoleKey
()))
{
throw
new
ServiceException
(
"不允许删除企业管理员角色!"
);
}
checkRoleAllowed
(
role
);
checkRoleDataScope
(
roleId
);
if
(
countUserRoleByRoleId
(
roleId
)
>
0
)
{
...
...
@@ -407,6 +406,15 @@ public class SysRoleServiceImpl implements ISysRoleService {
*/
@Override
public
int
deleteAuthUser
(
SysUserRole
userRole
)
{
//若该账号仅有一个角色,则不允许取消授权
SysUser
sysUser
=
userMapper
.
selectUserById
(
userRole
.
getUserId
());
if
(
sysUser
.
getRoles
().
size
()
==
1
)
{
throw
new
ServiceException
(
"至少保留一个角色在该账号下"
);
}
//校验企业管理员角色下是否至少有一个账号
checkAdminHasUsers
(
userRole
.
getRoleId
());
int
rows
=
userRoleMapper
.
delete
(
new
LambdaQueryWrapper
<
SysUserRole
>()
.
eq
(
SysUserRole:
:
getRoleId
,
userRole
.
getRoleId
())
.
eq
(
SysUserRole:
:
getUserId
,
userRole
.
getUserId
()));
...
...
@@ -425,6 +433,26 @@ public class SysRoleServiceImpl implements ISysRoleService {
*/
@Override
public
int
deleteAuthUsers
(
Long
roleId
,
Long
[]
userIds
)
{
//若该账号仅有一个角色,则不允许取消授权
StringBuilder
lackRoleAccount
=
new
StringBuilder
();
for
(
Long
userId
:
userIds
)
{
SysUser
sysUser
=
userMapper
.
selectUserById
(
userId
);
if
(
sysUser
.
getRoles
().
size
()
==
1
)
{
lackRoleAccount
.
append
(
sysUser
.
getUserName
()).
append
(
","
);
}
}
//将缺少角色的账号返回给前端
if
(
lackRoleAccount
.
toString
().
contains
(
","
))
{
throw
new
ServiceException
(
lackRoleAccount
.
substring
(
0
,
lackRoleAccount
.
length
()-
1
));
}
//校验企业管理员角色下是否至少有一个账号
Integer
users
=
checkAdminHasUsers
(
roleId
);
//如果取消授权企业管理员角色下所有账号,则抛异常
if
(
users
!=
null
&&
userIds
.
length
==
users
)
{
throw
new
ServiceException
(
"至少要保留一个账号在企业管理员角色下!"
);
}
int
rows
=
userRoleMapper
.
delete
(
new
LambdaQueryWrapper
<
SysUserRole
>()
.
eq
(
SysUserRole:
:
getRoleId
,
roleId
)
.
in
(
SysUserRole:
:
getUserId
,
Arrays
.
asList
(
userIds
)));
...
...
@@ -434,6 +462,39 @@ public class SysRoleServiceImpl implements ISysRoleService {
return
rows
;
}
/**
* 校验企业管理员角色下是否至少有一个账号
*
* @param roleId 待操作角色ID
* @return 企业管理员角色账号数量
*/
public
Integer
checkAdminHasUsers
(
Long
roleId
)
{
Long
adminRoleId
=
null
;
Integer
userNum
=
null
;
//查询企业管理员角色ID
List
<
SysRole
>
sysRoles
=
selectRoleAll
();
for
(
SysRole
role
:
sysRoles
)
{
if
(
TenantConstants
.
TENANT_SUPER_ADMIN_ROLE_KEY
.
equals
(
role
.
getRoleKey
()))
{
adminRoleId
=
role
.
getRoleId
();
break
;
}
}
assert
adminRoleId
!=
null
;
//如果待操作角色是企业管理员
if
(
roleId
.
longValue
()
==
adminRoleId
.
longValue
())
{
//如果目前企业管理员角色下仅有1个账号,则不允许进行删除、取消授权等操作
List
<
Long
>
userIds
=
userRoleMapper
.
selectUserIdsByRoleId
(
adminRoleId
);
if
(
userIds
.
size
()
==
1
)
{
throw
new
ServiceException
(
"至少要保留一个账号在企业管理员角色下!"
);
}
userNum
=
userIds
.
size
();
}
return
userNum
;
}
/**
* 批量选择授权用户角色
*
...
...
dsk-system/src/main/java/com/dsk/system/service/impl/SysUserServiceImpl.java
View file @
54157196
...
...
@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.dsk.common.constant.CacheNames
;
import
com.dsk.common.constant.TenantConstants
;
import
com.dsk.common.constant.UserConstants
;
import
com.dsk.common.core.domain.PageQuery
;
import
com.dsk.common.core.page.TableDataInfo
;
...
...
@@ -57,6 +58,22 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
private
final
SysUserRoleMapper
userRoleMapper
;
private
final
SysUserPostMapper
userPostMapper
;
/**
* 根据租户ID查询大司空超管or租户管理员为其创建的企业管理员和管理员账号数量
*
* @param tenantId 租户ID
* @return 该企业下企业管理员和管理员账号数量
*/
@Override
public
Long
queryTenantAdminNumCreatedByDSK
(
Long
tenantId
)
{
LambdaQueryWrapper
<
SysUser
>
queryWrapper
=
new
LambdaQueryWrapper
<
SysUser
>()
.
select
(
SysUser:
:
getUserId
)
.
eq
(
SysUser:
:
getStatus
,
UserConstants
.
USER_NORMAL
)
.
eq
(
SysUser:
:
getTenantId
,
tenantId
)
.
eq
(
SysUser:
:
getCreateBy
,
"suadmin"
);
return
baseMapper
.
selectCount
(
queryWrapper
);
}
@Override
public
TableDataInfo
<
SysUser
>
selectPageUserList
(
SysUser
user
,
PageQuery
pageQuery
)
{
Page
<
SysUser
>
page
=
baseMapper
.
selectPageUserList
(
pageQuery
.
build
(),
this
.
buildQueryWrapper
(
user
));
...
...
@@ -109,10 +126,15 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
QueryWrapper
<
SysUser
>
wrapper
=
Wrappers
.
query
();
wrapper
.
eq
(
"u.del_flag"
,
UserConstants
.
USER_NORMAL
)
.
eq
(
ObjectUtil
.
isNotNull
(
user
.
getRoleId
()),
"r.role_id"
,
user
.
getRoleId
())
.
like
(
StringUtils
.
isNotBlank
(
user
.
getUserName
()),
"u.
user
_name"
,
user
.
getUserName
())
.
like
(
StringUtils
.
isNotBlank
(
user
.
getUserName
()),
"u.
nick
_name"
,
user
.
getUserName
())
.
eq
(
StringUtils
.
isNotBlank
(
user
.
getStatus
()),
"u.status"
,
user
.
getStatus
())
.
like
(
StringUtils
.
isNotBlank
(
user
.
getPhonenumber
()),
"u.phonenumber"
,
user
.
getPhonenumber
());
Page
<
SysUser
>
page
=
baseMapper
.
selectAllocatedList
(
pageQuery
.
build
(),
wrapper
);
List
<
SysUser
>
userList
=
page
.
getRecords
();
for
(
SysUser
sysUser
:
userList
)
{
sysUser
.
setDept
(
deptMapper
.
selectOne
(
new
LambdaQueryWrapper
<
SysDept
>()
.
eq
(
SysDept:
:
getDeptId
,
sysUser
.
getDeptId
())));
}
return
TableDataInfo
.
build
(
page
);
}
...
...
@@ -129,9 +151,14 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
wrapper
.
eq
(
"u.del_flag"
,
UserConstants
.
USER_NORMAL
)
.
and
(
w
->
w
.
ne
(
"r.role_id"
,
user
.
getRoleId
()).
or
().
isNull
(
"r.role_id"
))
.
notIn
(
CollUtil
.
isNotEmpty
(
userIds
),
"u.user_id"
,
userIds
)
.
like
(
StringUtils
.
isNotBlank
(
user
.
getUserName
()),
"u.
user
_name"
,
user
.
getUserName
())
.
like
(
StringUtils
.
isNotBlank
(
user
.
getUserName
()),
"u.
nick
_name"
,
user
.
getUserName
())
.
like
(
StringUtils
.
isNotBlank
(
user
.
getPhonenumber
()),
"u.phonenumber"
,
user
.
getPhonenumber
());
Page
<
SysUser
>
page
=
baseMapper
.
selectUnallocatedList
(
pageQuery
.
build
(),
wrapper
);
List
<
SysUser
>
userList
=
page
.
getRecords
();
for
(
SysUser
sysUser
:
userList
)
{
sysUser
.
setDept
(
deptMapper
.
selectOne
(
new
LambdaQueryWrapper
<
SysDept
>()
.
eq
(
SysDept:
:
getDeptId
,
sysUser
.
getDeptId
())));
}
return
TableDataInfo
.
build
(
page
);
}
...
...
@@ -397,6 +424,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
int
updateUser
(
SysUser
user
)
{
Long
userId
=
user
.
getUserId
();
//校验企业管理员角色下是否至少有一个账号
checkAdminHasUsers
(
user
);
// 删除用户与角色关联
userRoleMapper
.
delete
(
new
LambdaQueryWrapper
<
SysUserRole
>().
eq
(
SysUserRole:
:
getUserId
,
userId
));
// 新增用户与角色管理
...
...
@@ -408,6 +438,44 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
return
baseMapper
.
updateById
(
user
);
}
/**
* 校验企业管理员角色下是否至少有一个账号
*
* @param user 待修改用户
*/
void
checkAdminHasUsers
(
SysUser
user
)
{
//获取企业管理员角色
SysRole
adminRole
=
roleMapper
.
selectOne
(
new
LambdaQueryWrapper
<
SysRole
>()
.
select
(
SysRole:
:
getRoleId
)
.
eq
(
SysRole:
:
getStatus
,
UserConstants
.
USER_NORMAL
)
.
eq
(
SysRole:
:
getDelFlag
,
UserConstants
.
USER_NORMAL
)
.
eq
(
SysRole:
:
getRoleKey
,
TenantConstants
.
TENANT_SUPER_ADMIN_ROLE_KEY
));
//如果目前企业管理员角色下仅有1个账号
List
<
Long
>
userIds
=
userRoleMapper
.
selectUserIdsByRoleId
(
adminRole
.
getRoleId
());
int
enableAccount
=
0
;
for
(
Long
userId
:
userIds
)
{
SysUser
sysUser
=
baseMapper
.
selectUserById
(
userId
);
if
(
UserConstants
.
USER_NORMAL
.
equals
(
sysUser
.
getStatus
()))
{
enableAccount
++;
}
}
if
(
enableAccount
==
1
)
{
//如果仅有的账号ID与待修改的用户ID相同,且修改后的账号角色不包含企业管理员角色
if
(
userIds
.
get
(
0
).
longValue
()
==
user
.
getUserId
().
longValue
()
&&
!
ArrayUtil
.
contains
(
user
.
getRoleIds
(),
adminRole
.
getRoleId
()))
{
throw
new
ServiceException
(
"至少要保留一个账号在企业管理员角色下!"
);
}
//如果仅有的账号ID与待修改的用户ID相同,且修改后的账号角色包含企业管理员角色,但状态为禁用
if
(
userIds
.
get
(
0
).
longValue
()
==
user
.
getUserId
().
longValue
()
&&
ArrayUtil
.
contains
(
user
.
getRoleIds
(),
adminRole
.
getRoleId
())
&&
UserConstants
.
USER_DISABLE
.
equals
(
user
.
getStatus
()))
{
throw
new
ServiceException
(
"至少要保留一个可用账号在企业管理员角色下!"
);
}
}
}
/**
* 用户授权角色
*
...
...
@@ -430,6 +498,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/
@Override
public
int
updateUserStatus
(
SysUser
user
)
{
//如果禁用用户
if
(
UserConstants
.
USER_DISABLE
.
equals
(
user
.
getStatus
()))
{
//校验企业管理员角色下是否至少有一个可用账号
checkAdminHasUsers
(
baseMapper
.
selectUserById
(
user
.
getUserId
()));
}
return
baseMapper
.
updateById
(
user
);
}
...
...
@@ -560,7 +633,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
for
(
Long
userId
:
userIds
)
{
checkUserAllowed
(
new
SysUser
(
userId
));
checkUserDataScope
(
userId
);
//校验企业管理员角色下是否至少有一个账号
checkAdminHasUsers
(
baseMapper
.
selectUserById
(
userId
));
}
List
<
Long
>
ids
=
Arrays
.
asList
(
userIds
);
// 删除用户与角色关联
userRoleMapper
.
delete
(
new
LambdaQueryWrapper
<
SysUserRole
>().
in
(
SysUserRole:
:
getUserId
,
ids
));
...
...
dsk-system/src/main/resources/mapper/system/SysUserMapper.xml
View file @
54157196
...
...
@@ -145,7 +145,7 @@
where t.del_flag=0
and t.status=0
and t1.phonenumber=#{phonenumber}
order by t1.
create_time
desc
order by t1.
user_id
desc
</select>
<select
id=
"selectUserByTenantUsername"
resultType=
"com.dsk.system.domain.SysUser"
>
...
...
@@ -154,6 +154,6 @@
where t.del_flag=0
and t.status=0
and t1.user_name=#{username}
order by t1.
create_time
desc
order by t1.
user_id
desc
</select>
</mapper>
pom.xml
View file @
54157196
...
...
@@ -48,6 +48,9 @@
<aws-java-sdk-s3.version>
1.12.400
</aws-java-sdk-s3.version>
<!-- SMS 配置 -->
<sms4j.version>
2.2.0
</sms4j.version>
<!--中文转拼音-->
<pinyin4j.version>
2.5.1
</pinyin4j.version>
</properties>
<profiles>
...
...
@@ -324,6 +327,13 @@
<version>
${dsk-operate-sys.version}
</version>
</dependency>
<!--中文转拼音-->
<dependency>
<groupId>
com.belerweb
</groupId>
<artifactId>
pinyin4j
</artifactId>
<version>
${pinyin4j.version}
</version>
</dependency>
</dependencies>
</dependencyManagement>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment