|
|
|
@ -1,18 +1,40 @@
|
|
|
|
|
package com.baiye.module.service.impl;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.codec.Base64;
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import cn.hutool.core.text.StrPool;
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
import cn.hutool.core.util.RandomUtil;
|
|
|
|
|
import cn.hutool.http.HttpUtil;
|
|
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
|
|
import com.baiye.config.properties.GenderProperties;
|
|
|
|
|
import com.baiye.constant.AdPlatFormConstants;
|
|
|
|
|
import com.baiye.constant.DefaultNumberConstants;
|
|
|
|
|
import com.baiye.enums.MailRequestEnum;
|
|
|
|
|
import com.baiye.http.CommonResponse;
|
|
|
|
|
import com.baiye.http.InterfaceExchangeResponse;
|
|
|
|
|
import com.baiye.http.ResponseCode;
|
|
|
|
|
import com.baiye.model.dto.SetCallBackDTO;
|
|
|
|
|
import com.baiye.module.dao.DeliveryGenderRepository;
|
|
|
|
|
import com.baiye.module.dao.DeliveryRecordRepository;
|
|
|
|
|
import com.baiye.module.entity.DeliveryGender;
|
|
|
|
|
import com.baiye.module.entity.DeliveryRecord;
|
|
|
|
|
import com.baiye.module.service.DeliveryRecordService;
|
|
|
|
|
import com.baiye.module.service.ClueService;
|
|
|
|
|
import com.baiye.module.service.GenderRecordService;
|
|
|
|
|
import com.baiye.module.service.dto.ExchangeGenderDTO;
|
|
|
|
|
import com.baiye.module.service.dto.InterfaceResponseDTO;
|
|
|
|
|
import com.baiye.util.AESUtils;
|
|
|
|
|
import com.baiye.util.RedisUtils;
|
|
|
|
|
import com.baiye.util.ValidationUtil;
|
|
|
|
|
import com.google.common.base.Splitter;
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @author Enzo
|
|
|
|
@ -23,8 +45,16 @@ import java.util.List;
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
public class GenderRecordServiceImpl implements GenderRecordService {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final DeliveryGenderRepository deliveryGenderRepository;
|
|
|
|
|
|
|
|
|
|
private final GenderProperties genderProperties;
|
|
|
|
|
|
|
|
|
|
private final ClueService clueService;
|
|
|
|
|
|
|
|
|
|
private final RedisUtils redisUtils;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public DeliveryGender findByTaskName(String taskName) {
|
|
|
|
|
// 防止重复提交数据
|
|
|
|
@ -41,7 +71,6 @@ public class GenderRecordServiceImpl implements GenderRecordService {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Boolean saveDeliveryRecord(String taskImeiName, Integer num, Integer type) {
|
|
|
|
|
|
|
|
|
|
DeliveryGender deliveryRecord = new DeliveryGender();
|
|
|
|
|
deliveryRecord.setNum(num);
|
|
|
|
|
deliveryRecord.setType(type);
|
|
|
|
@ -54,4 +83,92 @@ public class GenderRecordServiceImpl implements GenderRecordService {
|
|
|
|
|
public Boolean updateStatusByTaskName(DeliveryGender taskName) {
|
|
|
|
|
return deliveryGenderRepository.save(taskName).getId() != null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Boolean sendInterfaceByTaskName(List<String> stringList) {
|
|
|
|
|
// 每次1000 数据
|
|
|
|
|
List<List<String>> partition = Lists.partition(stringList, DefaultNumberConstants.ONE_THOUSAND);
|
|
|
|
|
for (List<String> list : partition) {
|
|
|
|
|
String sendTaskName = redisUtils.acquisitionBatch(MailRequestEnum.GG.getCacheName());
|
|
|
|
|
List<ExchangeGenderDTO.Data> dataList = Lists.newArrayList();
|
|
|
|
|
list.forEach(encipherDTO -> {
|
|
|
|
|
ExchangeGenderDTO.Data data = new ExchangeGenderDTO.Data();
|
|
|
|
|
data.setData(Base64.encode(encipherDTO));
|
|
|
|
|
dataList.add(data);
|
|
|
|
|
});
|
|
|
|
|
String randomString = RandomUtil.randomString(DefaultNumberConstants.TWELVE_NUMBER);
|
|
|
|
|
ExchangeGenderDTO build = ExchangeGenderDTO.builder().batchId(sendTaskName).reqId(randomString).level
|
|
|
|
|
(DefaultNumberConstants.ZERO_NUMBER).orgCode(genderProperties.getOrgCode()).datas(dataList).build();
|
|
|
|
|
String post = HttpUtil.post(genderProperties.getSubmitUrl(), JSONUtil.toJsonStr(build));
|
|
|
|
|
InterfaceExchangeResponse bean = JSONUtil.toBean(post, InterfaceExchangeResponse.class);
|
|
|
|
|
if (ObjectUtil.isNotNull(bean) && Boolean.FALSE.equals(bean.getResult())){
|
|
|
|
|
return Boolean.FALSE;
|
|
|
|
|
}
|
|
|
|
|
this.saveDeliveryRecord(sendTaskName, list.size(), DefaultNumberConstants.ONE_NUMBER);
|
|
|
|
|
log.info("============ the submit result as {} =========", JSONUtil.toJsonStr(post));
|
|
|
|
|
}
|
|
|
|
|
return Boolean.TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Boolean setCallBackUrl(String url) {
|
|
|
|
|
SetCallBackDTO build = SetCallBackDTO.builder().callBackUrl(url).reqId
|
|
|
|
|
(RandomUtil.randomString(DefaultNumberConstants.TEN_NUMBER)).orgCode
|
|
|
|
|
(genderProperties.getOrgCode()).build();
|
|
|
|
|
String post = HttpUtil.post(genderProperties.getCallbackUrl(), JSONUtil.toJsonStr(build));
|
|
|
|
|
if (post.contains("true")) {
|
|
|
|
|
return Boolean.TRUE;
|
|
|
|
|
}
|
|
|
|
|
return Boolean.FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public CommonResponse<Object> resourceCallback(InterfaceResponseDTO interfaceResponseDTO) {
|
|
|
|
|
String reqId = interfaceResponseDTO.getReqId();
|
|
|
|
|
String batchId = interfaceResponseDTO.getBatchId();
|
|
|
|
|
// 拆解批次号
|
|
|
|
|
if (StringUtils.isNotBlank(batchId)) {
|
|
|
|
|
batchId = batchId.substring(DefaultNumberConstants.ZERO_NUMBER, batchId.lastIndexOf(StrPool.DASHED));
|
|
|
|
|
}
|
|
|
|
|
List<InterfaceResponseDTO.Data> dataList = interfaceResponseDTO.getDatas();
|
|
|
|
|
Object objCache = redisUtils.get(reqId);
|
|
|
|
|
if (ObjectUtil.isNotNull(objCache)) {
|
|
|
|
|
return CommonResponse.createByErrorCodeMessage
|
|
|
|
|
(ResponseCode.BATCH_NUMBER_EXIST_OR_SEND.getCode(),
|
|
|
|
|
ResponseCode.BATCH_NUMBER_REPEAT_TRANSMISSION.getDesc());
|
|
|
|
|
}
|
|
|
|
|
// 设置五分钟缓存
|
|
|
|
|
redisUtils.set(reqId, reqId, DefaultNumberConstants.TEN_NUMBER, TimeUnit.MINUTES);
|
|
|
|
|
DeliveryGender byTaskName = this.findByTaskName(batchId);
|
|
|
|
|
if (ObjectUtil.isNotNull(byTaskName) &&
|
|
|
|
|
byTaskName.getStatus() == DefaultNumberConstants.ZERO_NUMBER) {
|
|
|
|
|
// 异步执行任务
|
|
|
|
|
CompletableFuture.runAsync(() -> updateGenderByData(dataList));
|
|
|
|
|
Boolean result = this.updateStatusByTaskName(DefaultNumberConstants.ONE_NUMBER, batchId);
|
|
|
|
|
log.info("================= change delivery record {} result as {} =================", batchId, result);
|
|
|
|
|
return CommonResponse.createBySuccess();
|
|
|
|
|
}
|
|
|
|
|
return CommonResponse.createByErrorCodeMessage
|
|
|
|
|
(ResponseCode.BATCH_NUMBER_EXIST_OR_SEND.getCode(),
|
|
|
|
|
ResponseCode.BATCH_NUMBER_REPEAT_TRANSMISSION.getDesc());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void updateGenderByData(List<InterfaceResponseDTO.Data> dataList ) {
|
|
|
|
|
for (InterfaceResponseDTO.Data data : dataList) {
|
|
|
|
|
if (StringUtils.isNotBlank(data.getData())) {
|
|
|
|
|
List<String> stringList = Splitter.on(StrPool.COMMA).trimResults()
|
|
|
|
|
.omitEmptyStrings().splitToList(Base64.decodeStr(data.getData()));
|
|
|
|
|
String decrypt = AESUtils.dbDecrypt
|
|
|
|
|
(AdPlatFormConstants.AES_PASSWORD, stringList.get(DefaultNumberConstants.ZERO_NUMBER));
|
|
|
|
|
|
|
|
|
|
String numInteger = stringList.get(DefaultNumberConstants.ONE_NUMBER);
|
|
|
|
|
// 修改gender
|
|
|
|
|
clueService.updateGenderByZid(AESUtils.encrypt
|
|
|
|
|
(decrypt, AdPlatFormConstants.AD_PLATFORM), ValidationUtil.isInteger(numInteger)
|
|
|
|
|
? Integer.parseInt(numInteger) : DefaultNumberConstants.FOUR_NUMBER);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|