Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
C
chnmuseum-party
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
liqin
chnmuseum-party
Commits
d9c5bb47
Commit
d9c5bb47
authored
Mar 16, 2021
by
liqin
💬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bug fixed
parent
27336103
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
1170 additions
and
609 deletions
+1170
-609
RESPONSE_CODE_ENUM.java
...nergy/chnmuseum/party/common/enum/RESPONSE_CODE_ENUM.java
+138
-0
RESULT_INFO_ENUM.java
...senergy/chnmuseum/party/common/enum/RESULT_INFO_ENUM.java
+43
-0
GlobalExceptionAdvisor.java
...gy/chnmuseum/party/common/mvc/GlobalExceptionAdvisor.java
+215
-0
HttpResult.java
...a/cn/wisenergy/chnmuseum/party/common/mvc/HttpResult.java
+58
-0
InterfaceException.java
...energy/chnmuseum/party/common/mvc/InterfaceException.java
+65
-0
RESPONSE_CODE_ENUM.java
...energy/chnmuseum/party/common/mvc/RESPONSE_CODE_ENUM.java
+138
-0
RequestParamValidAspect.java
...y/chnmuseum/party/common/mvc/RequestParamValidAspect.java
+96
-0
StringToDateConverter.java
...rgy/chnmuseum/party/common/mvc/StringToDateConverter.java
+4
-3
StringToLocalDateConverter.java
...hnmuseum/party/common/mvc/StringToLocalDateConverter.java
+23
-0
StringToLocalDateTimeConverter.java
...seum/party/common/mvc/StringToLocalDateTimeConverter.java
+23
-0
StringToLocalTimeConverter.java
...hnmuseum/party/common/mvc/StringToLocalTimeConverter.java
+23
-0
DateUtil.java
...va/cn/wisenergy/chnmuseum/party/common/util/DateUtil.java
+270
-601
WebMvcConfig.java
.../java/cn/wisenergy/chnmuseum/party/conf/WebMvcConfig.java
+8
-5
BaseController.java
...y/chnmuseum/party/web/controller/base/BaseController.java
+66
-0
No files found.
src/main/java/cn/wisenergy/chnmuseum/party/common/enum/RESPONSE_CODE_ENUM.java
0 → 100644
View file @
d9c5bb47
package
cn
.
wisenergy
.
datastation
.
common
.
core
.
utils
.
exception
;
/**
* 响应编码
*/
public
enum
RESPONSE_CODE_ENUM
{
/* ******************** 系统异常 ********************* */
PARAM_NOT_VALID
(
"400"
,
"请求的参数不合法"
),
RESOURCE_NOT_FOUND
(
"404"
,
"请求的资源不存在"
),
METHOD_NOT_SUPPORTED
(
"405"
,
"不支持的请求方法"
),
MEDIA_TYPE_NOT_ACCEPT
(
"406"
,
"无法接受请求中的媒体类型"
),
MEDIA_TYPE_NOT_SUPPORTED
(
"415"
,
"不支持的媒体类型"
),
SERVER_ERROR
(
"500"
,
"服务异常"
),
/* ******************** 业务自定义异常 **************** */
REQUEST_PARAMS_ERROR
(
"1001"
,
"参数异常"
),
GAIN_DATA_FAIL
(
"1003"
,
"获取数据失败"
),
UPLOAD_FAILURE
(
"1005"
,
"上传失败"
),
AZKABAN_PROJECT_REPEAT
(
"1006"
,
"工程名重复"
),
HBASE_IOEXCEPTION
(
"1008"
,
"连接hbase异常"
),
CREATE_FLOW_PROJECT_ERROR
(
"1009"
,
"业务流程名称重复"
),
CREATE_FLOW_NODE_ERROR
(
"1010"
,
"业务节点名称重复"
),
FLUME_AGENT_ERROR
(
"1011"
,
"agent名称重复"
),
FLUME_AGENT_RUNNING
(
"1012"
,
"agent正在运行,不可操作"
),
PARAMETER_PARSING_FAILED
(
"1013"
,
"参数解析失败"
),
EMPTY_NODE_LIST_RUN_FAILED
(
"1014"
,
"节点集合为空,运行失败"
),
FLOW_RESOURCE_REPEAT
(
"1015"
,
"目录下,有重名资源"
),
FILE_SYSTEM_FILE_NOEXIST
(
"1016"
,
"目录不存在"
),
FILE_SYSTEM_FILE_EXCEPTION
(
"1017"
,
"访问异常"
),
EMPTY_NODE_RUN_FAILED
(
"1018"
,
"-节点内容为空"
),
EMPTY_NODE_LIST_SAVE_FAILED
(
"1019"
,
"节点集合为空,保存失败"
),
CANCEL_FLOW_CHAIN_FAILED
(
"1020"
,
"正在更新工作流程链,请稍后刷新页面"
),
TEMPORARY_QUERY_NAME_REPEAT
(
"1021"
,
"hive查询任务重名"
),
DATA_SYNC_NODE_CHECK_ERROR
(
"1022"
,
"数据同步节点配置错误"
),
HIVE_UPLOAD_FILE_INCORRECT
(
"1028"
,
"文件类型不支持"
),
SCHEDULE_FLOW_EXEC_REPEAT
(
"1029"
,
"业务流程的定时任务启动重复"
),
NAME_REPEAT
(
"1030"
,
"名称重复"
),
CODE_REPEAT
(
"1031"
,
"编码重复"
),
MODEL_RELEASE_ERROR
(
"1032"
,
"已为发布状态,不能发布"
),
MODEL_OFFLINE_ERROR
(
"1033"
,
"被占用,不能下线"
),
MODEL_DELETE_ERROR
(
"1034"
,
"发布状态,不能删除"
),
DIMENSION_TABLE_DATABASE_INFO_ERROR
(
"1035"
,
"维度表数据源信息是必须的"
),
DIMENSION_TABLE_CREATE_TABLE_ERROR
(
"1036"
,
"维度表创建失败"
),
FACT_ATTRIBUTES_CHECK_ERROR
(
"1037"
,
"事实表属性必须包含时间数据类型"
),
FACT_TABLES_CREATE_TABLE_ERROR
(
"1038"
,
"事实表创建失败"
),
FACT_TABLES_DATABASE_INFO_ERROR
(
"1039"
,
"事实表数据源信息是必须的"
),
AGGREGATION_TABLE_DATABASE_INFO_ERROR
(
"1040"
,
"汇总表数据源信息是必须的"
),
AGGREGATION_TABLE_CREATE_TABLE_ERROR
(
"1041"
,
"汇总表创建失败"
),
AGGREGATION_ATTRIBUTES_CHECK_ERROR
(
"1042"
,
"汇总表必须配置时间周期和指标"
),
MODEL_CREATE_ERROR
(
"1043"
,
"创建失败"
),
MODEL_OFFLINE_STATUS_ERROR
(
"1044"
,
"当前状态为非发布状态,不允许下线"
),
FIELD_NAME_ID_REPEAT_ERROR
(
"1045"
,
"字段名称id不允许重复"
),
ASSET_LABEL_DELETE_ERROR
(
"1046"
,
"标签为引用状态,不能删除"
),
QUALITY_JOB_NOT_EXIST
(
"1047"
,
"质量作业不存在"
),
SYSTEM_TEMPLATE_NOT_OPERATIONAL_ERROR
(
"1048"
,
"系统模板不可操作"
),
QUALITY_JOB_RUNNING_NOT_DELETE
(
"1049"
,
"质量作业正在运行,不能删除"
),
QUALITY_RULE_SQL_SEMANTIC_VERIFICATION_ERROR
(
"1050"
,
"语义校验失败,请检查。"
),
QUALITY_JOB_PERIOD_CRON_NOT_EXIST
(
"1051"
,
"CRON表达式不存在"
),
QUALITY_JOB_RUN_TASK_NOT_FIND
(
"1052"
,
"找不到要停止的质量作业任务"
),
OUTPUT_SHOW_WITH_SQL_NOT_MATCH_ERROR
(
"1053"
,
"输出结果说明与定义关系不匹配"
),
LACK_A_PRIMARY_KEY_ERROR
(
"1054"
,
"至少包含一个主键属性"
),
QUALITY_JOB_RUN_ERROR
(
"1055"
,
"启动质量作业失败,请检查质量作业参数..."
),
ILLEGAL_OPERATION
(
"1400"
,
"违规操作"
),
BUSINESS_OBJECT_NAME_REGEX_CHECK_ERROR
(
"1500"
,
"只允许除右斜杠、<、>、/外的字符"
),
/* ******************** 登录权限 **************** */
USER_NAME_REPEAT
(
"1101"
,
"账户已存在"
),
LOGIN_INCORRECT
(
"1102"
,
"登录异常"
),
LOGIN_NOT_EXISTS
(
"1103"
,
"账户不存在"
),
LOGIN_PWD_INCORRECT
(
"1104"
,
"账户或密码不正确"
),
NOT_LOGIN_ERROR
(
"1105"
,
"重新登录"
),
OLD_PASSWORD_INCORRECT
(
"1106"
,
"旧密码不正确"
),
ACCOUNT_HAS_BEEN_DISABLED
(
"1107"
,
"此账号已被禁用"
),
ACCOUNT_IS_LOCKED
(
"1108"
,
"此账号已被锁定,请稍后再试"
),
ACCOUNT_AUTHENTICATION_FAILED
(
"1109"
,
"账号认证失败"
),
UNAUTHORIZED
(
"1110"
,
"权限不足"
),
ROLE_CODE_REPEAT
(
"1111"
,
"角色编码已存在"
),
SYS_ROLE_DELETE_FAIL
(
"1112"
,
"系统角色不允许删除"
),
SYS_MENU_DELETE_FAIL
(
"1113"
,
"还存在子菜单,不能直接删除"
),
/* ******************** 操作失败 **************** */
REQUEST_FAIL
(
"1100"
,
"操作失败"
),
/* ******************** 操作成功 **************** */
REQUEST_SUCCESS
(
"200"
,
"操作成功"
);
// 错误编码
private
String
code
;
// 错误信息
private
String
msg
;
// 相应编码有参构造函数
RESPONSE_CODE_ENUM
(
String
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
}
/**
* 获取编码
*/
public
String
getCode
()
{
return
code
;
}
/**
* 设置编码
*/
public
void
setCode
(
String
code
)
{
this
.
code
=
code
;
}
/**
* 获取编码信息
*/
public
String
getMsg
()
{
return
msg
;
}
/**
* 设置编码信息
*/
public
void
setMsg
(
String
msg
)
{
this
.
msg
=
msg
;
}
}
src/main/java/cn/wisenergy/chnmuseum/party/common/enum/RESULT_INFO_ENUM.java
0 → 100644
View file @
d9c5bb47
package
cn
.
wisenergy
.
datastation
.
common
.
core
.
enums
;
/**
* 响应结果信息枚举
*
* @author mxy
* @date 2020/3/30
*/
public
enum
RESULT_INFO_ENUM
{
RESULT_CODE
(
"code"
,
"响应码key"
),
RESULT_MSG
(
"msg"
,
"响应信息key"
),
RESULT_BODY
(
"body"
,
"响应传输信息key"
);
/**
* 响应结果key
*/
private
String
key
;
/**
* 响应结果名称
*/
private
String
name
;
RESULT_INFO_ENUM
(
String
key
,
String
name
)
{
this
.
key
=
key
;
this
.
name
=
name
;
}
/**
* 获取响应结果key
*/
public
String
getKey
()
{
return
key
;
}
/**
* 获取响应结果name
*/
public
String
getName
()
{
return
name
;
}
}
src/main/java/cn/wisenergy/chnmuseum/party/common/mvc/GlobalExceptionAdvisor.java
0 → 100644
View file @
d9c5bb47
package
cn
.
wisenergy
.
chnmuseum
.
party
.
common
.
mvc
;
import
com.google.common.base.Splitter
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.exception.ExceptionUtils
;
import
org.apache.shiro.authz.UnauthenticatedException
;
import
org.apache.shiro.authz.UnauthorizedException
;
import
org.springframework.beans.ConversionNotSupportedException
;
import
org.springframework.context.support.DefaultMessageSourceResolvable
;
import
org.springframework.dao.DataAccessException
;
import
org.springframework.dao.DuplicateKeyException
;
import
org.springframework.http.converter.HttpMessageConversionException
;
import
org.springframework.http.converter.HttpMessageNotWritableException
;
import
org.springframework.validation.BindException
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.validation.FieldError
;
import
org.springframework.validation.ObjectError
;
import
org.springframework.web.HttpMediaTypeNotAcceptableException
;
import
org.springframework.web.HttpMediaTypeNotSupportedException
;
import
org.springframework.web.HttpRequestMethodNotSupportedException
;
import
org.springframework.web.bind.MethodArgumentNotValidException
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
org.springframework.web.bind.annotation.RestControllerAdvice
;
import
javax.validation.ConstraintViolation
;
import
javax.validation.ConstraintViolationException
;
import
java.sql.SQLIntegrityConstraintViolationException
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* 全局异常处理
*
* @author mxy
* @date 2019/8/1
*/
@Slf4j
@RestControllerAdvice
public
class
GlobalExceptionAdvisor
{
/**
* 捕获全局异常,处理所有不可知的异常
*
* @param exception 异常对象
*/
@ExceptionHandler
(
Exception
.
class
)
public
Object
handleException
(
Exception
exception
)
{
log
.
error
(
"\r\n ************** 操作出现异常:{}"
,
ExceptionUtils
.
getStackTrace
(
exception
));
Class
<?>
eClass
=
exception
.
getClass
();
HttpResult
httpResult
=
new
HttpResult
();
if
(
eClass
.
equals
(
HttpRequestMethodNotSupportedException
.
class
))
{
addResCodeToMap
(
RESPONSE_CODE_ENUM
.
METHOD_NOT_SUPPORTED
,
httpResult
);
}
else
if
(
eClass
.
equals
(
HttpMediaTypeNotAcceptableException
.
class
))
{
addResCodeToMap
(
RESPONSE_CODE_ENUM
.
MEDIA_TYPE_NOT_ACCEPT
,
httpResult
);
}
else
if
(
eClass
.
equals
(
HttpMediaTypeNotSupportedException
.
class
))
{
addResCodeToMap
(
RESPONSE_CODE_ENUM
.
MEDIA_TYPE_NOT_SUPPORTED
,
httpResult
);
}
else
if
(
eClass
.
equals
(
ConversionNotSupportedException
.
class
))
{
addResCodeToMap
(
RESPONSE_CODE_ENUM
.
SERVER_ERROR
,
httpResult
);
}
else
if
(
eClass
.
equals
(
HttpMessageNotWritableException
.
class
))
{
addResCodeToMap
(
RESPONSE_CODE_ENUM
.
SERVER_ERROR
,
httpResult
);
}
else
{
addResCodeToMap
(
RESPONSE_CODE_ENUM
.
SERVER_ERROR
,
httpResult
);
}
return
httpResult
;
}
@ExceptionHandler
(
BindException
.
class
)
@ResponseBody
public
HttpResult
handle
(
BindException
ex
)
{
String
message
=
ex
.
getBindingResult
().
getAllErrors
().
stream
().
map
(
DefaultMessageSourceResolvable:
:
getDefaultMessage
).
collect
(
Collectors
.
joining
(
" \n "
));
// BindingResult bindingResult = ex.getBindingResult();
// StringBuilder errMsg = new StringBuilder(bindingResult.getFieldErrors().size() * 16);
// errMsg.append("Invalid request:");
// for (int i = 0; i < bindingResult.getFieldErrors().size(); i++) {
// if (i > 0) {
// errMsg.append(",");
// }
// FieldError error = bindingResult.getFieldErrors().get(i);
// errMsg.append(error.getField()).append(":").append(error.getDefaultMessage());
// }
return
new
HttpResult
(
400
,
message
);
//throw new InterfaceException(RESPONSE_CODE_ENUM.PARAM_NOT_VALID.getCode(), errMsg.toString());
}
//处理请求参数格式错误 @RequestParam上validate失败后抛出的异常是javax.validation.ConstraintViolationException
@ExceptionHandler
(
ConstraintViolationException
.
class
)
@ResponseBody
public
String
constraintViolationExceptionHandler
(
ConstraintViolationException
e
)
{
return
e
.
getConstraintViolations
().
stream
().
map
(
ConstraintViolation:
:
getMessage
).
collect
(
Collectors
.
joining
());
}
/**
* 处理请求参数格式错误 @RequestBody上validate失败后抛出的异常是MethodArgumentNotValidException异常。
*
* @param exception 错误信息集合
* @return 错误信息
*/
@ExceptionHandler
(
MethodArgumentNotValidException
.
class
)
public
HttpResult
validationBodyException
(
MethodArgumentNotValidException
exception
)
{
BindingResult
result
=
exception
.
getBindingResult
();
String
msg
=
null
;
if
(
result
.
hasErrors
())
{
List
<
ObjectError
>
errors
=
result
.
getAllErrors
();
for
(
ObjectError
objectError
:
errors
)
{
FieldError
fieldError
=
(
FieldError
)
objectError
;
if
(
fieldError
.
getDefaultMessage
()
!=
null
)
{
log
.
info
(
"Data check failure : object{"
+
fieldError
.
getObjectName
()
+
"},field{"
+
fieldError
.
getField
()
+
"},errorMessage{"
+
fieldError
.
getDefaultMessage
()
+
"}"
);
msg
=
fieldError
.
getDefaultMessage
();
}
}
}
return
new
HttpResult
(
400
,
msg
);
}
@ExceptionHandler
(
DataAccessException
.
class
)
public
HttpResult
dataAccessException
(
DataAccessException
exception
)
{
return
new
HttpResult
(
400
,
exception
.
getLocalizedMessage
());
}
@ExceptionHandler
(
DuplicateKeyException
.
class
)
@ResponseBody
public
HttpResult
duplicateKeyException
(
DuplicateKeyException
e
)
{
String
localizedMessage
=
e
.
getLocalizedMessage
();
String
message
=
Splitter
.
on
(
System
.
lineSeparator
()).
trimResults
().
splitToList
(
localizedMessage
).
get
(
1
);
String
substring
=
message
.
substring
(
message
.
indexOf
(
"Exception:"
));
if
(
substring
.
toUpperCase
().
contains
(
"NAME"
))
{
return
new
HttpResult
(
400
,
"名称已存在"
);
}
else
if
(
substring
.
toUpperCase
().
contains
(
"CODE"
))
{
return
new
HttpResult
(
400
,
"编码已存在"
);
}
return
new
HttpResult
(
400
,
message
);
}
@ExceptionHandler
(
SQLIntegrityConstraintViolationException
.
class
)
@ResponseBody
public
HttpResult
sqlIntegrityConstraintViolationException
(
SQLIntegrityConstraintViolationException
e
)
{
String
localizedMessage
=
e
.
getLocalizedMessage
();
String
message
=
Splitter
.
on
(
System
.
lineSeparator
()).
trimResults
().
splitToList
(
localizedMessage
).
get
(
1
);
String
substring
=
message
.
substring
(
message
.
indexOf
(
"Exception:"
));
if
(
substring
.
toUpperCase
().
contains
(
"NAME"
))
{
return
new
HttpResult
(
400
,
"名称已存在"
);
}
else
if
(
substring
.
toUpperCase
().
contains
(
"CODE"
))
{
return
new
HttpResult
(
400
,
"编码已存在"
);
}
return
new
HttpResult
(
400
,
message
);
}
/**
* 参数类型转换错误
*
* @param exception 错误
* @return 错误信息
*/
@ExceptionHandler
(
HttpMessageConversionException
.
class
)
public
HttpResult
httpMessageConversionException
(
HttpMessageConversionException
exception
)
{
log
.
error
(
exception
.
getCause
().
getLocalizedMessage
());
return
new
HttpResult
(
400
,
exception
.
getCause
().
getLocalizedMessage
());
}
/**
* 捕获业务异常
*
* @param exception 自定义接口异常类
* @return 返回的异常信息map
*/
@ExceptionHandler
(
InterfaceException
.
class
)
public
HttpResult
handleInterfaceException
(
InterfaceException
exception
)
{
HttpResult
httpResult
=
new
HttpResult
();
httpResult
.
setCode
(
Integer
.
parseInt
(
exception
.
getErrorCode
()));
httpResult
.
setMsg
(
exception
.
getErrorMsg
());
return
httpResult
;
}
/**
* 捕获Shiro无权限异常 未授权异常
*
* @param exception 无权限异常
* @return 返回的异常信息map
*/
@ExceptionHandler
(
UnauthorizedException
.
class
)
public
Object
handleUnauthorizedException
(
UnauthorizedException
exception
)
{
HttpResult
httpResult
=
new
HttpResult
();
// 无权限
addResCodeToMap
(
RESPONSE_CODE_ENUM
.
UNAUTHORIZED
,
httpResult
);
return
httpResult
;
}
/**
* 捕获Shiro无权限异常 未认证异常
*
* @param exception 无权限异常
* @return 返回的异常信息map
*/
@ExceptionHandler
(
UnauthenticatedException
.
class
)
public
Object
handleUnauthenticatedException
(
UnauthenticatedException
exception
)
{
HttpResult
httpResult
=
new
HttpResult
();
// 无权限
addResCodeToMap
(
RESPONSE_CODE_ENUM
.
UNAUTHORIZED
,
httpResult
);
return
httpResult
;
}
/**
* 添加异常信息到map中
*
* @param responseCodeEnum 错误响应编码枚举类对象
* @param httpResult 响应对象
*/
private
void
addResCodeToMap
(
RESPONSE_CODE_ENUM
responseCodeEnum
,
HttpResult
httpResult
)
{
httpResult
.
setCode
(
Integer
.
parseInt
(
responseCodeEnum
.
getCode
()));
httpResult
.
setMsg
(
responseCodeEnum
.
getMsg
());
}
}
src/main/java/cn/wisenergy/chnmuseum/party/common/mvc/HttpResult.java
0 → 100644
View file @
d9c5bb47
package
cn
.
wisenergy
.
chnmuseum
.
party
.
common
.
mvc
;
public
class
HttpResult
{
// 响应的状态码
private
int
code
;
// 响应的响应信息
private
String
msg
;
// 响应的响应体
private
Object
body
;
public
HttpResult
()
{
}
public
HttpResult
(
int
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
}
public
HttpResult
(
int
code
,
Object
body
)
{
this
.
code
=
code
;
this
.
body
=
body
;
}
public
int
getCode
()
{
return
code
;
}
public
void
setCode
(
int
code
)
{
this
.
code
=
code
;
}
public
String
getMsg
()
{
return
msg
;
}
public
void
setMsg
(
String
msg
)
{
this
.
msg
=
msg
;
}
public
Object
getBody
()
{
return
body
;
}
public
void
setBody
(
Object
body
)
{
this
.
body
=
body
;
}
@Override
public
String
toString
()
{
return
"{"
+
"\"code\":"
+
code
+
", \"msg\":"
+
"\""
+
msg
+
"\""
+
", \"body\":"
+
body
+
'}'
;
}
}
src/main/java/cn/wisenergy/chnmuseum/party/common/mvc/InterfaceException.java
0 → 100644
View file @
d9c5bb47
package
cn
.
wisenergy
.
chnmuseum
.
party
.
common
.
mvc
;
/**
* 自定义接口异常对象
*/
public
class
InterfaceException
extends
RuntimeException
{
private
static
final
long
serialVersionUID
=
-
854533489101542484L
;
// 错误编码
private
String
errorCode
;
// 错误编码信息
private
String
errorMsg
;
/**
* 应用接口有参构造函数
*
* @param errorCode 错误编码
* @param errorMsg 错误信息
*/
public
InterfaceException
(
String
errorCode
,
String
errorMsg
)
{
super
(
"errorCode:"
+
errorCode
+
" errorMsg:"
+
errorMsg
);
this
.
errorCode
=
errorCode
;
this
.
errorMsg
=
errorMsg
;
}
/**
* 应用接口有参构造函数
*
* @param responseCode 响应编码枚举
*/
public
InterfaceException
(
RESPONSE_CODE_ENUM
responseCode
)
{
super
(
"errorCode:"
+
responseCode
.
getCode
()
+
" errorMsg:"
+
responseCode
.
getMsg
());
this
.
errorCode
=
responseCode
.
getCode
();
this
.
errorMsg
=
responseCode
.
getMsg
();
}
/**
* 获取错误编码
*/
public
String
getErrorCode
()
{
return
errorCode
;
}
/**
* 设置错误编码
*/
public
void
setErrorCode
(
String
errorCode
)
{
this
.
errorCode
=
errorCode
;
}
/**
* 获取异常编码
*/
public
String
getErrorMsg
()
{
return
errorMsg
;
}
/**
* 设置异常编码
*/
public
void
setErrorMsg
(
String
errorMsg
)
{
this
.
errorMsg
=
errorMsg
;
}
}
src/main/java/cn/wisenergy/chnmuseum/party/common/mvc/RESPONSE_CODE_ENUM.java
0 → 100644
View file @
d9c5bb47
package
cn
.
wisenergy
.
chnmuseum
.
party
.
common
.
mvc
;
/**
* 响应编码
*/
public
enum
RESPONSE_CODE_ENUM
{
/* ******************** 系统异常 ********************* */
PARAM_NOT_VALID
(
"400"
,
"请求的参数不合法"
),
RESOURCE_NOT_FOUND
(
"404"
,
"请求的资源不存在"
),
METHOD_NOT_SUPPORTED
(
"405"
,
"不支持的请求方法"
),
MEDIA_TYPE_NOT_ACCEPT
(
"406"
,
"无法接受请求中的媒体类型"
),
MEDIA_TYPE_NOT_SUPPORTED
(
"415"
,
"不支持的媒体类型"
),
SERVER_ERROR
(
"500"
,
"服务异常"
),
/* ******************** 业务自定义异常 **************** */
REQUEST_PARAMS_ERROR
(
"1001"
,
"参数异常"
),
GAIN_DATA_FAIL
(
"1003"
,
"获取数据失败"
),
UPLOAD_FAILURE
(
"1005"
,
"上传失败"
),
AZKABAN_PROJECT_REPEAT
(
"1006"
,
"工程名重复"
),
HBASE_IOEXCEPTION
(
"1008"
,
"连接hbase异常"
),
CREATE_FLOW_PROJECT_ERROR
(
"1009"
,
"业务流程名称重复"
),
CREATE_FLOW_NODE_ERROR
(
"1010"
,
"业务节点名称重复"
),
FLUME_AGENT_ERROR
(
"1011"
,
"agent名称重复"
),
FLUME_AGENT_RUNNING
(
"1012"
,
"agent正在运行,不可操作"
),
PARAMETER_PARSING_FAILED
(
"1013"
,
"参数解析失败"
),
EMPTY_NODE_LIST_RUN_FAILED
(
"1014"
,
"节点集合为空,运行失败"
),
FLOW_RESOURCE_REPEAT
(
"1015"
,
"目录下,有重名资源"
),
FILE_SYSTEM_FILE_NOEXIST
(
"1016"
,
"目录不存在"
),
FILE_SYSTEM_FILE_EXCEPTION
(
"1017"
,
"访问异常"
),
EMPTY_NODE_RUN_FAILED
(
"1018"
,
"-节点内容为空"
),
EMPTY_NODE_LIST_SAVE_FAILED
(
"1019"
,
"节点集合为空,保存失败"
),
CANCEL_FLOW_CHAIN_FAILED
(
"1020"
,
"正在更新工作流程链,请稍后刷新页面"
),
TEMPORARY_QUERY_NAME_REPEAT
(
"1021"
,
"hive查询任务重名"
),
DATA_SYNC_NODE_CHECK_ERROR
(
"1022"
,
"数据同步节点配置错误"
),
HIVE_UPLOAD_FILE_INCORRECT
(
"1028"
,
"文件类型不支持"
),
SCHEDULE_FLOW_EXEC_REPEAT
(
"1029"
,
"业务流程的定时任务启动重复"
),
NAME_REPEAT
(
"1030"
,
"名称重复"
),
CODE_REPEAT
(
"1031"
,
"编码重复"
),
MODEL_RELEASE_ERROR
(
"1032"
,
"已为发布状态,不能发布"
),
MODEL_OFFLINE_ERROR
(
"1033"
,
"被占用,不能下线"
),
MODEL_DELETE_ERROR
(
"1034"
,
"发布状态,不能删除"
),
DIMENSION_TABLE_DATABASE_INFO_ERROR
(
"1035"
,
"维度表数据源信息是必须的"
),
DIMENSION_TABLE_CREATE_TABLE_ERROR
(
"1036"
,
"维度表创建失败"
),
FACT_ATTRIBUTES_CHECK_ERROR
(
"1037"
,
"事实表属性必须包含时间数据类型"
),
FACT_TABLES_CREATE_TABLE_ERROR
(
"1038"
,
"事实表创建失败"
),
FACT_TABLES_DATABASE_INFO_ERROR
(
"1039"
,
"事实表数据源信息是必须的"
),
AGGREGATION_TABLE_DATABASE_INFO_ERROR
(
"1040"
,
"汇总表数据源信息是必须的"
),
AGGREGATION_TABLE_CREATE_TABLE_ERROR
(
"1041"
,
"汇总表创建失败"
),
AGGREGATION_ATTRIBUTES_CHECK_ERROR
(
"1042"
,
"汇总表必须配置时间周期和指标"
),
MODEL_CREATE_ERROR
(
"1043"
,
"创建失败"
),
MODEL_OFFLINE_STATUS_ERROR
(
"1044"
,
"当前状态为非发布状态,不允许下线"
),
FIELD_NAME_ID_REPEAT_ERROR
(
"1045"
,
"字段名称id不允许重复"
),
ASSET_LABEL_DELETE_ERROR
(
"1046"
,
"标签为引用状态,不能删除"
),
QUALITY_JOB_NOT_EXIST
(
"1047"
,
"质量作业不存在"
),
SYSTEM_TEMPLATE_NOT_OPERATIONAL_ERROR
(
"1048"
,
"系统模板不可操作"
),
QUALITY_JOB_RUNNING_NOT_DELETE
(
"1049"
,
"质量作业正在运行,不能删除"
),
QUALITY_RULE_SQL_SEMANTIC_VERIFICATION_ERROR
(
"1050"
,
"语义校验失败,请检查。"
),
QUALITY_JOB_PERIOD_CRON_NOT_EXIST
(
"1051"
,
"CRON表达式不存在"
),
QUALITY_JOB_RUN_TASK_NOT_FIND
(
"1052"
,
"找不到要停止的质量作业任务"
),
OUTPUT_SHOW_WITH_SQL_NOT_MATCH_ERROR
(
"1053"
,
"输出结果说明与定义关系不匹配"
),
LACK_A_PRIMARY_KEY_ERROR
(
"1054"
,
"至少包含一个主键属性"
),
QUALITY_JOB_RUN_ERROR
(
"1055"
,
"启动质量作业失败,请检查质量作业参数..."
),
ILLEGAL_OPERATION
(
"1400"
,
"违规操作"
),
BUSINESS_OBJECT_NAME_REGEX_CHECK_ERROR
(
"1500"
,
"只允许除右斜杠、<、>、/外的字符"
),
/* ******************** 登录权限 **************** */
USER_NAME_REPEAT
(
"1101"
,
"账户已存在"
),
LOGIN_INCORRECT
(
"1102"
,
"登录异常"
),
LOGIN_NOT_EXISTS
(
"1103"
,
"账户不存在"
),
LOGIN_PWD_INCORRECT
(
"1104"
,
"账户或密码不正确"
),
NOT_LOGIN_ERROR
(
"1105"
,
"重新登录"
),
OLD_PASSWORD_INCORRECT
(
"1106"
,
"旧密码不正确"
),
ACCOUNT_HAS_BEEN_DISABLED
(
"1107"
,
"此账号已被禁用"
),
ACCOUNT_IS_LOCKED
(
"1108"
,
"此账号已被锁定,请稍后再试"
),
ACCOUNT_AUTHENTICATION_FAILED
(
"1109"
,
"账号认证失败"
),
UNAUTHORIZED
(
"1110"
,
"权限不足"
),
ROLE_CODE_REPEAT
(
"1111"
,
"角色编码已存在"
),
SYS_ROLE_DELETE_FAIL
(
"1112"
,
"系统角色不允许删除"
),
SYS_MENU_DELETE_FAIL
(
"1113"
,
"还存在子菜单,不能直接删除"
),
/* ******************** 操作失败 **************** */
REQUEST_FAIL
(
"1100"
,
"操作失败"
),
/* ******************** 操作成功 **************** */
REQUEST_SUCCESS
(
"200"
,
"操作成功"
);
// 错误编码
private
String
code
;
// 错误信息
private
String
msg
;
// 相应编码有参构造函数
RESPONSE_CODE_ENUM
(
String
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
}
/**
* 获取编码
*/
public
String
getCode
()
{
return
code
;
}
/**
* 设置编码
*/
public
void
setCode
(
String
code
)
{
this
.
code
=
code
;
}
/**
* 获取编码信息
*/
public
String
getMsg
()
{
return
msg
;
}
/**
* 设置编码信息
*/
public
void
setMsg
(
String
msg
)
{
this
.
msg
=
msg
;
}
}
src/main/java/cn/wisenergy/chnmuseum/party/common/mvc/RequestParamValidAspect.java
0 → 100644
View file @
d9c5bb47
package
cn
.
wisenergy
.
chnmuseum
.
party
.
common
.
mvc
;
import
cn.wisenergy.datastation.common.core.utils.exception.RESPONSE_CODE_ENUM
;
import
lombok.extern.slf4j.Slf4j
;
import
org.aspectj.lang.JoinPoint
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Before
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.aspectj.lang.reflect.MethodSignature
;
import
org.hibernate.validator.internal.engine.path.PathImpl
;
import
org.springframework.core.LocalVariableTableParameterNameDiscoverer
;
import
org.springframework.core.ParameterNameDiscoverer
;
import
org.springframework.stereotype.Component
;
import
javax.validation.ConstraintViolation
;
import
javax.validation.Validation
;
import
javax.validation.ValidatorFactory
;
import
javax.validation.executable.ExecutableValidator
;
import
java.lang.reflect.Method
;
import
java.util.Set
;
/**
* 参数校验切面
*/
@Slf4j
@Aspect
@Component
public
class
RequestParamValidAspect
{
private
final
ParameterNameDiscoverer
parameterNameDiscoverer
=
new
LocalVariableTableParameterNameDiscoverer
();
private
final
ValidatorFactory
factory
=
Validation
.
buildDefaultValidatorFactory
();
private
final
ExecutableValidator
validator
=
factory
.
getValidator
().
forExecutables
();
private
<
T
>
Set
<
ConstraintViolation
<
T
>>
validMethodParams
(
T
obj
,
Method
method
,
Object
[]
params
)
{
return
validator
.
validateParameters
(
obj
,
method
,
params
);
}
@Pointcut
(
"execution(* cn.wisenergy.chnmuseum.party.web.*.*.controller.*.*(..))"
)
public
void
controllerBefore
()
{
}
@Before
(
"controllerBefore()"
)
public
void
before
(
JoinPoint
point
)
{
// 获得切入方法参数
Object
[]
args
=
point
.
getArgs
();
if
(
args
.
length
==
0
)
{
return
;
}
/**************************校验封装好的javabean**********************/
//寻找带BindingResult参数的方法,然后判断是否有error,如果有则是校验不通过
// for (Object arg : args) {
// if (arg instanceof BeanPropertyBindingResult) {
// //有校验
// BeanPropertyBindingResult result = (BeanPropertyBindingResult) arg;
// if (result.hasErrors()) {
// List<ObjectError> list = result.getAllErrors();
// for (ObjectError error : list) {
// log.info(error.getCode() + "---" + Arrays.toString(error.getArguments()) + "--" + error.getDefaultMessage());
// //返回第一条校验失败信息。也可以拼接起来返回所有的
// return error.getDefaultMessage();
// }
// }
// }
// }
/**************************校验普通参数*************************/
Object
target
=
point
.
getThis
();
// 获得切入的方法
Method
method
=
((
MethodSignature
)
point
.
getSignature
()).
getMethod
();
// 执行校验,获得校验结果
Set
<
ConstraintViolation
<
Object
>>
validResult
=
validMethodParams
(
target
,
method
,
args
);
//如果有校验不通过的
if
(!
validResult
.
isEmpty
())
{
// 获得方法的参数名称
String
[]
parameterNames
=
parameterNameDiscoverer
.
getParameterNames
(
method
);
for
(
ConstraintViolation
<
Object
>
constraintViolation
:
validResult
)
{
// 获得校验的参数路径信息
PathImpl
pathImpl
=
(
PathImpl
)
constraintViolation
.
getPropertyPath
();
// 获得校验的参数位置
int
paramIndex
=
pathImpl
.
getLeafNode
().
getParameterIndex
();
assert
parameterNames
!=
null
;
// 获得校验的参数名称
String
paramName
=
parameterNames
[
paramIndex
];
//校验信息
log
.
info
(
paramName
+
": "
+
constraintViolation
.
getMessage
());
}
//返回第一条校验失败信息,也可以拼接起来返回所有的
String
message
=
validResult
.
iterator
().
next
().
getMessage
();
throw
new
InterfaceException
(
RESPONSE_CODE_ENUM
.
PARAM_NOT_VALID
.
getCode
(),
message
);
}
}
}
src/main/java/cn/wisenergy/chnmuseum/party/common/mvc/StringToDateConverter.java
View file @
d9c5bb47
package
cn
.
wisenergy
.
chnmuseum
.
party
.
common
.
mvc
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.core.convert.converter.Converter
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
public
class
StringToDateConverter
implements
Converter
<
String
,
Date
>
{
private
static
final
String
dateFormat
=
"yyyy-MM-dd HH:mm:ss"
;
private
static
final
String
shortDateFormat
=
"yyyy-MM-dd"
;
...
...
src/main/java/cn/wisenergy/chnmuseum/party/common/mvc/StringToLocalDateConverter.java
0 → 100644
View file @
d9c5bb47
package
cn
.
wisenergy
.
chnmuseum
.
party
.
common
.
mvc
;
import
cn.wisenergy.chnmuseum.party.common.util.DateUtil
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.core.convert.converter.Converter
;
import
java.time.LocalDate
;
/**
* @author Danny Lee
* @since 2019-05-31 13:39
*/
public
class
StringToLocalDateConverter
implements
Converter
<
String
,
LocalDate
>
{
@Override
public
LocalDate
convert
(
String
source
)
{
if
(
StringUtils
.
isEmpty
(
source
))
{
return
null
;
}
return
DateUtil
.
parseStringToDate
(
source
,
DateUtil
.
LONG_DATE_FORMAT
);
}
}
src/main/java/cn/wisenergy/chnmuseum/party/common/mvc/StringToLocalDateTimeConverter.java
0 → 100644
View file @
d9c5bb47
package
cn
.
wisenergy
.
chnmuseum
.
party
.
common
.
mvc
;
import
cn.wisenergy.chnmuseum.party.common.util.DateUtil
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.core.convert.converter.Converter
;
import
java.time.LocalDateTime
;
/**
* @author Danny Lee
* @since 2019-05-31 13:39
*/
public
class
StringToLocalDateTimeConverter
implements
Converter
<
String
,
LocalDateTime
>
{
@Override
public
LocalDateTime
convert
(
String
source
)
{
if
(
StringUtils
.
isEmpty
(
source
))
{
return
null
;
}
return
DateUtil
.
parseStringToDateTime
(
source
,
DateUtil
.
FORMAT_ONE
);
}
}
src/main/java/cn/wisenergy/chnmuseum/party/common/mvc/StringToLocalTimeConverter.java
0 → 100644
View file @
d9c5bb47
package
cn
.
wisenergy
.
chnmuseum
.
party
.
common
.
mvc
;
import
cn.wisenergy.chnmuseum.party.common.util.DateUtil
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.core.convert.converter.Converter
;
import
java.time.LocalTime
;
/**
* @author Danny Lee
* @since 2019-05-31 13:39
*/
public
class
StringToLocalTimeConverter
implements
Converter
<
String
,
LocalTime
>
{
@Override
public
LocalTime
convert
(
String
source
)
{
if
(
StringUtils
.
isEmpty
(
source
))
{
return
null
;
}
return
DateUtil
.
parseStringToTime
(
source
,
DateUtil
.
SHORT_TIME_FORMAT
);
}
}
src/main/java/cn/wisenergy/chnmuseum/party/common/util/DateUtil.java
View file @
d9c5bb47
This diff is collapsed.
Click to expand it.
src/main/java/cn/wisenergy/chnmuseum/party/conf/WebMvcConfig.java
View file @
d9c5bb47
package
cn
.
wisenergy
.
chnmuseum
.
party
.
conf
;
import
javax.annotation.PostConstruct
;
import
javax.annotation.Resource
;
import
cn.wisenergy.chnmuseum.party.common.mvc.StringToDateConverter
;
import
cn.wisenergy.chnmuseum.party.common.mvc.StringToIntegerConverter
;
import
cn.wisenergy.chnmuseum.party.common.mvc.*
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.convert.support.GenericConversionService
;
import
org.springframework.web.bind.support.ConfigurableWebBindingInitializer
;
import
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
;
import
javax.annotation.PostConstruct
;
import
javax.annotation.Resource
;
@Configuration
public
class
WebMvcConfig
{
...
...
@@ -28,6 +27,10 @@ public class WebMvcConfig {
.
getConversionService
();
genericConversionService
.
addConverter
(
new
StringToIntegerConverter
());
genericConversionService
.
addConverter
(
new
StringToDateConverter
());
genericConversionService
.
addConverter
(
new
StringToLocalDateTimeConverter
());
genericConversionService
.
addConverter
(
new
StringToLocalDateConverter
());
genericConversionService
.
addConverter
(
new
StringToLocalTimeConverter
());
}
}
...
...
src/main/java/cn/wisenergy/chnmuseum/party/web/controller/base/BaseController.java
View file @
d9c5bb47
...
...
@@ -12,7 +12,9 @@ import org.slf4j.LoggerFactory;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.Serializable
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* controller 基类控制器
...
...
@@ -45,6 +47,70 @@ public class BaseController implements Serializable {
return
new
Page
<>(
_index
,
_size
);
}
/**
* 添加数据到结果对象中
*
* @param obj 封装接口集合参数
* @return map
*/
protected
Map
<
String
,
Object
>
getResult
(
Object
obj
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
cn
.
wisenergy
.
datastation
.
common
.
core
.
enums
.
RESULT_INFO_ENUM
.
RESULT_CODE
.
getKey
(),
cn
.
wisenergy
.
datastation
.
common
.
core
.
utils
.
exception
.
RESPONSE_CODE_ENUM
.
REQUEST_SUCCESS
.
getCode
());
map
.
put
(
cn
.
wisenergy
.
datastation
.
common
.
core
.
enums
.
RESULT_INFO_ENUM
.
RESULT_BODY
.
getKey
(),
obj
);
return
map
;
}
/**
* 返回成功
*
* @return map
*/
protected
Map
<
String
,
Object
>
getSuccessResult
()
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
cn
.
wisenergy
.
datastation
.
common
.
core
.
enums
.
RESULT_INFO_ENUM
.
RESULT_CODE
.
getKey
(),
cn
.
wisenergy
.
datastation
.
common
.
core
.
utils
.
exception
.
RESPONSE_CODE_ENUM
.
REQUEST_SUCCESS
.
getCode
());
map
.
put
(
cn
.
wisenergy
.
datastation
.
common
.
core
.
enums
.
RESULT_INFO_ENUM
.
RESULT_MSG
.
getKey
(),
cn
.
wisenergy
.
datastation
.
common
.
core
.
utils
.
exception
.
RESPONSE_CODE_ENUM
.
REQUEST_SUCCESS
.
getMsg
());
return
map
;
}
/**
* 返回失败
*
* @param code 状态码
* @param msg 失败原因
* @return map
*/
protected
Map
<
String
,
Object
>
getFailResult
(
String
code
,
String
msg
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
cn
.
wisenergy
.
datastation
.
common
.
core
.
enums
.
RESULT_INFO_ENUM
.
RESULT_CODE
.
getKey
(),
code
);
map
.
put
(
cn
.
wisenergy
.
datastation
.
common
.
core
.
enums
.
RESULT_INFO_ENUM
.
RESULT_MSG
.
getKey
(),
msg
);
return
map
;
}
/**
* 返回失败
*
* @param responseCodeEnum 特定状态码
* @return map
*/
protected
Map
<
String
,
Object
>
getFailResult
(
cn
.
wisenergy
.
datastation
.
common
.
core
.
utils
.
exception
.
RESPONSE_CODE_ENUM
responseCodeEnum
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
cn
.
wisenergy
.
datastation
.
common
.
core
.
enums
.
RESULT_INFO_ENUM
.
RESULT_CODE
.
getKey
(),
responseCodeEnum
.
getCode
());
map
.
put
(
cn
.
wisenergy
.
datastation
.
common
.
core
.
enums
.
RESULT_INFO_ENUM
.
RESULT_MSG
.
getKey
(),
responseCodeEnum
.
getMsg
());
return
map
;
}
/**
* 返回失败
*
* @return map
*/
protected
Map
<
String
,
Object
>
getFailResult
()
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
cn
.
wisenergy
.
datastation
.
common
.
core
.
enums
.
RESULT_INFO_ENUM
.
RESULT_CODE
.
getKey
(),
cn
.
wisenergy
.
datastation
.
common
.
core
.
utils
.
exception
.
RESPONSE_CODE_ENUM
.
SERVER_ERROR
.
getCode
());
map
.
put
(
cn
.
wisenergy
.
datastation
.
common
.
core
.
enums
.
RESULT_INFO_ENUM
.
RESULT_MSG
.
getKey
(),
cn
.
wisenergy
.
datastation
.
common
.
core
.
utils
.
exception
.
RESPONSE_CODE_ENUM
.
SERVER_ERROR
.
getMsg
());
return
map
;
}
/**
* JSON 过滤相关字段
*
...
...
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