|
@@ -1,5 +1,7 @@
|
|
|
package com.crm.manager.service.impl;
|
|
package com.crm.manager.service.impl;
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
import com.alibaba.fastjson2.JSON;
|
|
|
import com.crm.manager.dao.mapper.TransactionItemMapper;
|
|
import com.crm.manager.dao.mapper.TransactionItemMapper;
|
|
|
import com.crm.manager.repository.TransactionItemRepository;
|
|
import com.crm.manager.repository.TransactionItemRepository;
|
|
@@ -418,33 +420,78 @@ public class VaultodyServiceImpl implements VaultodyService {
|
|
|
public List<TransactionItemDto> queryWithFilter(VaultodyConfig config) throws Exception {
|
|
public List<TransactionItemDto> queryWithFilter(VaultodyConfig config) throws Exception {
|
|
|
VaultTransactionsEntity entity = new VaultTransactionsEntity();
|
|
VaultTransactionsEntity entity = new VaultTransactionsEntity();
|
|
|
entity.setVaultId(config.getVaultId());
|
|
entity.setVaultId(config.getVaultId());
|
|
|
- List<TransactionItemDto> result = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
- // 先获取数据库中已存在的item ID列表
|
|
|
|
|
- List<String> existingItemIds = recordByVaultId(config.getVaultId());
|
|
|
|
|
- Set<String> existingIdSet = new HashSet<>(existingItemIds);
|
|
|
|
|
- VaultTransaction vaultTransaction = query3Items(entity,config);
|
|
|
|
|
|
|
+ // 1、查询前天最后一条,用它的itemId做startingAfter
|
|
|
|
|
+ TransactionItemTable lastBeforeYes = transactionItemMapper.getBeforeYesterdayLast(config.getVaultId());
|
|
|
|
|
+ if (lastBeforeYes != null && StringUtils.isNotBlank(lastBeforeYes.getItemId())) {
|
|
|
|
|
+ entity.setStartingAfter(lastBeforeYes.getItemId());
|
|
|
|
|
+ log.info("分页起点:前天最后一条itemId={}", lastBeforeYes.getItemId());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ log.info("无前天数据,从头拉取三方交易");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2、划定昨天时间范围(秒级时间戳)
|
|
|
|
|
+ DateTime yesZero = DateUtil.beginOfDay(DateUtil.yesterday());
|
|
|
|
|
+ long yesStartTs = yesZero.getTime() / 1000;
|
|
|
|
|
+ DateTime todayZero = DateUtil.beginOfDay(new Date());
|
|
|
|
|
+ long yesEndTs = todayZero.getTime() / 1000;
|
|
|
|
|
|
|
|
- // 处理第一页数据
|
|
|
|
|
- if (vaultTransaction.getList() != null && !vaultTransaction.getList().isEmpty()) {
|
|
|
|
|
- List<TransactionItemDto> filteredList = filterExistingItems(vaultTransaction.getList(), existingIdSet);
|
|
|
|
|
- result.addAll(filteredList);
|
|
|
|
|
|
|
+ List<TransactionItemDto> result = new ArrayList<>();
|
|
|
|
|
+ List<String> existItemIds = recordByVaultId(config.getVaultId());
|
|
|
|
|
+ Set<String> existSet = new HashSet<>(existItemIds);
|
|
|
|
|
+
|
|
|
|
|
+ VaultTransaction pageData = query3Items(entity, config);
|
|
|
|
|
+
|
|
|
|
|
+ // 处理第一页
|
|
|
|
|
+ if (pageData.getList() != null && !pageData.getList().isEmpty()) {
|
|
|
|
|
+ List<TransactionItemDto> filterList = pageData.getList().stream()
|
|
|
|
|
+ .filter(dto -> dto != null && dto.getId() != null && dto.getCreatedTimestamp() != null)
|
|
|
|
|
+ // 只昨天数据 + 库不存在
|
|
|
|
|
+ .filter(dto -> dto.getCreatedTimestamp() >= yesStartTs && dto.getCreatedTimestamp() < yesEndTs)
|
|
|
|
|
+ .filter(dto -> !existSet.contains(dto.getId()))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ result.addAll(filterList);
|
|
|
|
|
+
|
|
|
|
|
+ // 当前页最小时间早于昨天,后面都是更早数据,直接终止
|
|
|
|
|
+ long minTs = pageData.getList().stream()
|
|
|
|
|
+ .map(TransactionItemDto::getCreatedTimestamp)
|
|
|
|
|
+ .filter(Objects::nonNull)
|
|
|
|
|
+ .mapToLong(Long::longValue)
|
|
|
|
|
+ .min()
|
|
|
|
|
+ .orElse(0L);
|
|
|
|
|
+ if (minTs < yesStartTs) {
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 分页查询剩余数据
|
|
|
|
|
- while (Boolean.TRUE.equals(vaultTransaction.getHasMore())
|
|
|
|
|
- && vaultTransaction.getList() != null
|
|
|
|
|
- && !vaultTransaction.getList().isEmpty()) {
|
|
|
|
|
|
|
+ // 循环分页拉取
|
|
|
|
|
+ while (Boolean.TRUE.equals(pageData.getHasMore())
|
|
|
|
|
+ && pageData.getList() != null
|
|
|
|
|
+ && !pageData.getList().isEmpty()) {
|
|
|
|
|
|
|
|
- String lastId = vaultTransaction.getList().get(vaultTransaction.getList().size() - 1).getId();
|
|
|
|
|
- entity.setStartingAfter(lastId);
|
|
|
|
|
|
|
+ // 拿当前页最后一条id做下一页起点
|
|
|
|
|
+ String lastItemId = pageData.getList().get(pageData.getList().size() - 1).getId();
|
|
|
|
|
+ entity.setStartingAfter(lastItemId);
|
|
|
|
|
|
|
|
- vaultTransaction = query3Items(entity,config);
|
|
|
|
|
|
|
+ pageData = query3Items(entity, config);
|
|
|
|
|
+ if (pageData.getList() == null || pageData.getList().isEmpty()) {
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- if (vaultTransaction.getList() != null && !vaultTransaction.getList().isEmpty()) {
|
|
|
|
|
- List<TransactionItemDto> filteredList = filterExistingItems(vaultTransaction.getList(), existingIdSet);
|
|
|
|
|
- result.addAll(filteredList);
|
|
|
|
|
- } else {
|
|
|
|
|
|
|
+ List<TransactionItemDto> filterList = pageData.getList().stream()
|
|
|
|
|
+ .filter(dto -> dto != null && dto.getId() != null && dto.getCreatedTimestamp() != null)
|
|
|
|
|
+ .filter(dto -> dto.getCreatedTimestamp() >= yesStartTs && dto.getCreatedTimestamp() < yesEndTs)
|
|
|
|
|
+ .filter(dto -> !existSet.contains(dto.getId()))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ result.addAll(filterList);
|
|
|
|
|
+
|
|
|
|
|
+ long minTs = pageData.getList().stream()
|
|
|
|
|
+ .map(TransactionItemDto::getCreatedTimestamp)
|
|
|
|
|
+ .filter(Objects::nonNull)
|
|
|
|
|
+ .mapToLong(Long::longValue)
|
|
|
|
|
+ .min()
|
|
|
|
|
+ .orElse(0L);
|
|
|
|
|
+ if (minTs < yesStartTs) {
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|