From b8875333f33e5823351dc710e197a4d7bc5b5ffc Mon Sep 17 00:00:00 2001 From: DaxPay Date: Sun, 5 May 2024 20:55:36 +0800 Subject: [PATCH] =?UTF-8?q?ref=20=E5=AF=B9=E8=B4=A6=E5=B7=AE=E5=BC=82?= =?UTF-8?q?=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 283 ++---------------- _doc/Task.md | 1 + .../daxpay/sdk/param/pay/PayParam.java | 2 +- .../daxpay/sdk/payment/PayOrderTest.java | 7 +- .../order/ReconcileOrderController.java | 6 + .../typehandler/ReconcileDiffTypeHandler.java | 8 +- .../order/reconcile/entity/ReconcileDiff.java | 18 +- ...cileDiff.java => ReconcileDiffDetail.java} | 2 +- .../service/ReconcileAssistService.java | 45 +-- .../reconcile/service/ReconcileService.java | 15 +- .../dto/order/reconcile/ReconcileDiffDto.java | 19 +- .../param/reconcile/ReconcileDiffQuery.java | 23 +- 12 files changed, 113 insertions(+), 316 deletions(-) rename daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/domain/{ReconcileDiff.java => ReconcileDiffDetail.java} (92%) diff --git a/README.md b/README.md index 2582e5f0..bdab8407 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ -

@@ -26,15 +25,12 @@ > DaxPay是一套开源支付网关系统,已经对接支付宝、微信支付相关的接口。可以独立部署,提供接口供业务系统进行调用,不对原有系统产生影响 -gateway为开发分支,本地运行请使用master分支进行测试,当前正在进行整个系统的优化重构工作,**请勿在生产环境中使用,请等待生产可用的版本发布**, - - ## 🧭 特色功能 - 封装各类支付通道的接口为统一的接口,方便业务系统进行调用,简化对接多种支付方式的复杂度 - 已对接`微信支付`、`支付宝`和`云闪付`相关的接口,后续版本将支持`V3`版本的接口 - 支持支付、退款、对账、分账等支付相关的能力 - 提供`HTTP`方式接口调用能力,和`Java`版本的`SDK`,方便业务系统进行对接 -- 接口请求和响应数据支持启用签名机制,可根据实际需要进行开关,保证交易安全可靠 +- 接口请求和响应数据支持启用签名机制,保证交易安全可靠 - 提供管理平台,方便运营人员进行管理和操作,不需要懂IT技术也可以轻松使用 - 提供`聚合支付`、`电脑收银台`和`手机收银台`的演示模块,供开发者参考其实现支付功能的逻辑 @@ -108,51 +104,40 @@ gateway为开发分支,本地运行请使用master分支进行测试,当前 > 此处以简单支付接口为例,演示业务系统如何调用支付网关进行支付,其他接口的调用方式类似,具体请参考[支付对接](https://bootx.gitee.io/daxpay/gateway/overview/接口清单.html)。 ```java -package cn.bootx.platform.daxpay.sdk; - -import cn.bootx.platform.daxpay.sdk.code.PayChannelEnum; -import cn.bootx.platform.daxpay.sdk.code.PayMethodEnum; -import cn.bootx.platform.daxpay.sdk.model.PayOrderModel; -import cn.bootx.platform.daxpay.sdk.net.DaxPayConfig; -import cn.bootx.platform.daxpay.sdk.net.DaxPayKit; -import cn.bootx.platform.daxpay.sdk.param.pay.SimplePayParam; -import cn.bootx.platform.daxpay.sdk.response.DaxPayResult; -import org.junit.Before; -import org.junit.Test; - /** - * 简单支付 + * 统一支付接口 * @author xxm - * @since 2024/2/2 + * @since 2024/2/5 */ -public class SimplePayOrderTest { +public class PayOrderTest { @Before public void init() { // 初始化支付配置 DaxPayConfig config = DaxPayConfig.builder() .serviceUrl("http://127.0.0.1:9000") - // 需要跟网关中配置一致 .signSecret("123456") .signType(SignTypeEnum.HMAC_SHA256) .build(); DaxPayKit.initConfig(config); } + /** + * 支付 + */ @Test - public void simplePay() { - // 简单支付参数 - SimplePayParam param = new SimplePayParam(); - param.setBusinessNo("P0001"); - param.setAmount(1); - param.setTitle("测试支付宝支付"); - param.setChannel(PayChannelEnum.ALI.getCode()); - param.setPayWay(PayWayEnum.QRCODE.getCode()); + public void pay() { + PayParam param = new PayParam(); + param.setClientIp("127.0.0.1"); + param.setNotNotify(true); - DaxPayResult execute = DaxPayKit.execute(param, true); + param.setBizOrderNo("P0004"); + param.setTitle("测试接口支付"); + param.setChannel(PayChannelEnum.ALI.getCode()); + + DaxPayResult execute = DaxPayKit.execute(param); System.out.println(execute); - PayOrderModel data = execute.getData(); - System.out.println(data); + System.out.println(execute.getData()); } } ``` @@ -167,13 +152,14 @@ public class SimplePayOrderTest { ### 支付通道配置 ![微信截图_20240326142208](https://jsd.cdn.zzko.cn/gh/xxm1995/picx-images-hosting@master/daxpay/微信截图_20240326142208.6bgu5vdv60.webp) ## 🛣️ 路线图 -> 当前处于功能开发阶段,部分功能可能会有调整,`V2.1.0`时将作为正式生产可用版本进行发布,之后会保证系统版本非大版本升级时,API接口和数据接口向前兼容 +> gateway为开发分支,本地运行请使用master分支进行测试,当前正在进行整个系统的优化重构工作,各种功能都会有可能调整, +`V2.1.0`时将作为正式生产可用版本进行发布,之后会保证系统版本非大版本升级时,API接口和数据接口向前兼容。 +**请勿在生产环境中使用,请等待生产可用的版本发布。如在使用,需要自己来保证应用的安全** [**当前开发进度和任务池**](/_doc/Task.md) [**历史更新记录**](/_doc/ChangeLog.md) - ## 🥪 关于我们 扫码加入QQ交流群 @@ -217,232 +203,3 @@ public class SimplePayOrderTest { ## 🍷License Apache License Version 2.0 - -## 📚 Dromara 成员项目 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- diff --git a/_doc/Task.md b/_doc/Task.md index 922d6236..241045f8 100644 --- a/_doc/Task.md +++ b/_doc/Task.md @@ -29,6 +29,7 @@ - [x] 云闪付 - [ ] 解析原有文件, 可以转换为指定格式进行下载 - [ ] 增加下载系统对账单功能 + - [x] 增加对单差异数据查看功能 - [ ] 自动分账改造 - [ ] SDK新增对账接收放添加接口 - [ ] 创建定时任务, 自动对待分账订单进行分账 diff --git a/daxpay-single-sdk/src/main/java/cn/bootx/platform/daxpay/sdk/param/pay/PayParam.java b/daxpay-single-sdk/src/main/java/cn/bootx/platform/daxpay/sdk/param/pay/PayParam.java index ac71303f..9b2cd4e0 100644 --- a/daxpay-single-sdk/src/main/java/cn/bootx/platform/daxpay/sdk/param/pay/PayParam.java +++ b/daxpay-single-sdk/src/main/java/cn/bootx/platform/daxpay/sdk/param/pay/PayParam.java @@ -36,7 +36,7 @@ public class PayParam extends DaxPayRequest { /** 支付描述 */ private String description; - /** 是否开启分账 */ + /** 是否开启分账, 不传输为不开启 */ private Boolean allocation; /** 过期时间 */ diff --git a/daxpay-single-sdk/src/test/java/cn/bootx/platform/daxpay/sdk/payment/PayOrderTest.java b/daxpay-single-sdk/src/test/java/cn/bootx/platform/daxpay/sdk/payment/PayOrderTest.java index d0e43eb8..3c6ecb05 100644 --- a/daxpay-single-sdk/src/test/java/cn/bootx/platform/daxpay/sdk/payment/PayOrderTest.java +++ b/daxpay-single-sdk/src/test/java/cn/bootx/platform/daxpay/sdk/payment/PayOrderTest.java @@ -11,7 +11,7 @@ import org.junit.Before; import org.junit.Test; /** - * 通用支付接口 + * 统一支付接口 * @author xxm * @since 2024/2/5 */ @@ -29,10 +29,10 @@ public class PayOrderTest { } /** - * 单通道支付 + * 支付 */ @Test - public void onePay() { + public void pay() { PayParam param = new PayParam(); param.setClientIp("127.0.0.1"); param.setNotNotify(true); @@ -45,5 +45,4 @@ public class PayOrderTest { System.out.println(execute); System.out.println(execute.getData()); } - } diff --git a/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/order/ReconcileOrderController.java b/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/order/ReconcileOrderController.java index 299635b2..87b56026 100644 --- a/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/order/ReconcileOrderController.java +++ b/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/order/ReconcileOrderController.java @@ -69,6 +69,12 @@ public class ReconcileOrderController { return reconcileService.downOriginal(id); } + @Operation(summary = "下载原始交易对账单记录(CSV格式)") + @GetMapping("/downOriginal") + public ResponseEntity downOriginal2Csv(Long id){ + return reconcileService.downOriginal2Csv(id); + } + @Operation(summary = "对账单分页") @GetMapping("/page") public ResResult> page(PageParam pageParam, ReconcileOrderQuery query){ diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/common/typehandler/ReconcileDiffTypeHandler.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/common/typehandler/ReconcileDiffTypeHandler.java index ab9ed23d..a8ed0dec 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/common/typehandler/ReconcileDiffTypeHandler.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/common/typehandler/ReconcileDiffTypeHandler.java @@ -1,7 +1,7 @@ package cn.bootx.platform.daxpay.service.common.typehandler; import cn.bootx.platform.common.mybatisplus.handler.JacksonTypeReferenceHandler; -import cn.bootx.platform.daxpay.service.core.payment.reconcile.domain.ReconcileDiff; +import cn.bootx.platform.daxpay.service.core.payment.reconcile.domain.ReconcileDiffDetail; import com.fasterxml.jackson.core.type.TypeReference; import java.util.List; @@ -11,12 +11,12 @@ import java.util.List; * @author xxm * @since 2024/3/4 */ -public class ReconcileDiffTypeHandler extends JacksonTypeReferenceHandler> { +public class ReconcileDiffTypeHandler extends JacksonTypeReferenceHandler> { /** * 返回要反序列化的类型对象 */ @Override - public TypeReference> getTypeReference() { - return new TypeReference>() {}; + public TypeReference> getTypeReference() { + return new TypeReference>() {}; } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/reconcile/entity/ReconcileDiff.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/reconcile/entity/ReconcileDiff.java index a7b9a669..93bfcfb7 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/reconcile/entity/ReconcileDiff.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/order/reconcile/entity/ReconcileDiff.java @@ -2,10 +2,12 @@ package cn.bootx.platform.daxpay.service.core.order.reconcile.entity; import cn.bootx.platform.common.core.function.EntityBaseFunction; import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; +import cn.bootx.platform.daxpay.code.PayChannelEnum; import cn.bootx.platform.daxpay.code.ReconcileTradeEnum; import cn.bootx.platform.daxpay.service.code.ReconcileDiffTypeEnum; import cn.bootx.platform.daxpay.service.common.typehandler.ReconcileDiffTypeHandler; import cn.bootx.platform.daxpay.service.core.order.reconcile.conver.ReconcileConvert; +import cn.bootx.platform.daxpay.service.core.payment.reconcile.domain.ReconcileDiffDetail; import cn.bootx.platform.daxpay.service.dto.order.reconcile.ReconcileDiffDto; import cn.bootx.table.modify.annotation.DbColumn; import cn.bootx.table.modify.annotation.DbTable; @@ -17,6 +19,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -46,7 +49,7 @@ public class ReconcileDiff extends MpBaseEntity implements EntityBaseFunction diffs; + private List diffs; @Override public ReconcileDiffDto toDto() { diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/domain/ReconcileDiff.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/domain/ReconcileDiffDetail.java similarity index 92% rename from daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/domain/ReconcileDiff.java rename to daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/domain/ReconcileDiffDetail.java index 5d5cbc05..9be1aad2 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/domain/ReconcileDiff.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/domain/ReconcileDiffDetail.java @@ -10,7 +10,7 @@ import lombok.experimental.Accessors; */ @Data @Accessors(chain = true) -public class ReconcileDiff { +public class ReconcileDiffDetail { /** 字段名 */ private String fieldName; diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/service/ReconcileAssistService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/service/ReconcileAssistService.java index dc4746de..90240ce1 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/service/ReconcileAssistService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/service/ReconcileAssistService.java @@ -16,6 +16,7 @@ import cn.bootx.platform.daxpay.service.core.order.reconcile.entity.ReconcileOrd import cn.bootx.platform.daxpay.service.core.order.refund.dao.RefundOrderManager; import cn.bootx.platform.daxpay.service.core.order.refund.entity.RefundOrder; import cn.bootx.platform.daxpay.service.core.payment.reconcile.domain.GeneralTradeInfo; +import cn.bootx.platform.daxpay.service.core.payment.reconcile.domain.ReconcileDiffDetail; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -91,9 +92,6 @@ public class ReconcileAssistService { public List generateDiffRecord(ReconcileOrder reconcileOrder, List localTrades, List outDetails){ - if (CollUtil.isEmpty(outDetails) || CollUtil.isEmpty(localTrades)){ - return new ArrayList<>(); - } // 差异内容 List diffRecords = new ArrayList<>(); @@ -114,28 +112,34 @@ public class ReconcileAssistService { .setTradeNo(outDetail.getTradeNo()) .setDetailId(outDetail.getId()) .setReconcileId(reconcileOrder.getId()) + .setReconcileNo(reconcileOrder.getReconcileNo()) + .setReconcileDate(reconcileOrder.getDate()) .setTitle(outDetail.getTitle()) - .setOrderType(outDetail.getType()) - .setOutOrderNo(outDetail.getOutTradeNo()) + .setTradeType(outDetail.getType()) + .setOutTradeNo(outDetail.getOutTradeNo()) .setOutAmount(outDetail.getAmount()) + .setChannel(reconcileOrder.getChannel()) .setTradeTime(outDetail.getTradeTime()); diffRecords.add(diffRecord); continue; } // 如果远程和本地都存在, 比对差异 - List reconcileDiffs = this.reconcileDiff(outDetail, localTrade); - if (CollUtil.isNotEmpty(reconcileDiffs)) { + List reconcileDiffDetails = this.reconcileDiff(outDetail, localTrade); + if (CollUtil.isNotEmpty(reconcileDiffDetails)) { ReconcileDiff diffRecord = new ReconcileDiff() .setReconcileId(reconcileOrder.getId()) + .setReconcileNo(reconcileOrder.getReconcileNo()) + .setReconcileDate(reconcileOrder.getDate()) .setDetailId(outDetail.getId()) .setDiffType(ReconcileDiffTypeEnum.NOT_MATCH.getCode()) .setTradeNo(outDetail.getTradeNo()) .setTitle(outDetail.getTitle()) - .setOrderType(outDetail.getType()) - .setOutOrderNo(outDetail.getOutTradeNo()) + .setTradeType(outDetail.getType()) + .setOutTradeNo(outDetail.getOutTradeNo()) .setOutAmount(outDetail.getAmount()) .setAmount(localTrade.getAmount()) - .setDiffs(reconcileDiffs) + .setChannel(reconcileOrder.getChannel()) + .setDiffs(reconcileDiffDetails) .setTradeTime(outDetail.getTradeTime()); diffRecords.add(diffRecord); } @@ -148,11 +152,13 @@ public class ReconcileAssistService { .setDiffType(ReconcileDiffTypeEnum.LOCAL_NOT_EXISTS.getCode()) .setTradeNo(localTrade.getTradeNo()) .setReconcileId(reconcileOrder.getId()) - .setDetailId(null) + .setReconcileNo(reconcileOrder.getReconcileNo()) + .setReconcileDate(reconcileOrder.getDate()) .setTitle(localTrade.getTitle()) - .setOrderType(localTrade.getType()) - .setOutOrderNo(localTrade.getOutTradeNo()) + .setTradeType(localTrade.getType()) + .setOutTradeNo(localTrade.getOutTradeNo()) .setAmount(localTrade.getAmount()) + .setChannel(reconcileOrder.getChannel()) .setTradeTime(localTrade.getFinishTime()); diffRecords.add(diffRecord); log.info("远程订单不存在: {}", localTrade.getTradeNo()); @@ -167,35 +173,34 @@ public class ReconcileAssistService { * @param outDetail 下载的对账订单 * @param localTrade 本地交易订单 */ - private List reconcileDiff(ReconcileTradeDetail outDetail, GeneralTradeInfo localTrade){ - List diffs = new ArrayList<>(); + private List reconcileDiff(ReconcileTradeDetail outDetail, GeneralTradeInfo localTrade){ + List diffs = new ArrayList<>(); // 判断类型是否相同 if (Objects.equals(outDetail.getType(), ReconcileTradeEnum.PAY.getCode()) && !Objects.equals(localTrade.getType(), PaymentTypeEnum.PAY.getCode())){ log.warn("订单类型不一致: {},{}", outDetail.getType(), localTrade.getType()); - diffs.add(new cn.bootx.platform.daxpay.service.core.payment.reconcile.domain.ReconcileDiff().setFieldName("订单类型").setLocalValue(outDetail.getType()).setOutValue(localTrade.getType())); + diffs.add(new ReconcileDiffDetail().setFieldName("订单类型").setLocalValue(outDetail.getType()).setOutValue(localTrade.getType())); } if (Objects.equals(outDetail.getType(), ReconcileTradeEnum.REFUND.getCode()) && !Objects.equals(localTrade.getType(), PaymentTypeEnum.REFUND.getCode())){ log.warn("订单类型不一致: {},{}", outDetail.getType(), localTrade.getType()); - diffs.add(new cn.bootx.platform.daxpay.service.core.payment.reconcile.domain.ReconcileDiff().setFieldName("订单类型").setLocalValue(outDetail.getType()).setOutValue(localTrade.getType())); + diffs.add(new ReconcileDiffDetail().setFieldName("订单类型").setLocalValue(outDetail.getType()).setOutValue(localTrade.getType())); } // 判断名称是否一致 if (!Objects.equals(outDetail.getTitle(), localTrade.getTitle())){ log.warn("订单名称不一致: {},{}", outDetail.getTitle(), localTrade.getTitle()); - diffs.add(new cn.bootx.platform.daxpay.service.core.payment.reconcile.domain.ReconcileDiff().setFieldName("订单名称").setLocalValue(outDetail.getTitle()).setOutValue(localTrade.getTitle())); + diffs.add(new ReconcileDiffDetail().setFieldName("订单名称").setLocalValue(outDetail.getTitle()).setOutValue(localTrade.getTitle())); } // 判断金额是否一致 if (!Objects.equals(outDetail.getAmount(), localTrade.getAmount())){ log.warn("订单金额不一致: {},{}", outDetail.getAmount(), localTrade.getAmount()); - diffs.add(new cn.bootx.platform.daxpay.service.core.payment.reconcile.domain.ReconcileDiff().setFieldName("订单金额") + diffs.add(new ReconcileDiffDetail().setFieldName("订单金额") .setLocalValue(String.valueOf(outDetail.getAmount())) .setOutValue(String.valueOf(localTrade.getAmount()))); } return diffs; } - } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/service/ReconcileService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/service/ReconcileService.java index 47ea2fbb..94434292 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/service/ReconcileService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/reconcile/service/ReconcileService.java @@ -7,12 +7,12 @@ import cn.bootx.platform.daxpay.service.code.ReconcileFileTypeEnum; import cn.bootx.platform.daxpay.service.code.ReconcileResultEnum; import cn.bootx.platform.daxpay.service.common.local.PaymentContextLocal; import cn.bootx.platform.daxpay.service.core.order.reconcile.dao.ReconcileFileManager; -import cn.bootx.platform.daxpay.service.core.order.reconcile.dao.ReconcileTradeDetailManager; import cn.bootx.platform.daxpay.service.core.order.reconcile.dao.ReconcileOrderManager; -import cn.bootx.platform.daxpay.service.core.order.reconcile.entity.ReconcileFile; -import cn.bootx.platform.daxpay.service.core.order.reconcile.entity.ReconcileTradeDetail; +import cn.bootx.platform.daxpay.service.core.order.reconcile.dao.ReconcileTradeDetailManager; import cn.bootx.platform.daxpay.service.core.order.reconcile.entity.ReconcileDiff; +import cn.bootx.platform.daxpay.service.core.order.reconcile.entity.ReconcileFile; import cn.bootx.platform.daxpay.service.core.order.reconcile.entity.ReconcileOrder; +import cn.bootx.platform.daxpay.service.core.order.reconcile.entity.ReconcileTradeDetail; import cn.bootx.platform.daxpay.service.core.order.reconcile.service.ReconcileDiffService; import cn.bootx.platform.daxpay.service.core.order.reconcile.service.ReconcileOrderService; import cn.bootx.platform.daxpay.service.core.payment.reconcile.domain.GeneralTradeInfo; @@ -223,19 +223,24 @@ public class ReconcileService { /** * 下载基于原始交易对账单数据转换的对账单文件, 例如csv, json方式 */ - public void downOriginal2Csv(Long id){ + @SneakyThrows + public ResponseEntity downOriginal2Csv(Long id){ ReconcileOrder reconcileOrder = reconcileOrderService.findById(id) .orElseThrow(() -> new DataNotExistException("未找到对账订单")); // 查询对账-第三方交易明细 List reconcileTradeDetails = reconcileTradeDetailManager.findAllByReconcileId(reconcileOrder.getId()); // 转换为csv文件 + + return null; } /** * 下载对账单(本系统中的订单) */ - public void downLocal(Long id){ + @SneakyThrows + public ResponseEntity downLocal(Long id){ + return null; } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/order/reconcile/ReconcileDiffDto.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/order/reconcile/ReconcileDiffDto.java index 68aa0fbf..5612af7c 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/order/reconcile/ReconcileDiffDto.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/order/reconcile/ReconcileDiffDto.java @@ -1,15 +1,17 @@ package cn.bootx.platform.daxpay.service.dto.order.reconcile; import cn.bootx.platform.common.core.rest.dto.BaseDto; +import cn.bootx.platform.daxpay.code.PayChannelEnum; import cn.bootx.platform.daxpay.code.ReconcileTradeEnum; import cn.bootx.platform.daxpay.service.code.ReconcileDiffTypeEnum; -import cn.bootx.platform.daxpay.service.core.payment.reconcile.domain.ReconcileDiff; +import cn.bootx.platform.daxpay.service.core.payment.reconcile.domain.ReconcileDiffDetail; import cn.bootx.table.modify.annotation.DbColumn; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -38,7 +40,7 @@ public class ReconcileDiffDto extends BaseDto { /** 对账日期 */ @Schema(description = "对账日期") - private LocalDateTime reconcileDate; + private LocalDate reconcileDate; /** 本地交易号 */ @Schema(description = "本地交易号") @@ -46,7 +48,7 @@ public class ReconcileDiffDto extends BaseDto { /** 外部交易号 */ @Schema(description = "外部交易号") - private String outOrderNo; + private String outTradeNo; /** 交易时间 */ @Schema(description = "交易时间") @@ -56,6 +58,13 @@ public class ReconcileDiffDto extends BaseDto { @Schema(description = "订单标题") private String title; + /** + * 通道 + * @see PayChannelEnum + */ + @Schema(description = "通道") + private String channel; + /** 交易金额 */ @Schema(description = "交易金额") private Integer amount; @@ -81,8 +90,8 @@ public class ReconcileDiffDto extends BaseDto { /** * 差异内容, 存储json字符串, 格式为 * {属性: '标题', 本地字段值:'标题1', 网关字段值: '标题2'} - * @see ReconcileDiff + * @see ReconcileDiffDetail */ @Schema(description = "差异内容") - private List diffs; + private List diffs; } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/param/reconcile/ReconcileDiffQuery.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/param/reconcile/ReconcileDiffQuery.java index e866431c..67b890f5 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/param/reconcile/ReconcileDiffQuery.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/param/reconcile/ReconcileDiffQuery.java @@ -1,8 +1,10 @@ package cn.bootx.platform.daxpay.service.param.reconcile; import cn.bootx.platform.common.core.rest.param.QueryOrder; +import cn.bootx.platform.daxpay.code.PayChannelEnum; import cn.bootx.platform.daxpay.code.ReconcileTradeEnum; import cn.bootx.platform.daxpay.service.code.ReconcileDiffTypeEnum; +import cn.bootx.table.modify.annotation.DbColumn; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -19,13 +21,9 @@ import lombok.experimental.Accessors; @Schema(title = "对账差异查询参数") public class ReconcileDiffQuery extends QueryOrder { - /** 对账单ID */ - @Schema(description = "对账单ID") - private Long reconcileId; - - /** 对账单明细ID */ - @Schema(description = "对账单明细ID") - private Long detailId; + /** 对账号 */ + @DbColumn(comment = "对账号") + private String reconcileNo; /** 本地交易号 */ @Schema(description = "本地交易号") @@ -33,18 +31,25 @@ public class ReconcileDiffQuery extends QueryOrder { /** 外部交易号 */ @Schema(description = "外部交易号") - private String outOrderNo; + private String outTradeNo; /** 订单标题 */ @Schema(description = "订单标题") private String title; + /** + * 通道 + * @see PayChannelEnum + */ + @Schema(description = "通道") + private String channel; + /** * 对账订单类型 * @see ReconcileTradeEnum */ @Schema(description = "对账订单类型") - private String orderType; + private String tradeType; /** * 差异类型