Sfoglia il codice sorgente

保险箱详情
保险箱详情导出

kongxiangyang 2 mesi fa
parent
commit
57ae819d8f

+ 62 - 3
crm-manager/src/main/java/com/crm/manager/controller/VaultodyController.java

@@ -2,10 +2,20 @@ package com.crm.manager.controller;
 
 import com.crm.manager.service.VaultodyService;
 import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.rely.backend.model.dto.export.TransactionItemExport;
+import com.crm.rely.backend.model.dto.vaultody.vaults.response.TransactionItem;
+import com.crm.rely.backend.model.entity.vaultody.vaults.VaultTransactionsEntity;
+import com.crm.rely.backend.util.ExportUtil;
+import com.crm.rely.backend.util.FileProcessUtil;
+import com.google.common.collect.Lists;
+import jakarta.servlet.http.HttpServletResponse;
+import org.apache.commons.lang.StringUtils;
+import org.hibernate.service.spi.ServiceException;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 
 @RestController
@@ -25,4 +35,53 @@ public class VaultodyController {
         return vaultodyService.vaultsList();
     }
 
+
+    /**
+     * 获取保险箱交易记录
+     *
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/vaults/transactions")
+    public BaseResultDto vaultsTransactions(@RequestBody VaultTransactionsEntity entity) throws Exception {
+        if (StringUtils.isBlank(entity.getVaultId())) {
+            throw new ServiceException("vault_id_not_null_error");
+        }
+        return vaultodyService.vaultsTransactions(entity);
+    }
+
+    /**
+     * 导出保险箱交易记录
+     * @param entity
+     * @param response
+     * @throws Exception
+     */
+    @PostMapping("/export")
+    public void export(@RequestBody VaultTransactionsEntity entity, HttpServletResponse response) throws Exception {
+        List<TransactionItem> items = vaultodyService.queryExportItems(entity);
+        List<TransactionItemExport> exportDtos = Lists.newArrayList();
+        for (TransactionItem item : items) {
+            TransactionItemExport exportDto = new TransactionItemExport();
+            BeanUtils.copyProperties(item, exportDto);
+            exportDto.setRecipientAddress(item.getRecipients().get(0).getAddress());
+            exportDto.setRecipientAddressType(item.getRecipients().get(0).getAddressType());
+            exportDto.setRecipientAmount(item.getRecipients().get(0).getAmount());
+            exportDto.setRecipientAmountUnit(item.getRecipients().get(0).getAmountUnit());
+            exportDto.setRecipientIsVaultAddress(item.getRecipients().get(0).getIsVaultAddress());
+            exportDto.setRecipientLabel(item.getRecipients().get(0).getLabel());
+            exportDto.setSenderAddress(item.getSenders().get(0).getAddress());
+            exportDto.setSenderAddressType(item.getSenders().get(0).getAddressType());
+            exportDto.setSenderAmount(item.getSenders().get(0).getAmount());
+            exportDto.setSenderAmountUnit(item.getSenders().get(0).getAmountUnit());
+            exportDto.setSenderIsVaultAddress(item.getSenders().get(0).getIsVaultAddress());
+            exportDto.setSenderLabel(item.getSenders().get(0).getLabel());
+            exportDto.setAmount(item.getTransactionFee().getAmount());
+            exportDto.setAmountUnit(item.getTransactionFee().getAmountUnit());
+            exportDtos.add(exportDto);
+        }
+        ExportUtil.transferToResponse(FileProcessUtil.genExportFileName("VAULTODY_VAULT_TRANSACTIONS"), exportDtos,
+                TransactionItemExport.class, response);
+    }
+
 }

+ 8 - 0
crm-manager/src/main/java/com/crm/manager/service/VaultodyService.java

@@ -1,9 +1,17 @@
 package com.crm.manager.service;
 
 import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.rely.backend.model.dto.vaultody.vaults.response.TransactionItem;
+import com.crm.rely.backend.model.entity.vaultody.vaults.VaultTransactionsEntity;
+
+import java.util.List;
 
 public interface VaultodyService {
 
 
     BaseResultDto vaultsList() throws Exception;
+
+    BaseResultDto vaultsTransactions(VaultTransactionsEntity entity) throws Exception;
+
+    List<TransactionItem> queryExportItems(VaultTransactionsEntity entity) throws Exception;
 }

+ 99 - 1
crm-manager/src/main/java/com/crm/manager/service/impl/VaultodyServiceImpl.java

@@ -11,15 +11,19 @@ import com.crm.rely.backend.core.pojo.table.SysConfigTable;
 import com.crm.rely.backend.model.config.VaultodyConfig;
 import com.crm.rely.backend.model.constant.ConfigConstants;
 import com.crm.rely.backend.model.dto.vaultody.vaults.VaultodyVaultsListDto;
-import com.crm.rely.backend.model.dto.vaultody.vaults.response.VaultsListResponseDto;
+import com.crm.rely.backend.model.dto.vaultody.vaults.response.*;
+import com.crm.rely.backend.model.entity.vaultody.vaults.VaultTransactionsEntity;
 import com.crm.rely.backend.model.pojo.table.SysVaultodyConfigTable;
 import com.crm.rely.backend.util.AESUtil;
 import com.crm.rely.backend.util.HttpUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.jsoup.Connection;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
 
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;
@@ -194,4 +198,98 @@ public class VaultodyServiceImpl implements VaultodyService {
         }
         return BaseResultDto.success(dtos);
     }
+
+    @Override
+    public BaseResultDto vaultsTransactions(VaultTransactionsEntity entity) throws Exception{
+        String apiKey = "6f3cc6caf513a5cde2df5d3ed805e3703d4d43b2";
+        String apiSecret = "MLjTUAYgxSM2dg==";        // Base64编码的secret
+        String passphrase = "7UGMi2*t0h";
+        String method = "GET";
+        String requestPath = "/vaults/"+entity.getVaultId()+"/transactions";
+        String baseUrl = "https://rest.vaultody.com";
+        String query = "{}";
+        Map<String, String> params = new HashMap();
+        if(!ObjectUtils.isEmpty(entity.getLimit())){
+            params.put("limit", String.valueOf(entity.getLimit()));
+        }
+        if(StringUtils.isNotBlank(entity.getStartingAfter())){
+            params.put("startingAfter", entity.getStartingAfter());
+        }
+        if (StringUtils.isNotBlank(entity.getContext())){
+            params.put("context", entity.getContext());
+        }
+        // ------------------ 时间戳(秒) ------------------
+        String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
+        // ------------------ 构建消息用于签名 ------------------
+        String message = timestamp + method + requestPath + query + JSON.toJSONString(params);
+        String signature = getSignature(message, apiSecret);
+        System.out.println("Signature: " + signature);
+        Map<String, String> headers = new HashMap<>();
+        headers.put("x-api-key", apiKey);
+        headers.put("x-api-sign", signature);
+        headers.put("x-api-timestamp", timestamp);
+        headers.put("x-api-passphrase", passphrase);
+        headers.put("Content-Type", "application/json");
+        Connection.Response response = HttpUtil.get(baseUrl + requestPath, headers, params);
+        System.out.println(response.statusCode());
+        System.out.println(response.body());
+        if (response.statusCode() != 200) {
+            return BaseResultDto.error(response.statusMessage());
+        }
+        TransactionResponse responseDto = JSON.parseObject(response.body(), TransactionResponse.class);
+        ResponseData data = responseDto.getData();
+        List<TransactionItem> items;
+        if(CollectionUtils.isEmpty(data.getItems())){
+            items = new ArrayList<>();
+            TransactionItem item = new TransactionItem();
+            item.setBlockchain("ethereum");
+            item.setCreatedTimestamp(System.currentTimeMillis() / 1000);
+            item.setDirection("direction");
+            item.setHasTokenTransfer("false");
+            item.setId("654ba3af9e8dd80901f17347");
+            item.setIsInternal("false");
+            item.setMinedInBlockHeight("1234324");
+            item.setNetwork("mainnet");
+
+            List<TransactionParticipant> recipients = new LinkedList<>();
+            TransactionParticipant recipient = new TransactionParticipant();
+            recipient.setAddress("0xd2070342a1a5ce24930ec6582b3db846458525a0");
+            recipient.setAddressType("deposit");
+            recipient.setAmount("0.0003");
+            recipient.setAmountUnit("ETH");
+            recipient.setIsVaultAddress("false");
+            recipient.setLabel("Address name");
+            recipients.add(recipient);
+
+            List<TransactionParticipant> senders = new LinkedList<>();
+            TransactionParticipant sender = new TransactionParticipant();
+            sender.setAddress("0xa94b8eca8703ad2804cb204976ac023b612c407e");
+            sender.setAddressType("deposit");
+            sender.setAmount("0.0003");
+            sender.setAmountUnit("ETH");
+            sender.setIsVaultAddress("true");
+            sender.setLabel("Address name");
+            senders.add(sender);
+
+
+            item.setRecipients(recipients);
+            item.setSenders(senders);
+
+            item.setStatus("completed");
+            TransactionFee transactionFee = new TransactionFee();
+            transactionFee.setAmount("0.0024");
+            transactionFee.setAmountUnit("ETH");
+            item.setTransactionFee(transactionFee);
+            item.setTransactionId("281a63d28ddf6d0d5d78090b7cdf3a8c0be95bbb296544943ef45d9dec44405d");
+            items.add(item);
+            data.setItems(items);
+        }
+        return BaseResultDto.success(data);
+    }
+
+    @Override
+    public List<TransactionItem> queryExportItems (VaultTransactionsEntity entity) throws Exception{
+        ResponseData result = (ResponseData)vaultsTransactions(entity).getData();
+        return result.getItems();
+    }
 }

+ 2 - 0
crm-model/src/main/java/com/crm/rely/backend/model/constant/ConfigConstants.java

@@ -4,6 +4,8 @@ public class ConfigConstants {
 
     public static final String VAULTODY_MANAGER_CONFIG = "VAULTODY_MANAGER_CONFIG";
 
+//    public static final String VAULTODY_MANAGER_CONFIG = "VAULTODY_MANAGER_CONFIG";
+
     public static final String FINANCE_PROPERTY_KEY = "FINANCE_PROPERTY_KEY";
 
 }

+ 59 - 0
crm-model/src/main/java/com/crm/rely/backend/model/dto/export/TransactionItemExport.java

@@ -0,0 +1,59 @@
+package com.crm.rely.backend.model.dto.export;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+@Data
+public class TransactionItemExport {
+    @ExcelProperty(value = "blockchain", index = 0)
+    private String blockchain;
+    @ExcelProperty(value = "createdTimestamp", index = 1)
+    private Long createdTimestamp;
+    @ExcelProperty(value = "direction", index = 2)
+    private String direction;
+    @ExcelProperty(value = "hasTokenTransfer", index = 3)
+    private String hasTokenTransfer;
+    @ExcelProperty(value = "id", index = 4)
+    private String id;
+    @ExcelProperty(value = "isInternal", index = 5)
+    private String isInternal;
+    @ExcelProperty(value = "minedInBlockHeight", index = 6)
+    private String minedInBlockHeight;
+    @ExcelProperty(value = "network", index = 7)
+    private String network;
+
+    @ExcelProperty(value = "recipientAddress", index = 8)
+    private String recipientAddress;
+    @ExcelProperty(value = "recipientAddressType", index = 9)
+    private String recipientAddressType;
+    @ExcelProperty(value = "recipientAmount", index = 10)
+    private String recipientAmount;
+    @ExcelProperty(value = "recipientAmountUnit", index = 11)
+    private String recipientAmountUnit;
+    @ExcelProperty(value = "recipientIsVaultAddress", index = 12)
+    private String recipientIsVaultAddress;
+    @ExcelProperty(value = "recipientLabel", index = 13)
+    private String recipientLabel;
+
+    @ExcelProperty(value = "senderAddress", index = 14)
+    private String senderAddress;
+    @ExcelProperty(value = "senderAddressType", index = 15)
+    private String senderAddressType;
+    @ExcelProperty(value = "senderAmount", index = 16)
+    private String senderAmount;
+    @ExcelProperty(value = "senderAmountUnit", index = 17)
+    private String senderAmountUnit;
+    @ExcelProperty(value = "senderIsVaultAddress", index = 18)
+    private String senderIsVaultAddress;
+    @ExcelProperty(value = "senderLabel", index = 19)
+    private String senderLabel;
+
+    @ExcelProperty(value = "status", index = 20)
+    private String status;
+    @ExcelProperty(value = "amount", index = 21)
+    private String amount;
+    @ExcelProperty(value = "amountUnit", index = 22)
+    private String amountUnit;
+    @ExcelProperty(value = "transactionId", index = 23)
+    private String transactionId;
+}

+ 13 - 0
crm-model/src/main/java/com/crm/rely/backend/model/dto/vaultody/vaults/response/ResponseData.java

@@ -0,0 +1,13 @@
+package com.crm.rely.backend.model.dto.vaultody.vaults.response;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ResponseData {
+    private Integer limit;
+    private String startingAfter;
+    private Boolean hasMore;
+    private List<TransactionItem> items;
+}

+ 9 - 0
crm-model/src/main/java/com/crm/rely/backend/model/dto/vaultody/vaults/response/TransactionFee.java

@@ -0,0 +1,9 @@
+package com.crm.rely.backend.model.dto.vaultody.vaults.response;
+
+import lombok.Data;
+
+@Data
+public class TransactionFee {
+    private String amount;
+    private String amountUnit;
+}

+ 22 - 0
crm-model/src/main/java/com/crm/rely/backend/model/dto/vaultody/vaults/response/TransactionItem.java

@@ -0,0 +1,22 @@
+package com.crm.rely.backend.model.dto.vaultody.vaults.response;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TransactionItem {
+    private String blockchain;
+    private Long createdTimestamp;
+    private String direction;
+    private String hasTokenTransfer;
+    private String id;
+    private String isInternal;
+    private String minedInBlockHeight;
+    private String network;
+    private List<TransactionParticipant> recipients;
+    private List<TransactionParticipant> senders;
+    private String status;
+    private TransactionFee transactionFee;
+    private String transactionId;
+}

+ 13 - 0
crm-model/src/main/java/com/crm/rely/backend/model/dto/vaultody/vaults/response/TransactionParticipant.java

@@ -0,0 +1,13 @@
+package com.crm.rely.backend.model.dto.vaultody.vaults.response;
+
+import lombok.Data;
+
+@Data
+public class TransactionParticipant {
+    private String address;
+    private String addressType;
+    private String amount;
+    private String amountUnit;
+    private String isVaultAddress;
+    private String label;
+}

+ 11 - 0
crm-model/src/main/java/com/crm/rely/backend/model/dto/vaultody/vaults/response/TransactionResponse.java

@@ -0,0 +1,11 @@
+package com.crm.rely.backend.model.dto.vaultody.vaults.response;
+
+import lombok.Data;
+
+@Data
+public class TransactionResponse {
+    private String apiVersion;
+    private String requestId;
+    private String context;
+    private ResponseData data;
+}

+ 20 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/vaultody/vaults/VaultTransactionsEntity.java

@@ -0,0 +1,20 @@
+package com.crm.rely.backend.model.entity.vaultody.vaults;
+
+import lombok.Data;
+
+/**
+ * 获取保险箱交易记录入参
+ */
+@Data
+public class VaultTransactionsEntity {
+    /**
+     * 保险箱ID
+     */
+    private String vaultId;
+
+    private Long limit;
+
+    private String startingAfter;
+
+    private String context;
+}