|
|
|
@ -2,6 +2,7 @@ package com.yuyou.openapi.openapi.task;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.codec.Base64;
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import cn.hutool.crypto.SecureUtil;
|
|
|
|
|
import cn.hutool.http.HttpRequest;
|
|
|
|
@ -10,9 +11,9 @@ import com.alibaba.fastjson.JSON;
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.yuyou.openapi.openapi.api.enums.LuoShiAppIDEnum;
|
|
|
|
|
import com.yuyou.openapi.openapi.common.enums.IntentionEnum;
|
|
|
|
|
import com.yuyou.openapi.openapi.common.enums.SourceEnum;
|
|
|
|
|
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;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
@ -27,7 +28,6 @@ import java.time.LocalDateTime;
|
|
|
|
|
import java.time.ZoneOffset;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
@ -61,13 +61,16 @@ public class ABDownTask {
|
|
|
|
|
*/
|
|
|
|
|
@Value("${ab.liehe.channel}")
|
|
|
|
|
private String channel;
|
|
|
|
|
|
|
|
|
|
@Value("${ab.liehe.url}")
|
|
|
|
|
private String lieheUrl;
|
|
|
|
|
|
|
|
|
|
@Value("${ab.liehe.appID}")
|
|
|
|
|
private String lieheAppId;
|
|
|
|
|
@Value("${ab.liehe.secretkey}")
|
|
|
|
|
private String signSecretKey;
|
|
|
|
|
|
|
|
|
|
private String lieheSecretKey;
|
|
|
|
|
@Value("${ab.liehe.url2}")
|
|
|
|
|
private String lieheUrl2;
|
|
|
|
|
@Value("${ab.liehe.secretkey2}")
|
|
|
|
|
private String lieheSecretKey2;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 配置文件中加载配置信息 - 时机
|
|
|
|
@ -326,7 +329,8 @@ public class ABDownTask {
|
|
|
|
|
// BeanUtils.copyProperties(each, luoshiData);
|
|
|
|
|
luoshiData.setActName(LuoShiAppIDEnum.tagOf(each.getActName()));
|
|
|
|
|
luoshiData.setInfo(each.getMobile());
|
|
|
|
|
luoshiData.setType(1);
|
|
|
|
|
// FIXME: 2020/12/17 罗什客户要求AB单给他们,然后结算不变
|
|
|
|
|
luoshiData.setType(each.getClientType());
|
|
|
|
|
luoshiData.setTime(each.getStartTime());
|
|
|
|
|
data.add(luoshiData);
|
|
|
|
|
}
|
|
|
|
@ -633,19 +637,18 @@ public class ABDownTask {
|
|
|
|
|
return Boolean.TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 任务处理入口,主要用于时间记录
|
|
|
|
|
* 任务处理入口,主要用于时间记录 - 猎河的第二任务推送接口
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Async(value = "abTaskExecutor")
|
|
|
|
|
public void doLieheRunTask(List<ABMessageDTO> messageDTOList){
|
|
|
|
|
public void doLieheRunTask2(List<LieheMessageDTO> messageDTOList){
|
|
|
|
|
Long satrtMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
|
|
log.info("====== [ liehe task start running, task name is {} ] ======", "LieheABDownTask");
|
|
|
|
|
messageDTOList.forEach(this::lieheRunTask);
|
|
|
|
|
log.info("====== [ liehe task2 start running, task name is {} ] ======", "LieheABDownTask");
|
|
|
|
|
messageDTOList.forEach(this::lieheRunTask2);
|
|
|
|
|
Long endMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
|
|
log.info("====== [ liehe task start end, task name is {},cost milliSecond is {} ] ======", "LieheABDownTask", (endMilliSecond-satrtMilliSecond));
|
|
|
|
|
log.info("====== [ liehe task start2 end, task name is {},cost milliSecond is {} ] ======", "LieheABDownTask", (endMilliSecond-satrtMilliSecond));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -653,7 +656,7 @@ public class ABDownTask {
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private boolean lieheRunTask(ABMessageDTO messageDTO){
|
|
|
|
|
private boolean lieheRunTask2(LieheMessageDTO messageDTO){
|
|
|
|
|
int count = 0; // 设置请求失败计数
|
|
|
|
|
|
|
|
|
|
if (Objects.isNull(messageDTO)) {
|
|
|
|
@ -666,7 +669,7 @@ public class ABDownTask {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 数据实体进行映射转换 - 目前是只有一条给
|
|
|
|
|
LieheMessageCovDTO lieheMessageCovDTO = convertLieheMessageCovDTOFromABMessageDTO(messageDTO);
|
|
|
|
|
LieheMessageCovDTO2 lieheMessageCovDTO = convertLieheMessageCovDTOFromABMessageDTO2(messageDTO);
|
|
|
|
|
if (lieheMessageCovDTO == null) {
|
|
|
|
|
log.error("lieheMessageCovDTO is null.");
|
|
|
|
|
return false;
|
|
|
|
@ -679,8 +682,8 @@ public class ABDownTask {
|
|
|
|
|
// 失败重发请求3次
|
|
|
|
|
while (count <= 3){
|
|
|
|
|
// 调用HTTP请求发送数据
|
|
|
|
|
HttpResponse httpResponse = sendLieheReq(jsonStr);
|
|
|
|
|
if (httpResponse.isOk() && httpResponse.body().contains("ok")){
|
|
|
|
|
HttpResponse httpResponse = sendLieheReq2(jsonStr);
|
|
|
|
|
if (httpResponse.isOk() && httpResponse.body().contains("0")){
|
|
|
|
|
log.info("========== [liehe request success, response is {} ] ==========", httpResponse.body());
|
|
|
|
|
break;
|
|
|
|
|
}else{
|
|
|
|
@ -701,6 +704,71 @@ public class ABDownTask {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 任务处理入口,主要用于时间记录
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Async(value = "abTaskExecutor")
|
|
|
|
|
public void doLieheRunTask(List<LieheMessageDTO> messageDTOList){
|
|
|
|
|
Long satrtMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
|
|
log.info("====== [ liehe task start running, task name is {} ] ======", "LieheABDownTask");
|
|
|
|
|
lieheRunTask(messageDTOList);
|
|
|
|
|
Long endMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
|
|
|
|
log.info("====== [ liehe task start end, task name is {},cost milliSecond is {} ] ======", "LieheABDownTask", (endMilliSecond-satrtMilliSecond));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 真实的任务执行入口
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private boolean lieheRunTask(List<LieheMessageDTO> messageDTOList){
|
|
|
|
|
int count = 0; // 设置请求失败计数
|
|
|
|
|
|
|
|
|
|
if (CollectionUtil.isEmpty(messageDTOList)){
|
|
|
|
|
return Boolean.FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 数据实体进行映射转换 - 目前是只有一条给
|
|
|
|
|
LieheMessageCovDTO lieheMessageCovDTO = convertLieheMessageCovDTOFromABMessageDTO(messageDTOList);
|
|
|
|
|
if (lieheMessageCovDTO == null) {
|
|
|
|
|
log.error("lieheMessageCovDTO is null.");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
// 数据实体转成Json 不忽略空kv 有序
|
|
|
|
|
String jsonStr = JSON.toJSONString(lieheMessageCovDTO);
|
|
|
|
|
log.info("========== [liehe ready send json is {} ] =============", jsonStr);
|
|
|
|
|
// 请求的响应处理
|
|
|
|
|
|
|
|
|
|
// 失败重发请求3次
|
|
|
|
|
while (count <= 3){
|
|
|
|
|
// 调用HTTP请求发送数据
|
|
|
|
|
HttpResponse httpResponse = sendLieheReq(jsonStr);
|
|
|
|
|
if (httpResponse.isOk() && httpResponse.body().contains("SUCCESS")){
|
|
|
|
|
log.info("========== [liehe request success, response is {} ] ==========", httpResponse.body());
|
|
|
|
|
break;
|
|
|
|
|
}else{
|
|
|
|
|
count ++;
|
|
|
|
|
log.error("========== [liehe request fail, response is {} ] ==========", httpResponse.body());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (count > 3) {
|
|
|
|
|
return Boolean.FALSE;
|
|
|
|
|
}
|
|
|
|
|
lieheMessageCovDTO.getData().forEach(one->{
|
|
|
|
|
// 更新记录
|
|
|
|
|
boolean updateSendStatus = abMessageService.updateSendLHStatus(Long.valueOf(one.getRecId()), Boolean.TRUE);
|
|
|
|
|
if (!updateSendStatus){
|
|
|
|
|
// 这里仅仅打日志, 不影响正常返回
|
|
|
|
|
log.error("========== [liehe update send status fail, recId is {} ] ==========",one.getRecId());
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return Boolean.TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 调用HTTP请求发送数据
|
|
|
|
|
*
|
|
|
|
@ -818,42 +886,110 @@ public class ABDownTask {
|
|
|
|
|
return httpResponse;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 调用liehe HTTP请求发送数据
|
|
|
|
|
* @param json
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private HttpResponse sendLieheReq2(String json) {
|
|
|
|
|
HttpResponse httpResponse = HttpRequest
|
|
|
|
|
.post(lieheUrl2)
|
|
|
|
|
.header("secretKey",lieheSecretKey2) // bc5be930
|
|
|
|
|
.body(json)
|
|
|
|
|
.execute();
|
|
|
|
|
return httpResponse;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 将ABMessageDTO转为下游传递的LieheMessage
|
|
|
|
|
* @param abMessageDTO
|
|
|
|
|
* @param
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private LieheMessageCovDTO convertLieheMessageCovDTOFromABMessageDTO(ABMessageDTO abMessageDTO) {
|
|
|
|
|
if (Objects.isNull(abMessageDTO)) {
|
|
|
|
|
private LieheMessageCovDTO convertLieheMessageCovDTOFromABMessageDTO(List<LieheMessageDTO> messageDTOList) {
|
|
|
|
|
if (CollectionUtil.isEmpty(messageDTOList)) {
|
|
|
|
|
log.error("liehe convert list is Null");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
LieheMessageCovDTO lieheMessageCovDTO = new LieheMessageCovDTO();
|
|
|
|
|
BeanUtils.copyProperties(abMessageDTO, lieheMessageCovDTO);
|
|
|
|
|
|
|
|
|
|
lieheMessageCovDTO.setPushTime(DateUtils.date(abMessageDTO.getTimestamp()));
|
|
|
|
|
lieheMessageCovDTO.setIntention(IntentionEnum.codeOf(abMessageDTO.getClientType()));
|
|
|
|
|
lieheMessageCovDTO.setChannel(channel);
|
|
|
|
|
// 加密字段
|
|
|
|
|
String pnum = encryptByApi(new String(Base64.decode(abMessageDTO.getMobile())));
|
|
|
|
|
if (StrUtil.isBlank(pnum)) {
|
|
|
|
|
log.error("pnum encrypt fail.");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
lieheMessageCovDTO.setPNum(pnum);
|
|
|
|
|
lieheMessageCovDTO.setAppId(lieheAppId);
|
|
|
|
|
long timeStamp = System.currentTimeMillis();
|
|
|
|
|
lieheMessageCovDTO.setTimestamp(timeStamp);
|
|
|
|
|
// 加签处理
|
|
|
|
|
JSON jsons = (JSON)JSON.toJSON(lieheMessageCovDTO);
|
|
|
|
|
System.out.println(jsons);
|
|
|
|
|
Map paramMap = (Map) JSONObject.parseObject(jsons.toString());
|
|
|
|
|
String sign = SignUtils.createSign(paramMap, signSecretKey);
|
|
|
|
|
String sign = SignUtils.createSignSimple(lieheAppId, lieheMessageCovDTO.getTimestamp(), lieheSecretKey);
|
|
|
|
|
|
|
|
|
|
if (StrUtil.isBlank(sign)) {
|
|
|
|
|
log.error("sign is null");
|
|
|
|
|
if (StringUtils.isBlank(sign)) {
|
|
|
|
|
log.error("liehe sign is null");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
lieheMessageCovDTO.setSign(sign);
|
|
|
|
|
lieheMessageCovDTO.setSignature(sign);
|
|
|
|
|
|
|
|
|
|
List<LieheMessageCovDTO.LieheData> lieheDataList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
messageDTOList.forEach(each->{
|
|
|
|
|
LieheMessageCovDTO.LieheData lieheData = new LieheMessageCovDTO.LieheData();
|
|
|
|
|
Integer clientType = each.getClientType();
|
|
|
|
|
if (Objects.nonNull(clientType) && (clientType == 1 || clientType == 2)){
|
|
|
|
|
// 只传 AB单
|
|
|
|
|
lieheData.setType(clientType);
|
|
|
|
|
}
|
|
|
|
|
String mobile = each.getMobile();
|
|
|
|
|
if(StringUtils.isNotBlank(mobile)){
|
|
|
|
|
// String pnum = encryptByApi(new String(Base64.decode(abMessageDTO.getMobile())));
|
|
|
|
|
lieheData.setPhone(StringUtils.reverse(mobile));
|
|
|
|
|
}
|
|
|
|
|
Long timestamp = each.getTimestamp();
|
|
|
|
|
if (timeStamp > 0){
|
|
|
|
|
lieheData.setTime(timestamp);
|
|
|
|
|
}
|
|
|
|
|
String actName = each.getActName();
|
|
|
|
|
if (StringUtils.isNotBlank(actName)){
|
|
|
|
|
lieheData.setSubName(Base64.encode(actName));
|
|
|
|
|
}
|
|
|
|
|
String recId = each.getRecId();
|
|
|
|
|
if (StringUtils.isNotBlank(recId)){
|
|
|
|
|
lieheData.setRecId(recId);
|
|
|
|
|
}
|
|
|
|
|
lieheDataList.add(lieheData);
|
|
|
|
|
});
|
|
|
|
|
lieheMessageCovDTO.setData(lieheDataList);
|
|
|
|
|
|
|
|
|
|
return lieheMessageCovDTO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 将ABMessageDTO转为下游传递的LieheMessage
|
|
|
|
|
* @param lieheMessageDTO
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private LieheMessageCovDTO2 convertLieheMessageCovDTOFromABMessageDTO2(LieheMessageDTO lieheMessageDTO) {
|
|
|
|
|
if (Objects.isNull(lieheMessageDTO)) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
LieheMessageCovDTO2 lieheMessageCovDTO2 = new LieheMessageCovDTO2();
|
|
|
|
|
BeanUtils.copyProperties(lieheMessageDTO, lieheMessageCovDTO2);
|
|
|
|
|
|
|
|
|
|
String actName = lieheMessageDTO.getActName();
|
|
|
|
|
if (StringUtils.isBlank(actName)){
|
|
|
|
|
log.error("ABDownTask:convertLieheMessageCovDTOFromABMessageDTO2 , actName is Null, source lieheMessageDTO is {}", lieheMessageDTO);
|
|
|
|
|
}
|
|
|
|
|
// 这边是进行通配的逻辑
|
|
|
|
|
// String trueName = Base64.decodeStr(actName, "UTF-8");
|
|
|
|
|
String trueName = StringUtils.substringBefore(actName, "-");
|
|
|
|
|
|
|
|
|
|
lieheMessageCovDTO2.setTaskCode(trueName); // fixme 上次修改 WH20201206230538580
|
|
|
|
|
lieheMessageCovDTO2.setSource(SourceEnum.MY_SOURCE_TAG.getTagValue());
|
|
|
|
|
lieheMessageCovDTO2.setTag(IntentionEnum.codeOf(lieheMessageDTO.getClientType()));
|
|
|
|
|
// 加密字段
|
|
|
|
|
String reverse = StringUtils.reverse(lieheMessageDTO.getMobile());
|
|
|
|
|
lieheMessageCovDTO2.setMobile(reverse);
|
|
|
|
|
// 补充字段处理
|
|
|
|
|
lieheMessageCovDTO2.setMessages(lieheMessageDTO.getMessages());
|
|
|
|
|
|
|
|
|
|
return lieheMessageCovDTO2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 调用API进行加密
|
|
|
|
|
* @param context
|
|
|
|
|