编写了请求的逻辑
parent
a75cfcfe87
commit
3859e77c6c
@ -0,0 +1,100 @@
|
||||
package com.yuyou.openapi.openapi.task;
|
||||
|
||||
|
||||
import cn.hutool.crypto.SecureUtil;
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import cn.hutool.http.HttpResponse;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.yuyou.openapi.openapi.model.dto.ABMessageDTO;
|
||||
import com.yuyou.openapi.openapi.model.dto.convert.ABMessageCovDTO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 下游处理任务类
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class ABDownTask {
|
||||
|
||||
/**
|
||||
* 配置文件中加载配置信息
|
||||
*/
|
||||
@Value("${ab.customer.app_id}")
|
||||
private String appId;
|
||||
|
||||
@Value("${ab.customer.url}")
|
||||
private String customerUrl;
|
||||
|
||||
|
||||
/**
|
||||
* 任务处理入口,主要用于时间记录
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Async
|
||||
public boolean doRunTask(List<ABMessageDTO> messageDTOList){
|
||||
Long satrtMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
||||
log.info("====== [ task start running, task name is {} ] ======", "ABDownTask");
|
||||
boolean resultTag = runTask(messageDTOList);
|
||||
Long endMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
||||
log.info("====== [ task start end, task name is {},cost milliSecond is {} ] ======", "ABDownTask", (endMilliSecond-satrtMilliSecond));
|
||||
return resultTag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 真实的任务执行入口
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private boolean runTask(List<ABMessageDTO> messageDTOList){
|
||||
int count = 0; // 设置请求失败计数
|
||||
// 数据实体进行映射转换 - 目前是只有一条给
|
||||
ABMessageCovDTO abMessageCovDTO = new ABMessageCovDTO();
|
||||
abMessageCovDTO.setData(messageDTOList);
|
||||
// 补充其他的下游请求字段
|
||||
abMessageCovDTO.setNonce_str((System.currentTimeMillis()/1000));
|
||||
abMessageCovDTO.setApp_id(appId);
|
||||
abMessageCovDTO.setSignature(SecureUtil.sha1("app_id="+abMessageCovDTO.getApp_id()+"&nonce_str="+abMessageCovDTO.getNonce_str()));
|
||||
// 数据实体转成Json 不忽略空kv 有序
|
||||
JSONObject jsonObject = JSONUtil.parseObj(abMessageCovDTO, false, true);
|
||||
// 请求的响应处理
|
||||
// todo 失败重发请求3次
|
||||
while (count <= 3){
|
||||
// 调用HTTP请求发送数据
|
||||
HttpResponse httpResponse = sendReq(jsonObject);
|
||||
if (httpResponse.isOk() && httpResponse.body().contains("成功")){
|
||||
break;
|
||||
}else{
|
||||
count ++;
|
||||
log.info("========== [request fail, response is {} ] ==========", httpResponse.body());
|
||||
}
|
||||
}
|
||||
if (count > 4) {
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用HTTP请求发送数据
|
||||
*
|
||||
* @param jsonObject
|
||||
* @return
|
||||
*/
|
||||
private HttpResponse sendReq(JSONObject jsonObject){
|
||||
HttpResponse httpResponse = HttpRequest
|
||||
.post(customerUrl)
|
||||
.body(jsonObject.toString())
|
||||
.execute();
|
||||
return httpResponse;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue