Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
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
项目统一框架
amos-boot-biz
Commits
af8cf19e
Commit
af8cf19e
authored
Feb 17, 2022
by
maoying
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop_ccs' of 172.16.10.76:moa/amos-boot-biz into develop_ccs
parents
2e1b73e6
dced088b
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
268 additions
and
67 deletions
+268
-67
DataDictionaryController.java
.../boot/biz/common/controller/DataDictionaryController.java
+5
-5
DataDictionaryMapper.java
...amos/boot/biz/common/dao/mapper/DataDictionaryMapper.java
+4
-0
DataDictionary.java
...m/yeejoin/amos/boot/biz/common/entity/DataDictionary.java
+6
-0
DataDictionaryServiceImpl.java
...ot/biz/common/service/impl/DataDictionaryServiceImpl.java
+3
-2
Menu.java
...ain/java/com/yeejoin/amos/boot/biz/common/utils/Menu.java
+11
-3
TreeParser.java
...va/com/yeejoin/amos/boot/biz/common/utils/TreeParser.java
+78
-15
DataDictionaryMapper.xml
...common/src/main/resources/mapper/DataDictionaryMapper.xml
+14
-1
OrgUsrMapper.xml
...ule-common-api/src/main/resources/mapper/OrgUsrMapper.xml
+3
-0
DangerDto.java
...m/yeejoin/amos/supervision/core/common/dto/DangerDto.java
+1
-1
FireExpertsController.java
...t/module/common/biz/controller/FireExpertsController.java
+1
-1
FireTeamServiceImpl.java
...t/module/common/biz/service/impl/FireTeamServiceImpl.java
+4
-4
FirefightersServiceImpl.java
...dule/common/biz/service/impl/FirefightersServiceImpl.java
+10
-6
LinkageUnitServiceImpl.java
...odule/common/biz/service/impl/LinkageUnitServiceImpl.java
+1
-1
BuildingController.java
...om/yeejoin/equipmanage/controller/BuildingController.java
+13
-4
EquipmentDetailController.java
...oin/equipmanage/controller/EquipmentDetailController.java
+15
-15
EquipmentDetailExcelSingleTemplateDto.java
...quipmanage/dto/EquipmentDetailExcelSingleTemplateDto.java
+13
-1
IBuilldService.java
.../java/com/yeejoin/equipmanage/service/IBuilldService.java
+1
-0
BuildingServiceImpl.java
...yeejoin/equipmanage/service/impl/BuildingServiceImpl.java
+31
-2
FireFightingSystemServiceImpl.java
...uipmanage/service/impl/FireFightingSystemServiceImpl.java
+7
-6
jcs-1.0.0.0.xml
...ystem-jcs/src/main/resources/db/changelog/jcs-1.0.0.0.xml
+47
-0
No files found.
amos-boot-biz-common/src/main/java/com/yeejoin/amos/boot/biz/common/controller/DataDictionaryController.java
View file @
af8cf19e
...
...
@@ -196,7 +196,7 @@ public class DataDictionaryController extends BaseController {
}
else
{
Collection
<
DataDictionary
>
list
=
iDataDictionaryService
.
list
(
queryWrapper
);
List
<
Menu
>
menus
=
TreeParser
.
getTree
(
null
,
list
,
DataDictionary
.
class
.
getName
(),
"getCode"
,
0
,
"getName"
,
"getParent"
,
null
);
"getParent"
,
null
,
null
);
redisUtils
.
set
(
RedisKey
.
DATA_DICTIONARY_CODE
+
type
,
JSON
.
toJSON
(
menus
),
time
);
return
ResponseHelper
.
buildResponse
(
menus
);
}
...
...
@@ -218,7 +218,7 @@ public class DataDictionaryController extends BaseController {
}
else
{
Collection
<
DataDictionary
>
list
=
iDataDictionaryService
.
list
(
queryWrapper
);
List
<
Menu
>
menus
=
TreeParser
.
getTree
(
null
,
list
,
DataDictionary
.
class
.
getName
(),
"getCode"
,
0
,
"getName"
,
"getParent"
,
null
);
"getParent"
,
null
,
null
);
redisUtils
.
set
(
RedisKey
.
DATA_DICTIONARY_CODE
+
type
,
JSON
.
toJSON
(
menus
),
time
);
return
ResponseHelper
.
buildResponse
(
menus
);
}
...
...
@@ -299,14 +299,14 @@ public class DataDictionaryController extends BaseController {
// kongfm 2021-09-08
// 数据字典还原 by kongfm 2021-09-09
menus
=
TreeParser
.
getTree
(
null
,
list
,
DataDictionary
.
class
.
getName
(),
"getCode"
,
0
,
"getName"
,
"getParent"
,
null
);
null
,
null
);
}
else
{
list
=
iDataDictionaryService
.
list
(
queryWrapper
);
// 数据字典生成树方法 原先通过getCode做主键 现修改为 getSequenceNbr 后期数据字典parent字段保存id 而不要保存code by
// kongfm 2021-09-08
// 数据字典还原 by kongfm 2021-09-09
menus
=
TreeParser
.
getTree
(
null
,
list
,
DataDictionary
.
class
.
getName
(),
"getCode"
,
0
,
"getName"
,
"getParent"
,
null
);
null
,
null
);
}
// 创建根节点
Menu
menu
=
new
Menu
(-
1L
,
rootName
,
-
1L
,
menus
,
0
);
...
...
@@ -367,7 +367,7 @@ public class DataDictionaryController extends BaseController {
}
else
{
Collection
<
DataDictionary
>
list
=
iDataDictionaryService
.
list
(
queryWrapper
);
List
<
Menu
>
menus
=
TreeParser
.
getTree
(
null
,
list
,
DataDictionary
.
class
.
getName
(),
"getCode"
,
0
,
"getName"
,
"getParent"
,
null
);
"getParent"
,
null
,
null
);
redisUtils
.
set
(
RedisKey
.
DATA_DICTIONARY_CODE
+
type
,
JSON
.
toJSON
(
menus
),
time
);
return
ResponseHelper
.
buildResponse
(
menus
);
}
...
...
amos-boot-biz-common/src/main/java/com/yeejoin/amos/boot/biz/common/dao/mapper/DataDictionaryMapper.java
View file @
af8cf19e
...
...
@@ -32,4 +32,8 @@ public interface DataDictionaryMapper extends BaseMapper<DataDictionary> {
public
List
<
DataDictionary
>
getFireTeamTypeTree
(
String
bizOrgCode
);
public
List
<
DataDictionary
>
getwaterResourceTypeTree
(
String
bizOrgCode
);
public
List
<
DataDictionary
>
getFirefightersJobTitle
(
String
type
);
}
amos-boot-biz-common/src/main/java/com/yeejoin/amos/boot/biz/common/entity/DataDictionary.java
View file @
af8cf19e
...
...
@@ -48,4 +48,10 @@ public class DataDictionary extends BaseEntity {
@TableField
(
exist
=
false
)
private
int
count
;
@ApiModelProperty
(
value
=
"树code"
)
@TableField
(
exist
=
false
)
private
String
treeCode
;
}
amos-boot-biz-common/src/main/java/com/yeejoin/amos/boot/biz/common/service/impl/DataDictionaryServiceImpl.java
View file @
af8cf19e
...
...
@@ -76,7 +76,7 @@ public class DataDictionaryServiceImpl extends BaseService<DataDictionaryDto, Da
// 数据字典生成树方法 原先通过getCode做主键 现修改为 getSequenceNbr 后期数据字典parent字段保存id 而不要保存code by kongfm 2021-09-08
// 数据字典还原 by kongfm 2021-09-09
List
<
Menu
>
menus
=
TreeParser
.
getTree
(
null
,
list
,
DataDictionary
.
class
.
getName
(),
"getCode"
,
0
,
"getName"
,
"getParent"
,
null
);
,
"getParent"
,
null
,
null
);
redisUtils
.
set
(
RedisKey
.
DATA_DICTIONARY_CODE
+
type
,
JSON
.
toJSON
(
menus
),
time
);
return
menus
;
}
...
...
@@ -129,8 +129,9 @@ public class DataDictionaryServiceImpl extends BaseService<DataDictionaryDto, Da
public
List
<
Menu
>
getFireTeamTypeTree
(
String
bizOrgCode
)
throws
Exception
{
// Menu root = new Menu(null, "消防队伍类型", null, null,0);
List
<
DataDictionary
>
list
=
dataDictionaryMapper
.
getFireTeamTypeTree
(
bizOrgCode
);
List
<
Menu
>
menus
=
TreeParser
.
getTreeContainsCount
(
null
,
list
,
DataDictionary
.
class
.
getName
(),
"getCode"
,
0
,
"getName"
,
"getParent"
,
"getCount"
);
"getParent"
,
"getCount"
,
"getTreeCode"
);
// root.setChildren(menus);
for
(
Menu
m:
menus
)
{
...
...
amos-boot-biz-common/src/main/java/com/yeejoin/amos/boot/biz/common/utils/Menu.java
View file @
af8cf19e
...
...
@@ -16,7 +16,8 @@ public class Menu {
public
Long
parentId
;
public
Boolean
isRoot
;
public
List
<
Menu
>
children
;
public
int
num
;
public
String
treeCode
;
public
int
num
;
public
int
getNum
()
{
return
num
;
}
...
...
@@ -28,9 +29,16 @@ public class Menu {
this
.
id
=
id
;
this
.
name
=
name
;
this
.
parentId
=
parentId2
;
this
.
num
=
num
;
this
.
num
=
num
;
}
public
Menu
(
Long
id
,
String
name
,
Long
parentId2
,
int
num
,
String
treeCode
)
{
super
();
this
.
id
=
id
;
this
.
name
=
name
;
this
.
parentId
=
parentId2
;
this
.
num
=
num
;
this
.
treeCode
=
treeCode
;
}
public
Menu
(
Long
id
,
String
name
,
Long
parentId
,
List
<
Menu
>
children
,
int
num
)
{
super
();
this
.
id
=
id
;
...
...
amos-boot-biz-common/src/main/java/com/yeejoin/amos/boot/biz/common/utils/TreeParser.java
View file @
af8cf19e
...
...
@@ -37,7 +37,7 @@ public class TreeParser {
* </PRE>
*/
@SuppressWarnings
(
"unchecked"
)
public
static
List
<
Menu
>
getTree
(
Long
topId
,
@SuppressWarnings
(
"rawtypes"
)
Collection
entityList
,
String
packageURL
,
String
IDMethodName
,
int
IDHierarchy
,
String
NAMEMethodName
,
String
PARENTIDMethodName
,
List
<
FirefightersTreeDto
>
list
)
throws
Exception
{
public
static
List
<
Menu
>
getTree
(
Long
topId
,
@SuppressWarnings
(
"rawtypes"
)
Collection
entityList
,
String
packageURL
,
String
IDMethodName
,
int
IDHierarchy
,
String
NAMEMethodName
,
String
PARENTIDMethodName
,
List
<
FirefightersTreeDto
>
list
,
String
treeCode
)
throws
Exception
{
List
<
Menu
>
resultList
=
new
ArrayList
<>();
@SuppressWarnings
(
"rawtypes"
)
Class
clazz
=
Class
.
forName
(
packageURL
);
...
...
@@ -59,6 +59,10 @@ public class TreeParser {
Method
NAMEMethodNameme
=
clazz
.
getDeclaredMethod
(
NAMEMethodName
);
Method
PARENTIDMethodNameme
=
clazz
.
getDeclaredMethod
(
PARENTIDMethodName
);
Method
treeCodeName
=
null
;
if
(
treeCode
!=
null
){
treeCodeName
=
clazz
.
getDeclaredMethod
(
treeCode
);
}
//获取顶层元素集合
Long
parentId
;
for
(
Object
ob
:
entityList
)
{
...
...
@@ -80,13 +84,21 @@ public class TreeParser {
;
}
Menu
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
);
Menu
menu
=
null
;
if
(
treeCodeName
!=
null
){
String
treeCodeNamedat
=
String
.
valueOf
(
treeCodeName
.
invoke
(
entity
));
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
,
treeCodeNamedat
);
}
else
{
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
);
}
resultList
.
add
(
menu
);
}
}
//获取每个顶层元素的子数据集合
for
(
Menu
entity
:
resultList
)
{
entity
.
setChildren
(
getSub
(
entity
.
getId
(),
entityList
,
packageURL
,
IDMethodName
,
IDHierarchy
,
NAMEMethodName
,
PARENTIDMethodName
,
list
));
entity
.
setChildren
(
getSub
(
entity
.
getId
(),
entityList
,
packageURL
,
IDMethodName
,
IDHierarchy
,
NAMEMethodName
,
PARENTIDMethodName
,
list
,
treeCode
));
}
return
resultList
;
...
...
@@ -96,7 +108,7 @@ public class TreeParser {
* 获取子数据集合
*/
@SuppressWarnings
(
"unchecked"
)
private
static
List
<
Menu
>
getSub
(
Long
topId
,
@SuppressWarnings
(
"rawtypes"
)
Collection
entityList
,
String
packageURL
,
String
IDMethodName
,
int
IDHierarchy
,
String
NAMEMethodName
,
String
PARENTIDMethodName
,
List
<
FirefightersTreeDto
>
list
)
throws
Exception
{
private
static
List
<
Menu
>
getSub
(
Long
topId
,
@SuppressWarnings
(
"rawtypes"
)
Collection
entityList
,
String
packageURL
,
String
IDMethodName
,
int
IDHierarchy
,
String
NAMEMethodName
,
String
PARENTIDMethodName
,
List
<
FirefightersTreeDto
>
list
,
String
treeCode
)
throws
Exception
{
List
<
Menu
>
childList
=
new
ArrayList
<>();
@SuppressWarnings
(
"rawtypes"
)
Class
clazz
=
Class
.
forName
(
packageURL
);
...
...
@@ -117,6 +129,10 @@ public class TreeParser {
}
Method
NAMEMethodNameme
=
clazz
.
getDeclaredMethod
(
NAMEMethodName
);
Method
PARENTIDMethodNameme
=
clazz
.
getDeclaredMethod
(
PARENTIDMethodName
);
Method
treeCodeName
=
null
;
if
(
treeCode
!=
null
){
treeCodeName
=
clazz
.
getDeclaredMethod
(
treeCode
);
}
Long
parentId
;
//子集的直接子对象
for
(
Object
ob
:
entityList
)
{
...
...
@@ -139,7 +155,13 @@ public class TreeParser {
;
}
Menu
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
);
Menu
menu
=
null
;
if
(
treeCodeName
!=
null
){
String
treeCodeNamedat
=
String
.
valueOf
(
treeCodeName
.
invoke
(
entity
));
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
,
treeCodeNamedat
);
}
else
{
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
);
}
childList
.
add
(
menu
);
}
}
else
{
...
...
@@ -158,7 +180,13 @@ public class TreeParser {
;
}
Menu
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
);
Menu
menu
=
null
;
if
(
treeCodeName
!=
null
){
String
treeCodeNamedat
=
String
.
valueOf
(
treeCodeName
.
invoke
(
entity
));
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
,
treeCodeNamedat
);
}
else
{
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
);
}
childList
.
add
(
menu
);
}
}
...
...
@@ -167,7 +195,7 @@ public class TreeParser {
//子集的间接子对象
for
(
Menu
entity
:
childList
)
{
entity
.
setChildren
(
getSub
(
entity
.
getId
(),
entityList
,
packageURL
,
IDMethodName
,
IDHierarchy
,
NAMEMethodName
,
PARENTIDMethodName
,
list
));
entity
.
setChildren
(
getSub
(
entity
.
getId
(),
entityList
,
packageURL
,
IDMethodName
,
IDHierarchy
,
NAMEMethodName
,
PARENTIDMethodName
,
list
,
treeCode
));
}
//递归退出条件
...
...
@@ -345,7 +373,7 @@ public class TreeParser {
}
@SuppressWarnings
(
"unchecked"
)
public
static
List
<
Menu
>
getTreeContainsCount
(
Long
topId
,
@SuppressWarnings
(
"rawtypes"
)
Collection
entityList
,
String
packageURL
,
String
IDMethodName
,
int
IDHierarchy
,
String
NAMEMethodName
,
String
PARENTIDMethodName
,
String
COUNTMethodName
)
throws
Exception
{
public
static
List
<
Menu
>
getTreeContainsCount
(
Long
topId
,
@SuppressWarnings
(
"rawtypes"
)
Collection
entityList
,
String
packageURL
,
String
IDMethodName
,
int
IDHierarchy
,
String
NAMEMethodName
,
String
PARENTIDMethodName
,
String
COUNTMethodName
,
String
treeCode
)
throws
Exception
{
List
<
Menu
>
resultList
=
new
ArrayList
<>();
@SuppressWarnings
(
"rawtypes"
)
Class
clazz
=
Class
.
forName
(
packageURL
);
...
...
@@ -368,6 +396,11 @@ public class TreeParser {
Method
NAMEMethodNameme
=
clazz
.
getDeclaredMethod
(
NAMEMethodName
);
Method
PARENTIDMethodNameme
=
clazz
.
getDeclaredMethod
(
PARENTIDMethodName
);
Method
COUNTMethodName1
=
clazz
.
getDeclaredMethod
(
COUNTMethodName
);
Method
treeCodeName
=
null
;
if
(
treeCode
!=
null
){
treeCodeName
=
clazz
.
getDeclaredMethod
(
treeCode
);
}
//获取顶层元素集合
Long
parentId
;
for
(
Object
ob
:
entityList
)
{
...
...
@@ -379,14 +412,22 @@ public class TreeParser {
if
(
parentId
==
null
||
parentId
.
equals
(
topId
)
)
{
//陈浩2021-12-01修改 topId == parentId 的判断
String
codeString
=
String
.
valueOf
(
IDMethodNameme
.
invoke
(
entity
));
Integer
num
=
Integer
.
parseInt
(
String
.
valueOf
(
COUNTMethodName1
.
invoke
(
entity
)));
Menu
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
);
Menu
menu
=
null
;
if
(
treeCodeName
!=
null
){
String
treeCodeNamedat
=
String
.
valueOf
(
treeCodeName
.
invoke
(
entity
));
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
,
treeCodeNamedat
);
}
else
{
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
);
}
resultList
.
add
(
menu
);
}
}
//获取每个顶层元素的子数据集合
for
(
Menu
entity
:
resultList
)
{
entity
.
setChildren
(
getSubContainsCount
(
entity
.
getId
(),
entityList
,
packageURL
,
IDMethodName
,
IDHierarchy
,
NAMEMethodName
,
PARENTIDMethodName
,
COUNTMethodName
));
entity
.
setChildren
(
getSubContainsCount
(
entity
.
getId
(),
entityList
,
packageURL
,
IDMethodName
,
IDHierarchy
,
NAMEMethodName
,
PARENTIDMethodName
,
COUNTMethodName
,
treeCode
));
}
return
resultList
;
...
...
@@ -396,7 +437,7 @@ public class TreeParser {
* 获取子数据集合
*/
@SuppressWarnings
(
"unchecked"
)
private
static
List
<
Menu
>
getSubContainsCount
(
Long
topId
,
@SuppressWarnings
(
"rawtypes"
)
Collection
entityList
,
String
packageURL
,
String
IDMethodName
,
int
IDHierarchy
,
String
NAMEMethodName
,
String
PARENTIDMethodName
,
String
COUNTMethodName
)
throws
Exception
{
private
static
List
<
Menu
>
getSubContainsCount
(
Long
topId
,
@SuppressWarnings
(
"rawtypes"
)
Collection
entityList
,
String
packageURL
,
String
IDMethodName
,
int
IDHierarchy
,
String
NAMEMethodName
,
String
PARENTIDMethodName
,
String
COUNTMethodName
,
String
treeCode
)
throws
Exception
{
List
<
Menu
>
childList
=
new
ArrayList
<>();
@SuppressWarnings
(
"rawtypes"
)
Class
clazz
=
Class
.
forName
(
packageURL
);
...
...
@@ -418,6 +459,10 @@ public class TreeParser {
Method
NAMEMethodNameme
=
clazz
.
getDeclaredMethod
(
NAMEMethodName
);
Method
PARENTIDMethodNameme
=
clazz
.
getDeclaredMethod
(
PARENTIDMethodName
);
Method
COUNTMethodName1
=
clazz
.
getDeclaredMethod
(
COUNTMethodName
);
Method
treeCodeName
=
null
;
if
(
treeCode
!=
null
){
treeCodeName
=
clazz
.
getDeclaredMethod
(
treeCode
);
}
Long
parentId
;
//子集的直接子对象
for
(
Object
ob
:
entityList
)
{
...
...
@@ -430,7 +475,17 @@ public class TreeParser {
String
codeString
=
String
.
valueOf
(
IDMethodNameme
.
invoke
(
entity
));
Integer
num
=
Integer
.
parseInt
(
String
.
valueOf
(
COUNTMethodName1
.
invoke
(
entity
)));
Menu
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
);
Menu
menu
=
null
;
if
(
treeCodeName
!=
null
){
String
treeCodeNamedat
=
String
.
valueOf
(
treeCodeName
.
invoke
(
entity
));
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
,
treeCodeNamedat
);
}
else
{
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
);
}
childList
.
add
(
menu
);
}
}
else
{
...
...
@@ -439,7 +494,15 @@ public class TreeParser {
String
codeString
=
String
.
valueOf
(
IDMethodNameme
.
invoke
(
entity
));
Integer
num
=
Integer
.
parseInt
(
String
.
valueOf
(
COUNTMethodName1
.
invoke
(
entity
)));
Menu
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
);
Menu
menu
=
null
;
if
(
treeCodeName
!=
null
){
String
treeCodeNamedat
=
String
.
valueOf
(
treeCodeName
.
invoke
(
entity
));
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
,
treeCodeNamedat
);
}
else
{
menu
=
new
Menu
(
Long
.
valueOf
(
codeString
),
String
.
valueOf
(
NAMEMethodNameme
.
invoke
(
entity
)),
parentId
,
num
);
}
childList
.
add
(
menu
);
}
}
...
...
@@ -448,7 +511,7 @@ public class TreeParser {
//子集的间接子对象
for
(
Menu
entity
:
childList
)
{
entity
.
setChildren
(
getSubContainsCount
(
entity
.
getId
(),
entityList
,
packageURL
,
IDMethodName
,
IDHierarchy
,
NAMEMethodName
,
PARENTIDMethodName
,
COUNTMethodName
));
entity
.
setChildren
(
getSubContainsCount
(
entity
.
getId
(),
entityList
,
packageURL
,
IDMethodName
,
IDHierarchy
,
NAMEMethodName
,
PARENTIDMethodName
,
COUNTMethodName
,
treeCode
));
}
//递归退出条件
...
...
amos-boot-biz-common/src/main/resources/mapper/DataDictionaryMapper.xml
View file @
af8cf19e
...
...
@@ -60,7 +60,7 @@ GROUP BY
<select
id=
"getFireTeamTypeTree"
resultType=
"com.yeejoin.amos.boot.biz.common.entity.DataDictionary"
>
SELECT
cdd.*, case when fire.count is null then 0 else fire.count end as count
cdd.*,
getChildLstCode(cdd.sequence_nbr) treeCode,
case when fire.count is null then 0 else fire.count end as count
FROM
cb_data_dictionary cdd
LEFT JOIN (
...
...
@@ -78,6 +78,19 @@ GROUP BY
WHERE
cdd.type = 'XFJGLX'
</select>
<select
id =
"getFirefightersJobTitle"
resultType=
"com.yeejoin.amos.boot.biz.common.entity.DataDictionary"
>
SELECT
cbb.*,getChildLstCode(cbb.sequence_nbr) treeCode
FROM
cb_data_dictionary cbb
WHERE
cbb.type = #{type}
</select>
<select
id=
"getwaterResourceTypeTree"
resultType=
"com.yeejoin.amos.boot.biz.common.entity.DataDictionary"
>
SELECT
cdd.*, case when fire.count is null then 0 else fire.count end as count
...
...
amos-boot-module/amos-boot-module-api/amos-boot-module-common-api/src/main/resources/mapper/OrgUsrMapper.xml
View file @
af8cf19e
...
...
@@ -806,6 +806,9 @@ LEFT JOIN (
#{bizOrgType}
</foreach>
</if>
<if
test=
"bizOrgCode != null and bizOrgCode != ''"
>
and usr.biz_org_code LIKE CONCAT (#{bizOrgCode},'%')
</if>
order by usr.rec_date
</select>
...
...
amos-boot-module/amos-boot-module-api/amos-boot-module-supervision-api/src/main/java/com/yeejoin/amos/supervision/core/common/dto/DangerDto.java
View file @
af8cf19e
...
...
@@ -63,7 +63,7 @@ public class DangerDto implements Serializable {
/**
* 整改期限
*/
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd
HH:mm:ss
"
)
private
Date
reformLimitDate
;
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-common-biz/src/main/java/com/yeejoin/amos/boot/module/common/biz/controller/FireExpertsController.java
View file @
af8cf19e
...
...
@@ -203,7 +203,7 @@ public class FireExpertsController extends BaseController {
i
.
setName
(
i
.
getName
()+
" ("
+
i
.
getCount
()+
")"
);
});
List
<
Menu
>
menus
=
TreeParser
.
getTree
(
null
,
list
,
DataDictionary
.
class
.
getName
(),
"getCode"
,
0
,
"getName"
,
"getParent"
,
null
);
,
"getParent"
,
null
,
null
);
Menu
menu
=
new
Menu
(-
1L
,
"专家领域"
,
-
1L
,
menus
,
0
);
List
<
Menu
>
menuList
=
new
ArrayList
<>();
menuList
.
add
(
menu
);
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-common-biz/src/main/java/com/yeejoin/amos/boot/module/common/biz/service/impl/FireTeamServiceImpl.java
View file @
af8cf19e
...
...
@@ -180,13 +180,13 @@ public class FireTeamServiceImpl extends BaseService<FireTeamDto, FireTeam, Fire
public
List
<
Menu
>
getTeamTree
(
Map
<
String
,
Object
>
columnMap
)
throws
Exception
{
Collection
<
FireTeam
>
list
=
this
.
listByMap
(
columnMap
);
return
TreeParser
.
getTree
(
null
,
list
,
FireTeam
.
class
.
getName
(),
"getSequenceNbr"
,
2
,
"getName"
,
"getParent"
,
null
);
null
,
null
);
}
public
List
<
Menu
>
getTeamTreeLikeCode
(
QueryWrapper
<
FireTeam
>
columnMap
)
throws
Exception
{
Collection
<
FireTeam
>
list
=
this
.
list
(
columnMap
);
return
TreeParser
.
getTree
(
null
,
list
,
FireTeam
.
class
.
getName
(),
"getSequenceNbr"
,
2
,
"getName"
,
"getParent"
,
null
);
null
,
null
);
}
/**
* 获取机场单位-队伍树
...
...
@@ -476,7 +476,7 @@ public class FireTeamServiceImpl extends BaseService<FireTeamDto, FireTeam, Fire
queryWrapper
.
eq
(
FireTeam:
:
getIsDelete
,
false
);
return
TreeParser
.
getTree
(
null
,
this
.
baseMapper
.
selectList
(
queryWrapper
),
FireTeam
.
class
.
getName
(),
"getSequenceNbr"
,
2
,
"getName"
,
"getParent"
,
null
);
null
,
null
);
}
/**
...
...
@@ -504,7 +504,7 @@ public class FireTeamServiceImpl extends BaseService<FireTeamDto, FireTeam, Fire
return
null
;
}
return
TreeParser
.
getTree
(
parentFireTeam
.
getSequenceNbr
(),
this
.
baseMapper
.
selectList
(
queryWrapper
),
FireTeam
.
class
.
getName
(),
"getSequenceNbr"
,
2
,
"getName"
,
"getParent"
,
null
);
null
,
null
);
// TODO Auto-generated method stub
}
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-common-biz/src/main/java/com/yeejoin/amos/boot/module/common/biz/service/impl/FirefightersServiceImpl.java
View file @
af8cf19e
...
...
@@ -4,6 +4,7 @@ import java.util.Collection;
import
java.util.List
;
import
java.util.Map
;
import
com.yeejoin.amos.boot.biz.common.dao.mapper.DataDictionaryMapper
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -45,7 +46,8 @@ public class FirefightersServiceImpl extends BaseService<FirefightersDto, Firefi
DataDictionaryServiceImpl
iDataDictionaryService
;
@Autowired
FirefightersContactsServiceImpl
firefightersContactsService
;
@Autowired
DataDictionaryMapper
dataDictionaryMapper
;
@Override
public
List
<
FirefightersZhDto
>
getFirefighters
(
int
pageNum
,
int
pageSize
,
FirefightersDto
par
)
{
return
firefightersMapper
.
getFirefighters
(
pageNum
,
pageSize
,
par
);
...
...
@@ -119,12 +121,14 @@ public class FirefightersServiceImpl extends BaseService<FirefightersDto, Firefi
@Override
public
List
<
Menu
>
getFirefightersJobTitleCount
(
String
bizOrgCode
)
throws
Exception
{
QueryWrapper
<
DataDictionary
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"type"
,
"GWMC"
);
queryWrapper
.
orderByAsc
(
"sort_num"
);
Collection
<
DataDictionary
>
list
=
iDataDictionaryService
.
list
(
queryWrapper
);
// QueryWrapper<DataDictionary> queryWrapper = new QueryWrapper<>();
// queryWrapper.eq("type", "GWMC");
// queryWrapper.orderByAsc("sort_num");
// Collection<DataDictionary> list = iDataDictionaryService.list(queryWrapper);
Collection
<
DataDictionary
>
list
=
dataDictionaryMapper
.
getFirefightersJobTitle
(
"GWMC"
);
List
<
Menu
>
menus
=
TreeParser
.
getTree
(
null
,
list
,
DataDictionary
.
class
.
getName
(),
"getCode"
,
0
,
"getName"
,
"getParent"
,
firefightersMapper
.
getFirefightersJobTitleCount
(
bizOrgCode
));
"getParent"
,
firefightersMapper
.
getFirefightersJobTitleCount
(
bizOrgCode
)
,
"getTreeCode"
);
for
(
Menu
m:
menus
)
{
if
(
null
!=
m
.
children
)
{
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-common-biz/src/main/java/com/yeejoin/amos/boot/module/common/biz/service/impl/LinkageUnitServiceImpl.java
View file @
af8cf19e
...
...
@@ -295,7 +295,7 @@ public class LinkageUnitServiceImpl extends BaseService<LinkageUnitDto, LinkageU
List
<
Menu
>
menuList
=
new
ArrayList
<
Menu
>();
try
{
List
<
Menu
>
menus
=
TreeParser
.
getTree
(
null
,
resultList
,
DataDictionary
.
class
.
getName
(),
"getCode"
,
0
,
"getName"
,
"getParent"
,
null
);
"getParent"
,
null
,
null
);
Menu
menu
=
new
Menu
(-
1L
,
rootName
,
-
1L
,
menus
,
0
);
// 挂在主节点
menuList
.
add
(
menu
);
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-equip-biz/src/main/java/com/yeejoin/equipmanage/controller/BuildingController.java
View file @
af8cf19e
...
...
@@ -154,15 +154,24 @@ public class BuildingController extends AbstractBaseController {
@GetMapping
(
value
=
"/pointTree"
)
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@ApiOperation
(
value
=
"建筑装备树"
,
notes
=
"楼层点位图使用"
)
public
List
<
PointTreeVo
>
getBuildTree
(
@RequestParam
(
required
=
false
)
String
bizOrgCode
)
{
public
Object
getBuildTree
(
@RequestParam
(
required
=
false
)
String
bizOrgCode
)
{
return
buildService
.
getBuildTree
(
bizOrgCode
);
}
@GetMapping
(
value
=
"/pointTreeNotEqu"
)
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
@ApiOperation
(
value
=
"建筑装备树"
,
notes
=
"楼层点位"
)
public
Object
pointTreeNotEqu
(
@RequestParam
(
required
=
false
)
String
bizOrgCode
)
{
if
(
vedioFormat
.
equals
(
"hls"
)){
bizOrgCode
=
null
;
bizOrgCode
=
null
;
}
return
buildService
.
getBuildTree
(
bizOrgCode
);
return
buildService
.
getBuildTreeNot
(
bizOrgCode
);
}
}
@GetMapping
(
value
=
"/3dPointTree"
)
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
)
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-equip-biz/src/main/java/com/yeejoin/equipmanage/controller/EquipmentDetailController.java
View file @
af8cf19e
...
...
@@ -533,27 +533,27 @@ public class EquipmentDetailController extends AbstractBaseController {
// List<EquipmentDetailDownloadTemplateVO> equipmentDetailDownloads = new ArrayList<>();
// ExcelUtils.exportExcel(equipmentDetailDownloads, "设备信息", "设备信息", EquipmentDetailDownloadTemplateVO.class, simpleDateFormat.format(new Date()) + ".xls", response);
try
{
// 判读机场服务是否在线
ExcelEnums
excelEnums
;
ResponseModel
<
String
[]>
result
=
jcsFeign
.
getEquipmentInfo
(
getAppKey
(),
getProduct
(),
getToken
(),
null
,
"getEquipCompany"
);
if
(
200
==
result
.
getStatus
())
{
excelEnums
=
ExcelEnums
.
getByKey
(
ExcelEnums
.
XFZB
.
getType
());
ExcelDto
excelDto
=
new
ExcelDto
(
excelEnums
.
getFileName
(),
excelEnums
.
getSheetName
(),
excelEnums
.
getClassUrl
(),
excelEnums
.
getType
());
String
url
=
excelDto
.
getClassUrl
();
Class
<?>
clz
=
Class
.
forName
(
url
);
ExcelUtil
.
createTemplate
(
response
,
excelDto
.
getFileName
(),
excelDto
.
getSheetName
(),
null
,
clz
,
getToken
(),
getAppKey
(),
getProduct
(),
true
);
}
}
catch
(
Exception
e
)
{
//
try {
//
// 判读机场服务是否在线
//
ExcelEnums excelEnums;
//
ResponseModel<String[]> result = jcsFeign.getEquipmentInfo(getAppKey(), getProduct(), getToken(), null, "getEquipCompany");
//
if (200 == result.getStatus()) {
//
excelEnums = ExcelEnums.getByKey(ExcelEnums.XFZB.getType());
//
ExcelDto excelDto = new ExcelDto(excelEnums.getFileName(), excelEnums.getSheetName(), excelEnums.getClassUrl(), excelEnums.getType());
//
String url = excelDto.getClassUrl();
//
Class<?> clz = Class.forName(url);
//
ExcelUtil.createTemplate(response, excelDto.getFileName(), excelDto.getSheetName(), null, clz, getToken(),
//
getAppKey(), getProduct(), true);
//
}
//
//
} catch (Exception e) {
ExcelEnums
excelEnums
=
ExcelEnums
.
getByKey
(
ExcelEnums
.
XFZBSINGLE
.
getType
());
ExcelDto
excelDto
=
new
ExcelDto
(
excelEnums
.
getFileName
(),
excelEnums
.
getSheetName
(),
excelEnums
.
getClassUrl
(),
excelEnums
.
getType
());
String
url
=
excelDto
.
getClassUrl
();
Class
<?>
clz
=
Class
.
forName
(
url
);
ExcelUtil
.
createTemplate
(
response
,
excelDto
.
getFileName
(),
excelDto
.
getSheetName
(),
null
,
clz
,
getToken
(),
getAppKey
(),
getProduct
(),
true
);
}
//
}
}
/**
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-equip-biz/src/main/java/com/yeejoin/equipmanage/dto/EquipmentDetailExcelSingleTemplateDto.java
View file @
af8cf19e
package
com
.
yeejoin
.
equipmanage
.
dto
;
import
com.alibaba.excel.annotation.ExcelProperty
;
import
com.yeejoin.equipmanage.utils.ExplicitConstraint
;
import
com.yeejoin.equipmanage.utils.RoleNameExplicitConstraint
;
/**
* @author litw
...
...
@@ -47,5 +49,15 @@ public class EquipmentDetailExcelSingleTemplateDto {
@ExcelProperty
(
value
=
"消防系统编码"
,
index
=
9
)
//@Excel(name = "消防系统编码", width = 30, orderNum = "10")
private
String
fightingSysCodes
;
@ExplicitConstraint
(
indexNum
=
10
,
sourceClass
=
RoleNameExplicitConstraint
.
class
,
method
=
"getEquipFireTeam"
)
//动态下拉内容
@ExcelProperty
(
value
=
"所属队伍"
,
index
=
10
)
//@Excel(name = "所属队伍",width = 30,orderNum = "11")
private
String
fireTeam
;
//动态下拉内容
@ExplicitConstraint
(
indexNum
=
11
,
sourceClass
=
RoleNameExplicitConstraint
.
class
,
method
=
"getEquipCompany"
)
//动态下拉内容
@ExcelProperty
(
value
=
"所属单位"
,
index
=
11
)
//@Excel(name = "所属单位",width = 30,orderNum = "12")
private
String
companyName
;
}
amos-boot-module/amos-boot-module-biz/amos-boot-module-equip-biz/src/main/java/com/yeejoin/equipmanage/service/IBuilldService.java
View file @
af8cf19e
...
...
@@ -110,6 +110,7 @@ public interface IBuilldService extends IService<Building> {
* @param bizOrgCode
*/
List
<
PointTreeVo
>
getBuildTree
(
String
bizOrgCode
);
List
<
PointTreeVo
>
getBuildTreeNot
(
String
bizOrgCode
);
/**
* 获取 建筑装备树
*
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-equip-biz/src/main/java/com/yeejoin/equipmanage/service/impl/BuildingServiceImpl.java
View file @
af8cf19e
...
...
@@ -485,6 +485,29 @@ public class BuildingServiceImpl extends ServiceImpl<BuildingMapper, Building> i
}
@Override
public
List
<
PointTreeVo
>
getBuildTreeNot
(
String
bizOrgCode
)
{
List
<
PointTreeVo
>
responses
=
this
.
baseMapper
.
getBuildList
(
bizOrgCode
);
List
<
PointTreeVo
>
treeList
=
new
ArrayList
<>();
for
(
PointTreeVo
tree
:
responses
)
{
if
(
tree
.
getParentId
()
==
null
||
tree
.
getParentId
()
==
-
1
)
{
treeList
.
add
(
tree
);
}
for
(
PointTreeVo
treeNode
:
responses
)
{
if
(
tree
.
getSequenceNbr
().
equals
(
treeNode
.
getParentId
()))
{
if
(
tree
.
getChildren
()
==
null
)
{
tree
.
setChildren
(
new
ArrayList
<>());
}
tree
.
getChildren
().
add
(
treeNode
);
}
}
}
return
treeList
;
}
@Override
public
List
<
PointTreeVo
>
get3dBuildTree
()
{
List
<
PointTreeVo
>
responses
=
this
.
baseMapper
.
getBuildList
(
null
);
return
fireFightingSystemService
.
transferListTo3dPointTree
(
responses
);
...
...
@@ -1152,13 +1175,19 @@ public class BuildingServiceImpl extends ServiceImpl<BuildingMapper, Building> i
}).
collect
(
Collectors
.
toList
());
// 3.将建筑的bizOrgCode转换为parentId连接树 ,拼接数据准备
Map
<
String
,
Long
>
comMap
=
companyList
.
stream
().
collect
(
Collectors
.
toMap
(
BuildingTreeVo:
:
getBizOrgCode
,
BuildingTreeVo:
:
getId
));
buildingTreeVos
.
forEach
(
b
->
{
//增加了一层对树的过滤,过滤掉指定公司外的其他建筑。
List
<
BuildingTreeVo
>
collect
=
buildingTreeVos
.
stream
().
filter
(
build
->
companyList
.
stream
().
map
(
m
->
{
String
bizOrgCode
=
m
.
getBizOrgCode
();
return
bizOrgCode
;
}).
collect
(
Collectors
.
toList
()).
contains
(
build
.
getBizOrgCode
())).
collect
(
Collectors
.
toList
());
collect
.
forEach
(
b
->
{
b
.
setParentId
(
"0"
.
equals
(
b
.
getParentId
())
?
String
.
valueOf
(
comMap
.
get
(
b
.
getBizOrgCode
()))
:
b
.
getParentId
());
b
.
setDetailPaneApi
(
address
);
b
.
setApiUrl
(
apiUrl
);
});
// 4.组装树
companyList
.
addAll
(
buildingTreeVos
);
companyList
.
addAll
(
collect
);
return
companyList
;
}
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-equip-biz/src/main/java/com/yeejoin/equipmanage/service/impl/FireFightingSystemServiceImpl.java
View file @
af8cf19e
...
...
@@ -983,12 +983,12 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
@Override
public
Object
getEquipmentTypeAndCount
(
String
bizOrgCode
)
{
if
(
redisUtils
.
hasKey
(
equipTypeAndCount
+
bizOrgCode
))
{
return
JSONArray
.
parseArray
(
JSONArray
.
toJSONString
(
redisUtils
.
get
(
equipTypeAndCount
+
bizOrgCode
)),
EquipmentCategory
.
class
);
}
else
{
//
if (redisUtils.hasKey(equipTypeAndCount + bizOrgCode)) {
//
return JSONArray.parseArray(
//
JSONArray.toJSONString(redisUtils.get(equipTypeAndCount + bizOrgCode)), EquipmentCategory.class);
//
} else {
return
refreshEquipmentTypeAndCount
(
bizOrgCode
);
}
//
}
}
@Override
...
...
@@ -998,7 +998,8 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
return
null
;
}
List
<
EquipmentCategory
>
equipmentTypeList
=
responseList
.
stream
()
.
filter
(
i
->
!
i
.
getCode
().
startsWith
(
"2"
)
&&
"2"
.
equals
(
i
.
getIndustryCode
()))
.
filter
(
i
->
!
i
.
getCode
().
startsWith
(
"2"
)
&&
"2"
.
equals
(
i
.
getIndustryCode
()))
.
filter
(
m
->!
m
.
getCode
().
startsWith
(
"9306"
)
&&
"2"
.
equals
(
m
.
getIndustryCode
()))
.
collect
(
Collectors
.
toList
());
List
<
EquipmentCategory
>
list
=
typeListTree
(
equipmentTypeList
,
bizOrgCode
,
SourceTypeEnum
.
EQUIPMENT
);
redisUtils
.
set
(
equipTypeAndCount
+
bizOrgCode
,
list
,
86400
);
...
...
amos-boot-system-jcs/src/main/resources/db/changelog/jcs-1.0.0.0.xml
View file @
af8cf19e
...
...
@@ -2770,5 +2770,52 @@
END#
</sql>
</changeSet>
<changeSet
author=
"tw"
id=
"20220217-1"
runAlways=
"true"
>
<comment>
`getParentListCode`
</comment>
<sql
endDelimiter=
"#"
>
DROP FUNCTION IF EXISTS `getParentListCode`#
CREATE DEFINER=`root`@`%` FUNCTION `getParentListCode`(rootId varchar(100)) RETURNS varchar(2000) CHARSET latin1
BEGIN
DECLARE i varchar(2000) default '';
DECLARE j varchar(1000) default rootId;
WHILE rootId is not null do
SET i =(SELECT parent FROM cb_data_dictionary WHERE sequence_nbr = rootId);
IF i is not null THEN
SET j = concat(i, ',', j);
SET rootId = i;
ELSE
SET rootId = i;
END IF;
END WHILE;
return j;
END#
</sql>
</changeSet>
<changeSet
author=
"tw"
id=
"20220217-2"
runAlways=
"true"
>
<comment>
`getChildLstCode`
</comment>
<sql
endDelimiter=
"#"
>
DROP FUNCTION IF EXISTS `getChildLstCode`#
CREATE DEFINER=`root`@`%` FUNCTION `getChildLstCode`(rootId varchar(100)) RETURNS varchar(2000) CHARSET latin1
BEGIN
DECLARE i varchar(2000) default '';
DECLARE j varchar(1000) default rootId;
WHILE rootId is not null do
SET i =(SELECT group_concat(sequence_nbr) FROM cb_data_dictionary WHERE parent in ( rootId) );
IF i is not null THEN
SET j = concat(i, ',', j);
SET rootId = i;
ELSE
SET rootId = i;
END IF;
END WHILE;
return j;
END#
</sql>
</changeSet>
</databaseChangeLog>
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