feat:[REQ-3488]

1. 新增验证工具类,与hutool不同的是, 这个工具类使用的java本身的validator
This commit is contained in:
liuyang 2025-01-15 15:33:27 +08:00
parent 907b226291
commit 3f2761246d
6 changed files with 134 additions and 2 deletions

View File

@ -32,6 +32,14 @@
<groupId>cn.axzo.orgmanax</groupId> <groupId>cn.axzo.orgmanax</groupId>
<artifactId>orgmanax-dto</artifactId> <artifactId>orgmanax-dto</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.el</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -0,0 +1,101 @@
package cn.axzo.orgmanax.common;
import cn.axzo.orgmanax.dto.cooperateship.dto.OrgCooperateShipDTO;
import cn.hutool.extra.validation.BeanValidationResult;
import org.hibernate.validator.HibernateValidator;
import org.hibernate.validator.PredefinedScopeHibernateValidator;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.Set;
/**
* @Author: LiuYang
* @Date: 2024/2/1 14:13
*/
public class ValidationUtil {
/**
* 默认{@link Validator} 对象
*/
private static final Validator validator;
static {
try(ValidatorFactory factory = Validation.buildDefaultValidatorFactory()){
validator = factory.getValidator();
}
}
/**
* 校验对象
*
* @param <T> Bean类型
* @param bean bean
* @param groups 校验组
* @return {@link Set}
*/
public static <T> Set<ConstraintViolation<T>> validate(T bean, Class<?>... groups) {
return validator.validate(bean, groups);
}
/**
* 校验bean的某一个属性
*
* @param <T> Bean类型
* @param bean bean
* @param propertyName 属性名称
* @param groups 验证分组
* @return {@link Set}
*/
public static <T> Set<ConstraintViolation<T>> validateProperty(T bean, String propertyName, Class<?>... groups) {
return validator.validateProperty(bean, propertyName, groups);
}
/**
* 校验对象
*
* @param <T> Bean类型
* @param bean bean
* @param groups 校验组
* @return {@link BeanValidationResult}
*/
public static <T> BeanValidationResult warpValidate(T bean, Class<?>... groups) {
return warpBeanValidationResult(validate(bean, groups));
}
/**
* 校验bean的某一个属性
*
* @param <T> bean类型
* @param bean bean
* @param propertyName 属性名称
* @param groups 验证分组
* @return {@link BeanValidationResult}
*/
public static <T> BeanValidationResult warpValidateProperty(T bean, String propertyName, Class<?>... groups) {
return warpBeanValidationResult(validateProperty(bean, propertyName, groups));
}
/**
* 包装校验结果
*
* @param constraintViolations 校验结果集
* @return {@link BeanValidationResult}
*/
private static <T> BeanValidationResult warpBeanValidationResult(Set<ConstraintViolation<T>> constraintViolations) {
BeanValidationResult result = new BeanValidationResult(constraintViolations.isEmpty());
for (ConstraintViolation<T> constraintViolation : constraintViolations) {
BeanValidationResult.ErrorMessage errorMessage = new BeanValidationResult.ErrorMessage();
errorMessage.setPropertyName(constraintViolation.getPropertyPath().toString());
errorMessage.setMessage(constraintViolation.getMessage());
errorMessage.setValue(constraintViolation.getInvalidValue());
result.addErrorMessage(errorMessage);
}
return result;
}
}

View File

@ -7,6 +7,7 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import javax.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@ -19,6 +20,7 @@ public class OrgCooperateShipDTO implements Serializable {
/** /**
* 主健 * 主健
*/ */
@NotNull
private Long id; private Long id;
/** /**

View File

@ -6,6 +6,9 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@ -15,46 +18,55 @@ public class CooperateShipCreator {
/** /**
* 工作台ID * 工作台ID
*/ */
@NotNull(message = "工作台ID为空")
private Long workspaceId; private Long workspaceId;
/** /**
* 工作台名称 * 工作台名称
*/ */
@NotBlank(message = "工作台名称为空")
private String workspaceName; private String workspaceName;
/** /**
* 工作台类型 * 工作台类型
*/ */
@NotNull(message = "工作台类型为空")
private Integer workspaceType; private Integer workspaceType;
/** /**
* 组织节点ID * 组织节点ID
*/ */
@NotNull(message = "组织节点ID为空")
private Long organizationalNodeId; private Long organizationalNodeId;
/** /**
* 组织单位ID * 组织单位ID
*/ */
@NotNull(message = "组织单位ID为空")
private Long organizationalUnitId; private Long organizationalUnitId;
/** /**
* 组织单位名称 * 组织单位名称
*/ */
@NotBlank(message = "组织单位名称为空")
private String organizationalUnitName; private String organizationalUnitName;
/** /**
* 父级协同节点ID * 父级协同节点ID
*/ */
@NotNull(message = "父级协同节点ID为空")
private Long parentId; private Long parentId;
/** /**
* 协同类型 * 协同类型
*/ */
@NotNull(message = "协同类型为空")
private Integer cooperateType; private Integer cooperateType;
/** /**
* 协作关系 * 协作关系
*/ */
@NotNull(message = "协作关系为空")
private Integer partnerShip; private Integer partnerShip;
/** /**

View File

@ -3,6 +3,8 @@ package cn.axzo.orgmanax.server.cooperateship.foundation.impl;
import cn.axzo.foundation.event.support.Event; import cn.axzo.foundation.event.support.Event;
import cn.axzo.foundation.event.support.producer.EventProducer; import cn.axzo.foundation.event.support.producer.EventProducer;
import cn.axzo.foundation.exception.Axssert; import cn.axzo.foundation.exception.Axssert;
import cn.axzo.foundation.exception.BusinessException;
import cn.axzo.orgmanax.common.ValidationUtil;
import cn.axzo.orgmanax.common.config.BizResultCode; import cn.axzo.orgmanax.common.config.BizResultCode;
import cn.axzo.orgmanax.dto.cooperateship.dto.OrgCooperateShipDTO; import cn.axzo.orgmanax.dto.cooperateship.dto.OrgCooperateShipDTO;
import cn.axzo.orgmanax.dto.cooperateship.enums.CooperateShipStatusEnum; import cn.axzo.orgmanax.dto.cooperateship.enums.CooperateShipStatusEnum;
@ -30,8 +32,10 @@ import cn.hutool.core.util.StrUtil;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import cn.hutool.extra.validation.BeanValidationResult;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -145,6 +149,12 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati
@Override @Override
public SaasCooperateShip create(CooperateShipCreator creator) { public SaasCooperateShip create(CooperateShipCreator creator) {
// 入参校验
BeanValidationResult validationResult = ValidationUtil.warpValidate(creator);
Axssert.check(validationResult.isSuccess(), BizResultCode.INVALID_PARAM,
validationResult.getErrorMessages().stream().map(BeanValidationResult.ErrorMessage::getMessage).findFirst().orElse(""));
// 如果parentId不为空, 初始化父级协同节点 // 如果parentId不为空, 初始化父级协同节点
SaasCooperateShip parentCooperateShip = null; SaasCooperateShip parentCooperateShip = null;
if (Objects.nonNull(creator.getParentId()) && creator.getParentId() > 0) { if (Objects.nonNull(creator.getParentId()) && creator.getParentId() > 0) {
@ -191,7 +201,7 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati
.build()) .build())
.build()); .build());
// 返回结果 // 返回结果
return cooperateShipQueryRepository.one(CooperateShipQueryRepository.OneReq.builder().id(savedCooperateShip.getId()).build()); return savedCooperateShip;
} }
} }

View File

@ -81,7 +81,6 @@ public class CooperateShipServiceImpl implements CooperateShipService {
@Override @Override
public List<OrgCooperateShipDTO> list(ListOrgCooperateShipReq req) { public List<OrgCooperateShipDTO> list(ListOrgCooperateShipReq req) {
// 全局变量定义是否查询当前节点的人员 // 全局变量定义是否查询当前节点的人员
boolean isFilterCurrentNodeByPerson = ObjectUtil.isNotNull(req.getFilterByPersonId()) && boolean isFilterCurrentNodeByPerson = ObjectUtil.isNotNull(req.getFilterByPersonId()) &&
Objects.equals(req.getFilterMethod(), ListOrgCooperateShipReq.FILTER_PERSON_TYPE_CURRENT_NODE); Objects.equals(req.getFilterMethod(), ListOrgCooperateShipReq.FILTER_PERSON_TYPE_CURRENT_NODE);