ludc
2024-12-04 e405b861b9521f5ea38c5402203a5b05988f9de2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package com.vci.web.ajaxTask;
 
import com.vci.web.service.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)&gt;0 &amp;&amp; y.compareTo(z)&gt;0)</tt> implies
     * <tt>x.compareTo(z)&gt;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 +
                '}';
    }
}