|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package com.hchbox.task;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
|
import com.google.common.collect.ArrayListMultimap;
|
|
|
|
@ -27,6 +28,9 @@ import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.Setter;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
import org.springframework.data.domain.PageRequest;
|
|
|
|
|
import org.springframework.data.domain.Pageable;
|
|
|
|
|
import org.springframework.data.domain.Slice;
|
|
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
|
|
import org.springframework.scheduling.annotation.EnableAsync;
|
|
|
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
|
|
@ -42,7 +46,6 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 定时拉取订单
|
|
|
|
|
*
|
|
|
|
|
* @author Enzo
|
|
|
|
|
* @date : 2021/6/23
|
|
|
|
|
*/
|
|
|
|
@ -81,7 +84,7 @@ public class SyncTask {
|
|
|
|
|
*/
|
|
|
|
|
@Async("pullOrderTaskExecutor")
|
|
|
|
|
@Scheduled(cron = "0 0/10 * * * *")
|
|
|
|
|
//@Scheduled(cron = "0 0/1 * * * *")
|
|
|
|
|
// @Scheduled(cron = "0 0/1 * * * *")
|
|
|
|
|
public void pullOrdersRegularly() throws ApiException, SecretException, NoSuchFieldException, IllegalAccessException {
|
|
|
|
|
if (flag != null && flag) {
|
|
|
|
|
long startTime = System.currentTimeMillis();
|
|
|
|
@ -108,58 +111,68 @@ public class SyncTask {
|
|
|
|
|
Date startTime;
|
|
|
|
|
Date endTime = new Date();
|
|
|
|
|
Multimap<String, Trade> multimap = ArrayListMultimap.create();
|
|
|
|
|
Pageable pageable = PageRequest.of(DefaultNumberConstants.ZERO_NUMBER, DefaultNumberConstants.FIVE_THOUSAND);
|
|
|
|
|
// 第一次任务往前10分钟
|
|
|
|
|
startTime = lastUpdateTime == null ? DateUtil.offsetMinute(date, -DefaultNumberConstants.TEN_NUMBER) : lastUpdateTime;
|
|
|
|
|
lastUpdateTime = endTime;
|
|
|
|
|
List<JdpTrade> jdpOrderList = jdpTradeService.findJdpOrderByTime(startTime, endTime);
|
|
|
|
|
log.info("================== the orderList size as {} =======================", jdpOrderList.size());
|
|
|
|
|
if (!CollectionUtils.isEmpty(jdpOrderList)) {
|
|
|
|
|
for (JdpTrade jdpTrade : jdpOrderList) {
|
|
|
|
|
if (jdpTrade != null && jdpTrade.getJdpResponse() != null) {
|
|
|
|
|
// 淘宝用此方式转换为trade
|
|
|
|
|
TradeFullinfoGetResponse rsp = TaobaoUtils.parseResponse(jdpTrade.getJdpResponse(),
|
|
|
|
|
TradeFullinfoGetResponse.class);
|
|
|
|
|
Trade trade = rsp.getTrade();
|
|
|
|
|
multimap.put(trade.getSellerNick(), trade);
|
|
|
|
|
while (true) {
|
|
|
|
|
// 分页查询数据
|
|
|
|
|
Slice<JdpTrade> jdpTradeSlice = jdpTradeService.findJdpOrderByTime(startTime, endTime, pageable);
|
|
|
|
|
List<JdpTrade> jdpOrderList = jdpTradeSlice.getContent();
|
|
|
|
|
if (CollUtil.isNotEmpty(jdpOrderList)) {
|
|
|
|
|
log.info("================== the orderList size as {} =======================", jdpOrderList.size());
|
|
|
|
|
if (!CollectionUtils.isEmpty(jdpOrderList)) {
|
|
|
|
|
for (JdpTrade jdpTrade : jdpOrderList) {
|
|
|
|
|
if (jdpTrade != null && jdpTrade.getJdpResponse() != null) {
|
|
|
|
|
// 淘宝用此方式转换为trade
|
|
|
|
|
TradeFullinfoGetResponse rsp = TaobaoUtils.parseResponse(jdpTrade.getJdpResponse(),
|
|
|
|
|
TradeFullinfoGetResponse.class);
|
|
|
|
|
Trade trade = rsp.getTrade();
|
|
|
|
|
multimap.put(trade.getSellerNick(), trade);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 卖家昵称分组
|
|
|
|
|
Map<String, Collection<Trade>> tradeListMap = multimap.asMap();
|
|
|
|
|
List<String> fieldName = Lists.newArrayList(
|
|
|
|
|
TaoBaoDataMethodConstants.BUYER_NICK,
|
|
|
|
|
TaoBaoDataMethodConstants.BUYER_EMAIL,
|
|
|
|
|
TaoBaoDataMethodConstants.RECEIVER_NAME,
|
|
|
|
|
TaoBaoDataMethodConstants.RECEIVER_PHONE,
|
|
|
|
|
TaoBaoDataMethodConstants.BUYER_ALIPAY_NO,
|
|
|
|
|
TaoBaoDataMethodConstants.RECEIVER_ADDRESS,
|
|
|
|
|
TaoBaoDataMethodConstants.ENCRYPT_ALI_PAY_ID);
|
|
|
|
|
TopTrade syncTask;
|
|
|
|
|
for (Map.Entry<String, Collection<Trade>> stringListEntry : tradeListMap.entrySet()) {
|
|
|
|
|
String sellerNick = stringListEntry.getKey();
|
|
|
|
|
SellerAccountDTO sellerAccount = sellerAccountService.getAccountByNick(sellerNick);
|
|
|
|
|
// 判断账号
|
|
|
|
|
if (sellerAccount != null && sellerAccount.getStatus() == DefaultNumberConstants.ONE_NUMBER) {
|
|
|
|
|
List<Trade> trades = Lists.newArrayList(stringListEntry.getValue());
|
|
|
|
|
log.info(" ========== the analyze the order quantity size as {} ========== ", trades.size());
|
|
|
|
|
if (!CollectionUtils.isEmpty(trades)) {
|
|
|
|
|
TaoBaoEncryption.decrypt(miProperties, sellerAccount.getSessionKey(), trades, fieldName);
|
|
|
|
|
// 手机号码单独解密
|
|
|
|
|
TaoBaoEncryption.decrypt(miProperties, sellerAccount.getSessionKey(), trades, TaoBaoDataMethodConstants.PHONE,
|
|
|
|
|
Trade.class.getDeclaredField(TaoBaoDataMethodConstants.RECEIVER_MOBILE));
|
|
|
|
|
for (Trade trade : trades) {
|
|
|
|
|
syncTask = new TopTrade();
|
|
|
|
|
BeanUtil.copyProperties(trade, syncTask);
|
|
|
|
|
List<TopOrder> topOrders = CommConverter.CommConverter(trade.getOrders(), TopOrder.class);
|
|
|
|
|
boolean createResult = topTradeService.createTrade(syncTask, sellerAccount, topOrders);
|
|
|
|
|
if (createResult && Boolean.TRUE.equals(TradeEnum.checkStatus(trade.getStatus()))) {
|
|
|
|
|
memberService.synMemberByTrade(syncTask);
|
|
|
|
|
// 卖家昵称分组
|
|
|
|
|
Map<String, Collection<Trade>> tradeListMap = multimap.asMap();
|
|
|
|
|
List<String> fieldName = Lists.newArrayList(
|
|
|
|
|
TaoBaoDataMethodConstants.BUYER_NICK,
|
|
|
|
|
TaoBaoDataMethodConstants.BUYER_EMAIL,
|
|
|
|
|
TaoBaoDataMethodConstants.RECEIVER_NAME,
|
|
|
|
|
TaoBaoDataMethodConstants.RECEIVER_PHONE,
|
|
|
|
|
TaoBaoDataMethodConstants.BUYER_ALIPAY_NO,
|
|
|
|
|
TaoBaoDataMethodConstants.RECEIVER_ADDRESS,
|
|
|
|
|
TaoBaoDataMethodConstants.ENCRYPT_ALI_PAY_ID);
|
|
|
|
|
TopTrade syncTask;
|
|
|
|
|
for (Map.Entry<String, Collection<Trade>> stringListEntry : tradeListMap.entrySet()) {
|
|
|
|
|
String sellerNick = stringListEntry.getKey();
|
|
|
|
|
SellerAccountDTO sellerAccount = sellerAccountService.getAccountByNick(sellerNick);
|
|
|
|
|
// 判断账号
|
|
|
|
|
if (sellerAccount != null && sellerAccount.getStatus() == DefaultNumberConstants.ONE_NUMBER) {
|
|
|
|
|
List<Trade> trades = Lists.newArrayList(stringListEntry.getValue());
|
|
|
|
|
log.info(" ========== the analyze the order quantity size as {} ========== ", trades.size());
|
|
|
|
|
if (!CollectionUtils.isEmpty(trades)) {
|
|
|
|
|
TaoBaoEncryption.decrypt(miProperties, sellerAccount.getSessionKey(), trades, fieldName);
|
|
|
|
|
// 手机号码单独解密
|
|
|
|
|
TaoBaoEncryption.decrypt(miProperties, sellerAccount.getSessionKey(), trades, TaoBaoDataMethodConstants.PHONE,
|
|
|
|
|
Trade.class.getDeclaredField(TaoBaoDataMethodConstants.RECEIVER_MOBILE));
|
|
|
|
|
for (Trade trade : trades) {
|
|
|
|
|
syncTask = new TopTrade();
|
|
|
|
|
BeanUtil.copyProperties(trade, syncTask);
|
|
|
|
|
List<TopOrder> topOrders = CommConverter.CommConverter(trade.getOrders(), TopOrder.class);
|
|
|
|
|
boolean createResult = topTradeService.createTrade(syncTask, sellerAccount, topOrders);
|
|
|
|
|
if (createResult && Boolean.TRUE.equals(TradeEnum.checkStatus(trade.getStatus()))) {
|
|
|
|
|
memberService.synMemberByTrade(syncTask);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!jdpTradeSlice.hasNext()) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
pageable = jdpTradeSlice.nextPageable();
|
|
|
|
|
}
|
|
|
|
|
count.decrementAndGet();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|