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;
}