Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
02e2b15a
提交
02e2b15a
authored
4月 03, 2019
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
后端:增加 InEnum 自定义 Validator ,用于校验传递的字段,在枚举范围内。
上级
e1db53e3
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
103 行增加
和
30 行删除
+103
-30
AdminService.java
...src/main/java/cn/iocoder/mall/admin/api/AdminService.java
+5
-3
AdminDO.java
...c/main/java/cn/iocoder/mall/admin/dataobject/AdminDO.java
+0
-9
AdminServiceImpl.java
.../java/cn/iocoder/mall/admin/service/AdminServiceImpl.java
+6
-15
CommonStatusEnum.java
...n/iocoder/common/framework/constant/CommonStatusEnum.java
+13
-3
IntArrayValuable.java
...va/cn/iocoder/common/framework/core/IntArrayValuable.java
+13
-0
InEnum.java
...in/java/cn/iocoder/common/framework/validator/InEnum.java
+27
-0
InEnumValidator.java
...n/iocoder/common/framework/validator/InEnumValidator.java
+39
-0
没有找到文件。
admin/admin-service-api/src/main/java/cn/iocoder/mall/admin/api/AdminService.java
浏览文件 @
02e2b15a
package
cn
.
iocoder
.
mall
.
admin
.
api
;
import
cn.iocoder.common.framework.constant.CommonStatusEnum
;
import
cn.iocoder.common.framework.validator.InEnum
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.admin.api.bo.AdminBO
;
import
cn.iocoder.mall.admin.api.bo.AdminPageBO
;
...
...
@@ -20,10 +22,11 @@ public interface AdminService {
CommonResult
<
Boolean
>
updateAdmin
(
Integer
adminId
,
AdminUpdateDTO
adminUpdateDTO
);
CommonResult
<
Boolean
>
updateAdminStatus
(
Integer
adminId
,
Integer
updateAdminId
,
Integer
status
);
CommonResult
<
Boolean
>
updateAdminStatus
(
Integer
adminId
,
Integer
updateAdminId
,
@InEnum
(
value
=
CommonStatusEnum
.
class
,
message
=
"修改状态必须是 {value}"
)
Integer
status
);
CommonResult
<
Boolean
>
deleteAdmin
(
Integer
adminId
,
Integer
updateAdminId
);
CommonResult
<
Boolean
>
assignRole
(
Integer
adminId
,
Integer
updateAdminId
,
Set
<
Integer
>
roleIds
);
}
\ No newline at end of file
}
admin/admin-service-impl/src/main/java/cn/iocoder/mall/admin/dataobject/AdminDO.java
浏览文件 @
02e2b15a
...
...
@@ -7,15 +7,6 @@ import cn.iocoder.common.framework.dataobject.DeletableDO;
*/
public
class
AdminDO
extends
DeletableDO
{
/**
* 账号状态 - 开启
*/
public
static
final
Integer
STATUS_ENABLE
=
1
;
/**
* 账号状态 - 禁用
*/
public
static
final
Integer
STATUS_DISABLE
=
2
;
/**
* 管理员编号
*/
...
...
admin/admin-service-impl/src/main/java/cn/iocoder/mall/admin/service/AdminServiceImpl.java
浏览文件 @
02e2b15a
package
cn
.
iocoder
.
mall
.
admin
.
service
;
import
cn.iocoder.common.framework.constant.CommonStatusEnum
;
import
cn.iocoder.common.framework.constant.DeletedStatusEnum
;
import
cn.iocoder.common.framework.constant.SysErrorCodeEnum
;
import
cn.iocoder.common.framework.util.ServiceExceptionUtil
;
import
cn.iocoder.common.framework.vo.CommonResult
;
import
cn.iocoder.mall.admin.api.AdminService
;
...
...
@@ -53,7 +53,7 @@ public class AdminServiceImpl implements AdminService {
return
ServiceExceptionUtil
.
error
(
AdminErrorCodeEnum
.
ADMIN_PASSWORD_ERROR
.
getCode
());
}
// 账号被禁用
if
(
AdminDO
.
STATUS_DISABLE
.
equals
(
admin
.
getStatus
()))
{
if
(
CommonStatusEnum
.
DISABLE
.
getValue
()
.
equals
(
admin
.
getStatus
()))
{
return
ServiceExceptionUtil
.
error
(
AdminErrorCodeEnum
.
ADMIN_IS_DISABLE
.
getCode
());
}
// 校验成功,返回管理员。并且,去掉一些非关键字段,考虑安全性。
...
...
@@ -87,7 +87,7 @@ public class AdminServiceImpl implements AdminService {
// 保存到数据库
AdminDO
admin
=
AdminConvert
.
INSTANCE
.
convert
(
adminAddDTO
)
.
setPassword
(
encodePassword
(
adminAddDTO
.
getPassword
()))
// 加密密码
.
setStatus
(
AdminDO
.
STATUS_ENABLE
);
.
setStatus
(
CommonStatusEnum
.
ENABLE
.
getValue
()
);
admin
.
setCreateTime
(
new
Date
());
admin
.
setDeleted
(
DeletedStatusEnum
.
DELETED_NO
.
getValue
());
adminMapper
.
insert
(
admin
);
...
...
@@ -118,10 +118,6 @@ public class AdminServiceImpl implements AdminService {
@Override
@Transactional
public
CommonResult
<
Boolean
>
updateAdminStatus
(
Integer
adminId
,
Integer
updateAdminId
,
Integer
status
)
{
// 校验参数
if
(!
isValidStatus
(
status
))
{
return
CommonResult
.
error
(
SysErrorCodeEnum
.
VALIDATION_REQUEST_PARAM_ERROR
.
getCode
(),
"变更状态必须是开启(1)或关闭(2)"
);
// TODO 有点搓
}
// 校验账号存在
AdminDO
admin
=
adminMapper
.
selectById
(
updateAdminId
);
if
(
admin
==
null
)
{
...
...
@@ -138,7 +134,7 @@ public class AdminServiceImpl implements AdminService {
AdminDO
updateAdmin
=
new
AdminDO
().
setId
(
updateAdminId
).
setStatus
(
status
);
adminMapper
.
update
(
updateAdmin
);
// 如果是关闭管理员,则标记 token 失效。否则,管理员还可以继续蹦跶
if
(
AdminDO
.
STATUS_DISABLE
.
equals
(
status
))
{
if
(
CommonStatusEnum
.
DISABLE
.
getValue
()
.
equals
(
status
))
{
oAuth2Service
.
removeToken
(
updateAdminId
);
}
// TODO 插入操作日志
...
...
@@ -155,7 +151,7 @@ public class AdminServiceImpl implements AdminService {
return
ServiceExceptionUtil
.
error
(
AdminErrorCodeEnum
.
ADMIN_USERNAME_NOT_REGISTERED
.
getCode
());
}
// 只有禁用的账号才可以删除
if
(
AdminDO
.
STATUS_ENABLE
.
equals
(
admin
.
getStatus
()))
{
if
(
CommonStatusEnum
.
ENABLE
.
getValue
()
.
equals
(
admin
.
getStatus
()))
{
return
ServiceExceptionUtil
.
error
(
AdminErrorCodeEnum
.
ADMIN_DELETE_ONLY_DISABLE
.
getCode
());
}
// 标记删除 AdminDO
...
...
@@ -204,8 +200,4 @@ public class AdminServiceImpl implements AdminService {
return
DigestUtils
.
md5DigestAsHex
(
password
.
getBytes
());
}
private
boolean
isValidStatus
(
Integer
status
)
{
return
AdminDO
.
STATUS_ENABLE
.
equals
(
status
)
||
AdminDO
.
STATUS_DISABLE
.
equals
(
status
);
}
}
\ No newline at end of file
}
common/common-framework/src/main/java/cn/iocoder/common/framework/constant/CommonStatusEnum.java
浏览文件 @
02e2b15a
package
cn
.
iocoder
.
common
.
framework
.
constant
;
import
cn.iocoder.common.framework.core.IntArrayValuable
;
import
java.util.Arrays
;
/**
* 通用状态枚举
*/
public
enum
CommonStatusEnum
{
public
enum
CommonStatusEnum
implements
IntArrayValuable
{
ENABLE
(
1
,
"开启"
),
DISABLE
(
2
,
"关闭"
);
public
static
final
int
[]
ARRAYS
=
Arrays
.
stream
(
values
()).
mapToInt
(
CommonStatusEnum:
:
getValue
).
toArray
();
/**
* 状态值
*/
...
...
@@ -48,4 +54,9 @@ public enum CommonStatusEnum {
||
DISABLE
.
value
.
equals
(
status
);
}
}
\ No newline at end of file
@Override
public
int
[]
array
()
{
return
ARRAYS
;
}
}
common/common-framework/src/main/java/cn/iocoder/common/framework/core/IntArrayValuable.java
0 → 100644
浏览文件 @
02e2b15a
package
cn
.
iocoder
.
common
.
framework
.
core
;
/**
* 可生成 Int 数组的接口
*/
public
interface
IntArrayValuable
{
/**
* @return int 数组
*/
int
[]
array
();
}
common/common-framework/src/main/java/cn/iocoder/common/framework/validator/InEnum.java
0 → 100644
浏览文件 @
02e2b15a
package
cn
.
iocoder
.
common
.
framework
.
validator
;
import
cn.iocoder.common.framework.core.IntArrayValuable
;
import
javax.validation.Constraint
;
import
javax.validation.Payload
;
import
java.lang.annotation.*
;
@Target
({
ElementType
.
METHOD
,
ElementType
.
FIELD
,
ElementType
.
ANNOTATION_TYPE
,
ElementType
.
CONSTRUCTOR
,
ElementType
.
PARAMETER
,
ElementType
.
TYPE_USE
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Documented
@Constraint
(
validatedBy
=
InEnumValidator
.
class
)
public
@interface
InEnum
{
/**
* @return 实现 EnumValuable 接口的
*/
Class
<?
extends
IntArrayValuable
>
value
();
String
message
()
default
"必须在指定范围 {value}"
;
Class
<?>[]
groups
()
default
{};
Class
<?
extends
Payload
>[]
payload
()
default
{};
}
common/common-framework/src/main/java/cn/iocoder/common/framework/validator/InEnumValidator.java
0 → 100644
浏览文件 @
02e2b15a
package
cn
.
iocoder
.
common
.
framework
.
validator
;
import
cn.iocoder.common.framework.core.IntArrayValuable
;
import
javax.validation.ConstraintValidator
;
import
javax.validation.ConstraintValidatorContext
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.stream.Collectors
;
public
class
InEnumValidator
implements
ConstraintValidator
<
InEnum
,
Integer
>
{
private
List
<
Integer
>
values
;
@Override
public
void
initialize
(
InEnum
annotation
)
{
IntArrayValuable
[]
values
=
annotation
.
value
().
getEnumConstants
();
if
(
values
.
length
==
0
)
{
this
.
values
=
Collections
.
emptyList
();
}
else
{
this
.
values
=
Arrays
.
stream
(
values
[
0
].
array
()).
boxed
().
collect
(
Collectors
.
toList
());
}
}
@Override
public
boolean
isValid
(
Integer
value
,
ConstraintValidatorContext
context
)
{
// 校验通过
if
(
values
.
contains
(
value
))
{
return
true
;
}
// 校验不通过,自定义提示语句(因为,注解上的 value 是枚举类,无法获得枚举类的实际值)
context
.
disableDefaultConstraintViolation
();
// 禁用默认的 message 的值
context
.
buildConstraintViolationWithTemplate
(
context
.
getDefaultConstraintMessageTemplate
()
.
replaceAll
(
"\\{value}"
,
values
.
toString
())).
addConstraintViolation
();
// 重新添加错误提示语句
return
false
;
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论