VaultodyController.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package com.crm.manager.controller;
  2. import com.crm.manager.service.VaultodyService;
  3. import com.crm.rely.backend.core.dto.base.BaseResultDto;
  4. import com.crm.rely.backend.model.dto.export.TransactionItemExport;
  5. import com.crm.rely.backend.model.entity.vaultody.vaults.VaultTransactionsEntity;
  6. import com.crm.rely.backend.model.entity.vaultody.vaults.VaultTransactionsSearchEntity;
  7. import com.crm.rely.backend.model.pojo.table.TransactionItemTable;
  8. import com.crm.rely.backend.util.DateUtil;
  9. import com.crm.rely.backend.util.ExportUtil;
  10. import com.crm.rely.backend.util.FileProcessUtil;
  11. import com.google.common.collect.Lists;
  12. import jakarta.servlet.http.HttpServletResponse;
  13. import org.apache.commons.lang3.StringUtils;
  14. import org.hibernate.service.spi.ServiceException;
  15. import org.springframework.beans.BeanUtils;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.web.bind.annotation.PostMapping;
  18. import org.springframework.web.bind.annotation.RequestBody;
  19. import org.springframework.web.bind.annotation.RequestMapping;
  20. import org.springframework.web.bind.annotation.RestController;
  21. import java.time.Instant;
  22. import java.time.LocalDateTime;
  23. import java.time.ZoneId;
  24. import java.time.format.DateTimeFormatter;
  25. import java.util.List;
  26. @RestController
  27. @RequestMapping("/vaultody")
  28. public class VaultodyController {
  29. @Autowired
  30. private VaultodyService vaultodyService;
  31. /**
  32. * 保险箱列表
  33. *
  34. */
  35. @PostMapping("/vaults/list")
  36. public BaseResultDto vaultsList() throws Exception {
  37. return vaultodyService.vaultsList();
  38. }
  39. /**
  40. * 保险箱交易详情分页查询
  41. * @param entity
  42. * @return
  43. * @throws Exception
  44. */
  45. @PostMapping("/transaction/search/list")
  46. public BaseResultDto searchList(@RequestBody VaultTransactionsSearchEntity entity) throws Exception {
  47. if (StringUtils.isBlank(entity.getVaultId())) {
  48. throw new ServiceException("vault_id_not_null_error");
  49. }
  50. return vaultodyService.searchList(entity);
  51. }
  52. /**
  53. * 导出保险箱交易记录
  54. * @param entity
  55. * @param response
  56. * @throws Exception
  57. */
  58. @PostMapping("/export")
  59. public void export(@RequestBody VaultTransactionsEntity entity, HttpServletResponse response) throws Exception {
  60. List<TransactionItemTable> items = vaultodyService.queryExportItems(entity);
  61. List<TransactionItemExport> exportDtos = Lists.newArrayList();
  62. for (TransactionItemTable item : items) {
  63. TransactionItemExport exportDto = new TransactionItemExport();
  64. BeanUtils.copyProperties(item, exportDto);
  65. if("ETH".equals(exportDto.getRecipientAmountUnit())){
  66. exportDto.setTransactionId("https://etherscan.io/tx/"+exportDto.getTransactionId());
  67. }else {
  68. exportDto.setTransactionId("https://tronscan.org/#/transaction/"+exportDto.getTransactionId());
  69. }
  70. exportDto.setCreatedTimestamp(secondToDateTimeStr(item.getCreatedTimestamp()));
  71. exportDtos.add(exportDto);
  72. }
  73. ExportUtil.transferToResponse(FileProcessUtil.genExportFileName("VAULTODY_VAULT_TRANSACTIONS"), exportDtos,
  74. TransactionItemExport.class, response);
  75. }
  76. // 常用格式:yyyy-MM-dd HH:mm:ss
  77. public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  78. /**
  79. * 秒级时间戳 → 日期字符串
  80. * @param secondTimestamp 秒级时间戳 (如 1735458266)
  81. * @return yyyy-MM-dd HH:mm:ss
  82. */
  83. public static String secondToDateTimeStr(long secondTimestamp) {
  84. if (secondTimestamp <= 0) {
  85. return null;
  86. }
  87. // 秒级时间戳转 Instant
  88. Instant instant = Instant.ofEpochSecond(secondTimestamp);
  89. // 转东八区时间(中国时区)
  90. LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.of("Asia/Shanghai"));
  91. // 格式化字符串
  92. return localDateTime.format(FORMATTER);
  93. }
  94. }