From c60f9c71bfa24d6b8d9114325a843536a239acf5 Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Sun, 29 Nov 2020 01:43:30 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E8=BF=81=E7=A7=BB=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E4=BA=A4=E6=98=93=E7=9A=84=E6=8F=90=E4=BA=A4=20RPC=20=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=202.=20=E8=BF=81=E7=A7=BB=E6=94=AF=E4=BB=98=E4=BA=A4?= =?UTF-8?q?=E6=98=93=E7=9A=84=E8=8E=B7=E5=8F=96=20RPC=20=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ops/pom.xml | 50 ------- .../cn/iocoder/mall/ops/OpsApplication.java | 15 -- .../rpc/transaction/PayTransactionRpc.java | 18 ++- .../dto/PayTransactionCreateReqDTO.java | 6 + .../dto/PayTransactionGetReqDTO.java | 27 ++++ .../dto/PayTransactionRespDTO.java | 96 +++++++++++++ .../dto/PayTransactionSubmitReqDTO.java | 43 ++++++ .../dto/PayTransactionSubmitRespDTO.java | 23 +++ ...actory.java => ThirdPayClientFactory.java} | 4 +- .../transaction/PayTransactionConvert.java | 7 + .../mysql/dataobject/refund/PayRefundDO.java | 4 + .../transaction/PayTransactionDO.java | 4 + .../PayTransactionExtensionMapper.java | 21 +++ .../transaction/PayTransactionRpcImpl.java | 12 +- .../transaction/PayTransactionService.java | 18 ++- .../impl/PayTransactionServiceImpl.java | 73 +++++++++- .../pay-service-integration-test/pom.xml | 29 ++++ .../impl/PayTransactionServiceImplTest.java | 27 ++++ .../service/transaction/package-info.java | 1 + pay-service-project/pom.xml | 1 + .../mall/pay/api/PayRefundService.java | 0 .../mall/pay/api/PayTransactionService.java | 4 - .../mall/pay/api/bo/refund/PayRefundBO.java | 0 .../pay/api/bo/refund/PayRefundPageBO.java | 0 .../pay/api/bo/refund/PayRefundSubmitBO.java | 0 .../api/bo/transaction/PayTransactionBO.java | 0 .../bo/transaction/PayTransactionPageBO.java | 0 .../mall/pay/api/constant/PayNotifyType.java | 0 .../pay/api/constant/PayRefundStatus.java | 0 .../PayTransactionNotifyStatusEnum.java | 0 .../pay/api/dto/refund/PayRefundPageDTO.java | 0 .../api/dto/refund/PayRefundSubmitDTO.java | 0 .../transaction/PayTransactionPageDTO.java | 0 .../AbstractPayNotifySuccessMessage.java | 0 .../api/message/PayRefundSuccessMessage.java | 0 .../message/PayTransactionSuccessMessage.java | 0 .../users/UsersPayTransactionController.java | 72 ---------- .../pay/biz/component/DubboReferencePool.java | 0 .../pay/biz/config/XxlJobConfiguration.java | 0 .../pay/biz/convert/PayNotifyConvert.java | 0 .../pay/biz/convert/PayRefundConvert.java | 0 .../mall/pay/biz/dao/PayNotifyLogMapper.java | 0 .../mall/pay/biz/dao/PayNotifyTaskMapper.java | 0 .../mall/pay/biz/dao/PayRefundMapper.java | 0 .../pay/biz/dao/PayTransactionMapper.java | 0 .../mall/pay/biz/dataobject/PayLogDO.java | 0 .../pay/biz/dataobject/PayNotifyLogDO.java | 0 .../pay/biz/dataobject/PayNotifyTaskDO.java | 0 .../mall/pay/biz/job/PayNotifyJob.java | 0 .../mq/AbstractPayNotifySuccessConsumer.java | 0 .../pay/biz/mq/PayRefundSuccessConsumer.java | 0 .../biz/mq/PayTransactionSuccessConsumer.java | 0 .../pay/biz/service/PayNotifyServiceImpl.java | 0 .../pay/biz/service/PayRefundServiceImpl.java | 0 .../service/PayTransactionServiceImpl.java | 51 +------ .../resources/config/application-test.yaml | 0 .../resources/mapper/PayNotifyLogMapper.xml | 0 .../resources/mapper/PayNotifyTaskMapper.xml | 0 .../main/resources/mapper/PayRefundMapper.xml | 0 .../mapper/PayTransactionExtensionMapper.xml | 0 .../resources/mapper/PayTransactionMapper.xml | 31 ---- .../test/java}/PayRefundServiceImplTest.java | 0 .../dto/transaction/PayTransactionGetDTO.java | 28 ---- pay/pay-service-impl/pom.xml | 136 ------------------ .../dao/PayTransactionExtensionMapper.java | 19 --- .../src/main/resources/mybatis-config.xml | 19 --- .../cn/iocoder/mall/pay/biz/Application.java | 7 - .../PayTransactionServiceImplTest.java | 13 -- pay/pom.xml | 32 ----- shop-web-app/pom.xml | 6 + .../client/pay/PayTransactionClient.java | 38 +++++ .../pay/PayTransactionController.java | 74 ++++++++++ .../vo/transaction/PayTransactionRespVO.java | 39 +++++ .../PayTransactionSubmitReqVO.java | 12 +- .../PayTransactionSubmitRespVO.java | 8 +- .../convert/pay/PayTransactionConvert.java | 23 +++ .../service/pay/PayTransactionService.java | 28 ++++ .../src/main/resources/application.yml | 2 + .../order/impl/TradeOrderServiceImpl.java | 3 +- 79 files changed, 628 insertions(+), 496 deletions(-) delete mode 100644 ops/pom.xml delete mode 100644 ops/src/main/java/cn/iocoder/mall/ops/OpsApplication.java create mode 100644 pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionGetReqDTO.java create mode 100644 pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionRespDTO.java create mode 100644 pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionSubmitReqDTO.java create mode 100644 pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionSubmitRespDTO.java rename pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/client/thirdpay/{PaySDKFactory.java => ThirdPayClientFactory.java} (83%) create mode 100644 pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/mapper/transaction/PayTransactionExtensionMapper.java create mode 100644 pay-service-project/pay-service-integration-test/pom.xml create mode 100644 pay-service-project/pay-service-integration-test/src/test/java/cn/iocoder/mall/payservice/service/transaction/impl/PayTransactionServiceImplTest.java create mode 100644 pay-service-project/pay-service-integration-test/src/test/java/cn/iocoder/mall/payservice/service/transaction/package-info.java rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/PayRefundService.java (100%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/PayTransactionService.java (88%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundBO.java (100%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundPageBO.java (100%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundSubmitBO.java (100%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/bo/transaction/PayTransactionBO.java (100%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/bo/transaction/PayTransactionPageBO.java (100%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/constant/PayNotifyType.java (100%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/constant/PayRefundStatus.java (100%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/constant/PayTransactionNotifyStatusEnum.java (100%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/dto/refund/PayRefundPageDTO.java (100%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/dto/refund/PayRefundSubmitDTO.java (100%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/dto/transaction/PayTransactionPageDTO.java (100%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/message/AbstractPayNotifySuccessMessage.java (100%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/message/PayRefundSuccessMessage.java (100%) rename pay/{pay-service-api => pay-application}/src/main/java/cn/iocoder/mall/pay/api/message/PayTransactionSuccessMessage.java (100%) delete mode 100644 pay/pay-application/src/main/java/cn/iocoder/mall/pay/application/controller/users/UsersPayTransactionController.java rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/component/DubboReferencePool.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/config/XxlJobConfiguration.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/convert/PayNotifyConvert.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/convert/PayRefundConvert.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/dao/PayNotifyLogMapper.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/dao/PayNotifyTaskMapper.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/dao/PayRefundMapper.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/dao/PayTransactionMapper.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayLogDO.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayNotifyLogDO.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayNotifyTaskDO.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/job/PayNotifyJob.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/mq/AbstractPayNotifySuccessConsumer.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/mq/PayRefundSuccessConsumer.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/mq/PayTransactionSuccessConsumer.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/service/PayNotifyServiceImpl.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/service/PayRefundServiceImpl.java (100%) rename pay/{pay-service-impl => pay-application}/src/main/java/cn/iocoder/mall/pay/biz/service/PayTransactionServiceImpl.java (78%) rename pay/{pay-service-impl => pay-application}/src/main/resources/config/application-test.yaml (100%) rename pay/{pay-service-impl => pay-application}/src/main/resources/mapper/PayNotifyLogMapper.xml (100%) rename pay/{pay-service-impl => pay-application}/src/main/resources/mapper/PayNotifyTaskMapper.xml (100%) rename pay/{pay-service-impl => pay-application}/src/main/resources/mapper/PayRefundMapper.xml (100%) rename pay/{pay-service-impl => pay-application}/src/main/resources/mapper/PayTransactionExtensionMapper.xml (100%) rename pay/{pay-service-impl => pay-application}/src/main/resources/mapper/PayTransactionMapper.xml (78%) rename pay/{pay-service-impl/src/test/java/cn/iocoder/mall/pay/biz/service => pay-application/src/test/java}/PayRefundServiceImplTest.java (100%) delete mode 100644 pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/dto/transaction/PayTransactionGetDTO.java delete mode 100644 pay/pay-service-impl/pom.xml delete mode 100644 pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dao/PayTransactionExtensionMapper.java delete mode 100644 pay/pay-service-impl/src/main/resources/mybatis-config.xml delete mode 100644 pay/pay-service-impl/src/test/java/cn/iocoder/mall/pay/biz/Application.java delete mode 100644 pay/pay-service-impl/src/test/java/cn/iocoder/mall/pay/biz/service/PayTransactionServiceImplTest.java delete mode 100644 pay/pom.xml create mode 100644 shop-web-app/src/main/java/cn/iocoder/mall/shopweb/client/pay/PayTransactionClient.java create mode 100644 shop-web-app/src/main/java/cn/iocoder/mall/shopweb/controller/pay/PayTransactionController.java create mode 100644 shop-web-app/src/main/java/cn/iocoder/mall/shopweb/controller/pay/vo/transaction/PayTransactionRespVO.java rename pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/dto/transaction/PayTransactionSubmitDTO.java => shop-web-app/src/main/java/cn/iocoder/mall/shopweb/controller/pay/vo/transaction/PayTransactionSubmitReqVO.java (67%) rename pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/transaction/PayTransactionSubmitBO.java => shop-web-app/src/main/java/cn/iocoder/mall/shopweb/controller/pay/vo/transaction/PayTransactionSubmitRespVO.java (69%) create mode 100644 shop-web-app/src/main/java/cn/iocoder/mall/shopweb/convert/pay/PayTransactionConvert.java create mode 100644 shop-web-app/src/main/java/cn/iocoder/mall/shopweb/service/pay/PayTransactionService.java diff --git a/ops/pom.xml b/ops/pom.xml deleted file mode 100644 index 4ea6e71bb..000000000 --- a/ops/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - onemall - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - ops - - - - - org.springframework.boot - spring-boot-starter-web - - - - - de.codecentric - spring-boot-admin-starter-server - 2.1.3 - - - de.codecentric - spring-boot-admin-server-ui - 2.1.3 - - - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - true - - - - - - - diff --git a/ops/src/main/java/cn/iocoder/mall/ops/OpsApplication.java b/ops/src/main/java/cn/iocoder/mall/ops/OpsApplication.java deleted file mode 100644 index 81a335d4c..000000000 --- a/ops/src/main/java/cn/iocoder/mall/ops/OpsApplication.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.mall.ops; - -import de.codecentric.boot.admin.server.config.EnableAdminServer; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -@EnableAdminServer -public class OpsApplication { - - public static void main(String[] args) { - SpringApplication.run(OpsApplication.class, args); - } - -} \ No newline at end of file diff --git a/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpc.java b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpc.java index 7bd417452..bf57ef6ae 100644 --- a/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpc.java +++ b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpc.java @@ -1,7 +1,7 @@ package cn.iocoder.mall.payservice.rpc.transaction; import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionCreateReqDTO; +import cn.iocoder.mall.payservice.rpc.transaction.dto.*; /** * 支付交易单 RPC 接口 @@ -16,4 +16,20 @@ public interface PayTransactionRpc { */ CommonResult createPayTransaction(PayTransactionCreateReqDTO createReqDTO); + /** + * 提交支付交易单 + * + * @param submitReqDTO 提交信息 + * @return 提交响应,包含三方支付的响应 + */ + CommonResult submitPayTransaction(PayTransactionSubmitReqDTO submitReqDTO); + + /** + * 获得当支付交易单 + * + * @param getReqDTO 获得条件 + * @return 支付交易单 + */ + CommonResult getPayTransaction(PayTransactionGetReqDTO getReqDTO); + } diff --git a/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionCreateReqDTO.java b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionCreateReqDTO.java index 79ebcaa84..dea26a582 100644 --- a/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionCreateReqDTO.java +++ b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionCreateReqDTO.java @@ -17,6 +17,12 @@ import java.util.Date; @Accessors(chain = true) public class PayTransactionCreateReqDTO implements Serializable { + /** + * 用户编号 + */ + @NotNull(message = "用户编号不能为空") + private Integer userId; + /** * 应用编号 */ diff --git a/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionGetReqDTO.java b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionGetReqDTO.java new file mode 100644 index 000000000..1da8181c9 --- /dev/null +++ b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionGetReqDTO.java @@ -0,0 +1,27 @@ +package cn.iocoder.mall.payservice.rpc.transaction.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; + +/** + * 支付交易获得 Request DTO + */ +@Data +@Accessors(chain = true) +public class PayTransactionGetReqDTO { + + /** + * 应用编号 + */ + @NotEmpty(message = "应用编号不能为空") + private String appId; + + /** + * 订单号 + */ + @NotEmpty(message = "订单号不能为空") + private String orderId; + +} diff --git a/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionRespDTO.java b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionRespDTO.java new file mode 100644 index 000000000..bf638c9d1 --- /dev/null +++ b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionRespDTO.java @@ -0,0 +1,96 @@ +package cn.iocoder.mall.payservice.rpc.transaction.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** +* 支付交易 Response DTO +*/ +@Data +@Accessors(chain = true) +public class PayTransactionRespDTO { + + /** + * 编号,自增 + */ + private Integer id; + /** + * 用户编号 + */ + private Integer userId; + /** + * 应用编号 + */ + private String appId; + /** + * 发起交易的 IP + */ + private String createIp; + /** + * 业务线的订单编号 + */ + private String orderId; + /** + * 订单商品名 + */ + private String orderSubject; + /** + * 订单商品描述 + */ + private String orderDescription; + /** + * 订单备注 + */ + private String orderMemo; + /** + * 支付金额,单位:分。 + */ + private Integer price; + /** + * 订单状态 + */ + private Integer status; + /** + * 交易过期时间 + */ + private Date expireTime; + /** + * 回调业务线完成时间 + */ + private Date finishTime; + /** + * 异步通知地址 + */ + private String notifyUrl; + /** + * 成功支付的交易拓展编号 + */ + private Integer extensionId; + /** + * 支付成功的支付渠道 + */ + private Integer payChannel; + /** + * 第三方支付成功的时间 + */ + private Date paymentTime; + /** + * 收到第三方系统通知的时间 + */ + private Date notifyTime; + /** + * 第三方的流水号 + */ + private String tradeNo; + /** + * 退款总金额 + */ + private Integer refundTotal; + /** + * 创建时间 + */ + private Date createTime; + +} diff --git a/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionSubmitReqDTO.java b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionSubmitReqDTO.java new file mode 100644 index 000000000..865ecc4ac --- /dev/null +++ b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionSubmitReqDTO.java @@ -0,0 +1,43 @@ +package cn.iocoder.mall.payservice.rpc.transaction.dto; + +import cn.iocoder.common.framework.validator.InEnum; +import cn.iocoder.mall.payservice.enums.PayChannelEnum; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * 支付交易提交 Request VO + */ +@Data +@Accessors(chain = true) +public class PayTransactionSubmitReqDTO { + + /** + * 应用编号 + */ + @NotEmpty(message = "应用编号不能为空") + private String appId; + + /** + * 发起交易的 IP + */ + @NotEmpty(message = "IP 不能为空") + private String createIp; + + /** + * 订单号 + */ + @NotEmpty(message = "订单号不能为空") + private String orderId; + + /** + * 支付渠道 + */ + @InEnum(value = PayChannelEnum.class, message = "支付渠道必须是 {value}") + @NotNull(message = "支付渠道") + private Integer payChannel; + +} diff --git a/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionSubmitRespDTO.java b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionSubmitRespDTO.java new file mode 100644 index 000000000..8c8d295ed --- /dev/null +++ b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/dto/PayTransactionSubmitRespDTO.java @@ -0,0 +1,23 @@ +package cn.iocoder.mall.payservice.rpc.transaction.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 支付交易提交 Response DTO + */ +@Data +@Accessors(chain = true) +public class PayTransactionSubmitRespDTO { + + /** + * 支付交易拓展单编号 + */ + private Integer id; + + /** + * 调用三方平台的响应结果 + */ + private String invokeResponse; + +} diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/client/thirdpay/PaySDKFactory.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/client/thirdpay/ThirdPayClientFactory.java similarity index 83% rename from pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/client/thirdpay/PaySDKFactory.java rename to pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/client/thirdpay/ThirdPayClientFactory.java index 46d0b449c..c1998cb3c 100644 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/client/thirdpay/PaySDKFactory.java +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/client/thirdpay/ThirdPayClientFactory.java @@ -5,7 +5,7 @@ import cn.iocoder.mall.payservice.enums.PayChannelEnum; import java.util.HashMap; import java.util.Map; -public class PaySDKFactory { +public class ThirdPayClientFactory { private static Map CLIENTS = new HashMap<>(); @@ -13,7 +13,7 @@ public class PaySDKFactory { CLIENTS.put(PayChannelEnum.PINGXX.getId(), new PingxxThirdPayClient()); } - public static AbstractThirdPayClient getSDK(Integer payChannel) { + public static AbstractThirdPayClient getThirdPayClient(Integer payChannel) { AbstractThirdPayClient client = CLIENTS.get(payChannel); if (client == null) { throw new NullPointerException("找不到合适的 ThirdPayClient :" + payChannel); diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/transaction/PayTransactionConvert.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/transaction/PayTransactionConvert.java index c6870da19..92919504d 100644 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/transaction/PayTransactionConvert.java +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/transaction/PayTransactionConvert.java @@ -1,7 +1,10 @@ package cn.iocoder.mall.payservice.convert.transaction; import cn.iocoder.mall.payservice.dal.mysql.dataobject.transaction.PayTransactionDO; +import cn.iocoder.mall.payservice.dal.mysql.dataobject.transaction.PayTransactionExtensionDO; import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionCreateReqDTO; +import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionRespDTO; +import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionSubmitReqDTO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -12,4 +15,8 @@ public interface PayTransactionConvert { PayTransactionDO convert(PayTransactionCreateReqDTO bean); + PayTransactionExtensionDO convert(PayTransactionSubmitReqDTO bean); + + PayTransactionRespDTO convert(PayTransactionDO bean); + } diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/dataobject/refund/PayRefundDO.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/dataobject/refund/PayRefundDO.java index 92268f848..081612dae 100644 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/dataobject/refund/PayRefundDO.java +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/dataobject/refund/PayRefundDO.java @@ -21,6 +21,10 @@ public class PayRefundDO extends DeletableDO { * 编号,自增 */ private Integer id; + /** + * 用户编号 + */ + private Integer userId; /** * 支付交易编号 */ diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/dataobject/transaction/PayTransactionDO.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/dataobject/transaction/PayTransactionDO.java index 031e5ef4f..fb9ca32c5 100644 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/dataobject/transaction/PayTransactionDO.java +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/dataobject/transaction/PayTransactionDO.java @@ -23,6 +23,10 @@ public class PayTransactionDO extends DeletableDO { */ @TableId private Integer id; + /** + * 用户编号 + */ + private Integer userId; /** * 应用编号 */ diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/mapper/transaction/PayTransactionExtensionMapper.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/mapper/transaction/PayTransactionExtensionMapper.java new file mode 100644 index 000000000..036720177 --- /dev/null +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/mapper/transaction/PayTransactionExtensionMapper.java @@ -0,0 +1,21 @@ +package cn.iocoder.mall.payservice.dal.mysql.mapper.transaction; + +import cn.iocoder.mall.payservice.dal.mysql.dataobject.transaction.PayTransactionExtensionDO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +@Repository +public interface PayTransactionExtensionMapper extends BaseMapper { + + default int update(PayTransactionExtensionDO entity, Integer whereStatus) { + return update(entity, new QueryWrapper() + .eq("id", entity.getId()).eq("status", whereStatus)); + } + + default PayTransactionExtensionDO selectByTransactionCode(String transactionCode) { + return selectOne(new QueryWrapper() + .eq("transaction_code", transactionCode)); + } + +} diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpcImpl.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpcImpl.java index fde8369d0..0339b4e55 100644 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpcImpl.java +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpcImpl.java @@ -1,7 +1,7 @@ package cn.iocoder.mall.payservice.rpc.transaction; import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionCreateReqDTO; +import cn.iocoder.mall.payservice.rpc.transaction.dto.*; import cn.iocoder.mall.payservice.service.transaction.PayTransactionService; import org.apache.dubbo.config.annotation.DubboService; import org.springframework.beans.factory.annotation.Autowired; @@ -19,4 +19,14 @@ public class PayTransactionRpcImpl implements PayTransactionRpc { return success(payTransactionService.createPayTransaction(createReqDTO)); } + @Override + public CommonResult submitPayTransaction(PayTransactionSubmitReqDTO submitReqDTO) { + return success(payTransactionService.submitPayTransaction(submitReqDTO)); + } + + @Override + public CommonResult getPayTransaction(PayTransactionGetReqDTO getReqDTO) { + return success(payTransactionService.getPayTransaction(getReqDTO)); + } + } diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/PayTransactionService.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/PayTransactionService.java index 72f5946ca..8df1b7dc9 100644 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/PayTransactionService.java +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/PayTransactionService.java @@ -1,6 +1,6 @@ package cn.iocoder.mall.payservice.service.transaction; -import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionCreateReqDTO; +import cn.iocoder.mall.payservice.rpc.transaction.dto.*; /** * 支付交易单 Service 接口 @@ -15,4 +15,20 @@ public interface PayTransactionService { */ Integer createPayTransaction(PayTransactionCreateReqDTO createReqDTO); + /** + * 提交支付交易单 + * + * @param submitReqDTO 提交信息 + * @return 提交响应,包含三方支付的响应 + */ + PayTransactionSubmitRespDTO submitPayTransaction(PayTransactionSubmitReqDTO submitReqDTO); + + /** + * 获得当支付交易单 + * + * @param getReqDTO 获得条件 + * @return 支付交易单 + */ + PayTransactionRespDTO getPayTransaction(PayTransactionGetReqDTO getReqDTO); + } diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/impl/PayTransactionServiceImpl.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/impl/PayTransactionServiceImpl.java index ed1009029..722c4cb0e 100644 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/impl/PayTransactionServiceImpl.java +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/impl/PayTransactionServiceImpl.java @@ -1,11 +1,19 @@ package cn.iocoder.mall.payservice.service.transaction.impl; +import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil; +import cn.iocoder.common.framework.util.DateUtil; +import cn.iocoder.common.framework.util.MathUtil; +import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.payservice.client.thirdpay.AbstractThirdPayClient; +import cn.iocoder.mall.payservice.client.thirdpay.ThirdPayClientFactory; import cn.iocoder.mall.payservice.convert.transaction.PayTransactionConvert; import cn.iocoder.mall.payservice.dal.mysql.dataobject.transaction.PayTransactionDO; +import cn.iocoder.mall.payservice.dal.mysql.dataobject.transaction.PayTransactionExtensionDO; +import cn.iocoder.mall.payservice.dal.mysql.mapper.transaction.PayTransactionExtensionMapper; import cn.iocoder.mall.payservice.dal.mysql.mapper.transaction.PayTransactionMapper; import cn.iocoder.mall.payservice.enums.transaction.PayTransactionStatusEnum; import cn.iocoder.mall.payservice.rpc.app.dto.PayAppRespDTO; -import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionCreateReqDTO; +import cn.iocoder.mall.payservice.rpc.transaction.dto.*; import cn.iocoder.mall.payservice.service.app.PayAppService; import cn.iocoder.mall.payservice.service.transaction.PayTransactionService; import lombok.extern.slf4j.Slf4j; @@ -13,6 +21,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.Date; + +import static cn.iocoder.mall.payservice.enums.PayErrorCodeConstants.PAY_TRANSACTION_NOT_FOUND; +import static cn.iocoder.mall.payservice.enums.PayErrorCodeConstants.PAY_TRANSACTION_STATUS_IS_NOT_WAITING; + /** * 支付交易单 Service 实现类 */ @@ -23,6 +36,8 @@ public class PayTransactionServiceImpl implements PayTransactionService { @Autowired private PayTransactionMapper payTransactionMapper; + @Autowired + private PayTransactionExtensionMapper payTransactionExtensionMapper; @Autowired private PayAppService payAppService; @@ -50,4 +65,60 @@ public class PayTransactionServiceImpl implements PayTransactionService { return payTransaction.getId(); } + @Override + public PayTransactionSubmitRespDTO submitPayTransaction(PayTransactionSubmitReqDTO submitReqDTO) { + // TODO 校验支付渠道是否有效 + // 校验 App 是否有效 + payAppService.validPayApp(submitReqDTO.getAppId()); + + // 获得 PayTransactionDO ,并校验其是否存在 + PayTransactionDO payTransaction = payTransactionMapper.selectByAppIdAndOrderId( + submitReqDTO.getAppId(), submitReqDTO.getOrderId()); + if (payTransaction == null) { // 是否存在 + throw ServiceExceptionUtil.exception(PAY_TRANSACTION_NOT_FOUND); + } + if (!PayTransactionStatusEnum.WAITING.getValue().equals(payTransaction.getStatus())) { // 校验状态,必须是待支付 + throw ServiceExceptionUtil.exception(PAY_TRANSACTION_STATUS_IS_NOT_WAITING); + } + + // 插入 PayTransactionExtensionDO + PayTransactionExtensionDO payTransactionExtensionDO = PayTransactionConvert.INSTANCE.convert(submitReqDTO) + .setTransactionId(payTransaction.getId()).setTransactionCode(generateTransactionCode()) + .setStatus(PayTransactionStatusEnum.WAITING.getValue()); + payTransactionExtensionMapper.insert(payTransactionExtensionDO); + + // 调用三方接口 + AbstractThirdPayClient thirdPayClient = ThirdPayClientFactory.getThirdPayClient(submitReqDTO.getPayChannel()); + CommonResult invokeResult = thirdPayClient.submitTransaction(payTransaction, payTransactionExtensionDO, null); // TODO 暂时传入 extra = null + invokeResult.checkError(); + + // TODO 轮询三方接口,是否已经支付的任务 + // 返回成功 + return new PayTransactionSubmitRespDTO().setId(payTransactionExtensionDO.getId()).setInvokeResponse(invokeResult.getData()); + } + + @Override + public PayTransactionRespDTO getPayTransaction(PayTransactionGetReqDTO getReqDTO) { + return PayTransactionConvert.INSTANCE.convert(payTransactionMapper.selectByAppIdAndOrderId( + getReqDTO.getAppId(), getReqDTO.getOrderId())); + } + + private String generateTransactionCode() { +// wx +// 2014 +// 10 +// 27 +// 20 +// 09 +// 39 +// 5522657 +// a690389285100 + // 目前的算法 + // 时间序列,年月日时分秒 14 位 + // 纯随机,6 位 TODO 此处估计是会有问题的,后续在调整 + return DateUtil.format(new Date(), "yyyyMMddHHmmss") + // 时间序列 + MathUtil.random(100000, 999999) // 随机。为什么是这个范围,因为偷懒 + ; + } + } diff --git a/pay-service-project/pay-service-integration-test/pom.xml b/pay-service-project/pay-service-integration-test/pom.xml new file mode 100644 index 000000000..d76113f48 --- /dev/null +++ b/pay-service-project/pay-service-integration-test/pom.xml @@ -0,0 +1,29 @@ + + + + pay-service-project + cn.iocoder.mall + 1.0-SNAPSHOT + + 4.0.0 + + pay-service-integration-test + + + + cn.iocoder.mall + pay-service-app + 1.0-SNAPSHOT + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + diff --git a/pay-service-project/pay-service-integration-test/src/test/java/cn/iocoder/mall/payservice/service/transaction/impl/PayTransactionServiceImplTest.java b/pay-service-project/pay-service-integration-test/src/test/java/cn/iocoder/mall/payservice/service/transaction/impl/PayTransactionServiceImplTest.java new file mode 100644 index 000000000..0ec6f4167 --- /dev/null +++ b/pay-service-project/pay-service-integration-test/src/test/java/cn/iocoder/mall/payservice/service/transaction/impl/PayTransactionServiceImplTest.java @@ -0,0 +1,27 @@ +package cn.iocoder.mall.payservice.service.transaction.impl; + +import cn.iocoder.mall.payservice.enums.PayChannelEnum; +import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionSubmitReqDTO; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class PayTransactionServiceImplTest { + + @Autowired + private PayTransactionServiceImpl payTransactionService; + + @Test + public void testSubmitPayTransaction() { + payTransactionService.submitPayTransaction(new PayTransactionSubmitReqDTO() + .setAppId("POd4RC6a") + .setCreateIp("127.0.0.1") + .setOrderId("239") + .setPayChannel(PayChannelEnum.PINGXX.getId())); + } + +} diff --git a/pay-service-project/pay-service-integration-test/src/test/java/cn/iocoder/mall/payservice/service/transaction/package-info.java b/pay-service-project/pay-service-integration-test/src/test/java/cn/iocoder/mall/payservice/service/transaction/package-info.java new file mode 100644 index 000000000..c80ad27ff --- /dev/null +++ b/pay-service-project/pay-service-integration-test/src/test/java/cn/iocoder/mall/payservice/service/transaction/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.mall.payservice.service.transaction; diff --git a/pay-service-project/pom.xml b/pay-service-project/pom.xml index 801f60be8..3c5450e59 100644 --- a/pay-service-project/pom.xml +++ b/pay-service-project/pom.xml @@ -15,6 +15,7 @@ pay-service-api pay-service-app + pay-service-integration-test diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/PayRefundService.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/PayRefundService.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/PayRefundService.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/PayRefundService.java diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/PayTransactionService.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/PayTransactionService.java similarity index 88% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/PayTransactionService.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/PayTransactionService.java index 5422f4221..22e9b5f23 100644 --- a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/PayTransactionService.java +++ b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/PayTransactionService.java @@ -14,10 +14,6 @@ import java.util.List; public interface PayTransactionService { - PayTransactionBO getTransaction(PayTransactionGetDTO payTransactionGetDTO); - - PayTransactionSubmitBO submitTransaction(PayTransactionSubmitDTO payTransactionSubmitDTO); - /** * 更新交易支付成功 * diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundBO.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundBO.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundBO.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundBO.java diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundPageBO.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundPageBO.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundPageBO.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundPageBO.java diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundSubmitBO.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundSubmitBO.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundSubmitBO.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/bo/refund/PayRefundSubmitBO.java diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/transaction/PayTransactionBO.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/bo/transaction/PayTransactionBO.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/transaction/PayTransactionBO.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/bo/transaction/PayTransactionBO.java diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/transaction/PayTransactionPageBO.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/bo/transaction/PayTransactionPageBO.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/bo/transaction/PayTransactionPageBO.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/bo/transaction/PayTransactionPageBO.java diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayNotifyType.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/constant/PayNotifyType.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayNotifyType.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/constant/PayNotifyType.java diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayRefundStatus.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/constant/PayRefundStatus.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayRefundStatus.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/constant/PayRefundStatus.java diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayTransactionNotifyStatusEnum.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/constant/PayTransactionNotifyStatusEnum.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayTransactionNotifyStatusEnum.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/constant/PayTransactionNotifyStatusEnum.java diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/dto/refund/PayRefundPageDTO.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/dto/refund/PayRefundPageDTO.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/dto/refund/PayRefundPageDTO.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/dto/refund/PayRefundPageDTO.java diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/dto/refund/PayRefundSubmitDTO.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/dto/refund/PayRefundSubmitDTO.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/dto/refund/PayRefundSubmitDTO.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/dto/refund/PayRefundSubmitDTO.java diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/dto/transaction/PayTransactionPageDTO.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/dto/transaction/PayTransactionPageDTO.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/dto/transaction/PayTransactionPageDTO.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/dto/transaction/PayTransactionPageDTO.java diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/message/AbstractPayNotifySuccessMessage.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/message/AbstractPayNotifySuccessMessage.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/message/AbstractPayNotifySuccessMessage.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/message/AbstractPayNotifySuccessMessage.java diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/message/PayRefundSuccessMessage.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/message/PayRefundSuccessMessage.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/message/PayRefundSuccessMessage.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/message/PayRefundSuccessMessage.java diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/message/PayTransactionSuccessMessage.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/message/PayTransactionSuccessMessage.java similarity index 100% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/message/PayTransactionSuccessMessage.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/api/message/PayTransactionSuccessMessage.java diff --git a/pay/pay-application/src/main/java/cn/iocoder/mall/pay/application/controller/users/UsersPayTransactionController.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/application/controller/users/UsersPayTransactionController.java deleted file mode 100644 index eff2c35e3..000000000 --- a/pay/pay-application/src/main/java/cn/iocoder/mall/pay/application/controller/users/UsersPayTransactionController.java +++ /dev/null @@ -1,72 +0,0 @@ -package cn.iocoder.mall.pay.application.controller.users; - -import cn.iocoder.common.framework.util.HttpUtil; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.pay.api.PayTransactionService; -import cn.iocoder.mall.pay.api.bo.transaction.PayTransactionBO; -import cn.iocoder.mall.pay.api.bo.transaction.PayTransactionSubmitBO; -import cn.iocoder.mall.pay.api.constant.PayChannelEnum; -import cn.iocoder.mall.pay.api.dto.transaction.PayTransactionGetDTO; -import cn.iocoder.mall.pay.api.dto.transaction.PayTransactionSubmitDTO; -import cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.apache.dubbo.config.annotation.Reference; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletRequest; -import java.io.BufferedReader; -import java.io.IOException; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -@RestController -@RequestMapping("users/transaction") -@Api("【用户】支付交易 API") -public class UsersPayTransactionController { - - private Logger logger = LoggerFactory.getLogger(getClass()); - - @Reference(validation = "true", version = "${dubbo.provider.PayTransactionService.version}") - private PayTransactionService payTransactionService; - - @GetMapping("/get") - @ApiOperation("获得支付交易") - public CommonResult get(PayTransactionGetDTO payTransactionGetDTO) { - payTransactionGetDTO.setUserId(UserSecurityContextHolder.getContext().getUserId()); - return success(payTransactionService.getTransaction(payTransactionGetDTO)); - } - - @PostMapping("/submit") - @ApiOperation("提交支付交易") - public CommonResult submit(HttpServletRequest request, - PayTransactionSubmitDTO payTransactionSubmitDTO) { - payTransactionSubmitDTO.setCreateIp(HttpUtil.getIp(request)); - // 提交支付提交 - return success(payTransactionService.submitTransaction(payTransactionSubmitDTO)); - } - - @PostMapping(value = "pingxx_pay_success", consumes = MediaType.APPLICATION_JSON_VALUE) -// @GetMapping(value = "pingxx_pay_success") - public String pingxxPaySuccess(HttpServletRequest request) throws IOException { - logger.info("[pingxxPaySuccess][被回调]"); - // 读取 webhook - StringBuilder sb = new StringBuilder(); - try (BufferedReader reader = request.getReader()) { - String line; - while ((line = reader.readLine()) != null) { - sb.append(line); - } - } - -// JSONObject bodyObj = JSON.parseObject(sb.toString()); -// bodyObj.put("webhookId", bodyObj.remove("id")); -// String body = bodyObj.toString(); - payTransactionService.updateTransactionPaySuccess(PayChannelEnum.PINGXX.getId(), sb.toString()); - return "success"; - } - -} diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/component/DubboReferencePool.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/component/DubboReferencePool.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/component/DubboReferencePool.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/component/DubboReferencePool.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/config/XxlJobConfiguration.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/config/XxlJobConfiguration.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/config/XxlJobConfiguration.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/config/XxlJobConfiguration.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/convert/PayNotifyConvert.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/convert/PayNotifyConvert.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/convert/PayNotifyConvert.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/convert/PayNotifyConvert.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/convert/PayRefundConvert.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/convert/PayRefundConvert.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/convert/PayRefundConvert.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/convert/PayRefundConvert.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dao/PayNotifyLogMapper.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/dao/PayNotifyLogMapper.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dao/PayNotifyLogMapper.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/dao/PayNotifyLogMapper.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dao/PayNotifyTaskMapper.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/dao/PayNotifyTaskMapper.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dao/PayNotifyTaskMapper.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/dao/PayNotifyTaskMapper.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dao/PayRefundMapper.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/dao/PayRefundMapper.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dao/PayRefundMapper.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/dao/PayRefundMapper.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dao/PayTransactionMapper.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/dao/PayTransactionMapper.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dao/PayTransactionMapper.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/dao/PayTransactionMapper.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayLogDO.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayLogDO.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayLogDO.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayLogDO.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayNotifyLogDO.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayNotifyLogDO.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayNotifyLogDO.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayNotifyLogDO.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayNotifyTaskDO.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayNotifyTaskDO.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayNotifyTaskDO.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/dataobject/PayNotifyTaskDO.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/job/PayNotifyJob.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/job/PayNotifyJob.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/job/PayNotifyJob.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/job/PayNotifyJob.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/mq/AbstractPayNotifySuccessConsumer.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/mq/AbstractPayNotifySuccessConsumer.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/mq/AbstractPayNotifySuccessConsumer.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/mq/AbstractPayNotifySuccessConsumer.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/mq/PayRefundSuccessConsumer.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/mq/PayRefundSuccessConsumer.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/mq/PayRefundSuccessConsumer.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/mq/PayRefundSuccessConsumer.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/mq/PayTransactionSuccessConsumer.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/mq/PayTransactionSuccessConsumer.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/mq/PayTransactionSuccessConsumer.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/mq/PayTransactionSuccessConsumer.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/service/PayNotifyServiceImpl.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/service/PayNotifyServiceImpl.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/service/PayNotifyServiceImpl.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/service/PayNotifyServiceImpl.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/service/PayRefundServiceImpl.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/service/PayRefundServiceImpl.java similarity index 100% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/service/PayRefundServiceImpl.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/service/PayRefundServiceImpl.java diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/service/PayTransactionServiceImpl.java b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/service/PayTransactionServiceImpl.java similarity index 78% rename from pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/service/PayTransactionServiceImpl.java rename to pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/service/PayTransactionServiceImpl.java index 922f9c286..610dbcb51 100644 --- a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/service/PayTransactionServiceImpl.java +++ b/pay/pay-application/src/main/java/cn/iocoder/mall/pay/biz/service/PayTransactionServiceImpl.java @@ -79,39 +79,6 @@ public class PayTransactionServiceImpl implements PayTransactionService { return PayTransactionConvert.INSTANCE.convert(payTransaction); } - @Override - @SuppressWarnings("Duplicates") - public PayTransactionSubmitBO submitTransaction(PayTransactionSubmitDTO payTransactionSubmitDTO) { - // TODO 校验支付渠道是否有效 - // 校验 App 是否有效 - payAppService.validPayApp(payTransactionSubmitDTO.getAppId()); - // 获得 PayTransactionDO ,并校验其是否存在 - PayTransactionDO payTransaction = payTransactionMapper.selectByAppIdAndOrderId( - payTransactionSubmitDTO.getAppId(), payTransactionSubmitDTO.getOrderId()); - if (payTransaction == null) { // 是否存在 - throw ServiceExceptionUtil.exception(PayErrorCodeEnum.PAY_TRANSACTION_NOT_FOUND.getCode()); - } - if (!PayTransactionStatusEnum.WAITING.getValue().equals(payTransaction.getStatus())) { // 校验状态,必须是待支付 - throw ServiceExceptionUtil.exception(PayErrorCodeEnum.PAY_TRANSACTION_STATUS_IS_NOT_WAITING.getCode()); - } - // 插入 PayTransactionExtensionDO - PayTransactionExtensionDO payTransactionExtensionDO = PayTransactionConvert.INSTANCE.convert(payTransactionSubmitDTO) - .setTransactionId(payTransaction.getId()) - .setTransactionCode(generateTransactionCode()) - .setStatus(PayTransactionStatusEnum.WAITING.getValue()); - payTransactionExtensionMapper.insert(payTransactionExtensionDO); - // 调用三方接口 - AbstractPaySDK paySDK = PaySDKFactory.getSDK(payTransactionSubmitDTO.getPayChannel()); - CommonResult invokeResult = paySDK.submitTransaction(payTransaction, payTransactionExtensionDO, null); // TODO 暂时传入 extra = null - if (invokeResult.isError()) { - throw ServiceExceptionUtil.exception(invokeResult.getCode(), invokeResult.getMessage()); - } - // TODO 轮询三方接口,是否已经支付的任务 - // 返回成功 - return new PayTransactionSubmitBO().setId(payTransactionExtensionDO.getId()) - .setInvokeResponse(invokeResult.getData()); - } - @Override @Transactional public Boolean updateTransactionPaySuccess(Integer payChannel, String params) { @@ -199,23 +166,7 @@ public class PayTransactionServiceImpl implements PayTransactionService { return null; } - private String generateTransactionCode() { -// wx -// 2014 -// 10 -// 27 -// 20 -// 09 -// 39 -// 5522657 -// a690389285100 - // 目前的算法 - // 时间序列,年月日时分秒 14 位 - // 纯随机,6 位 TODO 此处估计是会有问题的,后续在调整 - return DateUtil.format(new Date(), "yyyyMMddHHmmss") + // 时间序列 - MathUtil.random(100000, 999999) // 随机。为什么是这个范围,因为偷懒 - ; - } + } diff --git a/pay/pay-service-impl/src/main/resources/config/application-test.yaml b/pay/pay-application/src/main/resources/config/application-test.yaml similarity index 100% rename from pay/pay-service-impl/src/main/resources/config/application-test.yaml rename to pay/pay-application/src/main/resources/config/application-test.yaml diff --git a/pay/pay-service-impl/src/main/resources/mapper/PayNotifyLogMapper.xml b/pay/pay-application/src/main/resources/mapper/PayNotifyLogMapper.xml similarity index 100% rename from pay/pay-service-impl/src/main/resources/mapper/PayNotifyLogMapper.xml rename to pay/pay-application/src/main/resources/mapper/PayNotifyLogMapper.xml diff --git a/pay/pay-service-impl/src/main/resources/mapper/PayNotifyTaskMapper.xml b/pay/pay-application/src/main/resources/mapper/PayNotifyTaskMapper.xml similarity index 100% rename from pay/pay-service-impl/src/main/resources/mapper/PayNotifyTaskMapper.xml rename to pay/pay-application/src/main/resources/mapper/PayNotifyTaskMapper.xml diff --git a/pay/pay-service-impl/src/main/resources/mapper/PayRefundMapper.xml b/pay/pay-application/src/main/resources/mapper/PayRefundMapper.xml similarity index 100% rename from pay/pay-service-impl/src/main/resources/mapper/PayRefundMapper.xml rename to pay/pay-application/src/main/resources/mapper/PayRefundMapper.xml diff --git a/pay/pay-service-impl/src/main/resources/mapper/PayTransactionExtensionMapper.xml b/pay/pay-application/src/main/resources/mapper/PayTransactionExtensionMapper.xml similarity index 100% rename from pay/pay-service-impl/src/main/resources/mapper/PayTransactionExtensionMapper.xml rename to pay/pay-application/src/main/resources/mapper/PayTransactionExtensionMapper.xml diff --git a/pay/pay-service-impl/src/main/resources/mapper/PayTransactionMapper.xml b/pay/pay-application/src/main/resources/mapper/PayTransactionMapper.xml similarity index 78% rename from pay/pay-service-impl/src/main/resources/mapper/PayTransactionMapper.xml rename to pay/pay-application/src/main/resources/mapper/PayTransactionMapper.xml index 0ed1bf802..a46325ab8 100644 --- a/pay/pay-service-impl/src/main/resources/mapper/PayTransactionMapper.xml +++ b/pay/pay-application/src/main/resources/mapper/PayTransactionMapper.xml @@ -9,20 +9,6 @@ notify_time, trade_no, refund_total, create_time - - INSERT INTO transaction ( - app_id, create_ip, order_id, order_subject, - order_description, order_memo, price, status, expire_time, - finish_time, notify_url, extension_id, pay_channel, payment_time, - notify_time, trade_no, create_time - ) VALUES ( - #{appId}, #{createIp}, #{orderId}, #{orderSubject}, - #{orderDescription}, #{orderMemo}, #{price}, #{status}, #{expireTime}, - #{finishTime}, #{notifyUrl}, #{extensionId}, #{payChannel}, #{paymentTime}, - #{notifyTime}, #{tradeNo}, #{createTime} - ) - - UPDATE transaction @@ -68,23 +54,6 @@ AND order_id = #{orderId} - - - -