|
|
@@ -0,0 +1,114 @@
|
|
|
+package com.crm.manager.service.job;
|
|
|
+
|
|
|
+import com.crm.manager.service.VaultodyService;
|
|
|
+import com.crm.rely.backend.model.dto.vaultody.vaults.TransactionItemDto;
|
|
|
+import com.crm.rely.backend.model.dto.vaultody.vaults.VaultTransaction;
|
|
|
+import com.crm.rely.backend.model.dto.vaultody.vaults.VaultodyVaultsListDto;
|
|
|
+import com.crm.rely.backend.model.entity.vaultody.vaults.VaultTransactionsEntity;
|
|
|
+import com.crm.rely.backend.model.pojo.table.TransactionItemTable;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+public class VaultsJob {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private VaultodyService vaultodyService;
|
|
|
+
|
|
|
+ @Scheduled(cron = "0 0 1 * * ?")
|
|
|
+ public void vaultsJob() throws Exception{
|
|
|
+ //TODO: 获取保险箱列表
|
|
|
+ List<VaultodyVaultsListDto> vaultsList = (List<VaultodyVaultsListDto>)vaultodyService.vaultsList().getData();
|
|
|
+ if(CollectionUtils.isEmpty(vaultsList)){
|
|
|
+ log.info("没有获取到保险箱列表");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<TransactionItemTable> tables = new LinkedList<>();
|
|
|
+ List<String> vaultIds = vaultsList.stream().map(VaultodyVaultsListDto::getId).toList();
|
|
|
+ //TODO: 获取保险箱交易记录
|
|
|
+ for (String vaultId : vaultIds) {
|
|
|
+ List<TransactionItemDto> list = queryWithFilter(vaultId);
|
|
|
+ if(CollectionUtils.isEmpty(list)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (TransactionItemDto transactionItemDto : list) {
|
|
|
+ TransactionItemTable table = new TransactionItemTable() ;
|
|
|
+ BeanUtils.copyProperties(transactionItemDto, table);
|
|
|
+ table.setVaultId(vaultId);
|
|
|
+ table.setItemId(transactionItemDto.getId());
|
|
|
+ tables.add(table);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(CollectionUtils.isEmpty(tables)){
|
|
|
+ log.info("没有获取到保险箱交易记录:{},定时任务结束",tables);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ vaultodyService.batchSave(tables);
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<TransactionItemDto> queryWithFilter(String vaultId) throws Exception {
|
|
|
+ VaultTransactionsEntity entity = new VaultTransactionsEntity();
|
|
|
+ entity.setVaultId(vaultId);
|
|
|
+ List<TransactionItemDto> result = new ArrayList<>();
|
|
|
+
|
|
|
+ // 先获取数据库中已存在的item ID列表
|
|
|
+ List<String> existingItemIds = recordByVaultId(vaultId);
|
|
|
+ Set<String> existingIdSet = new HashSet<>(existingItemIds);
|
|
|
+
|
|
|
+ VaultTransaction vaultTransaction = vaultodyService.vaultTransaction(entity);
|
|
|
+
|
|
|
+ // 处理第一页数据
|
|
|
+ if (vaultTransaction.getList() != null && !vaultTransaction.getList().isEmpty()) {
|
|
|
+ List<TransactionItemDto> filteredList = filterExistingItems(vaultTransaction.getList(), existingIdSet);
|
|
|
+ result.addAll(filteredList);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分页查询剩余数据
|
|
|
+ while (Boolean.TRUE.equals(vaultTransaction.getHasMore())
|
|
|
+ && vaultTransaction.getList() != null
|
|
|
+ && !vaultTransaction.getList().isEmpty()) {
|
|
|
+
|
|
|
+ String lastId = vaultTransaction.getList().get(vaultTransaction.getList().size() - 1).getId();
|
|
|
+ entity.setStartingAfter(lastId);
|
|
|
+
|
|
|
+ vaultTransaction = vaultodyService.vaultTransaction(entity);
|
|
|
+
|
|
|
+ if (vaultTransaction.getList() != null && !vaultTransaction.getList().isEmpty()) {
|
|
|
+ List<TransactionItemDto> filteredList = filterExistingItems(vaultTransaction.getList(), existingIdSet);
|
|
|
+ result.addAll(filteredList);
|
|
|
+ } else {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<TransactionItemDto> filterExistingItems(List<TransactionItemDto> items, Set<String> existingIdSet) {
|
|
|
+ if (items == null || items.isEmpty()) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
+ return items.stream()
|
|
|
+ .filter(item -> item != null && item.getId() != null)
|
|
|
+ .filter(item -> !existingIdSet.contains(item.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<String> recordByVaultId(String vaultId){
|
|
|
+ List<TransactionItemTable> list = vaultodyService.finAllByVaultId(vaultId);
|
|
|
+ if(CollectionUtils.isEmpty(list)){
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ return list.stream().map(TransactionItemTable::getItemId).toList();
|
|
|
+ }
|
|
|
+}
|