自定义校验,至少有一个字段不为空

package com.XX.XX.util.annotation;

import com.XX.XX.util.annotation.validator.AtLeastOneNotEmptyValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

/**
 * AtLeastOneNotEmpty
 *
 * @author wangchen
 * @date 2023/1/17 15:12
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = AtLeastOneNotEmptyValidator.class)
@Documented
public @interface AtLeastOneNotEmpty {

    String message() default "至少有一个属性不可为空";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    String[] fields();
}
package com.XX.XX.util.annotation.validator;

import com.XX.XX.util.annotation.AtLeastOneNotEmpty;
import lombok.extern.slf4j.Slf4j;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.lang.reflect.Field;

/**
 * AtLeastOneNotEmptyValidator
 *
 * @author wangchen
 * @date 2023/1/17 15:15
 */
@Slf4j
public class AtLeastOneNotEmptyValidator implements ConstraintValidator<AtLeastOneNotEmpty, Object> {
    private String[] fields;

    @Override
    public void initialize(AtLeastOneNotEmpty atLeastOneNotEmpty) {
        this.fields = atLeastOneNotEmpty.fields();
    }

    @Override
    public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
        if (object == null) {
            return true;
        }
        try {
            for (String fieldName : fields) {
                Object property = getField(object, fieldName);

                if (property != null && !"".equals(property)) {
                    return true;
                }
            }
            return false;
        } catch (Exception e) {
            log.error("", e);
            return false;
        }
    }

    private Object getField(Object object, String fieldName) throws IllegalAccessException {
        if (object == null) {
            return null;
        }
        Class<?> clazz = object.getClass();
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            if (field.getName().equals(fieldName)) {
                field.setAccessible(true);
                return field.get(object);
            }
        }
        return null;
    }
}
package com.XX.XX.domain.param;

import com.XX.XX.util.annotation.AtLeastOneNotEmpty;
import lombok.Data;

import java.math.BigDecimal;

/**
 * SalaryAdjustParam
 *
 * @author wangchen
 * @date 2022-10-31 11:17
 */
@Data
@AtLeastOneNotEmpty(fields = {
        "weekdayOvertimePayPercentage", "weekdayOvertimePayBase", "meritPayJudge", "allowancesSubsidiesJudge", "allowancesSubsidies",
        "lunchSubsidies", "telephoneExpensesSubsidies", "trafficSubsidies", "accommodationSubsidies", "factoryBuildSubsidies",
        "postSubsidies", "skillSubsidies", "currentStandardSalary", "probationPeriodSalary", "internshipSalary"
}, message = "至少需要一个异动数据")
public class SalaryAdjustParam {

    /** 工号 */
    private String employeeNo;
    /** 证件号 */
    private String idCardNo;
    /** 原平日加班费占比 */
    private BigDecimal originalWeekdayOvertimePayPercentage;
    /** 原平日加班费基数 */
    private BigDecimal originalWeekdayOvertimePayBase;
    /** 原绩效工资判定 */
    private BigDecimal originalMeritPayJudge;
    /** 原津补贴判定 */
    private Long originalAllowancesSubsidiesJudge;
    /** 原津补贴 */
    private BigDecimal originalAllowancesSubsidies;

    /** 原全勤奖 */
    private BigDecimal originalAttendanceBonus;
    /** 原午餐补贴 */
    private BigDecimal originalLunchSubsidies;
    /** 原话费补贴 */
    private BigDecimal originalTelephoneExpensesSubsidies;
    /** 原交通补贴 */
    private BigDecimal originalTrafficSubsidies;
    /** 原住宿补贴 */
    private BigDecimal originalAccommodationSubsidies;
    /** 原建厂补贴 */
    private BigDecimal originalFactoryBuildSubsidies;
    /** 原岗位津贴 */
    private BigDecimal originalPostSubsidies;
    /** 原技能津贴 */
    private BigDecimal originalSkillSubsidies;
    /** 原先标准工资(元/月) */
    private BigDecimal originalCurrentStandardSalary;
    /** 原试用期工资(元/月) */
    private BigDecimal originalProbationPeriodSalary;
    /** 原实习期工资(元/月) */
    private BigDecimal originalInternshipSalary;
    /** 平日加班费占比 */
    private BigDecimal weekdayOvertimePayPercentage;
    /** 平日加班费基数 */
    private BigDecimal weekdayOvertimePayBase;
    /** 绩效工资判定 */
    private BigDecimal meritPayJudge;
    /** 津补贴判定 */
    private Long allowancesSubsidiesJudge;
    /** 津补贴 */
    private BigDecimal allowancesSubsidies;
    /** 午餐补贴 */
    private BigDecimal lunchSubsidies;
    /** 话费补贴 */
    private BigDecimal telephoneExpensesSubsidies;
    /** 交通补贴 */
    private BigDecimal trafficSubsidies;
    /** 住宿补贴 */
    private BigDecimal accommodationSubsidies;
    /** 建厂补贴 */
    private BigDecimal factoryBuildSubsidies;
    /** 岗位津贴 */
    private BigDecimal postSubsidies;
    /** 技能津贴 */
    private BigDecimal skillSubsidies;
    /** 现标准工资(元/月) */
    private BigDecimal currentStandardSalary;
    /** 试用期工资(元/月) */
    private BigDecimal probationPeriodSalary;
    /** 实习期工资(元/月) */
    private BigDecimal internshipSalary;
    /** 变更时间 */
    private String adjustDate;
    /** 变更人 */
    private String adjustUser;
    /** 变更原因 */
    private String adjustReason;
    /** 生效日期 */
    private String effectiveDate;
    /** 1:单个异动;2:批量异动 */
    private Integer adjustMethod;
    /** 全勤奖 */
    private BigDecimal attendanceBonus;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值