Commit b757e1fccb31add36ca4718c8f9f332e6cd0a822

Authored by YunaiV
1 parent e7e3b187

多模块重构 7:pay 模块的初始化

Showing 160 changed files with 1290 additions and 1701 deletions
@@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
18 <module>yudao-module-system</module> 18 <module>yudao-module-system</module>
19 <module>yudao-module-infra</module> 19 <module>yudao-module-infra</module>
20 <module>yudao-module-tool</module> 20 <module>yudao-module-tool</module>
  21 + <module>yudao-module-pay</module>
21 </modules> 22 </modules>
22 23
23 <name>${artifactId}</name> 24 <name>${artifactId}</name>
yudao-admin-server/pom.xml
@@ -37,6 +37,11 @@ @@ -37,6 +37,11 @@
37 <artifactId>yudao-module-infra-impl</artifactId> 37 <artifactId>yudao-module-infra-impl</artifactId>
38 <version>${revision}</version> 38 <version>${revision}</version>
39 </dependency> 39 </dependency>
  40 + <dependency>
  41 + <groupId>cn.iocoder.boot</groupId>
  42 + <artifactId>yudao-module-pay-impl</artifactId>
  43 + <version>${revision}</version>
  44 + </dependency>
40 45
41 <!-- 业务组件 --> 46 <!-- 业务组件 -->
42 <dependency> 47 <dependency>
@@ -71,11 +76,7 @@ @@ -71,11 +76,7 @@
71 <!-- <groupId>cn.iocoder.boot</groupId>--> 76 <!-- <groupId>cn.iocoder.boot</groupId>-->
72 <!-- <artifactId>yudao-module-bpm-core-service-impl</artifactId>--> 77 <!-- <artifactId>yudao-module-bpm-core-service-impl</artifactId>-->
73 <!-- </dependency>--> 78 <!-- </dependency>-->
74 - <!-- Web 相关 -->  
75 - <dependency>  
76 - <groupId>cn.iocoder.boot</groupId>  
77 - <artifactId>yudao-spring-boot-starter-web</artifactId>  
78 - </dependency> 79 +
79 <!-- spring boot 配置所需依赖 --> 80 <!-- spring boot 配置所需依赖 -->
80 <dependency> 81 <dependency>
81 <groupId>org.springframework.boot</groupId> 82 <groupId>org.springframework.boot</groupId>
@@ -83,34 +84,6 @@ @@ -83,34 +84,6 @@
83 <optional>true</optional> 84 <optional>true</optional>
84 </dependency> 85 </dependency>
85 86
86 - <dependency>  
87 - <groupId>cn.iocoder.boot</groupId>  
88 - <artifactId>yudao-spring-boot-starter-security</artifactId>  
89 - </dependency>  
90 -  
91 - <!-- DB 相关 -->  
92 - <dependency>  
93 - <groupId>cn.iocoder.boot</groupId>  
94 - <artifactId>yudao-spring-boot-starter-mybatis</artifactId>  
95 - </dependency>  
96 -  
97 - <dependency>  
98 - <groupId>cn.iocoder.boot</groupId>  
99 - <artifactId>yudao-spring-boot-starter-redis</artifactId>  
100 - </dependency>  
101 -  
102 - <!-- Job 定时任务相关 -->  
103 - <dependency>  
104 - <groupId>cn.iocoder.boot</groupId>  
105 - <artifactId>yudao-spring-boot-starter-job</artifactId>  
106 - </dependency>  
107 -  
108 - <!-- 消息队列相关 -->  
109 - <dependency>  
110 - <groupId>cn.iocoder.boot</groupId>  
111 - <artifactId>yudao-spring-boot-starter-mq</artifactId>  
112 - </dependency>  
113 -  
114 <!-- 服务保障相关 --> 87 <!-- 服务保障相关 -->
115 <dependency> 88 <dependency>
116 <groupId>cn.iocoder.boot</groupId> 89 <groupId>cn.iocoder.boot</groupId>
@@ -128,24 +101,6 @@ @@ -128,24 +101,6 @@
128 <artifactId>spring-boot-admin-starter-server</artifactId> <!-- 实现 Spring Boot Admin Server 服务端 --> 101 <artifactId>spring-boot-admin-starter-server</artifactId> <!-- 实现 Spring Boot Admin Server 服务端 -->
129 </dependency> 102 </dependency>
130 103
131 - <!-- Test 测试相关 -->  
132 - <dependency>  
133 - <groupId>cn.iocoder.boot</groupId>  
134 - <artifactId>yudao-spring-boot-starter-test</artifactId>  
135 - <scope>test</scope>  
136 - </dependency>  
137 -  
138 - <!-- 工具类相关 -->  
139 - <dependency>  
140 - <groupId>cn.iocoder.boot</groupId>  
141 - <artifactId>yudao-spring-boot-starter-excel</artifactId>  
142 - </dependency>  
143 -  
144 - <dependency>  
145 - <groupId>org.apache.velocity</groupId>  
146 - <artifactId>velocity-engine-core</artifactId>  
147 - </dependency>  
148 -  
149 <!-- 三方云服务相关 --> 104 <!-- 三方云服务相关 -->
150 105
151 <dependency> 106 <dependency>
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayOrderExtensionMapper.java deleted
1 -package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order;  
2 -  
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;  
4 -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;  
5 -import org.apache.ibatis.annotations.Mapper;  
6 -  
7 -/**  
8 - * 支付订单 Mapper  
9 - *  
10 - * @author aquan  
11 - */  
12 -@Mapper  
13 -public interface PayOrderExtensionMapper extends BaseMapperX<PayOrderExtensionDO> {  
14 -  
15 -  
16 -}  
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/enums/PayErrorCodeConstants.java deleted
1 -package cn.iocoder.yudao.adminserver.modules.pay.enums;  
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/package-info.java deleted
1 -package cn.iocoder.yudao.adminserver.modules.pay.job;  
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/package-info.java deleted
1 -/**  
2 - * pay 包下,我们放支付业务,提供业务的支付能力。  
3 - * 例如说:商户、应用、支付、退款等等  
4 - *  
5 - * 缩写:pay  
6 - */  
7 -package cn.iocoder.yudao.adminserver.modules.pay;  
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayOrderServiceImpl.java deleted
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.order.impl;  
2 -  
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO;  
5 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderMapper;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderService;  
7 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;  
8 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
9 -import org.springframework.stereotype.Service;  
10 -import org.springframework.validation.annotation.Validated;  
11 -  
12 -import javax.annotation.Resource;  
13 -import java.util.Collection;  
14 -import java.util.List;  
15 -  
16 -/**  
17 - * 支付订单 Service 实现类  
18 - *  
19 - * @author aquan  
20 - */  
21 -@Service  
22 -@Validated  
23 -public class PayOrderServiceImpl implements PayOrderService {  
24 -  
25 - @Resource  
26 - private PayOrderMapper orderMapper;  
27 -  
28 - @Override  
29 - public PayOrderDO getOrder(Long id) {  
30 - return orderMapper.selectById(id);  
31 - }  
32 -  
33 - @Override  
34 - public PageResult<PayOrderDO> getOrderPage(PayOrderPageReqVO pageReqVO) {  
35 - return orderMapper.selectPage(pageReqVO);  
36 - }  
37 -  
38 - @Override  
39 - public List<PayOrderDO> getOrderList(PayOrderExportReqVO exportReqVO) {  
40 - return orderMapper.selectList(exportReqVO);  
41 - }  
42 -  
43 - /**  
44 - * 根据 ID 集合获取只包含商品名称的订单集合  
45 - *  
46 - * @param idList 订单 ID 集合  
47 - * @return 只包含商品名称的订单集合  
48 - */  
49 - @Override  
50 - public List<PayOrderDO> getOrderSubjectList(Collection<Long> idList) {  
51 - return orderMapper.findByIdListQueryOrderSubject(idList);  
52 - }  
53 -  
54 -}  
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayRefundServiceImpl.java deleted
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.order.impl;  
2 -  
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO;  
5 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayRefundMapper;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayRefundService;  
7 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;  
8 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
9 -import org.springframework.stereotype.Service;  
10 -import org.springframework.validation.annotation.Validated;  
11 -  
12 -import javax.annotation.Resource;  
13 -import java.util.List;  
14 -  
15 -/**  
16 - * 退款订单 Service 实现类  
17 - *  
18 - * @author aquan  
19 - */  
20 -@Service  
21 -@Validated  
22 -public class PayRefundServiceImpl implements PayRefundService {  
23 -  
24 - @Resource  
25 - private PayRefundMapper refundMapper;  
26 -  
27 - @Override  
28 - public PayRefundDO getRefund(Long id) {  
29 - return refundMapper.selectById(id);  
30 - }  
31 -  
32 - @Override  
33 - public PageResult<PayRefundDO> getRefundPage(PayRefundPageReqVO pageReqVO) {  
34 - return refundMapper.selectPage(pageReqVO);  
35 - }  
36 -  
37 - @Override  
38 - public List<PayRefundDO> getRefundList(PayRefundExportReqVO exportReqVO) {  
39 - return refundMapper.selectList(exportReqVO);  
40 - }  
41 -  
42 -}  
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/PayChannelConfig.java deleted
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.channel;  
2 -  
3 -import org.springframework.context.annotation.Bean;  
4 -import org.springframework.context.annotation.Configuration;  
5 -  
6 -import javax.validation.Validation;  
7 -import javax.validation.Validator;  
8 -  
9 -/**  
10 - * 用于初始化 validator Bean 对象  
11 - * @author aquan  
12 - */  
13 -@Configuration  
14 -public class PayChannelConfig {  
15 -  
16 - @Bean  
17 - public Validator validator(){  
18 - return Validation.buildDefaultValidatorFactory().getValidator();  
19 - }  
20 -}  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/order/PayOrderCoreConvert.java deleted
1 -package cn.iocoder.yudao.coreservice.modules.pay.convert.order;  
2 -  
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderCreateReqDTO;  
6 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitReqDTO;  
7 -import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;  
8 -import org.mapstruct.Mapper;  
9 -import org.mapstruct.factory.Mappers;  
10 -  
11 -@Mapper  
12 -public interface PayOrderCoreConvert {  
13 -  
14 - PayOrderCoreConvert INSTANCE = Mappers.getMapper(PayOrderCoreConvert.class);  
15 -  
16 - PayOrderDO convert(PayOrderCreateReqDTO bean);  
17 -  
18 - PayOrderExtensionDO convert(PayOrderSubmitReqDTO bean);  
19 -  
20 - PayOrderUnifiedReqDTO convert2(PayOrderSubmitReqDTO bean);  
21 -  
22 -}  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/order/PayRefundCoreConvert.java deleted
1 -package cn.iocoder.yudao.coreservice.modules.pay.convert.order;  
2 -  
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;  
5 -import org.mapstruct.Mapper;  
6 -import org.mapstruct.Mapping;  
7 -import org.mapstruct.Mappings;  
8 -import org.mapstruct.factory.Mappers;  
9 -  
10 -@Mapper  
11 -public interface PayRefundCoreConvert {  
12 -  
13 - PayRefundCoreConvert INSTANCE = Mappers.getMapper(PayRefundCoreConvert.class);  
14 -  
15 - //TODO 太多需要处理了, 暂时不用  
16 - @Mappings(value = {  
17 - @Mapping(source = "amount", target = "payAmount"),  
18 - @Mapping(source = "id", target = "orderId"),  
19 - @Mapping(target = "status",ignore = true)  
20 - })  
21 - PayRefundDO convert(PayOrderDO orderDO);  
22 -  
23 -}  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/package-info.java deleted
1 -/**  
2 - * 提供 POJO 类的实体转换  
3 - *  
4 - * 目前使用 MapStruct 框架  
5 - */  
6 -package cn.iocoder.yudao.coreservice.modules.pay.convert;  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md deleted
1 -<http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao>  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayAppCoreMapper.java deleted
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant;  
2 -  
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;  
4 -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;  
5 -import org.apache.ibatis.annotations.Mapper;  
6 -  
7 -@Mapper  
8 -public interface PayAppCoreMapper extends BaseMapperX<PayAppDO> {  
9 -}  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapper.java deleted
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant;  
2 -  
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;  
4 -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;  
5 -import org.apache.ibatis.annotations.Mapper;  
6 -import org.apache.ibatis.annotations.Select;  
7 -  
8 -import java.util.Date;  
9 -  
10 -@Mapper  
11 -public interface PayChannelCoreMapper extends BaseMapperX<PayChannelDO> {  
12 -  
13 - default PayChannelDO selectByAppIdAndCode(Long appId, String code) {  
14 - return selectOne(PayChannelDO::getAppId, appId, PayChannelDO::getCode, code);  
15 - }  
16 -  
17 - @Select("SELECT id FROM pay_channel WHERE update_time > #{maxUpdateTime} LIMIT 1")  
18 - Long selectExistsByUpdateTimeAfter(Date maxUpdateTime);  
19 -  
20 -}  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderCoreMapper.java deleted
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order;  
2 -  
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;  
5 -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;  
6 -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;  
7 -import org.apache.ibatis.annotations.Mapper;  
8 -  
9 -@Mapper  
10 -public interface PayOrderCoreMapper extends BaseMapperX<PayOrderDO> {  
11 -  
12 - default PayOrderDO selectByAppIdAndMerchantOrderId(Long appId, String merchantOrderId) {  
13 - return selectOne(new QueryWrapper<PayOrderDO>().eq("app_id", appId)  
14 - .eq("merchant_order_id", merchantOrderId));  
15 - }  
16 -  
17 - default int updateByIdAndStatus(Long id, Integer status, PayOrderDO update) {  
18 - return update(update, new QueryWrapper<PayOrderDO>()  
19 - .eq("id", id).eq("status", status));  
20 - }  
21 -  
22 -}  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayRefundCoreMapper.java deleted
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order;  
2 -  
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;  
4 -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;  
5 -import org.apache.ibatis.annotations.Mapper;  
6 -  
7 -  
8 -/**  
9 - * 退款订单 Mapper  
10 - *  
11 - */  
12 -@Mapper  
13 -public interface PayRefundCoreMapper extends BaseMapperX<PayRefundDO> {  
14 -  
15 - default PayRefundDO selectByReqNo(String reqNo) {  
16 - return selectOne("req_no", reqNo);  
17 - }  
18 -  
19 - default PayRefundDO selectByTradeNoAndMerchantRefundNo(String tradeNo, String merchantRefundNo){  
20 - return selectOne("trade_no", tradeNo, "merchant_refund_no", merchantRefundNo);  
21 - }  
22 -  
23 -}  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/package-info.java deleted
1 -/**  
2 - * pay 包下,我们放支付业务,提供业务的支付能力。  
3 - * 例如说:商户、应用、支付、退款等等  
4 - *  
5 - * 缩写:pay  
6 - */  
7 -package cn.iocoder.yudao.coreservice.modules.pay;  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayAppCoreService.java deleted
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.merchant;  
2 -  
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;  
4 -import cn.iocoder.yudao.framework.common.exception.ServiceException;  
5 -  
6 -/**  
7 - * 支付应用 Core Service 接口  
8 - *  
9 - * @author 芋道源码  
10 - */  
11 -public interface PayAppCoreService {  
12 -  
13 - /**  
14 - * 支付应用的合法性  
15 - *  
16 - * 如果不合法,抛出 {@link ServiceException} 业务异常  
17 - *  
18 - * @param id 应用编号  
19 - * @return 应用信息  
20 - */  
21 - PayAppDO validPayApp(Long id);  
22 -  
23 -}  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayChannelCoreService.java deleted
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.merchant;  
2 -  
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;  
4 -import cn.iocoder.yudao.framework.common.exception.ServiceException;  
5 -  
6 -/**  
7 - * 支付渠道 Core Service 接口  
8 - *  
9 - * @author 芋道源码  
10 - */  
11 -public interface PayChannelCoreService {  
12 -  
13 - /**  
14 - * 初始化支付客户端  
15 - */  
16 - void initPayClients();  
17 -  
18 - /**  
19 - * 支付渠道的合法性  
20 - *  
21 - * 如果不合法,抛出 {@link ServiceException} 业务异常  
22 - *  
23 - * @param id 渠道编号  
24 - * @return 渠道信息  
25 - */  
26 - PayChannelDO validPayChannel(Long id);  
27 -  
28 - /**  
29 - * 支付渠道的合法性  
30 - *  
31 - * 如果不合法,抛出 {@link ServiceException} 业务异常  
32 - *  
33 - * @param appId 应用编号  
34 - * @param code 支付渠道  
35 - * @return 渠道信息  
36 - */  
37 - PayChannelDO validPayChannel(Long appId, String code);  
38 -  
39 -}  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayAppCoreServiceImpl.java deleted
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.merchant.impl;  
2 -  
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant.PayAppCoreMapper;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayAppCoreService;  
6 -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;  
7 -import lombok.extern.slf4j.Slf4j;  
8 -import org.springframework.stereotype.Service;  
9 -  
10 -import javax.annotation.Resource;  
11 -import javax.validation.Valid;  
12 -  
13 -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*;  
14 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
15 -  
16 -/**  
17 - * 支付应用 Core Service 实现类  
18 - *  
19 - * @author 芋道源码  
20 - */  
21 -@Service  
22 -@Valid  
23 -@Slf4j  
24 -public class PayAppCoreServiceImpl implements PayAppCoreService {  
25 -  
26 - @Resource  
27 - private PayAppCoreMapper payAppCoreMapper;  
28 -  
29 - @Override  
30 - public PayAppDO validPayApp(Long id) {  
31 - PayAppDO app = payAppCoreMapper.selectById(id);  
32 - // 校验是否存在  
33 - if (app == null) {  
34 - throw exception(PAY_APP_NOT_FOUND);  
35 - }  
36 - // 校验是否禁用  
37 - if (CommonStatusEnum.DISABLE.getStatus().equals(app.getStatus())) {  
38 - throw exception(PAY_APP_IS_DISABLE);  
39 - }  
40 - return app;  
41 - }  
42 -  
43 -}  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayChannelCoreServiceImpl.java deleted
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.merchant.impl;  
2 -  
3 -import cn.hutool.core.collection.CollUtil;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant.PayChannelCoreMapper;  
6 -import cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants;  
7 -import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayChannelCoreService;  
8 -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;  
9 -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;  
10 -import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;  
11 -import lombok.extern.slf4j.Slf4j;  
12 -import org.springframework.scheduling.annotation.Scheduled;  
13 -import org.springframework.stereotype.Service;  
14 -  
15 -import javax.annotation.PostConstruct;  
16 -import javax.annotation.Resource;  
17 -import javax.validation.Valid;  
18 -  
19 -import java.util.Comparator;  
20 -import java.util.Date;  
21 -import java.util.List;  
22 -  
23 -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*;  
24 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
25 -  
26 -/**  
27 - * 支付渠道 Core Service 实现类  
28 - *  
29 - * @author 芋道源码  
30 - */  
31 -@Service  
32 -@Valid  
33 -@Slf4j  
34 -public class PayChannelCoreServiceImpl implements PayChannelCoreService {  
35 -  
36 - /**  
37 - * 定时执行 {@link #schedulePeriodicRefresh()} 的周期  
38 - * 因为已经通过 Redis Pub/Sub 机制,所以频率不需要高  
39 - */  
40 - private static final long SCHEDULER_PERIOD = 5 * 60 * 1000L;  
41 -  
42 - /**  
43 - * 缓存菜单的最大更新时间,用于后续的增量轮询,判断是否有更新  
44 - */  
45 - private volatile Date maxUpdateTime;  
46 -  
47 - @Resource  
48 - private PayChannelCoreMapper payChannelCoreMapper;  
49 -  
50 - @Resource  
51 - private PayClientFactory payClientFactory;  
52 -  
53 - @Override  
54 - @PostConstruct  
55 - public void initPayClients() {  
56 - // 获取支付渠道,如果有更新  
57 - List<PayChannelDO> payChannels = this.loadPayChannelIfUpdate(maxUpdateTime);  
58 - if (CollUtil.isEmpty(payChannels)) {  
59 - return;  
60 - }  
61 -  
62 - // 创建或更新支付 Client  
63 - payChannels.forEach(payChannel -> payClientFactory.createOrUpdatePayClient(payChannel.getId(),  
64 - payChannel.getCode(), payChannel.getConfig()));  
65 -  
66 - // 写入缓存  
67 - assert payChannels.size() > 0; // 断言,避免告警  
68 - maxUpdateTime = payChannels.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime();  
69 - log.info("[initPayClients][初始化 PayChannel 数量为 {}]", payChannels.size());  
70 - }  
71 -  
72 - @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD)  
73 - public void schedulePeriodicRefresh() {  
74 - initPayClients();  
75 - }  
76 -  
77 - /**  
78 - * 如果支付渠道发生变化,从数据库中获取最新的全量支付渠道。  
79 - * 如果未发生变化,则返回空  
80 - *  
81 - * @param maxUpdateTime 当前支付渠道的最大更新时间  
82 - * @return 支付渠道列表  
83 - */  
84 - private List<PayChannelDO> loadPayChannelIfUpdate(Date maxUpdateTime) {  
85 - // 第一步,判断是否要更新。  
86 - if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据  
87 - log.info("[loadPayChannelIfUpdate][首次加载全量支付渠道]");  
88 - } else { // 判断数据库中是否有更新的支付渠道  
89 - if (payChannelCoreMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) {  
90 - return null;  
91 - }  
92 - log.info("[loadPayChannelIfUpdate][增量加载全量支付渠道]");  
93 - }  
94 - // 第二步,如果有更新,则从数据库加载所有支付渠道  
95 - return payChannelCoreMapper.selectList();  
96 - }  
97 -  
98 - @Override  
99 - public PayChannelDO validPayChannel(Long id) {  
100 - PayChannelDO channel = payChannelCoreMapper.selectById(id);  
101 - this.validPayChannel(channel);  
102 - return channel;  
103 - }  
104 -  
105 - @Override  
106 - public PayChannelDO validPayChannel(Long appId, String code) {  
107 - PayChannelDO channel = payChannelCoreMapper.selectByAppIdAndCode(appId, code);  
108 - this.validPayChannel(channel);  
109 - return channel;  
110 - }  
111 -  
112 - private void validPayChannel(PayChannelDO channel) {  
113 - if (channel == null) {  
114 - throw exception(PAY_CHANNEL_NOT_FOUND);  
115 - }  
116 - if (CommonStatusEnum.DISABLE.getStatus().equals(channel.getStatus())) {  
117 - throw exception(PayErrorCodeCoreConstants.PAY_CHANNEL_IS_DISABLE);  
118 - }  
119 - }  
120 -  
121 -}  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreService.java deleted
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.order;  
2 -  
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;  
4 -  
5 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.*;  
6 -import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO;  
7 -  
8 -import javax.validation.Valid;  
9 -  
10 -/**  
11 - * 支付订单 Core Service  
12 - *  
13 - * @author 芋道源码  
14 - */  
15 -public interface PayOrderCoreService {  
16 -  
17 - /**  
18 - * 获得支付单  
19 - *  
20 - * @param id 支付单编号  
21 - * @return 支付单  
22 - */  
23 - PayOrderDO getPayOrder(Long id);  
24 -  
25 - /**  
26 - * 创建支付单  
27 - *  
28 - * @param reqDTO 创建请求  
29 - * @return 支付单编号  
30 - */  
31 - Long createPayOrder(@Valid PayOrderCreateReqDTO reqDTO);  
32 -  
33 - /**  
34 - * 提交支付  
35 - * 此时,会发起支付渠道的调用  
36 - *  
37 - * @param reqDTO 提交请求  
38 - * @return 提交结果  
39 - */  
40 - PayOrderSubmitRespDTO submitPayOrder(@Valid PayOrderSubmitReqDTO reqDTO);  
41 -  
42 - /**  
43 - * 通知支付单成功  
44 - *  
45 - * @param channelId 渠道编号  
46 - * @param notifyData 通知数据  
47 - */  
48 - void notifyPayOrder(Long channelId, PayNotifyDataDTO notifyData) throws Exception;  
49 -  
50 -}  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayRefundCoreService.java deleted
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.order;  
2 -  
3 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundReqDTO;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundRespDTO;  
5 -import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO;  
6 -  
7 -/**  
8 - * 退款单 Core Service  
9 - *  
10 - * @author jason  
11 - */  
12 -public interface PayRefundCoreService {  
13 -  
14 - /**  
15 - * 提交退款申请  
16 - *  
17 - * @param reqDTO 退款申请信息  
18 - * @return 退款申请返回信息  
19 - */  
20 - PayRefundRespDTO submitRefundOrder(PayRefundReqDTO reqDTO);  
21 -  
22 - /**  
23 - * 渠道的退款通知  
24 - *  
25 - * @param channelId 渠道编号  
26 - * @param notifyData 通知数据  
27 - * @throws Exception 退款通知异常  
28 - */  
29 - void notifyPayRefund(Long channelId, PayNotifyDataDTO notifyData) throws Exception;  
30 -  
31 -}  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayRefundCoreServiceImpl.java deleted
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl;  
2 -  
3 -import cn.hutool.core.util.StrUtil;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;  
6 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;  
7 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;  
8 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;  
9 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper;  
10 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderExtensionCoreMapper;  
11 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundCoreMapper;  
12 -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum;  
13 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum;  
14 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum;  
15 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum;  
16 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundTypeEnum;  
17 -import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayAppCoreService;  
18 -import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayChannelCoreService;  
19 -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService;  
20 -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.dto.PayNotifyTaskCreateReqDTO;  
21 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayRefundCoreService;  
22 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundReqDTO;  
23 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundRespDTO;  
24 -import cn.iocoder.yudao.framework.pay.core.client.PayClient;  
25 -import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;  
26 -import cn.iocoder.yudao.framework.pay.core.client.PayCommonResult;  
27 -import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO;  
28 -import cn.iocoder.yudao.framework.pay.core.client.dto.PayRefundNotifyDTO;  
29 -import cn.iocoder.yudao.framework.pay.core.client.dto.PayRefundUnifiedReqDTO;  
30 -import cn.iocoder.yudao.framework.pay.core.client.dto.PayRefundUnifiedRespDTO;  
31 -import cn.iocoder.yudao.framework.pay.core.enums.PayNotifyRefundStatusEnum;  
32 -import lombok.extern.slf4j.Slf4j;  
33 -import org.springframework.stereotype.Service;  
34 -import org.springframework.transaction.annotation.Transactional;  
35 -  
36 -import javax.annotation.Resource;  
37 -import java.util.Date;  
38 -import java.util.Objects;  
39 -  
40 -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*;  
41 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
42 -  
43 -@Service  
44 -@Slf4j  
45 -public class PayRefundCoreServiceImpl implements PayRefundCoreService {  
46 -  
47 - @Resource  
48 - private PayOrderCoreMapper payOrderCoreMapper;  
49 - @Resource  
50 - private PayRefundCoreMapper payRefundCoreMapper;  
51 - @Resource  
52 - private PayOrderExtensionCoreMapper payOrderExtensionCoreMapper;  
53 -  
54 - @Resource  
55 - private PayAppCoreService payAppCoreService;  
56 - @Resource  
57 - private PayChannelCoreService payChannelCoreService;  
58 - @Resource  
59 - private PayNotifyCoreService payNotifyCoreService;  
60 -  
61 - @Resource  
62 - private PayClientFactory payClientFactory;  
63 -  
64 - @Override  
65 - @Transactional(rollbackFor = Exception.class)  
66 - public PayRefundRespDTO submitRefundOrder(PayRefundReqDTO req) {  
67 - // 获得 PayOrderDO  
68 - PayOrderDO order = payOrderCoreMapper.selectById(req.getPayOrderId());  
69 - // 校验订单是否存在  
70 - if (Objects.isNull(order) ) {  
71 - throw exception(PAY_ORDER_NOT_FOUND);  
72 - }  
73 - // 校验 App  
74 - PayAppDO app = payAppCoreService.validPayApp(order.getAppId());  
75 - // 校验支付渠道是否有效  
76 - PayChannelDO channel = payChannelCoreService.validPayChannel(order.getChannelId());  
77 - // 校验支付客户端是否正确初始化  
78 - PayClient client = payClientFactory.getPayClient(channel.getId());  
79 - if (client == null) {  
80 - log.error("[refund][渠道编号({}) 找不到对应的支付客户端]", channel.getId());  
81 - throw exception(PAY_CHANNEL_CLIENT_NOT_FOUND);  
82 - }  
83 -  
84 - // 校验退款的条件  
85 - validatePayRefund(req, order);  
86 - // 退款类型  
87 - PayRefundTypeEnum refundType = PayRefundTypeEnum.SOME;  
88 - if (Objects.equals(req.getAmount(), order.getAmount())) {  
89 - refundType = PayRefundTypeEnum.ALL;  
90 - }  
91 - PayOrderExtensionDO orderExtensionDO = payOrderExtensionCoreMapper.selectById(order.getSuccessExtensionId());  
92 - PayRefundDO payRefundDO = payRefundCoreMapper.selectByTradeNoAndMerchantRefundNo(orderExtensionDO.getNo(), req.getMerchantRefundId());  
93 - if(Objects.nonNull(payRefundDO)){  
94 - // 退款订单已经提交过。  
95 - //TODO 校验相同退款单的金额  
96 - // TODO @jason:咱要不封装一个 ObjectUtils.equalsAny  
97 - if (Objects.equals(PayRefundStatusEnum.SUCCESS.getStatus(), payRefundDO.getStatus())  
98 - || Objects.equals(PayRefundStatusEnum.CLOSE.getStatus(), payRefundDO.getStatus())) {  
99 - //已成功退款  
100 - throw exception(PAY_REFUND_SUCCEED);  
101 - }  
102 - //可以重复提交,保证 退款请求号 一致,由渠道保证幂等  
103 - }else {  
104 - // 成功,插入退款单 状态为生成.没有和渠道交互  
105 - // TODO @jason:搞到 convert 里。一些额外的自动,手动 set 下;  
106 - payRefundDO = PayRefundDO.builder().channelOrderNo(order.getChannelOrderNo())  
107 - .appId(order.getAppId())  
108 - .channelOrderNo(order.getChannelOrderNo())  
109 - .channelCode(order.getChannelCode())  
110 - .channelId(order.getChannelId())  
111 - .merchantId(order.getMerchantId())  
112 - .orderId(order.getId())  
113 - .merchantRefundNo(req.getMerchantRefundId())  
114 - .notifyUrl(app.getRefundNotifyUrl())  
115 - .payAmount(order.getAmount())  
116 - .refundAmount(req.getAmount())  
117 - .userIp(req.getUserIp())  
118 - .merchantOrderId(order.getMerchantOrderId())  
119 - .tradeNo(orderExtensionDO.getNo())  
120 - .status(PayRefundStatusEnum.CREATE.getStatus())  
121 - .reason(req.getReason())  
122 - .notifyStatus(PayOrderNotifyStatusEnum.NO.getStatus())  
123 - .type(refundType.getStatus())  
124 - .build();  
125 - payRefundCoreMapper.insert(payRefundDO);  
126 - }  
127 - // TODO @jason:搞到 convert 里。一些额外的自动,手动 set 下;  
128 - PayRefundUnifiedReqDTO unifiedReqDTO = new PayRefundUnifiedReqDTO();  
129 - unifiedReqDTO.setUserIp(req.getUserIp())  
130 - .setAmount(req.getAmount())  
131 - .setChannelOrderNo(order.getChannelOrderNo())  
132 - .setPayTradeNo(orderExtensionDO.getNo())  
133 - .setMerchantRefundId(req.getMerchantRefundId())  
134 - .setReason(req.getReason());  
135 - // 向渠道发起退款申请  
136 - PayCommonResult<PayRefundUnifiedRespDTO> refundUnifiedResult = client.unifiedRefund(unifiedReqDTO);  
137 - // 检查是否失败,失败抛出业务异常。  
138 - // TODO 渠道的异常记录。  
139 - // TODO @jason:可以先打个 warn log 哈;  
140 - refundUnifiedResult.checkError();  
141 - // 成功在 退款回调中处理  
142 - return PayRefundRespDTO.builder().refundId(payRefundDO.getId()).build();  
143 - }  
144 -  
145 -  
146 - @Override  
147 - @Transactional(rollbackFor = Exception.class)  
148 - public void notifyPayRefund(Long channelId, PayNotifyDataDTO notifyData) {  
149 - log.info("[notifyPayRefund][channelId({}) 回调数据({})]", channelId, notifyData.getBody());  
150 - // 校验支付渠道是否有效  
151 - PayChannelDO channel = payChannelCoreService.validPayChannel(channelId);  
152 - // 校验支付客户端是否正确初始化  
153 - PayClient client = payClientFactory.getPayClient(channel.getId());  
154 - if (client == null) {  
155 - log.error("[notifyPayOrder][渠道编号({}) 找不到对应的支付客户端]", channel.getId());  
156 - throw exception(PAY_CHANNEL_CLIENT_NOT_FOUND);  
157 - }  
158 - // 解析渠道退款通知数据, 统一处理  
159 - PayRefundNotifyDTO refundNotify = client.parseRefundNotify(notifyData);  
160 - if (Objects.equals(PayNotifyRefundStatusEnum.SUCCESS,refundNotify.getStatus())){  
161 - payRefundSuccess(refundNotify);  
162 - } else {  
163 - //TODO 支付异常, 支付宝似乎没有支付异常的通知。  
164 - // TODO @jason:那这里可以考虑打个 error logger @芋艿 微信是否存在支付异常通知  
165 - }  
166 - }  
167 -  
168 - private void payRefundSuccess(PayRefundNotifyDTO refundNotify) {  
169 - // 校验退款单存在  
170 - PayRefundDO refundDO = payRefundCoreMapper.selectByTradeNoAndMerchantRefundNo(refundNotify.getTradeNo(), refundNotify.getReqNo());  
171 - if (refundDO == null) {  
172 - log.error("[payRefundSuccess][不存在 seqNo 为{} 的支付退款单]", refundNotify.getReqNo());  
173 - throw exception(PAY_REFUND_NOT_FOUND);  
174 - }  
175 -  
176 - // 得到已退金额  
177 - PayOrderDO payOrderDO = payOrderCoreMapper.selectById(refundDO.getOrderId());  
178 - Long refundedAmount = payOrderDO.getRefundAmount();  
179 -  
180 - PayOrderStatusEnum orderStatus = PayOrderStatusEnum.SUCCESS;  
181 - if(Objects.equals(payOrderDO.getAmount(), refundedAmount+ refundDO.getRefundAmount())){  
182 - //支付金额 = 已退金额 + 本次退款金额。  
183 - orderStatus = PayOrderStatusEnum.CLOSED;  
184 - }  
185 - // 更新支付订单  
186 - PayOrderDO updateOrderDO = new PayOrderDO();  
187 - updateOrderDO.setId(refundDO.getOrderId())  
188 - .setRefundAmount(refundedAmount + refundDO.getRefundAmount())  
189 - .setStatus(orderStatus.getStatus())  
190 - .setRefundTimes(payOrderDO.getRefundTimes() + 1)  
191 - .setRefundStatus(refundDO.getType());  
192 - payOrderCoreMapper.updateById(updateOrderDO);  
193 -  
194 - // 更新退款订单  
195 - PayRefundDO updateRefundDO = new PayRefundDO();  
196 - updateRefundDO.setId(refundDO.getId())  
197 - .setSuccessTime(refundNotify.getRefundSuccessTime())  
198 - .setChannelRefundNo(refundNotify.getChannelOrderNo())  
199 - .setTradeNo(refundNotify.getTradeNo())  
200 - .setNotifyTime(new Date())  
201 - .setStatus(PayRefundStatusEnum.SUCCESS.getStatus());  
202 - payRefundCoreMapper.updateById(updateRefundDO);  
203 -  
204 - // 插入退款通知记录  
205 - // TODO 通知商户成功或者失败. 现在通知似乎没有实现, 只是回调  
206 - payNotifyCoreService.createPayNotifyTask(PayNotifyTaskCreateReqDTO.builder()  
207 - .type(PayNotifyTypeEnum.REFUND.getType()).dataId(refundDO.getId()).build());  
208 - }  
209 -  
210 - /**  
211 - * 校验是否进行退款  
212 - * @param req 退款申请信息  
213 - * @param order 原始支付订单信息  
214 - */  
215 - private void validatePayRefund(PayRefundReqDTO req, PayOrderDO order) {  
216 - // 校验状态,必须是支付状态  
217 - if (!PayOrderStatusEnum.SUCCESS.getStatus().equals(order.getStatus())) {  
218 - throw exception(PAY_ORDER_STATUS_IS_NOT_SUCCESS);  
219 - }  
220 - // 是否已经全额退款  
221 - if (PayRefundTypeEnum.ALL.getStatus().equals(order.getRefundStatus())) {  
222 - throw exception(PAY_REFUND_ALL_REFUNDED);  
223 - }  
224 - // 校验金额 退款金额不能大于 原定的金额  
225 - if (req.getAmount() + order.getRefundAmount() > order.getAmount()){  
226 - throw exception(PAY_REFUND_AMOUNT_EXCEED);  
227 - }  
228 - // 校验渠道订单号  
229 - if (StrUtil.isEmpty(order.getChannelOrderNo())) {  
230 - throw exception(PAY_REFUND_CHN_ORDER_NO_IS_NULL);  
231 - }  
232 - //TODO 退款的期限 退款次数的控制  
233 - }  
234 -  
235 -}  
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java deleted
1 -package cn.iocoder.yudao.coreservice.modules.pay.service;  
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayChannelEnum.java
@@ -17,10 +17,7 @@ import lombok.Getter; @@ -17,10 +17,7 @@ import lombok.Getter;
17 @AllArgsConstructor 17 @AllArgsConstructor
18 public enum PayChannelEnum { 18 public enum PayChannelEnum {
19 19
20 - /**  
21 - * 公众号网页  
22 - */  
23 - WX_PUB("wx_pub", "微信 JSAPI 支付", WXPayClientConfig.class), 20 + WX_PUB("wx_pub", "微信 JSAPI 支付", WXPayClientConfig.class), // 公众号网页
24 WX_LITE("wx_lite", "微信小程序支付", WXPayClientConfig.class), 21 WX_LITE("wx_lite", "微信小程序支付", WXPayClientConfig.class),
25 WX_APP("wx_app", "微信 App 支付", WXPayClientConfig.class), 22 WX_APP("wx_app", "微信 App 支付", WXPayClientConfig.class),
26 23
@@ -34,16 +31,16 @@ public enum PayChannelEnum { @@ -34,16 +31,16 @@ public enum PayChannelEnum {
34 * <p> 31 * <p>
35 * 参考 https://www.pingxx.com/api/支付渠道属性值.html 32 * 参考 https://www.pingxx.com/api/支付渠道属性值.html
36 */ 33 */
37 - private String code; 34 + private final String code;
38 /** 35 /**
39 * 名字 36 * 名字
40 */ 37 */
41 - private String name; 38 + private final String name;
42 39
43 /** 40 /**
44 * 配置类 41 * 配置类
45 */ 42 */
46 - private Class<? extends PayClientConfig> configClass; 43 + private final Class<? extends PayClientConfig> configClass;
47 44
48 /** 45 /**
49 * 微信支付 46 * 微信支付
@@ -58,6 +55,6 @@ public enum PayChannelEnum { @@ -58,6 +55,6 @@ public enum PayChannelEnum {
58 public static PayChannelEnum getByCode(String code) { 55 public static PayChannelEnum getByCode(String code) {
59 return ArrayUtil.firstMatch(o -> o.getCode().equals(code), values()); 56 return ArrayUtil.firstMatch(o -> o.getCode().equals(code), values());
60 } 57 }
61 - 58 +
62 59
63 } 60 }
yudao-module-pay/pom.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project xmlns="http://maven.apache.org/POM/4.0.0"
  3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5 + <parent>
  6 + <groupId>cn.iocoder.boot</groupId>
  7 + <artifactId>yudao</artifactId>
  8 + <version>${revision}</version>
  9 + </parent>
  10 + <modelVersion>4.0.0</modelVersion>
  11 + <artifactId>yudao-module-pay</artifactId>
  12 + <packaging>pom</packaging>
  13 + <modules>
  14 + <module>yudao-module-pay-api</module>
  15 + <module>yudao-module-pay-impl</module>
  16 + </modules>
  17 +
  18 + <name>${artifactId}</name>
  19 + <description>
  20 + pay 模块,我们放支付业务,提供业务的支付能力。
  21 + 例如说:商户、应用、支付、退款等等
  22 + </description>
  23 +
  24 +
  25 +</project>
yudao-module-pay/yudao-module-pay-api/pom.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project xmlns="http://maven.apache.org/POM/4.0.0"
  3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5 + <parent>
  6 + <artifactId>yudao-module-pay</artifactId>
  7 + <groupId>cn.iocoder.boot</groupId>
  8 + <version>1.4.0-snapshot</version>
  9 + </parent>
  10 + <modelVersion>4.0.0</modelVersion>
  11 + <artifactId>yudao-module-pay-api</artifactId>
  12 + <packaging>jar</packaging>
  13 +
  14 + <name>${artifactId}</name>
  15 + <description>
  16 + pay 模块 API,暴露给其它模块调用
  17 + </description>
  18 +
  19 + <dependencies>
  20 + <dependency>
  21 + <groupId>cn.iocoder.boot</groupId>
  22 + <artifactId>yudao-common</artifactId>
  23 + </dependency>
  24 + </dependencies>
  25 +
  26 +</project>
yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/DictTypeConstants.java 0 → 100644
  1 +package cn.iocoder.yudao.module.pay.enums;
  2 +
  3 +/**
  4 + * Pay 字典类型的枚举类
  5 + *
  6 + * @author 芋道源码
  7 + */
  8 +public interface DictTypeConstants {
  9 +
  10 + /**
  11 + * 支付-订单-订单状态
  12 + */
  13 + String PAY_ORDER_STATUS = "pay_order_status";
  14 +
  15 + /**
  16 + * 支付-订单-订单回调商户状态
  17 + */
  18 + String PAY_ORDER_NOTIFY_STATUS = "pay_order_notify_status";
  19 +
  20 + /**
  21 + * 支付-订单-订单退款状态
  22 + */
  23 + String PAY_ORDER_REFUND_STATUS = "pay_order_refund_status";
  24 +
  25 + /**
  26 + * 支付-退款订单-退款状态
  27 + */
  28 + String PAY_REFUND_ORDER_STATUS = "pay_refund_order_status";
  29 +
  30 + /**
  31 + * 支付-退款订单-退款类别
  32 + */
  33 + String PAY_REFUND_ORDER_TYPE = "pay_refund_order_type";
  34 +
  35 +}
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/PayErrorCodeCoreConstants.java renamed to yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/ErrorCodeConstants.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.enums; 1 +package cn.iocoder.yudao.module.pay.enums;
2 2
3 import cn.iocoder.yudao.framework.common.exception.ErrorCode; 3 import cn.iocoder.yudao.framework.common.exception.ErrorCode;
4 4
@@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode; @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
7 * 7 *
8 * pay 系统,使用 1-007-000-000 段 8 * pay 系统,使用 1-007-000-000 段
9 */ 9 */
10 -public interface PayErrorCodeCoreConstants { 10 +public interface ErrorCodeConstants {
11 11
12 /** 12 /**
13 * ========== APP 模块 1-007-000-000 ========== 13 * ========== APP 模块 1-007-000-000 ==========
yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.module.pay;
yudao-module-pay/yudao-module-pay-impl/pom.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project xmlns="http://maven.apache.org/POM/4.0.0"
  3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5 + <parent>
  6 + <artifactId>yudao-module-pay</artifactId>
  7 + <groupId>cn.iocoder.boot</groupId>
  8 + <version>1.4.0-snapshot</version>
  9 + </parent>
  10 + <modelVersion>4.0.0</modelVersion>
  11 + <artifactId>yudao-module-pay-impl</artifactId>
  12 + <packaging>jar</packaging>
  13 +
  14 + <name>${artifactId}</name>
  15 + <description>
  16 + pay 模块,我们放支付业务,提供业务的支付能力。
  17 + 例如说:商户、应用、支付、退款等等
  18 + </description>
  19 +
  20 + <dependencies>
  21 + <dependency>
  22 + <groupId>cn.iocoder.boot</groupId>
  23 + <artifactId>yudao-module-pay-api</artifactId>
  24 + <version>${revision}</version>
  25 + </dependency>
  26 +
  27 + <!-- 业务组件 -->
  28 + <dependency>
  29 + <groupId>cn.iocoder.boot</groupId>
  30 + <artifactId>yudao-spring-boot-starter-biz-operatelog</artifactId>
  31 + </dependency>
  32 + <dependency>
  33 + <groupId>cn.iocoder.boot</groupId>
  34 + <artifactId>yudao-spring-boot-starter-biz-pay</artifactId>
  35 + </dependency>
  36 +
  37 + <!-- Web 相关 -->
  38 + <dependency>
  39 + <groupId>cn.iocoder.boot</groupId>
  40 + <artifactId>yudao-spring-boot-starter-security</artifactId>
  41 + </dependency>
  42 +
  43 + <!-- DB 相关 -->
  44 + <dependency>
  45 + <groupId>cn.iocoder.boot</groupId>
  46 + <artifactId>yudao-spring-boot-starter-mybatis</artifactId>
  47 + </dependency>
  48 +
  49 + <dependency>
  50 + <groupId>cn.iocoder.boot</groupId>
  51 + <artifactId>yudao-spring-boot-starter-redis</artifactId>
  52 + </dependency>
  53 +
  54 + <!-- Job 定时任务相关 -->
  55 + <dependency>
  56 + <groupId>cn.iocoder.boot</groupId>
  57 + <artifactId>yudao-spring-boot-starter-job</artifactId>
  58 + </dependency>
  59 +
  60 + <!-- 消息队列相关 -->
  61 + <dependency>
  62 + <groupId>cn.iocoder.boot</groupId>
  63 + <artifactId>yudao-spring-boot-starter-mq</artifactId>
  64 + </dependency>
  65 +
  66 + <!-- Test 测试相关 -->
  67 + <dependency>
  68 + <groupId>cn.iocoder.boot</groupId>
  69 + <artifactId>yudao-spring-boot-starter-test</artifactId>
  70 + <scope>test</scope>
  71 + </dependency>
  72 +
  73 + <!-- 工具类相关 -->
  74 + <dependency>
  75 + <groupId>cn.iocoder.boot</groupId>
  76 + <artifactId>yudao-spring-boot-starter-excel</artifactId>
  77 + </dependency>
  78 +
  79 + </dependencies>
  80 +
  81 + <build>
  82 + <!-- 设置构建的 jar 包名 -->
  83 + <finalName>${artifactId}</finalName>
  84 + <plugins>
  85 + <!-- 打包 -->
  86 + <plugin>
  87 + <groupId>org.springframework.boot</groupId>
  88 + <artifactId>spring-boot-maven-plugin</artifactId>
  89 + <configuration>
  90 + <fork>true</fork>
  91 + </configuration>
  92 + <executions>
  93 + <execution>
  94 + <goals>
  95 + <goal>repackage</goal> <!-- 将引入的 jar 打入其中 -->
  96 + </goals>
  97 + </execution>
  98 + </executions>
  99 + </plugin>
  100 + </plugins>
  101 + </build>
  102 +
  103 +</project>
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/PayAppController.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/PayAppController.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.app; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.*;  
5 -import cn.iocoder.yudao.adminserver.modules.pay.convert.app.PayAppConvert;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService;  
7 -import cn.iocoder.yudao.adminserver.modules.pay.service.channel.PayChannelService;  
8 -import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService;  
9 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;  
10 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;  
11 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;  
12 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
13 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
14 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 6 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
15 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; 7 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
16 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; 8 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
17 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; 9 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
  10 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.*;
  11 +import cn.iocoder.yudao.module.pay.convert.app.PayAppConvert;
  12 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
  13 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
  14 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
  15 +import cn.iocoder.yudao.module.pay.service.merchant.PayAppService;
  16 +import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService;
  17 +import cn.iocoder.yudao.module.pay.service.merchant.PayMerchantService;
18 import io.swagger.annotations.Api; 18 import io.swagger.annotations.Api;
19 import io.swagger.annotations.ApiImplicitParam; 19 import io.swagger.annotations.ApiImplicitParam;
20 import io.swagger.annotations.ApiOperation; 20 import io.swagger.annotations.ApiOperation;
@@ -33,7 +33,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -33,7 +33,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
33 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; 33 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
34 34
35 @Slf4j 35 @Slf4j
36 -@Api(tags = "支付应用信息") 36 +@Api(tags = "管理后台 - 支付应用信息")
37 @RestController 37 @RestController
38 @RequestMapping("/pay/app") 38 @RequestMapping("/pay/app")
39 @Validated 39 @Validated
@@ -106,7 +106,7 @@ public class PayAppController { @@ -106,7 +106,7 @@ public class PayAppController {
106 return success(new PageResult<>(pageResult.getTotal())); 106 return success(new PageResult<>(pageResult.getTotal()));
107 } 107 }
108 108
109 - // 得到所有的应用编号,查出所有的通道 109 + // 得到所有的应用编号,查出所有的渠道
110 Collection<Long> payAppIds = CollectionUtils.convertList(pageResult.getList(), PayAppDO::getId); 110 Collection<Long> payAppIds = CollectionUtils.convertList(pageResult.getList(), PayAppDO::getId);
111 List<PayChannelDO> channels = channelService.getChannelListByAppIds(payAppIds); 111 List<PayChannelDO> channels = channelService.getChannelListByAppIds(payAppIds);
112 // TODO @aquan:可以基于 appId 简历一个 multiMap。这样下面,直接 get 到之后,CollUtil buildSet 即可 112 // TODO @aquan:可以基于 appId 简历一个 multiMap。这样下面,直接 get 到之后,CollUtil buildSet 即可
@@ -116,7 +116,7 @@ public class PayAppController { @@ -116,7 +116,7 @@ public class PayAppController {
116 Collection<Long> merchantIds = CollectionUtils.convertList(pageResult.getList(), PayAppDO::getMerchantId); 116 Collection<Long> merchantIds = CollectionUtils.convertList(pageResult.getList(), PayAppDO::getMerchantId);
117 Map<Long, PayMerchantDO> deptMap = merchantService.getMerchantMap(merchantIds); 117 Map<Long, PayMerchantDO> deptMap = merchantService.getMerchantMap(merchantIds);
118 118
119 - // 利用反射将通道数据复制到返回的数据结构中去 119 + // 利用反射将渠道数据复制到返回的数据结构中去
120 List<PayAppPageItemRespVO> appList = new ArrayList<>(pageResult.getList().size()); 120 List<PayAppPageItemRespVO> appList = new ArrayList<>(pageResult.getList().size());
121 pageResult.getList().forEach(app -> { 121 pageResult.getList().forEach(app -> {
122 // 写入应用信息的数据 122 // 写入应用信息的数据
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/PayChannelController.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/PayChannelController.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.*;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.convert.channel.PayChannelConvert;  
5 -import cn.iocoder.yudao.adminserver.modules.pay.service.channel.PayChannelService;  
6 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; 3 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.*;
  4 +import cn.iocoder.yudao.module.pay.convert.channel.PayChannelConvert;
  5 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
  6 +import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService;
7 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 7 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
8 import cn.iocoder.yudao.framework.common.pojo.PageResult; 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; 9 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
@@ -26,11 +26,7 @@ import java.util.List; @@ -26,11 +26,7 @@ import java.util.List;
26 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 26 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
27 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; 27 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
28 28
29 -/**  
30 - * 支付渠道 controller 组件  
31 - * @author aquan  
32 - */  
33 -@Api(tags = "支付渠道") 29 +@Api(tags = "管理后台 - 支付渠道")
34 @RestController 30 @RestController
35 @RequestMapping("/pay/channel") 31 @RequestMapping("/pay/channel")
36 @Validated 32 @Validated
@@ -39,7 +35,6 @@ public class PayChannelController { @@ -39,7 +35,6 @@ public class PayChannelController {
39 @Resource 35 @Resource
40 private PayChannelService channelService; 36 private PayChannelService channelService;
41 37
42 -  
43 @PostMapping("/create") 38 @PostMapping("/create")
44 @ApiOperation("创建支付渠道 ") 39 @ApiOperation("创建支付渠道 ")
45 @PreAuthorize("@ss.hasPermission('pay:channel:create')") 40 @PreAuthorize("@ss.hasPermission('pay:channel:create')")
@@ -116,7 +111,6 @@ public class PayChannelController { @@ -116,7 +111,6 @@ public class PayChannelController {
116 @PreAuthorize("@ss.hasPermission('pay:channel:query')") 111 @PreAuthorize("@ss.hasPermission('pay:channel:query')")
117 public CommonResult<PayChannelRespVO> getChannel( 112 public CommonResult<PayChannelRespVO> getChannel(
118 @RequestParam Long merchantId, @RequestParam Long appId, @RequestParam String code) { 113 @RequestParam Long merchantId, @RequestParam Long appId, @RequestParam String code) {
119 -  
120 // 獲取渠道 114 // 獲取渠道
121 PayChannelDO channel = channelService.getChannelByConditions(merchantId, appId, code); 115 PayChannelDO channel = channelService.getChannelByConditions(merchantId, appId, code);
122 if (channel == null) { 116 if (channel == null) {
@@ -126,4 +120,5 @@ public class PayChannelController { @@ -126,4 +120,5 @@ public class PayChannelController {
126 PayChannelRespVO respVo = PayChannelConvert.INSTANCE.convert(channel); 120 PayChannelRespVO respVo = PayChannelConvert.INSTANCE.convert(channel);
127 return success(respVo); 121 return success(respVo);
128 } 122 }
  123 +
129 } 124 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/PayMerchantController.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/PayMerchantController.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.*;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.convert.merchant.PayMerchantConvert;  
5 -import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService;  
6 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; 3 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.*;
  4 +import cn.iocoder.yudao.module.pay.convert.merchant.PayMerchantConvert;
  5 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
  6 +import cn.iocoder.yudao.module.pay.service.merchant.PayMerchantService;
7 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 7 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
8 import cn.iocoder.yudao.framework.common.pojo.PageResult; 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; 9 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppBaseVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppBaseVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
2 2
3 import lombok.*; 3 import lombok.*;
4 import io.swagger.annotations.*; 4 import io.swagger.annotations.*;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppCreateReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppCreateReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
2 2
3 import lombok.*; 3 import lombok.*;
4 -import java.util.*;  
5 import io.swagger.annotations.*; 4 import io.swagger.annotations.*;
6 -import javax.validation.constraints.*;  
7 5
8 -@ApiModel("支付应用信息创建 Request VO") 6 +@ApiModel("管理后台 - 支付应用信息创建 Request VO")
9 @Data 7 @Data
10 @EqualsAndHashCode(callSuper = true) 8 @EqualsAndHashCode(callSuper = true)
11 @ToString(callSuper = true) 9 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppExcelVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppExcelVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo;  
2 -  
3 -import lombok.*;  
4 -import java.util.*;  
5 -import io.swagger.annotations.*; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
6 2
7 import com.alibaba.excel.annotation.ExcelProperty; 3 import com.alibaba.excel.annotation.ExcelProperty;
  4 +import lombok.Data;
  5 +
  6 +import java.util.Date;
8 7
9 /** 8 /**
10 * 支付应用信息 Excel VO 9 * 支付应用信息 Excel VO
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppExportReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppExportReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
2 2
3 import lombok.*; 3 import lombok.*;
4 import java.util.*; 4 import java.util.*;
@@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
8 8
9 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 9 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
10 10
11 -@ApiModel(value = "支付应用信息 Excel 导出 Request VO", description = "参数和 PayAppPageReqVO 是一致的") 11 +@ApiModel(value = "管理后台 - 支付应用信息 Excel 导出 Request VO", description = "参数和 PayAppPageReqVO 是一致的")
12 @Data 12 @Data
13 public class PayAppExportReqVO { 13 public class PayAppExportReqVO {
14 14
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppPageItemRespVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppPageItemRespVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -9,12 +9,7 @@ import lombok.ToString; @@ -9,12 +9,7 @@ import lombok.ToString;
9 import java.util.Date; 9 import java.util.Date;
10 import java.util.Set; 10 import java.util.Set;
11 11
12 -/**  
13 - * 支付应用信息分页查询 Response VO  
14 - *  
15 - * @author aquan  
16 - */  
17 -@ApiModel(value = "支付应用信息分页查询 Response VO", description = "相比于支付信息,还会多出应用渠道的开关信息") 12 +@ApiModel(value = "管理后台 - 支付应用信息分页查询 Response VO", description = "相比于支付信息,还会多出应用渠道的开关信息")
18 @Data 13 @Data
19 @EqualsAndHashCode(callSuper = true) 14 @EqualsAndHashCode(callSuper = true)
20 @ToString(callSuper = true) 15 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppPageReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppPageReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
2 2
3 import lombok.*; 3 import lombok.*;
4 import java.util.*; 4 import java.util.*;
@@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
8 8
9 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 9 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
10 10
11 -@ApiModel("支付应用信息分页 Request VO") 11 +@ApiModel("管理后台 - 支付应用信息分页 Request VO")
12 @Data 12 @Data
13 @EqualsAndHashCode(callSuper = true) 13 @EqualsAndHashCode(callSuper = true)
14 @ToString(callSuper = true) 14 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppRespVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppRespVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
2 2
3 import lombok.*; 3 import lombok.*;
4 import java.util.*; 4 import java.util.*;
5 import io.swagger.annotations.*; 5 import io.swagger.annotations.*;
6 6
7 -@ApiModel("支付应用信息 Response VO") 7 +@ApiModel("管理后台 - 支付应用信息 Response VO")
8 @Data 8 @Data
9 @EqualsAndHashCode(callSuper = true) 9 @EqualsAndHashCode(callSuper = true)
10 @ToString(callSuper = true) 10 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppUpdateReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppUpdateReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
2 2
3 import lombok.*; 3 import lombok.*;
4 -import java.util.*;  
5 import io.swagger.annotations.*; 4 import io.swagger.annotations.*;
6 import javax.validation.constraints.*; 5 import javax.validation.constraints.*;
7 6
8 -@ApiModel("支付应用信息更新 Request VO") 7 +@ApiModel("管理后台 - 支付应用信息更新 Request VO")
9 @Data 8 @Data
10 @EqualsAndHashCode(callSuper = true) 9 @EqualsAndHashCode(callSuper = true)
11 @ToString(callSuper = true) 10 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/app/vo/PayAppUpdateStatusReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/app/PayAppUpdateStatusReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -6,7 +6,7 @@ import lombok.Data; @@ -6,7 +6,7 @@ import lombok.Data;
6 6
7 import javax.validation.constraints.NotNull; 7 import javax.validation.constraints.NotNull;
8 8
9 -@ApiModel("应用更新状态 Request VO") 9 +@ApiModel("管理后台 - 应用更新状态 Request VO")
10 @Data 10 @Data
11 public class PayAppUpdateStatusReqVO { 11 public class PayAppUpdateStatusReqVO {
12 12
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelBaseVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelBaseVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel;
2 2
3 import lombok.*; 3 import lombok.*;
4 -import java.util.*;  
5 import io.swagger.annotations.*; 4 import io.swagger.annotations.*;
6 import javax.validation.constraints.*; 5 import javax.validation.constraints.*;
7 6
8 /** 7 /**
9 -* 支付渠道  
10 - Base VO,提供给添加、修改、详细的子 VO 使用 8 +* 支付渠道 Base VO,提供给添加、修改、详细的子 VO 使用
11 * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 9 * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
12 */ 10 */
13 @Data 11 @Data
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelCreateReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelCreateReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -8,14 +8,14 @@ import lombok.ToString; @@ -8,14 +8,14 @@ import lombok.ToString;
8 8
9 import javax.validation.constraints.NotBlank; 9 import javax.validation.constraints.NotBlank;
10 10
11 -@ApiModel("支付渠道 创建 Request VO") 11 +@ApiModel("管理后台 - 支付渠道 创建 Request VO")
12 @Data 12 @Data
13 @EqualsAndHashCode(callSuper = true) 13 @EqualsAndHashCode(callSuper = true)
14 @ToString(callSuper = true) 14 @ToString(callSuper = true)
15 public class PayChannelCreateReqVO extends PayChannelBaseVO { 15 public class PayChannelCreateReqVO extends PayChannelBaseVO {
16 16
17 - @ApiModelProperty(value = "通道配置的 json 字符串")  
18 - @NotBlank(message = "通道配置不能为空") 17 + @ApiModelProperty(value = "渠道配置的 json 字符串")
  18 + @NotBlank(message = "渠道配置不能为空")
19 private String config; 19 private String config;
20 20
21 } 21 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelExcelVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelExcelVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel;
2 2
3 import lombok.*; 3 import lombok.*;
4 import java.util.*; 4 import java.util.*;
@@ -7,8 +7,7 @@ import io.swagger.annotations.*; @@ -7,8 +7,7 @@ import io.swagger.annotations.*;
7 import com.alibaba.excel.annotation.ExcelProperty; 7 import com.alibaba.excel.annotation.ExcelProperty;
8 8
9 /** 9 /**
10 - * 支付渠道  
11 - Excel VO 10 + * 支付渠道 Excel VO
12 * 11 *
13 * @author 芋艿 12 * @author 芋艿
14 */ 13 */
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelExportReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelExportReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel;
2 2
3 import lombok.*; 3 import lombok.*;
4 import java.util.*; 4 import java.util.*;
@@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
8 8
9 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 9 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
10 10
11 -@ApiModel(value = "支付渠道 Excel 导出 Request VO", description = "参数和 PayChannelPageReqVO 是一致的") 11 +@ApiModel(value = "管理后台 - 支付渠道 Excel 导出 Request VO", description = "参数和 PayChannelPageReqVO 是一致的")
12 @Data 12 @Data
13 public class PayChannelExportReqVO { 13 public class PayChannelExportReqVO {
14 14
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelPageReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelPageReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel;
2 2
3 import lombok.*; 3 import lombok.*;
4 import java.util.*; 4 import java.util.*;
@@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
8 8
9 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 9 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
10 10
11 -@ApiModel("支付渠道 分页 Request VO") 11 +@ApiModel("管理后台 - 支付渠道 分页 Request VO")
12 @Data 12 @Data
13 @EqualsAndHashCode(callSuper = true) 13 @EqualsAndHashCode(callSuper = true)
14 @ToString(callSuper = true) 14 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelRespVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelRespVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel;
2 2
3 import lombok.*; 3 import lombok.*;
4 import java.util.*; 4 import java.util.*;
5 import io.swagger.annotations.*; 5 import io.swagger.annotations.*;
6 6
7 -@ApiModel("支付渠道 Response VO") 7 +@ApiModel("管理后台 - 支付渠道 Response VO")
8 @Data 8 @Data
9 @EqualsAndHashCode(callSuper = true) 9 @EqualsAndHashCode(callSuper = true)
10 @ToString(callSuper = true) 10 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/channel/vo/PayChannelUpdateReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/channel/PayChannelUpdateReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel;
2 2
3 import lombok.*; 3 import lombok.*;
4 -import java.util.*;  
5 import io.swagger.annotations.*; 4 import io.swagger.annotations.*;
6 import javax.validation.constraints.*; 5 import javax.validation.constraints.*;
7 6
8 -@ApiModel("支付渠道 更新 Request VO") 7 +@ApiModel("管理后台 - 支付渠道 更新 Request VO")
9 @Data 8 @Data
10 @EqualsAndHashCode(callSuper = true) 9 @EqualsAndHashCode(callSuper = true)
11 @ToString(callSuper = true) 10 @ToString(callSuper = true)
@@ -15,7 +14,7 @@ public class PayChannelUpdateReqVO extends PayChannelBaseVO { @@ -15,7 +14,7 @@ public class PayChannelUpdateReqVO extends PayChannelBaseVO {
15 @NotNull(message = "商户编号不能为空") 14 @NotNull(message = "商户编号不能为空")
16 private Long id; 15 private Long id;
17 16
18 - @ApiModelProperty(value = "通道配置的json字符串")  
19 - @NotBlank(message = "通道配置不能为空") 17 + @ApiModelProperty(value = "渠道配置的json字符串")
  18 + @NotBlank(message = "渠道配置不能为空")
20 private String config; 19 private String config;
21 } 20 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantBaseVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantBaseVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
2 2
3 import io.swagger.annotations.ApiModelProperty; 3 import io.swagger.annotations.ApiModelProperty;
4 import lombok.Data; 4 import lombok.Data;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantCreateReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantCreateReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
2 2
3 import lombok.*; 3 import lombok.*;
4 -import java.util.*;  
5 import io.swagger.annotations.*; 4 import io.swagger.annotations.*;
6 -import javax.validation.constraints.*;  
7 5
8 -@ApiModel("支付商户信息创建 Request VO") 6 +@ApiModel("管理后台 - 支付商户信息创建 Request VO")
9 @Data 7 @Data
10 @EqualsAndHashCode(callSuper = true) 8 @EqualsAndHashCode(callSuper = true)
11 @ToString(callSuper = true) 9 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantExcelVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantExcelVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
2 2
3 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; 3 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
4 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; 4 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantExportReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantExportReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
2 2
3 import lombok.*; 3 import lombok.*;
4 import java.util.*; 4 import java.util.*;
@@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
8 8
9 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 9 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
10 10
11 -@ApiModel(value = "支付商户信息 Excel 导出 Request VO", description = "参数和 PayMerchantPageReqVO 是一致的") 11 +@ApiModel(value = "管理后台 - 支付商户信息 Excel 导出 Request VO", description = "参数和 PayMerchantPageReqVO 是一致的")
12 @Data 12 @Data
13 public class PayMerchantExportReqVO { 13 public class PayMerchantExportReqVO {
14 14
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantPageReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantPageReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
2 2
3 import lombok.*; 3 import lombok.*;
4 import java.util.*; 4 import java.util.*;
@@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat; @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
8 8
9 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 9 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
10 10
11 -@ApiModel("支付商户信息分页 Request VO") 11 +@ApiModel("管理后台 - 支付商户信息分页 Request VO")
12 @Data 12 @Data
13 @EqualsAndHashCode(callSuper = true) 13 @EqualsAndHashCode(callSuper = true)
14 @ToString(callSuper = true) 14 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantRespVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantRespVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -8,7 +8,7 @@ import lombok.ToString; @@ -8,7 +8,7 @@ import lombok.ToString;
8 8
9 import java.util.Date; 9 import java.util.Date;
10 10
11 -@ApiModel("支付商户信息 Response VO") 11 +@ApiModel("管理后台 - 支付商户信息 Response VO")
12 @Data 12 @Data
13 @EqualsAndHashCode(callSuper = true) 13 @EqualsAndHashCode(callSuper = true)
14 @ToString(callSuper = true) 14 @ToString(callSuper = true)
@@ -20,11 +20,7 @@ public class PayMerchantRespVO extends PayMerchantBaseVO { @@ -20,11 +20,7 @@ public class PayMerchantRespVO extends PayMerchantBaseVO {
20 @ApiModelProperty(value = "创建时间", required = true) 20 @ApiModelProperty(value = "创建时间", required = true)
21 private Date createTime; 21 private Date createTime;
22 22
23 - /**  
24 - * 商户号  
25 - * 例如说,M233666999  
26 - * 只有新增时插入,不允许修改  
27 - */ 23 + @ApiModelProperty(value = "商户号", required = true, example = "M233666999")
28 private String no; 24 private String no;
29 25
30 } 26 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantUpdateReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantUpdateReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
2 2
3 import lombok.*; 3 import lombok.*;
4 -import java.util.*;  
5 import io.swagger.annotations.*; 4 import io.swagger.annotations.*;
6 import javax.validation.constraints.*; 5 import javax.validation.constraints.*;
7 6
8 -@ApiModel("支付商户信息更新 Request VO") 7 +@ApiModel("管理后台 - 支付商户信息更新 Request VO")
9 @Data 8 @Data
10 @EqualsAndHashCode(callSuper = true) 9 @EqualsAndHashCode(callSuper = true)
11 @ToString(callSuper = true) 10 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/merchant/vo/PayMerchantUpdateStatusReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/vo/merchant/PayMerchantUpdateStatusReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -6,7 +6,7 @@ import lombok.Data; @@ -6,7 +6,7 @@ import lombok.Data;
6 6
7 import javax.validation.constraints.NotNull; 7 import javax.validation.constraints.NotNull;
8 8
9 -@ApiModel("商户更新状态 Request VO") 9 +@ApiModel("管理后台 - 商户更新状态 Request VO")
10 @Data 10 @Data
11 public class PayMerchantUpdateStatusReqVO { 11 public class PayMerchantUpdateStatusReqVO {
12 12
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/PayOrderController.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/PayOrderController.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order; 1 +package cn.iocoder.yudao.module.pay.controller.admin.order;
2 2
3 import cn.hutool.core.collection.CollectionUtil; 3 import cn.hutool.core.collection.CollectionUtil;
4 import cn.hutool.core.util.ObjectUtil; 4 import cn.hutool.core.util.ObjectUtil;
5 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.*;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.convert.order.PayOrderConvert;  
7 -import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService;  
8 -import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService;  
9 -import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderExtensionService;  
10 -import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderService;  
11 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;  
12 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;  
13 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;  
14 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; 5 +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.*;
  6 +import cn.iocoder.yudao.module.pay.convert.order.PayOrderConvert;
  7 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
  9 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
  10 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
  11 +import cn.iocoder.yudao.module.pay.service.merchant.PayAppService;
  12 +import cn.iocoder.yudao.module.pay.service.merchant.PayMerchantService;
  13 +import cn.iocoder.yudao.module.pay.service.order.PayOrderExtensionService;
  14 +import cn.iocoder.yudao.module.pay.service.order.PayOrderService;
15 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 15 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
16 import cn.iocoder.yudao.framework.common.pojo.PageResult; 16 import cn.iocoder.yudao.framework.common.pojo.PageResult;
17 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 17 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
@@ -39,38 +39,18 @@ import java.util.Map; @@ -39,38 +39,18 @@ import java.util.Map;
39 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 39 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
40 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; 40 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
41 41
42 -/**  
43 - * 支付订单 controller 组件  
44 - *  
45 - * @author aquan  
46 - */  
47 -@Api(tags = "支付订单") 42 +@Api(tags = "管理后台 - 支付订单")
48 @RestController 43 @RestController
49 @RequestMapping("/pay/order") 44 @RequestMapping("/pay/order")
50 @Validated 45 @Validated
51 public class PayOrderController { 46 public class PayOrderController {
52 47
53 - /**  
54 - * 订单 service 组件  
55 - */  
56 @Resource 48 @Resource
57 private PayOrderService orderService; 49 private PayOrderService orderService;
58 -  
59 - /**  
60 - * 订单扩展 service 组件  
61 - */  
62 @Resource 50 @Resource
63 private PayOrderExtensionService orderExtensionService; 51 private PayOrderExtensionService orderExtensionService;
64 -  
65 - /**  
66 - * 商户 service 组件  
67 - */  
68 @Resource 52 @Resource
69 private PayMerchantService merchantService; 53 private PayMerchantService merchantService;
70 -  
71 - /**  
72 - * 应用 service 组件  
73 - */  
74 @Resource 54 @Resource
75 private PayAppService appService; 55 private PayAppService appService;
76 56
@@ -88,6 +68,7 @@ public class PayOrderController { @@ -88,6 +68,7 @@ public class PayOrderController {
88 PayAppDO appDO = appService.getApp(order.getAppId()); 68 PayAppDO appDO = appService.getApp(order.getAppId());
89 PayChannelEnum channelEnum = PayChannelEnum.getByCode(order.getChannelCode()); 69 PayChannelEnum channelEnum = PayChannelEnum.getByCode(order.getChannelCode());
90 70
  71 + // TODO @aquan:文案,都是前端 format;
91 PayOrderDetailsRespVO respVO = PayOrderConvert.INSTANCE.orderDetailConvert(order); 72 PayOrderDetailsRespVO respVO = PayOrderConvert.INSTANCE.orderDetailConvert(order);
92 respVO.setMerchantName(ObjectUtil.isNotNull(merchantDO) ? merchantDO.getName() : "未知商户"); 73 respVO.setMerchantName(ObjectUtil.isNotNull(merchantDO) ? merchantDO.getName() : "未知商户");
93 respVO.setAppName(ObjectUtil.isNotNull(appDO) ? appDO.getName() : "未知应用"); 74 respVO.setAppName(ObjectUtil.isNotNull(appDO) ? appDO.getName() : "未知应用");
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderBaseVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderBaseVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; 1 +package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
2 2
3 import io.swagger.annotations.ApiModelProperty; 3 import io.swagger.annotations.ApiModelProperty;
4 import lombok.Data; 4 import lombok.Data;
@@ -10,8 +10,7 @@ import java.util.Date; @@ -10,8 +10,7 @@ import java.util.Date;
10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
11 11
12 /** 12 /**
13 - * 支付订单  
14 - * Base VO,提供给添加、修改、详细的子 VO 使用 13 + * 支付订单 Base VO,提供给添加、修改、详细的子 VO 使用
15 * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 14 * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
16 * 15 *
17 * @author aquan 16 * @author aquan
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderDetailsRespVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderDetailsRespVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; 1 +package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -8,12 +8,7 @@ import lombok.ToString; @@ -8,12 +8,7 @@ import lombok.ToString;
8 8
9 import java.util.Date; 9 import java.util.Date;
10 10
11 -/**  
12 - * 支付订单详细信息,由支付订单和支付订单扩展信息组成  
13 - *  
14 - * @author aquan  
15 - */  
16 -@ApiModel("支付订单详细信息 Response VO") 11 +@ApiModel("管理后台 - 支付订单详细信息 Response VO")
17 @Data 12 @Data
18 @EqualsAndHashCode(callSuper = true) 13 @EqualsAndHashCode(callSuper = true)
19 @ToString(callSuper = true) 14 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExcelVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderExcelVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; 1 +package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
2 2
3 -import cn.iocoder.yudao.module.system.enums.DictTypeConstants;  
4 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; 3 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
5 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; 4 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
  5 +import cn.iocoder.yudao.module.pay.enums.DictTypeConstants;
6 import com.alibaba.excel.annotation.ExcelProperty; 6 import com.alibaba.excel.annotation.ExcelProperty;
7 import lombok.Data; 7 import lombok.Data;
8 8
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderExportReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderExportReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; 1 +package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -9,11 +9,7 @@ import java.util.Date; @@ -9,11 +9,7 @@ import java.util.Date;
9 9
10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
11 11
12 -/**  
13 - * 支付订单 Excel 导出 Request VO  
14 - * @author aquan  
15 - */  
16 -@ApiModel(value = "支付订单 Excel 导出 Request VO", description = "参数和 PayOrderPageReqVO 是一致的") 12 +@ApiModel(value = "管理后台 - 支付订单 Excel 导出 Request VO", description = "参数和 PayOrderPageReqVO 是一致的")
17 @Data 13 @Data
18 public class PayOrderExportReqVO { 14 public class PayOrderExportReqVO {
19 15
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderPageItemRespVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderPageItemRespVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; 1 +package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -8,12 +8,7 @@ import lombok.ToString; @@ -8,12 +8,7 @@ import lombok.ToString;
8 8
9 import java.util.Date; 9 import java.util.Date;
10 10
11 -/**  
12 - * 支付订单分页 Request VO  
13 - *  
14 - * @author aquan  
15 - */  
16 -@ApiModel("支付订单分页 Request VO") 11 +@ApiModel("管理后台 - 支付订单分页 Request VO")
17 @Data 12 @Data
18 @EqualsAndHashCode(callSuper = true) 13 @EqualsAndHashCode(callSuper = true)
19 @ToString(callSuper = true) 14 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderPageReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderPageReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; 1 +package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageParam; 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 import io.swagger.annotations.ApiModel; 4 import io.swagger.annotations.ApiModel;
@@ -12,12 +12,7 @@ import java.util.Date; @@ -12,12 +12,7 @@ import java.util.Date;
12 12
13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
14 14
15 -/**  
16 - * 支付订单分页 Request VO  
17 - *  
18 - * @author aquan  
19 - */  
20 -@ApiModel("支付订单分页 Request VO") 15 +@ApiModel("管理后台 - 支付订单分页 Request VO")
21 @Data 16 @Data
22 @EqualsAndHashCode(callSuper = true) 17 @EqualsAndHashCode(callSuper = true)
23 @ToString(callSuper = true) 18 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/order/PayOrderRespVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderRespVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order; 1 +package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -8,12 +8,7 @@ import lombok.ToString; @@ -8,12 +8,7 @@ import lombok.ToString;
8 8
9 import java.util.Date; 9 import java.util.Date;
10 10
11 -/**  
12 - * 支付订单 Response VO  
13 - *  
14 - * @author aquan  
15 - */  
16 -@ApiModel("支付订单 Response VO") 11 +@ApiModel("管理后台 - 支付订单 Response VO")
17 @Data 12 @Data
18 @EqualsAndHashCode(callSuper = true) 13 @EqualsAndHashCode(callSuper = true)
19 @ToString(callSuper = true) 14 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/PayRefundController.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/PayRefundController.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order; 1 +package cn.iocoder.yudao.module.pay.controller.admin.refund;
2 2
3 import cn.hutool.core.collection.CollectionUtil; 3 import cn.hutool.core.collection.CollectionUtil;
4 import cn.hutool.core.util.ObjectUtil; 4 import cn.hutool.core.util.ObjectUtil;
5 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.*;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.convert.refund.PayRefundConvert;  
7 -import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService;  
8 -import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService;  
9 -import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderService;  
10 -import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayRefundService;  
11 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;  
12 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;  
13 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;  
14 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; 5 +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.*;
  6 +import cn.iocoder.yudao.module.pay.convert.refund.PayRefundConvert;
  7 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
  9 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
  10 +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
  11 +import cn.iocoder.yudao.module.pay.service.merchant.PayAppService;
  12 +import cn.iocoder.yudao.module.pay.service.merchant.PayMerchantService;
  13 +import cn.iocoder.yudao.module.pay.service.order.PayOrderService;
  14 +import cn.iocoder.yudao.module.pay.service.refund.PayRefundService;
15 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 15 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
16 import cn.iocoder.yudao.framework.common.pojo.PageResult; 16 import cn.iocoder.yudao.framework.common.pojo.PageResult;
17 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 17 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
@@ -39,12 +39,7 @@ import java.util.Map; @@ -39,12 +39,7 @@ import java.util.Map;
39 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 39 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
40 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; 40 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
41 41
42 -/**  
43 - * 退款订单 Controller 组件  
44 - *  
45 - * @author aquan  
46 - */  
47 -@Api(tags = "退款订单") 42 +@Api(tags = "管理后台 - 退款订单")
48 @RestController 43 @RestController
49 @RequestMapping("/pay/refund") 44 @RequestMapping("/pay/refund")
50 @Validated 45 @Validated
@@ -52,26 +47,13 @@ public class PayRefundController { @@ -52,26 +47,13 @@ public class PayRefundController {
52 47
53 @Resource 48 @Resource
54 private PayRefundService refundService; 49 private PayRefundService refundService;
55 -  
56 - /**  
57 - * 商户 service 组件  
58 - */  
59 @Resource 50 @Resource
60 private PayMerchantService merchantService; 51 private PayMerchantService merchantService;
61 -  
62 - /**  
63 - * 应用 service 组件  
64 - */  
65 @Resource 52 @Resource
66 private PayAppService appService; 53 private PayAppService appService;
67 -  
68 - /**  
69 - * 订单 service 组件  
70 - */  
71 @Resource 54 @Resource
72 private PayOrderService orderService; 55 private PayOrderService orderService;
73 56
74 -  
75 @GetMapping("/get") 57 @GetMapping("/get")
76 @ApiOperation("获得退款订单") 58 @ApiOperation("获得退款订单")
77 @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) 59 @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundBaseVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundBaseVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
2 2
3 import io.swagger.annotations.ApiModelProperty; 3 import io.swagger.annotations.ApiModelProperty;
4 import lombok.Data; 4 import lombok.Data;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundCreateReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundCreateReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
2 2
3 import lombok.*; 3 import lombok.*;
4 import io.swagger.annotations.*; 4 import io.swagger.annotations.*;
5 5
6 -@ApiModel("退款订单创建 Request VO") 6 +@ApiModel("管理后台 - 退款订单创建 Request VO")
7 @Data 7 @Data
8 @EqualsAndHashCode(callSuper = true) 8 @EqualsAndHashCode(callSuper = true)
9 @ToString(callSuper = true) 9 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundDetailsRespVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundDetailsRespVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -9,12 +9,7 @@ import lombok.ToString; @@ -9,12 +9,7 @@ import lombok.ToString;
9 import javax.validation.constraints.NotNull; 9 import javax.validation.constraints.NotNull;
10 import java.util.Date; 10 import java.util.Date;
11 11
12 -/**  
13 - * 退款订单详情 Response VO  
14 - *  
15 - * @author aquan  
16 - */  
17 -@ApiModel("退款订单详情 Response VO") 12 +@ApiModel("管理后台 - 退款订单详情 Response VO")
18 @Data 13 @Data
19 @EqualsAndHashCode(callSuper = true) 14 @EqualsAndHashCode(callSuper = true)
20 @ToString(callSuper = true) 15 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExcelVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundExcelVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
2 2
3 -import cn.iocoder.yudao.module.system.enums.DictTypeConstants;  
4 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; 3 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
5 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; 4 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
  5 +import cn.iocoder.yudao.module.pay.enums.DictTypeConstants;
6 import com.alibaba.excel.annotation.ExcelProperty; 6 import com.alibaba.excel.annotation.ExcelProperty;
7 import lombok.Data; 7 import lombok.Data;
8 8
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundExportReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundExportReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -9,7 +9,7 @@ import java.util.Date; @@ -9,7 +9,7 @@ import java.util.Date;
9 9
10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 10 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
11 11
12 -@ApiModel(value = "退款订单 Excel 导出 Request VO", description = "参数和 PayRefundPageReqVO 是一致的") 12 +@ApiModel(value = "管理后台 - 退款订单 Excel 导出 Request VO", description = "参数和 PayRefundPageReqVO 是一致的")
13 @Data 13 @Data
14 public class PayRefundExportReqVO { 14 public class PayRefundExportReqVO {
15 15
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundPageItemRespVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundPageItemRespVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -8,11 +8,7 @@ import lombok.ToString; @@ -8,11 +8,7 @@ import lombok.ToString;
8 8
9 import java.util.Date; 9 import java.util.Date;
10 10
11 -/**  
12 - * 退款订单分页查询 Response VO  
13 - * @author aquan  
14 - */  
15 -@ApiModel("退款订单分页查询 Response VO") 11 +@ApiModel("管理后台 - 退款订单分页查询 Response VO")
16 @Data 12 @Data
17 @EqualsAndHashCode(callSuper = true) 13 @EqualsAndHashCode(callSuper = true)
18 @ToString(callSuper = true) 14 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundPageReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundPageReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageParam; 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 import io.swagger.annotations.ApiModel; 4 import io.swagger.annotations.ApiModel;
@@ -12,7 +12,7 @@ import java.util.Date; @@ -12,7 +12,7 @@ import java.util.Date;
12 12
13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
14 14
15 -@ApiModel("退款订单分页 Request VO") 15 +@ApiModel("管理后台 - 退款订单分页 Request VO")
16 @Data 16 @Data
17 @EqualsAndHashCode(callSuper = true) 17 @EqualsAndHashCode(callSuper = true)
18 @ToString(callSuper = true) 18 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundRespVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundRespVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -8,7 +8,7 @@ import lombok.ToString; @@ -8,7 +8,7 @@ import lombok.ToString;
8 8
9 import java.util.Date; 9 import java.util.Date;
10 10
11 -@ApiModel("退款订单 Response VO") 11 +@ApiModel("管理后台 - 退款订单 Response VO")
12 @Data 12 @Data
13 @EqualsAndHashCode(callSuper = true) 13 @EqualsAndHashCode(callSuper = true)
14 @ToString(callSuper = true) 14 @ToString(callSuper = true)
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/controller/order/vo/refund/vo/PayRefundUpdateReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/refund/vo/PayRefundUpdateReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo; 1 +package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
2 2
3 import lombok.*; 3 import lombok.*;
4 import io.swagger.annotations.*; 4 import io.swagger.annotations.*;
5 import javax.validation.constraints.*; 5 import javax.validation.constraints.*;
6 6
7 -@ApiModel("退款订单更新 Request VO") 7 +@ApiModel("管理后台 - 退款订单更新 Request VO")
8 @Data 8 @Data
9 @EqualsAndHashCode(callSuper = true) 9 @EqualsAndHashCode(callSuper = true)
10 @ToString(callSuper = true) 10 @ToString(callSuper = true)
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/PayOrderController.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/AppPayOrderController.java
1 -package cn.iocoder.yudao.userserver.modules.pay.controller.order; 1 +package cn.iocoder.yudao.module.pay.controller.app.order;
2 2
3 import cn.hutool.core.bean.BeanUtil; 3 import cn.hutool.core.bean.BeanUtil;
4 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayOrderCoreService;  
6 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayRefundCoreService;  
7 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitReqDTO;  
8 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitRespDTO;  
9 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
10 import cn.iocoder.yudao.framework.pay.core.client.PayClient; 5 import cn.iocoder.yudao.framework.pay.core.client.PayClient;
11 import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory; 6 import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;
12 import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO; 7 import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO;
13 -import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayOrderSubmitReqVO;  
14 -import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayOrderSubmitRespVO; 8 +import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitReqVO;
  9 +import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitRespVO;
  10 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
  11 +import cn.iocoder.yudao.module.pay.service.order.PayOrderService;
  12 +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitReqDTO;
  13 +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitRespDTO;
  14 +import cn.iocoder.yudao.module.pay.service.refund.PayRefundService;
15 import io.swagger.annotations.Api; 15 import io.swagger.annotations.Api;
16 import io.swagger.annotations.ApiOperation; 16 import io.swagger.annotations.ApiOperation;
17 import lombok.extern.slf4j.Slf4j; 17 import lombok.extern.slf4j.Slf4j;
@@ -21,52 +21,52 @@ import org.springframework.web.bind.annotation.*; @@ -21,52 +21,52 @@ import org.springframework.web.bind.annotation.*;
21 import javax.annotation.Resource; 21 import javax.annotation.Resource;
22 import java.util.Map; 22 import java.util.Map;
23 23
24 -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_CHANNEL_CLIENT_NOT_FOUND;  
25 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 24 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
26 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 25 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
27 import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; 26 import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
  27 +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*;
28 28
29 -@Api(tags = "支付订单") 29 +@Api(tags = "用户 APP - 支付订单")
30 @RestController 30 @RestController
31 @RequestMapping("/pay/order") 31 @RequestMapping("/pay/order")
32 @Validated 32 @Validated
33 @Slf4j 33 @Slf4j
34 -public class PayOrderController { 34 +public class AppPayOrderController {
35 35
36 @Resource 36 @Resource
37 - private PayOrderCoreService payOrderCoreService; 37 + private PayOrderService orderService;
38 @Resource 38 @Resource
39 - private PayRefundCoreService payRefundCoreService; 39 + private PayRefundService refundService;
40 40
41 @Resource 41 @Resource
42 private PayClientFactory payClientFactory; 42 private PayClientFactory payClientFactory;
43 43
44 -  
45 @PostMapping("/submit") 44 @PostMapping("/submit")
46 @ApiOperation("提交支付订单") 45 @ApiOperation("提交支付订单")
47 // @PreAuthenticated // TODO 暂时不加登陆验证,前端暂时没做好 46 // @PreAuthenticated // TODO 暂时不加登陆验证,前端暂时没做好
48 - public CommonResult<PayOrderSubmitRespVO> submitPayOrder(@RequestBody PayOrderSubmitReqVO reqVO) { 47 + public CommonResult<AppPayOrderSubmitRespVO> submitPayOrder(@RequestBody AppPayOrderSubmitReqVO reqVO) {
49 // 获得订单 48 // 获得订单
50 - PayOrderDO payOrder = payOrderCoreService.getPayOrder(reqVO.getId()); 49 + PayOrderDO payOrder = orderService.getOrder(reqVO.getId());
51 50
52 // 提交支付 51 // 提交支付
53 PayOrderSubmitReqDTO reqDTO = new PayOrderSubmitReqDTO(); 52 PayOrderSubmitReqDTO reqDTO = new PayOrderSubmitReqDTO();
54 BeanUtil.copyProperties(reqVO, reqDTO, false); 53 BeanUtil.copyProperties(reqVO, reqDTO, false);
55 reqDTO.setUserIp(getClientIP()); 54 reqDTO.setUserIp(getClientIP());
56 reqDTO.setAppId(payOrder.getAppId()); 55 reqDTO.setAppId(payOrder.getAppId());
57 - PayOrderSubmitRespDTO respDTO = payOrderCoreService.submitPayOrder(reqDTO); 56 + PayOrderSubmitRespDTO respDTO = orderService.submitPayOrder(reqDTO);
58 57
59 // 拼接返回 58 // 拼接返回
60 - return success(PayOrderSubmitRespVO.builder().invokeResponse(respDTO.getInvokeResponse()).build()); 59 + return success(AppPayOrderSubmitRespVO.builder().invokeResponse(respDTO.getInvokeResponse()).build());
61 } 60 }
62 61
63 // ========== 支付渠道的回调 ========== 62 // ========== 支付渠道的回调 ==========
  63 + // TODO @芋艿:是不是放到 notify 模块更合适
64 //TODO 芋道源码 换成了统一的地址了 /notify/{channelId},测试通过可以删除 64 //TODO 芋道源码 换成了统一的地址了 /notify/{channelId},测试通过可以删除
65 @PostMapping("/notify/wx-pub/{channelId}") 65 @PostMapping("/notify/wx-pub/{channelId}")
66 @ApiOperation("通知微信公众号支付的结果") 66 @ApiOperation("通知微信公众号支付的结果")
67 public String notifyWxPayOrder(@PathVariable("channelId") Long channelId, 67 public String notifyWxPayOrder(@PathVariable("channelId") Long channelId,
68 @RequestBody String xmlData) throws Exception { 68 @RequestBody String xmlData) throws Exception {
69 - payOrderCoreService.notifyPayOrder(channelId, PayNotifyDataDTO.builder().body(xmlData).build()); 69 + orderService.notifyPayOrder(channelId, PayNotifyDataDTO.builder().body(xmlData).build());
70 return "success"; 70 return "success";
71 } 71 }
72 72
@@ -110,12 +110,12 @@ public class PayOrderController { @@ -110,12 +110,12 @@ public class PayOrderController {
110 110
111 // 如果是退款,则发起退款通知 111 // 如果是退款,则发起退款通知
112 if (payClient.isRefundNotify(notifyData)) { 112 if (payClient.isRefundNotify(notifyData)) {
113 - payRefundCoreService.notifyPayRefund(channelId, PayNotifyDataDTO.builder().params(params).body(originData).build()); 113 + refundService.notifyPayRefund(channelId, PayNotifyDataDTO.builder().params(params).body(originData).build());
114 return "success"; 114 return "success";
115 } 115 }
116 116
117 // 如果非退款,则发起支付通知 117 // 如果非退款,则发起支付通知
118 - payOrderCoreService.notifyPayOrder(channelId, PayNotifyDataDTO.builder().params(params).body(originData).build()); 118 + orderService.notifyPayOrder(channelId, PayNotifyDataDTO.builder().params(params).body(originData).build());
119 return "success"; 119 return "success";
120 } 120 }
121 121
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/vo/AppPayOrderSubmitReqVO.java
1 -package cn.iocoder.yudao.userserver.modules.pay.controller.order.vo; 1 +package cn.iocoder.yudao.module.pay.controller.app.order.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -9,10 +9,10 @@ import javax.validation.constraints.NotEmpty; @@ -9,10 +9,10 @@ import javax.validation.constraints.NotEmpty;
9 import javax.validation.constraints.NotNull; 9 import javax.validation.constraints.NotNull;
10 import java.util.Map; 10 import java.util.Map;
11 11
12 -@ApiModel("支付订单提交 Request VO") 12 +@ApiModel("用户 APP - 支付订单提交 Request VO")
13 @Data 13 @Data
14 @Accessors(chain = true) 14 @Accessors(chain = true)
15 -public class PayOrderSubmitReqVO { 15 +public class AppPayOrderSubmitReqVO {
16 16
17 @ApiModelProperty(value = "支付单编号", required = true, example = "1024") 17 @ApiModelProperty(value = "支付单编号", required = true, example = "1024")
18 @NotNull(message = "支付单编号不能为空") 18 @NotNull(message = "支付单编号不能为空")
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitRespVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/vo/AppPayOrderSubmitRespVO.java
1 -package cn.iocoder.yudao.userserver.modules.pay.controller.order.vo; 1 +package cn.iocoder.yudao.module.pay.controller.app.order.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import lombok.AllArgsConstructor; 4 import lombok.AllArgsConstructor;
@@ -7,13 +7,13 @@ import lombok.Data; @@ -7,13 +7,13 @@ import lombok.Data;
7 import lombok.NoArgsConstructor; 7 import lombok.NoArgsConstructor;
8 import lombok.experimental.Accessors; 8 import lombok.experimental.Accessors;
9 9
10 -@ApiModel("支付订单提交 Response VO") 10 +@ApiModel("用户 APP - 支付订单提交 Response VO")
11 @Data 11 @Data
12 @Accessors(chain = true) 12 @Accessors(chain = true)
13 @Builder 13 @Builder
14 @NoArgsConstructor 14 @NoArgsConstructor
15 @AllArgsConstructor 15 @AllArgsConstructor
16 -public class PayOrderSubmitRespVO { 16 +public class AppPayOrderSubmitRespVO {
17 17
18 /** 18 /**
19 * 调用支付渠道的响应结果 19 * 调用支付渠道的响应结果
yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.module.pay.controller.app;
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/PayRefundController.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/AppPayRefundController.java
1 -package cn.iocoder.yudao.userserver.modules.pay.controller.order; 1 +package cn.iocoder.yudao.module.pay.controller.app.refund;
2 2
3 import cn.hutool.core.util.StrUtil; 3 import cn.hutool.core.util.StrUtil;
4 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayRefundCoreService;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundReqDTO;  
6 -import cn.iocoder.yudao.coreservice.modules.pay.util.PaySeqUtils;  
7 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
8 -import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayRefundReqVO;  
9 -import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayRefundRespVO;  
10 -import cn.iocoder.yudao.userserver.modules.pay.convert.order.PayRefundConvert; 5 +import cn.iocoder.yudao.module.pay.controller.app.refund.vo.AppPayRefundReqVO;
  6 +import cn.iocoder.yudao.module.pay.controller.app.refund.vo.AppPayRefundRespVO;
  7 +import cn.iocoder.yudao.module.pay.convert.refund.PayRefundConvert;
  8 +import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundReqDTO;
  9 +import cn.iocoder.yudao.module.pay.service.refund.PayRefundService;
  10 +import cn.iocoder.yudao.module.pay.util.PaySeqUtils;
11 import io.swagger.annotations.Api; 11 import io.swagger.annotations.Api;
12 import io.swagger.annotations.ApiOperation; 12 import io.swagger.annotations.ApiOperation;
13 import lombok.extern.slf4j.Slf4j; 13 import lombok.extern.slf4j.Slf4j;
@@ -19,28 +19,29 @@ import org.springframework.web.bind.annotation.RestController; @@ -19,28 +19,29 @@ import org.springframework.web.bind.annotation.RestController;
19 19
20 import javax.annotation.Resource; 20 import javax.annotation.Resource;
21 21
  22 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
22 import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; 23 import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
23 24
24 -@Api(tags = "退款订单") 25 +@Api(tags = "用户 APP - 退款订单")
25 @RestController 26 @RestController
26 -@RequestMapping("/pay/order") 27 +@RequestMapping("/pay/refund")
27 @Validated 28 @Validated
28 @Slf4j 29 @Slf4j
29 -public class PayRefundController { 30 +public class AppPayRefundController {
30 31
31 @Resource 32 @Resource
32 - private PayRefundCoreService payRefundCoreService; 33 + private PayRefundService refundService;
33 34
34 @PostMapping("/refund") 35 @PostMapping("/refund")
35 @ApiOperation("提交退款订单") 36 @ApiOperation("提交退款订单")
36 - public CommonResult<PayRefundRespVO> submitRefundOrder(@RequestBody PayRefundReqVO reqVO){ 37 + public CommonResult<AppPayRefundRespVO> submitRefundOrder(@RequestBody AppPayRefundReqVO reqVO){
37 PayRefundReqDTO req = PayRefundConvert.INSTANCE.convert(reqVO); 38 PayRefundReqDTO req = PayRefundConvert.INSTANCE.convert(reqVO);
38 req.setUserIp(getClientIP()); 39 req.setUserIp(getClientIP());
39 - //TODO 测试暂时模拟生成商户退款订单 40 + // TODO 测试暂时模拟生成商户退款订单
40 if(StrUtil.isEmpty(reqVO.getMerchantRefundId())) { 41 if(StrUtil.isEmpty(reqVO.getMerchantRefundId())) {
41 req.setMerchantRefundId(PaySeqUtils.genMerchantRefundNo()); 42 req.setMerchantRefundId(PaySeqUtils.genMerchantRefundNo());
42 } 43 }
43 - return CommonResult.success( PayRefundConvert.INSTANCE.convert(payRefundCoreService.submitRefundOrder(req))); 44 + return success(PayRefundConvert.INSTANCE.convert(refundService.submitRefundOrder(req)));
44 } 45 }
45 46
46 } 47 }
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayRefundReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/vo/AppPayRefundReqVO.java
1 -package cn.iocoder.yudao.userserver.modules.pay.controller.order.vo; 1 +package cn.iocoder.yudao.module.pay.controller.app.refund.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
@@ -8,11 +8,11 @@ import lombok.NoArgsConstructor; @@ -8,11 +8,11 @@ import lombok.NoArgsConstructor;
8 8
9 import javax.validation.constraints.NotEmpty; 9 import javax.validation.constraints.NotEmpty;
10 10
11 -@ApiModel("退款订单 Req VO") 11 +@ApiModel("用户 APP - 退款订单 Req VO")
12 @Data 12 @Data
13 @NoArgsConstructor 13 @NoArgsConstructor
14 @AllArgsConstructor 14 @AllArgsConstructor
15 -public class PayRefundReqVO { 15 +public class AppPayRefundReqVO {
16 16
17 @ApiModelProperty(value = "支付订单编号自增", required = true, example = "10") 17 @ApiModelProperty(value = "支付订单编号自增", required = true, example = "10")
18 @NotEmpty(message = "支付订单编号自增") 18 @NotEmpty(message = "支付订单编号自增")
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayRefundRespVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/vo/AppPayRefundRespVO.java
1 -package cn.iocoder.yudao.userserver.modules.pay.controller.order.vo; 1 +package cn.iocoder.yudao.module.pay.controller.app.refund.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
4 import lombok.AllArgsConstructor; 5 import lombok.AllArgsConstructor;
5 import lombok.Builder; 6 import lombok.Builder;
6 import lombok.Data; 7 import lombok.Data;
7 import lombok.NoArgsConstructor; 8 import lombok.NoArgsConstructor;
8 import lombok.experimental.Accessors; 9 import lombok.experimental.Accessors;
9 10
10 -@ApiModel("提交退款订单 Response VO") 11 +@ApiModel("用户 APP - 提交退款订单 Response VO")
11 @Data 12 @Data
12 @Accessors(chain = true) 13 @Accessors(chain = true)
13 @Builder 14 @Builder
14 @NoArgsConstructor 15 @NoArgsConstructor
15 @AllArgsConstructor 16 @AllArgsConstructor
16 -public class PayRefundRespVO { 17 +public class AppPayRefundRespVO {
17 18
18 - /**  
19 - * 支付退款单编号, 自增  
20 - */ 19 + @ApiModelProperty(value = "退款订单编号", required = true, example = "10")
21 private Long refundId; 20 private Long refundId;
  21 +
22 } 22 }
yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/controller/package-info.java 0 → 100644
  1 +/**
  2 + * 提供 RESTful API 给前端:
  3 + * 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目
  4 + * 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分
  5 + */
  6 +package cn.iocoder.yudao.module.pay.controller;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/app/PayAppConvert.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/app/PayAppConvert.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.convert.app; 1 +package cn.iocoder.yudao.module.pay.convert.app;
2 2
3 import java.util.*; 3 import java.util.*;
4 4
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;  
6 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;  
7 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 6
  7 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.*;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
  9 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
9 import org.mapstruct.Mapper; 10 import org.mapstruct.Mapper;
10 import org.mapstruct.factory.Mappers; 11 import org.mapstruct.factory.Mappers;
11 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.*;  
12 12
13 /** 13 /**
14 * 支付应用信息 Convert 14 * 支付应用信息 Convert
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/channel/PayChannelConvert.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/channel/PayChannelConvert.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.convert.channel; 1 +package cn.iocoder.yudao.module.pay.convert.channel;
2 2
3 import java.util.*; 3 import java.util.*;
4 4
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;  
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 6
8 -import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig; 7 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelCreateReqVO;
  8 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelExcelVO;
  9 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelRespVO;
  10 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelUpdateReqVO;
  11 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
9 import org.mapstruct.Mapper; 12 import org.mapstruct.Mapper;
10 import org.mapstruct.Mapping; 13 import org.mapstruct.Mapping;
11 import org.mapstruct.factory.Mappers; 14 import org.mapstruct.factory.Mappers;
12 -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.*;  
13 -  
14 -/**  
15 - * 支付渠道  
16 - Convert  
17 - *  
18 - * @author 芋艿  
19 - */ 15 +
20 @Mapper 16 @Mapper
21 public interface PayChannelConvert { 17 public interface PayChannelConvert {
22 18
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/merchant/PayMerchantConvert.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/merchant/PayMerchantConvert.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.convert.merchant; 1 +package cn.iocoder.yudao.module.pay.convert.merchant;
2 2
3 import java.util.*; 3 import java.util.*;
4 4
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;  
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 6
  7 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantCreateReqVO;
  8 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantExcelVO;
  9 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantRespVO;
  10 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantUpdateReqVO;
  11 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
8 import org.mapstruct.Mapper; 12 import org.mapstruct.Mapper;
9 import org.mapstruct.factory.Mappers; 13 import org.mapstruct.factory.Mappers;
10 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.*;  
11 14
12 -/**  
13 - * 支付商户信息 Convert  
14 - *  
15 - * @author 芋艿  
16 - */  
17 @Mapper 15 @Mapper
18 public interface PayMerchantConvert { 16 public interface PayMerchantConvert {
19 17
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/order/PayOrderConvert.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/order/PayOrderConvert.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.convert.order;  
2 -  
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderDetailsRespVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExcelVO;  
5 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageItemRespVO;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderRespVO;  
7 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;  
8 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; 1 +package cn.iocoder.yudao.module.pay.convert.order;
  2 +
  3 +import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
  4 +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderDetailsRespVO;
  5 +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExcelVO;
  6 +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageItemRespVO;
  7 +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderRespVO;
9 import cn.iocoder.yudao.framework.common.pojo.PageResult; 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  9 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
  10 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
  11 +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderCreateReqDTO;
  12 +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitReqDTO;
10 import org.mapstruct.Mapper; 13 import org.mapstruct.Mapper;
11 import org.mapstruct.factory.Mappers; 14 import org.mapstruct.factory.Mappers;
12 15
@@ -24,24 +27,10 @@ public interface PayOrderConvert { @@ -24,24 +27,10 @@ public interface PayOrderConvert {
24 27
25 PayOrderConvert INSTANCE = Mappers.getMapper(PayOrderConvert.class); 28 PayOrderConvert INSTANCE = Mappers.getMapper(PayOrderConvert.class);
26 29
27 -  
28 -  
29 PayOrderRespVO convert(PayOrderDO bean); 30 PayOrderRespVO convert(PayOrderDO bean);
30 31
31 - /**  
32 - * 订单DO 转换为 详细订单 RespVO  
33 - *  
34 - * @param bean 订单DO  
35 - * @return 详细订单 RespVO  
36 - */  
37 PayOrderDetailsRespVO orderDetailConvert(PayOrderDO bean); 32 PayOrderDetailsRespVO orderDetailConvert(PayOrderDO bean);
38 33
39 - /**  
40 - * 订单扩展DO 转换为 详细订单扩展 RespVO  
41 - *  
42 - * @param bean 订单扩展DO  
43 - * @return 详细订单扩展 RespVO  
44 - */  
45 PayOrderDetailsRespVO.PayOrderExtension orderDetailExtensionConvert(PayOrderExtensionDO bean); 34 PayOrderDetailsRespVO.PayOrderExtension orderDetailExtensionConvert(PayOrderExtensionDO bean);
46 35
47 List<PayOrderRespVO> convertList(List<PayOrderDO> list); 36 List<PayOrderRespVO> convertList(List<PayOrderDO> list);
@@ -58,12 +47,6 @@ public interface PayOrderConvert { @@ -58,12 +47,6 @@ public interface PayOrderConvert {
58 */ 47 */
59 PayOrderPageItemRespVO pageConvertItemPage(PayOrderDO bean); 48 PayOrderPageItemRespVO pageConvertItemPage(PayOrderDO bean);
60 49
61 - /**  
62 - * 订单DO 转 订单导出excel VO  
63 - *  
64 - * @param bean 订单 DO  
65 - * @return 订单导出excel VO  
66 - */  
67 default PayOrderExcelVO excelConvert(PayOrderDO bean) { 50 default PayOrderExcelVO excelConvert(PayOrderDO bean) {
68 if (bean == null) { 51 if (bean == null) {
69 return null; 52 return null;
@@ -101,4 +84,12 @@ public interface PayOrderConvert { @@ -101,4 +84,12 @@ public interface PayOrderConvert {
101 84
102 return payOrderExcelVO; 85 return payOrderExcelVO;
103 } 86 }
  87 +
  88 +
  89 + PayOrderDO convert(PayOrderCreateReqDTO bean);
  90 +
  91 + PayOrderExtensionDO convert(PayOrderSubmitReqDTO bean);
  92 +
  93 + PayOrderUnifiedReqDTO convert2(PayOrderSubmitReqDTO bean);
  94 +
104 } 95 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/package-info.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/package-info.java
@@ -3,4 +3,4 @@ @@ -3,4 +3,4 @@
3 * 3 *
4 * 目前使用 MapStruct 框架 4 * 目前使用 MapStruct 框架
5 */ 5 */
6 -package cn.iocoder.yudao.adminserver.modules.pay.convert; 6 +package cn.iocoder.yudao.module.pay.convert;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/refund/PayRefundConvert.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/refund/PayRefundConvert.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.convert.refund; 1 +package cn.iocoder.yudao.module.pay.convert.refund;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.*;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;  
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.*;
  5 +import cn.iocoder.yudao.module.pay.controller.app.refund.vo.AppPayRefundReqVO;
  6 +import cn.iocoder.yudao.module.pay.controller.app.refund.vo.AppPayRefundRespVO;
  7 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
  9 +import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundReqDTO;
  10 +import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundRespDTO;
6 import org.mapstruct.Mapper; 11 import org.mapstruct.Mapper;
  12 +import org.mapstruct.Mapping;
  13 +import org.mapstruct.Mappings;
7 import org.mapstruct.factory.Mappers; 14 import org.mapstruct.factory.Mappers;
8 15
9 import java.math.BigDecimal; 16 import java.math.BigDecimal;
@@ -87,4 +94,16 @@ public interface PayRefundConvert { @@ -87,4 +94,16 @@ public interface PayRefundConvert {
87 return payRefundExcelVO; 94 return payRefundExcelVO;
88 } 95 }
89 96
  97 + //TODO 太多需要处理了, 暂时不用
  98 + @Mappings(value = {
  99 + @Mapping(source = "amount", target = "payAmount"),
  100 + @Mapping(source = "id", target = "orderId"),
  101 + @Mapping(target = "status",ignore = true)
  102 + })
  103 + PayRefundDO convert(PayOrderDO orderDO);
  104 +
  105 + PayRefundReqDTO convert(AppPayRefundReqVO bean);
  106 +
  107 + AppPayRefundRespVO convert(PayRefundRespDTO bean);
  108 +
90 } 109 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayAppDO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayAppDO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant; 1 +package cn.iocoder.yudao.module.pay.dal.dataobject.merchant;
2 2
3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayChannelDO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayChannelDO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant; 1 +package cn.iocoder.yudao.module.pay.dal.dataobject.merchant;
2 2
3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayMerchantDO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/merchant/PayMerchantDO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant; 1 +package cn.iocoder.yudao.module.pay.dal.dataobject.merchant;
2 2
3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/notify/PayNotifyLogDO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/notify/PayNotifyLogDO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify; 1 +package cn.iocoder.yudao.module.pay.dal.dataobject.notify;
2 2
3 -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum; 3 +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyStatusEnum;
4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
5 import com.baomidou.mybatisplus.annotation.TableName; 5 import com.baomidou.mybatisplus.annotation.TableName;
6 import lombok.*; 6 import lombok.*;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/notify/PayNotifyTaskDO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/notify/PayNotifyTaskDO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify; 1 +package cn.iocoder.yudao.module.pay.dal.dataobject.notify;
2 2
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;  
6 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;  
7 -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum;  
8 -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum; 3 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
  4 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
  5 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
  6 +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
  7 +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyStatusEnum;
  8 +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyTypeEnum;
9 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 9 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
10 import com.baomidou.mybatisplus.annotation.TableName; 10 import com.baomidou.mybatisplus.annotation.TableName;
11 import lombok.Data; 11 import lombok.Data;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayOrderDO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/order/PayOrderDO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order; 1 +package cn.iocoder.yudao.module.pay.dal.dataobject.order;
2 2
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;  
6 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum;  
7 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundTypeEnum;  
8 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum; 3 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
  4 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
  5 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
  6 +import cn.iocoder.yudao.module.pay.enums.order.PayOrderNotifyStatusEnum;
  7 +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundTypeEnum;
  8 +import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum;
9 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 9 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
10 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; 10 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
11 import com.baomidou.mybatisplus.annotation.TableName; 11 import com.baomidou.mybatisplus.annotation.TableName;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayOrderExtensionDO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/order/PayOrderExtensionDO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order; 1 +package cn.iocoder.yudao.module.pay.dal.dataobject.order;
2 2
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum; 3 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
  4 +import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum;
5 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 5 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
6 import com.baomidou.mybatisplus.annotation.TableField; 6 import com.baomidou.mybatisplus.annotation.TableField;
7 import com.baomidou.mybatisplus.annotation.TableName; 7 import com.baomidou.mybatisplus.annotation.TableName;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayRefundDO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/refund/PayRefundDO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order;  
2 -  
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;  
6 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum;  
7 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundTypeEnum; 1 +package cn.iocoder.yudao.module.pay.dal.dataobject.refund;
  2 +
  3 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
  4 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
  5 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
  6 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
  7 +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum;
  8 +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundTypeEnum;
8 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; 9 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
9 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 10 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
10 import com.baomidou.mybatisplus.annotation.TableId; 11 import com.baomidou.mybatisplus.annotation.TableId;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/app/PayAppMapper.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayAppMapper.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.app; 1 +package cn.iocoder.yudao.module.pay.dal.mysql.merchant;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppExportReqVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppPageReqVO;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; 3 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppExportReqVO;
  4 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppPageReqVO;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 6 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
8 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; 7 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
9 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 9 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
10 import org.apache.ibatis.annotations.Mapper; 10 import org.apache.ibatis.annotations.Mapper;
11 11
12 import java.util.Collection; 12 import java.util.Collection;
13 import java.util.List; 13 import java.util.List;
14 14
15 -/**  
16 - * 支付应用信息 Mapper  
17 - *  
18 - * @author aquan  
19 - */  
20 @Mapper 15 @Mapper
21 public interface PayAppMapper extends BaseMapperX<PayAppDO> { 16 public interface PayAppMapper extends BaseMapperX<PayAppDO> {
22 17
23 - /**  
24 - * 分页查询  
25 - *  
26 - * @param reqVO 支付应用信息分页查询条件  
27 - * @param merchantIds 商户 ID 集合  
28 - * @return 支付应用信息  
29 - */  
30 default PageResult<PayAppDO> selectPage(PayAppPageReqVO reqVO, Collection<Long> merchantIds) { 18 default PageResult<PayAppDO> selectPage(PayAppPageReqVO reqVO, Collection<Long> merchantIds) {
31 return selectPage(reqVO, new QueryWrapperX<PayAppDO>() 19 return selectPage(reqVO, new QueryWrapperX<PayAppDO>()
32 .likeIfPresent("name", reqVO.getName()) 20 .likeIfPresent("name", reqVO.getName())
@@ -39,13 +27,6 @@ public interface PayAppMapper extends BaseMapperX&lt;PayAppDO&gt; { @@ -39,13 +27,6 @@ public interface PayAppMapper extends BaseMapperX&lt;PayAppDO&gt; {
39 .orderByDesc("id")); 27 .orderByDesc("id"));
40 } 28 }
41 29
42 - /**  
43 - * 列表查询  
44 - *  
45 - * @param reqVO 支付应用信息 Excel 导出查询条件  
46 - * @param merchantIds 商户 ID 集合  
47 - * @return 支付应用信息  
48 - */  
49 default List<PayAppDO> selectList(PayAppExportReqVO reqVO, Collection<Long> merchantIds) { 30 default List<PayAppDO> selectList(PayAppExportReqVO reqVO, Collection<Long> merchantIds) {
50 return selectList(new QueryWrapperX<PayAppDO>() 31 return selectList(new QueryWrapperX<PayAppDO>()
51 .likeIfPresent("name", reqVO.getName()) 32 .likeIfPresent("name", reqVO.getName())
@@ -58,24 +39,13 @@ public interface PayAppMapper extends BaseMapperX&lt;PayAppDO&gt; { @@ -58,24 +39,13 @@ public interface PayAppMapper extends BaseMapperX&lt;PayAppDO&gt; {
58 .orderByDesc("id")); 39 .orderByDesc("id"));
59 } 40 }
60 41
61 - /**  
62 - * 根据 商户 ID 查询支付应用信息  
63 - *  
64 - * @param merchantId 商户 ID  
65 - * @return 支付应用信息列表  
66 - */  
67 default List<PayAppDO> getListByMerchantId(String merchantId) { 42 default List<PayAppDO> getListByMerchantId(String merchantId) {
68 return selectList(new LambdaQueryWrapper<PayAppDO>() 43 return selectList(new LambdaQueryWrapper<PayAppDO>()
69 .select(PayAppDO::getId, PayAppDO::getName) 44 .select(PayAppDO::getId, PayAppDO::getName)
70 .eq(PayAppDO::getMerchantId, merchantId)); 45 .eq(PayAppDO::getMerchantId, merchantId));
71 } 46 }
72 47
73 - /**  
74 - * 根据商户号统计存在的支付应用数量  
75 - *  
76 - * @param merchantId 商户 ID  
77 - * @return 支付应用数量  
78 - */ 48 + // TODO @aquan:方法名补充 ByMerchantId
79 default Long selectCount(Long merchantId) { 49 default Long selectCount(Long merchantId) {
80 return selectCount(new LambdaQueryWrapper<PayAppDO>().eq(PayAppDO::getMerchantId, merchantId)); 50 return selectCount(new LambdaQueryWrapper<PayAppDO>().eq(PayAppDO::getMerchantId, merchantId));
81 } 51 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/channel/PayChannelMapper.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayChannelMapper.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.channel; 1 +package cn.iocoder.yudao.module.pay.dal.mysql.merchant;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelExportReqVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelPageReqVO;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;  
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;  
8 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; 4 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
  5 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelExportReqVO;
  6 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelPageReqVO;
  7 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
  8 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
9 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 9 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
10 import org.apache.ibatis.annotations.Mapper; 10 import org.apache.ibatis.annotations.Mapper;
  11 +import org.apache.ibatis.annotations.Select;
11 12
12 import java.util.Collection; 13 import java.util.Collection;
  14 +import java.util.Date;
13 import java.util.List; 15 import java.util.List;
14 16
15 -/**  
16 - * 支付渠道  
17 - Mapper  
18 - *  
19 - * @author 芋艿  
20 - */  
21 @Mapper 17 @Mapper
22 public interface PayChannelMapper extends BaseMapperX<PayChannelDO> { 18 public interface PayChannelMapper extends BaseMapperX<PayChannelDO> {
23 19
  20 + default PayChannelDO selectByAppIdAndCode(Long appId, String code) {
  21 + return selectOne(PayChannelDO::getAppId, appId, PayChannelDO::getCode, code);
  22 + }
  23 +
  24 + @Select("SELECT id FROM pay_channel WHERE update_time > #{maxUpdateTime} LIMIT 1")
  25 + Long selectExistsByUpdateTimeAfter(Date maxUpdateTime);
  26 +
24 default PageResult<PayChannelDO> selectPage(PayChannelPageReqVO reqVO) { 27 default PageResult<PayChannelDO> selectPage(PayChannelPageReqVO reqVO) {
25 return selectPage(reqVO, new QueryWrapperX<PayChannelDO>() 28 return selectPage(reqVO, new QueryWrapperX<PayChannelDO>()
26 .eqIfPresent("code", reqVO.getCode()) 29 .eqIfPresent("code", reqVO.getCode())
@@ -48,11 +51,11 @@ public interface PayChannelMapper extends BaseMapperX&lt;PayChannelDO&gt; { @@ -48,11 +51,11 @@ public interface PayChannelMapper extends BaseMapperX&lt;PayChannelDO&gt; {
48 } 51 }
49 52
50 /** 53 /**
51 - * 根据条件获取通道数量 54 + * 根据条件获取渠道数量
52 * 55 *
53 * @param merchantId 商户编号 56 * @param merchantId 商户编号
54 * @param appid 应用编号 57 * @param appid 应用编号
55 - * @param code 通道编码 58 + * @param code 渠道编码
56 * @return 数量 59 * @return 数量
57 */ 60 */
58 default Integer selectCount(Long merchantId, Long appid, String code) { 61 default Integer selectCount(Long merchantId, Long appid, String code) {
@@ -63,11 +66,11 @@ public interface PayChannelMapper extends BaseMapperX&lt;PayChannelDO&gt; { @@ -63,11 +66,11 @@ public interface PayChannelMapper extends BaseMapperX&lt;PayChannelDO&gt; {
63 } 66 }
64 67
65 /** 68 /**
66 - * 根据条件获取通道 69 + * 根据条件获取渠道
67 * 70 *
68 * @param merchantId 商户编号 71 * @param merchantId 商户编号
69 - * @param appid 应用编号  
70 - * @param code 通道编码 72 + * @param appid 应用编号 // TODO @aquan:appid =》appId
  73 + * @param code 渠道编码
71 * @return 数量 74 * @return 数量
72 */ 75 */
73 default PayChannelDO selectOne(Long merchantId, Long appid, String code) { 76 default PayChannelDO selectOne(Long merchantId, Long appid, String code) {
@@ -78,6 +81,7 @@ public interface PayChannelMapper extends BaseMapperX&lt;PayChannelDO&gt; { @@ -78,6 +81,7 @@ public interface PayChannelMapper extends BaseMapperX&lt;PayChannelDO&gt; {
78 )); 81 ));
79 } 82 }
80 83
  84 + // TODO @aquan:select 命名
81 /** 85 /**
82 * 根据支付应用ID集合获得支付渠道列表 86 * 根据支付应用ID集合获得支付渠道列表
83 * 87 *
@@ -88,4 +92,5 @@ public interface PayChannelMapper extends BaseMapperX&lt;PayChannelDO&gt; { @@ -88,4 +92,5 @@ public interface PayChannelMapper extends BaseMapperX&lt;PayChannelDO&gt; {
88 return this.selectList(new QueryWrapper<PayChannelDO>().lambda() 92 return this.selectList(new QueryWrapper<PayChannelDO>().lambda()
89 .in(PayChannelDO::getAppId, appIds)); 93 .in(PayChannelDO::getAppId, appIds));
90 } 94 }
  95 +
91 } 96 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/merchant/PayMerchantMapper.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayMerchantMapper.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant; 1 +package cn.iocoder.yudao.module.pay.dal.mysql.merchant;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantExportReqVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantPageReqVO;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; 3 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantExportReqVO;
  4 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantPageReqVO;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 6 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
8 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; 7 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
9 import org.apache.ibatis.annotations.Mapper; 9 import org.apache.ibatis.annotations.Mapper;
10 10
11 import java.util.List; 11 import java.util.List;
12 12
13 -/**  
14 - * 支付商户信息 Mapper  
15 - *  
16 - * @author 芋艿  
17 - */  
18 @Mapper 13 @Mapper
19 public interface PayMerchantMapper extends BaseMapperX<PayMerchantDO> { 14 public interface PayMerchantMapper extends BaseMapperX<PayMerchantDO> {
20 15
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/notify/PayNotifyLogCoreMapper.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/notify/PayNotifyLogCoreMapper.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify; 1 +package cn.iocoder.yudao.module.pay.dal.mysql.notify;
2 2
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify.PayNotifyLogDO; 3 +import cn.iocoder.yudao.module.pay.dal.dataobject.notify.PayNotifyLogDO;
4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 import org.apache.ibatis.annotations.Mapper; 5 import org.apache.ibatis.annotations.Mapper;
6 6
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/notify/PayNotifyTaskCoreMapper.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/notify/PayNotifyTaskCoreMapper.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify; 1 +package cn.iocoder.yudao.module.pay.dal.mysql.notify;
2 2
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify.PayNotifyTaskDO;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum; 3 +import cn.iocoder.yudao.module.pay.dal.dataobject.notify.PayNotifyTaskDO;
  4 +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyStatusEnum;
5 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 5 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
6 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 6 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
7 import org.apache.ibatis.annotations.Mapper; 7 import org.apache.ibatis.annotations.Mapper;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderExtensionCoreMapper.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderExtensionMapper.java 100644 → 100755
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order; 1 +package cn.iocoder.yudao.module.pay.dal.mysql.order;
2 2
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;  
4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 3 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  4 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
5 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 5 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
6 import org.apache.ibatis.annotations.Mapper; 6 import org.apache.ibatis.annotations.Mapper;
7 7
8 @Mapper 8 @Mapper
9 -public interface PayOrderExtensionCoreMapper extends BaseMapperX<PayOrderExtensionDO> { 9 +public interface PayOrderExtensionMapper extends BaseMapperX<PayOrderExtensionDO> {
10 10
11 default PayOrderExtensionDO selectByNo(String no) { 11 default PayOrderExtensionDO selectByNo(String no) {
12 return selectOne(PayOrderExtensionDO::getNo, no); 12 return selectOne(PayOrderExtensionDO::getNo, no);
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayOrderMapper.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/order/PayOrderMapper.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order; 1 +package cn.iocoder.yudao.module.pay.dal.mysql.order;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; 3 +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExportReqVO;
  4 +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageReqVO;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 6 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
8 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; 7 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
9 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 9 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  10 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
10 import org.apache.ibatis.annotations.Mapper; 11 import org.apache.ibatis.annotations.Mapper;
11 12
12 import java.util.Collection; 13 import java.util.Collection;
13 import java.util.List; 14 import java.util.List;
14 15
15 -/**  
16 - * 支付订单 Mapper 组件  
17 - *  
18 - * @author aquan  
19 - */  
20 @Mapper 16 @Mapper
21 public interface PayOrderMapper extends BaseMapperX<PayOrderDO> { 17 public interface PayOrderMapper extends BaseMapperX<PayOrderDO> {
22 18
@@ -50,12 +46,6 @@ public interface PayOrderMapper extends BaseMapperX&lt;PayOrderDO&gt; { @@ -50,12 +46,6 @@ public interface PayOrderMapper extends BaseMapperX&lt;PayOrderDO&gt; {
50 .orderByDesc("id")); 46 .orderByDesc("id"));
51 } 47 }
52 48
53 - /**  
54 - * 根据订单 ID 集合查询订单商品名称  
55 - *  
56 - * @param idList 订单 ID 集合  
57 - * @return 只包含商品名称和标题的订单集合对象  
58 - */  
59 default List<PayOrderDO> findByIdListQueryOrderSubject(Collection<Long> idList) { 49 default List<PayOrderDO> findByIdListQueryOrderSubject(Collection<Long> idList) {
60 return selectList(new LambdaQueryWrapper<PayOrderDO>() 50 return selectList(new LambdaQueryWrapper<PayOrderDO>()
61 .select(PayOrderDO::getId, PayOrderDO::getSubject) 51 .select(PayOrderDO::getId, PayOrderDO::getSubject)
@@ -70,10 +60,19 @@ public interface PayOrderMapper extends BaseMapperX&lt;PayOrderDO&gt; { @@ -70,10 +60,19 @@ public interface PayOrderMapper extends BaseMapperX&lt;PayOrderDO&gt; {
70 * @return 条数 60 * @return 条数
71 */ 61 */
72 default Long selectCount(Long appId, Integer status) { 62 default Long selectCount(Long appId, Integer status) {
73 -  
74 return selectCount(new LambdaQueryWrapper<PayOrderDO>() 63 return selectCount(new LambdaQueryWrapper<PayOrderDO>()
75 .eq(PayOrderDO::getAppId, appId) 64 .eq(PayOrderDO::getAppId, appId)
76 .in(PayOrderDO::getStatus, status)); 65 .in(PayOrderDO::getStatus, status));
77 } 66 }
78 67
  68 + default PayOrderDO selectByAppIdAndMerchantOrderId(Long appId, String merchantOrderId) {
  69 + return selectOne(new QueryWrapper<PayOrderDO>().eq("app_id", appId)
  70 + .eq("merchant_order_id", merchantOrderId));
  71 + }
  72 +
  73 + default int updateByIdAndStatus(Long id, Integer status, PayOrderDO update) {
  74 + return update(update, new QueryWrapper<PayOrderDO>()
  75 + .eq("id", id).eq("status", status));
  76 + }
  77 +
79 } 78 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/dal/mysql/order/PayRefundMapper.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/refund/PayRefundMapper.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order; 1 +package cn.iocoder.yudao.module.pay.dal.mysql.refund;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; 3 +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundExportReqVO;
  4 +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundPageReqVO;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 6 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
8 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; 7 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
9 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 9 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
10 import org.apache.ibatis.annotations.Mapper; 10 import org.apache.ibatis.annotations.Mapper;
11 11
12 import java.util.List; 12 import java.util.List;
13 13
14 -/**  
15 - * 退款订单 Mapper  
16 - *  
17 - * @author aquan  
18 - */  
19 @Mapper 14 @Mapper
20 public interface PayRefundMapper extends BaseMapperX<PayRefundDO> { 15 public interface PayRefundMapper extends BaseMapperX<PayRefundDO> {
21 16
@@ -45,17 +40,18 @@ public interface PayRefundMapper extends BaseMapperX&lt;PayRefundDO&gt; { @@ -45,17 +40,18 @@ public interface PayRefundMapper extends BaseMapperX&lt;PayRefundDO&gt; {
45 .orderByDesc("id")); 40 .orderByDesc("id"));
46 } 41 }
47 42
48 - /**  
49 - * 查询符合的订单数量  
50 - *  
51 - * @param appId 应用编号  
52 - * @param status 订单状态  
53 - * @return 条数  
54 - */  
55 default Long selectCount(Long appId, Integer status) { 43 default Long selectCount(Long appId, Integer status) {
56 44
57 return selectCount(new LambdaQueryWrapper<PayRefundDO>() 45 return selectCount(new LambdaQueryWrapper<PayRefundDO>()
58 .eq(PayRefundDO::getAppId, appId) 46 .eq(PayRefundDO::getAppId, appId)
59 .eq(PayRefundDO::getStatus, status)); 47 .eq(PayRefundDO::getStatus, status));
60 } 48 }
  49 +
  50 + default PayRefundDO selectByReqNo(String reqNo) {
  51 + return selectOne("req_no", reqNo);
  52 + }
  53 +
  54 + default PayRefundDO selectByTradeNoAndMerchantRefundNo(String tradeNo, String merchantRefundNo){
  55 + return selectOne("trade_no", tradeNo, "merchant_refund_no", merchantRefundNo);
  56 + }
61 } 57 }
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/PayRedisKeyCoreConstants.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/PayRedisKeyCoreConstants.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.redis; 1 +package cn.iocoder.yudao.module.pay.dal.redis;
2 2
3 import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; 3 import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine;
4 import org.redisson.api.RLock; 4 import org.redisson.api.RLock;
@@ -6,7 +6,7 @@ import org.redisson.api.RLock; @@ -6,7 +6,7 @@ import org.redisson.api.RLock;
6 import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.HASH; 6 import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.HASH;
7 7
8 /** 8 /**
9 - * Lock4j Redis Key 枚举类 9 + * 支付 Redis Key 枚举类
10 * 10 *
11 * @author 芋道源码 11 * @author 芋道源码
12 */ 12 */
@@ -14,6 +14,6 @@ public interface PayRedisKeyCoreConstants { @@ -14,6 +14,6 @@ public interface PayRedisKeyCoreConstants {
14 14
15 RedisKeyDefine PAY_NOTIFY_LOCK = new RedisKeyDefine("通知任务的分布式锁", 15 RedisKeyDefine PAY_NOTIFY_LOCK = new RedisKeyDefine("通知任务的分布式锁",
16 "pay_notify:lock:", // 参数来自 DefaultLockKeyBuilder 类 16 "pay_notify:lock:", // 参数来自 DefaultLockKeyBuilder 类
17 - HASH, RLock.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); // Redisson 的 Lock 锁,使用 Hash 数据结构 17 + RedisKeyDefine.KeyTypeEnum.HASH, RLock.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); // Redisson 的 Lock 锁,使用 Hash 数据结构
18 18
19 } 19 }
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/notify/PayNotifyLockCoreRedisDAO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/notify/PayNotifyLockRedisDAO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.dal.redis.notify; 1 +package cn.iocoder.yudao.module.pay.dal.redis.notify;
2 2
3 import org.redisson.api.RLock; 3 import org.redisson.api.RLock;
4 import org.redisson.api.RedissonClient; 4 import org.redisson.api.RedissonClient;
@@ -7,7 +7,7 @@ import org.springframework.stereotype.Repository; @@ -7,7 +7,7 @@ import org.springframework.stereotype.Repository;
7 import javax.annotation.Resource; 7 import javax.annotation.Resource;
8 import java.util.concurrent.TimeUnit; 8 import java.util.concurrent.TimeUnit;
9 9
10 -import static cn.iocoder.yudao.coreservice.modules.pay.dal.redis.PayRedisKeyCoreConstants.PAY_NOTIFY_LOCK; 10 +import static cn.iocoder.yudao.module.pay.dal.redis.PayRedisKeyCoreConstants.PAY_NOTIFY_LOCK;
11 11
12 /** 12 /**
13 * 支付通知的锁 Redis DAO 13 * 支付通知的锁 Redis DAO
@@ -15,7 +15,7 @@ import static cn.iocoder.yudao.coreservice.modules.pay.dal.redis.PayRedisKeyCore @@ -15,7 +15,7 @@ import static cn.iocoder.yudao.coreservice.modules.pay.dal.redis.PayRedisKeyCore
15 * @author 芋道源码 15 * @author 芋道源码
16 */ 16 */
17 @Repository 17 @Repository
18 -public class PayNotifyLockCoreRedisDAO { 18 +public class PayNotifyLockRedisDAO {
19 19
20 @Resource 20 @Resource
21 private RedissonClient redissonClient; 21 private RedissonClient redissonClient;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/notify/PayNotifyStatusEnum.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/notify/PayNotifyStatusEnum.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.enums.notify; 1 +package cn.iocoder.yudao.module.pay.enums.notify;
2 2
3 import lombok.AllArgsConstructor; 3 import lombok.AllArgsConstructor;
4 import lombok.Getter; 4 import lombok.Getter;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/notify/PayNotifyTypeEnum.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/notify/PayNotifyTypeEnum.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.enums.notify; 1 +package cn.iocoder.yudao.module.pay.enums.notify;
2 2
3 import lombok.AllArgsConstructor; 3 import lombok.AllArgsConstructor;
4 import lombok.Getter; 4 import lombok.Getter;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderNotifyStatusEnum.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/order/PayOrderNotifyStatusEnum.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.enums.order; 1 +package cn.iocoder.yudao.module.pay.enums.order;
2 2
3 import cn.iocoder.yudao.framework.common.core.IntArrayValuable; 3 import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
4 import lombok.AllArgsConstructor; 4 import lombok.AllArgsConstructor;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderStatusEnum.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/order/PayOrderStatusEnum.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.enums.order; 1 +package cn.iocoder.yudao.module.pay.enums.order;
2 2
3 import cn.iocoder.yudao.framework.common.core.IntArrayValuable; 3 import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
4 import lombok.AllArgsConstructor; 4 import lombok.AllArgsConstructor;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayRefundStatusEnum.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/refund/PayRefundStatusEnum.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.enums.order; 1 +package cn.iocoder.yudao.module.pay.enums.refund;
2 2
3 import lombok.AllArgsConstructor; 3 import lombok.AllArgsConstructor;
4 import lombok.Getter; 4 import lombok.Getter;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayRefundTypeEnum.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/enums/refund/PayRefundTypeEnum.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.enums.order; 1 +package cn.iocoder.yudao.module.pay.enums.refund;
2 2
3 import cn.iocoder.yudao.framework.common.core.IntArrayValuable; 3 import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
4 import lombok.AllArgsConstructor; 4 import lombok.AllArgsConstructor;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/notify/PayNotifyJob.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/job/notify/PayNotifyJob.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.job.notify; 1 +package cn.iocoder.yudao.module.pay.job.notify;
2 2
3 -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService;  
4 import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; 3 import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
  4 +import cn.iocoder.yudao.module.pay.service.notify.PayNotifyService;
5 import lombok.extern.slf4j.Slf4j; 5 import lombok.extern.slf4j.Slf4j;
6 import org.springframework.stereotype.Component; 6 import org.springframework.stereotype.Component;
7 7
@@ -18,7 +18,7 @@ import javax.annotation.Resource; @@ -18,7 +18,7 @@ import javax.annotation.Resource;
18 public class PayNotifyJob implements JobHandler { 18 public class PayNotifyJob implements JobHandler {
19 19
20 @Resource 20 @Resource
21 - private PayNotifyCoreService payNotifyCoreService; 21 + private PayNotifyService payNotifyCoreService;
22 22
23 @Override 23 @Override
24 public String execute(String param) throws Exception { 24 public String execute(String param) throws Exception {
yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/job/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.module.pay.job;
yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/package-info.java 0 → 100644
  1 +/**
  2 + * pay 模块,我们放支付业务,提供业务的支付能力。
  3 + * 例如说:商户、应用、支付、退款等等
  4 + *
  5 + * 1. Controller URL:以 /member/ 开头,避免和其它 Module 冲突
  6 + * 2. DataObject 表名:以 member_ 开头,方便在数据库中区分
  7 + *
  8 + * 注意,由于 Pay 模块和 Trade 模块,容易重名,所以类名都加载 Pay 的前缀~
  9 + */
  10 +package cn.iocoder.yudao.module.pay;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/PayAppService.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppService.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.app; 1 +package cn.iocoder.yudao.module.pay.service.merchant;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppCreateReqVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppExportReqVO;  
5 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppPageReqVO;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppUpdateReqVO;  
7 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO; 3 +import cn.iocoder.yudao.framework.common.exception.ServiceException;
  4 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppCreateReqVO;
  5 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppExportReqVO;
  6 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppPageReqVO;
  7 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppUpdateReqVO;
8 import cn.iocoder.yudao.framework.common.pojo.PageResult; 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 9 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  10 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
10 11
11 import javax.validation.Valid; 12 import javax.validation.Valid;
12 import java.util.Collection; 13 import java.util.Collection;
@@ -100,4 +101,16 @@ public interface PayAppService { @@ -100,4 +101,16 @@ public interface PayAppService {
100 List<PayAppDO> list = this.getAppList(appIdList); 101 List<PayAppDO> list = this.getAppList(appIdList);
101 return CollectionUtils.convertMap(list, PayAppDO::getId); 102 return CollectionUtils.convertMap(list, PayAppDO::getId);
102 } 103 }
  104 +
  105 +
  106 + /**
  107 + * 支付应用的合法性
  108 + *
  109 + * 如果不合法,抛出 {@link ServiceException} 业务异常
  110 + *
  111 + * @param id 应用编号
  112 + * @return 应用信息
  113 + */
  114 + PayAppDO validPayApp(Long id);
  115 +
103 } 116 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/impl/PayAppServiceImpl.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppServiceImpl.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.app.impl; 1 +package cn.iocoder.yudao.module.pay.service.merchant;
2 2
3 import cn.hutool.core.collection.CollectionUtil; 3 import cn.hutool.core.collection.CollectionUtil;
4 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
5 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppCreateReqVO;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppExportReqVO;  
7 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppPageReqVO;  
8 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppUpdateReqVO;  
9 -import cn.iocoder.yudao.adminserver.modules.pay.convert.app.PayAppConvert;  
10 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.app.PayAppMapper;  
11 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant.PayMerchantMapper;  
12 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderMapper;  
13 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayRefundMapper;  
14 -import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService;  
15 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;  
16 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;  
17 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum;  
18 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum;  
19 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  6 +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
  7 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppCreateReqVO;
  8 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppExportReqVO;
  9 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppPageReqVO;
  10 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppUpdateReqVO;
  11 +import cn.iocoder.yudao.module.pay.convert.app.PayAppConvert;
  12 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
  13 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
  14 +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayAppMapper;
  15 +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayMerchantMapper;
  16 +import cn.iocoder.yudao.module.pay.dal.mysql.order.PayOrderMapper;
  17 +import cn.iocoder.yudao.module.pay.dal.mysql.refund.PayRefundMapper;
20 import cn.iocoder.yudao.framework.common.pojo.PageResult; 18 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  19 +import cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants;
  20 +import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum;
  21 +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum;
21 import com.google.common.annotations.VisibleForTesting; 22 import com.google.common.annotations.VisibleForTesting;
22 import org.springframework.stereotype.Service; 23 import org.springframework.stereotype.Service;
23 import org.springframework.validation.annotation.Validated; 24 import org.springframework.validation.annotation.Validated;
@@ -25,9 +26,9 @@ import org.springframework.validation.annotation.Validated; @@ -25,9 +26,9 @@ import org.springframework.validation.annotation.Validated;
25 import javax.annotation.Resource; 26 import javax.annotation.Resource;
26 import java.util.*; 27 import java.util.*;
27 28
28 -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*;  
29 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 29 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
30 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; 30 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  31 +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*;
31 32
32 /** 33 /**
33 * 支付应用信息 Service 实现类 34 * 支付应用信息 Service 实现类
@@ -40,17 +41,14 @@ public class PayAppServiceImpl implements PayAppService { @@ -40,17 +41,14 @@ public class PayAppServiceImpl implements PayAppService {
40 41
41 @Resource 42 @Resource
42 private PayAppMapper appMapper; 43 private PayAppMapper appMapper;
43 - 44 + // TODO @aquan:使用对方的 Service。模块与模块之间,避免直接调用对方的 mapper
44 @Resource 45 @Resource
45 private PayMerchantMapper merchantMapper; 46 private PayMerchantMapper merchantMapper;
46 -  
47 @Resource 47 @Resource
48 private PayOrderMapper orderMapper; 48 private PayOrderMapper orderMapper;
49 -  
50 @Resource 49 @Resource
51 private PayRefundMapper refundMapper; 50 private PayRefundMapper refundMapper;
52 51
53 -  
54 @Override 52 @Override
55 public Long createApp(PayAppCreateReqVO createReqVO) { 53 public Long createApp(PayAppCreateReqVO createReqVO) {
56 // 插入 54 // 插入
@@ -126,12 +124,6 @@ public class PayAppServiceImpl implements PayAppService { @@ -126,12 +124,6 @@ public class PayAppServiceImpl implements PayAppService {
126 return convertSet(merchantMapper.getMerchantListByName(merchantName), PayMerchantDO::getId); 124 return convertSet(merchantMapper.getMerchantListByName(merchantName), PayMerchantDO::getId);
127 } 125 }
128 126
129 - /**  
130 - * 修改应用信息状态  
131 - *  
132 - * @param id 应用编号  
133 - * @param status 状态{@link CommonStatusEnum}  
134 - */  
135 @Override 127 @Override
136 public void updateAppStatus(Long id, Integer status) { 128 public void updateAppStatus(Long id, Integer status) {
137 // 校验商户存在 129 // 校验商户存在
@@ -143,12 +135,6 @@ public class PayAppServiceImpl implements PayAppService { @@ -143,12 +135,6 @@ public class PayAppServiceImpl implements PayAppService {
143 appMapper.updateById(app); 135 appMapper.updateById(app);
144 } 136 }
145 137
146 - /**  
147 - * 根据商户 ID 获得支付应用信息列表,  
148 - *  
149 - * @param merchantId 商户 ID  
150 - * @return 支付应用信息列表  
151 - */  
152 @Override 138 @Override
153 public List<PayAppDO> getListByMerchantId(String merchantId) { 139 public List<PayAppDO> getListByMerchantId(String merchantId) {
154 return appMapper.getListByMerchantId(merchantId); 140 return appMapper.getListByMerchantId(merchantId);
@@ -186,4 +172,18 @@ public class PayAppServiceImpl implements PayAppService { @@ -186,4 +172,18 @@ public class PayAppServiceImpl implements PayAppService {
186 } 172 }
187 } 173 }
188 174
  175 + @Override
  176 + public PayAppDO validPayApp(Long id) {
  177 + PayAppDO app = appMapper.selectById(id);
  178 + // 校验是否存在
  179 + if (app == null) {
  180 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_APP_NOT_FOUND);
  181 + }
  182 + // 校验是否禁用
  183 + if (CommonStatusEnum.DISABLE.getStatus().equals(app.getStatus())) {
  184 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_APP_IS_DISABLE);
  185 + }
  186 + return app;
  187 + }
  188 +
189 } 189 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/PayChannelService.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelService.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.channel; 1 +package cn.iocoder.yudao.module.pay.service.merchant;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.*;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; 3 +import cn.iocoder.yudao.framework.common.exception.ServiceException;
  4 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelCreateReqVO;
  5 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelExportReqVO;
  6 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelPageReqVO;
  7 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelUpdateReqVO;
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 -import org.springframework.web.multipart.MultipartFile; 9 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
7 10
8 import javax.validation.Valid; 11 import javax.validation.Valid;
9 import java.util.Collection; 12 import java.util.Collection;
@@ -17,6 +20,11 @@ import java.util.List; @@ -17,6 +20,11 @@ import java.util.List;
17 public interface PayChannelService { 20 public interface PayChannelService {
18 21
19 /** 22 /**
  23 + * 初始化支付客户端
  24 + */
  25 + void initPayClients();
  26 +
  27 + /**
20 * 创建支付渠道 28 * 创建支付渠道
21 * 29 *
22 * @param createReqVO 创建信息 30 * @param createReqVO 创建信息
@@ -47,8 +55,7 @@ public interface PayChannelService { @@ -47,8 +55,7 @@ public interface PayChannelService {
47 PayChannelDO getChannel(Long id); 55 PayChannelDO getChannel(Long id);
48 56
49 /** 57 /**
50 - * 获得支付渠道  
51 - * 列表 58 + * 获得支付渠道列表
52 * 59 *
53 * @param ids 编号 60 * @param ids 编号
54 * @return 支付渠道 61 * @return 支付渠道
@@ -57,8 +64,7 @@ public interface PayChannelService { @@ -57,8 +64,7 @@ public interface PayChannelService {
57 List<PayChannelDO> getChannelList(Collection<Long> ids); 64 List<PayChannelDO> getChannelList(Collection<Long> ids);
58 65
59 /** 66 /**
60 - * 获得支付渠道  
61 - * 分页 67 + * 获得支付渠道分页
62 * 68 *
63 * @param pageReqVO 分页查询 69 * @param pageReqVO 分页查询
64 * @return 支付渠道 70 * @return 支付渠道
@@ -84,24 +90,44 @@ public interface PayChannelService { @@ -84,24 +90,44 @@ public interface PayChannelService {
84 List<PayChannelDO> getChannelListByAppIds(Collection<Long> appIds); 90 List<PayChannelDO> getChannelListByAppIds(Collection<Long> appIds);
85 91
86 /** 92 /**
87 - * 根据条件获取通道数量 93 + * 根据条件获取渠道数量
88 * 94 *
89 * @param merchantId 商户编号 95 * @param merchantId 商户编号
90 * @param appid 应用编号 96 * @param appid 应用编号
91 - * @param code 通道编码 97 + * @param code 渠道编码
92 * @return 数量 98 * @return 数量
93 */ 99 */
94 Integer getChannelCountByConditions(Long merchantId, Long appid, String code); 100 Integer getChannelCountByConditions(Long merchantId, Long appid, String code);
95 101
96 /** 102 /**
97 - * 根据条件获取通道 103 + * 根据条件获取渠道
98 * 104 *
99 * @param merchantId 商户编号 105 * @param merchantId 商户编号
100 * @param appid 应用编号 106 * @param appid 应用编号
101 - * @param code 通道编码 107 + * @param code 渠道编码
102 * @return 数量 108 * @return 数量
103 */ 109 */
104 PayChannelDO getChannelByConditions(Long merchantId, Long appid, String code); 110 PayChannelDO getChannelByConditions(Long merchantId, Long appid, String code);
105 111
  112 + /**
  113 + * 支付渠道的合法性
  114 + *
  115 + * 如果不合法,抛出 {@link ServiceException} 业务异常
  116 + *
  117 + * @param id 渠道编号
  118 + * @return 渠道信息
  119 + */
  120 + PayChannelDO validPayChannel(Long id);
  121 +
  122 + /**
  123 + * 支付渠道的合法性
  124 + *
  125 + * 如果不合法,抛出 {@link ServiceException} 业务异常
  126 + *
  127 + * @param appId 应用编号
  128 + * @param code 支付渠道
  129 + * @return 渠道信息
  130 + */
  131 + PayChannelDO validPayChannel(Long appId, String code);
106 132
107 } 133 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/impl/PayChannelServiceImpl.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelServiceImpl.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.channel.impl; 1 +package cn.iocoder.yudao.module.pay.service.merchant;
2 2
  3 +import cn.hutool.core.collection.CollUtil;
3 import cn.hutool.core.util.ObjectUtil; 4 import cn.hutool.core.util.ObjectUtil;
4 import cn.hutool.json.JSONUtil; 5 import cn.hutool.json.JSONUtil;
5 -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelCreateReqVO;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelExportReqVO;  
7 -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelPageReqVO;  
8 -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelUpdateReqVO;  
9 -import cn.iocoder.yudao.adminserver.modules.pay.convert.channel.PayChannelConvert;  
10 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.channel.PayChannelMapper;  
11 -import cn.iocoder.yudao.adminserver.modules.pay.service.channel.PayChannelService;  
12 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; 6 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  7 +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
13 import cn.iocoder.yudao.framework.common.pojo.PageResult; 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  9 +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  10 +import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;
  11 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelCreateReqVO;
  12 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelExportReqVO;
  13 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelPageReqVO;
  14 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelUpdateReqVO;
  15 +import cn.iocoder.yudao.module.pay.convert.channel.PayChannelConvert;
14 import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig; 16 import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
15 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; 17 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
  18 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
  19 +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayChannelMapper;
  20 +import cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants;
16 import lombok.extern.slf4j.Slf4j; 21 import lombok.extern.slf4j.Slf4j;
  22 +import org.springframework.scheduling.annotation.Scheduled;
17 import org.springframework.stereotype.Service; 23 import org.springframework.stereotype.Service;
18 import org.springframework.validation.annotation.Validated; 24 import org.springframework.validation.annotation.Validated;
19 25
  26 +import javax.annotation.PostConstruct;
20 import javax.annotation.Resource; 27 import javax.annotation.Resource;
21 import javax.validation.Validator; 28 import javax.validation.Validator;
22 import java.util.Collection; 29 import java.util.Collection;
  30 +import java.util.Comparator;
  31 +import java.util.Date;
23 import java.util.List; 32 import java.util.List;
24 33
25 -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.CHANNEL_EXIST_SAME_CHANNEL_ERROR;  
26 -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.CHANNEL_NOT_EXISTS;  
27 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 34 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  35 +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*;
28 36
29 /** 37 /**
30 * 支付渠道 Service 实现类 38 * 支付渠道 Service 实现类
@@ -36,6 +44,20 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU @@ -36,6 +44,20 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU
36 @Validated 44 @Validated
37 public class PayChannelServiceImpl implements PayChannelService { 45 public class PayChannelServiceImpl implements PayChannelService {
38 46
  47 + /**
  48 + * 定时执行 {@link #schedulePeriodicRefresh()} 的周期
  49 + * 因为已经通过 Redis Pub/Sub 机制,所以频率不需要高
  50 + */
  51 + private static final long SCHEDULER_PERIOD = 5 * 60 * 1000L;
  52 +
  53 + /**
  54 + * 缓存菜单的最大更新时间,用于后续的增量轮询,判断是否有更新
  55 + */
  56 + private volatile Date maxUpdateTime;
  57 +
  58 + @Resource
  59 + private PayClientFactory payClientFactory;
  60 +
39 @Resource 61 @Resource
40 private PayChannelMapper channelMapper; 62 private PayChannelMapper channelMapper;
41 63
@@ -43,6 +65,51 @@ public class PayChannelServiceImpl implements PayChannelService { @@ -43,6 +65,51 @@ public class PayChannelServiceImpl implements PayChannelService {
43 private Validator validator; 65 private Validator validator;
44 66
45 @Override 67 @Override
  68 + @PostConstruct
  69 + public void initPayClients() {
  70 + // 获取支付渠道,如果有更新
  71 + List<PayChannelDO> payChannels = this.loadPayChannelIfUpdate(maxUpdateTime);
  72 + if (CollUtil.isEmpty(payChannels)) {
  73 + return;
  74 + }
  75 +
  76 + // 创建或更新支付 Client
  77 + payChannels.forEach(payChannel -> payClientFactory.createOrUpdatePayClient(payChannel.getId(),
  78 + payChannel.getCode(), payChannel.getConfig()));
  79 +
  80 + // 写入缓存
  81 + assert payChannels.size() > 0; // 断言,避免告警
  82 + maxUpdateTime = payChannels.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime();
  83 + log.info("[initPayClients][初始化 PayChannel 数量为 {}]", payChannels.size());
  84 + }
  85 +
  86 + @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD)
  87 + public void schedulePeriodicRefresh() {
  88 + initPayClients();
  89 + }
  90 +
  91 + /**
  92 + * 如果支付渠道发生变化,从数据库中获取最新的全量支付渠道。
  93 + * 如果未发生变化,则返回空
  94 + *
  95 + * @param maxUpdateTime 当前支付渠道的最大更新时间
  96 + * @return 支付渠道列表
  97 + */
  98 + private List<PayChannelDO> loadPayChannelIfUpdate(Date maxUpdateTime) {
  99 + // 第一步,判断是否要更新。
  100 + if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
  101 + log.info("[loadPayChannelIfUpdate][首次加载全量支付渠道]");
  102 + } else { // 判断数据库中是否有更新的支付渠道
  103 + if (channelMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) {
  104 + return null;
  105 + }
  106 + log.info("[loadPayChannelIfUpdate][增量加载全量支付渠道]");
  107 + }
  108 + // 第二步,如果有更新,则从数据库加载所有支付渠道
  109 + return channelMapper.selectList();
  110 + }
  111 +
  112 + @Override
46 public Long createChannel(PayChannelCreateReqVO reqVO) { 113 public Long createChannel(PayChannelCreateReqVO reqVO) {
47 // 断言是否有重复的 114 // 断言是否有重复的
48 PayChannelDO channelDO = this.getChannelByConditions(reqVO.getMerchantId(), reqVO.getAppId(), reqVO.getCode()); 115 PayChannelDO channelDO = this.getChannelByConditions(reqVO.getMerchantId(), reqVO.getAppId(), reqVO.getCode());
@@ -114,11 +181,11 @@ public class PayChannelServiceImpl implements PayChannelService { @@ -114,11 +181,11 @@ public class PayChannelServiceImpl implements PayChannelService {
114 181
115 182
116 /** 183 /**
117 - * 根据条件获取通道数量 184 + * 根据条件获取渠道数量
118 * 185 *
119 * @param merchantId 商户编号 186 * @param merchantId 商户编号
120 * @param appid 应用编号 187 * @param appid 应用编号
121 - * @param code 通道编码 188 + * @param code 渠道编码
122 * @return 数量 189 * @return 数量
123 */ 190 */
124 @Override 191 @Override
@@ -127,11 +194,11 @@ public class PayChannelServiceImpl implements PayChannelService { @@ -127,11 +194,11 @@ public class PayChannelServiceImpl implements PayChannelService {
127 } 194 }
128 195
129 /** 196 /**
130 - * 根据条件获取通道 197 + * 根据条件获取渠道
131 * 198 *
132 * @param merchantId 商户编号 199 * @param merchantId 商户编号
133 * @param appid 应用编号 200 * @param appid 应用编号
134 - * @param code 通道编码 201 + * @param code 渠道编码
135 * @return 数量 202 * @return 数量
136 */ 203 */
137 @Override 204 @Override
@@ -158,4 +225,26 @@ public class PayChannelServiceImpl implements PayChannelService { @@ -158,4 +225,26 @@ public class PayChannelServiceImpl implements PayChannelService {
158 channel.setConfig(config); 225 channel.setConfig(config);
159 } 226 }
160 227
  228 + @Override
  229 + public PayChannelDO validPayChannel(Long id) {
  230 + PayChannelDO channel = channelMapper.selectById(id);
  231 + this.validPayChannel(channel);
  232 + return channel;
  233 + }
  234 +
  235 + @Override
  236 + public PayChannelDO validPayChannel(Long appId, String code) {
  237 + PayChannelDO channel = channelMapper.selectByAppIdAndCode(appId, code);
  238 + this.validPayChannel(channel);
  239 + return channel;
  240 + }
  241 +
  242 + private void validPayChannel(PayChannelDO channel) {
  243 + if (channel == null) {
  244 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_CHANNEL_NOT_FOUND);
  245 + }
  246 + if (CommonStatusEnum.DISABLE.getStatus().equals(channel.getStatus())) {
  247 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_CHANNEL_IS_DISABLE);
  248 + }
  249 + }
161 } 250 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/PayMerchantService.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayMerchantService.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.merchant; 1 +package cn.iocoder.yudao.module.pay.service.merchant;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantCreateReqVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantExportReqVO;  
5 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantPageReqVO;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantUpdateReqVO;  
7 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; 3 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantCreateReqVO;
  4 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantExportReqVO;
  5 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantPageReqVO;
  6 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantUpdateReqVO;
8 import cn.iocoder.yudao.framework.common.pojo.PageResult; 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 8 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  9 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
10 10
11 import javax.validation.Valid; 11 import javax.validation.Valid;
12 import java.util.Collection; 12 import java.util.Collection;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/impl/PayMerchantServiceImpl.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayMerchantServiceImpl.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.merchant.impl; 1 +package cn.iocoder.yudao.module.pay.service.merchant;
2 2
3 import cn.hutool.core.date.DateUtil; 3 import cn.hutool.core.date.DateUtil;
4 import cn.hutool.core.util.ObjectUtil; 4 import cn.hutool.core.util.ObjectUtil;
5 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantCreateReqVO;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantExportReqVO;  
7 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantPageReqVO;  
8 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantUpdateReqVO;  
9 -import cn.iocoder.yudao.adminserver.modules.pay.convert.merchant.PayMerchantConvert;  
10 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.app.PayAppMapper;  
11 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant.PayMerchantMapper;  
12 -import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService;  
13 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; 5 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantCreateReqVO;
  6 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantExportReqVO;
  7 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantPageReqVO;
  8 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantUpdateReqVO;
  9 +import cn.iocoder.yudao.module.pay.convert.merchant.PayMerchantConvert;
  10 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
  11 +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayAppMapper;
  12 +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayMerchantMapper;
14 import cn.iocoder.yudao.framework.common.pojo.PageResult; 13 import cn.iocoder.yudao.framework.common.pojo.PageResult;
15 import com.google.common.annotations.VisibleForTesting; 14 import com.google.common.annotations.VisibleForTesting;
16 import org.springframework.stereotype.Service; 15 import org.springframework.stereotype.Service;
@@ -21,9 +20,8 @@ import java.time.LocalDateTime; @@ -21,9 +20,8 @@ import java.time.LocalDateTime;
21 import java.util.Collection; 20 import java.util.Collection;
22 import java.util.List; 21 import java.util.List;
23 22
24 -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_MERCHANT_EXIST_APP_CANT_DELETE;  
25 -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_MERCHANT_NOT_EXISTS;  
26 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 23 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  24 +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*;
27 25
28 /** 26 /**
29 * 支付商户信息 Service 实现类 27 * 支付商户信息 Service 实现类
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/PayNotifyCoreService.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/PayNotifyService.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.notify; 1 +package cn.iocoder.yudao.module.pay.service.notify;
2 2
3 -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.dto.PayNotifyTaskCreateReqDTO; 3 +import cn.iocoder.yudao.module.pay.service.notify.dto.PayNotifyTaskCreateReqDTO;
4 4
5 import javax.validation.Valid; 5 import javax.validation.Valid;
6 6
7 /** 7 /**
8 - * 支付通知 Core Service 接口 8 + * 支付通知 Service 接口
9 * 9 *
10 * @author 芋道源码 10 * @author 芋道源码
11 */ 11 */
12 -public interface PayNotifyCoreService { 12 +public interface PayNotifyService {
13 13
14 /** 14 /**
15 * 创建支付通知任务 15 * 创建支付通知任务
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/impl/PayNotifyCoreServiceImpl.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/PayNotifyServiceImpl.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.notify.impl; 1 +package cn.iocoder.yudao.module.pay.service.notify;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.exceptions.ExceptionUtil;
4 import cn.hutool.http.HttpUtil; 5 import cn.hutool.http.HttpUtil;
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify.PayNotifyLogDO;  
6 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify.PayNotifyTaskDO;  
7 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;  
8 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;  
9 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify.PayNotifyLogCoreMapper;  
10 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify.PayNotifyTaskCoreMapper;  
11 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayRefundCoreMapper;  
12 -import cn.iocoder.yudao.coreservice.modules.pay.dal.redis.notify.PayNotifyLockCoreRedisDAO;  
13 -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum;  
14 -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum;  
15 -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService;  
16 -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.dto.PayNotifyTaskCreateReqDTO;  
17 -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo.PayNotifyOrderReqVO;  
18 -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo.PayRefundOrderReqVO;  
19 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayOrderCoreService; 6 +import cn.iocoder.yudao.module.pay.dal.dataobject.notify.PayNotifyLogDO;
  7 +import cn.iocoder.yudao.module.pay.dal.dataobject.notify.PayNotifyTaskDO;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
  9 +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
  10 +import cn.iocoder.yudao.module.pay.dal.mysql.notify.PayNotifyLogCoreMapper;
  11 +import cn.iocoder.yudao.module.pay.dal.mysql.notify.PayNotifyTaskCoreMapper;
  12 +import cn.iocoder.yudao.module.pay.dal.redis.notify.PayNotifyLockRedisDAO;
  13 +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyStatusEnum;
  14 +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyTypeEnum;
  15 +import cn.iocoder.yudao.module.pay.service.notify.dto.PayNotifyTaskCreateReqDTO;
  16 +import cn.iocoder.yudao.module.pay.service.notify.vo.PayNotifyOrderReqVO;
  17 +import cn.iocoder.yudao.module.pay.service.notify.vo.PayRefundOrderReqVO;
20 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 18 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
21 import cn.iocoder.yudao.framework.common.util.date.DateUtils; 19 import cn.iocoder.yudao.framework.common.util.date.DateUtils;
22 import cn.iocoder.yudao.framework.common.util.json.JsonUtils; 20 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
  21 +import cn.iocoder.yudao.module.pay.service.order.PayOrderService;
  22 +import cn.iocoder.yudao.module.pay.service.refund.PayRefundService;
23 import lombok.extern.slf4j.Slf4j; 23 import lombok.extern.slf4j.Slf4j;
24 import org.springframework.context.annotation.Lazy; 24 import org.springframework.context.annotation.Lazy;
25 import org.springframework.scheduling.annotation.Async; 25 import org.springframework.scheduling.annotation.Async;
@@ -36,10 +36,6 @@ import java.util.Objects; @@ -36,10 +36,6 @@ import java.util.Objects;
36 import java.util.concurrent.CountDownLatch; 36 import java.util.concurrent.CountDownLatch;
37 import java.util.concurrent.TimeUnit; 37 import java.util.concurrent.TimeUnit;
38 38
39 -import static cn.hutool.core.exceptions.ExceptionUtil.getRootCauseMessage;  
40 -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.SECOND_MILLIS;  
41 -import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;  
42 -  
43 /** 39 /**
44 * 支付通知 Core Service 实现类 40 * 支付通知 Core Service 实现类
45 * 41 *
@@ -48,7 +44,7 @@ import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString @@ -48,7 +44,7 @@ import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString
48 @Service 44 @Service
49 @Valid 45 @Valid
50 @Slf4j 46 @Slf4j
51 -public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { 47 +public class PayNotifyServiceImpl implements PayNotifyService {
52 48
53 /** 49 /**
54 * 通知超时时间,单位:秒 50 * 通知超时时间,单位:秒
@@ -57,11 +53,14 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { @@ -57,11 +53,14 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService {
57 /** 53 /**
58 * {@link #NOTIFY_TIMEOUT} 的毫秒 54 * {@link #NOTIFY_TIMEOUT} 的毫秒
59 */ 55 */
60 - public static final long NOTIFY_TIMEOUT_MILLIS = 120 * SECOND_MILLIS; 56 + public static final long NOTIFY_TIMEOUT_MILLIS = 120 * DateUtils.SECOND_MILLIS;
61 57
62 @Resource 58 @Resource
63 @Lazy // 循环依赖,避免报错 59 @Lazy // 循环依赖,避免报错
64 - private PayOrderCoreService payOrderCoreService; 60 + private PayOrderService orderService;
  61 + @Resource
  62 + @Lazy // 循环依赖,避免报错
  63 + private PayRefundService refundService;
65 64
66 @Resource 65 @Resource
67 private PayNotifyTaskCoreMapper payNotifyTaskCoreMapper; 66 private PayNotifyTaskCoreMapper payNotifyTaskCoreMapper;
@@ -72,14 +71,11 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { @@ -72,14 +71,11 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService {
72 private ThreadPoolTaskExecutor threadPoolTaskExecutor; // TODO 芋艿:未来提供独立的线程池 71 private ThreadPoolTaskExecutor threadPoolTaskExecutor; // TODO 芋艿:未来提供独立的线程池
73 72
74 @Resource 73 @Resource
75 - private PayNotifyLockCoreRedisDAO payNotifyLockCoreRedisDAO;  
76 -  
77 - @Resource  
78 - private PayRefundCoreMapper payRefundCoreMapper; 74 + private PayNotifyLockRedisDAO payNotifyLockCoreRedisDAO;
79 75
80 @Resource 76 @Resource
81 @Lazy // 循环依赖(自己依赖自己),避免报错 77 @Lazy // 循环依赖(自己依赖自己),避免报错
82 - private PayNotifyCoreServiceImpl self; 78 + private PayNotifyServiceImpl self;
83 79
84 @Override 80 @Override
85 public void createPayNotifyTask(PayNotifyTaskCreateReqDTO reqDTO) { 81 public void createPayNotifyTask(PayNotifyTaskCreateReqDTO reqDTO) {
@@ -89,12 +85,11 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { @@ -89,12 +85,11 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService {
89 .setNotifyTimes(0).setMaxNotifyTimes(PayNotifyTaskDO.NOTIFY_FREQUENCY.length + 1); 85 .setNotifyTimes(0).setMaxNotifyTimes(PayNotifyTaskDO.NOTIFY_FREQUENCY.length + 1);
90 // 补充 merchantId + appId + notifyUrl 字段 86 // 补充 merchantId + appId + notifyUrl 字段
91 if (Objects.equals(task.getType(), PayNotifyTypeEnum.ORDER.getType())) { 87 if (Objects.equals(task.getType(), PayNotifyTypeEnum.ORDER.getType())) {
92 - PayOrderDO order = payOrderCoreService.getPayOrder(task.getDataId()); // 不进行非空判断,有问题直接异常 88 + PayOrderDO order = orderService.getOrder(task.getDataId()); // 不进行非空判断,有问题直接异常
93 task.setMerchantId(order.getMerchantId()).setAppId(order.getAppId()). 89 task.setMerchantId(order.getMerchantId()).setAppId(order.getAppId()).
94 setMerchantOrderId(order.getMerchantOrderId()).setNotifyUrl(order.getNotifyUrl()); 90 setMerchantOrderId(order.getMerchantOrderId()).setNotifyUrl(order.getNotifyUrl());
95 } else if (Objects.equals(task.getType(), PayNotifyTypeEnum.REFUND.getType())) { 91 } else if (Objects.equals(task.getType(), PayNotifyTypeEnum.REFUND.getType())) {
96 - // TODO 芋艿,需要实现下哈  
97 - PayRefundDO refundDO = payRefundCoreMapper.selectById(task.getDataId()); 92 + PayRefundDO refundDO = refundService.getRefund(task.getDataId());
98 task.setMerchantId(refundDO.getMerchantId()).setAppId(refundDO.getAppId()) 93 task.setMerchantId(refundDO.getMerchantId()).setAppId(refundDO.getAppId())
99 .setMerchantOrderId(refundDO.getMerchantOrderId()).setNotifyUrl(refundDO.getNotifyUrl()); 94 .setMerchantOrderId(refundDO.getMerchantOrderId()).setNotifyUrl(refundDO.getNotifyUrl());
100 } 95 }
@@ -169,7 +164,7 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { @@ -169,7 +164,7 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService {
169 // 虽然已经通过分布式加锁,但是可能同时满足通知的条件,然后都去获得锁。此时,第一个执行完后,第二个还是能拿到锁,然后会再执行一次。 164 // 虽然已经通过分布式加锁,但是可能同时满足通知的条件,然后都去获得锁。此时,第一个执行完后,第二个还是能拿到锁,然后会再执行一次。
170 PayNotifyTaskDO dbTask = payNotifyTaskCoreMapper.selectById(task.getId()); 165 PayNotifyTaskDO dbTask = payNotifyTaskCoreMapper.selectById(task.getId());
171 if (DateUtils.afterNow(dbTask.getNextNotifyTime())) { 166 if (DateUtils.afterNow(dbTask.getNextNotifyTime())) {
172 - log.info("[executeNotify][dbTask({}) 任务被忽略,原因是未到达下次通知时间,可能是因为并发执行了]", toJsonString(dbTask)); 167 + log.info("[executeNotify][dbTask({}) 任务被忽略,原因是未到达下次通知时间,可能是因为并发执行了]", JsonUtils.toJsonString(dbTask));
173 return; 168 return;
174 } 169 }
175 170
@@ -193,7 +188,7 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { @@ -193,7 +188,7 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService {
193 Integer newStatus = this.processNotifyResult(task, invokeResult, invokeException); 188 Integer newStatus = this.processNotifyResult(task, invokeResult, invokeException);
194 189
195 // 记录 PayNotifyLog 日志 190 // 记录 PayNotifyLog 日志
196 - String response = invokeException != null ? getRootCauseMessage(invokeException) : toJsonString(invokeResult); 191 + String response = invokeException != null ? ExceptionUtil.getRootCauseMessage(invokeException) : JsonUtils.toJsonString(invokeResult);
197 payNotifyLogCoreMapper.insert(PayNotifyLogDO.builder().taskId(task.getId()) 192 payNotifyLogCoreMapper.insert(PayNotifyLogDO.builder().taskId(task.getId())
198 .notifyTimes(task.getNotifyTimes() + 1).status(newStatus).response(response).build()); 193 .notifyTimes(task.getNotifyTimes() + 1).status(newStatus).response(response).build());
199 } 194 }
@@ -214,10 +209,10 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService { @@ -214,10 +209,10 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService {
214 request = PayRefundOrderReqVO.builder().merchantOrderId(task.getMerchantOrderId()) 209 request = PayRefundOrderReqVO.builder().merchantOrderId(task.getMerchantOrderId())
215 .payRefundId(task.getDataId()).build(); 210 .payRefundId(task.getDataId()).build();
216 } else { 211 } else {
217 - throw new RuntimeException("未知的通知任务类型:" + toJsonString(task)); 212 + throw new RuntimeException("未知的通知任务类型:" + JsonUtils.toJsonString(task));
218 } 213 }
219 // 请求地址 214 // 请求地址
220 - String response = HttpUtil.post(task.getNotifyUrl(), toJsonString(request), 215 + String response = HttpUtil.post(task.getNotifyUrl(), JsonUtils.toJsonString(request),
221 (int) NOTIFY_TIMEOUT_MILLIS); 216 (int) NOTIFY_TIMEOUT_MILLIS);
222 // 解析结果 217 // 解析结果
223 return JsonUtils.parseObject(response, CommonResult.class); 218 return JsonUtils.parseObject(response, CommonResult.class);
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/dto/PayNotifyTaskCreateReqDTO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/dto/PayNotifyTaskCreateReqDTO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.notify.dto; 1 +package cn.iocoder.yudao.module.pay.service.notify.dto;
2 2
3 import lombok.AllArgsConstructor; 3 import lombok.AllArgsConstructor;
4 import lombok.Builder; 4 import lombok.Builder;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/PayNotifyOrderReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/vo/PayNotifyOrderReqVO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo; 1 +package cn.iocoder.yudao.module.pay.service.notify.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/PayRefundOrderReqVO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/vo/PayRefundOrderReqVO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo; 1 +package cn.iocoder.yudao.module.pay.service.notify.vo;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/package-info.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/notify/vo/package-info.java
1 /** 1 /**
2 * 这里的 VO 包有点特殊,是提供给接入支付模块的业务,提供回调接口时,可以直接使用 VO 2 * 这里的 VO 包有点特殊,是提供给接入支付模块的业务,提供回调接口时,可以直接使用 VO
3 * 3 *
4 - * 例如说,支付单的回调,使用 4 + * 例如说,支付单的回调,使用 TODO 芋艿:想下怎么优化下
5 */ 5 */
6 -package cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo; 6 +package cn.iocoder.yudao.module.pay.service.notify.vo;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayOrderExtensionService.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderExtensionService.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.order; 1 +package cn.iocoder.yudao.module.pay.service.order;
2 2
3 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;  
4 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 3 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  4 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
5 5
6 import java.util.Collection; 6 import java.util.Collection;
7 import java.util.List; 7 import java.util.List;
@@ -32,7 +32,6 @@ public interface PayOrderExtensionService { @@ -32,7 +32,6 @@ public interface PayOrderExtensionService {
32 */ 32 */
33 List<PayOrderExtensionDO> getOrderExtensionList(Collection<Long> ids); 33 List<PayOrderExtensionDO> getOrderExtensionList(Collection<Long> ids);
34 34
35 -  
36 /** 35 /**
37 * 根据订单成功的 扩展订单ID 查询所有的扩展订单转 成 map 返回 36 * 根据订单成功的 扩展订单ID 查询所有的扩展订单转 成 map 返回
38 * 37 *
@@ -40,9 +39,8 @@ public interface PayOrderExtensionService { @@ -40,9 +39,8 @@ public interface PayOrderExtensionService {
40 * @return 订单扩展 map 集合 39 * @return 订单扩展 map 集合
41 */ 40 */
42 default Map<Long, PayOrderExtensionDO> getOrderExtensionMap(Collection<Long> successExtensionIdList) { 41 default Map<Long, PayOrderExtensionDO> getOrderExtensionMap(Collection<Long> successExtensionIdList) {
43 - List<PayOrderExtensionDO> list = this.getOrderExtensionList(successExtensionIdList); 42 + List<PayOrderExtensionDO> list = getOrderExtensionList(successExtensionIdList);
44 return CollectionUtils.convertMap(list, PayOrderExtensionDO::getId); 43 return CollectionUtils.convertMap(list, PayOrderExtensionDO::getId);
45 } 44 }
46 45
47 -  
48 } 46 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/impl/PayOrderExtensionServiceImpl.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderExtensionServiceImpl.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.order.impl; 1 +package cn.iocoder.yudao.module.pay.service.order;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderExtensionMapper;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderExtensionService;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO; 3 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
  4 +import cn.iocoder.yudao.module.pay.dal.mysql.order.PayOrderExtensionMapper;
6 import org.springframework.stereotype.Service; 5 import org.springframework.stereotype.Service;
7 import org.springframework.validation.annotation.Validated; 6 import org.springframework.validation.annotation.Validated;
8 7
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayOrderService.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderService.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.order; 1 +package cn.iocoder.yudao.module.pay.service.order;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO; 3 +import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO;
  4 +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExportReqVO;
  5 +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageReqVO;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 7 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
  9 +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderCreateReqDTO;
  10 +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitReqDTO;
  11 +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitRespDTO;
8 12
  13 +import javax.validation.Valid;
9 import java.util.Collection; 14 import java.util.Collection;
10 import java.util.List; 15 import java.util.List;
11 import java.util.Map; 16 import java.util.Map;
@@ -64,4 +69,29 @@ public interface PayOrderService { @@ -64,4 +69,29 @@ public interface PayOrderService {
64 return CollectionUtils.convertMap(list, PayOrderDO::getId); 69 return CollectionUtils.convertMap(list, PayOrderDO::getId);
65 } 70 }
66 71
  72 + /**
  73 + * 创建支付单
  74 + *
  75 + * @param reqDTO 创建请求
  76 + * @return 支付单编号
  77 + */
  78 + Long createPayOrder(@Valid PayOrderCreateReqDTO reqDTO);
  79 +
  80 + /**
  81 + * 提交支付
  82 + * 此时,会发起支付渠道的调用
  83 + *
  84 + * @param reqDTO 提交请求
  85 + * @return 提交结果
  86 + */
  87 + PayOrderSubmitRespDTO submitPayOrder(@Valid PayOrderSubmitReqDTO reqDTO);
  88 +
  89 + /**
  90 + * 通知支付单成功
  91 + *
  92 + * @param channelId 渠道编号
  93 + * @param notifyData 通知数据
  94 + */
  95 + void notifyPayOrder(Long channelId, PayNotifyDataDTO notifyData) throws Exception;
  96 +
67 } 97 }
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayOrderCoreServiceImpl.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java 100644 → 100755
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl; 1 +package cn.iocoder.yudao.module.pay.service.order;
2 2
3 import cn.hutool.core.date.DateUtil; 3 import cn.hutool.core.date.DateUtil;
4 import cn.hutool.core.util.RandomUtil; 4 import cn.hutool.core.util.RandomUtil;
5 -import cn.iocoder.yudao.coreservice.modules.pay.convert.order.PayOrderCoreConvert;  
6 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;  
7 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;  
8 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;  
9 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;  
10 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper;  
11 -import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderExtensionCoreMapper;  
12 -import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum;  
13 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum;  
14 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum;  
15 -import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayAppCoreService;  
16 -import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayChannelCoreService;  
17 -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService;  
18 -import cn.iocoder.yudao.coreservice.modules.pay.service.notify.dto.PayNotifyTaskCreateReqDTO;  
19 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayOrderCoreService;  
20 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderCreateReqDTO;  
21 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitReqDTO;  
22 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitRespDTO; 5 +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
23 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 6 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
24 import cn.iocoder.yudao.framework.common.util.json.JsonUtils; 7 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
25 import cn.iocoder.yudao.framework.pay.config.PayProperties; 8 import cn.iocoder.yudao.framework.pay.config.PayProperties;
@@ -28,58 +11,94 @@ import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory; @@ -28,58 +11,94 @@ import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;
28 import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO; 11 import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO;
29 import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderNotifyRespDTO; 12 import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderNotifyRespDTO;
30 import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO; 13 import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
  14 +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExportReqVO;
  15 +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageReqVO;
  16 +import cn.iocoder.yudao.module.pay.convert.order.PayOrderConvert;
  17 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
  18 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
  19 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
  20 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
  21 +import cn.iocoder.yudao.module.pay.dal.mysql.order.PayOrderExtensionMapper;
  22 +import cn.iocoder.yudao.module.pay.dal.mysql.order.PayOrderMapper;
  23 +import cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants;
  24 +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyTypeEnum;
  25 +import cn.iocoder.yudao.module.pay.enums.order.PayOrderNotifyStatusEnum;
  26 +import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum;
  27 +import cn.iocoder.yudao.module.pay.service.merchant.PayAppService;
  28 +import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService;
  29 +import cn.iocoder.yudao.module.pay.service.notify.PayNotifyService;
  30 +import cn.iocoder.yudao.module.pay.service.notify.dto.PayNotifyTaskCreateReqDTO;
  31 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  32 +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderCreateReqDTO;
  33 +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitReqDTO;
  34 +import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitRespDTO;
31 import lombok.extern.slf4j.Slf4j; 35 import lombok.extern.slf4j.Slf4j;
32 import org.springframework.stereotype.Service; 36 import org.springframework.stereotype.Service;
33 import org.springframework.transaction.annotation.Transactional; 37 import org.springframework.transaction.annotation.Transactional;
34 import org.springframework.validation.annotation.Validated; 38 import org.springframework.validation.annotation.Validated;
35 39
36 import javax.annotation.Resource; 40 import javax.annotation.Resource;
  41 +import java.util.Collection;
37 import java.util.Date; 42 import java.util.Date;
  43 +import java.util.List;
38 import java.util.Objects; 44 import java.util.Objects;
39 45
40 -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*;  
41 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
42 -  
43 /** 46 /**
44 - * 支付订单 Core Service 实现类 47 + * 支付订单 Service 实现类
45 * 48 *
46 - * @author 芋道源码 49 + * @author aquan
47 */ 50 */
48 @Service 51 @Service
49 @Validated 52 @Validated
50 @Slf4j 53 @Slf4j
51 -public class PayOrderCoreServiceImpl implements PayOrderCoreService { 54 +public class PayOrderServiceImpl implements PayOrderService {
52 55
53 @Resource 56 @Resource
54 private PayProperties payProperties; 57 private PayProperties payProperties;
55 58
56 @Resource 59 @Resource
57 - private PayAppCoreService payAppCoreService; 60 + private PayClientFactory payClientFactory;
  61 +
58 @Resource 62 @Resource
59 - private PayChannelCoreService payChannelCoreService; 63 + private PayOrderMapper orderMapper;
60 @Resource 64 @Resource
61 - private PayNotifyCoreService payNotifyCoreService; 65 + private PayOrderExtensionMapper orderExtensionMapper;
62 66
63 @Resource 67 @Resource
64 - private PayClientFactory payClientFactory;  
65 - 68 + private PayAppService appService;
66 @Resource 69 @Resource
67 - private PayOrderCoreMapper payOrderCoreMapper; 70 + private PayChannelService channelService;
68 @Resource 71 @Resource
69 - private PayOrderExtensionCoreMapper payOrderExtensionCoreMapper; 72 + private PayNotifyService notifyService;
  73 +
  74 + @Override
  75 + public PayOrderDO getOrder(Long id) {
  76 + return orderMapper.selectById(id);
  77 + }
  78 +
  79 + @Override
  80 + public PageResult<PayOrderDO> getOrderPage(PayOrderPageReqVO pageReqVO) {
  81 + return orderMapper.selectPage(pageReqVO);
  82 + }
  83 +
  84 + @Override
  85 + public List<PayOrderDO> getOrderList(PayOrderExportReqVO exportReqVO) {
  86 + return orderMapper.selectList(exportReqVO);
  87 + }
70 88
  89 + // TODO @艿艿:需要优化。不确定这个方法的作用
71 @Override 90 @Override
72 - public PayOrderDO getPayOrder(Long id) {  
73 - return payOrderCoreMapper.selectById(id); 91 + public List<PayOrderDO> getOrderSubjectList(Collection<Long> idList) {
  92 + return orderMapper.findByIdListQueryOrderSubject(idList);
74 } 93 }
75 94
76 @Override 95 @Override
77 public Long createPayOrder(PayOrderCreateReqDTO reqDTO) { 96 public Long createPayOrder(PayOrderCreateReqDTO reqDTO) {
78 // 校验 App 97 // 校验 App
79 - PayAppDO app = payAppCoreService.validPayApp(reqDTO.getAppId()); 98 + PayAppDO app = appService.validPayApp(reqDTO.getAppId());
80 99
81 // 查询对应的支付交易单是否已经存在。如果是,则直接返回 100 // 查询对应的支付交易单是否已经存在。如果是,则直接返回
82 - PayOrderDO order = payOrderCoreMapper.selectByAppIdAndMerchantOrderId( 101 + PayOrderDO order = orderMapper.selectByAppIdAndMerchantOrderId(
83 reqDTO.getAppId(), reqDTO.getMerchantOrderId()); 102 reqDTO.getAppId(), reqDTO.getMerchantOrderId());
84 if (order != null) { 103 if (order != null) {
85 log.warn("[createPayOrder][appId({}) merchantOrderId({}) 已经存在对应的支付单({})]", order.getAppId(), 104 log.warn("[createPayOrder][appId({}) merchantOrderId({}) 已经存在对应的支付单({})]", order.getAppId(),
@@ -88,7 +107,7 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService { @@ -88,7 +107,7 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService {
88 } 107 }
89 108
90 // 创建支付交易单 109 // 创建支付交易单
91 - order = PayOrderCoreConvert.INSTANCE.convert(reqDTO) 110 + order = PayOrderConvert.INSTANCE.convert(reqDTO)
92 .setMerchantId(app.getMerchantId()).setAppId(app.getId()); 111 .setMerchantId(app.getMerchantId()).setAppId(app.getId());
93 // 商户相关字段 112 // 商户相关字段
94 order.setNotifyUrl(app.getPayNotifyUrl()) 113 order.setNotifyUrl(app.getPayNotifyUrl())
@@ -99,7 +118,7 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService { @@ -99,7 +118,7 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService {
99 // todo @芋艿 创建支付的订单的退款状态枚举是不是有问题,应该是 PayRefundTypeEnum 吧 您这填写的是 PayOrderNotifyStatusEnum 回调状态枚举 118 // todo @芋艿 创建支付的订单的退款状态枚举是不是有问题,应该是 PayRefundTypeEnum 吧 您这填写的是 PayOrderNotifyStatusEnum 回调状态枚举
100 order.setRefundStatus(PayOrderNotifyStatusEnum.NO.getStatus()) 119 order.setRefundStatus(PayOrderNotifyStatusEnum.NO.getStatus())
101 .setRefundTimes(0).setRefundAmount(0L); 120 .setRefundTimes(0).setRefundAmount(0L);
102 - payOrderCoreMapper.insert(order); 121 + orderMapper.insert(order);
103 // 最终返回 122 // 最终返回
104 return order.getId(); 123 return order.getId();
105 } 124 }
@@ -107,34 +126,34 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService { @@ -107,34 +126,34 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService {
107 @Override 126 @Override
108 public PayOrderSubmitRespDTO submitPayOrder(PayOrderSubmitReqDTO reqDTO) { 127 public PayOrderSubmitRespDTO submitPayOrder(PayOrderSubmitReqDTO reqDTO) {
109 // 校验 App 128 // 校验 App
110 - payAppCoreService.validPayApp(reqDTO.getAppId()); 129 + appService.validPayApp(reqDTO.getAppId());
111 // 校验支付渠道是否有效 130 // 校验支付渠道是否有效
112 - PayChannelDO channel = payChannelCoreService.validPayChannel(reqDTO.getAppId(), reqDTO.getChannelCode()); 131 + PayChannelDO channel = channelService.validPayChannel(reqDTO.getAppId(), reqDTO.getChannelCode());
113 // 校验支付客户端是否正确初始化 132 // 校验支付客户端是否正确初始化
114 PayClient client = payClientFactory.getPayClient(channel.getId()); 133 PayClient client = payClientFactory.getPayClient(channel.getId());
115 if (client == null) { 134 if (client == null) {
116 log.error("[submitPayOrder][渠道编号({}) 找不到对应的支付客户端]", channel.getId()); 135 log.error("[submitPayOrder][渠道编号({}) 找不到对应的支付客户端]", channel.getId());
117 - throw exception(PAY_CHANNEL_CLIENT_NOT_FOUND); 136 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_CHANNEL_CLIENT_NOT_FOUND);
118 } 137 }
119 138
120 // 获得 PayOrderDO ,并校验其是否存在 139 // 获得 PayOrderDO ,并校验其是否存在
121 - PayOrderDO order = payOrderCoreMapper.selectById(reqDTO.getId()); 140 + PayOrderDO order = orderMapper.selectById(reqDTO.getId());
122 if (order == null || !Objects.equals(order.getAppId(), reqDTO.getAppId())) { // 是否存在 141 if (order == null || !Objects.equals(order.getAppId(), reqDTO.getAppId())) { // 是否存在
123 - throw exception(PAY_ORDER_NOT_FOUND); 142 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_NOT_FOUND);
124 } 143 }
125 if (!PayOrderStatusEnum.WAITING.getStatus().equals(order.getStatus())) { // 校验状态,必须是待支付 144 if (!PayOrderStatusEnum.WAITING.getStatus().equals(order.getStatus())) { // 校验状态,必须是待支付
126 - throw exception(PAY_ORDER_STATUS_IS_NOT_WAITING); 145 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_STATUS_IS_NOT_WAITING);
127 } 146 }
128 147
129 // 插入 PayOrderExtensionDO 148 // 插入 PayOrderExtensionDO
130 - PayOrderExtensionDO orderExtension = PayOrderCoreConvert.INSTANCE.convert(reqDTO) 149 + PayOrderExtensionDO orderExtension = PayOrderConvert.INSTANCE.convert(reqDTO)
131 .setOrderId(order.getId()).setNo(generateOrderExtensionNo()) 150 .setOrderId(order.getId()).setNo(generateOrderExtensionNo())
132 .setChannelId(channel.getId()).setChannelCode(channel.getCode()) 151 .setChannelId(channel.getId()).setChannelCode(channel.getCode())
133 .setStatus(PayOrderStatusEnum.WAITING.getStatus()); 152 .setStatus(PayOrderStatusEnum.WAITING.getStatus());
134 - payOrderExtensionCoreMapper.insert(orderExtension); 153 + orderExtensionMapper.insert(orderExtension);
135 154
136 // 调用三方接口 155 // 调用三方接口
137 - PayOrderUnifiedReqDTO unifiedOrderReqDTO = PayOrderCoreConvert.INSTANCE.convert2(reqDTO); 156 + PayOrderUnifiedReqDTO unifiedOrderReqDTO = PayOrderConvert.INSTANCE.convert2(reqDTO);
138 // 商户相关字段 157 // 商户相关字段
139 //TODO jason @芋艿 是否加一个属性 如tradeNo 支付订单号, 用这个merchantOrderId让人迷糊 158 //TODO jason @芋艿 是否加一个属性 如tradeNo 支付订单号, 用这个merchantOrderId让人迷糊
140 unifiedOrderReqDTO.setMerchantOrderId(orderExtension.getNo()) // 注意,此处使用的是 PayOrderExtensionDO.no 属性! 159 unifiedOrderReqDTO.setMerchantOrderId(orderExtension.getNo()) // 注意,此处使用的是 PayOrderExtensionDO.no 属性!
@@ -197,12 +216,12 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService { @@ -197,12 +216,12 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService {
197 log.info("[notifyPayOrder][channelId({}) 回调数据({})]", channelId, notifyData.getBody()); 216 log.info("[notifyPayOrder][channelId({}) 回调数据({})]", channelId, notifyData.getBody());
198 217
199 // 校验支付渠道是否有效 218 // 校验支付渠道是否有效
200 - PayChannelDO channel = payChannelCoreService.validPayChannel(channelId); 219 + PayChannelDO channel = channelService.validPayChannel(channelId);
201 // 校验支付客户端是否正确初始化 220 // 校验支付客户端是否正确初始化
202 PayClient client = payClientFactory.getPayClient(channel.getId()); 221 PayClient client = payClientFactory.getPayClient(channel.getId());
203 if (client == null) { 222 if (client == null) {
204 log.error("[notifyPayOrder][渠道编号({}) 找不到对应的支付客户端]", channel.getId()); 223 log.error("[notifyPayOrder][渠道编号({}) 找不到对应的支付客户端]", channel.getId());
205 - throw exception(PAY_CHANNEL_CLIENT_NOT_FOUND); 224 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_CHANNEL_CLIENT_NOT_FOUND);
206 } 225 }
207 226
208 // 解析支付结果 227 // 解析支付结果
@@ -210,45 +229,44 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService { @@ -210,45 +229,44 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService {
210 229
211 // TODO 芋艿,先最严格的校验。即使调用方重复调用,实际哪个订单已经被重复回调的支付,也返回 false 。也没问题,因为实际已经回调成功了。 230 // TODO 芋艿,先最严格的校验。即使调用方重复调用,实际哪个订单已经被重复回调的支付,也返回 false 。也没问题,因为实际已经回调成功了。
212 // 1.1 查询 PayOrderExtensionDO 231 // 1.1 查询 PayOrderExtensionDO
213 - PayOrderExtensionDO orderExtension = payOrderExtensionCoreMapper.selectByNo(  
214 - notifyRespDTO.getOrderExtensionNo()); 232 + PayOrderExtensionDO orderExtension = orderExtensionMapper.selectByNo(notifyRespDTO.getOrderExtensionNo());
215 if (orderExtension == null) { 233 if (orderExtension == null) {
216 - throw exception(PAY_ORDER_EXTENSION_NOT_FOUND); 234 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_EXTENSION_NOT_FOUND);
217 } 235 }
218 if (!PayOrderStatusEnum.WAITING.getStatus().equals(orderExtension.getStatus())) { // 校验状态,必须是待支付 236 if (!PayOrderStatusEnum.WAITING.getStatus().equals(orderExtension.getStatus())) { // 校验状态,必须是待支付
219 - throw exception(PAY_ORDER_EXTENSION_STATUS_IS_NOT_WAITING); 237 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_EXTENSION_STATUS_IS_NOT_WAITING);
220 } 238 }
221 // 1.2 更新 PayOrderExtensionDO 239 // 1.2 更新 PayOrderExtensionDO
222 //TODO 支付宝交易超时 TRADE_FINISHED 需要更新交易关闭 240 //TODO 支付宝交易超时 TRADE_FINISHED 需要更新交易关闭
223 - int updateCounts = payOrderExtensionCoreMapper.updateByIdAndStatus(orderExtension.getId(), 241 + int updateCounts = orderExtensionMapper.updateByIdAndStatus(orderExtension.getId(),
224 PayOrderStatusEnum.WAITING.getStatus(), PayOrderExtensionDO.builder().id(orderExtension.getId()) 242 PayOrderStatusEnum.WAITING.getStatus(), PayOrderExtensionDO.builder().id(orderExtension.getId())
225 .status(PayOrderStatusEnum.SUCCESS.getStatus()).channelNotifyData(notifyData.getBody()).build()); 243 .status(PayOrderStatusEnum.SUCCESS.getStatus()).channelNotifyData(notifyData.getBody()).build());
226 if (updateCounts == 0) { // 校验状态,必须是待支付 244 if (updateCounts == 0) { // 校验状态,必须是待支付
227 - throw exception(PAY_ORDER_EXTENSION_STATUS_IS_NOT_WAITING); 245 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_EXTENSION_STATUS_IS_NOT_WAITING);
228 } 246 }
229 log.info("[notifyPayOrder][支付拓展单({}) 更新为已支付]", orderExtension.getId()); 247 log.info("[notifyPayOrder][支付拓展单({}) 更新为已支付]", orderExtension.getId());
230 248
231 // 2.1 判断 PayOrderDO 是否处于待支付 249 // 2.1 判断 PayOrderDO 是否处于待支付
232 - PayOrderDO order = payOrderCoreMapper.selectById(orderExtension.getOrderId()); 250 + PayOrderDO order = orderMapper.selectById(orderExtension.getOrderId());
233 if (order == null) { 251 if (order == null) {
234 - throw exception(PAY_ORDER_NOT_FOUND); 252 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_NOT_FOUND);
235 } 253 }
236 if (!PayOrderStatusEnum.WAITING.getStatus().equals(order.getStatus())) { // 校验状态,必须是待支付 254 if (!PayOrderStatusEnum.WAITING.getStatus().equals(order.getStatus())) { // 校验状态,必须是待支付
237 - throw exception(PAY_ORDER_STATUS_IS_NOT_WAITING); 255 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_STATUS_IS_NOT_WAITING);
238 } 256 }
239 // 2.2 更新 PayOrderDO 257 // 2.2 更新 PayOrderDO
240 - updateCounts = payOrderCoreMapper.updateByIdAndStatus(order.getId(), PayOrderStatusEnum.WAITING.getStatus(), 258 + updateCounts = orderMapper.updateByIdAndStatus(order.getId(), PayOrderStatusEnum.WAITING.getStatus(),
241 PayOrderDO.builder().status(PayOrderStatusEnum.SUCCESS.getStatus()).channelId(channelId).channelCode(channel.getCode()) 259 PayOrderDO.builder().status(PayOrderStatusEnum.SUCCESS.getStatus()).channelId(channelId).channelCode(channel.getCode())
242 .successTime(notifyRespDTO.getSuccessTime()).successExtensionId(orderExtension.getId()) 260 .successTime(notifyRespDTO.getSuccessTime()).successExtensionId(orderExtension.getId())
243 .channelOrderNo(notifyRespDTO.getChannelOrderNo()).channelUserId(notifyRespDTO.getChannelUserId()) 261 .channelOrderNo(notifyRespDTO.getChannelOrderNo()).channelUserId(notifyRespDTO.getChannelUserId())
244 .notifyTime(new Date()).build()); 262 .notifyTime(new Date()).build());
245 if (updateCounts == 0) { // 校验状态,必须是待支付 263 if (updateCounts == 0) { // 校验状态,必须是待支付
246 - throw exception(PAY_ORDER_STATUS_IS_NOT_WAITING); 264 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_STATUS_IS_NOT_WAITING);
247 } 265 }
248 log.info("[notifyPayOrder][支付订单({}) 更新为已支付]", order.getId()); 266 log.info("[notifyPayOrder][支付订单({}) 更新为已支付]", order.getId());
249 267
250 // 3. 插入支付通知记录 268 // 3. 插入支付通知记录
251 - payNotifyCoreService.createPayNotifyTask(PayNotifyTaskCreateReqDTO.builder() 269 + notifyService.createPayNotifyTask(PayNotifyTaskCreateReqDTO.builder()
252 .type(PayNotifyTypeEnum.ORDER.getType()).dataId(order.getId()).build()); 270 .type(PayNotifyTypeEnum.ORDER.getType()).dataId(order.getId()).build());
253 } 271 }
254 272
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderCreateReqDTO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayOrderCreateReqDTO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.order.dto; 1 +package cn.iocoder.yudao.module.pay.service.order.dto;
2 2
3 import lombok.Data; 3 import lombok.Data;
4 import org.hibernate.validator.constraints.Length; 4 import org.hibernate.validator.constraints.Length;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderSubmitReqDTO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayOrderSubmitReqDTO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.order.dto; 1 +package cn.iocoder.yudao.module.pay.service.order.dto;
2 2
3 import lombok.Data; 3 import lombok.Data;
4 import lombok.experimental.Accessors; 4 import lombok.experimental.Accessors;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderSubmitRespDTO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayOrderSubmitRespDTO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.order.dto; 1 +package cn.iocoder.yudao.module.pay.service.order.dto;
2 2
3 import lombok.Data; 3 import lombok.Data;
4 4
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayRefundReqDTO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayRefundReqDTO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.order.dto; 1 +package cn.iocoder.yudao.module.pay.service.order.dto;
2 2
3 import lombok.AllArgsConstructor; 3 import lombok.AllArgsConstructor;
4 import lombok.Builder; 4 import lombok.Builder;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayRefundRespDTO.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/order/dto/PayRefundRespDTO.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.service.order.dto; 1 +package cn.iocoder.yudao.module.pay.service.order.dto;
2 2
3 import lombok.AllArgsConstructor; 3 import lombok.AllArgsConstructor;
4 import lombok.Builder; 4 import lombok.Builder;
yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.module.pay.service;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayRefundService.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundService.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.order; 1 +package cn.iocoder.yudao.module.pay.service.refund;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO;  
5 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO; 3 +import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO;
  4 +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundExportReqVO;
  5 +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundPageReqVO;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  7 +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
  8 +import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundReqDTO;
  9 +import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundRespDTO;
7 10
8 import java.util.List; 11 import java.util.List;
9 12
@@ -38,4 +41,21 @@ public interface PayRefundService { @@ -38,4 +41,21 @@ public interface PayRefundService {
38 */ 41 */
39 List<PayRefundDO> getRefundList(PayRefundExportReqVO exportReqVO); 42 List<PayRefundDO> getRefundList(PayRefundExportReqVO exportReqVO);
40 43
  44 + /**
  45 + * 提交退款申请
  46 + *
  47 + * @param reqDTO 退款申请信息
  48 + * @return 退款申请返回信息
  49 + */
  50 + PayRefundRespDTO submitRefundOrder(PayRefundReqDTO reqDTO);
  51 +
  52 + /**
  53 + * 渠道的退款通知
  54 + *
  55 + * @param channelId 渠道编号
  56 + * @param notifyData 通知数据
  57 + * @throws Exception 退款通知异常
  58 + */
  59 + void notifyPayRefund(Long channelId, PayNotifyDataDTO notifyData) throws Exception;
  60 +
41 } 61 }
yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundServiceImpl.java 0 → 100755
  1 +package cn.iocoder.yudao.module.pay.service.refund;
  2 +
  3 +import cn.hutool.core.util.StrUtil;
  4 +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
  5 +import cn.iocoder.yudao.framework.pay.core.client.PayClient;
  6 +import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;
  7 +import cn.iocoder.yudao.framework.pay.core.client.PayCommonResult;
  8 +import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO;
  9 +import cn.iocoder.yudao.framework.pay.core.client.dto.PayRefundNotifyDTO;
  10 +import cn.iocoder.yudao.framework.pay.core.client.dto.PayRefundUnifiedReqDTO;
  11 +import cn.iocoder.yudao.framework.pay.core.client.dto.PayRefundUnifiedRespDTO;
  12 +import cn.iocoder.yudao.framework.pay.core.enums.PayNotifyRefundStatusEnum;
  13 +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundExportReqVO;
  14 +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundPageReqVO;
  15 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
  16 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
  17 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
  18 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
  19 +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
  20 +import cn.iocoder.yudao.module.pay.dal.mysql.order.PayOrderMapper;
  21 +import cn.iocoder.yudao.module.pay.dal.mysql.refund.PayRefundMapper;
  22 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  23 +import cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants;
  24 +import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyTypeEnum;
  25 +import cn.iocoder.yudao.module.pay.enums.order.PayOrderNotifyStatusEnum;
  26 +import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum;
  27 +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum;
  28 +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundTypeEnum;
  29 +import cn.iocoder.yudao.module.pay.service.merchant.PayAppService;
  30 +import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService;
  31 +import cn.iocoder.yudao.module.pay.service.notify.PayNotifyService;
  32 +import cn.iocoder.yudao.module.pay.service.notify.dto.PayNotifyTaskCreateReqDTO;
  33 +import cn.iocoder.yudao.module.pay.service.order.PayOrderExtensionService;
  34 +import cn.iocoder.yudao.module.pay.service.order.PayOrderService;
  35 +import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundReqDTO;
  36 +import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundRespDTO;
  37 +import lombok.extern.slf4j.Slf4j;
  38 +import org.springframework.stereotype.Service;
  39 +import org.springframework.transaction.annotation.Transactional;
  40 +import org.springframework.validation.annotation.Validated;
  41 +
  42 +import javax.annotation.Resource;
  43 +import java.util.Date;
  44 +import java.util.List;
  45 +import java.util.Objects;
  46 +
  47 +/**
  48 + * 退款订单 Service 实现类
  49 + *
  50 + * @author aquan
  51 + */
  52 +@Service
  53 +@Slf4j
  54 +@Validated
  55 +public class PayRefundServiceImpl implements PayRefundService {
  56 +
  57 + @Resource
  58 + private PayClientFactory payClientFactory;
  59 +
  60 + @Resource
  61 + private PayRefundMapper refundMapper;
  62 + @Resource
  63 + private PayOrderMapper orderMapper; // TODO @jason:需要改成不直接操作 db;
  64 +
  65 + @Resource
  66 + private PayOrderService orderService;
  67 + @Resource
  68 + private PayOrderExtensionService orderExtensionService;
  69 + @Resource
  70 + private PayAppService appService;
  71 + @Resource
  72 + private PayChannelService channelService;
  73 + @Resource
  74 + private PayNotifyService notifyService;
  75 +
  76 + @Override
  77 + public PayRefundDO getRefund(Long id) {
  78 + return refundMapper.selectById(id);
  79 + }
  80 +
  81 + @Override
  82 + public PageResult<PayRefundDO> getRefundPage(PayRefundPageReqVO pageReqVO) {
  83 + return refundMapper.selectPage(pageReqVO);
  84 + }
  85 +
  86 + @Override
  87 + public List<PayRefundDO> getRefundList(PayRefundExportReqVO exportReqVO) {
  88 + return refundMapper.selectList(exportReqVO);
  89 + }
  90 +
  91 + @Override
  92 + @Transactional(rollbackFor = Exception.class)
  93 + public PayRefundRespDTO submitRefundOrder(PayRefundReqDTO req) {
  94 + // 获得 PayOrderDO
  95 + PayOrderDO order = orderService.getOrder(req.getPayOrderId());
  96 + // 校验订单是否存在
  97 + if (Objects.isNull(order) ) {
  98 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_NOT_FOUND);
  99 + }
  100 + // 校验 App
  101 + PayAppDO app = appService.validPayApp(order.getAppId());
  102 + // 校验支付渠道是否有效
  103 + PayChannelDO channel = channelService.validPayChannel(order.getChannelId());
  104 + // 校验支付客户端是否正确初始化
  105 + PayClient client = payClientFactory.getPayClient(channel.getId());
  106 + if (client == null) {
  107 + log.error("[refund][渠道编号({}) 找不到对应的支付客户端]", channel.getId());
  108 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_CHANNEL_CLIENT_NOT_FOUND);
  109 + }
  110 +
  111 + // 校验退款的条件
  112 + validatePayRefund(req, order);
  113 + // 退款类型
  114 + PayRefundTypeEnum refundType = PayRefundTypeEnum.SOME;
  115 + if (Objects.equals(req.getAmount(), order.getAmount())) {
  116 + refundType = PayRefundTypeEnum.ALL;
  117 + }
  118 + PayOrderExtensionDO orderExtensionDO = orderExtensionService.getOrderExtension(order.getSuccessExtensionId());
  119 + PayRefundDO payRefundDO = refundMapper.selectByTradeNoAndMerchantRefundNo(orderExtensionDO.getNo(), req.getMerchantRefundId());
  120 + if(Objects.nonNull(payRefundDO)){
  121 + // 退款订单已经提交过。
  122 + //TODO 校验相同退款单的金额
  123 + // TODO @jason:咱要不封装一个 ObjectUtils.equalsAny
  124 + if (Objects.equals(PayRefundStatusEnum.SUCCESS.getStatus(), payRefundDO.getStatus())
  125 + || Objects.equals(PayRefundStatusEnum.CLOSE.getStatus(), payRefundDO.getStatus())) {
  126 + //已成功退款
  127 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_REFUND_SUCCEED);
  128 + }
  129 + //可以重复提交,保证 退款请求号 一致,由渠道保证幂等
  130 + } else {
  131 + // 成功,插入退款单 状态为生成.没有和渠道交互
  132 + // TODO @jason:搞到 convert 里。一些额外的自动,手动 set 下;
  133 + payRefundDO = PayRefundDO.builder().channelOrderNo(order.getChannelOrderNo())
  134 + .appId(order.getAppId())
  135 + .channelOrderNo(order.getChannelOrderNo())
  136 + .channelCode(order.getChannelCode())
  137 + .channelId(order.getChannelId())
  138 + .merchantId(order.getMerchantId())
  139 + .orderId(order.getId())
  140 + .merchantRefundNo(req.getMerchantRefundId())
  141 + .notifyUrl(app.getRefundNotifyUrl())
  142 + .payAmount(order.getAmount())
  143 + .refundAmount(req.getAmount())
  144 + .userIp(req.getUserIp())
  145 + .merchantOrderId(order.getMerchantOrderId())
  146 + .tradeNo(orderExtensionDO.getNo())
  147 + .status(PayRefundStatusEnum.CREATE.getStatus())
  148 + .reason(req.getReason())
  149 + .notifyStatus(PayOrderNotifyStatusEnum.NO.getStatus())
  150 + .type(refundType.getStatus())
  151 + .build();
  152 + refundMapper.insert(payRefundDO);
  153 + }
  154 + // TODO @jason:搞到 convert 里。一些额外的自动,手动 set 下;
  155 + PayRefundUnifiedReqDTO unifiedReqDTO = new PayRefundUnifiedReqDTO();
  156 + unifiedReqDTO.setUserIp(req.getUserIp())
  157 + .setAmount(req.getAmount())
  158 + .setChannelOrderNo(order.getChannelOrderNo())
  159 + .setPayTradeNo(orderExtensionDO.getNo())
  160 + .setMerchantRefundId(req.getMerchantRefundId())
  161 + .setReason(req.getReason());
  162 + // 向渠道发起退款申请
  163 + PayCommonResult<PayRefundUnifiedRespDTO> refundUnifiedResult = client.unifiedRefund(unifiedReqDTO);
  164 + // 检查是否失败,失败抛出业务异常。
  165 + // TODO 渠道的异常记录。
  166 + // TODO @jason:可以先打个 warn log 哈;
  167 + refundUnifiedResult.checkError();
  168 + // 成功在 退款回调中处理
  169 + return PayRefundRespDTO.builder().refundId(payRefundDO.getId()).build();
  170 + }
  171 +
  172 + @Override
  173 + @Transactional(rollbackFor = Exception.class)
  174 + public void notifyPayRefund(Long channelId, PayNotifyDataDTO notifyData) {
  175 + log.info("[notifyPayRefund][channelId({}) 回调数据({})]", channelId, notifyData.getBody());
  176 + // 校验支付渠道是否有效
  177 + PayChannelDO channel = channelService.validPayChannel(channelId);
  178 + // 校验支付客户端是否正确初始化
  179 + PayClient client = payClientFactory.getPayClient(channel.getId());
  180 + if (client == null) {
  181 + log.error("[notifyPayOrder][渠道编号({}) 找不到对应的支付客户端]", channel.getId());
  182 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_CHANNEL_CLIENT_NOT_FOUND);
  183 + }
  184 + // 解析渠道退款通知数据, 统一处理
  185 + PayRefundNotifyDTO refundNotify = client.parseRefundNotify(notifyData);
  186 + if (Objects.equals(PayNotifyRefundStatusEnum.SUCCESS,refundNotify.getStatus())){
  187 + payRefundSuccess(refundNotify);
  188 + } else {
  189 + //TODO 支付异常, 支付宝似乎没有支付异常的通知。
  190 + // TODO @jason:那这里可以考虑打个 error logger @芋艿 微信是否存在支付异常通知
  191 + }
  192 + }
  193 +
  194 + private void payRefundSuccess(PayRefundNotifyDTO refundNotify) {
  195 + // 校验退款单存在
  196 + PayRefundDO refundDO = refundMapper.selectByTradeNoAndMerchantRefundNo(refundNotify.getTradeNo(), refundNotify.getReqNo());
  197 + if (refundDO == null) {
  198 + log.error("[payRefundSuccess][不存在 seqNo 为{} 的支付退款单]", refundNotify.getReqNo());
  199 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_REFUND_NOT_FOUND);
  200 + }
  201 +
  202 + // 得到已退金额
  203 + PayOrderDO payOrderDO = orderService.getOrder(refundDO.getOrderId());
  204 + Long refundedAmount = payOrderDO.getRefundAmount();
  205 +
  206 + PayOrderStatusEnum orderStatus = PayOrderStatusEnum.SUCCESS;
  207 + if(Objects.equals(payOrderDO.getAmount(), refundedAmount+ refundDO.getRefundAmount())){
  208 + //支付金额 = 已退金额 + 本次退款金额。
  209 + orderStatus = PayOrderStatusEnum.CLOSED;
  210 + }
  211 + // 更新支付订单
  212 + PayOrderDO updateOrderDO = new PayOrderDO();
  213 + updateOrderDO.setId(refundDO.getOrderId())
  214 + .setRefundAmount(refundedAmount + refundDO.getRefundAmount())
  215 + .setStatus(orderStatus.getStatus())
  216 + .setRefundTimes(payOrderDO.getRefundTimes() + 1)
  217 + .setRefundStatus(refundDO.getType());
  218 + orderMapper.updateById(updateOrderDO);
  219 +
  220 + // 更新退款订单
  221 + PayRefundDO updateRefundDO = new PayRefundDO();
  222 + updateRefundDO.setId(refundDO.getId())
  223 + .setSuccessTime(refundNotify.getRefundSuccessTime())
  224 + .setChannelRefundNo(refundNotify.getChannelOrderNo())
  225 + .setTradeNo(refundNotify.getTradeNo())
  226 + .setNotifyTime(new Date())
  227 + .setStatus(PayRefundStatusEnum.SUCCESS.getStatus());
  228 + refundMapper.updateById(updateRefundDO);
  229 +
  230 + // 插入退款通知记录
  231 + // TODO 通知商户成功或者失败. 现在通知似乎没有实现, 只是回调
  232 + notifyService.createPayNotifyTask(PayNotifyTaskCreateReqDTO.builder()
  233 + .type(PayNotifyTypeEnum.REFUND.getType()).dataId(refundDO.getId()).build());
  234 + }
  235 +
  236 + /**
  237 + * 校验是否进行退款
  238 + * @param req 退款申请信息
  239 + * @param order 原始支付订单信息
  240 + */
  241 + private void validatePayRefund(PayRefundReqDTO req, PayOrderDO order) {
  242 + // 校验状态,必须是支付状态
  243 + if (!PayOrderStatusEnum.SUCCESS.getStatus().equals(order.getStatus())) {
  244 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_STATUS_IS_NOT_SUCCESS);
  245 + }
  246 + // 是否已经全额退款
  247 + if (PayRefundTypeEnum.ALL.getStatus().equals(order.getRefundStatus())) {
  248 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_REFUND_ALL_REFUNDED);
  249 + }
  250 + // 校验金额 退款金额不能大于 原定的金额
  251 + if (req.getAmount() + order.getRefundAmount() > order.getAmount()){
  252 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_REFUND_AMOUNT_EXCEED);
  253 + }
  254 + // 校验渠道订单号
  255 + if (StrUtil.isEmpty(order.getChannelOrderNo())) {
  256 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_REFUND_CHN_ORDER_NO_IS_NULL);
  257 + }
  258 + //TODO 退款的期限 退款次数的控制
  259 + }
  260 +
  261 +}
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/util/PaySeqUtils.java renamed to yudao-module-pay/yudao-module-pay-impl/src/main/java/cn/iocoder/yudao/module/pay/util/PaySeqUtils.java
1 -package cn.iocoder.yudao.coreservice.modules.pay.util; 1 +package cn.iocoder.yudao.module.pay.util;
2 2
3 import cn.hutool.core.date.DatePattern; 3 import cn.hutool.core.date.DatePattern;
4 import cn.hutool.core.date.DateUtil; 4 import cn.hutool.core.date.DateUtil;
@@ -10,6 +10,7 @@ import java.util.concurrent.atomic.AtomicLong; @@ -10,6 +10,7 @@ import java.util.concurrent.atomic.AtomicLong;
10 /** 10 /**
11 * 支付相关编号的生产 11 * 支付相关编号的生产
12 */ 12 */
  13 +// TODO @jason:需要改造,基于 db;
13 public class PaySeqUtils { 14 public class PaySeqUtils {
14 15
15 private static final AtomicLong REFUND_REQ_NO_SEQ = new AtomicLong(0L); 16 private static final AtomicLong REFUND_REQ_NO_SEQ = new AtomicLong(0L);
@@ -47,4 +48,5 @@ public class PaySeqUtils { @@ -47,4 +48,5 @@ public class PaySeqUtils {
47 DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN), 48 DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN),
48 (int) MER_ORDER_NO_SEQ.getAndIncrement() % 10000); 49 (int) MER_ORDER_NO_SEQ.getAndIncrement() % 10000);
49 } 50 }
  51 +
50 } 52 }
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/app/PayAppServiceTest.java renamed to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayAppServiceTest.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.app; 1 +package cn.iocoder.yudao.module.pay.service.merchant;
2 2
3 import cn.hutool.core.util.RandomUtil; 3 import cn.hutool.core.util.RandomUtil;
4 -import cn.iocoder.yudao.adminserver.BaseDbUnitTest;  
5 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppCreateReqVO;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppExportReqVO;  
7 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppPageReqVO;  
8 -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.PayAppUpdateReqVO;  
9 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.app.PayAppMapper;  
10 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant.PayMerchantMapper;  
11 -import cn.iocoder.yudao.adminserver.modules.pay.service.app.impl.PayAppServiceImpl;  
12 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;  
13 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; 4 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppCreateReqVO;
  5 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppExportReqVO;
  6 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppPageReqVO;
  7 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.PayAppUpdateReqVO;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
  9 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
  10 +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayAppMapper;
  11 +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayMerchantMapper;
14 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 12 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
15 import cn.iocoder.yudao.framework.common.pojo.PageResult; 13 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  14 +import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest;
16 import org.junit.jupiter.api.Test; 15 import org.junit.jupiter.api.Test;
17 import org.mockito.Mockito; 16 import org.mockito.Mockito;
18 import org.springframework.boot.test.mock.mockito.MockBean; 17 import org.springframework.boot.test.mock.mockito.MockBean;
@@ -22,13 +21,13 @@ import javax.annotation.Resource; @@ -22,13 +21,13 @@ import javax.annotation.Resource;
22 import java.util.Collections; 21 import java.util.Collections;
23 import java.util.List; 22 import java.util.List;
24 23
25 -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_APP_NOT_FOUND;  
26 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; 24 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
27 import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; 25 import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
28 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; 26 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
29 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; 27 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
30 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; 28 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
31 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; 29 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
  30 +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*;
32 import static org.junit.jupiter.api.Assertions.*; 31 import static org.junit.jupiter.api.Assertions.*;
33 32
34 /** 33 /**
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/channel/PayChannelServiceTest.java renamed to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelServiceTest.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.channel;  
2 -  
3 -import cn.iocoder.yudao.adminserver.BaseDbUnitTest;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelCreateReqVO;  
5 -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelExportReqVO;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelPageReqVO;  
7 -import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelUpdateReqVO;  
8 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.channel.PayChannelMapper;  
9 -import cn.iocoder.yudao.adminserver.modules.pay.service.channel.impl.PayChannelServiceImpl;  
10 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO; 1 +package cn.iocoder.yudao.module.pay.service.merchant;
  2 +
11 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
12 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
13 import cn.iocoder.yudao.framework.pay.core.client.impl.alipay.AlipayPayClientConfig; 5 import cn.iocoder.yudao.framework.pay.core.client.impl.alipay.AlipayPayClientConfig;
14 import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig; 6 import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig;
15 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; 7 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
  8 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelCreateReqVO;
  9 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelExportReqVO;
  10 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelPageReqVO;
  11 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelUpdateReqVO;
  12 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
  13 +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayChannelMapper;
  14 +import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest;
16 import com.alibaba.fastjson.JSON; 15 import com.alibaba.fastjson.JSON;
17 import org.junit.jupiter.api.Test; 16 import org.junit.jupiter.api.Test;
18 import org.springframework.context.annotation.Import; 17 import org.springframework.context.annotation.Import;
@@ -20,24 +19,16 @@ import org.springframework.context.annotation.Import; @@ -20,24 +19,16 @@ import org.springframework.context.annotation.Import;
20 import javax.annotation.Resource; 19 import javax.annotation.Resource;
21 import java.util.List; 20 import java.util.List;
22 21
23 -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.CHANNEL_NOT_EXISTS;  
24 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; 22 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
25 import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; 23 import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
26 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; 24 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
27 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; 25 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
28 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; 26 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
29 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; 27 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
  28 +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.CHANNEL_NOT_EXISTS;
30 import static org.junit.jupiter.api.Assertions.*; 29 import static org.junit.jupiter.api.Assertions.*;
31 30
32 -/**  
33 - * {@link PayChannelServiceImpl} 的单元测试类  
34 - *  
35 - * @author 芋艿  
36 - */  
37 -@Import({  
38 - PayChannelServiceImpl.class,  
39 - PayChannelConfig.class  
40 -}) 31 +@Import({PayChannelServiceImpl.class})
41 public class PayChannelServiceTest extends BaseDbUnitTest { 32 public class PayChannelServiceTest extends BaseDbUnitTest {
42 33
43 @Resource 34 @Resource
@@ -66,7 +57,6 @@ public class PayChannelServiceTest extends BaseDbUnitTest { @@ -66,7 +57,6 @@ public class PayChannelServiceTest extends BaseDbUnitTest {
66 assertPojoEquals(reqVO, channel, "config"); 57 assertPojoEquals(reqVO, channel, "config");
67 // 关于config 对象应该拿出来重新对比 58 // 关于config 对象应该拿出来重新对比
68 assertPojoEquals(v2Config, channel.getConfig()); 59 assertPojoEquals(v2Config, channel.getConfig());
69 -  
70 } 60 }
71 61
72 @Test 62 @Test
@@ -350,7 +340,6 @@ public class PayChannelServiceTest extends BaseDbUnitTest { @@ -350,7 +340,6 @@ public class PayChannelServiceTest extends BaseDbUnitTest {
350 assertPojoEquals(payClientConfig, list.get(0).getConfig()); 340 assertPojoEquals(payClientConfig, list.get(0).getConfig());
351 } 341 }
352 342
353 -  
354 public WXPayClientConfig getV2Config() { 343 public WXPayClientConfig getV2Config() {
355 return new WXPayClientConfig() 344 return new WXPayClientConfig()
356 .setAppId("APP00001") 345 .setAppId("APP00001")
@@ -400,5 +389,4 @@ public class PayChannelServiceTest extends BaseDbUnitTest { @@ -400,5 +389,4 @@ public class PayChannelServiceTest extends BaseDbUnitTest {
400 .setRootCertContent("13321321321dsad"); 389 .setRootCertContent("13321321321dsad");
401 } 390 }
402 391
403 -  
404 } 392 }
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/merchant/PayMerchantServiceTest.java renamed to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/merchant/PayMerchantServiceTest.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.merchant; 1 +package cn.iocoder.yudao.module.pay.service.merchant;
2 2
3 import cn.hutool.core.util.RandomUtil; 3 import cn.hutool.core.util.RandomUtil;
4 -import cn.iocoder.yudao.adminserver.BaseDbUnitTest;  
5 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantCreateReqVO;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantExportReqVO;  
7 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantPageReqVO;  
8 -import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.PayMerchantUpdateReqVO;  
9 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.merchant.PayMerchantMapper;  
10 -import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.impl.PayMerchantServiceImpl;  
11 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO; 4 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantCreateReqVO;
  5 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantExportReqVO;
  6 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantPageReqVO;
  7 +import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantUpdateReqVO;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
  9 +import cn.iocoder.yudao.module.pay.dal.mysql.merchant.PayMerchantMapper;
12 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 10 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
13 import cn.iocoder.yudao.framework.common.pojo.PageResult; 11 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  12 +import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest;
14 import org.junit.jupiter.api.Test; 13 import org.junit.jupiter.api.Test;
15 import org.springframework.context.annotation.Import; 14 import org.springframework.context.annotation.Import;
16 15
17 import javax.annotation.Resource; 16 import javax.annotation.Resource;
18 import java.util.List; 17 import java.util.List;
19 18
20 -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_MERCHANT_NOT_EXISTS;  
21 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; 19 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
22 import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; 20 import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
23 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; 21 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
24 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; 22 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
25 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; 23 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
26 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; 24 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
  25 +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*;
27 import static org.junit.jupiter.api.Assertions.*; 26 import static org.junit.jupiter.api.Assertions.*;
28 27
29 /** 28 /**
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/order/PayOrderServiceTest.java renamed to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceTest.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.order; 1 +package cn.iocoder.yudao.module.pay.service.order;
2 2
3 import cn.hutool.core.date.DateUtil; 3 import cn.hutool.core.date.DateUtil;
4 import cn.hutool.core.util.RandomUtil; 4 import cn.hutool.core.util.RandomUtil;
5 -import cn.iocoder.yudao.adminserver.BaseDbUnitTest;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO;  
7 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO;  
8 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderMapper;  
9 -import cn.iocoder.yudao.adminserver.modules.pay.service.order.impl.PayOrderServiceImpl;  
10 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;  
11 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum;  
12 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum;  
13 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundTypeEnum;  
14 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
15 import cn.iocoder.yudao.framework.common.util.date.DateUtils; 6 import cn.iocoder.yudao.framework.common.util.date.DateUtils;
16 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; 7 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
  8 +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExportReqVO;
  9 +import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageReqVO;
  10 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
  11 +import cn.iocoder.yudao.module.pay.dal.mysql.order.PayOrderMapper;
  12 +import cn.iocoder.yudao.module.pay.enums.order.PayOrderNotifyStatusEnum;
  13 +import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum;
  14 +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundTypeEnum;
  15 +import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest;
17 import org.junit.jupiter.api.Test; 16 import org.junit.jupiter.api.Test;
18 import org.springframework.context.annotation.Import; 17 import org.springframework.context.annotation.Import;
19 18
yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.module.pay.service;
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/pay/service/refund/PayRefundServiceTest.java renamed to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundServiceTest.java
1 -package cn.iocoder.yudao.adminserver.modules.pay.service.refund; 1 +package cn.iocoder.yudao.module.pay.service.refund;
2 2
3 -import cn.iocoder.yudao.adminserver.BaseDbUnitTest;  
4 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO;  
5 -import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO;  
6 -import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayRefundMapper;  
7 -import cn.iocoder.yudao.adminserver.modules.pay.service.order.impl.PayRefundServiceImpl;  
8 -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;  
9 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum;  
10 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundStatusEnum;  
11 -import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayRefundTypeEnum;  
12 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
13 import cn.iocoder.yudao.framework.common.util.date.DateUtils; 4 import cn.iocoder.yudao.framework.common.util.date.DateUtils;
14 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; 5 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
  6 +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundExportReqVO;
  7 +import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.PayRefundPageReqVO;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
  9 +import cn.iocoder.yudao.module.pay.dal.mysql.refund.PayRefundMapper;
  10 +import cn.iocoder.yudao.module.pay.enums.order.PayOrderNotifyStatusEnum;
  11 +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum;
  12 +import cn.iocoder.yudao.module.pay.enums.refund.PayRefundTypeEnum;
  13 +import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest;
15 import org.junit.jupiter.api.Test; 14 import org.junit.jupiter.api.Test;
16 import org.springframework.context.annotation.Import; 15 import org.springframework.context.annotation.Import;
17 16
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/BaseDbAndRedisUnitTest.java renamed to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/BaseDbAndRedisUnitTest.java
1 -package cn.iocoder.yudao.adminserver; 1 +package cn.iocoder.yudao.module.pay.test;
2 2
3 -import cn.iocoder.yudao.adminserver.config.RedisTestConfiguration;  
4 -import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;  
5 import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; 3 import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration;
6 import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; 4 import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration;
  5 +import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
7 import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; 6 import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
8 import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; 7 import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
9 import org.redisson.spring.starter.RedissonAutoConfiguration; 8 import org.redisson.spring.starter.RedissonAutoConfiguration;
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/BaseDbUnitTest.java renamed to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/BaseDbUnitTest.java
1 -package cn.iocoder.yudao.adminserver; 1 +package cn.iocoder.yudao.module.pay.test;
2 2
3 import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration; 3 import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration;
4 import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration; 4 import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration;
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/BaseRedisUnitTest.java renamed to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/BaseRedisUnitTest.java
1 -package cn.iocoder.yudao.adminserver; 1 +package cn.iocoder.yudao.module.pay.test;
2 2
3 -import cn.iocoder.yudao.adminserver.config.RedisTestConfiguration;  
4 import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; 3 import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
5 -import cn.iocoder.yudao.framework.tracer.config.YudaoTracerAutoConfiguration;  
6 import org.redisson.spring.starter.RedissonAutoConfiguration; 4 import org.redisson.spring.starter.RedissonAutoConfiguration;
7 import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; 5 import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
8 import org.springframework.boot.test.context.SpringBootTest; 6 import org.springframework.boot.test.context.SpringBootTest;
yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/config/RedisTestConfiguration.java renamed to yudao-module-pay/yudao-module-pay-impl/src/test/java/cn/iocoder/yudao/module/pay/test/RedisTestConfiguration.java
1 -package cn.iocoder.yudao.adminserver.config; 1 +package cn.iocoder.yudao.module.pay.test;
2 2
3 import com.github.fppt.jedismock.RedisServer; 3 import com.github.fppt.jedismock.RedisServer;
4 import org.springframework.boot.autoconfigure.data.redis.RedisProperties; 4 import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java
@@ -20,31 +20,6 @@ public interface DictTypeConstants { @@ -20,31 +20,6 @@ public interface DictTypeConstants {
20 String SMS_SEND_STATUS = "sys_sms_send_status"; // 短信发送状态 20 String SMS_SEND_STATUS = "sys_sms_send_status"; // 短信发送状态
21 String SMS_RECEIVE_STATUS = "sys_sms_receive_status"; // 短信接收状态 21 String SMS_RECEIVE_STATUS = "sys_sms_receive_status"; // 短信接收状态
22 22
23 - /**  
24 - * 支付-订单-订单状态  
25 - */  
26 - String PAY_ORDER_STATUS = "pay_order_status";  
27 -  
28 - /**  
29 - * 支付-订单-订单回调商户状态  
30 - */  
31 - String PAY_ORDER_NOTIFY_STATUS = "pay_order_notify_status";  
32 -  
33 - /**  
34 - * 支付-订单-订单退款状态  
35 - */  
36 - String PAY_ORDER_REFUND_STATUS = "pay_order_refund_status";  
37 -  
38 - /**  
39 - * 支付-退款订单-退款状态  
40 - */  
41 - String PAY_REFUND_ORDER_STATUS = "pay_refund_order_status";  
42 -  
43 - /**  
44 - * 支付-退款订单-退款类别  
45 - */  
46 - String PAY_REFUND_ORDER_TYPE = "pay_refund_order_type";  
47 -  
48 String BPM_TASK_ASSIGN_RULE_TYPE = "bpm_task_assign_rule_type"; // 任务分配规则类型 23 String BPM_TASK_ASSIGN_RULE_TYPE = "bpm_task_assign_rule_type"; // 任务分配规则类型
49 String BPM_TASK_ASSIGN_SCRIPT = "bpm_task_assign_script"; // 任务分配自定义脚本 24 String BPM_TASK_ASSIGN_SCRIPT = "bpm_task_assign_script"; // 任务分配自定义脚本
50 25
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/convert/order/PayRefundConvert.java deleted
1 -package cn.iocoder.yudao.userserver.modules.pay.convert.order;  
2 -  
3 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundReqDTO;  
4 -import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundRespDTO;  
5 -import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayRefundReqVO;  
6 -import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayRefundRespVO;  
7 -import org.mapstruct.Mapper;  
8 -import org.mapstruct.factory.Mappers;  
9 -  
10 -/**  
11 - * 支付退款 Convert  
12 - *  
13 - * @author jason  
14 - */  
15 -@Mapper  
16 -public interface PayRefundConvert {  
17 -  
18 - PayRefundConvert INSTANCE = Mappers.getMapper(PayRefundConvert.class);  
19 -  
20 - PayRefundReqDTO convert(PayRefundReqVO reqVO);  
21 -  
22 - PayRefundRespVO convert(PayRefundRespDTO req);  
23 -}  
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/convert/package-info.java deleted
1 -/**  
2 - * 提供 POJO 类的实体转换  
3 - *  
4 - * 目前使用 MapStruct 框架  
5 - */  
6 -package cn.iocoder.yudao.userserver.modules.pay.convert;  
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md deleted
1 -<http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao>  
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/package-info.java deleted
1 -/**  
2 - * pay 包下,我们放支付业务,提供业务的支付能力。  
3 - * 例如说:商户、应用、支付、退款等等  
4 - *  
5 - * 缩写:pay  
6 - */  
7 -package cn.iocoder.yudao.userserver.modules.pay;