|
|
|
@ -9,10 +9,7 @@ import cn.hutool.http.HttpResponse;
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.yuyou.openapi.openapi.common.enums.IntentionEnum;
|
|
|
|
|
import com.yuyou.openapi.openapi.model.dto.ABMessageCovDTO;
|
|
|
|
|
import com.yuyou.openapi.openapi.model.dto.ABMessageDTO;
|
|
|
|
|
import com.yuyou.openapi.openapi.model.dto.LieheMessageCovDTO;
|
|
|
|
|
import com.yuyou.openapi.openapi.model.dto.ShijiMessageCovDTO;
|
|
|
|
|
import com.yuyou.openapi.openapi.model.dto.*;
|
|
|
|
|
import com.yuyou.openapi.openapi.service.ABMessageService;
|
|
|
|
|
import com.yuyou.openapi.openapi.utils.DateUtils;
|
|
|
|
|
import com.yuyou.openapi.openapi.utils.SignUtils;
|
|
|
|
@ -78,6 +75,31 @@ public class ABDownTask {
|
|
|
|
|
@Value("${ab.shiji.secretKey}")
|
|
|
|
|
private String shiJiSecretKey;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 配置文件中加载配置信息 - 罗石
|
|
|
|
|
*/
|
|
|
|
|
@Value("${ab.luoshi.appId}")
|
|
|
|
|
private String luoShiAppId;
|
|
|
|
|
|
|
|
|
|
@Value("${ab.luoshi.url}")
|
|
|
|
|
private String luoShiUrl;
|
|
|
|
|
|
|
|
|
|
@Value("${ab.luoshi.secretKey}")
|
|
|
|
|
private String luoShiSecretKey;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 配置文件中加载配置信息 - 潘达
|
|
|
|
|
*/
|
|
|
|
|
@Value("${ab.panda.appId}")
|
|
|
|
|
private String panDaAppId;
|
|
|
|
|
|
|
|
|
|
@Value("${ab.panda.url}")
|
|
|
|
|
private String panDaUrl;
|
|
|
|
|
|
|
|
|
|
@Value("${ab.panda.secretKey}")
|
|
|
|
|
private String panDaSecretKey;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 任务处理入口,主要用于时间记录
|
|
|
|
@ -232,6 +254,189 @@ public class ABDownTask {
|
|
|
|
|
return Boolean.TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 任务处理入口,主要用于时间记录
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Async(value = "abTaskExecutor")
|
|
|
|
|
public void doRunLuoshiTask(List<ABMessageDTO> messageDTOList){
|
|
|
|
|
Long satrtMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
|
|
log.info("====== [ task start running, task name is {} ] ======", "doRunLuoshiTask");
|
|
|
|
|
runLuoshiTask(messageDTOList);
|
|
|
|
|
Long endMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
|
|
log.info("====== [ task start end, task name is {},cost milliSecond is {} ] ======", "doRunLuoshiTask", (endMilliSecond-satrtMilliSecond));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 真实的任务执行入口
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private boolean runLuoshiTask(List<ABMessageDTO> messageDTOList){
|
|
|
|
|
int count = 0; // 设置请求失败计数
|
|
|
|
|
// 数据实体进行映射转换 - 目前是只有一条给
|
|
|
|
|
LuoshiMessageCovDTO luoshiMessageCovDTO = new LuoshiMessageCovDTO();
|
|
|
|
|
// 对特殊情况进行过滤,只要AB单的用户,且字段加密规则要重新进行制定
|
|
|
|
|
List<ABMessageDTO> collect = messageDTOList.stream()
|
|
|
|
|
.filter(item -> (1 == item.getClientType()) || 2 == item.getClientType())
|
|
|
|
|
.map(item -> {
|
|
|
|
|
// pno通配
|
|
|
|
|
String reverse = StringUtils.reverse(item.getMobile());
|
|
|
|
|
item.setMobile(reverse);
|
|
|
|
|
// startTime 通配下游到秒
|
|
|
|
|
Long startTime = item.getStartTime();
|
|
|
|
|
if (startTime != null && startTime.toString().length() == 13) {
|
|
|
|
|
item.setStartTime(startTime / 1000);
|
|
|
|
|
}
|
|
|
|
|
return item;
|
|
|
|
|
})
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
List<LuoshiMessageCovDTO.LuoshiData> data = new ArrayList<>();
|
|
|
|
|
// 进行转换
|
|
|
|
|
collect.forEach(
|
|
|
|
|
each->{
|
|
|
|
|
LuoshiMessageCovDTO.LuoshiData luoshiData = new LuoshiMessageCovDTO.LuoshiData();
|
|
|
|
|
// BeanUtils.copyProperties(each, luoshiData);
|
|
|
|
|
luoshiData.setInfo(each.getMobile());
|
|
|
|
|
luoshiData.setType(1);
|
|
|
|
|
luoshiData.setTime(each.getStartTime());
|
|
|
|
|
data.add(luoshiData);
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
// 进行设置
|
|
|
|
|
if (!CollectionUtils.isEmpty(data)){
|
|
|
|
|
luoshiMessageCovDTO.setData(data);
|
|
|
|
|
}
|
|
|
|
|
// 补充其他的下游请求字段
|
|
|
|
|
long time = System.currentTimeMillis() / 1000;
|
|
|
|
|
luoshiMessageCovDTO.setTimestamp(time);
|
|
|
|
|
luoshiMessageCovDTO.setAppId(luoShiAppId);
|
|
|
|
|
luoshiMessageCovDTO.setSignature(SecureUtil.sha1("app_id="+ luoShiAppId +"×tamp="+ time + "&secret=" + luoShiSecretKey));
|
|
|
|
|
// 数据实体转成Json 不忽略空kv 有序
|
|
|
|
|
String jsonStr = JSON.toJSONString(luoshiMessageCovDTO);
|
|
|
|
|
log.info("========== [ready send json is {} ] =============", jsonStr);
|
|
|
|
|
// 请求的响应处理
|
|
|
|
|
// todo 失败重发请求3次
|
|
|
|
|
while (count <= 3){
|
|
|
|
|
// 调用HTTP请求发送数据
|
|
|
|
|
HttpResponse httpResponse = sendLuoshiReq(jsonStr);
|
|
|
|
|
if (httpResponse.isOk() && httpResponse.body().contains("success")){
|
|
|
|
|
log.info("========== [request success, response is {} ] ==========", httpResponse.body());
|
|
|
|
|
break;
|
|
|
|
|
}else{
|
|
|
|
|
count ++;
|
|
|
|
|
try {
|
|
|
|
|
Thread.sleep(500);
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
log.error("sleep error!");
|
|
|
|
|
}
|
|
|
|
|
log.error("========== [request fail, response is {} ] ==========", httpResponse.body());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (count > 3) {
|
|
|
|
|
return Boolean.FALSE;
|
|
|
|
|
}
|
|
|
|
|
collect.forEach(
|
|
|
|
|
// FIXME: 2020/8/12 0012 可能会造成更新失败,检查更新语句
|
|
|
|
|
each -> abMessageService.updateSendLSSatus(Long.valueOf(each.getRecId()), Boolean.TRUE)
|
|
|
|
|
);
|
|
|
|
|
return Boolean.TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 任务处理入口,主要用于时间记录
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Async(value = "abTaskExecutor")
|
|
|
|
|
public void doRunPandaTask(List<ABMessageDTO> messageDTOList){
|
|
|
|
|
Long satrtMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
|
|
log.info("====== [ task start running, task name is {} ] ======", "doRunPandaTask");
|
|
|
|
|
runPandaTask(messageDTOList);
|
|
|
|
|
Long endMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
|
|
log.info("====== [ task start end, task name is {},cost milliSecond is {} ] ======", "doRunPandaTask", (endMilliSecond-satrtMilliSecond));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 真实的任务执行入口
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private boolean runPandaTask(List<ABMessageDTO> messageDTOList){
|
|
|
|
|
int count = 0; // 设置请求失败计数
|
|
|
|
|
// 数据实体进行映射转换 - 目前是只有一条给
|
|
|
|
|
PandaMessageCovDTO pandaMessageCovDTO = new PandaMessageCovDTO();
|
|
|
|
|
// 对特殊情况进行过滤,只要AB单的用户,且字段加密规则要重新进行制定
|
|
|
|
|
List<ABMessageDTO> collect = messageDTOList.stream()
|
|
|
|
|
.filter(item -> (1 == item.getClientType()) || 2 == item.getClientType())
|
|
|
|
|
.map(item -> {
|
|
|
|
|
// pno通配
|
|
|
|
|
String reverse = StringUtils.reverse(item.getMobile());
|
|
|
|
|
item.setMobile(reverse);
|
|
|
|
|
// startTime 通配下游到秒
|
|
|
|
|
Long startTime = item.getStartTime();
|
|
|
|
|
if (startTime != null && startTime.toString().length() == 13) {
|
|
|
|
|
item.setStartTime(startTime / 1000);
|
|
|
|
|
}
|
|
|
|
|
return item;
|
|
|
|
|
})
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
List<PandaMessageCovDTO.PandaData> data = new ArrayList<>();
|
|
|
|
|
// 进行转换
|
|
|
|
|
collect.forEach(
|
|
|
|
|
each->{
|
|
|
|
|
PandaMessageCovDTO.PandaData pandaData = new PandaMessageCovDTO.PandaData();
|
|
|
|
|
// BeanUtils.copyProperties(each, luoshiData);
|
|
|
|
|
pandaData.setInfo(each.getMobile());
|
|
|
|
|
pandaData.setType(1);
|
|
|
|
|
pandaData.setTime(each.getStartTime());
|
|
|
|
|
data.add(pandaData);
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
// 进行设置
|
|
|
|
|
if (!CollectionUtils.isEmpty(data)){
|
|
|
|
|
pandaMessageCovDTO.setData(data);
|
|
|
|
|
}
|
|
|
|
|
// 补充其他的下游请求字段
|
|
|
|
|
long time = System.currentTimeMillis() / 1000;
|
|
|
|
|
pandaMessageCovDTO.setTimestamp(time);
|
|
|
|
|
pandaMessageCovDTO.setAppId(panDaAppId);
|
|
|
|
|
pandaMessageCovDTO.setSignature(SecureUtil.sha1("app_id="+ panDaAppId +"×tamp="+ time + "&secret=" + panDaSecretKey));
|
|
|
|
|
// 数据实体转成Json 不忽略空kv 有序
|
|
|
|
|
String jsonStr = JSON.toJSONString(pandaMessageCovDTO);
|
|
|
|
|
log.info("========== [ready send json is {} ] =============", jsonStr);
|
|
|
|
|
// 请求的响应处理
|
|
|
|
|
// todo 失败重发请求3次
|
|
|
|
|
while (count <= 3){
|
|
|
|
|
// 调用HTTP请求发送数据
|
|
|
|
|
HttpResponse httpResponse = sendPandaReq(jsonStr);
|
|
|
|
|
if (httpResponse.isOk() && httpResponse.body().contains("success")){
|
|
|
|
|
log.info("========== [request success, response is {} ] ==========", httpResponse.body());
|
|
|
|
|
break;
|
|
|
|
|
}else{
|
|
|
|
|
count ++;
|
|
|
|
|
try {
|
|
|
|
|
Thread.sleep(500);
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
log.error("sleep error!");
|
|
|
|
|
}
|
|
|
|
|
log.error("========== [request fail, response is {} ] ==========", httpResponse.body());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (count > 3) {
|
|
|
|
|
return Boolean.FALSE;
|
|
|
|
|
}
|
|
|
|
|
collect.forEach(
|
|
|
|
|
// FIXME: 2020/8/12 0012 可能会造成更新失败,检查更新语句
|
|
|
|
|
each -> abMessageService.updateSendPDSatus(Long.valueOf(each.getRecId()), Boolean.TRUE)
|
|
|
|
|
);
|
|
|
|
|
return Boolean.TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 任务处理入口,主要用于时间记录
|
|
|
|
|
*
|
|
|
|
@ -327,6 +532,34 @@ public class ABDownTask {
|
|
|
|
|
return httpResponse;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 调用HTTP请求发送数据
|
|
|
|
|
*
|
|
|
|
|
* @param json 请求的body内容
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private HttpResponse sendLuoshiReq(String json){
|
|
|
|
|
HttpResponse httpResponse = HttpRequest
|
|
|
|
|
.post(luoShiUrl)
|
|
|
|
|
.body(json)
|
|
|
|
|
.execute();
|
|
|
|
|
return httpResponse;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 调用HTTP请求发送数据
|
|
|
|
|
*
|
|
|
|
|
* @param json 请求的body内容
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private HttpResponse sendPandaReq(String json){
|
|
|
|
|
HttpResponse httpResponse = HttpRequest
|
|
|
|
|
.post(panDaUrl)
|
|
|
|
|
.body(json)
|
|
|
|
|
.execute();
|
|
|
|
|
return httpResponse;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 调用liehe HTTP请求发送数据
|
|
|
|
|
* @param json
|
|
|
|
|