package com.highdatas.mdm.util.pool;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.highdatas.mdm.pojo.CodeMsg;
|
import com.highdatas.mdm.pojo.Result;
|
import com.highdatas.mdm.util.Constant;
|
import com.highdatas.mdm.util.DbUtils;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.http.MediaType;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.io.PrintWriter;
|
import java.util.Date;
|
|
/**
|
* @author kimi
|
* @description
|
* @date 2020-04-14 11:42
|
*/
|
|
|
public abstract class PriorityTask implements Runnable, Comparable<PriorityTask>{
|
@Value("${pool.coefficient}")
|
Integer cntCoefficient;
|
@Value("${pool.timeout}")
|
Integer timeout;
|
protected Long prority;
|
protected String code;
|
protected int cnt;
|
protected Date time;
|
protected Date endTime;
|
protected HttpServletResponse response;
|
|
public PriorityTask(String code, HttpServletResponse response, int cnt, Date time) {
|
this.code = code;
|
this.response = response;
|
calPrority();
|
calEndTime();
|
}
|
|
public PriorityTask(String code, HttpServletResponse response) {
|
this.code = code;
|
this.response = response;
|
}
|
|
public void calEndTime() {
|
long time = this.time.getTime();
|
if (timeout == null) {
|
timeout = 3000000;
|
}
|
long l = time + timeout;
|
this.endTime = new Date(l);
|
}
|
|
public void calPrority() {
|
long basePrority = DbUtils.getDistanceTime2Long(DbUtils.getDateByEnd(), this.time) / 1000;
|
if (cntCoefficient == null) {
|
//默认系数50
|
cntCoefficient = Constant.cntCoefficient;
|
}
|
int val = cnt * cntCoefficient;
|
basePrority += val;
|
this.prority = basePrority;
|
}
|
|
public String getCode() {
|
return code;
|
}
|
|
public int getCnt() {
|
return cnt;
|
}
|
|
public Date getEndTime() {
|
return endTime;
|
}
|
|
public Date getTime() {
|
return time;
|
}
|
|
public HttpServletResponse getResponse() {
|
return response;
|
}
|
|
public PriorityTask(String code, long prority, HttpServletResponse response) {
|
this.prority = prority;
|
this.code = code;
|
this.response = response;
|
}
|
|
public void setCnt(int cnt) {
|
this.cnt = cnt;
|
calPrority();
|
}
|
|
public void setTime(Date time) {
|
this.time = time;
|
calPrority();
|
calEndTime();
|
}
|
|
public void setResponse(HttpServletResponse response) {
|
this.response = response;
|
}
|
|
public long getPrority() {
|
return prority;
|
}
|
|
@Override
|
public abstract void run();
|
|
|
@Override
|
public int compareTo(PriorityTask o) {
|
return prority.compareTo(o.getPrority());
|
}
|
|
public void printTimeOut() throws IOException {
|
PrintWriter writer = response.getWriter();
|
response.setCharacterEncoding("UTF-8");
|
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
|
writer.write(JSONObject.toJSONString(Result.error(CodeMsg.TIMOUT_ERROR)));
|
}
|
|
public void printRepeat() throws IOException {
|
PrintWriter writer = response.getWriter();
|
response.setCharacterEncoding("UTF-8");
|
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
|
writer.write(JSONObject.toJSONString(Result.error(CodeMsg.REPEAT_ERROR)));
|
}
|
}
|