public enum DictCode {
TARGET_LIBRARY_TYPE("TARGET_LIBRARY_TYPE"),
MENU_TYPE("MENU_TYPE"),
TARGET_TYPE("TARGET_TYPE"),
TARGET_STATUS("TARGET_STATUS"),
TARGET_OPEN("TARGET_OPEN"),
TARGET_LABEL("TARGET_LABEL"),
TASK_TYPE("TASK_TYPE"),
TARGET_VIEW_TYPE("TARGET_VIEW_TYPE"),
TASK_VIEW_TYPE("TASK_VIEW_TYPE"),
TASK_STATUS("TASK_STATUS"),
REVIEW_SCORE("REVIEW_SCORE"),
SELF_EVALUATION_SCORE("SELF_EVALUATION_SCORE"),
UPDATED_STATUS("UPDATED_STATUS");
private String code;
DictCode(String code) {
this.code = code;
}
public String getCode() {
return code;
}
}
@InDict(code = DictCode.TARGET_LIBRARY_TYPE)
private String type;
import com.megvii.performance.config.InDictValidator;
import com.megvii.performance.pojo.dto.DictCode;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = InDictValidator.class)
public @interface InDict {
DictCode code();
String message() default "字段类型不在字典中!";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.megvii.performance.common.annotation.InDict;
import com.megvii.performance.pojo.dto.DictCode;
import com.megvii.performance.pojo.entity.sys.DefDictDO;
import com.megvii.performance.pojo.entity.sys.DefDictRegiseterDO;
import com.megvii.performance.service.sys.DefDictRegiseterService;
import com.megvii.performance.service.sys.DefDictService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class InDictValidator implements ConstraintValidator<InDict, String> {
private DictCode dictCode;
@Autowired
private DefDictRegiseterService defDictRegiseterService;
@Autowired
private DefDictService defDictService;
@Override
public void initialize(InDict code) {
this.dictCode = code.code();
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean isValid(String code, ConstraintValidatorContext constraintValidatorContext) {
if (StringUtils.isEmpty(code)){
return true;
}
if (null == defDictRegiseterService.getOne(new LambdaQueryWrapper<DefDictRegiseterDO>().eq(DefDictRegiseterDO::getCode, this.dictCode.getCode()))){
throw new RuntimeException("字典表中不存在的code!");
}
return null != defDictService.getOne(new LambdaQueryWrapper<DefDictDO>()
.eq(DefDictDO::getPkRegister, this.dictCode.getCode())
.eq(DefDictDO::getCode, code));
}
}