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

This commit is contained in:
YunaiV 2022-01-31 21:51:23 +08:00
parent e7e3b18704
commit b757e1fccb
162 changed files with 1303 additions and 1714 deletions

View File

@ -18,6 +18,7 @@
<module>yudao-module-system</module>
<module>yudao-module-infra</module>
<module>yudao-module-tool</module>
<module>yudao-module-pay</module>
</modules>
<name>${artifactId}</name>

View File

@ -37,6 +37,11 @@
<artifactId>yudao-module-infra-impl</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-pay-impl</artifactId>
<version>${revision}</version>
</dependency>
<!-- 业务组件 -->
<dependency>
@ -71,11 +76,7 @@
<!-- <groupId>cn.iocoder.boot</groupId>-->
<!-- <artifactId>yudao-module-bpm-core-service-impl</artifactId>-->
<!-- </dependency>-->
<!-- Web 相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-web</artifactId>
</dependency>
<!-- spring boot 配置所需依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
@ -83,34 +84,6 @@
<optional>true</optional>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-security</artifactId>
</dependency>
<!-- DB 相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-mybatis</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-redis</artifactId>
</dependency>
<!-- Job 定时任务相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-job</artifactId>
</dependency>
<!-- 消息队列相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-mq</artifactId>
</dependency>
<!-- 服务保障相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
@ -128,24 +101,6 @@
<artifactId>spring-boot-admin-starter-server</artifactId> <!-- 实现 Spring Boot Admin Server 服务端 -->
</dependency>
<!-- Test 测试相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 工具类相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-excel</artifactId>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
</dependency>
<!-- 三方云服务相关 -->
<dependency>

View File

@ -1,6 +0,0 @@
/**
* 提供 POJO 类的实体转换
*
* 目前使用 MapStruct 框架
*/
package cn.iocoder.yudao.adminserver.modules.pay.convert;

View File

@ -1,16 +0,0 @@
package cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
/**
* 支付订单 Mapper
*
* @author aquan
*/
@Mapper
public interface PayOrderExtensionMapper extends BaseMapperX<PayOrderExtensionDO> {
}

View File

@ -1 +0,0 @@
package cn.iocoder.yudao.adminserver.modules.pay.enums;

View File

@ -1 +0,0 @@
package cn.iocoder.yudao.adminserver.modules.pay.job;

View File

@ -1,7 +0,0 @@
/**
* pay 包下我们放支付业务提供业务的支付能力
* 例如说商户应用支付退款等等
*
* 缩写pay
*/
package cn.iocoder.yudao.adminserver.modules.pay;

View File

@ -1,161 +0,0 @@
package cn.iocoder.yudao.adminserver.modules.pay.service.channel.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelCreateReqVO;
import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelExportReqVO;
import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelPageReqVO;
import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.PayChannelUpdateReqVO;
import cn.iocoder.yudao.adminserver.modules.pay.convert.channel.PayChannelConvert;
import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.channel.PayChannelMapper;
import cn.iocoder.yudao.adminserver.modules.pay.service.channel.PayChannelService;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import javax.validation.Validator;
import java.util.Collection;
import java.util.List;
import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.CHANNEL_EXIST_SAME_CHANNEL_ERROR;
import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.CHANNEL_NOT_EXISTS;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
* 支付渠道 Service 实现类
*
* @author aquan
*/
@Service
@Slf4j
@Validated
public class PayChannelServiceImpl implements PayChannelService {
@Resource
private PayChannelMapper channelMapper;
@Resource
private Validator validator;
@Override
public Long createChannel(PayChannelCreateReqVO reqVO) {
// 断言是否有重复的
PayChannelDO channelDO = this.getChannelByConditions(reqVO.getMerchantId(), reqVO.getAppId(), reqVO.getCode());
if (ObjectUtil.isNotNull(channelDO)) {
throw exception(CHANNEL_EXIST_SAME_CHANNEL_ERROR);
}
// 新增渠道
PayChannelDO channel = PayChannelConvert.INSTANCE.convert(reqVO);
settingConfigAndCheckParam(channel, reqVO.getConfig());
channelMapper.insert(channel);
return channel.getId();
}
@Override
public void updateChannel(PayChannelUpdateReqVO updateReqVO) {
// 校验存在
this.validateChannelExists(updateReqVO.getId());
// 更新
PayChannelDO channel = PayChannelConvert.INSTANCE.convert(updateReqVO);
settingConfigAndCheckParam(channel, updateReqVO.getConfig());
channelMapper.updateById(channel);
}
@Override
public void deleteChannel(Long id) {
// 校验存在
this.validateChannelExists(id);
// 删除
channelMapper.deleteById(id);
}
private void validateChannelExists(Long id) {
if (channelMapper.selectById(id) == null) {
throw exception(CHANNEL_NOT_EXISTS);
}
}
@Override
public PayChannelDO getChannel(Long id) {
return channelMapper.selectById(id);
}
@Override
public List<PayChannelDO> getChannelList(Collection<Long> ids) {
return channelMapper.selectBatchIds(ids);
}
@Override
public PageResult<PayChannelDO> getChannelPage(PayChannelPageReqVO pageReqVO) {
return channelMapper.selectPage(pageReqVO);
}
@Override
public List<PayChannelDO> getChannelList(PayChannelExportReqVO exportReqVO) {
return channelMapper.selectList(exportReqVO);
}
/**
* 根据支付应用ID集合获得支付渠道列表
*
* @param appIds 应用编号集合
* @return 支付渠道列表
*/
@Override
public List<PayChannelDO> getChannelListByAppIds(Collection<Long> appIds) {
return channelMapper.getChannelListByAppIds(appIds);
}
/**
* 根据条件获取通道数量
*
* @param merchantId 商户编号
* @param appid 应用编号
* @param code 通道编码
* @return 数量
*/
@Override
public Integer getChannelCountByConditions(Long merchantId, Long appid, String code) {
return this.channelMapper.selectCount(merchantId, appid, code);
}
/**
* 根据条件获取通道
*
* @param merchantId 商户编号
* @param appid 应用编号
* @param code 通道编码
* @return 数量
*/
@Override
public PayChannelDO getChannelByConditions(Long merchantId, Long appid, String code) {
return this.channelMapper.selectOne(merchantId, appid, code);
}
/**
* 设置渠道配置以及参数校验
*
* @param channel 渠道
* @param configStr 配置
*/
private void settingConfigAndCheckParam(PayChannelDO channel, String configStr) {
// 得到这个渠道是微信的还是支付宝的
Class<? extends PayClientConfig> payClass = PayChannelEnum.getByCode(channel.getCode()).getConfigClass();
if (ObjectUtil.isNull(payClass)) {
throw exception(CHANNEL_NOT_EXISTS);
}
PayClientConfig config = JSONUtil.toBean(configStr, payClass);
// 验证参数
config.validate(validator);
channel.setConfig(config);
}
}

View File

@ -1,41 +0,0 @@
package cn.iocoder.yudao.adminserver.modules.pay.service.order;
import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO;
import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import java.util.List;
/**
* 退款订单 Service 接口
*
* @author aquan
*/
public interface PayRefundService {
/**
* 获得退款订单
*
* @param id 编号
* @return 退款订单
*/
PayRefundDO getRefund(Long id);
/**
* 获得退款订单分页
*
* @param pageReqVO 分页查询
* @return 退款订单分页
*/
PageResult<PayRefundDO> getRefundPage(PayRefundPageReqVO pageReqVO);
/**
* 获得退款订单列表, 用于 Excel 导出
*
* @param exportReqVO 查询条件
* @return 退款订单列表
*/
List<PayRefundDO> getRefundList(PayRefundExportReqVO exportReqVO);
}

View File

@ -1,54 +0,0 @@
package cn.iocoder.yudao.adminserver.modules.pay.service.order.impl;
import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExportReqVO;
import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageReqVO;
import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayOrderMapper;
import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderService;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;
/**
* 支付订单 Service 实现类
*
* @author aquan
*/
@Service
@Validated
public class PayOrderServiceImpl implements PayOrderService {
@Resource
private PayOrderMapper orderMapper;
@Override
public PayOrderDO getOrder(Long id) {
return orderMapper.selectById(id);
}
@Override
public PageResult<PayOrderDO> getOrderPage(PayOrderPageReqVO pageReqVO) {
return orderMapper.selectPage(pageReqVO);
}
@Override
public List<PayOrderDO> getOrderList(PayOrderExportReqVO exportReqVO) {
return orderMapper.selectList(exportReqVO);
}
/**
* 根据 ID 集合获取只包含商品名称的订单集合
*
* @param idList 订单 ID 集合
* @return 只包含商品名称的订单集合
*/
@Override
public List<PayOrderDO> getOrderSubjectList(Collection<Long> idList) {
return orderMapper.findByIdListQueryOrderSubject(idList);
}
}

View File

@ -1,42 +0,0 @@
package cn.iocoder.yudao.adminserver.modules.pay.service.order.impl;
import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundExportReqVO;
import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.PayRefundPageReqVO;
import cn.iocoder.yudao.adminserver.modules.pay.dal.mysql.order.PayRefundMapper;
import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayRefundService;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.List;
/**
* 退款订单 Service 实现类
*
* @author aquan
*/
@Service
@Validated
public class PayRefundServiceImpl implements PayRefundService {
@Resource
private PayRefundMapper refundMapper;
@Override
public PayRefundDO getRefund(Long id) {
return refundMapper.selectById(id);
}
@Override
public PageResult<PayRefundDO> getRefundPage(PayRefundPageReqVO pageReqVO) {
return refundMapper.selectPage(pageReqVO);
}
@Override
public List<PayRefundDO> getRefundList(PayRefundExportReqVO exportReqVO) {
return refundMapper.selectList(exportReqVO);
}
}

View File

@ -1,20 +0,0 @@
package cn.iocoder.yudao.adminserver.modules.pay.service.channel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.validation.Validation;
import javax.validation.Validator;
/**
* 用于初始化 validator Bean 对象
* @author aquan
*/
@Configuration
public class PayChannelConfig {
@Bean
public Validator validator(){
return Validation.buildDefaultValidatorFactory().getValidator();
}
}

View File

@ -1,22 +0,0 @@
package cn.iocoder.yudao.coreservice.modules.pay.convert.order;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;
import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderCreateReqDTO;
import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitReqDTO;
import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PayOrderCoreConvert {
PayOrderCoreConvert INSTANCE = Mappers.getMapper(PayOrderCoreConvert.class);
PayOrderDO convert(PayOrderCreateReqDTO bean);
PayOrderExtensionDO convert(PayOrderSubmitReqDTO bean);
PayOrderUnifiedReqDTO convert2(PayOrderSubmitReqDTO bean);
}

View File

@ -1,23 +0,0 @@
package cn.iocoder.yudao.coreservice.modules.pay.convert.order;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PayRefundCoreConvert {
PayRefundCoreConvert INSTANCE = Mappers.getMapper(PayRefundCoreConvert.class);
//TODO 太多需要处理了 暂时不用
@Mappings(value = {
@Mapping(source = "amount", target = "payAmount"),
@Mapping(source = "id", target = "orderId"),
@Mapping(target = "status",ignore = true)
})
PayRefundDO convert(PayOrderDO orderDO);
}

View File

@ -1,6 +0,0 @@
/**
* 提供 POJO 类的实体转换
*
* 目前使用 MapStruct 框架
*/
package cn.iocoder.yudao.coreservice.modules.pay.convert;

View File

@ -1,9 +0,0 @@
package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PayAppCoreMapper extends BaseMapperX<PayAppDO> {
}

View File

@ -1,20 +0,0 @@
package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.Date;
@Mapper
public interface PayChannelCoreMapper extends BaseMapperX<PayChannelDO> {
default PayChannelDO selectByAppIdAndCode(Long appId, String code) {
return selectOne(PayChannelDO::getAppId, appId, PayChannelDO::getCode, code);
}
@Select("SELECT id FROM pay_channel WHERE update_time > #{maxUpdateTime} LIMIT 1")
Long selectExistsByUpdateTimeAfter(Date maxUpdateTime);
}

View File

@ -1,22 +0,0 @@
package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PayOrderCoreMapper extends BaseMapperX<PayOrderDO> {
default PayOrderDO selectByAppIdAndMerchantOrderId(Long appId, String merchantOrderId) {
return selectOne(new QueryWrapper<PayOrderDO>().eq("app_id", appId)
.eq("merchant_order_id", merchantOrderId));
}
default int updateByIdAndStatus(Long id, Integer status, PayOrderDO update) {
return update(update, new QueryWrapper<PayOrderDO>()
.eq("id", id).eq("status", status));
}
}

View File

@ -1,23 +0,0 @@
package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
/**
* 退款订单 Mapper
*
*/
@Mapper
public interface PayRefundCoreMapper extends BaseMapperX<PayRefundDO> {
default PayRefundDO selectByReqNo(String reqNo) {
return selectOne("req_no", reqNo);
}
default PayRefundDO selectByTradeNoAndMerchantRefundNo(String tradeNo, String merchantRefundNo){
return selectOne("trade_no", tradeNo, "merchant_refund_no", merchantRefundNo);
}
}

View File

@ -1,7 +0,0 @@
/**
* pay 包下我们放支付业务提供业务的支付能力
* 例如说商户应用支付退款等等
*
* 缩写pay
*/
package cn.iocoder.yudao.coreservice.modules.pay;

View File

@ -1,23 +0,0 @@
package cn.iocoder.yudao.coreservice.modules.pay.service.merchant;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
/**
* 支付应用 Core Service 接口
*
* @author 芋道源码
*/
public interface PayAppCoreService {
/**
* 支付应用的合法性
*
* 如果不合法抛出 {@link ServiceException} 业务异常
*
* @param id 应用编号
* @return 应用信息
*/
PayAppDO validPayApp(Long id);
}

View File

@ -1,39 +0,0 @@
package cn.iocoder.yudao.coreservice.modules.pay.service.merchant;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
/**
* 支付渠道 Core Service 接口
*
* @author 芋道源码
*/
public interface PayChannelCoreService {
/**
* 初始化支付客户端
*/
void initPayClients();
/**
* 支付渠道的合法性
*
* 如果不合法抛出 {@link ServiceException} 业务异常
*
* @param id 渠道编号
* @return 渠道信息
*/
PayChannelDO validPayChannel(Long id);
/**
* 支付渠道的合法性
*
* 如果不合法抛出 {@link ServiceException} 业务异常
*
* @param appId 应用编号
* @param code 支付渠道
* @return 渠道信息
*/
PayChannelDO validPayChannel(Long appId, String code);
}

View File

@ -1,43 +0,0 @@
package cn.iocoder.yudao.coreservice.modules.pay.service.merchant.impl;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant.PayAppCoreMapper;
import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayAppCoreService;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.validation.Valid;
import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
* 支付应用 Core Service 实现类
*
* @author 芋道源码
*/
@Service
@Valid
@Slf4j
public class PayAppCoreServiceImpl implements PayAppCoreService {
@Resource
private PayAppCoreMapper payAppCoreMapper;
@Override
public PayAppDO validPayApp(Long id) {
PayAppDO app = payAppCoreMapper.selectById(id);
// 校验是否存在
if (app == null) {
throw exception(PAY_APP_NOT_FOUND);
}
// 校验是否禁用
if (CommonStatusEnum.DISABLE.getStatus().equals(app.getStatus())) {
throw exception(PAY_APP_IS_DISABLE);
}
return app;
}
}

View File

@ -1,121 +0,0 @@
package cn.iocoder.yudao.coreservice.modules.pay.service.merchant.impl;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant.PayChannelCoreMapper;
import cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants;
import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayChannelCoreService;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
* 支付渠道 Core Service 实现类
*
* @author 芋道源码
*/
@Service
@Valid
@Slf4j
public class PayChannelCoreServiceImpl implements PayChannelCoreService {
/**
* 定时执行 {@link #schedulePeriodicRefresh()} 的周期
* 因为已经通过 Redis Pub/Sub 机制所以频率不需要高
*/
private static final long SCHEDULER_PERIOD = 5 * 60 * 1000L;
/**
* 缓存菜单的最大更新时间用于后续的增量轮询判断是否有更新
*/
private volatile Date maxUpdateTime;
@Resource
private PayChannelCoreMapper payChannelCoreMapper;
@Resource
private PayClientFactory payClientFactory;
@Override
@PostConstruct
public void initPayClients() {
// 获取支付渠道如果有更新
List<PayChannelDO> payChannels = this.loadPayChannelIfUpdate(maxUpdateTime);
if (CollUtil.isEmpty(payChannels)) {
return;
}
// 创建或更新支付 Client
payChannels.forEach(payChannel -> payClientFactory.createOrUpdatePayClient(payChannel.getId(),
payChannel.getCode(), payChannel.getConfig()));
// 写入缓存
assert payChannels.size() > 0; // 断言避免告警
maxUpdateTime = payChannels.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime();
log.info("[initPayClients][初始化 PayChannel 数量为 {}]", payChannels.size());
}
@Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD)
public void schedulePeriodicRefresh() {
initPayClients();
}
/**
* 如果支付渠道发生变化从数据库中获取最新的全量支付渠道
* 如果未发生变化则返回空
*
* @param maxUpdateTime 当前支付渠道的最大更新时间
* @return 支付渠道列表
*/
private List<PayChannelDO> loadPayChannelIfUpdate(Date maxUpdateTime) {
// 第一步判断是否要更新
if (maxUpdateTime == null) { // 如果更新时间为空说明 DB 一定有新数据
log.info("[loadPayChannelIfUpdate][首次加载全量支付渠道]");
} else { // 判断数据库中是否有更新的支付渠道
if (payChannelCoreMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) {
return null;
}
log.info("[loadPayChannelIfUpdate][增量加载全量支付渠道]");
}
// 第二步如果有更新则从数据库加载所有支付渠道
return payChannelCoreMapper.selectList();
}
@Override
public PayChannelDO validPayChannel(Long id) {
PayChannelDO channel = payChannelCoreMapper.selectById(id);
this.validPayChannel(channel);
return channel;
}
@Override
public PayChannelDO validPayChannel(Long appId, String code) {
PayChannelDO channel = payChannelCoreMapper.selectByAppIdAndCode(appId, code);
this.validPayChannel(channel);
return channel;
}
private void validPayChannel(PayChannelDO channel) {
if (channel == null) {
throw exception(PAY_CHANNEL_NOT_FOUND);
}
if (CommonStatusEnum.DISABLE.getStatus().equals(channel.getStatus())) {
throw exception(PayErrorCodeCoreConstants.PAY_CHANNEL_IS_DISABLE);
}
}
}

View File

@ -1,6 +0,0 @@
/**
* 这里的 VO 包有点特殊是提供给接入支付模块的业务提供回调接口时可以直接使用 VO
*
* 例如说支付单的回调使用
*/
package cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo;

View File

@ -1,50 +0,0 @@
package cn.iocoder.yudao.coreservice.modules.pay.service.order;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.*;
import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO;
import javax.validation.Valid;
/**
* 支付订单 Core Service
*
* @author 芋道源码
*/
public interface PayOrderCoreService {
/**
* 获得支付单
*
* @param id 支付单编号
* @return 支付单
*/
PayOrderDO getPayOrder(Long id);
/**
* 创建支付单
*
* @param reqDTO 创建请求
* @return 支付单编号
*/
Long createPayOrder(@Valid PayOrderCreateReqDTO reqDTO);
/**
* 提交支付
* 此时会发起支付渠道的调用
*
* @param reqDTO 提交请求
* @return 提交结果
*/
PayOrderSubmitRespDTO submitPayOrder(@Valid PayOrderSubmitReqDTO reqDTO);
/**
* 通知支付单成功
*
* @param channelId 渠道编号
* @param notifyData 通知数据
*/
void notifyPayOrder(Long channelId, PayNotifyDataDTO notifyData) throws Exception;
}

View File

@ -1,31 +0,0 @@
package cn.iocoder.yudao.coreservice.modules.pay.service.order;
import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundReqDTO;
import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundRespDTO;
import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO;
/**
* 退款单 Core Service
*
* @author jason
*/
public interface PayRefundCoreService {
/**
* 提交退款申请
*
* @param reqDTO 退款申请信息
* @return 退款申请返回信息
*/
PayRefundRespDTO submitRefundOrder(PayRefundReqDTO reqDTO);
/**
* 渠道的退款通知
*
* @param channelId 渠道编号
* @param notifyData 通知数据
* @throws Exception 退款通知异常
*/
void notifyPayRefund(Long channelId, PayNotifyDataDTO notifyData) throws Exception;
}

View File

@ -1 +0,0 @@
package cn.iocoder.yudao.coreservice.modules.pay.service;

View File

@ -17,10 +17,7 @@ import lombok.Getter;
@AllArgsConstructor
public enum PayChannelEnum {
/**
* 公众号网页
*/
WX_PUB("wx_pub", "微信 JSAPI 支付", WXPayClientConfig.class),
WX_PUB("wx_pub", "微信 JSAPI 支付", WXPayClientConfig.class), // 公众号网页
WX_LITE("wx_lite", "微信小程序支付", WXPayClientConfig.class),
WX_APP("wx_app", "微信 App 支付", WXPayClientConfig.class),
@ -34,16 +31,16 @@ public enum PayChannelEnum {
* <p>
* 参考 https://www.pingxx.com/api/支付渠道属性值.html
*/
private String code;
private final String code;
/**
* 名字
*/
private String name;
private final String name;
/**
* 配置类
*/
private Class<? extends PayClientConfig> configClass;
private final Class<? extends PayClientConfig> configClass;
/**
* 微信支付
@ -58,6 +55,6 @@ public enum PayChannelEnum {
public static PayChannelEnum getByCode(String code) {
return ArrayUtil.firstMatch(o -> o.getCode().equals(code), values());
}
}

25
yudao-module-pay/pom.xml Normal file
View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yudao-module-pay</artifactId>
<packaging>pom</packaging>
<modules>
<module>yudao-module-pay-api</module>
<module>yudao-module-pay-impl</module>
</modules>
<name>${artifactId}</name>
<description>
pay 模块,我们放支付业务,提供业务的支付能力。
例如说:商户、应用、支付、退款等等
</description>
</project>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>yudao-module-pay</artifactId>
<groupId>cn.iocoder.boot</groupId>
<version>1.4.0-snapshot</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yudao-module-pay-api</artifactId>
<packaging>jar</packaging>
<name>${artifactId}</name>
<description>
pay 模块 API暴露给其它模块调用
</description>
<dependencies>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-common</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,35 @@
package cn.iocoder.yudao.module.pay.enums;
/**
* Pay 字典类型的枚举类
*
* @author 芋道源码
*/
public interface DictTypeConstants {
/**
* 支付-订单-订单状态
*/
String PAY_ORDER_STATUS = "pay_order_status";
/**
* 支付-订单-订单回调商户状态
*/
String PAY_ORDER_NOTIFY_STATUS = "pay_order_notify_status";
/**
* 支付-订单-订单退款状态
*/
String PAY_ORDER_REFUND_STATUS = "pay_order_refund_status";
/**
* 支付-退款订单-退款状态
*/
String PAY_REFUND_ORDER_STATUS = "pay_refund_order_status";
/**
* 支付-退款订单-退款类别
*/
String PAY_REFUND_ORDER_TYPE = "pay_refund_order_type";
}

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.coreservice.modules.pay.enums;
package cn.iocoder.yudao.module.pay.enums;
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
*
* pay 系统使用 1-007-000-000
*/
public interface PayErrorCodeCoreConstants {
public interface ErrorCodeConstants {
/**
* ========== APP 模块 1-007-000-000 ==========

View File

@ -0,0 +1 @@
package cn.iocoder.yudao.module.pay;

View File

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>yudao-module-pay</artifactId>
<groupId>cn.iocoder.boot</groupId>
<version>1.4.0-snapshot</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yudao-module-pay-impl</artifactId>
<packaging>jar</packaging>
<name>${artifactId}</name>
<description>
pay 模块,我们放支付业务,提供业务的支付能力。
例如说:商户、应用、支付、退款等等
</description>
<dependencies>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-pay-api</artifactId>
<version>${revision}</version>
</dependency>
<!-- 业务组件 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-biz-operatelog</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-biz-pay</artifactId>
</dependency>
<!-- Web 相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-security</artifactId>
</dependency>
<!-- DB 相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-mybatis</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-redis</artifactId>
</dependency>
<!-- Job 定时任务相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-job</artifactId>
</dependency>
<!-- 消息队列相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-mq</artifactId>
</dependency>
<!-- Test 测试相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 工具类相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-excel</artifactId>
</dependency>
</dependencies>
<build>
<!-- 设置构建的 jar 包名 -->
<finalName>${artifactId}</finalName>
<plugins>
<!-- 打包 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal> <!-- 将引入的 jar 打入其中 -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,20 +1,20 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.app;
package cn.iocoder.yudao.module.pay.controller.admin.merchant;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.*;
import cn.iocoder.yudao.adminserver.modules.pay.convert.app.PayAppConvert;
import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService;
import cn.iocoder.yudao.adminserver.modules.pay.service.channel.PayChannelService;
import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.*;
import cn.iocoder.yudao.module.pay.convert.app.PayAppConvert;
import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
import cn.iocoder.yudao.module.pay.service.merchant.PayAppService;
import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService;
import cn.iocoder.yudao.module.pay.service.merchant.PayMerchantService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
@ -33,7 +33,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Slf4j
@Api(tags = "支付应用信息")
@Api(tags = "管理后台 - 支付应用信息")
@RestController
@RequestMapping("/pay/app")
@Validated
@ -106,7 +106,7 @@ public class PayAppController {
return success(new PageResult<>(pageResult.getTotal()));
}
// 得到所有的应用编号查出所有的
// 得到所有的应用编号查出所有的
Collection<Long> payAppIds = CollectionUtils.convertList(pageResult.getList(), PayAppDO::getId);
List<PayChannelDO> channels = channelService.getChannelListByAppIds(payAppIds);
// TODO @aquan可以基于 appId 简历一个 multiMap这样下面直接 get 到之后CollUtil buildSet 即可
@ -116,7 +116,7 @@ public class PayAppController {
Collection<Long> merchantIds = CollectionUtils.convertList(pageResult.getList(), PayAppDO::getMerchantId);
Map<Long, PayMerchantDO> deptMap = merchantService.getMerchantMap(merchantIds);
// 利用反射将道数据复制到返回的数据结构中去
// 利用反射将道数据复制到返回的数据结构中去
List<PayAppPageItemRespVO> appList = new ArrayList<>(pageResult.getList().size());
pageResult.getList().forEach(app -> {
// 写入应用信息的数据

View File

@ -1,9 +1,9 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.channel;
package cn.iocoder.yudao.module.pay.controller.admin.merchant;
import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.*;
import cn.iocoder.yudao.adminserver.modules.pay.convert.channel.PayChannelConvert;
import cn.iocoder.yudao.adminserver.modules.pay.service.channel.PayChannelService;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.*;
import cn.iocoder.yudao.module.pay.convert.channel.PayChannelConvert;
import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
@ -26,11 +26,7 @@ import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
/**
* 支付渠道 controller 组件
* @author aquan
*/
@Api(tags = "支付渠道")
@Api(tags = "管理后台 - 支付渠道")
@RestController
@RequestMapping("/pay/channel")
@Validated
@ -39,7 +35,6 @@ public class PayChannelController {
@Resource
private PayChannelService channelService;
@PostMapping("/create")
@ApiOperation("创建支付渠道 ")
@PreAuthorize("@ss.hasPermission('pay:channel:create')")
@ -116,7 +111,6 @@ public class PayChannelController {
@PreAuthorize("@ss.hasPermission('pay:channel:query')")
public CommonResult<PayChannelRespVO> getChannel(
@RequestParam Long merchantId, @RequestParam Long appId, @RequestParam String code) {
// 獲取渠道
PayChannelDO channel = channelService.getChannelByConditions(merchantId, appId, code);
if (channel == null) {
@ -126,4 +120,5 @@ public class PayChannelController {
PayChannelRespVO respVo = PayChannelConvert.INSTANCE.convert(channel);
return success(respVo);
}
}

View File

@ -1,9 +1,9 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant;
package cn.iocoder.yudao.module.pay.controller.admin.merchant;
import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.*;
import cn.iocoder.yudao.adminserver.modules.pay.convert.merchant.PayMerchantConvert;
import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;
import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.*;
import cn.iocoder.yudao.module.pay.convert.merchant.PayMerchantConvert;
import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
import cn.iocoder.yudao.module.pay.service.merchant.PayMerchantService;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
import lombok.*;
import io.swagger.annotations.*;

View File

@ -1,11 +1,9 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
import javax.validation.constraints.*;
@ApiModel("支付应用信息创建 Request VO")
@ApiModel("管理后台 - 支付应用信息创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,10 +1,9 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.util.Date;
/**
* 支付应用信息 Excel VO

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
import lombok.*;
import java.util.*;
@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ApiModel(value = "支付应用信息 Excel 导出 Request VO", description = "参数和 PayAppPageReqVO 是一致的")
@ApiModel(value = "管理后台 - 支付应用信息 Excel 导出 Request VO", description = "参数和 PayAppPageReqVO 是一致的")
@Data
public class PayAppExportReqVO {

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -9,12 +9,7 @@ import lombok.ToString;
import java.util.Date;
import java.util.Set;
/**
* 支付应用信息分页查询 Response VO
*
* @author aquan
*/
@ApiModel(value = "支付应用信息分页查询 Response VO", description = "相比于支付信息,还会多出应用渠道的开关信息")
@ApiModel(value = "管理后台 - 支付应用信息分页查询 Response VO", description = "相比于支付信息,还会多出应用渠道的开关信息")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
import lombok.*;
import java.util.*;
@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ApiModel("支付应用信息分页 Request VO")
@ApiModel("管理后台 - 支付应用信息分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,10 +1,10 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
@ApiModel("支付应用信息 Response VO")
@ApiModel("管理后台 - 支付应用信息 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,11 +1,10 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
import javax.validation.constraints.*;
@ApiModel("支付应用信息更新 Request VO")
@ApiModel("管理后台 - 支付应用信息更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -6,7 +6,7 @@ import lombok.Data;
import javax.validation.constraints.NotNull;
@ApiModel("应用更新状态 Request VO")
@ApiModel("管理后台 - 应用更新状态 Request VO")
@Data
public class PayAppUpdateStatusReqVO {

View File

@ -1,13 +1,11 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
import javax.validation.constraints.*;
/**
* 支付渠道
Base VO提供给添加修改详细的子 VO 使用
* 支付渠道 Base VO提供给添加修改详细的子 VO 使用
* 如果子 VO 存在差异的字段请不要添加到这里影响 Swagger 文档生成
*/
@Data

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -8,14 +8,14 @@ import lombok.ToString;
import javax.validation.constraints.NotBlank;
@ApiModel("支付渠道 创建 Request VO")
@ApiModel("管理后台 - 支付渠道 创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class PayChannelCreateReqVO extends PayChannelBaseVO {
@ApiModelProperty(value = "道配置的 json 字符串")
@NotBlank(message = "道配置不能为空")
@ApiModelProperty(value = "道配置的 json 字符串")
@NotBlank(message = "道配置不能为空")
private String config;
}

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel;
import lombok.*;
import java.util.*;
@ -7,8 +7,7 @@ import io.swagger.annotations.*;
import com.alibaba.excel.annotation.ExcelProperty;
/**
* 支付渠道
Excel VO
* 支付渠道 Excel VO
*
* @author 芋艿
*/

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel;
import lombok.*;
import java.util.*;
@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ApiModel(value = "支付渠道 Excel 导出 Request VO", description = "参数和 PayChannelPageReqVO 是一致的")
@ApiModel(value = "管理后台 - 支付渠道 Excel 导出 Request VO", description = "参数和 PayChannelPageReqVO 是一致的")
@Data
public class PayChannelExportReqVO {

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel;
import lombok.*;
import java.util.*;
@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ApiModel("支付渠道 分页 Request VO")
@ApiModel("管理后台 - 支付渠道 分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,10 +1,10 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
@ApiModel("支付渠道 Response VO")
@ApiModel("管理后台 - 支付渠道 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,11 +1,10 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
import javax.validation.constraints.*;
@ApiModel("支付渠道 更新 Request VO")
@ApiModel("管理后台 - 支付渠道 更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@ -15,7 +14,7 @@ public class PayChannelUpdateReqVO extends PayChannelBaseVO {
@NotNull(message = "商户编号不能为空")
private Long id;
@ApiModelProperty(value = "道配置的json字符串")
@NotBlank(message = "道配置不能为空")
@ApiModelProperty(value = "道配置的json字符串")
@NotBlank(message = "道配置不能为空")
private String config;
}

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

View File

@ -1,11 +1,9 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
import javax.validation.constraints.*;
@ApiModel("支付商户信息创建 Request VO")
@ApiModel("管理后台 - 支付商户信息创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
import lombok.*;
import java.util.*;
@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ApiModel(value = "支付商户信息 Excel 导出 Request VO", description = "参数和 PayMerchantPageReqVO 是一致的")
@ApiModel(value = "管理后台 - 支付商户信息 Excel 导出 Request VO", description = "参数和 PayMerchantPageReqVO 是一致的")
@Data
public class PayMerchantExportReqVO {

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
import lombok.*;
import java.util.*;
@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ApiModel("支付商户信息分页 Request VO")
@ApiModel("管理后台 - 支付商户信息分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -8,7 +8,7 @@ import lombok.ToString;
import java.util.Date;
@ApiModel("支付商户信息 Response VO")
@ApiModel("管理后台 - 支付商户信息 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@ -20,11 +20,7 @@ public class PayMerchantRespVO extends PayMerchantBaseVO {
@ApiModelProperty(value = "创建时间", required = true)
private Date createTime;
/**
* 商户号
* 例如说M233666999
* 只有新增时插入不允许修改
*/
@ApiModelProperty(value = "商户号", required = true, example = "M233666999")
private String no;
}

View File

@ -1,11 +1,10 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
import javax.validation.constraints.*;
@ApiModel("支付商户信息更新 Request VO")
@ApiModel("管理后台 - 支付商户信息更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo;
package cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -6,7 +6,7 @@ import lombok.Data;
import javax.validation.constraints.NotNull;
@ApiModel("商户更新状态 Request VO")
@ApiModel("管理后台 - 商户更新状态 Request VO")
@Data
public class PayMerchantUpdateStatusReqVO {

View File

@ -1,17 +1,17 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order;
package cn.iocoder.yudao.module.pay.controller.admin.order;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.*;
import cn.iocoder.yudao.adminserver.modules.pay.convert.order.PayOrderConvert;
import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService;
import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService;
import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderExtensionService;
import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderService;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;
import cn.iocoder.yudao.module.pay.controller.admin.order.vo.*;
import cn.iocoder.yudao.module.pay.convert.order.PayOrderConvert;
import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
import cn.iocoder.yudao.module.pay.service.merchant.PayAppService;
import cn.iocoder.yudao.module.pay.service.merchant.PayMerchantService;
import cn.iocoder.yudao.module.pay.service.order.PayOrderExtensionService;
import cn.iocoder.yudao.module.pay.service.order.PayOrderService;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
@ -39,38 +39,18 @@ import java.util.Map;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
/**
* 支付订单 controller 组件
*
* @author aquan
*/
@Api(tags = "支付订单")
@Api(tags = "管理后台 - 支付订单")
@RestController
@RequestMapping("/pay/order")
@Validated
public class PayOrderController {
/**
* 订单 service 组件
*/
@Resource
private PayOrderService orderService;
/**
* 订单扩展 service 组件
*/
@Resource
private PayOrderExtensionService orderExtensionService;
/**
* 商户 service 组件
*/
@Resource
private PayMerchantService merchantService;
/**
* 应用 service 组件
*/
@Resource
private PayAppService appService;
@ -88,6 +68,7 @@ public class PayOrderController {
PayAppDO appDO = appService.getApp(order.getAppId());
PayChannelEnum channelEnum = PayChannelEnum.getByCode(order.getChannelCode());
// TODO @aquan文案都是前端 format
PayOrderDetailsRespVO respVO = PayOrderConvert.INSTANCE.orderDetailConvert(order);
respVO.setMerchantName(ObjectUtil.isNotNull(merchantDO) ? merchantDO.getName() : "未知商户");
respVO.setAppName(ObjectUtil.isNotNull(appDO) ? appDO.getName() : "未知应用");

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order;
package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -10,8 +10,7 @@ import java.util.Date;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* 支付订单
* Base VO提供给添加修改详细的子 VO 使用
* 支付订单 Base VO提供给添加修改详细的子 VO 使用
* 如果子 VO 存在差异的字段请不要添加到这里影响 Swagger 文档生成
*
* @author aquan

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order;
package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -8,12 +8,7 @@ import lombok.ToString;
import java.util.Date;
/**
* 支付订单详细信息由支付订单和支付订单扩展信息组成
*
* @author aquan
*/
@ApiModel("支付订单详细信息 Response VO")
@ApiModel("管理后台 - 支付订单详细信息 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,8 +1,8 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order;
package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.module.pay.enums.DictTypeConstants;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order;
package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -9,11 +9,7 @@ import java.util.Date;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* 支付订单 Excel 导出 Request VO
* @author aquan
*/
@ApiModel(value = "支付订单 Excel 导出 Request VO", description = "参数和 PayOrderPageReqVO 是一致的")
@ApiModel(value = "管理后台 - 支付订单 Excel 导出 Request VO", description = "参数和 PayOrderPageReqVO 是一致的")
@Data
public class PayOrderExportReqVO {

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order;
package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -8,12 +8,7 @@ import lombok.ToString;
import java.util.Date;
/**
* 支付订单分页 Request VO
*
* @author aquan
*/
@ApiModel("支付订单分页 Request VO")
@ApiModel("管理后台 - 支付订单分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order;
package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.annotations.ApiModel;
@ -12,12 +12,7 @@ import java.util.Date;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* 支付订单分页 Request VO
*
* @author aquan
*/
@ApiModel("支付订单分页 Request VO")
@ApiModel("管理后台 - 支付订单分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order;
package cn.iocoder.yudao.module.pay.controller.admin.order.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -8,12 +8,7 @@ import lombok.ToString;
import java.util.Date;
/**
* 支付订单 Response VO
*
* @author aquan
*/
@ApiModel("支付订单 Response VO")
@ApiModel("管理后台 - 支付订单 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,17 +1,17 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order;
package cn.iocoder.yudao.module.pay.controller.admin.refund;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.*;
import cn.iocoder.yudao.adminserver.modules.pay.convert.refund.PayRefundConvert;
import cn.iocoder.yudao.adminserver.modules.pay.service.app.PayAppService;
import cn.iocoder.yudao.adminserver.modules.pay.service.merchant.PayMerchantService;
import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayOrderService;
import cn.iocoder.yudao.adminserver.modules.pay.service.order.PayRefundService;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.*;
import cn.iocoder.yudao.module.pay.convert.refund.PayRefundConvert;
import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
import cn.iocoder.yudao.module.pay.service.merchant.PayAppService;
import cn.iocoder.yudao.module.pay.service.merchant.PayMerchantService;
import cn.iocoder.yudao.module.pay.service.order.PayOrderService;
import cn.iocoder.yudao.module.pay.service.refund.PayRefundService;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
@ -39,12 +39,7 @@ import java.util.Map;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
/**
* 退款订单 Controller 组件
*
* @author aquan
*/
@Api(tags = "退款订单")
@Api(tags = "管理后台 - 退款订单")
@RestController
@RequestMapping("/pay/refund")
@Validated
@ -52,26 +47,13 @@ public class PayRefundController {
@Resource
private PayRefundService refundService;
/**
* 商户 service 组件
*/
@Resource
private PayMerchantService merchantService;
/**
* 应用 service 组件
*/
@Resource
private PayAppService appService;
/**
* 订单 service 组件
*/
@Resource
private PayOrderService orderService;
@GetMapping("/get")
@ApiOperation("获得退款订单")
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

View File

@ -1,9 +1,9 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
import lombok.*;
import io.swagger.annotations.*;
@ApiModel("退款订单创建 Request VO")
@ApiModel("管理后台 - 退款订单创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -9,12 +9,7 @@ import lombok.ToString;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* 退款订单详情 Response VO
*
* @author aquan
*/
@ApiModel("退款订单详情 Response VO")
@ApiModel("管理后台 - 退款订单详情 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,8 +1,8 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.module.pay.enums.DictTypeConstants;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -9,7 +9,7 @@ import java.util.Date;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ApiModel(value = "退款订单 Excel 导出 Request VO", description = "参数和 PayRefundPageReqVO 是一致的")
@ApiModel(value = "管理后台 - 退款订单 Excel 导出 Request VO", description = "参数和 PayRefundPageReqVO 是一致的")
@Data
public class PayRefundExportReqVO {

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -8,11 +8,7 @@ import lombok.ToString;
import java.util.Date;
/**
* 退款订单分页查询 Response VO
* @author aquan
*/
@ApiModel("退款订单分页查询 Response VO")
@ApiModel("管理后台 - 退款订单分页查询 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.annotations.ApiModel;
@ -12,7 +12,7 @@ import java.util.Date;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ApiModel("退款订单分页 Request VO")
@ApiModel("管理后台 - 退款订单分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -8,7 +8,7 @@ import lombok.ToString;
import java.util.Date;
@ApiModel("退款订单 Response VO")
@ApiModel("管理后台 - 退款订单 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,10 +1,10 @@
package cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo;
package cn.iocoder.yudao.module.pay.controller.admin.refund.vo;
import lombok.*;
import io.swagger.annotations.*;
import javax.validation.constraints.*;
@ApiModel("退款订单更新 Request VO")
@ApiModel("管理后台 - 退款订单更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

View File

@ -1,17 +1,17 @@
package cn.iocoder.yudao.userserver.modules.pay.controller.order;
package cn.iocoder.yudao.module.pay.controller.app.order;
import cn.hutool.core.bean.BeanUtil;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayOrderCoreService;
import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayRefundCoreService;
import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitReqDTO;
import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitRespDTO;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.pay.core.client.PayClient;
import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;
import cn.iocoder.yudao.framework.pay.core.client.dto.PayNotifyDataDTO;
import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayOrderSubmitReqVO;
import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayOrderSubmitRespVO;
import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitReqVO;
import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitRespVO;
import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.module.pay.service.order.PayOrderService;
import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitReqDTO;
import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitRespDTO;
import cn.iocoder.yudao.module.pay.service.refund.PayRefundService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@ -21,52 +21,52 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.PAY_CHANNEL_CLIENT_NOT_FOUND;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.*;
@Api(tags = "支付订单")
@Api(tags = "用户 APP - 支付订单")
@RestController
@RequestMapping("/pay/order")
@Validated
@Slf4j
public class PayOrderController {
public class AppPayOrderController {
@Resource
private PayOrderCoreService payOrderCoreService;
private PayOrderService orderService;
@Resource
private PayRefundCoreService payRefundCoreService;
private PayRefundService refundService;
@Resource
private PayClientFactory payClientFactory;
@PostMapping("/submit")
@ApiOperation("提交支付订单")
// @PreAuthenticated // TODO 暂时不加登陆验证前端暂时没做好
public CommonResult<PayOrderSubmitRespVO> submitPayOrder(@RequestBody PayOrderSubmitReqVO reqVO) {
public CommonResult<AppPayOrderSubmitRespVO> submitPayOrder(@RequestBody AppPayOrderSubmitReqVO reqVO) {
// 获得订单
PayOrderDO payOrder = payOrderCoreService.getPayOrder(reqVO.getId());
PayOrderDO payOrder = orderService.getOrder(reqVO.getId());
// 提交支付
PayOrderSubmitReqDTO reqDTO = new PayOrderSubmitReqDTO();
BeanUtil.copyProperties(reqVO, reqDTO, false);
reqDTO.setUserIp(getClientIP());
reqDTO.setAppId(payOrder.getAppId());
PayOrderSubmitRespDTO respDTO = payOrderCoreService.submitPayOrder(reqDTO);
PayOrderSubmitRespDTO respDTO = orderService.submitPayOrder(reqDTO);
// 拼接返回
return success(PayOrderSubmitRespVO.builder().invokeResponse(respDTO.getInvokeResponse()).build());
return success(AppPayOrderSubmitRespVO.builder().invokeResponse(respDTO.getInvokeResponse()).build());
}
// ========== 支付渠道的回调 ==========
// TODO @芋艿是不是放到 notify 模块更合适
//TODO 芋道源码 换成了统一的地址了 /notify/{channelId}测试通过可以删除
@PostMapping("/notify/wx-pub/{channelId}")
@ApiOperation("通知微信公众号支付的结果")
public String notifyWxPayOrder(@PathVariable("channelId") Long channelId,
@RequestBody String xmlData) throws Exception {
payOrderCoreService.notifyPayOrder(channelId, PayNotifyDataDTO.builder().body(xmlData).build());
orderService.notifyPayOrder(channelId, PayNotifyDataDTO.builder().body(xmlData).build());
return "success";
}
@ -110,12 +110,12 @@ public class PayOrderController {
// 如果是退款则发起退款通知
if (payClient.isRefundNotify(notifyData)) {
payRefundCoreService.notifyPayRefund(channelId, PayNotifyDataDTO.builder().params(params).body(originData).build());
refundService.notifyPayRefund(channelId, PayNotifyDataDTO.builder().params(params).body(originData).build());
return "success";
}
// 如果非退款则发起支付通知
payOrderCoreService.notifyPayOrder(channelId, PayNotifyDataDTO.builder().params(params).body(originData).build());
orderService.notifyPayOrder(channelId, PayNotifyDataDTO.builder().params(params).body(originData).build());
return "success";
}

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.userserver.modules.pay.controller.order.vo;
package cn.iocoder.yudao.module.pay.controller.app.order.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -9,10 +9,10 @@ import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Map;
@ApiModel("支付订单提交 Request VO")
@ApiModel("用户 APP - 支付订单提交 Request VO")
@Data
@Accessors(chain = true)
public class PayOrderSubmitReqVO {
public class AppPayOrderSubmitReqVO {
@ApiModelProperty(value = "支付单编号", required = true, example = "1024")
@NotNull(message = "支付单编号不能为空")

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.userserver.modules.pay.controller.order.vo;
package cn.iocoder.yudao.module.pay.controller.app.order.vo;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
@ -7,13 +7,13 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@ApiModel("支付订单提交 Response VO")
@ApiModel("用户 APP - 支付订单提交 Response VO")
@Data
@Accessors(chain = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PayOrderSubmitRespVO {
public class AppPayOrderSubmitRespVO {
/**
* 调用支付渠道的响应结果

View File

@ -0,0 +1 @@
package cn.iocoder.yudao.module.pay.controller.app;

View File

@ -1,13 +1,13 @@
package cn.iocoder.yudao.userserver.modules.pay.controller.order;
package cn.iocoder.yudao.module.pay.controller.app.refund;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayRefundCoreService;
import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayRefundReqDTO;
import cn.iocoder.yudao.coreservice.modules.pay.util.PaySeqUtils;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayRefundReqVO;
import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayRefundRespVO;
import cn.iocoder.yudao.userserver.modules.pay.convert.order.PayRefundConvert;
import cn.iocoder.yudao.module.pay.controller.app.refund.vo.AppPayRefundReqVO;
import cn.iocoder.yudao.module.pay.controller.app.refund.vo.AppPayRefundRespVO;
import cn.iocoder.yudao.module.pay.convert.refund.PayRefundConvert;
import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundReqDTO;
import cn.iocoder.yudao.module.pay.service.refund.PayRefundService;
import cn.iocoder.yudao.module.pay.util.PaySeqUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@ -19,28 +19,29 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
@Api(tags = "退款订单")
@Api(tags = "用户 APP - 退款订单")
@RestController
@RequestMapping("/pay/order")
@RequestMapping("/pay/refund")
@Validated
@Slf4j
public class PayRefundController {
public class AppPayRefundController {
@Resource
private PayRefundCoreService payRefundCoreService;
private PayRefundService refundService;
@PostMapping("/refund")
@ApiOperation("提交退款订单")
public CommonResult<PayRefundRespVO> submitRefundOrder(@RequestBody PayRefundReqVO reqVO){
public CommonResult<AppPayRefundRespVO> submitRefundOrder(@RequestBody AppPayRefundReqVO reqVO){
PayRefundReqDTO req = PayRefundConvert.INSTANCE.convert(reqVO);
req.setUserIp(getClientIP());
//TODO 测试暂时模拟生成商户退款订单
// TODO 测试暂时模拟生成商户退款订单
if(StrUtil.isEmpty(reqVO.getMerchantRefundId())) {
req.setMerchantRefundId(PaySeqUtils.genMerchantRefundNo());
}
return CommonResult.success( PayRefundConvert.INSTANCE.convert(payRefundCoreService.submitRefundOrder(req)));
return success(PayRefundConvert.INSTANCE.convert(refundService.submitRefundOrder(req)));
}
}

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.userserver.modules.pay.controller.order.vo;
package cn.iocoder.yudao.module.pay.controller.app.refund.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -8,11 +8,11 @@ import lombok.NoArgsConstructor;
import javax.validation.constraints.NotEmpty;
@ApiModel("退款订单 Req VO")
@ApiModel("用户 APP - 退款订单 Req VO")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PayRefundReqVO {
public class AppPayRefundReqVO {
@ApiModelProperty(value = "支付订单编号自增", required = true, example = "10")
@NotEmpty(message = "支付订单编号自增")

View File

@ -1,22 +1,22 @@
package cn.iocoder.yudao.userserver.modules.pay.controller.order.vo;
package cn.iocoder.yudao.module.pay.controller.app.refund.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@ApiModel("提交退款订单 Response VO")
@ApiModel("用户 APP - 提交退款订单 Response VO")
@Data
@Accessors(chain = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PayRefundRespVO {
public class AppPayRefundRespVO {
/**
* 支付退款单编号 自增
*/
@ApiModelProperty(value = "退款订单编号", required = true, example = "10")
private Long refundId;
}

View File

@ -0,0 +1,6 @@
/**
* 提供 RESTful API 给前端
* 1. admin 提供给管理后台 yudao-ui-admin 前端项目
* 2. app 提供给用户 APP yudao-ui-app 前端项目它的 Controller VO 都要添加 App 前缀用于和管理后台进行区分
*/
package cn.iocoder.yudao.module.pay.controller;

View File

@ -1,14 +1,14 @@
package cn.iocoder.yudao.adminserver.modules.pay.convert.app;
package cn.iocoder.yudao.module.pay.convert.app;
import java.util.*;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.app.*;
import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayAppDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import cn.iocoder.yudao.adminserver.modules.pay.controller.app.vo.*;
/**
* 支付应用信息 Convert

View File

@ -1,22 +1,18 @@
package cn.iocoder.yudao.adminserver.modules.pay.convert.channel;
package cn.iocoder.yudao.module.pay.convert.channel;
import java.util.*;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig;
import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelCreateReqVO;
import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelExcelVO;
import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelRespVO;
import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelUpdateReqVO;
import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import cn.iocoder.yudao.adminserver.modules.pay.controller.channel.vo.*;
/**
* 支付渠道
Convert
*
* @author 芋艿
*/
@Mapper
public interface PayChannelConvert {

View File

@ -1,19 +1,17 @@
package cn.iocoder.yudao.adminserver.modules.pay.convert.merchant;
package cn.iocoder.yudao.module.pay.convert.merchant;
import java.util.*;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantCreateReqVO;
import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantExcelVO;
import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantRespVO;
import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.merchant.PayMerchantUpdateReqVO;
import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayMerchantDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import cn.iocoder.yudao.adminserver.modules.pay.controller.merchant.vo.*;
/**
* 支付商户信息 Convert
*
* @author 芋艿
*/
@Mapper
public interface PayMerchantConvert {

View File

@ -1,12 +1,15 @@
package cn.iocoder.yudao.adminserver.modules.pay.convert.order;
package cn.iocoder.yudao.module.pay.convert.order;
import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderDetailsRespVO;
import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderExcelVO;
import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderPageItemRespVO;
import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.order.PayOrderRespVO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;
import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderDetailsRespVO;
import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderExcelVO;
import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderPageItemRespVO;
import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderRespVO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderCreateReqDTO;
import cn.iocoder.yudao.module.pay.service.order.dto.PayOrderSubmitReqDTO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@ -24,24 +27,10 @@ public interface PayOrderConvert {
PayOrderConvert INSTANCE = Mappers.getMapper(PayOrderConvert.class);
PayOrderRespVO convert(PayOrderDO bean);
/**
* 订单DO 转换为 详细订单 RespVO
*
* @param bean 订单DO
* @return 详细订单 RespVO
*/
PayOrderDetailsRespVO orderDetailConvert(PayOrderDO bean);
/**
* 订单扩展DO 转换为 详细订单扩展 RespVO
*
* @param bean 订单扩展DO
* @return 详细订单扩展 RespVO
*/
PayOrderDetailsRespVO.PayOrderExtension orderDetailExtensionConvert(PayOrderExtensionDO bean);
List<PayOrderRespVO> convertList(List<PayOrderDO> list);
@ -58,12 +47,6 @@ public interface PayOrderConvert {
*/
PayOrderPageItemRespVO pageConvertItemPage(PayOrderDO bean);
/**
* 订单DO 订单导出excel VO
*
* @param bean 订单 DO
* @return 订单导出excel VO
*/
default PayOrderExcelVO excelConvert(PayOrderDO bean) {
if (bean == null) {
return null;
@ -101,4 +84,12 @@ public interface PayOrderConvert {
return payOrderExcelVO;
}
PayOrderDO convert(PayOrderCreateReqDTO bean);
PayOrderExtensionDO convert(PayOrderSubmitReqDTO bean);
PayOrderUnifiedReqDTO convert2(PayOrderSubmitReqDTO bean);
}

View File

@ -3,4 +3,4 @@
*
* 目前使用 MapStruct 框架
*/
package cn.iocoder.yudao.userserver.modules.pay.convert;
package cn.iocoder.yudao.module.pay.convert;

View File

@ -1,9 +1,16 @@
package cn.iocoder.yudao.adminserver.modules.pay.convert.refund;
package cn.iocoder.yudao.module.pay.convert.refund;
import cn.iocoder.yudao.adminserver.modules.pay.controller.order.vo.refund.vo.*;
import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.pay.controller.admin.refund.vo.*;
import cn.iocoder.yudao.module.pay.controller.app.refund.vo.AppPayRefundReqVO;
import cn.iocoder.yudao.module.pay.controller.app.refund.vo.AppPayRefundRespVO;
import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundReqDTO;
import cn.iocoder.yudao.module.pay.service.order.dto.PayRefundRespDTO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
import java.math.BigDecimal;
@ -87,4 +94,16 @@ public interface PayRefundConvert {
return payRefundExcelVO;
}
//TODO 太多需要处理了 暂时不用
@Mappings(value = {
@Mapping(source = "amount", target = "payAmount"),
@Mapping(source = "id", target = "orderId"),
@Mapping(target = "status",ignore = true)
})
PayRefundDO convert(PayOrderDO orderDO);
PayRefundReqDTO convert(AppPayRefundReqVO bean);
AppPayRefundRespVO convert(PayRefundRespDTO bean);
}

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant;
package cn.iocoder.yudao.module.pay.dal.dataobject.merchant;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant;
package cn.iocoder.yudao.module.pay.dal.dataobject.merchant;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant;
package cn.iocoder.yudao.module.pay.dal.dataobject.merchant;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;

View File

@ -1,6 +1,6 @@
package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify;
package cn.iocoder.yudao.module.pay.dal.dataobject.notify;
import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum;
import cn.iocoder.yudao.module.pay.enums.notify.PayNotifyStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

Some files were not shown because too many files have changed in this diff Show More