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
31a61011
Commit
31a61011
authored
Nov 03, 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
0fa8ec63
1e24d93b
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
130 additions
and
24 deletions
+130
-24
SysUserController.java
...java/com/dsk/web/controller/system/SysUserController.java
+34
-9
userImportTemplate.xlsx
dsk-admin/src/main/resources/excel/userImportTemplate.xlsx
+0
-0
.env.production
dsk-operate-ui/.env.production
+2
-2
index.vue
dsk-operate-ui/src/layout/components/TagsView/index.vue
+6
-3
SysUserImportVo.java
...c/main/java/com/dsk/system/domain/vo/SysUserImportVo.java
+7
-6
ISysUserService.java
...src/main/java/com/dsk/system/service/ISysUserService.java
+10
-0
SysUserServiceImpl.java
.../java/com/dsk/system/service/impl/SysUserServiceImpl.java
+71
-4
No files found.
dsk-admin/src/main/java/com/dsk/web/controller/system/SysUserController.java
View file @
31a61011
...
@@ -6,6 +6,7 @@ import cn.hutool.core.bean.BeanUtil;
...
@@ -6,6 +6,7 @@ import cn.hutool.core.bean.BeanUtil;
import
cn.hutool.core.lang.tree.Tree
;
import
cn.hutool.core.lang.tree.Tree
;
import
cn.hutool.core.util.ArrayUtil
;
import
cn.hutool.core.util.ArrayUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.dsk.biz.utils.ExcelUtils
;
import
com.dsk.common.annotation.Log
;
import
com.dsk.common.annotation.Log
;
import
com.dsk.common.constant.GlobalConstants
;
import
com.dsk.common.constant.GlobalConstants
;
import
com.dsk.common.core.controller.BaseController
;
import
com.dsk.common.core.controller.BaseController
;
...
@@ -13,7 +14,7 @@ import com.dsk.common.core.domain.PageQuery;
...
@@ -13,7 +14,7 @@ import com.dsk.common.core.domain.PageQuery;
import
com.dsk.common.core.domain.R
;
import
com.dsk.common.core.domain.R
;
import
com.dsk.common.core.page.TableDataInfo
;
import
com.dsk.common.core.page.TableDataInfo
;
import
com.dsk.common.enums.BusinessType
;
import
com.dsk.common.enums.BusinessType
;
import
com.dsk.common.exce
l.ExcelResult
;
import
com.dsk.common.exce
ption.ServiceException
;
import
com.dsk.common.helper.LoginHelper
;
import
com.dsk.common.helper.LoginHelper
;
import
com.dsk.common.utils.StreamUtils
;
import
com.dsk.common.utils.StreamUtils
;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.common.utils.StringUtils
;
...
@@ -25,7 +26,6 @@ import com.dsk.system.domain.SysUser;
...
@@ -25,7 +26,6 @@ import com.dsk.system.domain.SysUser;
import
com.dsk.system.domain.vo.SysUserExportVo
;
import
com.dsk.system.domain.vo.SysUserExportVo
;
import
com.dsk.system.domain.vo.SysUserImportVo
;
import
com.dsk.system.domain.vo.SysUserImportVo
;
import
com.dsk.system.domain.vo.SysUserVo
;
import
com.dsk.system.domain.vo.SysUserVo
;
import
com.dsk.system.listener.SysUserImportListener
;
import
com.dsk.system.service.ISysDeptService
;
import
com.dsk.system.service.ISysDeptService
;
import
com.dsk.system.service.ISysPostService
;
import
com.dsk.system.service.ISysPostService
;
import
com.dsk.system.service.ISysRoleService
;
import
com.dsk.system.service.ISysRoleService
;
...
@@ -106,14 +106,39 @@ public class SysUserController extends BaseController {
...
@@ -106,14 +106,39 @@ public class SysUserController extends BaseController {
@SaCheckPermission
(
"system:user:import"
)
@SaCheckPermission
(
"system:user:import"
)
@PostMapping
(
value
=
"/importData"
,
consumes
=
MediaType
.
MULTIPART_FORM_DATA_VALUE
)
@PostMapping
(
value
=
"/importData"
,
consumes
=
MediaType
.
MULTIPART_FORM_DATA_VALUE
)
public
R
<
List
<
SysUserImportVo
>>
importData
(
@RequestPart
(
"file"
)
MultipartFile
file
,
boolean
updateSupport
)
throws
Exception
{
public
R
<
List
<
SysUserImportVo
>>
importData
(
@RequestPart
(
"file"
)
MultipartFile
file
,
boolean
updateSupport
)
throws
Exception
{
ExcelResult
<
SysUserImportVo
>
result
=
ExcelUtil
.
importExcel
(
file
.
getInputStream
(),
SysUserImportVo
.
class
,
new
SysUserImportListener
(
updateSupport
));
//ExcelResult<SysUserImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, new SysUserImportListener(updateSupport));
List
<
SysUserImportVo
>
resultList
=
result
.
getList
();
//List<SysUserImportVo> resultList = result.getList();
if
(!
resultList
.
isEmpty
())
{
//if (!resultList.isEmpty()) {
// String key = GlobalConstants.BATCH_IMPORT_FAIL_USERS + LoginHelper.getUserId();
// RedisUtils.setCacheList(key, resultList);
// return R.fail(resultList);
//}
//return R.ok(result.getAnalysis());
//识别Excel内容
List
<
SysUserImportVo
>
userImportList
=
new
ExcelUtils
<>(
SysUserImportVo
.
class
).
importExcel
(
file
.
getInputStream
(),
2
);
if
(
userImportList
.
isEmpty
())
{
throw
new
ServiceException
(
"表格中不存在待导入数据!"
);
}
for
(
SysUserImportVo
userImportVo
:
userImportList
)
{
System
.
out
.
println
(
"👉🏻:"
+
userImportVo
);
}
//开始导入业务
List
<
SysUserImportVo
>
failImportUsers
=
userService
.
batchImportUser
(
userImportList
,
updateSupport
);
//将导入失败用户存入Redis并返回给前端
if
(!
failImportUsers
.
isEmpty
())
{
String
key
=
GlobalConstants
.
BATCH_IMPORT_FAIL_USERS
+
LoginHelper
.
getUserId
();
String
key
=
GlobalConstants
.
BATCH_IMPORT_FAIL_USERS
+
LoginHelper
.
getUserId
();
RedisUtils
.
setCacheList
(
key
,
resultList
);
//删除旧的
return
R
.
fail
(
resultList
);
RedisUtils
.
deleteObject
(
key
);
//写入新的
RedisUtils
.
setCacheList
(
key
,
failImportUsers
);
return
R
.
fail
(
failImportUsers
);
}
}
return
R
.
ok
(
result
.
getAnalysis
());
return
R
.
ok
();
}
}
/**
/**
...
@@ -122,7 +147,7 @@ public class SysUserController extends BaseController {
...
@@ -122,7 +147,7 @@ public class SysUserController extends BaseController {
@PostMapping
(
"/importTemplate"
)
@PostMapping
(
"/importTemplate"
)
public
void
importTemplate
(
HttpServletResponse
response
)
{
public
void
importTemplate
(
HttpServletResponse
response
)
{
List
<
Object
>
list
=
new
ArrayList
<>();
List
<
Object
>
list
=
new
ArrayList
<>();
list
.
add
(
new
SysUserImportVo
(
"
测试组织"
,
"测试用户昵称"
,
"18888888888"
,
"测试角色
"
));
list
.
add
(
new
SysUserImportVo
(
"
重庆市轨道交通(集团)有限公司"
,
"刘国海"
,
"18888888888"
,
"运营部部长
"
));
ExcelUtil
.
exportTemplate
(
list
,
"用户数据"
,
"excel/userImportTemplate.xlsx"
,
response
);
ExcelUtil
.
exportTemplate
(
list
,
"用户数据"
,
"excel/userImportTemplate.xlsx"
,
response
);
}
}
...
...
dsk-admin/src/main/resources/excel/userImportTemplate.xlsx
View file @
31a61011
No preview for this file type
dsk-operate-ui/.env.production
View file @
31a61011
...
@@ -5,7 +5,7 @@ VUE_APP_TITLE = 数字化经营履约全生命链路管理系统
...
@@ -5,7 +5,7 @@ VUE_APP_TITLE = 数字化经营履约全生命链路管理系统
ENV = 'production'
ENV = 'production'
# 数字化经营履约全生命链路管理系统/生产环境
# 数字化经营履约全生命链路管理系统/生产环境
VUE_APP_BASE_API = 'https://szhapi.jiansheku.com
/
'
VUE_APP_BASE_API = 'https://szhapi.jiansheku.com'
# 子系统地址
# 子系统地址
VUE_APP_SUB_SYSTEM_ADDRESS = "https://plug.jiansheku.com"
VUE_APP_SUB_SYSTEM_ADDRESS = "https://plug.jiansheku.com"
\ No newline at end of file
dsk-operate-ui/src/layout/components/TagsView/index.vue
View file @
31a61011
...
@@ -358,6 +358,9 @@ export default {
...
@@ -358,6 +358,9 @@ export default {
width
:
100%
;
width
:
100%
;
background
:
#fff
;
background
:
#fff
;
position
:
relative
;
position
:
relative
;
::v-deep
.el-scrollbar__wrap
{
margin-left
:
64px
;
}
.tags-view-wrapper
{
.tags-view-wrapper
{
.tags-view-item
{
.tags-view-item
{
display
:
inline-block
;
display
:
inline-block
;
...
@@ -393,9 +396,9 @@ export default {
...
@@ -393,9 +396,9 @@ export default {
background
:
#FFFFFF
;
background
:
#FFFFFF
;
}
}
}
}
&
:first-of-type
{
/*&:first-of-type {*/
margin-left
:
64px
;
/*margin-left: 64px;*/
}
/*}*/
&
:hover
{
&
:hover
{
.el-icon-close
{
.el-icon-close
{
background-color
:
rgba
(
153
,
153
,
153
,
0
.3
);
background-color
:
rgba
(
153
,
153
,
153
,
0
.3
);
...
...
dsk-system/src/main/java/com/dsk/system/domain/vo/SysUserImportVo.java
View file @
31a61011
package
com
.
dsk
.
system
.
domain
.
vo
;
package
com
.
dsk
.
system
.
domain
.
vo
;
import
com.alibaba.excel.annotation.ExcelProperty
;
import
com.alibaba.excel.annotation.ExcelProperty
;
import
com.dsk.common.annotation.Excel
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.NoArgsConstructor
;
...
@@ -23,38 +24,38 @@ public class SysUserImportVo implements Serializable {
...
@@ -23,38 +24,38 @@ public class SysUserImportVo implements Serializable {
/**
/**
* 所属组织
* 所属组织
*/
*/
@Excel
Property
(
value
=
"*所属组织
"
)
@Excel
(
name
=
"所属组织(必填)
"
)
private
String
deptName
;
private
String
deptName
;
/**
/**
* 用户昵称
* 用户昵称
*/
*/
@Excel
Property
(
value
=
"*用户昵称
"
)
@Excel
(
name
=
"用户名称(必填)
"
)
private
String
nickName
;
private
String
nickName
;
/**
/**
* 手机号码
* 手机号码
*/
*/
@Excel
Property
(
value
=
"*手机号码
"
)
@Excel
(
name
=
"手机号码(必填)
"
)
private
String
phonenumber
;
private
String
phonenumber
;
/**
/**
* 用户角色
* 用户角色
*/
*/
@Excel
Property
(
value
=
"*
用户角色"
)
@Excel
(
name
=
"
用户角色"
)
private
String
roleName
;
private
String
roleName
;
/**
/**
* 失败原因
* 失败原因
* 该字段无需同步到模板中
* 该字段无需同步到模板中
*/
*/
@Excel
Property
(
valu
e
=
"失败原因"
)
@Excel
(
nam
e
=
"失败原因"
)
private
String
failReason
;
private
String
failReason
;
public
SysUserImportVo
(
String
deptName
,
String
nickName
,
String
phonenumber
,
String
roleName
)
{
public
SysUserImportVo
(
String
deptName
,
String
nickName
,
String
phonenumber
,
String
roleName
)
{
this
.
deptName
=
deptName
.
replace
(
" "
,
""
);
this
.
deptName
=
deptName
.
replace
(
" "
,
""
);
this
.
nickName
=
nickName
.
replace
(
" "
,
""
);
this
.
nickName
=
nickName
.
replace
(
" "
,
""
);
this
.
phonenumber
=
phonenumber
;
this
.
phonenumber
=
phonenumber
.
replace
(
" "
,
""
)
;
this
.
roleName
=
roleName
.
replace
(
" "
,
""
);
this
.
roleName
=
roleName
.
replace
(
" "
,
""
);
}
}
}
}
dsk-system/src/main/java/com/dsk/system/service/ISysUserService.java
View file @
31a61011
...
@@ -3,6 +3,7 @@ package com.dsk.system.service;
...
@@ -3,6 +3,7 @@ package com.dsk.system.service;
import
com.dsk.common.core.domain.PageQuery
;
import
com.dsk.common.core.domain.PageQuery
;
import
com.dsk.system.domain.SysUser
;
import
com.dsk.system.domain.SysUser
;
import
com.dsk.common.core.page.TableDataInfo
;
import
com.dsk.common.core.page.TableDataInfo
;
import
com.dsk.system.domain.vo.SysUserImportVo
;
import
java.util.List
;
import
java.util.List
;
...
@@ -111,6 +112,15 @@ public interface ISysUserService {
...
@@ -111,6 +112,15 @@ public interface ISysUserService {
*/
*/
void
checkUserAllowed
(
SysUser
user
);
void
checkUserAllowed
(
SysUser
user
);
/**
* 批量导入(更新)用户
*
* @param userImportList Excel中识别出的用户集合
* @param updateSupport 是否更新标识符
* @return 导入失败用户集合
*/
List
<
SysUserImportVo
>
batchImportUser
(
List
<
SysUserImportVo
>
userImportList
,
boolean
updateSupport
);
/**
/**
* 校验用户是否有数据权限
* 校验用户是否有数据权限
*
*
...
...
dsk-system/src/main/java/com/dsk/system/service/impl/SysUserServiceImpl.java
View file @
31a61011
package
com
.
dsk
.
system
.
service
.
impl
;
package
com
.
dsk
.
system
.
service
.
impl
;
import
cn.dev33.satoken.secure.BCrypt
;
import
cn.dev33.satoken.secure.BCrypt
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.date.DateTime
;
import
cn.hutool.core.date.DateTime
;
import
cn.hutool.core.util.ArrayUtil
;
import
cn.hutool.core.util.ArrayUtil
;
...
@@ -22,7 +23,9 @@ import com.dsk.common.helper.LoginHelper;
...
@@ -22,7 +23,9 @@ import com.dsk.common.helper.LoginHelper;
import
com.dsk.common.utils.PasswordUtils
;
import
com.dsk.common.utils.PasswordUtils
;
import
com.dsk.common.utils.StreamUtils
;
import
com.dsk.common.utils.StreamUtils
;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.common.utils.ValidatorUtils
;
import
com.dsk.system.domain.*
;
import
com.dsk.system.domain.*
;
import
com.dsk.system.domain.vo.SysUserImportVo
;
import
com.dsk.system.mapper.*
;
import
com.dsk.system.mapper.*
;
import
com.dsk.system.service.ISysUserService
;
import
com.dsk.system.service.ISysUserService
;
import
lombok.RequiredArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
...
@@ -35,10 +38,7 @@ import org.springframework.cache.annotation.Cacheable;
...
@@ -35,10 +38,7 @@ import org.springframework.cache.annotation.Cacheable;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.Arrays
;
import
java.util.*
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
/**
* 用户 业务层处理
* 用户 业务层处理
...
@@ -250,6 +250,73 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
...
@@ -250,6 +250,73 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
}
}
}
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
List
<
SysUserImportVo
>
batchImportUser
(
List
<
SysUserImportVo
>
userImportList
,
boolean
updateSupport
)
{
//导入失败用户集合
ArrayList
<
SysUserImportVo
>
failImportUsers
=
new
ArrayList
<>();
//导入成功用户数量
int
successNum
=
0
;
//导入失败用户数量
int
failureNum
=
0
;
for
(
SysUserImportVo
userVo
:
userImportList
)
{
//无需判断字段是否为空,若查不到,直接存入导入失败的用户集合
SysUser
user
=
this
.
baseMapper
.
selectUserByPhonenumber
(
userVo
.
getPhonenumber
());
SysDept
dept
=
this
.
deptMapper
.
selectOne
(
new
LambdaQueryWrapper
<
SysDept
>().
eq
(
SysDept:
:
getDeptName
,
userVo
.
getDeptName
()));
SysRole
role
=
this
.
roleMapper
.
selectOne
(
new
LambdaQueryWrapper
<
SysRole
>().
eq
(
SysRole:
:
getRoleName
,
userVo
.
getRoleName
()));
try
{
if
(
ObjectUtil
.
isNull
(
dept
))
{
throw
new
ServiceException
(
"部门不存在"
);
}
if
(
ObjectUtil
.
isNull
(
role
))
{
throw
new
ServiceException
(
"角色不存在"
);
}
// 验证是否存在这个用户
if
(
ObjectUtil
.
isNull
(
user
))
{
user
=
BeanUtil
.
toBean
(
userVo
,
SysUser
.
class
);
user
.
setUserName
(
userVo
.
getPhonenumber
());
user
.
setDeptId
(
dept
.
getDeptId
());
user
.
setDept
(
dept
);
user
.
setRoleId
(
role
.
getRoleId
());
user
.
setRoleIds
(
new
Long
[]{
role
.
getRoleId
()});
ValidatorUtils
.
validate
(
user
);
user
.
setCreateBy
(
LoginHelper
.
getUsername
());
this
.
insertUser
(
user
);
}
else
if
(
updateSupport
)
{
Long
userId
=
user
.
getUserId
();
user
=
BeanUtil
.
toBean
(
userVo
,
SysUser
.
class
);
user
.
setUserId
(
userId
);
user
.
setUserName
(
userVo
.
getPhonenumber
());
user
.
setDeptId
(
dept
.
getDeptId
());
user
.
setDept
(
dept
);
user
.
setRoleId
(
role
.
getRoleId
());
user
.
setRoleIds
(
new
Long
[]{
role
.
getRoleId
()});
ValidatorUtils
.
validate
(
user
);
this
.
checkUserAllowed
(
user
);
this
.
checkUserDataScope
(
user
.
getUserId
());
user
.
setUpdateBy
(
LoginHelper
.
getUsername
());
this
.
updateUser
(
user
);
log
.
info
(++
successNum
+
"、账号 "
+
user
.
getUserName
()
+
" 更新成功"
);
}
else
{
userVo
.
setFailReason
(
"手机号已存在"
);
log
.
error
(++
failureNum
+
"、账号 "
+
user
.
getUserName
()
+
" 已存在"
);
failImportUsers
.
add
(
userVo
);
}
}
catch
(
Exception
e
)
{
userVo
.
setFailReason
(
e
.
getMessage
());
failImportUsers
.
add
(
userVo
);
log
.
error
(++
failureNum
+
"、账号 "
+
userVo
.
getPhonenumber
()
+
" 导入失败:"
,
e
);
}
}
return
failImportUsers
;
}
/**
/**
* 校验用户是否有数据权限
* 校验用户是否有数据权限
*
*
...
...
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