package com.whdc.zhdbaqapi.annotation; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang3.StringUtils; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.TimeUnit; /** * @author 李赛 * @date 2022-04-27 11:55 */ public class DateTimeRangeValidator implements ConstraintValidator { private String datefmt; private String startField; private String endField; private long interval; private TimeUnit timeUnit; @Override public void initialize(DateTimeRange dateTimeRange) { this.datefmt = dateTimeRange.datafmt(); this.startField = dateTimeRange.startField(); this.endField = dateTimeRange.endField(); this.interval = dateTimeRange.interval(); this.timeUnit = dateTimeRange.timeUnit(); } @Override public boolean isValid(Object obj, ConstraintValidatorContext context) { try { if (obj == null) { return false; } if (StringUtils.isBlank(this.startField) || StringUtils.isBlank(this.endField)) { return false; } String stmval = BeanUtils.getProperty(obj, this.startField); String etmval = BeanUtils.getProperty(obj, this.endField); if (StringUtils.isBlank(stmval) || StringUtils.isBlank(etmval)) { return false; } DateFormat df = new SimpleDateFormat(this.datefmt); Date stm = df.parse(stmval); Date etm = df.parse(etmval); long dateDiff = stm.getTime() - etm.getTime(); return Math.abs(dateDiff) < this.timeUnit.toMillis(this.interval); } catch (Exception e) { return false; } } }