Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
F
fill-system
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
廖旭伟
fill-system
Commits
699ec18f
Commit
699ec18f
authored
Nov 14, 2023
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加同步皮肤接口
parent
aaeb8c9c
Pipeline
#2677
canceled with stages
Changes
18
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
228 additions
and
363 deletions
+228
-363
fill-manager/src/main/java/com/mortals/xhx/base/system/resource/service/impl/ResourceServiceImpl.java
...ase/system/resource/service/impl/ResourceServiceImpl.java
+0
-1
fill-manager/src/main/java/com/mortals/xhx/base/system/resource/web/ResourceController.java
...tals/xhx/base/system/resource/web/ResourceController.java
+8
-14
fill-manager/src/main/java/com/mortals/xhx/base/system/resource/web/ResourceForm.java
...om/mortals/xhx/base/system/resource/web/ResourceForm.java
+0
-47
fill-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleAuthServiceImpl.java
...hx/base/system/role/service/impl/RoleAuthServiceImpl.java
+33
-14
fill-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleServiceImpl.java
...ls/xhx/base/system/role/service/impl/RoleServiceImpl.java
+8
-9
fill-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleUserServiceImpl.java
...hx/base/system/role/service/impl/RoleUserServiceImpl.java
+38
-13
fill-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleAuthController.java
.../mortals/xhx/base/system/role/web/RoleAuthController.java
+2
-8
fill-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleAuthForm.java
...va/com/mortals/xhx/base/system/role/web/RoleAuthForm.java
+0
-47
fill-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleController.java
.../com/mortals/xhx/base/system/role/web/RoleController.java
+5
-9
fill-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleForm.java
...n/java/com/mortals/xhx/base/system/role/web/RoleForm.java
+0
-58
fill-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleUserController.java
.../mortals/xhx/base/system/role/web/RoleUserController.java
+7
-12
fill-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleUserForm.java
...va/com/mortals/xhx/base/system/role/web/RoleUserForm.java
+0
-47
fill-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntityExt.java
...com/mortals/xhx/base/system/user/model/UserEntityExt.java
+4
-2
fill-manager/src/main/java/com/mortals/xhx/base/system/user/service/UserService.java
...com/mortals/xhx/base/system/user/service/UserService.java
+11
-12
fill-manager/src/main/java/com/mortals/xhx/base/system/user/service/impl/UserServiceImpl.java
...ls/xhx/base/system/user/service/impl/UserServiceImpl.java
+74
-64
fill-manager/src/main/java/com/mortals/xhx/common/key/ParamKey.java
...er/src/main/java/com/mortals/xhx/common/key/ParamKey.java
+2
-0
fill-manager/src/main/java/com/mortals/xhx/common/utils/MenuEncodeUtil.java
...ain/java/com/mortals/xhx/common/utils/MenuEncodeUtil.java
+30
-0
fill-manager/src/main/java/com/mortals/xhx/module/skin/service/impl/SkinServiceImpl.java
...mortals/xhx/module/skin/service/impl/SkinServiceImpl.java
+6
-6
No files found.
fill-manager/src/main/java/com/mortals/xhx/base/system/resource/service/impl/ResourceServiceImpl.java
View file @
699ec18f
...
...
@@ -15,7 +15,6 @@ import com.mortals.xhx.base.system.resource.dao.ResourceDao;
import
com.mortals.xhx.base.system.resource.model.ResourceEntity
;
import
com.mortals.xhx.base.system.resource.model.ResourceQuery
;
import
com.mortals.xhx.base.system.resource.service.ResourceService
;
import
org.springframework.stereotype.Service
;
import
java.util.HashSet
;
...
...
fill-manager/src/main/java/com/mortals/xhx/base/system/resource/web/ResourceController.java
View file @
699ec18f
package
com.mortals.xhx.base.system.resource.web
;
import
java.util.HashMap
;
import
java.util.Map
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mortals.framework.common.IBaseEnum
;
import
com.mortals.framework.common.code.UserType
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.web.BaseCRUDJsonBodyMappingController
;
import
com.mortals.xhx.base.system.resource.model.ResourceEntity
;
import
com.mortals.xhx.base.system.resource.service.ResourceService
;
import
com.mortals.xhx.common.code.AuthType
;
import
com.mortals.xhx.common.code.SourceType
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.web.BaseCRUDJsonMappingController
;
import
com.mortals.xhx.base.system.resource.model.ResourceEntity
;
import
com.mortals.xhx.base.system.resource.service.ResourceService
;
import
com.mortals.xhx.common.code.AuthType
;
import
com.mortals.xhx.common.code.SourceType
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* 资源信息
...
...
@@ -35,7 +30,6 @@ import com.mortals.xhx.common.code.SourceType;
public
class
ResourceController
extends
BaseCRUDJsonBodyMappingController
<
ResourceService
,
ResourceEntity
,
Long
>
{
public
ResourceController
(){
super
.
setFormClass
(
ResourceForm
.
class
);
super
.
setModuleDesc
(
"资源信息"
);
}
...
...
fill-manager/src/main/java/com/mortals/xhx/base/system/resource/web/ResourceForm.java
deleted
100644 → 0
View file @
aaeb8c9c
/**
* 文件:ResourceForm.java
* 版本:1.0.0
* 日期:
* Copyright ®
* All right reserved.
*/
package
com.mortals.xhx.base.system.resource.web
;
import
com.mortals.framework.web.BaseCRUDFormLong
;
import
com.mortals.xhx.base.system.resource.model.ResourceEntity
;
import
com.mortals.xhx.base.system.resource.model.ResourceQuery
;
/**
* <p>Title: 资源信息</p>
* <p>Description: ResourceForm </p>
* <p>Copyright: Copyright ® </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public
class
ResourceForm
extends
BaseCRUDFormLong
<
ResourceEntity
>
{
private
ResourceEntity
entity
=
new
ResourceEntity
();
private
ResourceQuery
query
=
new
ResourceQuery
();
public
ResourceForm
(){
}
@Override
public
ResourceEntity
getEntity
()
{
return
entity
;
}
public
void
setEntity
(
ResourceEntity
entity
)
{
this
.
entity
=
entity
;
}
@Override
public
ResourceQuery
getQuery
()
{
return
query
;
}
public
void
setQuery
(
ResourceQuery
query
)
{
this
.
query
=
query
;
}
}
\ No newline at end of file
fill-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleAuthServiceImpl.java
View file @
699ec18f
/**
* 文件:RoleAuthServiceImpl.java
* 版本:1.0.0
* 日期:
* Copyright ®
* All right reserved.
*/
* 文件:RoleAuthServiceImpl.java
* 版本:1.0.0
* 日期:
* Copyright ®
* All right reserved.
*/
package
com.mortals.xhx.base.system.role.service.impl
;
import
com.mortals.framework.service.ICacheService
;
import
com.mortals.framework.service.impl.AbstractCRUDServiceImpl
;
import
com.mortals.framework.util.DataUtil
;
import
com.mortals.xhx.base.system.resource.service.ResourceService
;
import
com.mortals.xhx.base.system.role.dao.RoleAuthDao
;
import
com.mortals.xhx.base.system.role.model.RoleAuthEntity
;
import
com.mortals.xhx.base.system.role.model.RoleAuthQuery
;
import
com.mortals.xhx.base.system.role.service.RoleAuthService
;
import
com.mortals.xhx.common.key.RedisKey
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
import
static
com
.
mortals
.
xhx
.
common
.
utils
.
MenuEncodeUtil
.
generateMenuUrlCode
;
/**
* <p>Title: 角色资源权限</p>
* <p>Description: RoleAuthServiceImpl service接口 </p>
* <p>Copyright: Copyright ® </p>
* <p>Company: </p>
* @author
* @author
* @version 1.0.0
*/
@Service
(
"roleAuthService"
)
public
class
RoleAuthServiceImpl
extends
AbstractCRUDServiceImpl
<
RoleAuthDao
,
RoleAuthEntity
,
Long
>
implements
RoleAuthService
{
public
class
RoleAuthServiceImpl
extends
AbstractCRUDServiceImpl
<
RoleAuthDao
,
RoleAuthEntity
,
Long
>
implements
RoleAuthService
{
@Autowired
private
ICacheService
cacheService
;
@Autowired
private
ResourceService
resourceService
;
@Override
public
void
doDistributionSource
(
RoleAuthQuery
query
)
{
...
...
@@ -49,6 +56,18 @@ public class RoleAuthServiceImpl extends AbstractCRUDServiceImpl<RoleAuthDao,Rol
list
.
add
(
entity
);
}
this
.
dao
.
insertBatch
(
list
);
this
.
updateUserMenuUrlCache
();
}
private
void
updateUserMenuUrlCache
()
{
//更新用户菜单
Set
<
String
>
hkeys
=
cacheService
.
hkeys
(
RedisKey
.
KEY_USER_MENU_CACHE
);
for
(
String
userId
:
hkeys
)
{
Set
<
String
>
urls
=
resourceService
.
findUrlSetByUserId
(
DataUtil
.
converStr2Long
(
userId
,
0L
));
String
menuUrlCode
=
generateMenuUrlCode
(
urls
);
cacheService
.
hset
(
RedisKey
.
KEY_USER_MENU_CACHE
,
userId
,
menuUrlCode
);
}
}
}
\ No newline at end of file
fill-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleServiceImpl.java
View file @
699ec18f
/**
* 文件:RoleServiceImpl.java
* 版本:1.0.0
* 日期:
* Copyright ®
* All right reserved.
*/
* 文件:RoleServiceImpl.java
* 版本:1.0.0
* 日期:
* Copyright ®
* All right reserved.
*/
package
com.mortals.xhx.base.system.role.service.impl
;
...
...
@@ -15,7 +15,6 @@ import com.mortals.xhx.base.system.role.dao.RoleDao;
import
com.mortals.xhx.base.system.role.model.*
;
import
com.mortals.xhx.base.system.role.service.RoleAuthService
;
import
com.mortals.xhx.base.system.role.service.RoleService
;
import
com.mortals.xhx.base.system.role.service.RoleUserService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -27,7 +26,7 @@ import java.util.Arrays;
* <p>Description: RoleServiceImpl service接口 </p>
* <p>Copyright: Copyright ® </p>
* <p>Company: </p>
* @author
* @author
* @version 1.0.0
*/
@Service
(
"roleService"
)
...
...
@@ -56,5 +55,5 @@ public class RoleServiceImpl extends AbstractCRUDServiceImpl<RoleDao,RoleEntity,
}).
count
();
super
.
removeAfter
(
ids
,
context
,
result
);
}
}
\ No newline at end of file
fill-manager/src/main/java/com/mortals/xhx/base/system/role/service/impl/RoleUserServiceImpl.java
View file @
699ec18f
/**
* 文件:RoleUserServiceImpl.java
* 版本:1.0.0
* 日期:
* Copyright ®
* All right reserved.
*/
* 文件:RoleUserServiceImpl.java
* 版本:1.0.0
* 日期:
* Copyright ®
* All right reserved.
*/
package
com.mortals.xhx.base.system.role.service.impl
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.service.ICacheService
;
import
com.mortals.framework.service.impl.AbstractCRUDServiceImpl
;
import
com.mortals.framework.util.DataUtil
;
import
com.mortals.xhx.base.system.resource.service.ResourceService
;
import
com.mortals.xhx.base.system.role.dao.RoleUserDao
;
import
com.mortals.xhx.base.system.role.model.RoleUserEntity
;
import
com.mortals.xhx.base.system.role.model.RoleUserQuery
;
import
com.mortals.xhx.base.system.role.service.RoleUserService
;
import
com.mortals.xhx.common.key.RedisKey
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
import
static
com
.
mortals
.
xhx
.
common
.
utils
.
MenuEncodeUtil
.
generateMenuUrlCode
;
/**
* <p>Title: 角色用户</p>
* <p>Description: RoleUserServiceImpl service接口 </p>
* <p>Copyright: Copyright ® </p>
* <p>Company: </p>
* @author
* @author
* @version 1.0.0
*/
@Service
(
"roleUserService"
)
public
class
RoleUserServiceImpl
extends
AbstractCRUDServiceImpl
<
RoleUserDao
,
RoleUserEntity
,
Long
>
implements
RoleUserService
{
public
class
RoleUserServiceImpl
extends
AbstractCRUDServiceImpl
<
RoleUserDao
,
RoleUserEntity
,
Long
>
implements
RoleUserService
{
@Autowired
private
ICacheService
cacheService
;
@Autowired
private
ResourceService
resourceService
;
@Override
public
void
doDistributionUser
(
RoleUserQuery
query
)
{
...
...
@@ -50,6 +60,7 @@ public class RoleUserServiceImpl extends AbstractCRUDServiceImpl<RoleUserDao,Rol
list
.
add
(
rolseUser
);
}
this
.
dao
.
insertBatch
(
list
);
updateUserMenuUrlCache
();
}
@Override
...
...
@@ -68,8 +79,22 @@ public class RoleUserServiceImpl extends AbstractCRUDServiceImpl<RoleUserDao,Rol
list
.
add
(
rolseUser
);
}
this
.
dao
.
insertBatch
(
list
);
updateUserMenuUrlCache
();
}
@Override
protected
void
removeAfter
(
Long
[]
ids
,
Context
context
,
int
result
)
throws
AppException
{
updateUserMenuUrlCache
();
}
private
void
updateUserMenuUrlCache
()
{
//更新用户菜单
Set
<
String
>
hkeys
=
cacheService
.
hkeys
(
RedisKey
.
KEY_USER_MENU_CACHE
);
for
(
String
userId
:
hkeys
)
{
Set
<
String
>
urls
=
resourceService
.
findUrlSetByUserId
(
DataUtil
.
converStr2Long
(
userId
,
0L
));
String
menuUrlCode
=
generateMenuUrlCode
(
urls
);
cacheService
.
hset
(
RedisKey
.
KEY_USER_MENU_CACHE
,
userId
,
menuUrlCode
);
}
}
}
\ No newline at end of file
fill-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleAuthController.java
View file @
699ec18f
...
...
@@ -3,20 +3,15 @@ package com.mortals.xhx.base.system.role.web;
import
com.alibaba.fastjson.JSONObject
;
import
com.mortals.framework.web.BaseCRUDJsonBodyMappingController
;
import
com.mortals.xhx.base.system.role.model.RoleAuthEntity
;
import
com.mortals.xhx.base.system.role.model.RoleAuthQuery
;
import
com.mortals.xhx.base.system.role.service.RoleAuthService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.mortals.framework.web.BaseCRUDJsonMappingController
;
import
com.mortals.xhx.base.system.role.model.RoleAuthEntity
;
import
com.mortals.xhx.base.system.role.service.RoleAuthService
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
/**
* 角色资源权限
*
...
...
@@ -29,7 +24,6 @@ import javax.servlet.http.HttpServletResponse;
public
class
RoleAuthController
extends
BaseCRUDJsonBodyMappingController
<
RoleAuthService
,
RoleAuthEntity
,
Long
>
{
public
RoleAuthController
()
{
super
.
setFormClass
(
RoleAuthForm
.
class
);
super
.
setModuleDesc
(
"角色资源权限"
);
}
...
...
fill-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleAuthForm.java
deleted
100644 → 0
View file @
aaeb8c9c
/**
* 文件:RoleAuthForm.java
* 版本:1.0.0
* 日期:
* Copyright ®
* All right reserved.
*/
package
com.mortals.xhx.base.system.role.web
;
import
com.mortals.framework.web.BaseCRUDFormLong
;
import
com.mortals.xhx.base.system.role.model.RoleAuthEntity
;
import
com.mortals.xhx.base.system.role.model.RoleAuthQuery
;
/**
* <p>Title: 角色资源权限</p>
* <p>Description: RoleAuthForm </p>
* <p>Copyright: Copyright ® </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public
class
RoleAuthForm
extends
BaseCRUDFormLong
<
RoleAuthEntity
>
{
private
RoleAuthEntity
entity
=
new
RoleAuthEntity
();
private
RoleAuthQuery
query
=
new
RoleAuthQuery
();
public
RoleAuthForm
(){
}
@Override
public
RoleAuthEntity
getEntity
()
{
return
entity
;
}
public
void
setEntity
(
RoleAuthEntity
entity
)
{
this
.
entity
=
entity
;
}
@Override
public
RoleAuthQuery
getQuery
()
{
return
query
;
}
public
void
setQuery
(
RoleAuthQuery
query
)
{
this
.
query
=
query
;
}
}
\ No newline at end of file
fill-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleController.java
View file @
699ec18f
...
...
@@ -5,21 +5,18 @@ import com.alibaba.fastjson.JSONObject;
import
com.mortals.framework.common.IBaseEnum
;
import
com.mortals.framework.common.code.UserType
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.web.BaseCRUDJsonBodyMappingController
;
import
com.mortals.framework.web.BasePhpCRUDJsonMappingController
;
import
com.mortals.xhx.base.system.role.model.RoleQuery
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
com.mortals.framework.web.BaseCRUDJsonMappingController
;
import
com.mortals.xhx.base.system.role.model.RoleEntity
;
import
com.mortals.xhx.base.system.role.model.RoleUserEntity
;
import
com.mortals.xhx.base.system.role.service.RoleService
;
import
com.mortals.xhx.base.system.role.service.RoleUserService
;
import
com.mortals.xhx.common.code.RoleType
;
import
org.springframework.beans.factory.annotation.Autowired
;
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
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
...
...
@@ -39,7 +36,6 @@ public class RoleController extends BaseCRUDJsonBodyMappingController<RoleServic
private
RoleUserService
roleUserService
;
public
RoleController
(){
super
.
setFormClass
(
RoleForm
.
class
);
super
.
setModuleDesc
(
"角色信息"
);
}
...
...
fill-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleForm.java
deleted
100644 → 0
View file @
aaeb8c9c
/**
* 文件:RoleForm.java
* 版本:1.0.0
* 日期:
* Copyright ®
* All right reserved.
*/
package
com.mortals.xhx.base.system.role.web
;
import
com.mortals.framework.web.BaseCRUDFormLong
;
import
com.mortals.xhx.base.system.role.model.RoleEntity
;
import
com.mortals.xhx.base.system.role.model.RoleQuery
;
/**
* <p>Title: 角色信息</p>
* <p>Description: RoleForm </p>
* <p>Copyright: Copyright ® </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public
class
RoleForm
extends
BaseCRUDFormLong
<
RoleEntity
>
{
private
RoleEntity
entity
=
new
RoleEntity
();
private
RoleQuery
query
=
new
RoleQuery
();
/** 用户ID */
private
Long
userId
;
public
RoleForm
(){
}
@Override
public
RoleEntity
getEntity
()
{
return
entity
;
}
public
void
setEntity
(
RoleEntity
entity
)
{
this
.
entity
=
entity
;
}
@Override
public
RoleQuery
getQuery
()
{
return
query
;
}
public
void
setQuery
(
RoleQuery
query
)
{
this
.
query
=
query
;
}
public
Long
getUserId
()
{
return
userId
;
}
public
void
setUserId
(
Long
userId
)
{
this
.
userId
=
userId
;
}
}
\ No newline at end of file
fill-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleUserController.java
View file @
699ec18f
...
...
@@ -7,26 +7,22 @@ import com.mortals.framework.ap.SysConstains;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.BaseEntityLong
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.web.BaseCRUDJsonBodyMappingController
;
import
com.mortals.xhx.base.system.role.model.RoleUserQuery
;
import
org.apache.commons.beanutils.MethodUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.mortals.framework.web.BaseCRUDJsonMappingController
;
import
com.mortals.xhx.base.system.role.model.RoleEntity
;
import
com.mortals.xhx.base.system.role.model.RoleUserEntity
;
import
com.mortals.xhx.base.system.role.model.RoleUserQuery
;
import
com.mortals.xhx.base.system.role.service.RoleService
;
import
com.mortals.xhx.base.system.role.service.RoleUserService
;
import
com.mortals.xhx.base.system.user.model.UserEntity
;
import
com.mortals.xhx.base.system.user.model.UserQuery
;
import
com.mortals.xhx.base.system.user.service.UserService
;
import
org.apache.commons.beanutils.MethodUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -49,7 +45,6 @@ public class RoleUserController extends BaseCRUDJsonBodyMappingController<RoleUs
private
UserService
userService
;
public
RoleUserController
()
{
super
.
setFormClass
(
RoleUserForm
.
class
);
super
.
setModuleDesc
(
"角色用户"
);
}
...
...
fill-manager/src/main/java/com/mortals/xhx/base/system/role/web/RoleUserForm.java
deleted
100644 → 0
View file @
aaeb8c9c
/**
* 文件:RoleUserForm.java
* 版本:1.0.0
* 日期:
* Copyright ®
* All right reserved.
*/
package
com.mortals.xhx.base.system.role.web
;
import
com.mortals.framework.web.BaseCRUDFormLong
;
import
com.mortals.xhx.base.system.role.model.RoleUserEntity
;
import
com.mortals.xhx.base.system.role.model.RoleUserQuery
;
/**
* <p>Title: 角色用户</p>
* <p>Description: RoleUserForm </p>
* <p>Copyright: Copyright ® </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
public
class
RoleUserForm
extends
BaseCRUDFormLong
<
RoleUserEntity
>
{
private
RoleUserEntity
entity
=
new
RoleUserEntity
();
private
RoleUserQuery
query
=
new
RoleUserQuery
();
public
RoleUserForm
(){
}
@Override
public
RoleUserEntity
getEntity
()
{
return
entity
;
}
public
void
setEntity
(
RoleUserEntity
entity
)
{
this
.
entity
=
entity
;
}
@Override
public
RoleUserQuery
getQuery
()
{
return
query
;
}
public
void
setQuery
(
RoleUserQuery
query
)
{
this
.
query
=
query
;
}
}
\ No newline at end of file
fill-manager/src/main/java/com/mortals/xhx/base/system/user/model/UserEntityExt.java
View file @
699ec18f
...
...
@@ -35,8 +35,10 @@ public class UserEntityExt extends BaseEntityLong {
* 过期时间
*/
private
Long
expireTime
;
/**
* 所属区域code,多个逗号分隔
*/
private
String
areaCodes
;
}
\ No newline at end of file
fill-manager/src/main/java/com/mortals/xhx/base/system/user/service/UserService.java
View file @
699ec18f
...
...
@@ -10,7 +10,7 @@ package com.mortals.xhx.base.system.user.service;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.Result
;
import
com.mortals.framework.service.ICRUDService
;
import
com.mortals.framework.service.ICRUD
Cache
Service
;
import
com.mortals.framework.service.IUser
;
import
com.mortals.xhx.base.system.menu.model.MenuEntity
;
import
com.mortals.xhx.base.system.user.dao.UserDao
;
...
...
@@ -28,7 +28,7 @@ import java.util.Set;
* @version 1.0.0
*/
public
interface
UserService
extends
ICRUDService
<
UserEntity
,
Long
>
{
public
interface
UserService
extends
ICRUD
Cache
Service
<
UserEntity
,
Long
>
{
/**
* 用户登录
*
...
...
@@ -38,7 +38,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @return
* @throws AppException
*/
UserEntity
doLogin
(
String
loginName
,
String
password
,
String
loginIp
)
throws
AppException
;
public
UserEntity
doLogin
(
String
loginName
,
String
password
,
String
loginIp
)
throws
AppException
;
/**
* 校验用户名与密码是否正确
...
...
@@ -48,7 +48,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @return
* @throws AppException
*/
UserEntity
doCheckUser
(
String
loginName
,
String
password
)
throws
AppException
;
public
UserEntity
doCheckUser
(
String
loginName
,
String
password
)
throws
AppException
;
/**
* 检查用户是否存在
...
...
@@ -57,7 +57,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @param userId 密码
* @return
*/
boolean
existUser
(
String
loginName
,
Long
userId
)
throws
AppException
;
public
boolean
existUser
(
String
loginName
,
Long
userId
)
throws
AppException
;
/**
* 通过登录用户获取菜单功能权限
...
...
@@ -65,7 +65,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @param user
* @return
*/
List
<
MenuEntity
>
findOutlookBarList
(
IUser
user
);
public
List
<
MenuEntity
>
findOutlookBarList
(
IUser
user
);
/**
* 查询用户所有有权限的菜单ID
...
...
@@ -73,7 +73,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @param userEntity
* @return
*/
Set
<
Long
>
findAllAuthIds
(
UserEntity
userEntity
)
throws
AppException
;
public
Set
<
Long
>
findAllAuthIds
(
UserEntity
userEntity
)
throws
AppException
;
/**
* 查询用户记录
...
...
@@ -85,7 +85,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @return
* @throws AppException
*/
Result
<
UserEntity
>
find
(
Long
platformId
,
UserEntity
params
,
int
currPage
,
int
prePageResult
)
throws
AppException
;
public
Result
<
UserEntity
>
find
(
Long
platformId
,
UserEntity
params
,
int
currPage
,
int
prePageResult
)
throws
AppException
;
/**
* 为客户创建用户
...
...
@@ -100,7 +100,7 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @return
* @throws AppException
*/
UserEntity
createUser
(
IUser
currUser
,
Long
customerId
,
String
customerName
,
String
loginName
,
String
password
,
public
UserEntity
createUser
(
IUser
currUser
,
Long
customerId
,
String
customerName
,
String
loginName
,
String
password
,
String
userName
,
String
mobile
)
throws
AppException
;
/**
...
...
@@ -112,10 +112,9 @@ public interface UserService extends ICRUDService<UserEntity,Long> {
* @return
* @throws AppException
*/
boolean
updateUserPwd
(
String
loginName
,
String
oldPwd
,
String
newPwd
)
throws
AppException
;
public
boolean
updateUserPwd
(
String
loginName
,
String
oldPwd
,
String
newPwd
)
throws
AppException
;
UserDao
getUserDao
();
UserDao
getUserDao
();
}
\ No newline at end of file
fill-manager/src/main/java/com/mortals/xhx/base/system/user/service/impl/UserServiceImpl.java
View file @
699ec18f
...
...
@@ -15,41 +15,35 @@ import com.mortals.framework.model.Context;
import
com.mortals.framework.model.PageInfo
;
import
com.mortals.framework.model.Result
;
import
com.mortals.framework.service.IUser
;
import
com.mortals.framework.service.impl.AbstractCRUDServiceImpl
;
import
com.mortals.framework.service.impl.AbstractCRUD
Cache
ServiceImpl
;
import
com.mortals.framework.util.SecurityUtil
;
import
com.mortals.framework.util.StringUtils
;
import
com.mortals.xhx.base.system.menu.model.MenuEntity
;
import
com.mortals.xhx.base.system.menu.service.MenuService
;
import
com.mortals.xhx.base.system.resource.model.ResourceEntity
;
import
com.mortals.xhx.base.system.resource.service.ResourceService
;
import
com.mortals.xhx.base.system.role.dao.RoleUserDao
;
import
com.mortals.xhx.base.system.role.model.RoleUserEntity
;
import
com.mortals.xhx.base.system.role.model.RoleUserQuery
;
import
com.mortals.xhx.base.system.role.service.RoleService
;
import
com.mortals.xhx.base.system.role.service.RoleUserService
;
import
com.mortals.xhx.base.system.user.dao.UserDao
;
import
com.mortals.xhx.base.system.user.model.UserEntity
;
import
com.mortals.xhx.base.system.user.model.UserQuery
;
import
com.mortals.xhx.base.system.user.service.UserService
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.ObjectUtils
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* <p>Title: 用户信息</p>
* <p>Description: UserServiceImpl service接口 </p>
* <p>Copyright: Copyright ® </p>
* <p>Company: </p>
*
* @author
* @version 1.0.0
*/
@Service
(
"userService"
)
public
class
UserServiceImpl
extends
AbstractCRUDServiceImpl
<
UserDao
,
UserEntity
,
Long
>
implements
UserService
{
public
class
UserServiceImpl
extends
AbstractCRUD
Cache
ServiceImpl
<
UserDao
,
UserEntity
,
Long
>
implements
UserService
{
@Autowired
...
...
@@ -57,9 +51,14 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
@Autowired
private
ResourceService
resourceService
;
@Autowired
private
RoleService
roleService
;
@Autowired
private
RoleUserService
roleUserService
;
private
RoleUserDao
roleUserDao
;
@Override
protected
String
getExtKey
(
UserEntity
data
)
{
return
data
.
getLoginName
();
}
private
void
doHandlerUser
(
UserEntity
entity
)
throws
AppException
{
if
(
StringUtils
.
isNotEmpty
(
entity
.
getLoginPwd
()))
{
...
...
@@ -71,58 +70,55 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
}
else
{
entity
.
setLoginPwd
(
null
);
}
// if (entity.isSystemUser()) {
// entity.setUserType(UserType.SYSTEM.getValue());
// } else {
// entity.setUserType(UserType.CUSTOMER.getValue());
// }
}
@Override
protected
void
saveBefore
(
UserEntity
entity
,
Context
context
)
throws
AppException
{
if
(!
ObjectUtils
.
isEmpty
(
entity
.
getLoginName
())
&&
existUser
(
entity
.
getLoginName
(),
entity
.
getId
()))
{
throw
new
AppException
(
"登录名已存在!"
);
}
this
.
doHandlerUser
(
entity
);
}
@Override
protected
void
updateBefore
(
UserEntity
entity
,
Context
context
)
throws
AppException
{
// if (entity.getId().longValue() == SysConstains.ADMIN_ID && !context.getUser().isAdmin()) {
// throw new AppException("你没有权限执行该操作");
// }
//更新不更新密码字段
entity
.
setLoginPwd
(
null
);
this
.
doHandlerUser
(
entity
);
//更新角色
if
(
entity
.
getId
().
longValue
()
!=
SysConstains
.
ADMIN_ID
&&!
ObjectUtils
.
isEmpty
(
entity
.
getRoleIds
())){
RoleUserQuery
roleUserQuery
=
new
RoleUserQuery
();
roleUserQuery
.
setUserId
(
entity
.
getId
());
List
<
Long
>
idList
=
Arrays
.
asList
(
entity
.
getRoleIds
().
split
(
","
)).
stream
().
map
(
Long:
:
parseLong
).
collect
(
Collectors
.
toList
());
roleUserQuery
.
setRoleIdList
(
idList
);
roleUserService
.
doDistributionRole
(
roleUserQuery
);
protected
void
saveAfter
(
UserEntity
entity
,
Context
context
)
throws
AppException
{
if
(
CollectionUtils
.
isNotEmpty
(
entity
.
getRoleIds
())){
List
<
RoleUserEntity
>
roleUserEntityList
=
new
ArrayList
<>();
entity
.
getRoleIds
().
stream
().
forEach
(
item
->{
RoleUserEntity
roleUserEntity
=
new
RoleUserEntity
();
roleUserEntity
.
setUserId
(
entity
.
getId
());
roleUserEntity
.
setRoleId
(
item
);
roleUserEntityList
.
add
(
roleUserEntity
);
});
roleUserDao
.
insertBatch
(
roleUserEntityList
);
}
}
@Override
protected
void
saveAfter
(
UserEntity
entity
,
Context
context
)
throws
AppException
{
//更新角色
if
(!
ObjectUtils
.
isEmpty
(
entity
.
getId
())&&
entity
.
getId
().
longValue
()
!=
SysConstains
.
ADMIN_ID
&&!
ObjectUtils
.
isEmpty
(
entity
.
getRoleIds
())){
RoleUserQuery
roleUserQuery
=
new
RoleUserQuery
();
roleUserQuery
.
setUserId
(
entity
.
getId
());
List
<
Long
>
idList
=
Arrays
.
asList
(
entity
.
getRoleIds
().
split
(
","
)).
stream
().
map
(
Long:
:
parseLong
).
collect
(
Collectors
.
toList
());
roleUserQuery
.
setRoleIdList
(
idList
);
roleUserService
.
doDistributionRole
(
roleUserQuery
);
protected
void
updateBefore
(
UserEntity
entity
,
Context
context
)
throws
AppException
{
if
(
entity
.
getId
().
longValue
()
==
SysConstains
.
ADMIN_ID
&&
!
context
.
getUser
().
isAdmin
())
{
throw
new
AppException
(
"你没有权限执行该操作"
);
}
super
.
saveAfter
(
entity
,
context
);
this
.
doHandlerUser
(
entity
);
}
@Override
protected
void
findAfter
(
UserEntity
params
,
PageInfo
pageInfo
,
Context
context
,
List
<
UserEntity
>
list
)
throws
AppException
{
list
.
stream
().
peek
(
item
->
{
RoleUserQuery
roleUserQuery
=
new
RoleUserQuery
();
roleUserQuery
.
setUserId
(
item
.
getId
());
String
roleIds
=
roleUserService
.
find
(
roleUserQuery
).
stream
().
map
(
RoleUserEntity:
:
getRoleId
).
map
(
String:
:
valueOf
).
collect
(
Collectors
.
joining
(
","
));
item
.
setRoleIds
(
roleIds
);
}).
count
();
super
.
findAfter
(
params
,
pageInfo
,
context
,
list
);
protected
void
updateAfter
(
UserEntity
entity
,
Context
context
)
throws
AppException
{
if
(
CollectionUtils
.
isNotEmpty
(
entity
.
getRoleIds
())){
List
<
RoleUserEntity
>
roleUserEntityList
=
new
ArrayList
<>();
entity
.
getRoleIds
().
stream
().
forEach
(
item
->{
RoleUserEntity
roleUserEntity
=
new
RoleUserEntity
();
roleUserEntity
.
setUserId
(
entity
.
getId
());
roleUserEntity
.
setRoleId
(
item
);
roleUserEntityList
.
add
(
roleUserEntity
);
});
RoleUserEntity
condition
=
new
RoleUserEntity
();
condition
.
setUserId
(
entity
.
getId
());
roleUserDao
.
delete
(
condition
);
roleUserDao
.
insertBatch
(
roleUserEntityList
);
}
}
@Override
...
...
@@ -141,6 +137,23 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
return
super
.
findBefore
(
params
,
pageInfo
,
context
);
}
@Override
protected
void
findAfter
(
UserEntity
params
,
PageInfo
pageInfo
,
Context
context
,
List
<
UserEntity
>
list
)
throws
AppException
{
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
list
.
stream
().
forEach
(
item
->{
RoleUserEntity
query
=
new
RoleUserEntity
();
query
.
setUserId
(
item
.
getId
());
List
<
RoleUserEntity
>
roleUserEntityList
=
roleUserDao
.
getList
(
query
);
List
<
Long
>
roleIds
=
new
ArrayList
<>();
roleUserEntityList
.
stream
().
forEach
(
role
->{
roleIds
.
add
(
role
.
getRoleId
());
});
item
.
setRoleIds
(
roleIds
);
});
//List<RoleUserEntity> roleUserEntityList =
}
}
public
UserEntity
findByLoginName
(
String
loginName
)
{
UserQuery
params
=
new
UserQuery
();
params
.
setLoginName
(
loginName
);
...
...
@@ -164,6 +177,11 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
}
catch
(
Exception
e
)
{
throw
new
AppException
(
"密码验认出错!"
,
e
);
}
UserEntity
update
=
new
UserEntity
();
update
.
setId
(
sysUser
.
getId
());
update
.
setLastLoginAddress
(
loginIp
);
update
.
setLastLoginTime
(
new
Date
());
this
.
dao
.
update
(
update
);
return
sysUser
;
}
...
...
@@ -207,7 +225,7 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
urls
.
addAll
(
StringUtils
.
converStr2Set
(
url
));
}
}
Set
<
Long
>
authIds
=
new
HashSet
<>();
Set
<
Long
>
authIds
=
new
HashSet
<
Long
>();
Map
<
Long
,
MenuEntity
>
menuMap
=
new
HashMap
<
Long
,
MenuEntity
>();
List
<
MenuEntity
>
userModuleList
=
this
.
menuService
.
findAllEnable
();
for
(
MenuEntity
sysModule
:
userModuleList
)
{
...
...
@@ -215,7 +233,6 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
continue
;
}
menuMap
.
put
(
sysModule
.
getId
(),
sysModule
);
if
(!
user
.
isAdmin
()
&&
urls
.
contains
(
StringUtils
.
trim
(
sysModule
.
getUrl
())))
{
authIds
.
add
(
sysModule
.
getId
());
}
...
...
@@ -264,6 +281,7 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
entity
.
initAttrValue
();
entity
.
setLoginName
(
loginName
);
entity
.
setRealName
(
userName
);
entity
.
setCustomerId
(
customerId
);
entity
.
setLoginPwd
(
password
);
entity
.
setMobile
(
mobile
);
entity
.
setUserType
(
UserType
.
CUSTOMER
.
getValue
());
...
...
@@ -309,6 +327,10 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
}
try
{
sysUser
.
setLoginPwd
(
SecurityUtil
.
md5DoubleEncoding
(
newPwd
));
sysUser
.
setLoginPwd3
(
sysUser
.
getLoginPwd2
());
sysUser
.
setLoginPwd2
(
sysUser
.
getLoginPwd1
());
sysUser
.
setLoginPwd1
(
sysUser
.
getLoginPwd
());
sysUser
.
setLastModPwdTime
(
new
Date
());
}
catch
(
Exception
e
)
{
throw
new
AppException
(
"密码转换异常!"
,
e
);
}
...
...
@@ -318,18 +340,6 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
@Override
public
UserDao
getUserDao
()
{
return
getDao
();
}
@Override
protected
void
removeAfter
(
Long
[]
ids
,
Context
context
,
int
result
)
throws
AppException
{
Arrays
.
asList
(
ids
).
stream
().
peek
(
userId
->{
RoleUserQuery
roleUserQuery
=
new
RoleUserQuery
();
roleUserQuery
.
setUserId
(
userId
);
Long
[]
userIds
=
roleUserService
.
find
(
roleUserQuery
).
stream
().
map
(
RoleUserEntity:
:
getId
).
toArray
(
Long
[]::
new
);
roleUserService
.
remove
(
userIds
,
context
);
}).
count
();
super
.
removeAfter
(
ids
,
context
,
result
);
return
this
.
getDao
();
}
}
\ No newline at end of file
fill-manager/src/main/java/com/mortals/xhx/common/key/ParamKey.java
View file @
699ec18f
...
...
@@ -15,4 +15,6 @@ public class ParamKey {
public
static
final
String
MATTER_RECOMMEND_COUNT
=
"matter:recommend"
;
/** 事项材料推荐个数 */
public
static
final
String
MATTER_DATUM_RECOMMEND_COUNT
=
"matter:datum:recommend"
;
public
static
final
String
KEY_USER_MENU_CACHE
=
"user:menu"
;
}
fill-manager/src/main/java/com/mortals/xhx/common/utils/MenuEncodeUtil.java
0 → 100644
View file @
699ec18f
package
com.mortals.xhx.common.utils
;
import
com.mortals.framework.ap.GlobalSysInfo
;
import
com.mortals.framework.ap.SysConstains
;
import
com.mortals.framework.util.AESUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.Set
;
@Slf4j
public
class
MenuEncodeUtil
{
public
static
String
generateMenuUrlCode
(
Set
<
String
>
urls
)
{
try
{
String
securityKey
=
GlobalSysInfo
.
getPropertyValue
(
SysConstains
.
PROP_COOKIE_SECURITY_KEY
);
StringBuilder
sb
=
new
StringBuilder
();
if
(
urls
!=
null
&&
urls
.
size
()
>
0
)
{
for
(
String
url
:
urls
)
{
int
index
=
url
.
hashCode
()
&
(
Integer
.
MAX_VALUE
-
1
);
sb
.
append
(
index
).
append
(
","
);
}
}
String
menuUrl
=
sb
.
toString
();
return
AESUtil
.
encrypt
(
menuUrl
,
securityKey
);
}
catch
(
Throwable
e
)
{
log
.
error
(
"编码异常"
,
e
);
return
null
;
}
}
}
fill-manager/src/main/java/com/mortals/xhx/module/skin/service/impl/SkinServiceImpl.java
View file @
699ec18f
...
...
@@ -72,8 +72,8 @@ public class SkinServiceImpl extends AbstractCRUDServiceImpl<SkinDao, SkinEntity
SkinEntity
skinEntity
=
new
SkinEntity
();
skinEntity
.
initAttrValue
();
//存相对地址
newSkin
.
setCssFilePath
(
"/
"
+
StrUtil
.
subAfter
(
newSkin
.
getCssFilePath
(),
"/
"
,
true
));
newSkin
.
setPreviewImagePath
(
"/
"
+
StrUtil
.
subAfter
(
newSkin
.
getPreviewImagePath
(),
"/
"
,
true
));
newSkin
.
setCssFilePath
(
"/
file"
+
StrUtil
.
subAfter
(
newSkin
.
getCssFilePath
(),
"/file
"
,
true
));
newSkin
.
setPreviewImagePath
(
"/
file"
+
StrUtil
.
subAfter
(
newSkin
.
getPreviewImagePath
(),
"/file
"
,
true
));
BeanUtils
.
copyProperties
(
newSkin
,
skinEntity
,
BeanUtil
.
getNullPropertyNames
(
newSkin
));
return
skinEntity
;
}).
collect
(
Collectors
.
toList
());
...
...
@@ -111,10 +111,10 @@ public class SkinServiceImpl extends AbstractCRUDServiceImpl<SkinDao, SkinEntity
}).
filter
(
f
->
f
!=
null
).
collect
(
Collectors
.
toList
());
//
if (!ObjectUtils.isEmpty(updateSkinLsit)) {
//
log.info("皮肤更新,size:{}", updateSkinLsit.size());
// skinService
.update(updateSkinLsit);
//
}
if
(!
ObjectUtils
.
isEmpty
(
updateSkinLsit
))
{
log
.
info
(
"皮肤更新,size:{}"
,
updateSkinLsit
.
size
());
this
.
update
(
updateSkinLsit
);
}
if
(!
ObjectUtils
.
isEmpty
(
saveSkinList
))
{
log
.
info
(
"皮肤新增,size:{}"
,
saveSkinList
.
size
());
...
...
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