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 18 <module>yudao-module-system</module>
19 19 <module>yudao-module-infra</module>
20 20 <module>yudao-module-tool</module>
  21 + <module>yudao-module-pay</module>
21 22 </modules>
22 23  
23 24 <name>${artifactId}</name>
... ...
yudao-admin-server/pom.xml
... ... @@ -37,6 +37,11 @@
37 37 <artifactId>yudao-module-infra-impl</artifactId>
38 38 <version>${revision}</version>
39 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 47 <dependency>
... ... @@ -71,11 +76,7 @@
71 76 <!-- <groupId>cn.iocoder.boot</groupId>-->
72 77 <!-- <artifactId>yudao-module-bpm-core-service-impl</artifactId>-->
73 78 <!-- </dependency>-->
74   - <!-- Web 相关 -->
75   - <dependency>
76   - <groupId>cn.iocoder.boot</groupId>
77   - <artifactId>yudao-spring-boot-starter-web</artifactId>
78   - </dependency>
  79 +
79 80 <!-- spring boot 配置所需依赖 -->
80 81 <dependency>
81 82 <groupId>org.springframework.boot</groupId>
... ... @@ -83,34 +84,6 @@
83 84 <optional>true</optional>
84 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 88 <dependency>
116 89 <groupId>cn.iocoder.boot</groupId>
... ... @@ -128,24 +101,6 @@
128 101 <artifactId>spring-boot-admin-starter-server</artifactId> <!-- 实现 Spring Boot Admin Server 服务端 -->
129 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 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 17 @AllArgsConstructor
18 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 21 WX_LITE("wx_lite", "微信小程序支付", WXPayClientConfig.class),
25 22 WX_APP("wx_app", "微信 App 支付", WXPayClientConfig.class),
26 23  
... ... @@ -34,16 +31,16 @@ public enum PayChannelEnum {
34 31 * <p>
35 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 55 public static PayChannelEnum getByCode(String code) {
59 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 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 *
8 8 * pay 系统,使用 1-007-000-000 段
9 9 */
10   -public interface PayErrorCodeCoreConstants {
  10 +public interface ErrorCodeConstants {
11 11  
12 12 /**
13 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 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 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
13 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
14 6 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
15 7 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
16 8 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
17 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 18 import io.swagger.annotations.Api;
19 19 import io.swagger.annotations.ApiImplicitParam;
20 20 import io.swagger.annotations.ApiOperation;
... ... @@ -33,7 +33,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
33 33 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
34 34  
35 35 @Slf4j
36   -@Api(tags = "支付应用信息")
  36 +@Api(tags = "管理后台 - 支付应用信息")
37 37 @RestController
38 38 @RequestMapping("/pay/app")
39 39 @Validated
... ... @@ -106,7 +106,7 @@ public class PayAppController {
106 106 return success(new PageResult<>(pageResult.getTotal()));
107 107 }
108 108  
109   - // 得到所有的应用编号,查出所有的通道
  109 + // 得到所有的应用编号,查出所有的渠道
110 110 Collection<Long> payAppIds = CollectionUtils.convertList(pageResult.getList(), PayAppDO::getId);
111 111 List<PayChannelDO> channels = channelService.getChannelListByAppIds(payAppIds);
112 112 // TODO @aquan:可以基于 appId 简历一个 multiMap。这样下面,直接 get 到之后,CollUtil buildSet 即可
... ... @@ -116,7 +116,7 @@ public class PayAppController {
116 116 Collection<Long> merchantIds = CollectionUtils.convertList(pageResult.getList(), PayAppDO::getMerchantId);
117 117 Map<Long, PayMerchantDO> deptMap = merchantService.getMerchantMap(merchantIds);
118 118  
119   - // 利用反射将通道数据复制到返回的数据结构中去
  119 + // 利用反射将渠道数据复制到返回的数据结构中去
120 120 List<PayAppPageItemRespVO> appList = new ArrayList<>(pageResult.getList().size());
121 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 7 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
8 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 9 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
... ... @@ -26,11 +26,7 @@ import java.util.List;
26 26 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
27 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 30 @RestController
35 31 @RequestMapping("/pay/channel")
36 32 @Validated
... ... @@ -39,7 +35,6 @@ public class PayChannelController {
39 35 @Resource
40 36 private PayChannelService channelService;
41 37  
42   -
43 38 @PostMapping("/create")
44 39 @ApiOperation("创建支付渠道 ")
45 40 @PreAuthorize("@ss.hasPermission('pay:channel:create')")
... ... @@ -116,7 +111,6 @@ public class PayChannelController {
116 111 @PreAuthorize("@ss.hasPermission('pay:channel:query')")
117 112 public CommonResult<PayChannelRespVO> getChannel(
118 113 @RequestParam Long merchantId, @RequestParam Long appId, @RequestParam String code) {
119   -
120 114 // 獲取渠道
121 115 PayChannelDO channel = channelService.getChannelByConditions(merchantId, appId, code);
122 116 if (channel == null) {
... ... @@ -126,4 +120,5 @@ public class PayChannelController {
126 120 PayChannelRespVO respVo = PayChannelConvert.INSTANCE.convert(channel);
127 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 7 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
8 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 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 3 import lombok.*;
4 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 3 import lombok.*;
4   -import java.util.*;
5 4 import io.swagger.annotations.*;
6   -import javax.validation.constraints.*;
7 5  
8   -@ApiModel("支付应用信息创建 Request VO")
  6 +@ApiModel("管理后台 - 支付应用信息创建 Request VO")
9 7 @Data
10 8 @EqualsAndHashCode(callSuper = true)
11 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 3 import com.alibaba.excel.annotation.ExcelProperty;
  4 +import lombok.Data;
  5 +
  6 +import java.util.Date;
8 7  
9 8 /**
10 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 3 import lombok.*;
4 4 import java.util.*;
... ... @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
8 8  
9 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 12 @Data
13 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -9,12 +9,7 @@ import lombok.ToString;
9 9 import java.util.Date;
10 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 13 @Data
19 14 @EqualsAndHashCode(callSuper = true)
20 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 3 import lombok.*;
4 4 import java.util.*;
... ... @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
8 8  
9 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 12 @Data
13 13 @EqualsAndHashCode(callSuper = true)
14 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 3 import lombok.*;
4 4 import java.util.*;
5 5 import io.swagger.annotations.*;
6 6  
7   -@ApiModel("支付应用信息 Response VO")
  7 +@ApiModel("管理后台 - 支付应用信息 Response VO")
8 8 @Data
9 9 @EqualsAndHashCode(callSuper = true)
10 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 3 import lombok.*;
4   -import java.util.*;
5 4 import io.swagger.annotations.*;
6 5 import javax.validation.constraints.*;
7 6  
8   -@ApiModel("支付应用信息更新 Request VO")
  7 +@ApiModel("管理后台 - 支付应用信息更新 Request VO")
9 8 @Data
10 9 @EqualsAndHashCode(callSuper = true)
11 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -6,7 +6,7 @@ import lombok.Data;
6 6  
7 7 import javax.validation.constraints.NotNull;
8 8  
9   -@ApiModel("应用更新状态 Request VO")
  9 +@ApiModel("管理后台 - 应用更新状态 Request VO")
10 10 @Data
11 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 3 import lombok.*;
4   -import java.util.*;
5 4 import io.swagger.annotations.*;
6 5 import javax.validation.constraints.*;
7 6  
8 7 /**
9   -* 支付渠道
10   - Base VO,提供给添加、修改、详细的子 VO 使用
  8 +* 支付渠道 Base VO,提供给添加、修改、详细的子 VO 使用
11 9 * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
12 10 */
13 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -8,14 +8,14 @@ import lombok.ToString;
8 8  
9 9 import javax.validation.constraints.NotBlank;
10 10  
11   -@ApiModel("支付渠道 创建 Request VO")
  11 +@ApiModel("管理后台 - 支付渠道 创建 Request VO")
12 12 @Data
13 13 @EqualsAndHashCode(callSuper = true)
14 14 @ToString(callSuper = true)
15 15 public class PayChannelCreateReqVO extends PayChannelBaseVO {
16 16  
17   - @ApiModelProperty(value = "通道配置的 json 字符串")
18   - @NotBlank(message = "通道配置不能为空")
  17 + @ApiModelProperty(value = "渠道配置的 json 字符串")
  18 + @NotBlank(message = "渠道配置不能为空")
19 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 3 import lombok.*;
4 4 import java.util.*;
... ... @@ -7,8 +7,7 @@ import io.swagger.annotations.*;
7 7 import com.alibaba.excel.annotation.ExcelProperty;
8 8  
9 9 /**
10   - * 支付渠道
11   - Excel VO
  10 + * 支付渠道 Excel VO
12 11 *
13 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 3 import lombok.*;
4 4 import java.util.*;
... ... @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
8 8  
9 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 12 @Data
13 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 3 import lombok.*;
4 4 import java.util.*;
... ... @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
8 8  
9 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 12 @Data
13 13 @EqualsAndHashCode(callSuper = true)
14 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 3 import lombok.*;
4 4 import java.util.*;
5 5 import io.swagger.annotations.*;
6 6  
7   -@ApiModel("支付渠道 Response VO")
  7 +@ApiModel("管理后台 - 支付渠道 Response VO")
8 8 @Data
9 9 @EqualsAndHashCode(callSuper = true)
10 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 3 import lombok.*;
4   -import java.util.*;
5 4 import io.swagger.annotations.*;
6 5 import javax.validation.constraints.*;
7 6  
8   -@ApiModel("支付渠道 更新 Request VO")
  7 +@ApiModel("管理后台 - 支付渠道 更新 Request VO")
9 8 @Data
10 9 @EqualsAndHashCode(callSuper = true)
11 10 @ToString(callSuper = true)
... ... @@ -15,7 +14,7 @@ public class PayChannelUpdateReqVO extends PayChannelBaseVO {
15 14 @NotNull(message = "商户编号不能为空")
16 15 private Long id;
17 16  
18   - @ApiModelProperty(value = "通道配置的json字符串")
19   - @NotBlank(message = "通道配置不能为空")
  17 + @ApiModelProperty(value = "渠道配置的json字符串")
  18 + @NotBlank(message = "渠道配置不能为空")
20 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 3 import io.swagger.annotations.ApiModelProperty;
4 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 3 import lombok.*;
4   -import java.util.*;
5 4 import io.swagger.annotations.*;
6   -import javax.validation.constraints.*;
7 5  
8   -@ApiModel("支付商户信息创建 Request VO")
  6 +@ApiModel("管理后台 - 支付商户信息创建 Request VO")
9 7 @Data
10 8 @EqualsAndHashCode(callSuper = true)
11 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 3 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
4 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 3 import lombok.*;
4 4 import java.util.*;
... ... @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
8 8  
9 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 12 @Data
13 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 3 import lombok.*;
4 4 import java.util.*;
... ... @@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
8 8  
9 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 12 @Data
13 13 @EqualsAndHashCode(callSuper = true)
14 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -8,7 +8,7 @@ import lombok.ToString;
8 8  
9 9 import java.util.Date;
10 10  
11   -@ApiModel("支付商户信息 Response VO")
  11 +@ApiModel("管理后台 - 支付商户信息 Response VO")
12 12 @Data
13 13 @EqualsAndHashCode(callSuper = true)
14 14 @ToString(callSuper = true)
... ... @@ -20,11 +20,7 @@ public class PayMerchantRespVO extends PayMerchantBaseVO {
20 20 @ApiModelProperty(value = "创建时间", required = true)
21 21 private Date createTime;
22 22  
23   - /**
24   - * 商户号
25   - * 例如说,M233666999
26   - * 只有新增时插入,不允许修改
27   - */
  23 + @ApiModelProperty(value = "商户号", required = true, example = "M233666999")
28 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 3 import lombok.*;
4   -import java.util.*;
5 4 import io.swagger.annotations.*;
6 5 import javax.validation.constraints.*;
7 6  
8   -@ApiModel("支付商户信息更新 Request VO")
  7 +@ApiModel("管理后台 - 支付商户信息更新 Request VO")
9 8 @Data
10 9 @EqualsAndHashCode(callSuper = true)
11 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -6,7 +6,7 @@ import lombok.Data;
6 6  
7 7 import javax.validation.constraints.NotNull;
8 8  
9   -@ApiModel("商户更新状态 Request VO")
  9 +@ApiModel("管理后台 - 商户更新状态 Request VO")
10 10 @Data
11 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 3 import cn.hutool.core.collection.CollectionUtil;
4 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 15 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
16 16 import cn.iocoder.yudao.framework.common.pojo.PageResult;
17 17 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
... ... @@ -39,38 +39,18 @@ import java.util.Map;
39 39 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
40 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 43 @RestController
49 44 @RequestMapping("/pay/order")
50 45 @Validated
51 46 public class PayOrderController {
52 47  
53   - /**
54   - * 订单 service 组件
55   - */
56 48 @Resource
57 49 private PayOrderService orderService;
58   -
59   - /**
60   - * 订单扩展 service 组件
61   - */
62 50 @Resource
63 51 private PayOrderExtensionService orderExtensionService;
64   -
65   - /**
66   - * 商户 service 组件
67   - */
68 52 @Resource
69 53 private PayMerchantService merchantService;
70   -
71   - /**
72   - * 应用 service 组件
73   - */
74 54 @Resource
75 55 private PayAppService appService;
76 56  
... ... @@ -88,6 +68,7 @@ public class PayOrderController {
88 68 PayAppDO appDO = appService.getApp(order.getAppId());
89 69 PayChannelEnum channelEnum = PayChannelEnum.getByCode(order.getChannelCode());
90 70  
  71 + // TODO @aquan:文案,都是前端 format;
91 72 PayOrderDetailsRespVO respVO = PayOrderConvert.INSTANCE.orderDetailConvert(order);
92 73 respVO.setMerchantName(ObjectUtil.isNotNull(merchantDO) ? merchantDO.getName() : "未知商户");
93 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 3 import io.swagger.annotations.ApiModelProperty;
4 4 import lombok.Data;
... ... @@ -10,8 +10,7 @@ import java.util.Date;
10 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 14 * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
16 15 *
17 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -8,12 +8,7 @@ import lombok.ToString;
8 8  
9 9 import java.util.Date;
10 10  
11   -/**
12   - * 支付订单详细信息,由支付订单和支付订单扩展信息组成
13   - *
14   - * @author aquan
15   - */
16   -@ApiModel("支付订单详细信息 Response VO")
  11 +@ApiModel("管理后台 - 支付订单详细信息 Response VO")
17 12 @Data
18 13 @EqualsAndHashCode(callSuper = true)
19 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 3 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
5 4 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
  5 +import cn.iocoder.yudao.module.pay.enums.DictTypeConstants;
6 6 import com.alibaba.excel.annotation.ExcelProperty;
7 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -9,11 +9,7 @@ import java.util.Date;
9 9  
10 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 13 @Data
18 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -8,12 +8,7 @@ import lombok.ToString;
8 8  
9 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 12 @Data
18 13 @EqualsAndHashCode(callSuper = true)
19 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 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 4 import io.swagger.annotations.ApiModel;
... ... @@ -12,12 +12,7 @@ import java.util.Date;
12 12  
13 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 16 @Data
22 17 @EqualsAndHashCode(callSuper = true)
23 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -8,12 +8,7 @@ import lombok.ToString;
8 8  
9 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 12 @Data
18 13 @EqualsAndHashCode(callSuper = true)
19 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 3 import cn.hutool.core.collection.CollectionUtil;
4 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 15 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
16 16 import cn.iocoder.yudao.framework.common.pojo.PageResult;
17 17 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
... ... @@ -39,12 +39,7 @@ import java.util.Map;
39 39 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
40 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 43 @RestController
49 44 @RequestMapping("/pay/refund")
50 45 @Validated
... ... @@ -52,26 +47,13 @@ public class PayRefundController {
52 47  
53 48 @Resource
54 49 private PayRefundService refundService;
55   -
56   - /**
57   - * 商户 service 组件
58   - */
59 50 @Resource
60 51 private PayMerchantService merchantService;
61   -
62   - /**
63   - * 应用 service 组件
64   - */
65 52 @Resource
66 53 private PayAppService appService;
67   -
68   - /**
69   - * 订单 service 组件
70   - */
71 54 @Resource
72 55 private PayOrderService orderService;
73 56  
74   -
75 57 @GetMapping("/get")
76 58 @ApiOperation("获得退款订单")
77 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 3 import io.swagger.annotations.ApiModelProperty;
4 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 3 import lombok.*;
4 4 import io.swagger.annotations.*;
5 5  
6   -@ApiModel("退款订单创建 Request VO")
  6 +@ApiModel("管理后台 - 退款订单创建 Request VO")
7 7 @Data
8 8 @EqualsAndHashCode(callSuper = true)
9 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -9,12 +9,7 @@ import lombok.ToString;
9 9 import javax.validation.constraints.NotNull;
10 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 13 @Data
19 14 @EqualsAndHashCode(callSuper = true)
20 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 3 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
5 4 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
  5 +import cn.iocoder.yudao.module.pay.enums.DictTypeConstants;
6 6 import com.alibaba.excel.annotation.ExcelProperty;
7 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -9,7 +9,7 @@ import java.util.Date;
9 9  
10 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 13 @Data
14 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -8,11 +8,7 @@ import lombok.ToString;
8 8  
9 9 import java.util.Date;
10 10  
11   -/**
12   - * 退款订单分页查询 Response VO
13   - * @author aquan
14   - */
15   -@ApiModel("退款订单分页查询 Response VO")
  11 +@ApiModel("管理后台 - 退款订单分页查询 Response VO")
16 12 @Data
17 13 @EqualsAndHashCode(callSuper = true)
18 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 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 4 import io.swagger.annotations.ApiModel;
... ... @@ -12,7 +12,7 @@ import java.util.Date;
12 12  
13 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 16 @Data
17 17 @EqualsAndHashCode(callSuper = true)
18 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -8,7 +8,7 @@ import lombok.ToString;
8 8  
9 9 import java.util.Date;
10 10  
11   -@ApiModel("退款订单 Response VO")
  11 +@ApiModel("管理后台 - 退款订单 Response VO")
12 12 @Data
13 13 @EqualsAndHashCode(callSuper = true)
14 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 3 import lombok.*;
4 4 import io.swagger.annotations.*;
5 5 import javax.validation.constraints.*;
6 6  
7   -@ApiModel("退款订单更新 Request VO")
  7 +@ApiModel("管理后台 - 退款订单更新 Request VO")
8 8 @Data
9 9 @EqualsAndHashCode(callSuper = true)
10 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 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 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
10 5 import cn.iocoder.yudao.framework.pay.core.client.PayClient;
11 6 import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;
12 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 15 import io.swagger.annotations.Api;
16 16 import io.swagger.annotations.ApiOperation;
17 17 import lombok.extern.slf4j.Slf4j;
... ... @@ -21,52 +21,52 @@ import org.springframework.web.bind.annotation.*;
21 21 import javax.annotation.Resource;
22 22 import java.util.Map;
23 23  
24   -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_CHANNEL_CLIENT_NOT_FOUND;
25 24 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
26 25 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
27 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 30 @RestController
31 31 @RequestMapping("/pay/order")
32 32 @Validated
33 33 @Slf4j
34   -public class PayOrderController {
  34 +public class AppPayOrderController {
35 35  
36 36 @Resource
37   - private PayOrderCoreService payOrderCoreService;
  37 + private PayOrderService orderService;
38 38 @Resource
39   - private PayRefundCoreService payRefundCoreService;
  39 + private PayRefundService refundService;
40 40  
41 41 @Resource
42 42 private PayClientFactory payClientFactory;
43 43  
44   -
45 44 @PostMapping("/submit")
46 45 @ApiOperation("提交支付订单")
47 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 52 PayOrderSubmitReqDTO reqDTO = new PayOrderSubmitReqDTO();
54 53 BeanUtil.copyProperties(reqVO, reqDTO, false);
55 54 reqDTO.setUserIp(getClientIP());
56 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 64 //TODO 芋道源码 换成了统一的地址了 /notify/{channelId},测试通过可以删除
65 65 @PostMapping("/notify/wx-pub/{channelId}")
66 66 @ApiOperation("通知微信公众号支付的结果")
67 67 public String notifyWxPayOrder(@PathVariable("channelId") Long channelId,
68 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 70 return "success";
71 71 }
72 72  
... ... @@ -110,12 +110,12 @@ public class PayOrderController {
110 110  
111 111 // 如果是退款,则发起退款通知
112 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 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 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -9,10 +9,10 @@ import javax.validation.constraints.NotEmpty;
9 9 import javax.validation.constraints.NotNull;
10 10 import java.util.Map;
11 11  
12   -@ApiModel("支付订单提交 Request VO")
  12 +@ApiModel("用户 APP - 支付订单提交 Request VO")
13 13 @Data
14 14 @Accessors(chain = true)
15   -public class PayOrderSubmitReqVO {
  15 +public class AppPayOrderSubmitReqVO {
16 16  
17 17 @ApiModelProperty(value = "支付单编号", required = true, example = "1024")
18 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 3 import io.swagger.annotations.ApiModel;
4 4 import lombok.AllArgsConstructor;
... ... @@ -7,13 +7,13 @@ import lombok.Data;
7 7 import lombok.NoArgsConstructor;
8 8 import lombok.experimental.Accessors;
9 9  
10   -@ApiModel("支付订单提交 Response VO")
  10 +@ApiModel("用户 APP - 支付订单提交 Response VO")
11 11 @Data
12 12 @Accessors(chain = true)
13 13 @Builder
14 14 @NoArgsConstructor
15 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 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 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 11 import io.swagger.annotations.Api;
12 12 import io.swagger.annotations.ApiOperation;
13 13 import lombok.extern.slf4j.Slf4j;
... ... @@ -19,28 +19,29 @@ import org.springframework.web.bind.annotation.RestController;
19 19  
20 20 import javax.annotation.Resource;
21 21  
  22 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
22 23 import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
23 24  
24   -@Api(tags = "退款订单")
  25 +@Api(tags = "用户 APP - 退款订单")
25 26 @RestController
26   -@RequestMapping("/pay/order")
  27 +@RequestMapping("/pay/refund")
27 28 @Validated
28 29 @Slf4j
29   -public class PayRefundController {
  30 +public class AppPayRefundController {
30 31  
31 32 @Resource
32   - private PayRefundCoreService payRefundCoreService;
  33 + private PayRefundService refundService;
33 34  
34 35 @PostMapping("/refund")
35 36 @ApiOperation("提交退款订单")
36   - public CommonResult<PayRefundRespVO> submitRefundOrder(@RequestBody PayRefundReqVO reqVO){
  37 + public CommonResult<AppPayRefundRespVO> submitRefundOrder(@RequestBody AppPayRefundReqVO reqVO){
37 38 PayRefundReqDTO req = PayRefundConvert.INSTANCE.convert(reqVO);
38 39 req.setUserIp(getClientIP());
39   - //TODO 测试暂时模拟生成商户退款订单
  40 + // TODO 测试暂时模拟生成商户退款订单
40 41 if(StrUtil.isEmpty(reqVO.getMerchantRefundId())) {
41 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 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
... ... @@ -8,11 +8,11 @@ import lombok.NoArgsConstructor;
8 8  
9 9 import javax.validation.constraints.NotEmpty;
10 10  
11   -@ApiModel("退款订单 Req VO")
  11 +@ApiModel("用户 APP - 退款订单 Req VO")
12 12 @Data
13 13 @NoArgsConstructor
14 14 @AllArgsConstructor
15   -public class PayRefundReqVO {
  15 +public class AppPayRefundReqVO {
16 16  
17 17 @ApiModelProperty(value = "支付订单编号自增", required = true, example = "10")
18 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 3 import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
4 5 import lombok.AllArgsConstructor;
5 6 import lombok.Builder;
6 7 import lombok.Data;
7 8 import lombok.NoArgsConstructor;
8 9 import lombok.experimental.Accessors;
9 10  
10   -@ApiModel("提交退款订单 Response VO")
  11 +@ApiModel("用户 APP - 提交退款订单 Response VO")
11 12 @Data
12 13 @Accessors(chain = true)
13 14 @Builder
14 15 @NoArgsConstructor
15 16 @AllArgsConstructor
16   -public class PayRefundRespVO {
  17 +public class AppPayRefundRespVO {
17 18  
18   - /**
19   - * 支付退款单编号, 自增
20   - */
  19 + @ApiModelProperty(value = "退款订单编号", required = true, example = "10")
21 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 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 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 10 import org.mapstruct.Mapper;
10 11 import org.mapstruct.factory.Mappers;
11   -import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.*;
12 12  
13 13 /**
14 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 3 import java.util.*;
4 4  
5   -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
6 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 12 import org.mapstruct.Mapper;
10 13 import org.mapstruct.Mapping;
11 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 16 @Mapper
21 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 3 import java.util.*;
4 4  
5   -import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;
6 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 12 import org.mapstruct.Mapper;
9 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 15 @Mapper
18 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 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 13 import org.mapstruct.Mapper;
11 14 import org.mapstruct.factory.Mappers;
12 15  
... ... @@ -24,24 +27,10 @@ public interface PayOrderConvert {
24 27  
25 28 PayOrderConvert INSTANCE = Mappers.getMapper(PayOrderConvert.class);
26 29  
27   -
28   -
29 30 PayOrderRespVO convert(PayOrderDO bean);
30 31  
31   - /**
32   - * 订单DO 转换为 详细订单 RespVO
33   - *
34   - * @param bean 订单DO
35   - * @return 详细订单 RespVO
36   - */
37 32 PayOrderDetailsRespVO orderDetailConvert(PayOrderDO bean);
38 33  
39   - /**
40   - * 订单扩展DO 转换为 详细订单扩展 RespVO
41   - *
42   - * @param bean 订单扩展DO
43   - * @return 详细订单扩展 RespVO
44   - */
45 34 PayOrderDetailsRespVO.PayOrderExtension orderDetailExtensionConvert(PayOrderExtensionDO bean);
46 35  
47 36 List<PayOrderRespVO> convertList(List<PayOrderDO> list);
... ... @@ -58,12 +47,6 @@ public interface PayOrderConvert {
58 47 */
59 48 PayOrderPageItemRespVO pageConvertItemPage(PayOrderDO bean);
60 49  
61   - /**
62   - * 订单DO 转 订单导出excel VO
63   - *
64   - * @param bean 订单 DO
65   - * @return 订单导出excel VO
66   - */
67 50 default PayOrderExcelVO excelConvert(PayOrderDO bean) {
68 51 if (bean == null) {
69 52 return null;
... ... @@ -101,4 +84,12 @@ public interface PayOrderConvert {
101 84  
102 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 3 *
4 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 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 11 import org.mapstruct.Mapper;
  12 +import org.mapstruct.Mapping;
  13 +import org.mapstruct.Mappings;
7 14 import org.mapstruct.factory.Mappers;
8 15  
9 16 import java.math.BigDecimal;
... ... @@ -87,4 +94,16 @@ public interface PayRefundConvert {
87 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 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 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 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 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 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 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 4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
5 5 import com.baomidou.mybatisplus.annotation.TableName;
6 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 9 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
10 10 import com.baomidou.mybatisplus.annotation.TableName;
11 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 9 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
10 10 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
11 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 5 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
6 6 import com.baomidou.mybatisplus.annotation.TableField;
7 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 9 import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
9 10 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
10 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 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 6 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
8 7 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
9 9 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
10 10 import org.apache.ibatis.annotations.Mapper;
11 11  
12 12 import java.util.Collection;
13 13 import java.util.List;
14 14  
15   -/**
16   - * 支付应用信息 Mapper
17   - *
18   - * @author aquan
19   - */
20 15 @Mapper
21 16 public interface PayAppMapper extends BaseMapperX<PayAppDO> {
22 17  
23   - /**
24   - * 分页查询
25   - *
26   - * @param reqVO 支付应用信息分页查询条件
27   - * @param merchantIds 商户 ID 集合
28   - * @return 支付应用信息
29   - */
30 18 default PageResult<PayAppDO> selectPage(PayAppPageReqVO reqVO, Collection<Long> merchantIds) {
31 19 return selectPage(reqVO, new QueryWrapperX<PayAppDO>()
32 20 .likeIfPresent("name", reqVO.getName())
... ... @@ -39,13 +27,6 @@ public interface PayAppMapper extends BaseMapperX&lt;PayAppDO&gt; {
39 27 .orderByDesc("id"));
40 28 }
41 29  
42   - /**
43   - * 列表查询
44   - *
45   - * @param reqVO 支付应用信息 Excel 导出查询条件
46   - * @param merchantIds 商户 ID 集合
47   - * @return 支付应用信息
48   - */
49 30 default List<PayAppDO> selectList(PayAppExportReqVO reqVO, Collection<Long> merchantIds) {
50 31 return selectList(new QueryWrapperX<PayAppDO>()
51 32 .likeIfPresent("name", reqVO.getName())
... ... @@ -58,24 +39,13 @@ public interface PayAppMapper extends BaseMapperX&lt;PayAppDO&gt; {
58 39 .orderByDesc("id"));
59 40 }
60 41  
61   - /**
62   - * 根据 商户 ID 查询支付应用信息
63   - *
64   - * @param merchantId 商户 ID
65   - * @return 支付应用信息列表
66   - */
67 42 default List<PayAppDO> getListByMerchantId(String merchantId) {
68 43 return selectList(new LambdaQueryWrapper<PayAppDO>()
69 44 .select(PayAppDO::getId, PayAppDO::getName)
70 45 .eq(PayAppDO::getMerchantId, merchantId));
71 46 }
72 47  
73   - /**
74   - * 根据商户号统计存在的支付应用数量
75   - *
76   - * @param merchantId 商户 ID
77   - * @return 支付应用数量
78   - */
  48 + // TODO @aquan:方法名补充 ByMerchantId
79 49 default Long selectCount(Long merchantId) {
80 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 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7   -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
8 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 9 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
10 10 import org.apache.ibatis.annotations.Mapper;
  11 +import org.apache.ibatis.annotations.Select;
11 12  
12 13 import java.util.Collection;
  14 +import java.util.Date;
13 15 import java.util.List;
14 16  
15   -/**
16   - * 支付渠道
17   - Mapper
18   - *
19   - * @author 芋艿
20   - */
21 17 @Mapper
22 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 27 default PageResult<PayChannelDO> selectPage(PayChannelPageReqVO reqVO) {
25 28 return selectPage(reqVO, new QueryWrapperX<PayChannelDO>()
26 29 .eqIfPresent("code", reqVO.getCode())
... ... @@ -48,11 +51,11 @@ public interface PayChannelMapper extends BaseMapperX&lt;PayChannelDO&gt; {
48 51 }
49 52  
50 53 /**
51   - * 根据条件获取通道数量
  54 + * 根据条件获取渠道数量
52 55 *
53 56 * @param merchantId 商户编号
54 57 * @param appid 应用编号
55   - * @param code 通道编码
  58 + * @param code 渠道编码
56 59 * @return 数量
57 60 */
58 61 default Integer selectCount(Long merchantId, Long appid, String code) {
... ... @@ -63,11 +66,11 @@ public interface PayChannelMapper extends BaseMapperX&lt;PayChannelDO&gt; {
63 66 }
64 67  
65 68 /**
66   - * 根据条件获取通道
  69 + * 根据条件获取渠道
67 70 *
68 71 * @param merchantId 商户编号
69   - * @param appid 应用编号
70   - * @param code 通道编码
  72 + * @param appid 应用编号 // TODO @aquan:appid =》appId
  73 + * @param code 渠道编码
71 74 * @return 数量
72 75 */
73 76 default PayChannelDO selectOne(Long merchantId, Long appid, String code) {
... ... @@ -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 86 * 根据支付应用ID集合获得支付渠道列表
83 87 *
... ... @@ -88,4 +92,5 @@ public interface PayChannelMapper extends BaseMapperX&lt;PayChannelDO&gt; {
88 92 return this.selectList(new QueryWrapper<PayChannelDO>().lambda()
89 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 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 6 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
8 7 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
9 9 import org.apache.ibatis.annotations.Mapper;
10 10  
11 11 import java.util.List;
12 12  
13   -/**
14   - * 支付商户信息 Mapper
15   - *
16   - * @author 芋艿
17   - */
18 13 @Mapper
19 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 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 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 5 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
6 6 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
7 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 3 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  4 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
5 5 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
6 6 import org.apache.ibatis.annotations.Mapper;
7 7  
8 8 @Mapper
9   -public interface PayOrderExtensionCoreMapper extends BaseMapperX<PayOrderExtensionDO> {
  9 +public interface PayOrderExtensionMapper extends BaseMapperX<PayOrderExtensionDO> {
10 10  
11 11 default PayOrderExtensionDO selectByNo(String no) {
12 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 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 6 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
8 7 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
9 9 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  10 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
10 11 import org.apache.ibatis.annotations.Mapper;
11 12  
12 13 import java.util.Collection;
13 14 import java.util.List;
14 15  
15   -/**
16   - * 支付订单 Mapper 组件
17   - *
18   - * @author aquan
19   - */
20 16 @Mapper
21 17 public interface PayOrderMapper extends BaseMapperX<PayOrderDO> {
22 18  
... ... @@ -50,12 +46,6 @@ public interface PayOrderMapper extends BaseMapperX&lt;PayOrderDO&gt; {
50 46 .orderByDesc("id"));
51 47 }
52 48  
53   - /**
54   - * 根据订单 ID 集合查询订单商品名称
55   - *
56   - * @param idList 订单 ID 集合
57   - * @return 只包含商品名称和标题的订单集合对象
58   - */
59 49 default List<PayOrderDO> findByIdListQueryOrderSubject(Collection<Long> idList) {
60 50 return selectList(new LambdaQueryWrapper<PayOrderDO>()
61 51 .select(PayOrderDO::getId, PayOrderDO::getSubject)
... ... @@ -70,10 +60,19 @@ public interface PayOrderMapper extends BaseMapperX&lt;PayOrderDO&gt; {
70 60 * @return 条数
71 61 */
72 62 default Long selectCount(Long appId, Integer status) {
73   -
74 63 return selectCount(new LambdaQueryWrapper<PayOrderDO>()
75 64 .eq(PayOrderDO::getAppId, appId)
76 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 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 6 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
8 7 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
  8 +import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
9 9 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
10 10 import org.apache.ibatis.annotations.Mapper;
11 11  
12 12 import java.util.List;
13 13  
14   -/**
15   - * 退款订单 Mapper
16   - *
17   - * @author aquan
18   - */
19 14 @Mapper
20 15 public interface PayRefundMapper extends BaseMapperX<PayRefundDO> {
21 16  
... ... @@ -45,17 +40,18 @@ public interface PayRefundMapper extends BaseMapperX&lt;PayRefundDO&gt; {
45 40 .orderByDesc("id"));
46 41 }
47 42  
48   - /**
49   - * 查询符合的订单数量
50   - *
51   - * @param appId 应用编号
52   - * @param status 订单状态
53   - * @return 条数
54   - */
55 43 default Long selectCount(Long appId, Integer status) {
56 44  
57 45 return selectCount(new LambdaQueryWrapper<PayRefundDO>()
58 46 .eq(PayRefundDO::getAppId, appId)
59 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 3 import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine;
4 4 import org.redisson.api.RLock;
... ... @@ -6,7 +6,7 @@ import org.redisson.api.RLock;
6 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 11 * @author 芋道源码
12 12 */
... ... @@ -14,6 +14,6 @@ public interface PayRedisKeyCoreConstants {
14 14  
15 15 RedisKeyDefine PAY_NOTIFY_LOCK = new RedisKeyDefine("通知任务的分布式锁",
16 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 3 import org.redisson.api.RLock;
4 4 import org.redisson.api.RedissonClient;
... ... @@ -7,7 +7,7 @@ import org.springframework.stereotype.Repository;
7 7 import javax.annotation.Resource;
8 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 13 * 支付通知的锁 Redis DAO
... ... @@ -15,7 +15,7 @@ import static cn.iocoder.yudao.coreservice.modules.pay.dal.redis.PayRedisKeyCore
15 15 * @author 芋道源码
16 16 */
17 17 @Repository
18   -public class PayNotifyLockCoreRedisDAO {
  18 +public class PayNotifyLockRedisDAO {
19 19  
20 20 @Resource
21 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 3 import lombok.AllArgsConstructor;
4 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 3 import lombok.AllArgsConstructor;
4 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 3 import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
4 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 3 import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
4 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 3 import lombok.AllArgsConstructor;
4 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 3 import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
4 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 3 import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
  4 +import cn.iocoder.yudao.module.pay.service.notify.PayNotifyService;
5 5 import lombok.extern.slf4j.Slf4j;
6 6 import org.springframework.stereotype.Component;
7 7  
... ... @@ -18,7 +18,7 @@ import javax.annotation.Resource;
18 18 public class PayNotifyJob implements JobHandler {
19 19  
20 20 @Resource
21   - private PayNotifyCoreService payNotifyCoreService;
  21 + private PayNotifyService payNotifyCoreService;
22 22  
23 23 @Override
24 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 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 9 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  10 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
10 11  
11 12 import javax.validation.Valid;
12 13 import java.util.Collection;
... ... @@ -100,4 +101,16 @@ public interface PayAppService {
100 101 List<PayAppDO> list = this.getAppList(appIdList);
101 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 3 import cn.hutool.core.collection.CollectionUtil;
4 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 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 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 22 import com.google.common.annotations.VisibleForTesting;
22 23 import org.springframework.stereotype.Service;
23 24 import org.springframework.validation.annotation.Validated;
... ... @@ -25,9 +26,9 @@ import org.springframework.validation.annotation.Validated;
25 26 import javax.annotation.Resource;
26 27 import java.util.*;
27 28  
28   -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*;
29 29 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
30 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 34 * 支付应用信息 Service 实现类
... ... @@ -40,17 +41,14 @@ public class PayAppServiceImpl implements PayAppService {
40 41  
41 42 @Resource
42 43 private PayAppMapper appMapper;
43   -
  44 + // TODO @aquan:使用对方的 Service。模块与模块之间,避免直接调用对方的 mapper
44 45 @Resource
45 46 private PayMerchantMapper merchantMapper;
46   -
47 47 @Resource
48 48 private PayOrderMapper orderMapper;
49   -
50 49 @Resource
51 50 private PayRefundMapper refundMapper;
52 51  
53   -
54 52 @Override
55 53 public Long createApp(PayAppCreateReqVO createReqVO) {
56 54 // 插入
... ... @@ -126,12 +124,6 @@ public class PayAppServiceImpl implements PayAppService {
126 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 127 @Override
136 128 public void updateAppStatus(Long id, Integer status) {
137 129 // 校验商户存在
... ... @@ -143,12 +135,6 @@ public class PayAppServiceImpl implements PayAppService {
143 135 appMapper.updateById(app);
144 136 }
145 137  
146   - /**
147   - * 根据商户 ID 获得支付应用信息列表,
148   - *
149   - * @param merchantId 商户 ID
150   - * @return 支付应用信息列表
151   - */
152 138 @Override
153 139 public List<PayAppDO> getListByMerchantId(String merchantId) {
154 140 return appMapper.getListByMerchantId(merchantId);
... ... @@ -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 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 11 import javax.validation.Valid;
9 12 import java.util.Collection;
... ... @@ -17,6 +20,11 @@ import java.util.List;
17 20 public interface PayChannelService {
18 21  
19 22 /**
  23 + * 初始化支付客户端
  24 + */
  25 + void initPayClients();
  26 +
  27 + /**
20 28 * 创建支付渠道
21 29 *
22 30 * @param createReqVO 创建信息
... ... @@ -47,8 +55,7 @@ public interface PayChannelService {
47 55 PayChannelDO getChannel(Long id);
48 56  
49 57 /**
50   - * 获得支付渠道
51   - * 列表
  58 + * 获得支付渠道列表
52 59 *
53 60 * @param ids 编号
54 61 * @return 支付渠道
... ... @@ -57,8 +64,7 @@ public interface PayChannelService {
57 64 List<PayChannelDO> getChannelList(Collection<Long> ids);
58 65  
59 66 /**
60   - * 获得支付渠道
61   - * 分页
  67 + * 获得支付渠道分页
62 68 *
63 69 * @param pageReqVO 分页查询
64 70 * @return 支付渠道
... ... @@ -84,24 +90,44 @@ public interface PayChannelService {
84 90 List<PayChannelDO> getChannelListByAppIds(Collection<Long> appIds);
85 91  
86 92 /**
87   - * 根据条件获取通道数量
  93 + * 根据条件获取渠道数量
88 94 *
89 95 * @param merchantId 商户编号
90 96 * @param appid 应用编号
91   - * @param code 通道编码
  97 + * @param code 渠道编码
92 98 * @return 数量
93 99 */
94 100 Integer getChannelCountByConditions(Long merchantId, Long appid, String code);
95 101  
96 102 /**
97   - * 根据条件获取通道
  103 + * 根据条件获取渠道
98 104 *
99 105 * @param merchantId 商户编号
100 106 * @param appid 应用编号
101   - * @param code 通道编码
  107 + * @param code 渠道编码
102 108 * @return 数量
103 109 */
104 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 4 import cn.hutool.core.util.ObjectUtil;
4 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 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 16 import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
15 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 21 import lombok.extern.slf4j.Slf4j;
  22 +import org.springframework.scheduling.annotation.Scheduled;
17 23 import org.springframework.stereotype.Service;
18 24 import org.springframework.validation.annotation.Validated;
19 25  
  26 +import javax.annotation.PostConstruct;
20 27 import javax.annotation.Resource;
21 28 import javax.validation.Validator;
22 29 import java.util.Collection;
  30 +import java.util.Comparator;
  31 +import java.util.Date;
23 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 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 38 * 支付渠道 Service 实现类
... ... @@ -36,6 +44,20 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU
36 44 @Validated
37 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 61 @Resource
40 62 private PayChannelMapper channelMapper;
41 63  
... ... @@ -43,6 +65,51 @@ public class PayChannelServiceImpl implements PayChannelService {
43 65 private Validator validator;
44 66  
45 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 113 public Long createChannel(PayChannelCreateReqVO reqVO) {
47 114 // 断言是否有重复的
48 115 PayChannelDO channelDO = this.getChannelByConditions(reqVO.getMerchantId(), reqVO.getAppId(), reqVO.getCode());
... ... @@ -114,11 +181,11 @@ public class PayChannelServiceImpl implements PayChannelService {
114 181  
115 182  
116 183 /**
117   - * 根据条件获取通道数量
  184 + * 根据条件获取渠道数量
118 185 *
119 186 * @param merchantId 商户编号
120 187 * @param appid 应用编号
121   - * @param code 通道编码
  188 + * @param code 渠道编码
122 189 * @return 数量
123 190 */
124 191 @Override
... ... @@ -127,11 +194,11 @@ public class PayChannelServiceImpl implements PayChannelService {
127 194 }
128 195  
129 196 /**
130   - * 根据条件获取通道
  197 + * 根据条件获取渠道
131 198 *
132 199 * @param merchantId 商户编号
133 200 * @param appid 应用编号
134   - * @param code 通道编码
  201 + * @param code 渠道编码
135 202 * @return 数量
136 203 */
137 204 @Override
... ... @@ -158,4 +225,26 @@ public class PayChannelServiceImpl implements PayChannelService {
158 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 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 8 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  9 +import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
10 10  
11 11 import javax.validation.Valid;
12 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 3 import cn.hutool.core.date.DateUtil;
4 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 13 import cn.iocoder.yudao.framework.common.pojo.PageResult;
15 14 import com.google.common.annotations.VisibleForTesting;
16 15 import org.springframework.stereotype.Service;
... ... @@ -21,9 +20,8 @@ import java.time.LocalDateTime;
21 20 import java.util.Collection;
22 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 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 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 5 import javax.validation.Valid;
6 6  
7 7 /**
8   - * 支付通知 Core Service 接口
  8 + * 支付通知 Service 接口
9 9 *
10 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 3 import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.exceptions.ExceptionUtil;
4 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 18 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
21 19 import cn.iocoder.yudao.framework.common.util.date.DateUtils;
22 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 23 import lombok.extern.slf4j.Slf4j;
24 24 import org.springframework.context.annotation.Lazy;
25 25 import org.springframework.scheduling.annotation.Async;
... ... @@ -36,10 +36,6 @@ import java.util.Objects;
36 36 import java.util.concurrent.CountDownLatch;
37 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 40 * 支付通知 Core Service 实现类
45 41 *
... ... @@ -48,7 +44,7 @@ import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString
48 44 @Service
49 45 @Valid
50 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 53 /**
58 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 58 @Resource
63 59 @Lazy // 循环依赖,避免报错
64   - private PayOrderCoreService payOrderCoreService;
  60 + private PayOrderService orderService;
  61 + @Resource
  62 + @Lazy // 循环依赖,避免报错
  63 + private PayRefundService refundService;
65 64  
66 65 @Resource
67 66 private PayNotifyTaskCoreMapper payNotifyTaskCoreMapper;
... ... @@ -72,14 +71,11 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService {
72 71 private ThreadPoolTaskExecutor threadPoolTaskExecutor; // TODO 芋艿:未来提供独立的线程池
73 72  
74 73 @Resource
75   - private PayNotifyLockCoreRedisDAO payNotifyLockCoreRedisDAO;
76   -
77   - @Resource
78   - private PayRefundCoreMapper payRefundCoreMapper;
  74 + private PayNotifyLockRedisDAO payNotifyLockCoreRedisDAO;
79 75  
80 76 @Resource
81 77 @Lazy // 循环依赖(自己依赖自己),避免报错
82   - private PayNotifyCoreServiceImpl self;
  78 + private PayNotifyServiceImpl self;
83 79  
84 80 @Override
85 81 public void createPayNotifyTask(PayNotifyTaskCreateReqDTO reqDTO) {
... ... @@ -89,12 +85,11 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService {
89 85 .setNotifyTimes(0).setMaxNotifyTimes(PayNotifyTaskDO.NOTIFY_FREQUENCY.length + 1);
90 86 // 补充 merchantId + appId + notifyUrl 字段
91 87 if (Objects.equals(task.getType(), PayNotifyTypeEnum.ORDER.getType())) {
92   - PayOrderDO order = payOrderCoreService.getPayOrder(task.getDataId()); // 不进行非空判断,有问题直接异常
  88 + PayOrderDO order = orderService.getOrder(task.getDataId()); // 不进行非空判断,有问题直接异常
93 89 task.setMerchantId(order.getMerchantId()).setAppId(order.getAppId()).
94 90 setMerchantOrderId(order.getMerchantOrderId()).setNotifyUrl(order.getNotifyUrl());
95 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 93 task.setMerchantId(refundDO.getMerchantId()).setAppId(refundDO.getAppId())
99 94 .setMerchantOrderId(refundDO.getMerchantOrderId()).setNotifyUrl(refundDO.getNotifyUrl());
100 95 }
... ... @@ -169,7 +164,7 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService {
169 164 // 虽然已经通过分布式加锁,但是可能同时满足通知的条件,然后都去获得锁。此时,第一个执行完后,第二个还是能拿到锁,然后会再执行一次。
170 165 PayNotifyTaskDO dbTask = payNotifyTaskCoreMapper.selectById(task.getId());
171 166 if (DateUtils.afterNow(dbTask.getNextNotifyTime())) {
172   - log.info("[executeNotify][dbTask({}) 任务被忽略,原因是未到达下次通知时间,可能是因为并发执行了]", toJsonString(dbTask));
  167 + log.info("[executeNotify][dbTask({}) 任务被忽略,原因是未到达下次通知时间,可能是因为并发执行了]", JsonUtils.toJsonString(dbTask));
173 168 return;
174 169 }
175 170  
... ... @@ -193,7 +188,7 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService {
193 188 Integer newStatus = this.processNotifyResult(task, invokeResult, invokeException);
194 189  
195 190 // 记录 PayNotifyLog 日志
196   - String response = invokeException != null ? getRootCauseMessage(invokeException) : toJsonString(invokeResult);
  191 + String response = invokeException != null ? ExceptionUtil.getRootCauseMessage(invokeException) : JsonUtils.toJsonString(invokeResult);
197 192 payNotifyLogCoreMapper.insert(PayNotifyLogDO.builder().taskId(task.getId())
198 193 .notifyTimes(task.getNotifyTimes() + 1).status(newStatus).response(response).build());
199 194 }
... ... @@ -214,10 +209,10 @@ public class PayNotifyCoreServiceImpl implements PayNotifyCoreService {
214 209 request = PayRefundOrderReqVO.builder().merchantOrderId(task.getMerchantOrderId())
215 210 .payRefundId(task.getDataId()).build();
216 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 216 (int) NOTIFY_TIMEOUT_MILLIS);
222 217 // 解析结果
223 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 3 import lombok.AllArgsConstructor;
4 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 3 import io.swagger.annotations.ApiModel;
4 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 3 import io.swagger.annotations.ApiModel;
4 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 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 3 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  4 +import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
5 5  
6 6 import java.util.Collection;
7 7 import java.util.List;
... ... @@ -32,7 +32,6 @@ public interface PayOrderExtensionService {
32 32 */
33 33 List<PayOrderExtensionDO> getOrderExtensionList(Collection<Long> ids);
34 34  
35   -
36 35 /**
37 36 * 根据订单成功的 扩展订单ID 查询所有的扩展订单转 成 map 返回
38 37 *
... ... @@ -40,9 +39,8 @@ public interface PayOrderExtensionService {
40 39 * @return 订单扩展 map 集合
41 40 */
42 41 default Map<Long, PayOrderExtensionDO> getOrderExtensionMap(Collection<Long> successExtensionIdList) {
43   - List<PayOrderExtensionDO> list = this.getOrderExtensionList(successExtensionIdList);
  42 + List<PayOrderExtensionDO> list = getOrderExtensionList(successExtensionIdList);
44 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 5 import org.springframework.stereotype.Service;
7 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 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 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 14 import java.util.Collection;
10 15 import java.util.List;
11 16 import java.util.Map;
... ... @@ -64,4 +69,29 @@ public interface PayOrderService {
64 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 3 import cn.hutool.core.date.DateUtil;
4 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 6 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
24 7 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
25 8 import cn.iocoder.yudao.framework.pay.config.PayProperties;
... ... @@ -28,58 +11,94 @@ import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;
28 11 import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO;
29 12 import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderNotifyRespDTO;
30 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 35 import lombok.extern.slf4j.Slf4j;
32 36 import org.springframework.stereotype.Service;
33 37 import org.springframework.transaction.annotation.Transactional;
34 38 import org.springframework.validation.annotation.Validated;
35 39  
36 40 import javax.annotation.Resource;
  41 +import java.util.Collection;
37 42 import java.util.Date;
  43 +import java.util.List;
38 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 51 @Service
49 52 @Validated
50 53 @Slf4j
51   -public class PayOrderCoreServiceImpl implements PayOrderCoreService {
  54 +public class PayOrderServiceImpl implements PayOrderService {
52 55  
53 56 @Resource
54 57 private PayProperties payProperties;
55 58  
56 59 @Resource
57   - private PayAppCoreService payAppCoreService;
  60 + private PayClientFactory payClientFactory;
  61 +
58 62 @Resource
59   - private PayChannelCoreService payChannelCoreService;
  63 + private PayOrderMapper orderMapper;
60 64 @Resource
61   - private PayNotifyCoreService payNotifyCoreService;
  65 + private PayOrderExtensionMapper orderExtensionMapper;
62 66  
63 67 @Resource
64   - private PayClientFactory payClientFactory;
65   -
  68 + private PayAppService appService;
66 69 @Resource
67   - private PayOrderCoreMapper payOrderCoreMapper;
  70 + private PayChannelService channelService;
68 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 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 95 @Override
77 96 public Long createPayOrder(PayOrderCreateReqDTO reqDTO) {
78 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 102 reqDTO.getAppId(), reqDTO.getMerchantOrderId());
84 103 if (order != null) {
85 104 log.warn("[createPayOrder][appId({}) merchantOrderId({}) 已经存在对应的支付单({})]", order.getAppId(),
... ... @@ -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 111 .setMerchantId(app.getMerchantId()).setAppId(app.getId());
93 112 // 商户相关字段
94 113 order.setNotifyUrl(app.getPayNotifyUrl())
... ... @@ -99,7 +118,7 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService {
99 118 // todo @芋艿 创建支付的订单的退款状态枚举是不是有问题,应该是 PayRefundTypeEnum 吧 您这填写的是 PayOrderNotifyStatusEnum 回调状态枚举
100 119 order.setRefundStatus(PayOrderNotifyStatusEnum.NO.getStatus())
101 120 .setRefundTimes(0).setRefundAmount(0L);
102   - payOrderCoreMapper.insert(order);
  121 + orderMapper.insert(order);
103 122 // 最终返回
104 123 return order.getId();
105 124 }
... ... @@ -107,34 +126,34 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService {
107 126 @Override
108 127 public PayOrderSubmitRespDTO submitPayOrder(PayOrderSubmitReqDTO reqDTO) {
109 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 133 PayClient client = payClientFactory.getPayClient(channel.getId());
115 134 if (client == null) {
116 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 139 // 获得 PayOrderDO ,并校验其是否存在
121   - PayOrderDO order = payOrderCoreMapper.selectById(reqDTO.getId());
  140 + PayOrderDO order = orderMapper.selectById(reqDTO.getId());
122 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 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 148 // 插入 PayOrderExtensionDO
130   - PayOrderExtensionDO orderExtension = PayOrderCoreConvert.INSTANCE.convert(reqDTO)
  149 + PayOrderExtensionDO orderExtension = PayOrderConvert.INSTANCE.convert(reqDTO)
131 150 .setOrderId(order.getId()).setNo(generateOrderExtensionNo())
132 151 .setChannelId(channel.getId()).setChannelCode(channel.getCode())
133 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 158 //TODO jason @芋艿 是否加一个属性 如tradeNo 支付订单号, 用这个merchantOrderId让人迷糊
140 159 unifiedOrderReqDTO.setMerchantOrderId(orderExtension.getNo()) // 注意,此处使用的是 PayOrderExtensionDO.no 属性!
... ... @@ -197,12 +216,12 @@ public class PayOrderCoreServiceImpl implements PayOrderCoreService {
197 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 221 PayClient client = payClientFactory.getPayClient(channel.getId());
203 222 if (client == null) {
204 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 229  
211 230 // TODO 芋艿,先最严格的校验。即使调用方重复调用,实际哪个订单已经被重复回调的支付,也返回 false 。也没问题,因为实际已经回调成功了。
212 231 // 1.1 查询 PayOrderExtensionDO
213   - PayOrderExtensionDO orderExtension = payOrderExtensionCoreMapper.selectByNo(
214   - notifyRespDTO.getOrderExtensionNo());
  232 + PayOrderExtensionDO orderExtension = orderExtensionMapper.selectByNo(notifyRespDTO.getOrderExtensionNo());
215 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 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 239 // 1.2 更新 PayOrderExtensionDO
222 240 //TODO 支付宝交易超时 TRADE_FINISHED 需要更新交易关闭
223   - int updateCounts = payOrderExtensionCoreMapper.updateByIdAndStatus(orderExtension.getId(),
  241 + int updateCounts = orderExtensionMapper.updateByIdAndStatus(orderExtension.getId(),
224 242 PayOrderStatusEnum.WAITING.getStatus(), PayOrderExtensionDO.builder().id(orderExtension.getId())
225 243 .status(PayOrderStatusEnum.SUCCESS.getStatus()).channelNotifyData(notifyData.getBody()).build());
226 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 247 log.info("[notifyPayOrder][支付拓展单({}) 更新为已支付]", orderExtension.getId());
230 248  
231 249 // 2.1 判断 PayOrderDO 是否处于待支付
232   - PayOrderDO order = payOrderCoreMapper.selectById(orderExtension.getOrderId());
  250 + PayOrderDO order = orderMapper.selectById(orderExtension.getOrderId());
233 251 if (order == null) {
234   - throw exception(PAY_ORDER_NOT_FOUND);
  252 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_ORDER_NOT_FOUND);
235 253 }
236 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 257 // 2.2 更新 PayOrderDO
240   - updateCounts = payOrderCoreMapper.updateByIdAndStatus(order.getId(), PayOrderStatusEnum.WAITING.getStatus(),
  258 + updateCounts = orderMapper.updateByIdAndStatus(order.getId(), PayOrderStatusEnum.WAITING.getStatus(),
241 259 PayOrderDO.builder().status(PayOrderStatusEnum.SUCCESS.getStatus()).channelId(channelId).channelCode(channel.getCode())
242 260 .successTime(notifyRespDTO.getSuccessTime()).successExtensionId(orderExtension.getId())
243 261 .channelOrderNo(notifyRespDTO.getChannelOrderNo()).channelUserId(notifyRespDTO.getChannelUserId())
244 262 .notifyTime(new Date()).build());
245 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 266 log.info("[notifyPayOrder][支付订单({}) 更新为已支付]", order.getId());
249 267  
250 268 // 3. 插入支付通知记录
251   - payNotifyCoreService.createPayNotifyTask(PayNotifyTaskCreateReqDTO.builder()
  269 + notifyService.createPayNotifyTask(PayNotifyTaskCreateReqDTO.builder()
252 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 3 import lombok.Data;
4 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 3 import lombok.Data;
4 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 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 3 import lombok.AllArgsConstructor;
4 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 3 import lombok.AllArgsConstructor;
4 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 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 11 import java.util.List;
9 12  
... ... @@ -38,4 +41,21 @@ public interface PayRefundService {
38 41 */
39 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 3 import cn.hutool.core.date.DatePattern;
4 4 import cn.hutool.core.date.DateUtil;
... ... @@ -10,6 +10,7 @@ import java.util.concurrent.atomic.AtomicLong;
10 10 /**
11 11 * 支付相关编号的生产
12 12 */
  13 +// TODO @jason:需要改造,基于 db;
13 14 public class PaySeqUtils {
14 15  
15 16 private static final AtomicLong REFUND_REQ_NO_SEQ = new AtomicLong(0L);
... ... @@ -47,4 +48,5 @@ public class PaySeqUtils {
47 48 DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN),
48 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 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 12 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
15 13 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  14 +import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest;
16 15 import org.junit.jupiter.api.Test;
17 16 import org.mockito.Mockito;
18 17 import org.springframework.boot.test.mock.mockito.MockBean;
... ... @@ -22,13 +21,13 @@ import javax.annotation.Resource;
22 21 import java.util.Collections;
23 22 import java.util.List;
24 23  
25   -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_APP_NOT_FOUND;
26 24 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
27 25 import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
28 26 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
29 27 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
30 28 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
31 29 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
  30 +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*;
32 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 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
12 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
13 5 import cn.iocoder.yudao.framework.pay.core.client.impl.alipay.AlipayPayClientConfig;
14 6 import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig;
15 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 15 import com.alibaba.fastjson.JSON;
17 16 import org.junit.jupiter.api.Test;
18 17 import org.springframework.context.annotation.Import;
... ... @@ -20,24 +19,16 @@ import org.springframework.context.annotation.Import;
20 19 import javax.annotation.Resource;
21 20 import java.util.List;
22 21  
23   -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.CHANNEL_NOT_EXISTS;
24 22 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
25 23 import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
26 24 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
27 25 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
28 26 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
29 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 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 32 public class PayChannelServiceTest extends BaseDbUnitTest {
42 33  
43 34 @Resource
... ... @@ -66,7 +57,6 @@ public class PayChannelServiceTest extends BaseDbUnitTest {
66 57 assertPojoEquals(reqVO, channel, "config");
67 58 // 关于config 对象应该拿出来重新对比
68 59 assertPojoEquals(v2Config, channel.getConfig());
69   -
70 60 }
71 61  
72 62 @Test
... ... @@ -350,7 +340,6 @@ public class PayChannelServiceTest extends BaseDbUnitTest {
350 340 assertPojoEquals(payClientConfig, list.get(0).getConfig());
351 341 }
352 342  
353   -
354 343 public WXPayClientConfig getV2Config() {
355 344 return new WXPayClientConfig()
356 345 .setAppId("APP00001")
... ... @@ -400,5 +389,4 @@ public class PayChannelServiceTest extends BaseDbUnitTest {
400 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 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 10 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
13 11 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  12 +import cn.iocoder.yudao.module.pay.test.BaseDbUnitTest;
14 13 import org.junit.jupiter.api.Test;
15 14 import org.springframework.context.annotation.Import;
16 15  
17 16 import javax.annotation.Resource;
18 17 import java.util.List;
19 18  
20   -import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_MERCHANT_NOT_EXISTS;
21 19 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
22 20 import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
23 21 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
24 22 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
25 23 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
26 24 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
  25 +import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*;
27 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 3 import cn.hutool.core.date.DateUtil;
4 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 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
15 6 import cn.iocoder.yudao.framework.common.util.date.DateUtils;
16 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 16 import org.junit.jupiter.api.Test;
18 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 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
13 4 import cn.iocoder.yudao.framework.common.util.date.DateUtils;
14 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 14 import org.junit.jupiter.api.Test;
16 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 3 import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration;
6 4 import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration;
  5 +import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
7 6 import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
8 7 import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
9 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 3 import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration;
4 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 3 import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
5   -import cn.iocoder.yudao.framework.tracer.config.YudaoTracerAutoConfiguration;
6 4 import org.redisson.spring.starter.RedissonAutoConfiguration;
7 5 import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
8 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 3 import com.github.fppt.jedismock.RedisServer;
4 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 20 String SMS_SEND_STATUS = "sys_sms_send_status"; // 短信发送状态
21 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 23 String BPM_TASK_ASSIGN_RULE_TYPE = "bpm_task_assign_rule_type"; // 任务分配规则类型
49 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;