package com.vci.frameworkcore.ajaxTask;
|
|
import com.vci.frameworkcore.compatibility.SmUserQueryServiceI;
|
|
import java.util.concurrent.Delayed;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* 解锁用户的延时任务
|
* 每个任务的执行时间可能会不一样
|
* @author weidy
|
* @date 2020/2/5
|
*/
|
public class SmUserUnLockTask implements Delayed {
|
|
/**
|
* 用户服务
|
**/
|
final private SmUserQueryServiceI userService;
|
|
/**
|
* 用户的主键
|
*/
|
final private String userId ;
|
|
/**
|
* 延时时间
|
*/
|
final private Long delayTime;
|
|
public SmUserUnLockTask(SmUserQueryServiceI userService, String userId, Long delayTime) {
|
super();
|
this.userService = userService;
|
this.userId = userId;
|
this.delayTime = delayTime + System.currentTimeMillis();
|
}
|
|
public SmUserQueryServiceI getUserService() {
|
return userService;
|
}
|
|
public String getUserId() {
|
return userId;
|
}
|
|
public Long getDelayTime() {
|
return delayTime;
|
}
|
|
/**
|
* Returns the remaining delay associated with this object, in the
|
* given time unit.
|
*
|
* @param unit the time unit
|
* @return the remaining delay; zero or negative values indicate
|
* that the delay has already elapsed
|
*/
|
@Override
|
public long getDelay(TimeUnit unit) {
|
return unit.convert(this.delayTime - System.currentTimeMillis(), unit);
|
}
|
|
/**
|
* Compares this object with the specified object for order. Returns a
|
* negative integer, zero, or a positive integer as this object is less
|
* than, equal to, or greater than the specified object.
|
*
|
* <p>The implementor must ensure <tt>sgn(x.compareTo(y)) ==
|
* -sgn(y.compareTo(x))</tt> for all <tt>x</tt> and <tt>y</tt>. (This
|
* implies that <tt>x.compareTo(y)</tt> must throw an exception iff
|
* <tt>y.compareTo(x)</tt> throws an exception.)
|
*
|
* <p>The implementor must also ensure that the relation is transitive:
|
* <tt>(x.compareTo(y)>0 && y.compareTo(z)>0)</tt> implies
|
* <tt>x.compareTo(z)>0</tt>.
|
*
|
* <p>Finally, the implementor must ensure that <tt>x.compareTo(y)==0</tt>
|
* implies that <tt>sgn(x.compareTo(z)) == sgn(y.compareTo(z))</tt>, for
|
* all <tt>z</tt>.
|
*
|
* <p>It is strongly recommended, but <i>not</i> strictly required that
|
* <tt>(x.compareTo(y)==0) == (x.equals(y))</tt>. Generally speaking, any
|
* class that implements the <tt>Comparable</tt> interface and violates
|
* this condition should clearly indicate this fact. The recommended
|
* language is "Note: this class has a natural ordering that is
|
* inconsistent with equals."
|
*
|
* <p>In the foregoing description, the notation
|
* <tt>sgn(</tt><i>expression</i><tt>)</tt> designates the mathematical
|
* <i>signum</i> function, which is defined to return one of <tt>-1</tt>,
|
* <tt>0</tt>, or <tt>1</tt> according to whether the value of
|
* <i>expression</i> is negative, zero or positive.
|
*
|
* @param o the object to be compared.
|
* @return a negative integer, zero, or a positive integer as this object
|
* is less than, equal to, or greater than the specified object.
|
* @throws NullPointerException if the specified object is null
|
* @throws ClassCastException if the specified object's type prevents it
|
* from being compared to this object.
|
*/
|
@Override
|
public int compareTo(Delayed o) {
|
long delta = getDelay(TimeUnit.NANOSECONDS) - o.getDelay(TimeUnit.NANOSECONDS);
|
return (int) delta;
|
}
|
|
/**
|
* 对比
|
* @param obj
|
* @return
|
*/
|
@Override
|
public boolean equals(Object obj) {
|
if (obj instanceof String) {
|
return this.userId.equals(((String) obj));
|
}
|
return false;
|
}
|
|
@Override
|
public String toString() {
|
return "SmUserUnLockTask{" +
|
"userService=" + userService +
|
", userId='" + userId + '\'' +
|
", delayTime=" + delayTime +
|
'}';
|
}
|
}
|