Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
csbr-daop
/
ms-data-circulation-portal-service
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
dee2aa8b
authored
2025-10-29 11:26:48 +0800
by
xu
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
可信空间连接器入住接口
1 parent
02d2cb13
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
160 additions
and
20 deletions
src/main/java/com/csbr/qingcloud/portal/domain/vo/EnterpriseRQVO.java
src/main/java/com/csbr/qingcloud/portal/service/impl/DataPortServiceImpl.java
src/main/java/com/csbr/qingcloud/portal/service/impl/EnterpriseServiceImpl.java
src/main/java/com/csbr/qingcloud/portal/util/IDValidator.java
src/main/java/com/csbr/qingcloud/portal/domain/vo/EnterpriseRQVO.java
View file @
dee2aa8
...
...
@@ -3,6 +3,7 @@ package com.csbr.qingcloud.portal.domain.vo;
import
com.csbr.cloud.workflow.domain.vo.appove.FlowRQBaseVO
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
jakarta.validation.constraints.NotBlank
;
import
lombok.Data
;
import
java.math.BigDecimal
;
...
...
@@ -121,12 +122,14 @@ public class EnterpriseRQVO extends FlowRQBaseVO {
* 法人证件类型
*/
@Schema
(
description
=
"法人证件类型"
)
@NotBlank
(
message
=
"法人证件类型不能为空。"
)
private
String
juridicalPersonIdType
;
/**
* 法人证件号
*/
@Schema
(
description
=
"法人证件号"
)
@NotBlank
(
message
=
"法人证件号不能为空。"
)
private
String
juridicalPersonId
;
/**
...
...
@@ -154,9 +157,10 @@ public class EnterpriseRQVO extends FlowRQBaseVO {
private
String
contactTel
;
/**
*
管理员
证件号
*
经办人
证件号
*/
@Schema
(
description
=
"管理员证件号"
)
@Schema
(
description
=
"经办人证件号"
)
@NotBlank
(
message
=
"经办人证件号不能为空。"
)
private
String
managerPersonId
;
/**
...
...
@@ -196,6 +200,7 @@ public class EnterpriseRQVO extends FlowRQBaseVO {
private
String
identityState
=
"N"
;
@Schema
(
description
=
"经办人证件类型"
)
@NotBlank
(
message
=
"经办人证件类型不能为空。"
)
private
String
handlePersonIdType
;
/******** 库表存储属性 需处理 *****/
...
...
src/main/java/com/csbr/qingcloud/portal/service/impl/DataPortServiceImpl.java
View file @
dee2aa8
...
...
@@ -73,13 +73,13 @@ public class DataPortServiceImpl implements DataPortService {
@Override
public
void
operatorRegister
(
MfEnterprise
entity
)
{
log
.
info
(
"======经办人用户注册开始======"
);
OperatorRegisterRQVO
operatorRegisterRQVO
=
beforeOperator
(
entity
);
String
message
=
dataPortConnectUtil
.
postByAuthKey
(
operatorRegisterRQVO
,
dataPortConfig
.
getOperatorRegisterUri
());
if
(
StringUtils
.
isNotEmpty
(
message
)
&&
!
message
.
contains
(
"经办人账号身份标识已存在,无法注册"
))
{
throw
new
CsbrSystemException
(
SystemError
.
DATA_GET_ERROR
,
message
);
}
log
.
info
(
"======经办人用户注册结束======"
);
//
log.info("======经办人用户注册开始======");
//
OperatorRegisterRQVO operatorRegisterRQVO = beforeOperator(entity);
//
String message = dataPortConnectUtil.postByAuthKey(operatorRegisterRQVO, dataPortConfig.getOperatorRegisterUri());
//
if (StringUtils.isNotEmpty(message) && !message.contains("经办人账号身份标识已存在,无法注册")) {
//
throw new CsbrSystemException(SystemError.DATA_GET_ERROR, message);
//
}
//
log.info("======经办人用户注册结束======");
}
@Override
...
...
@@ -93,13 +93,13 @@ public class DataPortServiceImpl implements DataPortService {
@Override
public
void
enterpriseRegister
(
MfEnterprise
entity
)
{
log
.
info
(
"======法人用户注册开始======"
);
EnterpriseRegisterRQVO
enterpriseRegisterRQVO
=
beforeEnterprise
(
entity
);
String
message
=
dataPortConnectUtil
.
postByAuthKey
(
enterpriseRegisterRQVO
,
dataPortConfig
.
getEnterpriseRegisterUri
());
if
(
StringUtils
.
isNotEmpty
(
message
)
&&
!
message
.
contains
(
"统一社会信用代码已存在"
))
{
throw
new
CsbrSystemException
(
SystemError
.
DATA_GET_ERROR
,
message
);
}
log
.
info
(
"======法人用户注册结束======"
);
//
log.info("======法人用户注册开始======");
//
EnterpriseRegisterRQVO enterpriseRegisterRQVO = beforeEnterprise(entity);
//
String message = dataPortConnectUtil.postByAuthKey(enterpriseRegisterRQVO, dataPortConfig.getEnterpriseRegisterUri());
//
if (StringUtils.isNotEmpty(message) && !message.contains("统一社会信用代码已存在")) {
//
throw new CsbrSystemException(SystemError.DATA_GET_ERROR, message);
//
}
//
log.info("======法人用户注册结束======");
}
@Override
...
...
src/main/java/com/csbr/qingcloud/portal/service/impl/EnterpriseServiceImpl.java
View file @
dee2aa8
...
...
@@ -38,10 +38,7 @@ import com.csbr.qingcloud.portal.service.DataPortService;
import
com.csbr.qingcloud.portal.service.EnterpriseAttachmentService
;
import
com.csbr.qingcloud.portal.service.EnterpriseDomainService
;
import
com.csbr.qingcloud.portal.service.EnterpriseService
;
import
com.csbr.qingcloud.portal.util.ChangeInfoUtil
;
import
com.csbr.qingcloud.portal.util.DateUtil
;
import
com.csbr.qingcloud.portal.util.InvokeUtil
;
import
com.csbr.qingcloud.portal.util.ZQConfig
;
import
com.csbr.qingcloud.portal.util.*
;
import
csbr.cloud.entity.domain.base.vo.PageListVO
;
import
csbr.cloud.entity.enums.ApprovalStateEnum
;
import
io.seata.spring.annotation.GlobalTransactional
;
...
...
@@ -835,6 +832,8 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
private
void
beforeSave
(
EnterpriseRQVO
rqVO
)
{
//region 1.输入基础验证
check
(
rqVO
);
//验证证件类型证件类型
verifyDocumentType
(
rqVO
);
//endregion
// 校验附加信息
List
<
EnterpriseAttachmentRQVO
>
attachmentRQVOS
=
rqVO
.
getAttachmentRQVOS
();
...
...
@@ -895,6 +894,47 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
//endregion 5.过程处理
}
/**
* 证件类型校验
* @param rqVO
*/
private
void
verifyDocumentType
(
EnterpriseRQVO
rqVO
)
{
//验证法人证件
String
juridicalPersonId
=
rqVO
.
getJuridicalPersonId
();
Boolean
idValid
=
true
;
switch
(
rqVO
.
getJuridicalPersonIdType
()){
case
"1"
:
idValid
=
IDValidator
.
idCardValid
(
juridicalPersonId
);
break
;
case
"2"
:
idValid
=
IDValidator
.
passportValid
(
juridicalPersonId
);
break
;
case
"3"
:
idValid
=
IDValidator
.
militaryValid
(
juridicalPersonId
);
break
;
}
if
(!
idValid
){
throw
new
CsbrSystemException
(
SystemError
.
DATA_INPUT_ERROR
,
"法人证件号格式不正确。"
);
}
//验证经办人证件
String
managerPersonId
=
rqVO
.
getManagerPersonId
();
idValid
=
true
;
switch
(
rqVO
.
getHandlePersonIdType
()){
case
"1"
:
idValid
=
IDValidator
.
idCardValid
(
managerPersonId
);
break
;
case
"2"
:
idValid
=
IDValidator
.
passportValid
(
managerPersonId
);
break
;
case
"3"
:
idValid
=
IDValidator
.
militaryValid
(
managerPersonId
);
break
;
}
if
(!
idValid
){
throw
new
CsbrSystemException
(
SystemError
.
DATA_INPUT_ERROR
,
"经办人证件号格式不正确。"
);
}
}
public
List
<
DataDictVO
>
getSystemParamsList
(
String
dictType
){
if
(
StringUtils
.
isEmpty
(
dictType
)){
throw
new
CsbrSystemException
(
SystemError
.
ERROR
,
"数据字典类型不能为空。"
);
...
...
@@ -950,6 +990,8 @@ public class EnterpriseServiceImpl extends FlowAbstractImpl implements Enterpris
private
void
beforeUpdate
(
EnterpriseRQVO
rqVO
)
{
//region 1.输入基础验证
check
(
rqVO
);
//验证证件类型证件类型
verifyDocumentType
(
rqVO
);
if
(
StringUtils
.
isBlank
(
rqVO
.
getGuid
()))
{
// W00012 = {0}:参数[{1}]不能为空!
throw
new
CsbrSystemException
(
SystemError
.
DATA_INPUT_ERROR
,
messageSourceUtil
.
getMessage
(
"W00010"
,
String
.
format
(
"修改%s数据"
,
FUNCTION_NAME
),
"数据唯一标识"
));
...
...
src/main/java/com/csbr/qingcloud/portal/util/IDValidator.java
0 → 100644
View file @
dee2aa8
package
com
.
csbr
.
qingcloud
.
portal
.
util
;
import
java.util.regex.Pattern
;
/**
* 证件校验
*/
public
class
IDValidator
{
// 身份证号码正则表达式(18位)
private
static
final
String
ID_CARD_REGEX
=
"^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]$"
;
// 中国护照号码正则表达式
private
static
final
String
PASSPORT_REGEX
=
"^[EGDS]\\d{8}$"
;
// 军官证号码正则表达式(兼容常见格式)
private
static
final
String
MILITARY_ID_REGEX
=
"^[军海空北南东西JHKBNDX]\\d{7,8}$|^[军海空北南东西JHKBNDX]字第?\\d{7,8}号?$"
;
// 校验码计算权重
private
static
final
int
[]
WEIGHTS
=
{
7
,
9
,
10
,
5
,
8
,
4
,
2
,
1
,
6
,
3
,
7
,
9
,
10
,
5
,
8
,
4
,
2
};
// 校验码对应值(0-10分别对应)
private
static
final
char
[]
CHECK_CODES
=
{
'1'
,
'0'
,
'X'
,
'9'
,
'8'
,
'7'
,
'6'
,
'5'
,
'4'
,
'3'
,
'2'
};
/**
* 验证身份证号码是否合法
* @param idCard 身份证号码
* @return 合法返回true,否则false
*/
public
static
boolean
idCardValid
(
String
idCard
)
{
Pattern
idCardPattern
=
Pattern
.
compile
(
ID_CARD_REGEX
);
// 1. 校验格式
if
(
idCard
==
null
||
!
idCardPattern
.
matcher
(
idCard
).
matches
())
{
return
false
;
}
// 2. 校验校验码
char
[]
idChars
=
idCard
.
toUpperCase
().
toCharArray
();
// 统一转为大写
int
sum
=
0
;
for
(
int
i
=
0
;
i
<
17
;
i
++)
{
// 前17位必须为数字(正则已保证,此处可简化)
int
num
=
idChars
[
i
]
-
'0'
;
sum
+=
num
*
WEIGHTS
[
i
];
}
// 计算校验码
int
checkCodeIndex
=
sum
%
11
;
char
calculatedCheckCode
=
CHECK_CODES
[
checkCodeIndex
];
// 对比最后一位校验码
return
idChars
[
17
]
==
calculatedCheckCode
;
}
/**
* 验证中国护照号码是否合法
* @param passport 护照号码
* @return 合法返回true,否则false
*/
public
static
boolean
passportValid
(
String
passport
)
{
Pattern
passportPattern
=
Pattern
.
compile
(
PASSPORT_REGEX
);
if
(
passport
==
null
)
{
return
false
;
}
// 忽略大小写(实际护照号码为大写,此处兼容输入可能的小写)
return
passportPattern
.
matcher
(
passport
.
toUpperCase
()).
matches
();
}
/**
* 验证军官证号码是否符合常见格式
* @param militaryId 军官证号码
* @return 符合格式返回true,否则false
*/
public
static
boolean
militaryValid
(
String
militaryId
)
{
Pattern
militaryPattern
=
Pattern
.
compile
(
MILITARY_ID_REGEX
);
if
(
militaryId
==
null
||
militaryId
.
trim
().
isEmpty
())
{
return
false
;
}
// 去除可能的空格后验证
return
militaryPattern
.
matcher
(
militaryId
.
trim
()).
matches
();
}
public
static
void
main
(
String
[]
args
)
{
// 测试案例
String
[]
testCases
=
{
"110101199001011234"
,
// 合法格式+正确校验码
"11010119900101123X"
,
// 合法格式+正确校验码(X)
"110101199001011235"
,
// 合法格式+错误校验码
"010101199001011234"
,
// 首位为0(格式错误)
"110101199002301234"
,
// 日期非法(2月30日,正则会通过但实际无效)
"110101900101123"
// 15位旧身份证(格式错误)
};
for
(
String
id
:
testCases
)
{
System
.
out
.
println
(
id
+
" -> "
+
(
idCardValid
(
id
)
?
"合法"
:
"非法"
));
}
}
}
Write
Preview
Styling with
Markdown
is supported
Attach a file
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 post a comment