63 lines
2.0 KiB
Java
63 lines
2.0 KiB
Java
|
|
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<DateTimeRange, Object> {
|
||
|
|
|
||
|
|
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;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|