Prechádzať zdrojové kódy

feat: 转账导出接口对齐表单筛选条件,导出列加备注/失败原因,时间格式东8,类型翻译补齐

alphaH 2 týždňov pred
rodič
commit
d691dbd171

+ 7 - 4
java/src/main/java/com/payment/platform/module/payment/account/controller/AccountController.java

@@ -239,14 +239,17 @@ public class AccountController {
     @PreAuthorize("@perm.hasAny('module_payment:account:transfer:list')")
     @GetMapping("/transfer/export")
     public void transferExport(
-            @RequestParam(name = "start_time") String startTime,
-            @RequestParam(name = "end_time") String endTime,
+            @RequestParam(name = "out_biz_no", required = false) String outBizNo,
+            @RequestParam(name = "status", required = false) String status,
+            @RequestParam(name = "tenant_id", required = false) Long tenantId,
             @RequestParam(name = "enterprise_id", required = false) String enterpriseId,
+            @RequestParam(name = "start_time", required = false) String startTime,
+            @RequestParam(name = "end_time", required = false) String endTime,
             HttpServletResponse response) throws IOException {
-        byte[] bytes = accountService.transferExport(startTime, endTime, enterpriseId);
+        byte[] bytes = accountService.transferExport(outBizNo, status, tenantId, enterpriseId, startTime, endTime);
         response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
         response.setHeader("Content-Disposition",
-                "attachment; filename=transfer_report_" + startTime + "_" + endTime + ".xlsx");
+                "attachment; filename=transfer_report.xlsx");
         response.getOutputStream().write(bytes);
     }
 

+ 20 - 11
java/src/main/java/com/payment/platform/module/payment/account/service/AccountService.java

@@ -37,6 +37,7 @@ import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.OffsetDateTime;
+import java.time.ZoneId;
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -294,17 +295,16 @@ public class AccountService {
      *
      * Python 对应: transfer_export_service (L753-821) 使用 ExcelUtil 导出 Excel
      */
-    public byte[] transferExport(String startTime, String endTime, String enterpriseId) {
+    public byte[] transferExport(String outBizNo, String status, Long tenantId, String enterpriseId,
+            String startTime, String endTime) {
         try {
-            OffsetDateTime start = parseDateTime(startTime);
-            OffsetDateTime end = parseDateTime(endTime);
-
             LambdaQueryWrapper<TransferEntity> w = new LambdaQueryWrapper<>();
-            w.ge(TransferEntity::getCreatedTime, start)
-             .le(TransferEntity::getCreatedTime, end);
-            if (enterpriseId != null && !enterpriseId.isBlank()) {
-                w.eq(TransferEntity::getEnterpriseId, enterpriseId);
-            }
+            if (outBizNo != null && !outBizNo.isBlank()) w.eq(TransferEntity::getOutBizNo, outBizNo);
+            if (status != null && !status.isBlank()) w.eq(TransferEntity::getStatus, status);
+            if (tenantId != null) w.eq(TransferEntity::getTenantId, tenantId);
+            if (enterpriseId != null && !enterpriseId.isBlank()) w.eq(TransferEntity::getEnterpriseId, enterpriseId);
+            if (startTime != null && !startTime.isBlank()) w.ge(TransferEntity::getCreatedTime, parseDateTime(startTime));
+            if (endTime != null && !endTime.isBlank()) w.le(TransferEntity::getCreatedTime, parseDateTime(endTime));
             w.orderByDesc(TransferEntity::getId);
 
             List<TransferEntity> records = transferMapper.selectList(w);
@@ -316,11 +316,15 @@ public class AccountService {
                     "REFUND", "退票");
 
             Map<String, String> payeeTypeMap = Map.of(
+                    "ALIPAY_USER_ID", "支付宝账户",
+                    "ALIPAY_LOGON_ID", "支付宝账户",
                     "ALIPAY_ACCOUNT", "支付宝账户",
+                    "BANKCARD_ACCOUNT", "银行卡",
                     "BANK_CARD", "银行卡");
 
             ObjectMapper om = new ObjectMapper();
             List<Map<String, Object>> listData = new ArrayList<>();
+            DateTimeFormatter timeFmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
             int seq = 1;
             for (TransferEntity r : records) {
@@ -331,7 +335,8 @@ public class AccountService {
                 row.put("金额(元)", r.getAmount() != null ? r.getAmount().toPlainString() : "0");
                 row.put("状态", statusMap.getOrDefault(r.getStatus(), r.getStatus() != null ? r.getStatus() : ""));
                 row.put("转账标题", r.getOrderTitle() != null ? r.getOrderTitle() : "");
-                row.put("创建时间", r.getCreatedTime() != null ? r.getCreatedTime().toString() : "");
+                row.put("创建时间", r.getCreatedTime() != null
+                        ? r.getCreatedTime().atZoneSameInstant(ZoneId.of("Asia/Shanghai")).format(timeFmt) : "");
 
                 // 解析 payeeInfo JSON
                 String name = "";
@@ -348,6 +353,8 @@ public class AccountService {
                 }
                 row.put("收款方姓名", name);
                 row.put("收款方类型", payeeTypeMap.getOrDefault(identityType, identityType));
+                row.put("备注", r.getRemark() != null ? r.getRemark() : "");
+                row.put("失败原因", r.getErrorMsg() != null ? r.getErrorMsg() : "");
                 listData.add(row);
             }
 
@@ -361,8 +368,10 @@ public class AccountService {
             mappingDict.put("状态", "状态");
             mappingDict.put("转账标题", "转账标题");
             mappingDict.put("创建时间", "创建时间");
+            mappingDict.put("备注", "备注");
+            mappingDict.put("失败原因", "失败原因");
 
-            log.info("导出转账记录报表: {} -> {}, {} 条", startTime, endTime, listData.size());
+            log.info("导出转账记录报表: {} 条", listData.size());
             return ExcelUtil.exportToExcel(listData, mappingDict);
         } catch (Exception e) {
             log.error("导出转账记录失败", e);