Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
tagManager
Overview
Overview
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
lanmw
tagManager
Commits
10ed975e
Commit
10ed975e
authored
Jan 07, 2020
by
zhangkb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改标签管理维度标签和个人标签根据当前登录用户过滤
parent
3ff544a8
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1344 additions
and
1062 deletions
+1344
-1062
TagCtrl.java
src/main/java/com/keymobile/tagmanager/api/TagCtrl.java
+63
-49
TagFileCtrl.java
src/main/java/com/keymobile/tagmanager/api/TagFileCtrl.java
+71
-74
Tag.java
src/main/java/com/keymobile/tagmanager/model/Tag.java
+260
-249
Org.java
.../java/com/keymobile/tagmanager/model/authService/Org.java
+24
-0
AuthServiceClient.java
...va/com/keymobile/tagmanager/remote/AuthServiceClient.java
+17
-0
TagFileService.java
...java/com/keymobile/tagmanager/service/TagFileService.java
+279
-275
TagService.java
...ain/java/com/keymobile/tagmanager/service/TagService.java
+546
-408
UserInfoUtils.java
...ain/java/com/keymobile/tagmanager/util/UserInfoUtils.java
+34
-7
application-test.yml
src/main/resources/application-test.yml
+50
-0
No files found.
src/main/java/com/keymobile/tagmanager/api/TagCtrl.java
View file @
10ed975e
...
...
@@ -30,14 +30,20 @@ public class TagCtrl {
@Autowired
private
TagService
tagService
;
//author:zhangkb time:2020-1-6 desc:修改标签相关接口
@ApiOperation
(
value
=
"新增或更新标签"
,
notes
=
"新增或更新标签"
)
@PostMapping
(
value
=
"/addOrUpdateTag"
)
public
Tag
addTag
(
@RequestParam
(
value
=
"parentId"
,
required
=
false
)
String
parentId
,
@RequestBody
Tag
tag
)
throws
Exception
{
@RequestBody
Tag
tag
)
throws
Exception
{
//获取当前登录用户名和id
String
userName
=
UserInfoUtils
.
getUserName
();
String
userId
=
UserInfoUtils
.
getUserId
();
//获取当前登录用户所属机构
String
org
=
UserInfoUtils
.
getDataRoleOrg
();
tag
.
setCreator
(
userName
);
tag
.
setDept
(
UserInfoUtils
.
getUserCompanyIdPath
());
tag
.
setTagUser
(
userId
);
tag
.
setDept
(
org
);
//调用新增或者修改标签接口
return
tagService
.
addOrUpdateTag
(
parentId
,
tag
,
userName
);
}
...
...
@@ -55,21 +61,13 @@ public class TagCtrl {
return
tagService
.
hasChild
(
tagId
,
userName
);
}
// @PreAuthorize("principal.authorities.?[authority.startsWith('ROLE_tagmanager_admin')].size() > 0")
@ApiOperation
(
value
=
"查询系统标签树"
,
notes
=
"查询系统标签树"
)
@GetMapping
(
value
=
"/querySystemTagAsTree"
)
public
JsonNode
[]
querySystemTagAsTree
(
@RequestParam
(
value
=
"parentId"
,
required
=
false
)
String
parentId
)
throws
TagNotExistException
{
return
tagService
.
querySystemTagAsTree
(
parentId
);
}
@ApiOperation
(
value
=
"查询维度标签树"
,
notes
=
"查询维度标签树"
)
@ApiOperation
(
value
=
"获取维度标签树"
,
notes
=
"获取维度标签树"
)
@GetMapping
(
value
=
"/queryDimensionTagAsTree"
)
public
JsonNode
[]
queryDimensionTagAsTree
(
@RequestParam
(
value
=
"parentId"
,
required
=
false
)
String
parentId
,
@RequestParam
(
required
=
false
)
String
deptIdPath
)
throws
TagNotExistException
{
if
(
StringUtils
.
isBlank
(
deptIdPath
))
deptIdPath
=
UserInfoUtils
.
getUserCompanyIdPath
();
//获取当前登录用户机构
deptIdPath
=
UserInfoUtils
.
getDataRoleOrg
();
return
tagService
.
queryDimensionTagAsTree
(
deptIdPath
,
parentId
);
}
...
...
@@ -78,35 +76,12 @@ public class TagCtrl {
public
JsonNode
[]
queryPersonalTagAsTree
(
@RequestParam
(
value
=
"parentId"
,
required
=
false
)
String
parentId
,
@RequestParam
(
required
=
false
)
String
deptIdPath
)
throws
TagNotExistException
{
if
(
StringUtils
.
isBlank
(
deptIdPath
))
deptIdPath
=
UserInfoUtils
.
getUserCompanyIdPath
();
String
userName
=
UserInfoUtils
.
getUserName
();
return
tagService
.
queryPersonalTagAsTree
(
parentId
,
userName
,
deptIdPath
);
}
@ApiOperation
(
value
=
"查询个人标签树不包括分享的标签"
,
notes
=
"查询个人标签树不包括分享的标签"
)
@GetMapping
(
value
=
"/queryPersonalTagExcludeOpenTypeAsTree"
)
public
JsonNode
[]
queryPersonalTagExcludeOpenTypeAsTree
(
@RequestParam
(
value
=
"parentId"
,
required
=
false
)
String
parentId
,
@RequestParam
(
required
=
false
)
String
deptIdPath
)
throws
TagNotExistException
{
String
userName
=
UserInfoUtils
.
getUserName
();
if
(
StringUtils
.
isBlank
(
deptIdPath
))
deptIdPath
=
UserInfoUtils
.
getUserCompanyIdPath
();
return
tagService
.
queryPersonalTagExcludeOpenTypeAsTree
(
parentId
,
userName
,
deptIdPath
);
}
@ApiOperation
(
value
=
"搜索系統标签"
,
notes
=
"搜索系統标签"
)
@GetMapping
(
value
=
"/searchSystemTagByPage"
)
public
Page
searchSystemTagByPage
(
@RequestParam
(
required
=
false
,
value
=
"keyword"
)
String
keyword
,
@RequestParam
(
required
=
false
,
value
=
"domain"
)
Integer
domain
,
@RequestParam
(
required
=
false
,
value
=
"path"
)
String
path
,
@RequestParam
(
"pageNo"
)
Integer
pageNo
,
@RequestParam
(
"pageSize"
)
Integer
pageSize
)
{
String
userName
=
UserInfoUtils
.
getUserName
();
return
tagService
.
searchSystemTagByPage
(
userName
,
keyword
,
path
,
domain
,
new
Page
(
pageSize
,
pageNo
));
//获取当前登录用户机构id
deptIdPath
=
UserInfoUtils
.
getDataRoleOrg
();
//获取当前登录用户id
String
userId
=
UserInfoUtils
.
getUserId
();
return
tagService
.
queryPersonalTagAsTree
(
parentId
,
userId
,
deptIdPath
);
}
@ApiOperation
(
value
=
"搜索维度标签里面的个人标签"
,
notes
=
"搜索维度标签里面的个人标签"
)
@GetMapping
(
value
=
"/searchPersonalDimensionTagByPage"
)
public
Page
searchPersonalDimensionTagByPage
(
...
...
@@ -116,10 +91,10 @@ public class TagCtrl {
@RequestParam
(
required
=
false
,
value
=
"path"
)
String
path
,
@RequestParam
(
"pageNo"
)
Integer
pageNo
,
@RequestParam
(
"pageSize"
)
Integer
pageSize
)
{
String
userName
=
UserInfoUtils
.
getUser
Name
();
if
(
StringUtils
.
isBlank
(
deptIdPath
))
deptIdPath
=
UserInfoUtils
.
getUserCompanyIdPath
();
return
tagService
.
searchPersonalDimensionTagByPage
(
userName
,
deptIdPath
,
keyword
,
path
,
domain
,
new
Page
(
pageSize
,
pageNo
));
String
userName
=
UserInfoUtils
.
getUser
Id
();
deptIdPath
=
UserInfoUtils
.
getDataRoleOrg
();
return
tagService
.
searchPersonalDimensionTagByPage
(
userName
,
deptIdPath
,
keyword
,
path
,
domain
,
new
Page
(
pageSize
,
pageNo
));
}
@ApiOperation
(
value
=
"搜索个人标签"
,
notes
=
"搜索个人标签"
)
...
...
@@ -130,12 +105,51 @@ public class TagCtrl {
@RequestParam
(
required
=
false
,
value
=
"deptIdPath"
)
String
deptIdPath
,
@RequestParam
(
"pageNo"
)
Integer
pageNo
,
@RequestParam
(
"pageSize"
)
Integer
pageSize
)
{
String
userName
=
UserInfoUtils
.
getUserName
();
if
(
StringUtils
.
isBlank
(
deptIdPath
))
deptIdPath
=
UserInfoUtils
.
getUserCompanyIdPath
();
String
userName
=
UserInfoUtils
.
getUserId
();
deptIdPath
=
UserInfoUtils
.
getDataRoleOrg
();
return
tagService
.
searchPersonalTagByPage
(
userName
,
deptIdPath
,
keyword
,
path
,
domain
,
new
Page
(
pageSize
,
pageNo
));
}
// @PreAuthorize("principal.authorities.?[authority.startsWith('ROLE_tagmanager_admin')].size() > 0")
@ApiOperation
(
value
=
"查询系统标签树"
,
notes
=
"查询系统标签树"
)
@GetMapping
(
value
=
"/querySystemTagAsTree"
)
public
JsonNode
[]
querySystemTagAsTree
(
@RequestParam
(
value
=
"parentId"
,
required
=
false
)
String
parentId
)
throws
TagNotExistException
{
return
tagService
.
querySystemTagAsTree
(
parentId
);
}
@ApiOperation
(
value
=
"搜索系統标签"
,
notes
=
"搜索系統标签"
)
@GetMapping
(
value
=
"/searchSystemTagByPage"
)
public
Page
searchSystemTagByPage
(
@RequestParam
(
required
=
false
,
value
=
"keyword"
)
String
keyword
,
@RequestParam
(
required
=
false
,
value
=
"domain"
)
Integer
domain
,
@RequestParam
(
required
=
false
,
value
=
"path"
)
String
path
,
@RequestParam
(
"pageNo"
)
Integer
pageNo
,
@RequestParam
(
"pageSize"
)
Integer
pageSize
)
{
String
userName
=
UserInfoUtils
.
getUserId
();
return
tagService
.
searchSystemTagByPage
(
userName
,
keyword
,
path
,
domain
,
new
Page
(
pageSize
,
pageNo
));
}
@ApiOperation
(
value
=
"查询个人标签树不包括分享的标签"
,
notes
=
"查询个人标签树不包括分享的标签"
)
@GetMapping
(
value
=
"/queryPersonalTagExcludeOpenTypeAsTree"
)
public
JsonNode
[]
queryPersonalTagExcludeOpenTypeAsTree
(
@RequestParam
(
value
=
"parentId"
,
required
=
false
)
String
parentId
,
@RequestParam
(
required
=
false
)
String
deptIdPath
)
throws
TagNotExistException
{
String
userName
=
UserInfoUtils
.
getUserId
();
deptIdPath
=
UserInfoUtils
.
getDataRoleOrg
();
return
tagService
.
queryPersonalTagExcludeOpenTypeAsTree
(
parentId
,
userName
,
deptIdPath
);
}
@ApiOperation
(
value
=
"分享标签"
,
notes
=
"分享标签"
)
@PostMapping
(
value
=
"/shareTags"
)
public
void
shareTags
(
@RequestBody
List
<
String
>
tagIds
)
throws
Exception
{
...
...
src/main/java/com/keymobile/tagmanager/api/TagFileCtrl.java
View file @
10ed975e
package
com
.
keymobile
.
tagmanager
.
api
;
import
javax.servlet.http.HttpServletResponse
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.multipart.MultipartFile
;
import
com.keymobile.tagmanager.model.Page
;
import
com.keymobile.tagmanager.service.TagFileService
;
import
com.keymobile.tagmanager.util.UserInfoUtils
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
@Api
(
value
=
"文件"
,
tags
=
"文件"
)
@RestController
@RequestMapping
(
value
=
"/file"
)
public
class
TagFileCtrl
{
@Autowired
private
TagFileService
tagExportService
;
@GetMapping
(
"/exportTag"
)
public
int
export
(
HttpServletResponse
response
,
@RequestParam
(
required
=
false
,
value
=
"deptIdPath"
)
String
deptIdPath
)
{
if
(
StringUtils
.
isBlank
(
deptIdPath
))
{
deptIdPath
=
UserInfoUtils
.
getUserCompanyIdPath
();
}
return
tagExportService
.
exportExcel
(
deptIdPath
,
response
);
}
@PostMapping
(
"/importTag"
)
public
String
importExcel
(
MultipartFile
file
,
HttpServletResponse
response
,
@RequestParam
(
required
=
false
,
value
=
"deptIdPath"
)
String
deptIdPath
)
throws
Exception
{
String
userName
=
UserInfoUtils
.
getUserName
();
if
(
StringUtils
.
isBlank
(
deptIdPath
))
{
deptIdPath
=
UserInfoUtils
.
getUserCompanyIdPath
();
}
return
tagExportService
.
importExcel
(
userName
,
deptIdPath
,
file
);
}
@ApiOperation
(
value
=
"分页获取导入日志"
,
notes
=
"分页获取导入日志"
)
@GetMapping
(
value
=
"/listImportTagLogByPage"
)
public
Page
searchPersonalDimensionTagByPage
(
@RequestParam
(
required
=
false
,
value
=
"deptIdPath"
)
String
deptIdPath
,
@RequestParam
(
"pageNo"
)
Integer
pageNo
,
@RequestParam
(
"pageSize"
)
Integer
pageSize
)
{
if
(
StringUtils
.
isBlank
(
deptIdPath
))
{
deptIdPath
=
UserInfoUtils
.
getUserCompanyIdPath
();
}
return
tagExportService
.
listImportlogByPage
(
deptIdPath
,
new
Page
(
pageSize
,
pageNo
));
}
@ApiOperation
(
value
=
"撤销导入"
,
notes
=
"撤销导入"
)
@PostMapping
(
value
=
"/undoImportTag"
)
public
void
undoImportExcel
(
@RequestParam
(
"importlogId"
)
String
importlogId
)
{
tagExportService
.
undoImportExcel
(
importlogId
);
}
//----------------------以下为导入系统的时候
@PostMapping
(
"/importSystem"
)
public
String
importSystem
(
MultipartFile
file
,
HttpServletResponse
response
)
throws
Exception
{
String
userName
=
UserInfoUtils
.
getUserName
();
return
tagExportService
.
importSystem
(
userName
,
file
);
}
}
package
com
.
keymobile
.
tagmanager
.
api
;
import
javax.servlet.http.HttpServletResponse
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.multipart.MultipartFile
;
import
com.keymobile.tagmanager.model.Page
;
import
com.keymobile.tagmanager.service.TagFileService
;
import
com.keymobile.tagmanager.util.UserInfoUtils
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
@Api
(
value
=
"文件"
,
tags
=
"文件"
)
@RestController
@RequestMapping
(
value
=
"/file"
)
public
class
TagFileCtrl
{
@Autowired
private
TagFileService
tagExportService
;
@GetMapping
(
"/exportTag"
)
public
int
export
(
HttpServletResponse
response
,
@RequestParam
(
required
=
false
,
value
=
"deptIdPath"
)
String
deptIdPath
)
{
deptIdPath
=
UserInfoUtils
.
getDataRoleOrg
();
return
tagExportService
.
exportExcel
(
deptIdPath
,
response
);
}
@PostMapping
(
"/importTag"
)
public
String
importExcel
(
MultipartFile
file
,
HttpServletResponse
response
,
@RequestParam
(
required
=
false
,
value
=
"deptIdPath"
)
String
deptIdPath
)
throws
Exception
{
String
userName
=
UserInfoUtils
.
getUserName
();
String
userId
=
UserInfoUtils
.
getUserId
();
deptIdPath
=
UserInfoUtils
.
getDataRoleOrg
();
return
tagExportService
.
importExcel
(
userName
,
userId
,
deptIdPath
,
file
);
}
@ApiOperation
(
value
=
"分页获取导入日志"
,
notes
=
"分页获取导入日志"
)
@GetMapping
(
value
=
"/listImportTagLogByPage"
)
public
Page
searchPersonalDimensionTagByPage
(
@RequestParam
(
required
=
false
,
value
=
"deptIdPath"
)
String
deptIdPath
,
@RequestParam
(
"pageNo"
)
Integer
pageNo
,
@RequestParam
(
"pageSize"
)
Integer
pageSize
)
{
if
(
StringUtils
.
isBlank
(
deptIdPath
))
{
deptIdPath
=
UserInfoUtils
.
getUserCompanyIdPath
();
}
return
tagExportService
.
listImportlogByPage
(
deptIdPath
,
new
Page
(
pageSize
,
pageNo
));
}
@ApiOperation
(
value
=
"撤销导入"
,
notes
=
"撤销导入"
)
@PostMapping
(
value
=
"/undoImportTag"
)
public
void
undoImportExcel
(
@RequestParam
(
"importlogId"
)
String
importlogId
)
{
tagExportService
.
undoImportExcel
(
importlogId
);
}
//----------------------以下为导入系统的时候
@PostMapping
(
"/importSystem"
)
public
String
importSystem
(
MultipartFile
file
,
HttpServletResponse
response
)
throws
Exception
{
String
userName
=
UserInfoUtils
.
getUserName
();
return
tagExportService
.
importSystem
(
userName
,
file
);
}
}
src/main/java/com/keymobile/tagmanager/model/Tag.java
View file @
10ed975e
package
com
.
keymobile
.
tagmanager
.
model
;
import
java.io.Serializable
;
import
javax.persistence.Id
;
import
javax.validation.constraints.NotNull
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.data.mongodb.core.mapping.Document
;
import
com.keymobile.tagmanager.util.Constants
;
import
cn.afterturn.easypoi.excel.annotation.Excel
;
import
cn.afterturn.easypoi.excel.annotation.ExcelTarget
;
import
cn.afterturn.easypoi.handler.inter.IExcelDataModel
;
import
cn.afterturn.easypoi.handler.inter.IExcelModel
;
@ExcelTarget
(
"20"
)
@Document
(
collection
=
"Tag"
)
public
class
Tag
implements
Serializable
,
IExcelModel
,
IExcelDataModel
{
/**
*
*/
private
static
final
long
serialVersionUID
=
1L
;
@Id
private
String
id
;
@Excel
(
name
=
"名称"
,
orderNum
=
"0"
,
width
=
30
)
@NotNull
private
String
name
;
@Excel
(
name
=
"英文名"
,
orderNum
=
"1"
,
width
=
30
)
private
String
nameEn
;
@Excel
(
name
=
"路径"
,
orderNum
=
"2"
,
width
=
30
)
@NotNull
private
String
path
;
@Excel
(
name
=
"描述"
,
orderNum
=
"3"
,
width
=
30
)
private
String
desc
;
private
String
imgId
;
@Excel
(
name
=
"排序权重"
,
orderNum
=
"4"
,
width
=
30
)
private
Integer
order
;
private
Integer
level
;
@Excel
(
name
=
"标签类型"
,
replace
=
{
"系统标签_0"
,
"自定义标签_1"
},
orderNum
=
"5"
,
width
=
30
)
private
String
tagType
;
//0, 系统标签, 1 ,自定义标签
private
String
idPath
;
private
String
creator
;
private
String
createDate
;
private
String
isOpen
=
Constants
.
TAG_CLOSE_STATUS
;
//0 不公开, 1, 公开
private
Integer
domain
;
private
String
dimensionType
=
Constants
.
TAG_DIMENSION_FALSE
;
//0 非维度标签, 1 维度标签
private
String
dept
;
// 部门
private
String
importId
;
//记录导入的Id,后面撤销用到
public
Tag
()
{}
public
Tag
(
String
name
,
String
desc
)
{
this
.
name
=
name
;
this
.
desc
=
desc
;
this
.
path
=
name
;
}
public
Tag
(
String
parentPath
,
String
name
,
String
desc
,
String
imgId
)
{
this
.
name
=
name
;
this
.
desc
=
desc
;
if
(
StringUtils
.
isEmpty
(
parentPath
))
{
this
.
path
=
name
;
}
else
{
this
.
path
=
parentPath
+
Constants
.
TAG_PATH_SEPARATOR
+
name
;
}
this
.
imgId
=
imgId
;
}
public
void
setCreateDate
(
String
createDate
)
{
this
.
createDate
=
createDate
;
}
public
String
getCreateDate
()
{
return
createDate
;
}
public
Tag
(
String
parentPath
,
String
name
,
String
id
)
{
this
(
parentPath
,
name
,
""
,
""
);
this
.
id
=
id
;
}
public
String
getId
()
{
return
id
;
}
public
void
setImportId
(
String
importId
)
{
this
.
importId
=
importId
;
}
public
String
getImportId
()
{
return
importId
;
}
public
void
setId
(
String
id
)
{
this
.
id
=
id
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getNameEn
()
{
return
nameEn
;
}
public
void
setNameEn
(
String
nameEn
)
{
this
.
nameEn
=
nameEn
;
}
public
String
getPath
()
{
return
path
;
}
public
void
setPath
(
String
path
)
{
this
.
path
=
path
;
}
public
String
getDesc
()
{
return
desc
;
}
public
void
setDesc
(
String
desc
)
{
this
.
desc
=
desc
;
}
public
String
getImgId
()
{
return
imgId
;
}
public
void
setImgId
(
String
imgId
)
{
this
.
imgId
=
imgId
;
}
public
Integer
getOrder
()
{
return
order
;
}
public
void
setOrder
(
Integer
order
)
{
this
.
order
=
order
;
}
public
Integer
getLevel
()
{
return
level
;
}
public
void
setLevel
(
Integer
level
)
{
this
.
level
=
level
;
}
public
String
getTagType
()
{
return
tagType
;
}
public
void
setTagType
(
String
tagType
)
{
this
.
tagType
=
tagType
;
}
public
String
getCreator
()
{
return
creator
;
}
public
void
setCreator
(
String
creator
)
{
this
.
creator
=
creator
;
}
public
String
getIsOpen
()
{
return
isOpen
;
}
public
void
setIsOpen
(
String
isOpen
)
{
this
.
isOpen
=
isOpen
;
}
public
Integer
getDomain
()
{
return
domain
;
}
public
void
setDomain
(
Integer
domain
)
{
this
.
domain
=
domain
;
}
public
void
setDimensionType
(
String
dimensionType
)
{
this
.
dimensionType
=
dimensionType
;
}
public
String
getDimensionType
()
{
return
dimensionType
;
}
public
void
setIdPath
(
String
idPath
)
{
this
.
idPath
=
idPath
;
}
public
String
getIdPath
()
{
return
idPath
;
}
public
void
setDept
(
String
dept
)
{
this
.
dept
=
dept
;
}
public
String
getDept
()
{
return
dept
;
}
@Override
public
String
toString
()
{
return
"Tag [id="
+
id
+
", name="
+
name
+
", nameEn="
+
nameEn
+
", path="
+
path
+
", desc="
+
desc
+
", imgId="
+
imgId
+
", order="
+
order
+
", level="
+
level
+
", tagType="
+
tagType
+
", creator="
+
creator
+
", createDate="
+
createDate
+
", isOpen="
+
isOpen
+
", domain="
+
domain
+
", dimensionType="
+
dimensionType
+
"]"
;
}
@org
.
springframework
.
data
.
annotation
.
Transient
private
String
errMsg
;
@org
.
springframework
.
data
.
annotation
.
Transient
private
int
excelRowNum
;
@Override
public
String
getErrorMsg
()
{
return
errMsg
;
}
@Override
public
void
setErrorMsg
(
String
errorMsg
)
{
this
.
errMsg
=
errorMsg
;
}
@Override
public
Integer
getRowNum
()
{
return
excelRowNum
;
}
@Override
public
void
setRowNum
(
Integer
rowNum
)
{
this
.
excelRowNum
=
rowNum
;
}
}
package
com
.
keymobile
.
tagmanager
.
model
;
import
java.io.Serializable
;
import
javax.persistence.Id
;
import
javax.validation.constraints.NotNull
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.data.mongodb.core.mapping.Document
;
import
com.keymobile.tagmanager.util.Constants
;
import
cn.afterturn.easypoi.excel.annotation.Excel
;
import
cn.afterturn.easypoi.excel.annotation.ExcelTarget
;
import
cn.afterturn.easypoi.handler.inter.IExcelDataModel
;
import
cn.afterturn.easypoi.handler.inter.IExcelModel
;
@ExcelTarget
(
"20"
)
@Document
(
collection
=
"Tag"
)
public
class
Tag
implements
Serializable
,
IExcelModel
,
IExcelDataModel
{
/**
*
*/
private
static
final
long
serialVersionUID
=
1L
;
@Id
private
String
id
;
@Excel
(
name
=
"名称"
,
orderNum
=
"0"
,
width
=
30
)
@NotNull
private
String
name
;
@Excel
(
name
=
"英文名"
,
orderNum
=
"1"
,
width
=
30
)
private
String
nameEn
;
@Excel
(
name
=
"路径"
,
orderNum
=
"2"
,
width
=
30
)
@NotNull
private
String
path
;
@Excel
(
name
=
"描述"
,
orderNum
=
"3"
,
width
=
30
)
private
String
desc
;
private
String
imgId
;
@Excel
(
name
=
"排序权重"
,
orderNum
=
"4"
,
width
=
30
)
private
Integer
order
;
private
Integer
level
;
@Excel
(
name
=
"标签类型"
,
replace
=
{
"系统标签_0"
,
"自定义标签_1"
},
orderNum
=
"5"
,
width
=
30
)
private
String
tagType
;
//0, 系统标签, 1 ,自定义标签
private
String
idPath
;
private
String
creator
;
private
String
createDate
;
private
String
isOpen
=
Constants
.
TAG_CLOSE_STATUS
;
//0 不公开, 1, 公开
private
Integer
domain
;
private
String
dimensionType
=
Constants
.
TAG_DIMENSION_FALSE
;
//0 非维度标签, 1 维度标签
private
String
dept
;
// 部门
private
String
importId
;
//记录导入的Id,后面撤销用到
//author:zhangkb time:2020-1-6 desc:添加标签创建对应的用户id,普通用户创建自定义标签有用到
private
String
tagUser
;
public
Tag
()
{}
public
Tag
(
String
name
,
String
desc
)
{
this
.
name
=
name
;
this
.
desc
=
desc
;
this
.
path
=
name
;
}
public
Tag
(
String
parentPath
,
String
name
,
String
desc
,
String
imgId
)
{
this
.
name
=
name
;
this
.
desc
=
desc
;
if
(
StringUtils
.
isEmpty
(
parentPath
))
{
this
.
path
=
name
;
}
else
{
this
.
path
=
parentPath
+
Constants
.
TAG_PATH_SEPARATOR
+
name
;
}
this
.
imgId
=
imgId
;
}
public
void
setCreateDate
(
String
createDate
)
{
this
.
createDate
=
createDate
;
}
public
String
getCreateDate
()
{
return
createDate
;
}
public
Tag
(
String
parentPath
,
String
name
,
String
id
)
{
this
(
parentPath
,
name
,
""
,
""
);
this
.
id
=
id
;
}
public
String
getId
()
{
return
id
;
}
public
void
setImportId
(
String
importId
)
{
this
.
importId
=
importId
;
}
public
String
getImportId
()
{
return
importId
;
}
public
void
setId
(
String
id
)
{
this
.
id
=
id
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getNameEn
()
{
return
nameEn
;
}
public
void
setNameEn
(
String
nameEn
)
{
this
.
nameEn
=
nameEn
;
}
public
String
getPath
()
{
return
path
;
}
public
void
setPath
(
String
path
)
{
this
.
path
=
path
;
}
public
String
getDesc
()
{
return
desc
;
}
public
void
setDesc
(
String
desc
)
{
this
.
desc
=
desc
;
}
public
String
getImgId
()
{
return
imgId
;
}
public
void
setImgId
(
String
imgId
)
{
this
.
imgId
=
imgId
;
}
public
Integer
getOrder
()
{
return
order
;
}
public
void
setOrder
(
Integer
order
)
{
this
.
order
=
order
;
}
public
Integer
getLevel
()
{
return
level
;
}
public
void
setLevel
(
Integer
level
)
{
this
.
level
=
level
;
}
public
String
getTagType
()
{
return
tagType
;
}
public
void
setTagType
(
String
tagType
)
{
this
.
tagType
=
tagType
;
}
public
String
getCreator
()
{
return
creator
;
}
public
void
setCreator
(
String
creator
)
{
this
.
creator
=
creator
;
}
public
String
getIsOpen
()
{
return
isOpen
;
}
public
void
setIsOpen
(
String
isOpen
)
{
this
.
isOpen
=
isOpen
;
}
public
Integer
getDomain
()
{
return
domain
;
}
public
void
setDomain
(
Integer
domain
)
{
this
.
domain
=
domain
;
}
public
void
setDimensionType
(
String
dimensionType
)
{
this
.
dimensionType
=
dimensionType
;
}
public
String
getDimensionType
()
{
return
dimensionType
;
}
public
void
setIdPath
(
String
idPath
)
{
this
.
idPath
=
idPath
;
}
public
String
getIdPath
()
{
return
idPath
;
}
public
void
setDept
(
String
dept
)
{
this
.
dept
=
dept
;
}
public
String
getDept
()
{
return
dept
;
}
@Override
public
String
toString
()
{
return
"Tag [id="
+
id
+
", name="
+
name
+
", nameEn="
+
nameEn
+
", path="
+
path
+
", desc="
+
desc
+
", imgId="
+
imgId
+
", order="
+
order
+
", level="
+
level
+
", tagType="
+
tagType
+
", creator="
+
creator
+
", createDate="
+
createDate
+
", isOpen="
+
isOpen
+
", domain="
+
domain
+
", dimensionType="
+
dimensionType
+
"]"
;
}
@org
.
springframework
.
data
.
annotation
.
Transient
private
String
errMsg
;
@org
.
springframework
.
data
.
annotation
.
Transient
private
int
excelRowNum
;
@Override
public
String
getErrorMsg
()
{
return
errMsg
;
}
@Override
public
void
setErrorMsg
(
String
errorMsg
)
{
this
.
errMsg
=
errorMsg
;
}
@Override
public
Integer
getRowNum
()
{
return
excelRowNum
;
}
@Override
public
void
setRowNum
(
Integer
rowNum
)
{
this
.
excelRowNum
=
rowNum
;
}
public
String
getTagUser
()
{
return
tagUser
;
}
public
void
setTagUser
(
String
tagUser
)
{
this
.
tagUser
=
tagUser
;
}
}
src/main/java/com/keymobile/tagmanager/model/authService/Org.java
0 → 100644
View file @
10ed975e
package
com
.
keymobile
.
tagmanager
.
model
.
authService
;
/**
* author:zhangkb time:2020-1-6 desc:定义用于接收结构信息实体
*/
public
class
Org
{
private
Long
id
;
private
String
fullName
;
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
public
Long
getId
()
{
return
id
;
}
public
String
getFullName
()
{
return
fullName
;
}
public
void
setFullName
(
String
fullName
)
{
this
.
fullName
=
fullName
;
}
}
src/main/java/com/keymobile/tagmanager/remote/AuthServiceClient.java
0 → 100644
View file @
10ed975e
package
com
.
keymobile
.
tagmanager
.
remote
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
com.keymobile.tagmanager.model.authService.Org
;
@FeignClient
(
name
=
"authService"
)
public
interface
AuthServiceClient
{
@GetMapping
(
value
=
"/orgs/{orgId}"
)
public
Org
getOrgs
(
@PathVariable
(
"orgId"
)
String
orgId
);
@GetMapping
(
value
=
"/orgs/findByFullName"
)
public
Org
findByFullName
(
@RequestParam
(
"orgFullName"
)
String
orgFullName
);
}
src/main/java/com/keymobile/tagmanager/service/TagFileService.java
View file @
10ed975e
package
com
.
keymobile
.
tagmanager
.
service
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.UUID
;
import
java.util.stream.Collectors
;
import
javax.servlet.http.HttpServletResponse
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.domain.Sort.Direction
;
import
org.springframework.data.domain.Sort.Order
;
import
org.springframework.data.mongodb.core.MongoOperations
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.multipart.MultipartFile
;
import
com.keymobile.tagmanager.model.ImportLog
;
import
com.keymobile.tagmanager.model.Page
;
import
com.keymobile.tagmanager.model.SysTag
;
import
com.keymobile.tagmanager.model.Tag
;
import
com.keymobile.tagmanager.persistence.TagRepository
;
import
com.keymobile.tagmanager.util.Constants
;
import
com.keymobile.tagmanager.util.DateUtils
;
import
com.keymobile.tagmanager.util.ExcelUtils
;
import
cn.afterturn.easypoi.excel.ExcelImportUtil
;
import
cn.afterturn.easypoi.excel.entity.ImportParams
;
import
cn.afterturn.easypoi.excel.entity.result.ExcelImportResult
;
import
cn.afterturn.easypoi.excel.entity.result.ExcelVerifyHandlerResult
;
import
cn.afterturn.easypoi.handler.inter.IExcelVerifyHandler
;
@Service
public
class
TagFileService
{
@Autowired
private
MongoOperations
mongoOperations
;
@Autowired
private
TagRepository
tagRepository
;
public
int
exportExcel
(
String
dept
,
HttpServletResponse
response
)
{
List
<
Tag
>
toExportTags
=
mongoOperations
.
find
(
Query
.
query
(
Criteria
.
where
(
"dept"
).
is
(
dept
)
.
and
(
"dimensionType"
).
is
(
Constants
.
TAG_DIMENSION_TRUE
)),
Tag
.
class
);
// 导出操作
ExcelUtils
.
exportExcel
(
toExportTags
,
null
,
"sheet1"
,
Tag
.
class
,
"标签.xlsx"
,
response
);
return
toExportTags
.
size
();
}
public
String
importExcel
(
String
userName
,
String
dept
,
MultipartFile
file
)
throws
Exception
{
ImportLog
importLog
=
new
ImportLog
(
UUID
.
randomUUID
().
toString
());
importLog
.
setCreator
(
userName
);
importLog
.
setDept
(
dept
);
mongoOperations
.
save
(
importLog
);
new
Thread
(
new
ExcelImportExecutor
(
userName
,
dept
,
file
,
importLog
)).
start
();
return
"ok"
;
}
public
String
importSystem
(
String
userName
,
MultipartFile
file
)
throws
Exception
{
ImportLog
importLog
=
new
ImportLog
(
UUID
.
randomUUID
().
toString
());
importLog
.
setType
(
Constants
.
SYS_TAG_LOG_TYPE
);
importLog
.
setCreator
(
userName
);
mongoOperations
.
save
(
importLog
);
new
Thread
(
new
SysExcelImportExecutor
(
userName
,
file
,
importLog
)).
start
();
return
"ok"
;
}
class
SysExcelVerifyHandler
implements
IExcelVerifyHandler
<
SysTag
>
{
private
Map
<
String
,
SysTag
>
codeSysTags
;
private
Map
<
String
,
SysTag
>
nameSysTags
;
public
SysExcelVerifyHandler
(
Map
<
String
,
SysTag
>
codeSysTags
,
Map
<
String
,
SysTag
>
nameSysTags
)
{
this
.
codeSysTags
=
codeSysTags
;
this
.
nameSysTags
=
nameSysTags
;
}
@Override
public
ExcelVerifyHandlerResult
verifyHandler
(
SysTag
t
)
{
ExcelVerifyHandlerResult
result
=
new
ExcelVerifyHandlerResult
(
true
);
if
(
codeSysTags
.
get
(
t
.
getSystemCode
())
!=
null
)
{
result
.
setSuccess
(
false
);
result
.
setMsg
(
String
.
format
(
"系统代码[%s]已经存在"
,
t
.
getSystemCode
()));
}
if
(
nameSysTags
.
get
(
t
.
getName
())
!=
null
)
{
result
.
setSuccess
(
false
);
result
.
setMsg
(
String
.
format
(
"名称[%s]已经存在"
,
t
.
getName
()));
}
return
result
;
}
}
class
SysExcelImportExecutor
implements
Runnable
{
private
MultipartFile
file
;
private
ImportLog
importLog
;
public
SysExcelImportExecutor
(
String
userName
,
MultipartFile
file
,
ImportLog
importLog
)
{
this
.
file
=
file
;
this
.
importLog
=
importLog
;
}
@Override
public
void
run
()
{
List
<
SysTag
>
tags
=
mongoOperations
.
findAll
(
SysTag
.
class
);
Map
<
String
,
SysTag
>
codeSysTags
=
tags
.
stream
().
collect
(
Collectors
.
toMap
(
SysTag:
:
getSystemCode
,
tag
->
tag
));
Map
<
String
,
SysTag
>
nameSysTags
=
tags
.
stream
().
collect
(
Collectors
.
toMap
(
SysTag:
:
getName
,
tag
->
tag
));
try
{
ImportParams
params
=
new
ImportParams
();
params
.
setTitleRows
(
0
);
params
.
setHeadRows
(
1
);
params
.
setNeedVerify
(
true
);
params
.
setVerifyHandler
(
new
SysExcelVerifyHandler
(
codeSysTags
,
nameSysTags
));
ExcelImportResult
<
SysTag
>
excelImportResult
=
ExcelImportUtil
.
importExcelMore
(
file
.
getInputStream
(),
SysTag
.
class
,
params
);
List
<
String
>
successIds
=
new
ArrayList
<>();
List
<
SysTag
>
sysTags
=
excelImportResult
.
getList
();
boolean
hasOtherFail
=
false
;
for
(
SysTag
t
:
sysTags
)
{
t
.
setId
(
UUID
.
randomUUID
().
toString
());
mongoOperations
.
save
(
t
);
successIds
.
add
(
t
.
getId
());
}
excelImportResult
.
getFailList
().
forEach
(
tag
->
{
importLog
.
appendErrorMsg
(
String
.
format
(
"第%s行, %s"
,
tag
.
getRowNum
()
+
params
.
getTitleRows
()
+
params
.
getReadRows
(),
tag
.
getErrorMsg
()));
});
importLog
.
setHasFailNum
(!
excelImportResult
.
getFailList
().
isEmpty
()
||
hasOtherFail
);
importLog
.
setTotalNum
(
excelImportResult
.
getList
().
size
()
+
excelImportResult
.
getFailList
().
size
());
importLog
.
setSuccessIds
(
successIds
);
importLog
.
setReport
(
importLog
.
generateReport
());
}
catch
(
Exception
e
)
{
importLog
.
appendErrorMsg
(
e
.
getCause
().
getMessage
());
}
finally
{
importLog
.
setEndTime
(
DateUtils
.
formatDate
(
new
Date
(),
"yyyy-MM-dd HH:mm:ss"
));
importLog
.
setHasFinish
(
true
);
mongoOperations
.
save
(
importLog
);
}
}
}
class
ExcelImportExecutor
implements
Runnable
{
private
String
dept
;
private
MultipartFile
file
;
private
ImportLog
importLog
;
private
String
userName
;
public
ExcelImportExecutor
(
String
userName
,
String
dept
,
MultipartFile
file
,
ImportLog
importLog
)
{
this
.
userName
=
userName
;
this
.
dept
=
dept
;
this
.
file
=
file
;
this
.
importLog
=
importLog
;
}
@Override
public
void
run
()
{
List
<
Tag
>
dimensionTags
=
mongoOperations
.
find
(
Query
.
query
(
Criteria
.
where
(
"dept"
).
is
(
dept
).
and
(
"dimensionType"
).
is
(
Constants
.
TAG_DIMENSION_TRUE
)),
Tag
.
class
);
Map
<
String
,
Tag
>
pathTags
=
dimensionTags
.
stream
().
collect
(
Collectors
.
toMap
(
Tag:
:
getPath
,
tag
->
tag
));
try
{
ImportParams
params
=
new
ImportParams
();
params
.
setTitleRows
(
0
);
params
.
setHeadRows
(
1
);
params
.
setNeedVerify
(
true
);
params
.
setVerifyHandler
(
new
ExcelVerifyHandler
(
pathTags
));
ExcelImportResult
<
Tag
>
excelImportResult
=
ExcelImportUtil
.
importExcelMore
(
file
.
getInputStream
(),
Tag
.
class
,
params
);
List
<
String
>
successIds
=
new
ArrayList
<>();
List
<
Tag
>
tags
=
excelImportResult
.
getList
();
tags
.
forEach
(
tag
->
{
tag
.
setId
(
UUID
.
randomUUID
().
toString
());
pathTags
.
put
(
tag
.
getPath
(),
tag
);
});
boolean
hasOtherFail
=
false
;
for
(
Tag
t
:
tags
)
{
String
parentIdPath
=
""
;
if
(
t
.
getPath
().
split
(
Constants
.
TAG_PATH_SEPARATOR
).
length
>
1
)
{
String
parentPath
=
t
.
getPath
().
substring
(
0
,
t
.
getPath
().
lastIndexOf
(
Constants
.
TAG_PATH_SEPARATOR
));
if
(
pathTags
.
get
(
parentPath
)
==
null
)
{
importLog
.
appendErrorMsg
(
String
.
format
(
"第%s行, 路径为[%s]的标签找不到父节点"
,
t
.
getRowNum
(),
t
.
getPath
()));
hasOtherFail
=
true
;
continue
;
}
else
{
//主题域,HSE,物资
String
[]
ts
=
parentPath
.
split
(
Constants
.
TAG_PATH_SEPARATOR
);
List
<
String
>
parentIdList
=
new
LinkedList
<>();
List
<
String
>
path
=
new
LinkedList
<>();
for
(
int
a
=
0
;
a
<
ts
.
length
;
a
++)
{
path
.
add
(
ts
[
a
]);
parentIdList
.
add
(
pathTags
.
get
(
String
.
join
(
Constants
.
TAG_PATH_SEPARATOR
,
path
)).
getId
());
}
parentIdPath
=
String
.
join
(
Constants
.
TAG_PATH_SEPARATOR
,
parentIdList
);
}
}
t
.
setIdPath
(
parentIdPath
+
Constants
.
TAG_PATH_SEPARATOR
+
t
.
getId
());
t
.
setLevel
(
t
.
getPath
().
split
(
","
).
length
);
t
.
setCreator
(
userName
);
t
.
setDept
(
dept
);
t
.
setDimensionType
(
Constants
.
TAG_DIMENSION_TRUE
);
t
.
setCreateDate
(
DateUtils
.
formatDate
(
new
Date
(),
"yyyy-MM-dd"
));
t
.
setImportId
(
importLog
.
getId
());
t
=
tagRepository
.
save
(
t
);
successIds
.
add
(
t
.
getId
());
}
excelImportResult
.
getFailList
().
forEach
(
tag
->
{
importLog
.
appendErrorMsg
(
String
.
format
(
"第%s行, %s"
,
tag
.
getRowNum
()
+
params
.
getTitleRows
()
+
params
.
getReadRows
(),
tag
.
getErrorMsg
()));
});
importLog
.
setHasFailNum
(!
excelImportResult
.
getFailList
().
isEmpty
()
||
hasOtherFail
);
importLog
.
setTotalNum
(
excelImportResult
.
getList
().
size
()
+
excelImportResult
.
getFailList
().
size
());
importLog
.
setSuccessIds
(
successIds
);
importLog
.
setReport
(
importLog
.
generateReport
());
}
catch
(
Exception
e
)
{
importLog
.
appendErrorMsg
(
e
.
getCause
().
getMessage
());
}
finally
{
importLog
.
setEndTime
(
DateUtils
.
formatDate
(
new
Date
(),
"yyyy-MM-dd HH:mm:ss"
));
importLog
.
setHasFinish
(
true
);
mongoOperations
.
save
(
importLog
);
}
}
}
class
ExcelVerifyHandler
implements
IExcelVerifyHandler
<
Tag
>
{
private
Map
<
String
,
Tag
>
tags
;
public
ExcelVerifyHandler
(
Map
<
String
,
Tag
>
tags
)
{
this
.
tags
=
tags
;
}
@Override
public
ExcelVerifyHandlerResult
verifyHandler
(
Tag
t
)
{
ExcelVerifyHandlerResult
result
=
new
ExcelVerifyHandlerResult
(
true
);
if
(!
Constants
.
TAG_SYSTEM_TYPE
.
equals
(
t
.
getTagType
())
&&
!
Constants
.
TAG_PERSONAL_TYPE
.
equals
(
t
.
getTagType
()))
{
result
.
setSuccess
(
false
);
result
.
setMsg
(
String
.
format
(
"标签类型错误,不能为[%s]"
,
t
.
getTagType
()));
}
if
(
tags
.
get
(
t
.
getPath
())
!=
null
&&
tags
.
get
(
t
.
getPath
()).
getTagType
().
equals
(
t
.
getTagType
()))
{
result
.
setSuccess
(
false
);
result
.
setMsg
(
String
.
format
(
"标签类型为[%s], 路径为[%s]的标签已经存在"
,
Constants
.
TAG_PERSONAL_TYPE
.
equals
(
t
.
getTagType
())
?
"个人标签"
:
"系统标签"
,
t
.
getPath
()));
}
if
(!
t
.
getPath
().
endsWith
(
t
.
getName
()))
{
result
.
setSuccess
(
false
);
result
.
setMsg
(
String
.
format
(
"名称和路径不匹配,名称为[%s],路径为[%s]"
,
t
.
getName
(),
t
.
getPath
()));
}
return
result
;
}
}
public
Page
listImportlogByPage
(
String
dept
,
Page
page
)
{
Query
q
=
createImportlogPageQuery
(
dept
,
page
);
List
<
ImportLog
>
logs
=
mongoOperations
.
find
(
q
,
ImportLog
.
class
);
long
count
=
mongoOperations
.
count
(
q
,
ImportLog
.
class
);
page
.
setData
(
logs
);
page
.
setTotal
(
count
);
return
page
;
}
private
Query
createImportlogPageQuery
(
String
dept
,
Page
page
)
{
Query
q
=
new
Query
();
q
.
addCriteria
(
Criteria
.
where
(
"type"
).
is
(
Constants
.
COMMON_TAG_LOG_TYPE
));
q
.
addCriteria
(
Criteria
.
where
(
"dept"
).
is
(
dept
));
q
.
skip
(
page
.
getOffset
());
q
.
limit
(
page
.
getPageSize
());
q
.
with
(
Sort
.
by
(
Arrays
.
asList
(
new
Order
(
Direction
.
DESC
,
"startTime"
))));
return
q
;
}
public
void
undoImportExcel
(
String
importlogId
)
{
mongoOperations
.
remove
(
Query
.
query
(
Criteria
.
where
(
"importId"
).
is
(
importlogId
)),
Tag
.
class
);
}
}
package
com
.
keymobile
.
tagmanager
.
service
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.UUID
;
import
java.util.stream.Collectors
;
import
javax.servlet.http.HttpServletResponse
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.domain.Sort.Direction
;
import
org.springframework.data.domain.Sort.Order
;
import
org.springframework.data.mongodb.core.MongoOperations
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.multipart.MultipartFile
;
import
com.keymobile.tagmanager.model.ImportLog
;
import
com.keymobile.tagmanager.model.Page
;
import
com.keymobile.tagmanager.model.SysTag
;
import
com.keymobile.tagmanager.model.Tag
;
import
com.keymobile.tagmanager.persistence.TagRepository
;
import
com.keymobile.tagmanager.util.Constants
;
import
com.keymobile.tagmanager.util.DateUtils
;
import
com.keymobile.tagmanager.util.ExcelUtils
;
import
cn.afterturn.easypoi.excel.ExcelImportUtil
;
import
cn.afterturn.easypoi.excel.entity.ImportParams
;
import
cn.afterturn.easypoi.excel.entity.result.ExcelImportResult
;
import
cn.afterturn.easypoi.excel.entity.result.ExcelVerifyHandlerResult
;
import
cn.afterturn.easypoi.handler.inter.IExcelVerifyHandler
;
@Service
public
class
TagFileService
{
@Autowired
private
MongoOperations
mongoOperations
;
@Autowired
private
TagRepository
tagRepository
;
public
int
exportExcel
(
String
dept
,
HttpServletResponse
response
)
{
List
<
Tag
>
toExportTags
=
mongoOperations
.
find
(
Query
.
query
(
Criteria
.
where
(
"dept"
).
is
(
dept
)
.
and
(
"dimensionType"
).
is
(
Constants
.
TAG_DIMENSION_TRUE
)),
Tag
.
class
);
// 导出操作
ExcelUtils
.
exportExcel
(
toExportTags
,
null
,
"sheet1"
,
Tag
.
class
,
"标签.xlsx"
,
response
);
return
toExportTags
.
size
();
}
public
String
importExcel
(
String
userName
,
String
userId
,
String
dept
,
MultipartFile
file
)
throws
Exception
{
ImportLog
importLog
=
new
ImportLog
(
UUID
.
randomUUID
().
toString
());
importLog
.
setCreator
(
userName
);
importLog
.
setDept
(
dept
);
mongoOperations
.
save
(
importLog
);
new
Thread
(
new
ExcelImportExecutor
(
userName
,
userId
,
dept
,
file
,
importLog
)).
start
();
return
"ok"
;
}
public
String
importSystem
(
String
userName
,
MultipartFile
file
)
throws
Exception
{
ImportLog
importLog
=
new
ImportLog
(
UUID
.
randomUUID
().
toString
());
importLog
.
setType
(
Constants
.
SYS_TAG_LOG_TYPE
);
importLog
.
setCreator
(
userName
);
mongoOperations
.
save
(
importLog
);
new
Thread
(
new
SysExcelImportExecutor
(
userName
,
file
,
importLog
)).
start
();
return
"ok"
;
}
class
SysExcelVerifyHandler
implements
IExcelVerifyHandler
<
SysTag
>
{
private
Map
<
String
,
SysTag
>
codeSysTags
;
private
Map
<
String
,
SysTag
>
nameSysTags
;
public
SysExcelVerifyHandler
(
Map
<
String
,
SysTag
>
codeSysTags
,
Map
<
String
,
SysTag
>
nameSysTags
)
{
this
.
codeSysTags
=
codeSysTags
;
this
.
nameSysTags
=
nameSysTags
;
}
@Override
public
ExcelVerifyHandlerResult
verifyHandler
(
SysTag
t
)
{
ExcelVerifyHandlerResult
result
=
new
ExcelVerifyHandlerResult
(
true
);
if
(
codeSysTags
.
get
(
t
.
getSystemCode
())
!=
null
)
{
result
.
setSuccess
(
false
);
result
.
setMsg
(
String
.
format
(
"系统代码[%s]已经存在"
,
t
.
getSystemCode
()));
}
if
(
nameSysTags
.
get
(
t
.
getName
())
!=
null
)
{
result
.
setSuccess
(
false
);
result
.
setMsg
(
String
.
format
(
"名称[%s]已经存在"
,
t
.
getName
()));
}
return
result
;
}
}
class
SysExcelImportExecutor
implements
Runnable
{
private
MultipartFile
file
;
private
ImportLog
importLog
;
public
SysExcelImportExecutor
(
String
userName
,
MultipartFile
file
,
ImportLog
importLog
)
{
this
.
file
=
file
;
this
.
importLog
=
importLog
;
}
@Override
public
void
run
()
{
List
<
SysTag
>
tags
=
mongoOperations
.
findAll
(
SysTag
.
class
);
Map
<
String
,
SysTag
>
codeSysTags
=
tags
.
stream
().
collect
(
Collectors
.
toMap
(
SysTag:
:
getSystemCode
,
tag
->
tag
));
Map
<
String
,
SysTag
>
nameSysTags
=
tags
.
stream
().
collect
(
Collectors
.
toMap
(
SysTag:
:
getName
,
tag
->
tag
));
try
{
ImportParams
params
=
new
ImportParams
();
params
.
setTitleRows
(
0
);
params
.
setHeadRows
(
1
);
params
.
setNeedVerify
(
true
);
params
.
setVerifyHandler
(
new
SysExcelVerifyHandler
(
codeSysTags
,
nameSysTags
));
ExcelImportResult
<
SysTag
>
excelImportResult
=
ExcelImportUtil
.
importExcelMore
(
file
.
getInputStream
(),
SysTag
.
class
,
params
);
List
<
String
>
successIds
=
new
ArrayList
<>();
List
<
SysTag
>
sysTags
=
excelImportResult
.
getList
();
boolean
hasOtherFail
=
false
;
for
(
SysTag
t
:
sysTags
)
{
t
.
setId
(
UUID
.
randomUUID
().
toString
());
mongoOperations
.
save
(
t
);
successIds
.
add
(
t
.
getId
());
}
excelImportResult
.
getFailList
().
forEach
(
tag
->
{
importLog
.
appendErrorMsg
(
String
.
format
(
"第%s行, %s"
,
tag
.
getRowNum
()
+
params
.
getTitleRows
()
+
params
.
getReadRows
(),
tag
.
getErrorMsg
()));
});
importLog
.
setHasFailNum
(!
excelImportResult
.
getFailList
().
isEmpty
()
||
hasOtherFail
);
importLog
.
setTotalNum
(
excelImportResult
.
getList
().
size
()
+
excelImportResult
.
getFailList
().
size
());
importLog
.
setSuccessIds
(
successIds
);
importLog
.
setReport
(
importLog
.
generateReport
());
}
catch
(
Exception
e
)
{
importLog
.
appendErrorMsg
(
e
.
getCause
().
getMessage
());
}
finally
{
importLog
.
setEndTime
(
DateUtils
.
formatDate
(
new
Date
(),
"yyyy-MM-dd HH:mm:ss"
));
importLog
.
setHasFinish
(
true
);
mongoOperations
.
save
(
importLog
);
}
}
}
class
ExcelImportExecutor
implements
Runnable
{
private
String
dept
;
private
MultipartFile
file
;
private
ImportLog
importLog
;
private
String
userName
;
private
String
userId
;
public
ExcelImportExecutor
(
String
userName
,
String
userId
,
String
dept
,
MultipartFile
file
,
ImportLog
importLog
)
{
this
.
userName
=
userName
;
this
.
userId
=
userId
;
this
.
dept
=
dept
;
this
.
file
=
file
;
this
.
importLog
=
importLog
;
}
@Override
public
void
run
()
{
List
<
Tag
>
dimensionTags
=
mongoOperations
.
find
(
Query
.
query
(
Criteria
.
where
(
"dept"
).
is
(
dept
).
and
(
"dimensionType"
).
is
(
Constants
.
TAG_DIMENSION_TRUE
)),
Tag
.
class
);
Map
<
String
,
Tag
>
pathTags
=
dimensionTags
.
stream
().
collect
(
Collectors
.
toMap
(
Tag:
:
getPath
,
tag
->
tag
));
try
{
ImportParams
params
=
new
ImportParams
();
params
.
setTitleRows
(
0
);
params
.
setHeadRows
(
1
);
params
.
setNeedVerify
(
true
);
params
.
setVerifyHandler
(
new
ExcelVerifyHandler
(
pathTags
));
ExcelImportResult
<
Tag
>
excelImportResult
=
ExcelImportUtil
.
importExcelMore
(
file
.
getInputStream
(),
Tag
.
class
,
params
);
List
<
String
>
successIds
=
new
ArrayList
<>();
List
<
Tag
>
tags
=
excelImportResult
.
getList
();
tags
.
forEach
(
tag
->
{
tag
.
setId
(
UUID
.
randomUUID
().
toString
());
pathTags
.
put
(
tag
.
getPath
(),
tag
);
});
boolean
hasOtherFail
=
false
;
for
(
Tag
t
:
tags
)
{
String
parentIdPath
=
""
;
if
(
t
.
getPath
().
split
(
Constants
.
TAG_PATH_SEPARATOR
).
length
>
1
)
{
String
parentPath
=
t
.
getPath
().
substring
(
0
,
t
.
getPath
().
lastIndexOf
(
Constants
.
TAG_PATH_SEPARATOR
));
if
(
pathTags
.
get
(
parentPath
)
==
null
)
{
importLog
.
appendErrorMsg
(
String
.
format
(
"第%s行, 路径为[%s]的标签找不到父节点"
,
t
.
getRowNum
(),
t
.
getPath
()));
hasOtherFail
=
true
;
continue
;
}
else
{
//主题域,HSE,物资
String
[]
ts
=
parentPath
.
split
(
Constants
.
TAG_PATH_SEPARATOR
);
List
<
String
>
parentIdList
=
new
LinkedList
<>();
List
<
String
>
path
=
new
LinkedList
<>();
for
(
int
a
=
0
;
a
<
ts
.
length
;
a
++)
{
path
.
add
(
ts
[
a
]);
parentIdList
.
add
(
pathTags
.
get
(
String
.
join
(
Constants
.
TAG_PATH_SEPARATOR
,
path
)).
getId
());
}
parentIdPath
=
String
.
join
(
Constants
.
TAG_PATH_SEPARATOR
,
parentIdList
);
}
}
t
.
setIdPath
(
parentIdPath
+
Constants
.
TAG_PATH_SEPARATOR
+
t
.
getId
());
t
.
setLevel
(
t
.
getPath
().
split
(
","
).
length
);
t
.
setCreator
(
userName
);
t
.
setTagUser
(
userId
);
t
.
setDept
(
dept
);
t
.
setDimensionType
(
Constants
.
TAG_DIMENSION_TRUE
);
t
.
setCreateDate
(
DateUtils
.
formatDate
(
new
Date
(),
"yyyy-MM-dd"
));
t
.
setImportId
(
importLog
.
getId
());
t
=
tagRepository
.
save
(
t
);
successIds
.
add
(
t
.
getId
());
}
excelImportResult
.
getFailList
().
forEach
(
tag
->
{
importLog
.
appendErrorMsg
(
String
.
format
(
"第%s行, %s"
,
tag
.
getRowNum
()
+
params
.
getTitleRows
()
+
params
.
getReadRows
(),
tag
.
getErrorMsg
()));
});
importLog
.
setHasFailNum
(!
excelImportResult
.
getFailList
().
isEmpty
()
||
hasOtherFail
);
importLog
.
setTotalNum
(
excelImportResult
.
getList
().
size
()
+
excelImportResult
.
getFailList
().
size
());
importLog
.
setSuccessIds
(
successIds
);
importLog
.
setReport
(
importLog
.
generateReport
());
}
catch
(
Exception
e
)
{
importLog
.
appendErrorMsg
(
e
.
getCause
().
getMessage
());
}
finally
{
importLog
.
setEndTime
(
DateUtils
.
formatDate
(
new
Date
(),
"yyyy-MM-dd HH:mm:ss"
));
importLog
.
setHasFinish
(
true
);
mongoOperations
.
save
(
importLog
);
}
}
}
class
ExcelVerifyHandler
implements
IExcelVerifyHandler
<
Tag
>
{
private
Map
<
String
,
Tag
>
tags
;
public
ExcelVerifyHandler
(
Map
<
String
,
Tag
>
tags
)
{
this
.
tags
=
tags
;
}
@Override
public
ExcelVerifyHandlerResult
verifyHandler
(
Tag
t
)
{
ExcelVerifyHandlerResult
result
=
new
ExcelVerifyHandlerResult
(
true
);
if
(!
Constants
.
TAG_SYSTEM_TYPE
.
equals
(
t
.
getTagType
())
&&
!
Constants
.
TAG_PERSONAL_TYPE
.
equals
(
t
.
getTagType
()))
{
result
.
setSuccess
(
false
);
result
.
setMsg
(
String
.
format
(
"标签类型错误,不能为[%s]"
,
t
.
getTagType
()));
}
if
(
tags
.
get
(
t
.
getPath
())
!=
null
&&
tags
.
get
(
t
.
getPath
()).
getTagType
().
equals
(
t
.
getTagType
()))
{
result
.
setSuccess
(
false
);
result
.
setMsg
(
String
.
format
(
"标签类型为[%s], 路径为[%s]的标签已经存在"
,
Constants
.
TAG_PERSONAL_TYPE
.
equals
(
t
.
getTagType
())
?
"个人标签"
:
"系统标签"
,
t
.
getPath
()));
}
if
(!
t
.
getPath
().
endsWith
(
t
.
getName
()))
{
result
.
setSuccess
(
false
);
result
.
setMsg
(
String
.
format
(
"名称和路径不匹配,名称为[%s],路径为[%s]"
,
t
.
getName
(),
t
.
getPath
()));
}
return
result
;
}
}
public
Page
listImportlogByPage
(
String
dept
,
Page
page
)
{
Query
q
=
createImportlogPageQuery
(
dept
,
page
);
List
<
ImportLog
>
logs
=
mongoOperations
.
find
(
q
,
ImportLog
.
class
);
long
count
=
mongoOperations
.
count
(
q
,
ImportLog
.
class
);
page
.
setData
(
logs
);
page
.
setTotal
(
count
);
return
page
;
}
private
Query
createImportlogPageQuery
(
String
dept
,
Page
page
)
{
Query
q
=
new
Query
();
q
.
addCriteria
(
Criteria
.
where
(
"type"
).
is
(
Constants
.
COMMON_TAG_LOG_TYPE
));
q
.
addCriteria
(
Criteria
.
where
(
"dept"
).
is
(
dept
));
q
.
skip
(
page
.
getOffset
());
q
.
limit
(
page
.
getPageSize
());
q
.
with
(
Sort
.
by
(
Arrays
.
asList
(
new
Order
(
Direction
.
DESC
,
"startTime"
))));
return
q
;
}
public
void
undoImportExcel
(
String
importlogId
)
{
mongoOperations
.
remove
(
Query
.
query
(
Criteria
.
where
(
"importId"
).
is
(
importlogId
)),
Tag
.
class
);
}
}
src/main/java/com/keymobile/tagmanager/service/TagService.java
View file @
10ed975e
package
com
.
keymobile
.
tagmanager
.
service
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.UUID
;
import
java.util.stream.Collectors
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.domain.Sort.Direction
;
import
org.springframework.data.domain.Sort.Order
;
import
org.springframework.data.mongodb.core.MongoOperations
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Service
;
import
com.keymobile.tagmanager.exception.TagDuplicateException
;
import
com.keymobile.tagmanager.exception.TagException
;
import
com.keymobile.tagmanager.exception.TagNotExistException
;
import
com.keymobile.tagmanager.model.ExtTag
;
import
com.keymobile.tagmanager.model.Page
;
import
com.keymobile.tagmanager.model.SysTag
;
import
com.keymobile.tagmanager.model.Tag
;
import
com.keymobile.tagmanager.persistence.TagRepository
;
import
com.keymobile.tagmanager.util.Constants
;
import
com.keymobile.tagmanager.util.JsonTreeHelper
;
import
com.keymobile.tagmanager.util.JsonTreeHelper.JsonNode
;
@Service
public
class
TagService
{
@Autowired
private
MongoOperations
mongoOperations
;
@Autowired
private
TagRepository
tagRepository
;
private
Logger
logger
=
LoggerFactory
.
getLogger
(
TagService
.
class
);
public
Tag
addOrUpdateTag
(
String
parentId
,
Tag
tag
,
String
userName
)
throws
TagNotExistException
,
TagDuplicateException
,
TagException
{
String
originId
=
tag
.
getId
();
if
(
StringUtils
.
isNotBlank
(
parentId
))
{
Tag
parent
=
getTagById
(
parentId
);
String
parentIdPath
=
parent
.
getIdPath
();
String
tagId
=
StringUtils
.
isNotBlank
(
originId
)
?
originId
:
UUID
.
randomUUID
().
toString
();
tag
.
setId
(
tagId
);
tag
.
setIdPath
(
parentIdPath
+
Constants
.
TAG_PATH_SEPARATOR
+
tagId
);
tag
.
setPath
(
parent
.
getPath
()
+
Constants
.
TAG_PATH_SEPARATOR
+
tag
.
getName
());
}
else
{
tag
.
setPath
(
tag
.
getName
());
String
tagId
=
StringUtils
.
isNotBlank
(
originId
)
?
originId
:
UUID
.
randomUUID
().
toString
();
tag
.
setId
(
tagId
);
tag
.
setIdPath
(
tagId
);
}
changeNameToAvoidConflict
(
tag
,
userName
);
checkTagValid
(
tag
,
userName
);
if
(
StringUtils
.
isNotBlank
(
originId
))
{
//update
Tag
origin
=
mongoOperations
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"_id"
).
is
(
tag
.
getId
())),
Tag
.
class
);
List
<
Tag
>
relationNamepathTags
=
mongoOperations
.
find
(
Query
.
query
(
createRelationNamepathCriteria
(
userName
,
origin
)),
Tag
.
class
);
relationNamepathTags
.
forEach
(
p
->
{
p
.
setIdPath
(
p
.
getIdPath
().
replaceAll
(
origin
.
getIdPath
(),
tag
.
getIdPath
()));
p
.
setPath
(
p
.
getPath
().
replaceAll
(
origin
.
getPath
(),
tag
.
getPath
()));
p
.
setLevel
(
p
.
getPath
().
split
(
","
).
length
);
});
tagRepository
.
saveAll
(
relationNamepathTags
);
}
tag
.
setLevel
(
tag
.
getPath
().
split
(
","
).
length
);
return
tagRepository
.
save
(
tag
);
}
private
void
changeNameToAvoidConflict
(
Tag
tag
,
String
userName
)
{
Tag
t
=
mongoOperations
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"path"
).
is
(
tag
.
getPath
())
.
and
(
"dept"
).
is
(
tag
.
getDept
())
.
and
(
"creator"
).
ne
(
userName
)),
Tag
.
class
);
if
(
t
!=
null
)
{
String
changeName
=
String
.
format
(
"%s(%s)"
,
t
.
getName
(),
userName
);
logger
.
info
(
String
.
format
(
"other creator has create same name in target, change tagName to %s"
,
changeName
));
tag
.
setName
(
changeName
);
tag
.
setPath
(
t
.
getPath
().
substring
(
0
,
t
.
getPath
().
lastIndexOf
(
Constants
.
TAG_PATH_SEPARATOR
))
+
t
.
getName
());
}
}
private
Criteria
createRelationNamepathCriteria
(
String
userName
,
Tag
origin
)
{
if
(
Constants
.
TAG_DIMENSION_TRUE
.
equals
(
origin
.
getDimensionType
()))
{
return
Criteria
.
where
(
"path"
).
regex
(
"^"
+
origin
.
getPath
()
+
Constants
.
TAG_PATH_SEPARATOR
).
and
(
"dept"
).
is
(
origin
.
getDept
());
}
return
Criteria
.
where
(
"path"
).
regex
(
"^"
+
origin
.
getPath
()
+
Constants
.
TAG_PATH_SEPARATOR
)
.
and
(
"creator"
).
is
(
userName
);
}
public
Tag
getTagById
(
String
tagId
)
throws
TagNotExistException
{
Tag
t
=
mongoOperations
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"_id"
).
is
(
tagId
)),
Tag
.
class
);
if
(
t
==
null
)
throw
new
TagNotExistException
(
"ID=["
+
tagId
+
"] tag not exist!"
);
return
t
;
}
private
void
checkTagValid
(
Tag
tag
,
String
userName
)
throws
TagDuplicateException
,
TagException
{
if
(!
Constants
.
TAG_PERSONAL_TYPE
.
equals
(
tag
.
getTagType
())
&&
!
Constants
.
TAG_SYSTEM_TYPE
.
equals
(
tag
.
getTagType
()))
{
throw
new
TagException
(
String
.
format
(
"No such tagType %s"
,
tag
.
getTagType
()));
}
Tag
t
=
mongoOperations
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"path"
).
is
(
tag
.
getPath
())
.
and
(
"creator"
).
is
(
userName
)),
Tag
.
class
);
if
(
t
!=
null
&&
!
t
.
getId
().
equals
(
tag
.
getId
()))
throw
new
TagDuplicateException
(
"标签 ["
+
tag
.
getName
()
+
"] 已经存在!"
);
}
public
JsonNode
[]
queryPersonalTagAsTree
(
String
parentId
,
String
userName
,
String
dept
)
throws
TagNotExistException
{
List
<
Tag
>
tags
=
new
ArrayList
<>();
if
(
StringUtils
.
isEmpty
(
parentId
))
{
tags
=
mongoOperations
.
find
(
createPersonalTagQuery
(
userName
,
dept
),
Tag
.
class
);
}
else
{
Tag
parentTag
=
getTagById
(
parentId
);
tags
=
getPersonSubTag
(
parentTag
,
userName
);
tags
.
forEach
(
tag
->
tag
.
setPath
(
tag
.
getPath
().
replaceAll
(
parentTag
.
getPath
(),
parentTag
.
getName
())));
}
List
<
JsonNode
>
nodes
=
new
ArrayList
<>();
tags
.
forEach
(
p
->
{
JsonNode
node
=
new
JsonNode
(
p
.
getPath
(),
p
.
getId
(),
p
.
getPath
(),
p
.
getIdPath
());
nodes
.
add
(
node
);
});
JsonNode
root
=
JsonTreeHelper
.
toJsonTree
(
nodes
,
Constants
.
TAG_PATH_SEPARATOR
);
if
(
root
.
children
!=
null
)
return
root
.
children
;
else
return
new
JsonNode
[]
{};
}
private
Query
createPersonalTagQuery
(
String
userName
,
String
dept
,
Criteria
...
serachCriterias
)
{
return
Query
.
query
(
createPersonalTagCriteria
(
userName
,
dept
,
null
))
.
with
(
Sort
.
by
(
getDefaultTagOrders
()));
}
private
Criteria
createPersonalTagCriteria
(
String
userName
,
String
dept
,
String
path
)
{
Criteria
criteria
=
Criteria
.
where
(
"tagType"
).
is
(
Constants
.
TAG_PERSONAL_TYPE
)
.
and
(
"dept"
).
is
(
dept
);
if
(
StringUtils
.
isNotBlank
(
path
))
{
criteria
=
criteria
.
and
(
"path"
).
regex
(
"^"
+
path
);;
}
return
criteria
.
orOperator
(
Criteria
.
where
(
"dimensionType"
).
is
(
Constants
.
TAG_DIMENSION_TRUE
),
Criteria
.
where
(
"isOpen"
).
is
(
Constants
.
TAG_OPEN_STATUS
),
Criteria
.
where
(
"creator"
).
is
(
userName
));
}
private
Criteria
createSystemTagCriteria
(
String
path
)
{
Criteria
criteria
=
Criteria
.
where
(
"tagType"
).
is
(
Constants
.
TAG_SYSTEM_TYPE
);
if
(
StringUtils
.
isNotBlank
(
path
))
{
return
criteria
.
and
(
"path"
).
regex
(
"^"
+
path
);
}
return
criteria
;
}
private
Criteria
createPersonalDimensionTagCriteria
(
String
userName
,
String
dept
)
{
return
Criteria
.
where
(
"tagType"
).
is
(
Constants
.
TAG_PERSONAL_TYPE
)
.
and
(
"dept"
).
is
(
dept
).
and
(
"dimensionType"
).
is
(
Constants
.
TAG_DIMENSION_TRUE
);
}
private
Query
createPersonalExcludeOpenTypeTagQuery
(
String
userName
,
String
dept
)
{
return
Query
.
query
(
Criteria
.
where
(
"tagType"
).
is
(
Constants
.
TAG_PERSONAL_TYPE
)
.
and
(
"dept"
).
is
(
dept
)
.
orOperator
(
Criteria
.
where
(
"dimensionType"
).
is
(
Constants
.
TAG_DIMENSION_TRUE
),
Criteria
.
where
(
"creator"
).
is
(
userName
)))
.
with
(
Sort
.
by
(
getDefaultTagOrders
()));
}
private
List
<
Order
>
getDefaultTagOrders
()
{
List
<
Order
>
orders
=
new
ArrayList
<>();
orders
.
add
(
new
Order
(
Direction
.
ASC
,
"level"
));
orders
.
add
(
new
Order
(
Direction
.
DESC
,
"order"
));
return
orders
;
}
public
List
<
Tag
>
getPersonSubTag
(
Tag
parentTag
,
String
userName
)
{
List
<
Tag
>
dirs
=
mongoOperations
.
find
(
new
Query
().
addCriteria
(
Criteria
.
where
(
"path"
)
.
regex
(
"^"
+
parentTag
.
getPath
()
+
Constants
.
TAG_PATH_SEPARATOR
)
.
and
(
"tagType"
).
is
(
Constants
.
TAG_PERSONAL_TYPE
)
.
orOperator
(
Criteria
.
where
(
"openStatus"
).
is
(
Constants
.
TAG_OPEN_STATUS
),
Criteria
.
where
(
"creator"
).
is
(
userName
)))
.
with
(
Sort
.
by
(
getDefaultTagOrders
())),
Tag
.
class
);
dirs
.
add
(
parentTag
);
return
dirs
;
}
public
Page
searchPersonalTagByPage
(
String
userName
,
String
dept
,
String
keyword
,
String
path
,
Integer
domain
,
Page
page
)
{
Criteria
andCriterias
=
createPersonalTagCriteria
(
userName
,
dept
,
path
);
if
(
StringUtils
.
isNotBlank
(
keyword
)
&&
!
"*"
.
equals
(
keyword
))
{
andCriterias
.
andOperator
(
createKeywordRegexQuery
(
Arrays
.
asList
(
"name"
,
"nameEn"
,
"desc"
),
keyword
));
}
Query
q
=
new
Query
(
andCriterias
);
q
.
skip
(
page
.
getOffset
());
q
.
limit
(
page
.
getPageSize
());
List
<
Tag
>
tags
=
mongoOperations
.
find
(
q
,
Tag
.
class
);
long
count
=
mongoOperations
.
count
(
q
,
Tag
.
class
);
page
.
setData
(
decoratorToExtTag
(
tags
,
userName
));
page
.
setTotal
(
count
);
return
page
;
}
private
Criteria
createKeywordRegexQuery
(
List
<
String
>
asList
,
String
keyword
)
{
Criteria
criteriaSearch
=
new
Criteria
();
return
criteriaSearch
.
orOperator
(
asList
.
stream
().
map
(
col
->
{
return
Criteria
.
where
(
col
).
regex
(
keyword
,
"i"
);
}).
collect
(
Collectors
.
toList
()).
toArray
(
new
Criteria
[
0
]));
}
private
Criteria
createPathRegexQuery
(
String
path
)
{
return
Criteria
.
where
(
"path"
).
regex
(
"^"
+
path
);
}
public
JsonNode
[]
querySystemTagAsTree
(
String
parentId
)
throws
TagNotExistException
{
List
<
Tag
>
tags
=
new
ArrayList
<>();
if
(
StringUtils
.
isEmpty
(
parentId
))
{
tags
=
mongoOperations
.
find
(
Query
.
query
(
Criteria
.
where
(
"tagType"
).
is
(
Constants
.
TAG_SYSTEM_TYPE
)).
with
(
Sort
.
by
(
getDefaultTagOrders
())),
Tag
.
class
);
}
else
{
Tag
parentTag
=
getTagById
(
parentId
);
tags
=
getSystemSubTag
(
parentTag
);
tags
.
forEach
(
tag
->
tag
.
setPath
(
tag
.
getPath
().
replaceAll
(
parentTag
.
getPath
(),
parentTag
.
getName
())));
}
List
<
JsonNode
>
nodes
=
new
ArrayList
<>();
tags
.
forEach
(
p
->
{
JsonNode
node
=
new
JsonNode
(
p
.
getPath
(),
p
.
getId
(),
p
.
getPath
(),
p
.
getIdPath
());
nodes
.
add
(
node
);
});
JsonNode
root
=
JsonTreeHelper
.
toJsonTree
(
nodes
,
Constants
.
TAG_PATH_SEPARATOR
);
if
(
root
.
children
!=
null
)
return
root
.
children
;
else
return
new
JsonNode
[]
{};
}
public
Page
searchSystemTagByPage
(
String
userName
,
String
keyword
,
String
path
,
Integer
domain
,
Page
page
)
{
Criteria
andCriterias
=
createSystemTagCriteria
(
path
);
if
(
StringUtils
.
isNotBlank
(
keyword
)
&&
!
"*"
.
equals
(
keyword
))
{
andCriterias
.
andOperator
(
createKeywordRegexQuery
(
Arrays
.
asList
(
"name"
,
"nameEn"
,
"desc"
),
keyword
));
}
Query
q
=
createPageQuery
(
page
,
andCriterias
);
List
<
Tag
>
tags
=
mongoOperations
.
find
(
q
,
Tag
.
class
);
long
count
=
mongoOperations
.
count
(
q
,
Tag
.
class
);
page
.
setData
(
decoratorToExtTag
(
tags
,
userName
));
page
.
setTotal
(
count
);
return
page
;
}
private
Query
createPageQuery
(
Page
page
,
Criteria
andCriterias
)
{
Query
q
=
new
Query
(
andCriterias
);
q
.
skip
(
page
.
getOffset
());
q
.
limit
(
page
.
getPageSize
());
q
.
with
(
Sort
.
by
(
getDefaultTagOrders
()));
return
q
;
}
private
List
<
ExtTag
>
decoratorToExtTag
(
List
<
Tag
>
tags
,
String
userName
)
{
return
tags
.
stream
().
map
(
t
->
{
return
new
ExtTag
(
t
,
t
.
getCreator
().
equals
(
userName
)
?
Constants
.
TAG_OPERABLE_TRUE
:
Constants
.
TAG_OPERABLE_FALSE
);
}).
collect
(
Collectors
.
toList
());
}
private
List
<
Tag
>
getSystemSubTag
(
Tag
parentTag
)
{
List
<
Tag
>
dirs
=
mongoOperations
.
find
(
new
Query
().
addCriteria
(
Criteria
.
where
(
"path"
)
.
regex
(
"^"
+
parentTag
.
getPath
()
+
Constants
.
TAG_PATH_SEPARATOR
)
.
and
(
"tagType"
).
is
(
Constants
.
TAG_SYSTEM_TYPE
))
.
with
(
Sort
.
by
(
getDefaultTagOrders
())),
Tag
.
class
);
dirs
.
add
(
parentTag
);
return
dirs
;
}
public
void
deleteTag
(
String
tagId
,
String
userName
)
throws
TagException
{
Optional
<
Tag
>
optional
=
tagRepository
.
findById
(
tagId
);
if
(
optional
.
isPresent
())
{
Tag
parentTag
=
optional
.
get
();
List
<
Tag
>
childs
=
mongoOperations
.
find
(
Query
.
query
(
createRelationNamepathCriteria
(
userName
,
parentTag
)),
Tag
.
class
);
if
(!
childs
.
isEmpty
())
{
throw
new
TagException
(
"存在子节点,不允许删除!"
);
}
tagRepository
.
deleteById
(
tagId
);
}
}
public
boolean
hasChild
(
String
tagId
,
String
userName
)
throws
TagException
{
Optional
<
Tag
>
optional
=
tagRepository
.
findById
(
tagId
);
if
(
optional
.
isPresent
())
{
Tag
parentTag
=
optional
.
get
();
List
<
Tag
>
childs
=
mongoOperations
.
find
(
Query
.
query
(
createRelationNamepathCriteria
(
userName
,
parentTag
)),
Tag
.
class
);
return
!
childs
.
isEmpty
();
}
return
false
;
}
public
void
shareTags
(
List
<
String
>
tagIds
)
{
Iterable
<
Tag
>
tags
=
tagRepository
.
findAllById
(
tagIds
);
tags
.
forEach
(
t
->
{
t
.
setIsOpen
(
Constants
.
TAG_OPEN_STATUS
);
});
tagRepository
.
saveAll
(
tags
);
}
public
JsonNode
[]
queryDimensionTagAsTree
(
String
dept
,
String
parentId
)
throws
TagNotExistException
{
List
<
Tag
>
tags
=
new
ArrayList
<>();
if
(
StringUtils
.
isEmpty
(
parentId
))
{
tags
=
mongoOperations
.
find
(
createDimensionTagQuery
(
dept
),
Tag
.
class
);
}
else
{
Tag
parentTag
=
getTagById
(
parentId
);
tags
=
getDimensionSubTag
(
parentTag
);
tags
.
forEach
(
tag
->
tag
.
setPath
(
tag
.
getPath
().
replaceAll
(
parentTag
.
getPath
(),
parentTag
.
getName
())));
}
List
<
JsonNode
>
nodes
=
new
ArrayList
<>();
tags
.
forEach
(
p
->
{
JsonNode
node
=
new
JsonNode
(
p
.
getPath
(),
p
.
getId
(),
p
.
getPath
(),
p
.
getIdPath
());
nodes
.
add
(
node
);
});
JsonNode
root
=
JsonTreeHelper
.
toJsonTree
(
nodes
,
Constants
.
TAG_PATH_SEPARATOR
);
if
(
root
.
children
!=
null
)
return
root
.
children
;
else
return
new
JsonNode
[]
{};
}
private
List
<
Tag
>
getDimensionSubTag
(
Tag
parentTag
)
{
List
<
Tag
>
dirs
=
mongoOperations
.
find
(
new
Query
().
addCriteria
(
Criteria
.
where
(
"path"
)
.
regex
(
"^"
+
parentTag
.
getPath
()
+
Constants
.
TAG_PATH_SEPARATOR
)
.
and
(
"dimensionType"
).
is
(
Constants
.
TAG_DIMENSION_TRUE
)
.
and
(
"dept"
).
is
(
parentTag
.
getDept
()))
.
with
(
Sort
.
by
(
getDefaultTagOrders
())),
Tag
.
class
);
dirs
.
add
(
parentTag
);
return
dirs
;
}
private
Query
createDimensionTagQuery
(
String
dept
)
{
return
Query
.
query
(
Criteria
.
where
(
"dimensionType"
).
is
(
Constants
.
TAG_DIMENSION_TRUE
)
.
and
(
"tagType"
).
is
(
Constants
.
TAG_PERSONAL_TYPE
)
.
and
(
"dept"
).
is
(
dept
))
.
with
(
Sort
.
by
(
getDefaultTagOrders
()));
}
public
JsonNode
[]
queryPersonalTagExcludeOpenTypeAsTree
(
String
parentId
,
String
userName
,
String
dept
)
throws
TagNotExistException
{
List
<
Tag
>
tags
=
new
ArrayList
<>();
if
(
StringUtils
.
isEmpty
(
parentId
))
{
tags
=
mongoOperations
.
find
(
createPersonalExcludeOpenTypeTagQuery
(
userName
,
dept
),
Tag
.
class
);
}
else
{
Tag
parentTag
=
getTagById
(
parentId
);
tags
=
getPersonSubTag
(
parentTag
,
userName
);
tags
.
forEach
(
tag
->
tag
.
setPath
(
tag
.
getPath
().
replaceAll
(
parentTag
.
getPath
(),
parentTag
.
getName
())));
}
List
<
JsonNode
>
nodes
=
new
ArrayList
<>();
tags
.
forEach
(
p
->
{
JsonNode
node
=
new
JsonNode
(
p
.
getPath
(),
p
.
getId
(),
p
.
getPath
(),
p
.
getIdPath
());
nodes
.
add
(
node
);
});
JsonNode
root
=
JsonTreeHelper
.
toJsonTree
(
nodes
,
Constants
.
TAG_PATH_SEPARATOR
);
if
(
root
.
children
!=
null
)
return
root
.
children
;
else
return
new
JsonNode
[]
{};
}
public
Page
searchPersonalDimensionTagByPage
(
String
userName
,
String
dept
,
String
keyword
,
String
path
,
Integer
domain
,
Page
page
)
{
Criteria
andCriterias
=
createPersonalDimensionTagCriteria
(
userName
,
dept
);
if
(
StringUtils
.
isNotBlank
(
keyword
)
&&
!
"*"
.
equals
(
keyword
))
{
andCriterias
.
andOperator
(
createKeywordRegexQuery
(
Arrays
.
asList
(
"name"
,
"nameEn"
,
"desc"
),
keyword
));
}
Query
q
=
createPageQuery
(
page
,
andCriterias
);
List
<
Tag
>
tags
=
mongoOperations
.
find
(
q
,
Tag
.
class
);
long
count
=
mongoOperations
.
count
(
q
,
Tag
.
class
);
page
.
setData
(
decoratorToExtTag
(
tags
,
userName
));
page
.
setTotal
(
count
);
return
page
;
}
public
List
<
SysTag
>
listSysTags
()
{
return
mongoOperations
.
findAll
(
SysTag
.
class
);
}
public
SysTag
getSystemByCode
(
String
code
)
{
return
mongoOperations
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"systemCode"
).
is
(
code
)),
SysTag
.
class
);
}
public
SysTag
updateSystemExtractInfo
(
String
code
,
boolean
hasExtract
,
int
tableNum
,
int
columnNum
)
throws
TagNotExistException
{
SysTag
sysTag
=
mongoOperations
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"systemCode"
).
is
(
code
)),
SysTag
.
class
);
if
(
sysTag
==
null
)
{
throw
new
TagNotExistException
(
String
.
format
(
"编码[为%s]的系统不存在"
,
code
));
}
sysTag
.
setHasExtract
(
hasExtract
);
sysTag
.
setTableNum
(
tableNum
);
sysTag
.
setColumnNum
(
columnNum
);
mongoOperations
.
save
(
sysTag
);
return
sysTag
;
}
}
package
com
.
keymobile
.
tagmanager
.
service
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.UUID
;
import
java.util.stream.Collectors
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.domain.Sort.Direction
;
import
org.springframework.data.domain.Sort.Order
;
import
org.springframework.data.mongodb.core.MongoOperations
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Service
;
import
com.keymobile.tagmanager.exception.TagDuplicateException
;
import
com.keymobile.tagmanager.exception.TagException
;
import
com.keymobile.tagmanager.exception.TagNotExistException
;
import
com.keymobile.tagmanager.model.ExtTag
;
import
com.keymobile.tagmanager.model.Page
;
import
com.keymobile.tagmanager.model.SysTag
;
import
com.keymobile.tagmanager.model.Tag
;
import
com.keymobile.tagmanager.model.authService.Org
;
import
com.keymobile.tagmanager.persistence.TagRepository
;
import
com.keymobile.tagmanager.remote.AuthServiceClient
;
import
com.keymobile.tagmanager.util.Constants
;
import
com.keymobile.tagmanager.util.JsonTreeHelper
;
import
com.keymobile.tagmanager.util.JsonTreeHelper.JsonNode
;
@Service
public
class
TagService
{
@Autowired
private
MongoOperations
mongoOperations
;
@Autowired
private
TagRepository
tagRepository
;
@Autowired
private
AuthServiceClient
authService
;
private
Logger
logger
=
LoggerFactory
.
getLogger
(
TagService
.
class
);
//新增或修改标签
public
Tag
addOrUpdateTag
(
String
parentId
,
Tag
tag
,
String
userName
)
throws
TagNotExistException
,
TagDuplicateException
,
TagException
{
//定义保存原来的id
String
originId
=
tag
.
getId
();
if
(
StringUtils
.
isNotBlank
(
parentId
))
{
//如果新增子节点
//根据父节点id获取对应的父标签
Tag
parentTag
=
getTagById
(
parentId
);
//设置新增标签的idpath和path
String
tagId
=
StringUtils
.
isNotBlank
(
originId
)
?
originId
:
UUID
.
randomUUID
().
toString
();
tag
.
setId
(
tagId
);
tag
.
setIdPath
(
parentTag
.
getIdPath
()
+
Constants
.
TAG_PATH_SEPARATOR
+
tagId
);
tag
.
setPath
(
parentTag
.
getPath
()
+
Constants
.
TAG_PATH_SEPARATOR
+
tag
.
getName
());
}
else
{
//如果是新增根目录
String
tagId
=
StringUtils
.
isNotBlank
(
originId
)
?
originId
:
UUID
.
randomUUID
().
toString
();
tag
.
setId
(
tagId
);
tag
.
setIdPath
(
tagId
);
tag
.
setPath
(
tag
.
getName
());
}
changeNameToAvoidConflict
(
tag
,
userName
);
checkTagValid
(
tag
,
userName
);
if
(
StringUtils
.
isNotBlank
(
originId
))
{
//update
Tag
origin
=
mongoOperations
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"_id"
).
is
(
tag
.
getId
())),
Tag
.
class
);
List
<
Tag
>
relationNamepathTags
=
mongoOperations
.
find
(
Query
.
query
(
createRelationNamepathCriteria
(
userName
,
origin
)),
Tag
.
class
);
relationNamepathTags
.
forEach
(
p
->
{
p
.
setIdPath
(
p
.
getIdPath
().
replaceAll
(
origin
.
getIdPath
(),
tag
.
getIdPath
()));
p
.
setPath
(
p
.
getPath
().
replaceAll
(
origin
.
getPath
(),
tag
.
getPath
()));
p
.
setLevel
(
p
.
getPath
().
split
(
","
).
length
);
});
tagRepository
.
saveAll
(
relationNamepathTags
);
}
tag
.
setLevel
(
tag
.
getPath
().
split
(
","
).
length
);
return
tagRepository
.
save
(
tag
);
}
//删除标签
public
void
deleteTag
(
String
tagId
,
String
userName
)
throws
TagException
{
Optional
<
Tag
>
optional
=
tagRepository
.
findById
(
tagId
);
if
(
optional
.
isPresent
())
{
Tag
parentTag
=
optional
.
get
();
List
<
Tag
>
childs
=
mongoOperations
.
find
(
Query
.
query
(
createRelationNamepathCriteria
(
userName
,
parentTag
)),
Tag
.
class
);
if
(!
childs
.
isEmpty
())
{
throw
new
TagException
(
"存在子节点,不允许删除!"
);
}
tagRepository
.
deleteById
(
tagId
);
}
}
//判断标签是否有子节点
public
boolean
hasChild
(
String
tagId
,
String
userName
)
throws
TagException
{
Optional
<
Tag
>
optional
=
tagRepository
.
findById
(
tagId
);
if
(
optional
.
isPresent
())
{
Tag
parentTag
=
optional
.
get
();
List
<
Tag
>
childs
=
mongoOperations
.
find
(
Query
.
query
(
createRelationNamepathCriteria
(
userName
,
parentTag
)),
Tag
.
class
);
return
!
childs
.
isEmpty
();
}
return
false
;
}
//根据标签id获取标签
public
Tag
getTagById
(
String
tagId
)
throws
TagNotExistException
{
Tag
t
=
mongoOperations
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"_id"
).
is
(
tagId
)),
Tag
.
class
);
if
(
t
==
null
)
throw
new
TagNotExistException
(
"ID=["
+
tagId
+
"] tag not exist!"
);
return
t
;
}
//获取维度标签树
public
JsonNode
[]
queryDimensionTagAsTree
(
String
dept
,
String
parentId
)
throws
TagNotExistException
{
List
<
Tag
>
tags
=
new
ArrayList
<>();
if
(
StringUtils
.
isEmpty
(
parentId
))
{
//从根节点开始获取
tags
=
mongoOperations
.
find
(
createDimensionTagQuery
(
dept
),
Tag
.
class
);
}
else
{
Tag
parentTag
=
getTagById
(
parentId
);
//获取父节点标签下的所有子标签
tags
=
getDimensionSubTag
(
parentTag
);
//tags.forEach(tag -> tag.setPath(tag.getPath().replaceAll(parentTag.getPath(), parentTag.getName())));
}
List
<
JsonNode
>
nodes
=
new
ArrayList
<>();
tags
.
forEach
(
p
->
{
JsonNode
node
=
new
JsonNode
(
p
.
getPath
(),
p
.
getId
(),
p
.
getPath
(),
p
.
getIdPath
());
nodes
.
add
(
node
);
});
//自定拼接成树结构
JsonNode
root
=
JsonTreeHelper
.
toJsonTree
(
nodes
,
Constants
.
TAG_PATH_SEPARATOR
);
if
(
root
.
children
!=
null
)
{
return
root
.
children
;
}
else
{
return
new
JsonNode
[]
{};
}
}
//获取个人标签树
public
JsonNode
[]
queryPersonalTagAsTree
(
String
parentId
,
String
userId
,
String
dept
)
throws
TagNotExistException
{
List
<
Tag
>
tags
=
new
ArrayList
<>();
//根据用户机构id获取机构信息
Org
org
=
authService
.
getOrgs
(
dept
);
if
(
org
==
null
)
{
throw
new
TagNotExistException
(
"get org by id error;"
);
}
//获取机构fullname
String
fullname
=
org
.
getFullName
();
//分隔fullname
String
[]
fullnames
=
fullname
.
split
(
","
);
//如果fullname没有两层结构
if
(
fullnames
.
length
<
2
)
{
throw
new
TagNotExistException
(
"get org by id the fullname:"
+
fullname
+
" at least 2 level;"
);
}
String
companyPath
=
fullnames
[
0
]+
Constants
.
TAG_PATH_SEPARATOR
+
fullnames
[
1
];
//根据companyPath获取机构信息
Org
companyOrg
=
authService
.
findByFullName
(
companyPath
);
if
(
companyOrg
==
null
)
{
throw
new
TagNotExistException
(
"get company org by fullname is null;"
);
}
String
companyOrgId
=
String
.
valueOf
(
companyOrg
.
getId
());
if
(
StringUtils
.
isEmpty
(
parentId
))
{
//从根目录开始查找
//
tags
=
mongoOperations
.
find
(
this
.
createNewPersonalTagQuery
(
userId
,
dept
,
companyOrgId
),
Tag
.
class
);
}
else
{
Tag
parentTag
=
getTagById
(
parentId
);
tags
=
this
.
getNewPersonSubTag
(
parentTag
,
userId
,
dept
,
companyOrgId
);
}
List
<
JsonNode
>
nodes
=
new
ArrayList
<>();
tags
.
forEach
(
p
->
{
JsonNode
node
=
new
JsonNode
(
p
.
getPath
(),
p
.
getId
(),
p
.
getPath
(),
p
.
getIdPath
());
nodes
.
add
(
node
);
});
JsonNode
root
=
JsonTreeHelper
.
toJsonTree
(
nodes
,
Constants
.
TAG_PATH_SEPARATOR
);
if
(
root
.
children
!=
null
)
{
return
root
.
children
;
}
else
{
return
new
JsonNode
[]
{};
}
}
//根据关键字查询维度标签数据
public
Page
searchPersonalDimensionTagByPage
(
String
userName
,
String
dept
,
String
keyword
,
String
path
,
Integer
domain
,
Page
page
)
{
Criteria
andCriterias
=
createPersonalDimensionTagCriteria
(
userName
,
dept
);
if
(
StringUtils
.
isNotBlank
(
keyword
)
&&
!
"*"
.
equals
(
keyword
))
{
andCriterias
.
andOperator
(
createKeywordRegexQuery
(
Arrays
.
asList
(
"name"
,
"nameEn"
,
"desc"
),
keyword
));
}
Query
q
=
createPageQuery
(
page
,
andCriterias
);
List
<
Tag
>
tags
=
mongoOperations
.
find
(
q
,
Tag
.
class
);
long
count
=
mongoOperations
.
count
(
q
,
Tag
.
class
);
page
.
setData
(
decoratorToExtTag
(
tags
,
userName
));
page
.
setTotal
(
count
);
return
page
;
}
//根据关键字查找系统标签
public
Page
searchSystemTagByPage
(
String
userName
,
String
keyword
,
String
path
,
Integer
domain
,
Page
page
)
{
Criteria
andCriterias
=
createSystemTagCriteria
(
path
);
if
(
StringUtils
.
isNotBlank
(
keyword
)
&&
!
"*"
.
equals
(
keyword
))
{
andCriterias
.
andOperator
(
createKeywordRegexQuery
(
Arrays
.
asList
(
"name"
,
"nameEn"
,
"desc"
),
keyword
));
}
Query
q
=
createPageQuery
(
page
,
andCriterias
);
List
<
Tag
>
tags
=
mongoOperations
.
find
(
q
,
Tag
.
class
);
long
count
=
mongoOperations
.
count
(
q
,
Tag
.
class
);
page
.
setData
(
decoratorToExtTag
(
tags
,
userName
));
page
.
setTotal
(
count
);
return
page
;
}
//根据关键字查找个人标签
public
Page
searchPersonalTagByPage
(
String
userName
,
String
dept
,
String
keyword
,
String
path
,
Integer
domain
,
Page
page
)
{
Criteria
andCriterias
=
createPersonalTagCriteria
(
userName
,
dept
,
path
);
if
(
StringUtils
.
isNotBlank
(
keyword
)
&&
!
"*"
.
equals
(
keyword
))
{
andCriterias
.
andOperator
(
createKeywordRegexQuery
(
Arrays
.
asList
(
"name"
,
"nameEn"
,
"desc"
),
keyword
));
}
Query
q
=
new
Query
(
andCriterias
);
q
.
skip
(
page
.
getOffset
());
q
.
limit
(
page
.
getPageSize
());
List
<
Tag
>
tags
=
mongoOperations
.
find
(
q
,
Tag
.
class
);
long
count
=
mongoOperations
.
count
(
q
,
Tag
.
class
);
page
.
setData
(
decoratorToExtTag
(
tags
,
userName
));
page
.
setTotal
(
count
);
return
page
;
}
//获取系统标签树
public
JsonNode
[]
querySystemTagAsTree
(
String
parentId
)
throws
TagNotExistException
{
List
<
Tag
>
tags
=
new
ArrayList
<>();
if
(
StringUtils
.
isEmpty
(
parentId
))
{
tags
=
mongoOperations
.
find
(
Query
.
query
(
Criteria
.
where
(
"tagType"
).
is
(
Constants
.
TAG_SYSTEM_TYPE
)).
with
(
Sort
.
by
(
getDefaultTagOrders
())),
Tag
.
class
);
}
else
{
Tag
parentTag
=
getTagById
(
parentId
);
tags
=
getSystemSubTag
(
parentTag
);
//tags.forEach(tag -> tag.setPath(tag.getPath().replaceAll(parentTag.getPath(), parentTag.getName())));
}
List
<
JsonNode
>
nodes
=
new
ArrayList
<>();
tags
.
forEach
(
p
->
{
JsonNode
node
=
new
JsonNode
(
p
.
getPath
(),
p
.
getId
(),
p
.
getPath
(),
p
.
getIdPath
());
nodes
.
add
(
node
);
});
JsonNode
root
=
JsonTreeHelper
.
toJsonTree
(
nodes
,
Constants
.
TAG_PATH_SEPARATOR
);
if
(
root
.
children
!=
null
)
return
root
.
children
;
else
return
new
JsonNode
[]
{};
}
//获取新增个人标签加载上级标签树接口
public
JsonNode
[]
queryPersonalTagExcludeOpenTypeAsTree
(
String
parentId
,
String
userName
,
String
dept
)
throws
TagNotExistException
{
List
<
Tag
>
tags
=
new
ArrayList
<>();
//根据普通用户机构id获取机构信息
Org
org
=
authService
.
getOrgs
(
dept
);
if
(
org
==
null
)
{
throw
new
TagNotExistException
(
"get org by id error;"
);
}
//获取机构fullname
String
fullname
=
org
.
getFullName
();
//分隔fullname
String
[]
fullnames
=
fullname
.
split
(
","
);
//如果fullname没有两层结构
if
(
fullnames
.
length
<
2
)
{
throw
new
TagNotExistException
(
"get org by id the fullname:"
+
fullname
+
" at least 2 level;"
);
}
String
companyPath
=
fullnames
[
0
]+
Constants
.
TAG_PATH_SEPARATOR
+
fullnames
[
1
];
//根据companyPath获取机构信息
Org
companyOrg
=
authService
.
findByFullName
(
companyPath
);
if
(
companyOrg
==
null
)
{
throw
new
TagNotExistException
(
"get company org by fullname is null;"
);
}
String
companyOrgId
=
String
.
valueOf
(
companyOrg
.
getId
());
if
(
StringUtils
.
isEmpty
(
parentId
))
{
tags
=
mongoOperations
.
find
(
createPersonalExcludeOpenTypeTagQuery
(
userName
,
companyOrgId
),
Tag
.
class
);
}
/**else {
Tag parentTag = getTagById(parentId);
tags = getPersonSubTag(parentTag, userName);
//tags.forEach(tag -> tag.setPath(tag.getPath().replaceAll(parentTag.getPath(), parentTag.getName())));
}*/
List
<
JsonNode
>
nodes
=
new
ArrayList
<>();
tags
.
forEach
(
p
->
{
JsonNode
node
=
new
JsonNode
(
p
.
getPath
(),
p
.
getId
(),
p
.
getPath
(),
p
.
getIdPath
());
nodes
.
add
(
node
);
});
JsonNode
root
=
JsonTreeHelper
.
toJsonTree
(
nodes
,
Constants
.
TAG_PATH_SEPARATOR
);
if
(
root
.
children
!=
null
)
{
return
root
.
children
;
}
else
{
return
new
JsonNode
[]
{};
}
}
//如果标签存在冲突,修改当前标签名字和路径
private
void
changeNameToAvoidConflict
(
Tag
tag
,
String
userName
)
{
Tag
t
=
mongoOperations
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"path"
).
is
(
tag
.
getPath
())
.
and
(
"dept"
).
is
(
tag
.
getDept
())
.
and
(
"creator"
).
ne
(
userName
)),
Tag
.
class
);
if
(
t
!=
null
)
{
String
changeName
=
String
.
format
(
"%s(%s)"
,
t
.
getName
(),
userName
);
logger
.
info
(
String
.
format
(
"other creator has create same name in target, change tagName to %s"
,
changeName
));
tag
.
setName
(
changeName
);
tag
.
setPath
(
t
.
getPath
().
substring
(
0
,
t
.
getPath
().
lastIndexOf
(
Constants
.
TAG_PATH_SEPARATOR
))
+
t
.
getName
());
}
}
//拼接path和username的查询条件
private
Criteria
createRelationNamepathCriteria
(
String
userName
,
Tag
origin
)
{
if
(
Constants
.
TAG_DIMENSION_TRUE
.
equals
(
origin
.
getDimensionType
()))
{
return
Criteria
.
where
(
"path"
).
regex
(
"^"
+
origin
.
getPath
()
+
Constants
.
TAG_PATH_SEPARATOR
).
and
(
"dept"
).
is
(
origin
.
getDept
());
}
return
Criteria
.
where
(
"path"
).
regex
(
"^"
+
origin
.
getPath
()
+
Constants
.
TAG_PATH_SEPARATOR
)
.
and
(
"creator"
).
is
(
userName
);
}
//判断标签是否已经存在
private
void
checkTagValid
(
Tag
tag
,
String
userName
)
throws
TagDuplicateException
,
TagException
{
if
(!
Constants
.
TAG_PERSONAL_TYPE
.
equals
(
tag
.
getTagType
())
&&
!
Constants
.
TAG_SYSTEM_TYPE
.
equals
(
tag
.
getTagType
()))
{
throw
new
TagException
(
String
.
format
(
"No such tagType %s"
,
tag
.
getTagType
()));
}
Tag
t
=
mongoOperations
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"path"
).
is
(
tag
.
getPath
())
.
and
(
"creator"
).
is
(
userName
)),
Tag
.
class
);
if
(
t
!=
null
&&
!
t
.
getId
().
equals
(
tag
.
getId
()))
throw
new
TagDuplicateException
(
"标签 ["
+
tag
.
getName
()
+
"] 已经存在!"
);
}
//拼接个人维度标签树查询条件
private
Query
createDimensionTagQuery
(
String
dept
)
{
return
Query
.
query
(
Criteria
.
where
(
"dimensionType"
).
is
(
Constants
.
TAG_DIMENSION_TRUE
)
.
and
(
"tagType"
).
is
(
Constants
.
TAG_PERSONAL_TYPE
)
.
and
(
"dept"
).
is
(
dept
))
.
with
(
Sort
.
by
(
getDefaultTagOrders
()));
}
//根据机构获取当前维度标签的所有子标签
private
List
<
Tag
>
getDimensionSubTag
(
Tag
parentTag
)
{
List
<
Tag
>
dirs
=
mongoOperations
.
find
(
new
Query
().
addCriteria
(
Criteria
.
where
(
"path"
)
.
regex
(
"^"
+
parentTag
.
getPath
()
+
Constants
.
TAG_PATH_SEPARATOR
)
.
and
(
"dimensionType"
).
is
(
Constants
.
TAG_DIMENSION_TRUE
)
.
and
(
"dept"
).
is
(
parentTag
.
getDept
()))
.
with
(
Sort
.
by
(
getDefaultTagOrders
())),
Tag
.
class
);
dirs
.
add
(
parentTag
);
return
dirs
;
}
//拼接默认配许条件
private
List
<
Order
>
getDefaultTagOrders
()
{
List
<
Order
>
orders
=
new
ArrayList
<>();
orders
.
add
(
new
Order
(
Direction
.
ASC
,
"level"
));
orders
.
add
(
new
Order
(
Direction
.
DESC
,
"order"
));
return
orders
;
}
//拼接查找个人标签条件
private
Query
createNewPersonalTagQuery
(
String
userId
,
String
deptId
,
String
companyId
)
{
Criteria
criteria
=
Criteria
.
where
(
"tagType"
).
is
(
"1"
);
//获取自定义标签
criteria
.
orOperator
(
Criteria
.
where
(
"dept"
).
is
(
companyId
),
//标签是维度管理员机构的
Criteria
.
where
(
"dept"
).
is
(
deptId
).
and
(
"tagUser"
).
is
(
userId
)
//标签是普通用户结构且普通用户名创建
/**,Criteria.where("path").regex("^"+companyPath + Constants.TAG_PATH_SEPARATOR)
.and("isOpen").is(Constants.TAG_OPEN_STATUS)*/
);
//标签是维度标签路径下的
return
Query
.
query
(
criteria
)
.
with
(
Sort
.
by
(
getDefaultTagOrders
()));
}
//根据父标签查找子标签
private
List
<
Tag
>
getNewPersonSubTag
(
Tag
parentTag
,
String
userId
,
String
deptId
,
String
companyId
)
{
List
<
Tag
>
dirs
=
mongoOperations
.
find
(
new
Query
().
addCriteria
(
Criteria
.
where
(
"path"
)
.
regex
(
"^"
+
parentTag
.
getPath
()
+
Constants
.
TAG_PATH_SEPARATOR
)
.
and
(
"tagType"
).
is
(
Constants
.
TAG_PERSONAL_TYPE
)
.
orOperator
(
Criteria
.
where
(
"dept"
).
is
(
companyId
),
//标签是维度管理员机构的
Criteria
.
where
(
"dept"
).
is
(
deptId
).
and
(
"tagUser"
).
is
(
userId
)
//标签是普通用户结构且普通用户名创建
)).
with
(
Sort
.
by
(
getDefaultTagOrders
())),
Tag
.
class
);
dirs
.
add
(
parentTag
);
return
dirs
;
}
//拼接关键子查询字段
private
Criteria
createKeywordRegexQuery
(
List
<
String
>
asList
,
String
keyword
)
{
Criteria
criteriaSearch
=
new
Criteria
();
return
criteriaSearch
.
orOperator
(
asList
.
stream
().
map
(
col
->
{
return
Criteria
.
where
(
col
).
regex
(
keyword
,
"i"
);
}).
collect
(
Collectors
.
toList
()).
toArray
(
new
Criteria
[
0
]));
}
//拼接根据机构id查询个人维度标签
private
Criteria
createPersonalDimensionTagCriteria
(
String
userName
,
String
dept
)
{
return
Criteria
.
where
(
"tagType"
).
is
(
Constants
.
TAG_PERSONAL_TYPE
)
.
and
(
"dept"
).
is
(
dept
).
and
(
"dimensionType"
).
is
(
Constants
.
TAG_DIMENSION_TRUE
);
}
//拼接查找系统标签条件
private
Criteria
createSystemTagCriteria
(
String
path
)
{
Criteria
criteria
=
Criteria
.
where
(
"tagType"
).
is
(
Constants
.
TAG_SYSTEM_TYPE
);
if
(
StringUtils
.
isNotBlank
(
path
))
{
return
criteria
.
and
(
"path"
).
regex
(
"^"
+
path
);
}
return
criteria
;
}
//拼接分页查找条件
private
Query
createPageQuery
(
Page
page
,
Criteria
andCriterias
)
{
Query
q
=
new
Query
(
andCriterias
);
q
.
skip
(
page
.
getOffset
());
q
.
limit
(
page
.
getPageSize
());
q
.
with
(
Sort
.
by
(
getDefaultTagOrders
()));
return
q
;
}
//根据用户id标识该标签能否被操作
private
List
<
ExtTag
>
decoratorToExtTag
(
List
<
Tag
>
tags
,
String
userName
)
{
return
tags
.
stream
().
map
(
t
->
{
return
new
ExtTag
(
t
,
/**t.getCreator()*/
t
.
getTagUser
().
equals
(
userName
)
?
Constants
.
TAG_OPERABLE_TRUE
:
Constants
.
TAG_OPERABLE_FALSE
);
}).
collect
(
Collectors
.
toList
());
}
//拼接个人标签查询条件
private
Criteria
createPersonalTagCriteria
(
String
userName
,
String
dept
,
String
path
)
{
Criteria
criteria
=
Criteria
.
where
(
"tagType"
).
is
(
Constants
.
TAG_PERSONAL_TYPE
)
.
and
(
"dept"
).
is
(
dept
).
and
(
"tagUser"
).
is
(
userName
);
if
(
StringUtils
.
isNotBlank
(
path
))
{
criteria
=
criteria
.
and
(
"path"
).
regex
(
"^"
+
path
);;
}
return
criteria
/**.orOperator(
Criteria.where("dimensionType").is(Constants.TAG_DIMENSION_TRUE),
Criteria.where("isOpen").is(Constants.TAG_OPEN_STATUS),
Criteria.where("creator").is(userName))*/
;
}
//拼接查询当前系统标签子标签条件
private
List
<
Tag
>
getSystemSubTag
(
Tag
parentTag
)
{
List
<
Tag
>
dirs
=
mongoOperations
.
find
(
new
Query
().
addCriteria
(
Criteria
.
where
(
"path"
)
.
regex
(
"^"
+
parentTag
.
getPath
()
+
Constants
.
TAG_PATH_SEPARATOR
)
.
and
(
"tagType"
).
is
(
Constants
.
TAG_SYSTEM_TYPE
))
.
with
(
Sort
.
by
(
getDefaultTagOrders
())),
Tag
.
class
);
dirs
.
add
(
parentTag
);
return
dirs
;
}
//拼接获取维度标签条件
private
Query
createPersonalExcludeOpenTypeTagQuery
(
String
userName
,
String
dept
)
{
return
Query
.
query
(
Criteria
.
where
(
"tagType"
).
is
(
Constants
.
TAG_PERSONAL_TYPE
)
.
and
(
"dept"
).
is
(
dept
).
and
(
"dimensionType"
).
is
(
Constants
.
TAG_DIMENSION_TRUE
))
.
with
(
Sort
.
by
(
getDefaultTagOrders
()));
}
// public JsonNode[] queryPersonalTagAsTree(String parentId, String userName, String dept) throws TagNotExistException {
// List<Tag> tags = new ArrayList<>();
// if (StringUtils.isEmpty(parentId)) {
// tags = mongoOperations.find(createPersonalTagQuery(userName, dept), Tag.class);
// } else {
// Tag parentTag = getTagById(parentId);
// tags = getPersonSubTag(parentTag, userName);
// tags.forEach(tag -> tag.setPath(tag.getPath().replaceAll(parentTag.getPath(), parentTag.getName())));
// }
// List<JsonNode> nodes = new ArrayList<>();
// tags.forEach(p -> {
// JsonNode node = new JsonNode(p.getPath(), p.getId(), p.getPath(), p.getIdPath());
// nodes.add(node);
// });
// JsonNode root = JsonTreeHelper.toJsonTree(nodes, Constants.TAG_PATH_SEPARATOR);
// if (root.children != null)
// return root.children;
// else
// return new JsonNode[] {};
// }
private
Query
createPersonalTagQuery
(
String
userName
,
String
dept
,
Criteria
...
serachCriterias
)
{
return
Query
.
query
(
createPersonalTagCriteria
(
userName
,
dept
,
null
))
.
with
(
Sort
.
by
(
getDefaultTagOrders
()));
}
public
List
<
Tag
>
getPersonSubTag
(
Tag
parentTag
,
String
userName
)
{
List
<
Tag
>
dirs
=
mongoOperations
.
find
(
new
Query
().
addCriteria
(
Criteria
.
where
(
"path"
)
.
regex
(
"^"
+
parentTag
.
getPath
()
+
Constants
.
TAG_PATH_SEPARATOR
)
.
and
(
"tagType"
).
is
(
Constants
.
TAG_PERSONAL_TYPE
)
.
orOperator
(
Criteria
.
where
(
"openStatus"
).
is
(
Constants
.
TAG_OPEN_STATUS
),
Criteria
.
where
(
"creator"
).
is
(
userName
)))
.
with
(
Sort
.
by
(
getDefaultTagOrders
())),
Tag
.
class
);
dirs
.
add
(
parentTag
);
return
dirs
;
}
private
Criteria
createPathRegexQuery
(
String
path
)
{
return
Criteria
.
where
(
"path"
).
regex
(
"^"
+
path
);
}
public
void
shareTags
(
List
<
String
>
tagIds
)
{
Iterable
<
Tag
>
tags
=
tagRepository
.
findAllById
(
tagIds
);
tags
.
forEach
(
t
->
{
t
.
setIsOpen
(
Constants
.
TAG_OPEN_STATUS
);
});
tagRepository
.
saveAll
(
tags
);
}
public
List
<
SysTag
>
listSysTags
()
{
return
mongoOperations
.
findAll
(
SysTag
.
class
);
}
public
SysTag
getSystemByCode
(
String
code
)
{
return
mongoOperations
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"systemCode"
).
is
(
code
)),
SysTag
.
class
);
}
public
SysTag
updateSystemExtractInfo
(
String
code
,
boolean
hasExtract
,
int
tableNum
,
int
columnNum
)
throws
TagNotExistException
{
SysTag
sysTag
=
mongoOperations
.
findOne
(
Query
.
query
(
Criteria
.
where
(
"systemCode"
).
is
(
code
)),
SysTag
.
class
);
if
(
sysTag
==
null
)
{
throw
new
TagNotExistException
(
String
.
format
(
"编码[为%s]的系统不存在"
,
code
));
}
sysTag
.
setHasExtract
(
hasExtract
);
sysTag
.
setTableNum
(
tableNum
);
sysTag
.
setColumnNum
(
columnNum
);
mongoOperations
.
save
(
sysTag
);
return
sysTag
;
}
}
src/main/java/com/keymobile/tagmanager/util/UserInfoUtils.java
View file @
10ed975e
package
com
.
keymobile
.
tagmanager
.
util
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Set
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.security.core.GrantedAuthority
;
import
org.springframework.security.core.context.SecurityContextHolder
;
import
org.springframework.security.core.userdetails.UserDetails
;
...
...
@@ -38,10 +43,6 @@ public class UserInfoUtils {
return
domainIds
;
}
public
static
String
getUserName
()
{
return
SecurityContextHolder
.
getContext
().
getAuthentication
().
getName
().
split
(
":"
)[
0
];
}
public
static
String
getUserCompanyIdPath
()
{
if
(
SecurityContextHolder
.
getContext
().
getAuthentication
().
getName
().
split
(
":"
).
length
>
5
)
{
String
deptIdPath
=
SecurityContextHolder
.
getContext
().
getAuthentication
().
getName
().
split
(
":"
)[
5
];
...
...
@@ -67,8 +68,34 @@ public class UserInfoUtils {
// return SecurityContextHolder.getContext().getAuthentication().getName().split(":")[5];
// }
public
static
Integer
getUserId
()
{
return
Integer
.
valueOf
(
SecurityContextHolder
.
getContext
().
getAuthentication
().
getName
().
split
(
":"
)[
1
]);
//author:zhangkb time:2020-1-6 desc:添加标签用到获取session属性接口
public
static
String
getUserName
()
{
return
SecurityContextHolder
.
getContext
().
getAuthentication
().
getName
().
split
(
":"
)[
0
];
}
public
static
String
getUserId
()
{
return
SecurityContextHolder
.
getContext
().
getAuthentication
().
getName
().
split
(
":"
)[
1
];
}
//获取当前用户所属机构(id:name)
public
static
String
[]
getUserOrg
()
{
GrantedAuthority
userOrg
=
SecurityContextHolder
.
getContext
().
getAuthentication
().
getAuthorities
().
stream
()
.
filter
(
auth
->
auth
.
getAuthority
().
contains
(
"USER_ORG_"
)).
findFirst
().
get
();
if
(
userOrg
==
null
)
{
return
null
;
}
else
{
String
[]
userOrgParts
=
userOrg
.
getAuthority
().
split
(
":"
);
return
new
String
[]
{
userOrgParts
[
0
].
substring
(
"USER_ORG_"
.
length
()),
userOrgParts
[
1
]
};
}
}
public
static
String
getDataRoleOrg
()
{
GrantedAuthority
dataRoleOrg
=
SecurityContextHolder
.
getContext
().
getAuthentication
().
getAuthorities
().
stream
()
.
filter
(
auth
->
auth
.
getAuthority
().
contains
(
"USER_DATA_ROLE_ORG_"
)).
findFirst
().
get
();
if
(
dataRoleOrg
==
null
)
{
return
null
;
}
else
{
return
dataRoleOrg
.
getAuthority
().
substring
(
"USER_DATA_ROLE_ORG_"
.
length
());
}
}
}
src/main/resources/application-test.yml
0 → 100644
View file @
10ed975e
mongodb
:
database
:
tagManagerCGN_dev
uri
:
dev-vm-00:27017
username
:
root
password
:
dataPlatform
maxConnectionIdleTime
:
120000
eureka
:
client
:
registryFetchIntervalSeconds
:
5
region
:
default
serviceUrl
:
defaultZone
:
http://dev-vm-22:8081/eureka/
instance
:
prefer-ip-address
:
false
hostname
:
192.168.0.109
spring
:
application
:
name
:
tagManager
session
:
store-type
:
redis
redis
:
namespace
:
cgn2
redis
:
host
:
dev-vm-00
port
:
6379
datasource
:
url
:
jdbc:mysql://dev-vm-00:3306/cgn2_dev?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
username
:
test
password
:
test
hikari
:
maximum-pool-size
:
3
server
:
port
:
8072
#security permit true :permitAll ;flase:authenticated
security
:
authUser
:
root
authPwd
:
pwd
permit
:
false
feign
:
client
:
config
:
default
:
ReadTimeout
:
30000
ConnectTimeout
:
30000
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