dee2aa8b by xu

可信空间连接器入住接口

1 parent 02d2cb13
......@@ -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;
/******** 库表存储属性 需处理 *****/
......
......@@ -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
......
......@@ -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), "数据唯一标识"));
......
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) ? "合法" : "非法"));
}
}
}
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!