feat 支付/同步/修复流程联调, 支付宝支付同步逻辑优化

This commit is contained in:
nws
2024-01-03 22:41:33 +08:00
parent a9777203d0
commit d405eafb90
281 changed files with 1818 additions and 1265 deletions

View File

@@ -3,9 +3,9 @@ package cn.bootx.platform.daxpay.admin.controller.channel;
import cn.bootx.platform.common.core.rest.Res;
import cn.bootx.platform.common.core.rest.ResResult;
import cn.bootx.platform.common.core.rest.dto.LabelValue;
import cn.bootx.platform.daxpay.core.channel.alipay.service.AliPayConfigService;
import cn.bootx.platform.daxpay.dto.channel.alipay.AliPayConfigDto;
import cn.bootx.platform.daxpay.param.channel.alipay.AliPayConfigParam;
import cn.bootx.platform.daxpay.service.core.channel.alipay.service.AliPayConfigService;
import cn.bootx.platform.daxpay.service.dto.channel.alipay.AliPayConfigDto;
import cn.bootx.platform.daxpay.service.param.channel.alipay.AliPayConfigParam;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
@@ -28,6 +28,12 @@ public class AlipayConfigController {
private final AliPayConfigService alipayConfigService;
@Operation(summary = "获取配置")
@GetMapping("/getConfig")
public ResResult<AliPayConfigDto> getConfig() {
return Res.ok(alipayConfigService.getConfig().toDto());
}
@Operation(summary = "更新")
@PostMapping("/update")
public ResResult<Void> update(@RequestBody AliPayConfigParam param) {
@@ -35,12 +41,6 @@ public class AlipayConfigController {
return Res.ok();
}
@Operation(summary = "获取配置")
@GetMapping("/getConfig")
public ResResult<AliPayConfigDto> getConfig() {
return Res.ok(alipayConfigService.getConfig().toDto());
}
@Operation(summary = "支付宝支持支付方式")
@GetMapping("/findPayWays")
public ResResult<List<LabelValue>> findPayWays() {

View File

@@ -3,9 +3,9 @@ package cn.bootx.platform.daxpay.admin.controller.channel;
import cn.bootx.platform.common.core.rest.Res;
import cn.bootx.platform.common.core.rest.ResResult;
import cn.bootx.platform.common.core.rest.dto.LabelValue;
import cn.bootx.platform.daxpay.core.channel.wechat.service.WeChatPayConfigService;
import cn.bootx.platform.daxpay.dto.channel.wechat.WeChatPayConfigDto;
import cn.bootx.platform.daxpay.param.channel.wechat.WeChatPayConfigParam;
import cn.bootx.platform.daxpay.service.core.channel.wechat.service.WeChatPayConfigService;
import cn.bootx.platform.daxpay.service.dto.channel.wechat.WeChatPayConfigDto;
import cn.bootx.platform.daxpay.service.param.channel.wechat.WeChatPayConfigParam;
import cn.hutool.core.codec.Base64;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -28,19 +28,18 @@ public class WeChatPayConfigController {
private final WeChatPayConfigService weChatPayConfigService;
@Operation(summary = "更新")
@PostMapping("/update")
public ResResult<Void> update(@RequestBody WeChatPayConfigParam param) {
weChatPayConfigService.update(param);
return Res.ok();
}
@Operation(summary = "获取配置")
@GetMapping("/getConfig")
public ResResult<WeChatPayConfigDto> getConfig() {
return Res.ok(weChatPayConfigService.getConfig().toDto());
}
@Operation(summary = "更新")
@PostMapping("/update")
public ResResult<Void> update(@RequestBody WeChatPayConfigParam param) {
weChatPayConfigService.update(param);
return Res.ok();
}
@Operation(summary = "微信支持支付方式")
@GetMapping("/findPayWays")
public ResResult<List<LabelValue>> findPayWays() {

View File

@@ -0,0 +1,43 @@
package cn.bootx.platform.daxpay.admin.controller.system;
import cn.bootx.platform.common.core.rest.Res;
import cn.bootx.platform.common.core.rest.ResResult;
import cn.bootx.platform.daxpay.service.core.system.service.PayApiConfigService;
import cn.bootx.platform.daxpay.service.dto.system.PayApiConfigDto;
import cn.bootx.platform.daxpay.service.param.system.PayApiConfigParam;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 支付接口配置
* @author xxm
* @since 2024/1/2
*/
@Tag(name = "支付接口配置")
@RestController
@RequestMapping("/pay/api/config")
@RequiredArgsConstructor
public class PayApiConfigController {
private final PayApiConfigService payApiConfigService;
@Operation(summary = "根据ID获取")
@GetMapping("/findById")
public ResResult<PayApiConfigDto> findById(Long id){
return Res.ok(payApiConfigService.findById(id));
}
@Operation(summary = "获取全部")
@GetMapping("/findAll")
public ResResult<List<PayApiConfigDto>> findAll(){
return Res.ok(payApiConfigService.findAll());
}
@Operation(summary = "更新")
@PostMapping("/update")
public ResResult<Void> update(@RequestBody PayApiConfigParam param){
payApiConfigService.update(param);
return Res.ok();
}
}

View File

@@ -0,0 +1,37 @@
package cn.bootx.platform.daxpay.admin.controller.system;
import cn.bootx.platform.common.core.rest.Res;
import cn.bootx.platform.common.core.rest.ResResult;
import cn.bootx.platform.daxpay.service.core.system.service.PlatformConfigService;
import cn.bootx.platform.daxpay.service.dto.system.PlatformConfigDto;
import cn.bootx.platform.daxpay.service.param.system.PlatformConfigParam;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
/**
* 平台配置项
* @author xxm
* @since 2024/1/2
*/
@Tag(name = "平台配置项")
@RestController
@RequestMapping("/platform/config")
@RequiredArgsConstructor
public class PlatformConfigController {
private final PlatformConfigService platformConfigService;
@Operation(summary = "平台配置项")
@GetMapping("/getConfig")
public ResResult<PlatformConfigDto> getConfig(){
return Res.ok(platformConfigService.getConfig().toDto());
}
@Operation(summary = "更新平台配置项")
@PostMapping("/update")
public ResResult<Void> update(@RequestBody PlatformConfigParam param){
platformConfigService.update(param);
return Res.ok();
}
}

View File

@@ -0,0 +1,37 @@
package cn.bootx.platform.daxpay.admin.controller.system;
import cn.bootx.platform.common.core.rest.Res;
import cn.bootx.platform.common.core.rest.ResResult;
import cn.bootx.platform.daxpay.service.core.system.service.WechatNoticeConfigService;
import cn.bootx.platform.daxpay.service.dto.system.WechatNoticeConfigDto;
import cn.bootx.platform.daxpay.service.param.system.WechatNoticeConfigParam;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
/**
* 微信消息通知配置
* @author xxm
* @since 2024/1/2
*/
@Tag(name = "微信消息通知配置")
@RestController
@RequestMapping("/wx/notice")
@RequiredArgsConstructor
public class WechatNoticeConfigController {
private final WechatNoticeConfigService configService;
@Operation(summary = "获取微信消息通知配置")
@GetMapping("/getConfig")
public ResResult<WechatNoticeConfigDto> getConfig() {
return Res.ok(configService.getConfig().toDto());
}
@Operation(summary = "更新微信消息通知配置")
@PostMapping("/update")
public ResResult<Void> update(@RequestBody WechatNoticeConfigParam param) {
configService.update(param);
return Res.ok();
}
}

View File

@@ -1 +1 @@
cn.bootx.platform.daxpay.DaxPaySingleAdminApp
cn.bootx.platform.daxpay.admin.DaxPaySingleAdminApp

View File

@@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.bootx.platform</groupId>
<artifactId>dax-pay</artifactId>
<artifactId>daxpay-single</artifactId>
<version>2.0.0</version>
</parent>

View File

@@ -39,7 +39,7 @@ public enum PayChannelEnum {
return Arrays.stream(values())
.filter(e -> Objects.equals(code, e.getCode()))
.findFirst()
.orElseThrow(() -> new PayFailureException("不存在的支付"));
.orElseThrow(() -> new PayFailureException("不存在的支付"));
}
/** 支付宝 UA */

View File

@@ -17,7 +17,6 @@ public enum PayStatusEnum {
FAIL("fail","失败"),
CANCEL("cancel","支付取消"),
CLOSE("close","支付关闭"),
/** 超时取消 */
TIMEOUT("timeout","超时取消"),
PARTIAL_REFUND("partial_refund","部分退款"),
REFUNDED("refunded","全部退款");

View File

@@ -23,6 +23,10 @@ public enum PaySyncStatusEnum {
CLOSED("closed", "已关闭"),
REFUND("refund", "已退款"),
NOT_FOUND("not_found", "未查询到订单"),
/** 例如支付宝支付后, 客户未进行操作, 将不会创建出订单, 所以同步会返回未查询到订单 */
IGNORE("ignore", "忽略"),
/** 本地订单到了超时时间, 但是网关和本地都未关闭, 需要触发关闭相关处理 */
TIMEOUT("timeout", "超时未关闭"),
FAIL("fail", "查询失败");
/** 编码 */

View File

@@ -1,7 +1,7 @@
package cn.bootx.platform.daxpay.param.pay;
import cn.bootx.platform.daxpay.serializer.TimestampToLocalDateTimeDeserializer;
import cn.bootx.platform.daxpay.util.PayUtil;
import cn.bootx.platform.daxpay.service.util.PayUtil;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

View File

@@ -25,8 +25,8 @@ public class PayWayParam {
/**
* @see PayChannelEnum#getCode()
*/
@Schema(description = "支付道编码")
@NotBlank(message = "支付道编码不可为空")
@Schema(description = "支付道编码")
@NotBlank(message = "支付道编码不可为空")
private String channel;
/**

View File

@@ -12,6 +12,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
@@ -47,8 +48,8 @@ public class SimplePayParam extends PayCommonParam{
/**
* @see PayChannelEnum#getCode()
*/
@Schema(description = "支付道编码")
@NotBlank(message = "支付道编码不可为空")
@Schema(description = "支付道编码")
@NotBlank(message = "支付道编码不可为空")
private String payChannel;
/**
@@ -60,6 +61,7 @@ public class SimplePayParam extends PayCommonParam{
@Schema(description = "支付金额")
@NotNull(message = "支付金额不可为空")
@Min(1)
private Integer amount;
/**

View File

@@ -1,7 +1,9 @@
package cn.bootx.platform.daxpay.result.pay;
import cn.bootx.platform.common.core.code.CommonCode;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.slf4j.MDC;
/**
* 支付通用返回参数
@@ -9,11 +11,11 @@ import lombok.Data;
* @since 2023/12/25
*/
@Data
@Schema(title = "")
@Schema(title = "支付通用返回参数")
public class PayCommonResult {
@Schema(description = "请求ID")
private String reqId;
private String reqId = MDC.get(CommonCode.TRACE_ID);
@Schema(description = "商户扩展参数,回调时会原样返回")
private String extraParam;

View File

@@ -18,12 +18,12 @@ public class PayResult {
private Long paymentId;
@Schema(description = "是否是异步支付")
private boolean asyncPayMode;
private boolean asyncPay;
/**
* @see PayChannelEnum#ASYNC_TYPE_CODE
*/
@Schema(description = "异步支付")
@Schema(description = "异步支付")
private String asyncPayChannel;

View File

@@ -1,7 +1,7 @@
package cn.bootx.platform.daxpay.serializer;
import cn.bootx.platform.common.core.util.LocalDateTimeUtil;
import com.fasterxml.jackson.core.JacksonException;
import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
@@ -17,8 +17,12 @@ import java.time.LocalDateTime;
public class TimestampToLocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException {
long timestamp = p.getLongValue();
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String value = p.getValueAsString();
if (StrUtil.isBlank(value)){
return null;
}
long timestamp = Long.parseLong(value);
return LocalDateTimeUtil.of(timestamp);
}
}

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.util;
package cn.bootx.platform.daxpay.service.util;
import cn.bootx.platform.daxpay.result.DaxResult;
import lombok.experimental.UtilityClass;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.util;
package cn.bootx.platform.daxpay.service.util;
import cn.bootx.platform.common.core.util.LocalDateTimeUtil;
import cn.bootx.platform.daxpay.code.PayChannelEnum;
@@ -92,16 +92,16 @@ public class PayUtil {
/**
* 检查异步支付方式
*/
public void validationAsyncPayMode(PayParam payParam) {
public void validationAsyncPay(PayParam payParam) {
// 组合支付时只允许有一个异步支付方式
List<PayWayParam> payModeList = payParam.getPayWays();
long asyncPayModeCount = payModeList.stream()
long asyncPayCount = payModeList.stream()
.map(PayWayParam::getChannel)
.map(PayChannelEnum::findByCode)
.filter(PayChannelEnum.ASYNC_TYPE::contains)
.count();
if (asyncPayModeCount > 1) {
if (asyncPayCount > 1) {
throw new PayFailureException("组合支付时只允许有一个异步支付方式");
}
}

View File

@@ -1,8 +1,8 @@
package cn.bootx.platform.daxpay.gateway.controller;
import cn.bootx.platform.common.core.annotation.IgnoreAuth;
import cn.bootx.platform.daxpay.core.channel.alipay.service.AliPayCallbackService;
import cn.bootx.platform.daxpay.core.channel.wechat.service.WeChatPayCallbackService;
import cn.bootx.platform.daxpay.service.core.channel.alipay.service.AliPayCallbackService;
import cn.bootx.platform.daxpay.service.core.channel.wechat.service.WeChatPayCallbackService;
import com.ijpay.alipay.AliPayApi;
import com.ijpay.core.kit.HttpKit;
import com.ijpay.core.kit.WxPayKit;

View File

@@ -1,17 +1,18 @@
package cn.bootx.platform.daxpay.gateway.controller;
import cn.bootx.platform.common.core.annotation.CountTime;
import cn.bootx.platform.common.core.annotation.IgnoreAuth;
import cn.bootx.platform.daxpay.annotation.PaymentApi;
import cn.bootx.platform.daxpay.core.payment.close.service.PayCloseService;
import cn.bootx.platform.daxpay.core.payment.pay.service.PayService;
import cn.bootx.platform.daxpay.core.payment.refund.service.PayRefundService;
import cn.bootx.platform.daxpay.core.payment.sync.service.PaySyncService;
import cn.bootx.platform.daxpay.service.annotation.PaymentApi;
import cn.bootx.platform.daxpay.service.core.payment.close.service.PayCloseService;
import cn.bootx.platform.daxpay.service.core.payment.pay.service.PayService;
import cn.bootx.platform.daxpay.service.core.payment.refund.service.PayRefundService;
import cn.bootx.platform.daxpay.service.core.payment.sync.service.PaySyncService;
import cn.bootx.platform.daxpay.param.pay.*;
import cn.bootx.platform.daxpay.result.DaxResult;
import cn.bootx.platform.daxpay.result.pay.PayResult;
import cn.bootx.platform.daxpay.result.pay.PaySyncResult;
import cn.bootx.platform.daxpay.result.pay.RefundResult;
import cn.bootx.platform.daxpay.util.DaxRes;
import cn.bootx.platform.daxpay.service.util.DaxRes;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
@@ -36,6 +37,8 @@ public class UniPayController {
private final PaySyncService paySyncService;
private final PayCloseService payCloseService;
@CountTime
@PaymentApi("pay")
@Operation(summary = "统一下单")
@PostMapping("/pay")
@@ -43,6 +46,7 @@ public class UniPayController {
return DaxRes.ok(payService.pay(payParam));
}
@CountTime
@PaymentApi("simplePay")
@Operation(summary = "简单下单")
@PostMapping("/simplePay")
@@ -50,6 +54,7 @@ public class UniPayController {
return DaxRes.ok(payService.simplePay(payParam));
}
@CountTime
@PaymentApi("close")
@Operation(summary = "订单关闭")
@PostMapping("/close")
@@ -58,6 +63,7 @@ public class UniPayController {
return DaxRes.ok();
}
@CountTime
@PaymentApi("refund")
@Operation(summary = "统一退款")
@PostMapping("/refund")
@@ -65,6 +71,7 @@ public class UniPayController {
return DaxRes.ok(payRefundService.refund(param));
}
@CountTime
@PaymentApi("simpleRefund")
@Operation(summary = "简单退款")
@PostMapping("/simpleRefund")
@@ -72,13 +79,15 @@ public class UniPayController {
return DaxRes.ok(payRefundService.simpleRefund(param));
}
@CountTime
@PaymentApi("syncPay")
@Operation(summary = "支付状态同步")
@PostMapping("/syncPay")
public DaxResult<PaySyncResult> syncPay(PaySyncParam param){
public DaxResult<PaySyncResult> syncPay(@RequestBody PaySyncParam param){
return DaxRes.ok(paySyncService.sync(param));
}
@CountTime
@PaymentApi("syncRefund")
@Operation(summary = "退款状态同步")
@PostMapping("/syncRefund")

View File

@@ -1 +1 @@
cn.bootx.platform.daxpay.DaxpaySingleGatewayApp
cn.bootx.platform.daxpay.gateway.DaxpaySingleGatewayApp

View File

@@ -36,7 +36,7 @@
<!-- 自动建表 -->
<dependency>
<groupId>cn.bootx</groupId>
<artifactId>table-modify-mysql</artifactId>
<artifactId>table-modify-mysql-boot-starter</artifactId>
<version>${table-modify.version}</version>
</dependency>
<!-- redis客户端封装 -->

View File

@@ -1,26 +0,0 @@
package cn.bootx.platform.daxpay.core.channel.alipay.convert;
import cn.bootx.platform.daxpay.core.channel.alipay.entity.AliPayConfig;
import cn.bootx.platform.daxpay.dto.channel.alipay.AliPayConfigDto;
import cn.bootx.platform.daxpay.param.channel.alipay.AliPayConfigParam;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 支付宝转换
*
* @author xxm
* @since 2021/7/5
*/
@Mapper
public interface AlipayConvert {
AlipayConvert CONVERT = Mappers.getMapper(AlipayConvert.class);
AliPayConfig convert(AliPayConfigDto in);
AliPayConfig convert(AliPayConfigParam in);
AliPayConfigDto convert(AliPayConfig in);
}

View File

@@ -1,27 +0,0 @@
package cn.bootx.platform.daxpay.core.channel.voucher.convert;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.Voucher;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.VoucherLog;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.VoucherPayOrder;
import cn.bootx.platform.daxpay.dto.channel.voucher.VoucherDto;
import cn.bootx.platform.daxpay.dto.channel.voucher.VoucherLogDto;
import cn.bootx.platform.daxpay.dto.channel.voucher.VoucherPayOrderDto;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* @author xxm
* @since 2022/3/14
*/
@Mapper
public interface VoucherConvert {
VoucherConvert CONVERT = Mappers.getMapper(VoucherConvert.class);
VoucherDto convert(Voucher in);
VoucherLogDto convert(VoucherLog in);
VoucherPayOrderDto convert(VoucherPayOrder in);
}

View File

@@ -1,36 +0,0 @@
package cn.bootx.platform.daxpay.core.channel.wallet.convert;
import cn.bootx.platform.daxpay.core.channel.wallet.entity.Wallet;
import cn.bootx.platform.daxpay.core.channel.wallet.entity.WalletConfig;
import cn.bootx.platform.daxpay.core.channel.wallet.entity.WalletLog;
import cn.bootx.platform.daxpay.core.channel.wallet.entity.WalletPayOrder;
import cn.bootx.platform.daxpay.dto.channel.wallet.WalletConfigDto;
import cn.bootx.platform.daxpay.dto.channel.wallet.WalletDto;
import cn.bootx.platform.daxpay.dto.channel.wallet.WalletLogDto;
import cn.bootx.platform.daxpay.dto.channel.wallet.WalletPayOrderDto;
import cn.bootx.platform.daxpay.param.channel.wechat.WalletConfigParam;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 转换
*
* @author xxm
* @since 2021/8/20
*/
@Mapper
public interface WalletConvert {
WalletConvert CONVERT = Mappers.getMapper(WalletConvert.class);
WalletDto convert(Wallet in);
WalletPayOrderDto convert(WalletPayOrder in);
WalletLogDto convert(WalletLog in);
WalletConfigDto convert(WalletConfig in);
WalletConfig convert(WalletConfigParam in);
}

View File

@@ -1,30 +0,0 @@
package cn.bootx.platform.daxpay.core.channel.wechat.convert;
import cn.bootx.platform.daxpay.core.channel.wechat.entity.WeChatPayConfig;
import cn.bootx.platform.daxpay.core.channel.wechat.entity.WeChatPayOrder;
import cn.bootx.platform.daxpay.dto.channel.wechat.WeChatPayConfigDto;
import cn.bootx.platform.daxpay.dto.channel.wechat.WeChatPayOrderDto;
import cn.bootx.platform.daxpay.param.channel.wechat.WeChatPayConfigParam;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 微信转换类
*
* @author xxm
* @since 2021/6/21
*/
@Mapper
public interface WeChatConvert {
WeChatConvert CONVERT = Mappers.getMapper(WeChatConvert.class);
WeChatPayConfig convert(WeChatPayConfigParam in);
WeChatPayConfigDto convert(WeChatPayConfig in);
WeChatPayOrderDto convert(WeChatPayOrder in);
WeChatPayOrder convert(WeChatPayOrderDto in);
}

View File

@@ -1,18 +0,0 @@
package cn.bootx.platform.daxpay.core.openapi.convert;
import cn.bootx.platform.daxpay.core.openapi.entity.PayOpenApi;
import cn.bootx.platform.daxpay.param.openapi.PayOpenApiInfoParam;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 开放接口信息转换
* @author xxm
* @since 2023/12/22
*/
@Mapper
public interface PayOpenApiInfoConvert {
PayOpenApiInfoConvert CONVERT = Mappers.getMapper(PayOpenApiInfoConvert.class);
PayOpenApi convert(PayOpenApiInfoParam in);
}

View File

@@ -1,35 +0,0 @@
package cn.bootx.platform.daxpay.core.openapi.dao;
import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
import cn.bootx.platform.daxpay.core.openapi.entity.PayOpenApi;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
* 支付开放接口管理
* @author xxm
* @since 2023/12/22
*/
@Slf4j
@Repository
@RequiredArgsConstructor
public class PayOpenApiManager extends BaseManager<PayOpenApiMapper, PayOpenApi> {
/**
* 根据code查询
*/
public Optional<PayOpenApi> findByCode(String code){
return findByField(PayOpenApi::getCode,code);
}
/**
* 根据api查询
*/
public Optional<PayOpenApi> findByApi(String api){
return findByField(PayOpenApi::getApi,api);
}
}

View File

@@ -1,14 +0,0 @@
package cn.bootx.platform.daxpay.core.openapi.dao;
import cn.bootx.platform.daxpay.core.openapi.entity.PayOpenApi;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 开放接口信息
* @author xxm
* @since 2023/12/22
*/
@Mapper
public interface PayOpenApiMapper extends BaseMapper<PayOpenApi> {
}

View File

@@ -1,60 +0,0 @@
package cn.bootx.platform.daxpay.core.openapi.service;
import cn.bootx.platform.common.core.rest.param.PageParam;
import cn.bootx.platform.daxpay.common.context.ApiInfoLocal;
import cn.bootx.platform.daxpay.common.local.PaymentContextLocal;
import cn.bootx.platform.daxpay.core.openapi.dao.PayOpenApiManager;
import cn.bootx.platform.daxpay.core.openapi.entity.PayOpenApi;
import cn.bootx.platform.daxpay.param.openapi.PayOpenApiInfoParam;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* 开放接口信息
* @author xxm
* @since 2023/12/22
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class PayOpenApiService {
private final PayOpenApiManager openApiInfoManager;
/**
* 编辑
*/
public void update(PayOpenApiInfoParam param){
}
/**
* 分页
*/
public void page(PageParam pageParam){
}
/**
* 根据ID获取
*/
public void findById(Long id){
}
/**
* 初始化接口上下文信息
*/
public void initApiInfo(PayOpenApi api){
// 记录支付接口信息
ApiInfoLocal apiInfoLocal = PaymentContextLocal.get().getApiInfo();
apiInfoLocal.setApiCode(api.getCode())
.setReqSign(api.isReqSign())
.setResSign(api.isResSign())
.setNotice(api.isNotice())
.setNoticeSign(api.isNoticeSign())
.setRecord(api.isRecord());
}
}

View File

@@ -1,67 +0,0 @@
package cn.bootx.platform.daxpay.core.payment.repair.strategy;
import cn.bootx.platform.daxpay.code.PayRepairSourceEnum;
import cn.bootx.platform.daxpay.core.channel.wechat.entity.WeChatPayConfig;
import cn.bootx.platform.daxpay.core.channel.wechat.service.WeChatPayCloseService;
import cn.bootx.platform.daxpay.core.channel.wechat.service.WeChatPayConfigService;
import cn.bootx.platform.daxpay.core.channel.wechat.service.WeChatPayOrderService;
import cn.bootx.platform.daxpay.func.AbsPayRepairStrategy;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE;
/**
*
* @author xxm
* @since 2023/12/29
*/
@Slf4j
@Scope(SCOPE_PROTOTYPE)
@Service
@RequiredArgsConstructor
public class WeChatPayRepairStrategy extends AbsPayRepairStrategy {
private final WeChatPayCloseService weChatPayCloseService;
private final WeChatPayOrderService weChatPayOrderService;
private final WeChatPayConfigService weChatPayConfigService;
private WeChatPayConfig weChatPayConfig;
/**
* 修复前处理
*/
@Override
public void doBeforeHandler() {
this.weChatPayConfig = weChatPayConfigService.getConfig();
}
/**
* 支付成功处理
*/
@Override
public void doSuccessHandler() {
weChatPayOrderService.updateAsyncSuccess();
}
/**
* 退款处理 todo 需要结合退款同步功能进行协同实现
*/
@Override
public void doRefundHandler() {
}
/**
* 取消支付
*/
@Override
public void doCloseHandler() {
// 如果非同步出的订单取消状态, 则调用支付网关关闭订单
if (this.getRepairSource() != PayRepairSourceEnum.SYNC){
weChatPayCloseService.close(this.getOrder(),this.weChatPayConfig);
}
weChatPayOrderService.updateClose(this.getOrder().getId());
}
}

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay;
package cn.bootx.platform.daxpay.service;
import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.annotation.MapperScan;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.annotation;
package cn.bootx.platform.daxpay.service.annotation;
import java.lang.annotation.*;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.code;
package cn.bootx.platform.daxpay.service.code;
/**
* 支付宝支付参数

View File

@@ -1,5 +1,6 @@
package cn.bootx.platform.daxpay.code;
package cn.bootx.platform.daxpay.service.code;
import cn.bootx.platform.daxpay.code.PayWayEnum;
import cn.bootx.platform.daxpay.exception.pay.PayFailureException;
import lombok.experimental.UtilityClass;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.code;
package cn.bootx.platform.daxpay.service.code;
import lombok.AllArgsConstructor;
import lombok.Getter;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.code;
package cn.bootx.platform.daxpay.service.code;
import lombok.AllArgsConstructor;
import lombok.Getter;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.code;
package cn.bootx.platform.daxpay.service.code;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -14,6 +14,7 @@ public enum PayRepairTypeEnum {
SUCCESS("success","成功"),
CLOSE("close","关闭"),
TIMEOUT("timeout","超时关闭"),
REFUND("refund","退款");
private final String code;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.code;
package cn.bootx.platform.daxpay.service.code;
/**
* 支付方式扩展字段

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.code;
package cn.bootx.platform.daxpay.service.code;
/**
* 储值卡常量

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.code;
package cn.bootx.platform.daxpay.service.code;
/**
* 钱包涉及到的常量

View File

@@ -1,5 +1,6 @@
package cn.bootx.platform.daxpay.code;
package cn.bootx.platform.daxpay.service.code;
import cn.bootx.platform.daxpay.code.PayWayEnum;
import cn.bootx.platform.daxpay.exception.pay.PayFailureException;
import lombok.experimental.UtilityClass;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.common.context;
package cn.bootx.platform.daxpay.service.common.context;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.common.context;
package cn.bootx.platform.daxpay.service.common.context;
import cn.bootx.platform.daxpay.code.PayWayEnum;
import lombok.Data;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.common.context;
package cn.bootx.platform.daxpay.service.common.context;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.common.context;
package cn.bootx.platform.daxpay.service.common.context;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.common.context;
package cn.bootx.platform.daxpay.service.common.context;
import lombok.Getter;
import lombok.experimental.Accessors;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.common.context;
package cn.bootx.platform.daxpay.service.common.context;
import cn.bootx.platform.daxpay.code.PaySignTypeEnum;
import lombok.Data;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.common.context;
package cn.bootx.platform.daxpay.service.common.context;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.common.context;
package cn.bootx.platform.daxpay.service.common.context;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.common.entity;
package cn.bootx.platform.daxpay.service.common.entity;
import cn.bootx.platform.daxpay.code.PayStatusEnum;
import cn.bootx.table.modify.annotation.DbColumn;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.common.entity;
package cn.bootx.platform.daxpay.service.common.entity;
import cn.bootx.platform.daxpay.code.PayChannelEnum;
import lombok.Data;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.common.exception;
package cn.bootx.platform.daxpay.service.common.exception;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

View File

@@ -1,6 +1,6 @@
package cn.bootx.platform.daxpay.common.filter;
package cn.bootx.platform.daxpay.service.common.filter;
import cn.bootx.platform.daxpay.common.local.PaymentContextLocal;
import cn.bootx.platform.daxpay.service.common.local.PaymentContextLocal;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.core.annotation.Order;

View File

@@ -1,6 +1,6 @@
package cn.bootx.platform.daxpay.common.local;
package cn.bootx.platform.daxpay.service.common.local;
import cn.bootx.platform.daxpay.common.context.PaymentContext;
import cn.bootx.platform.daxpay.service.common.context.PaymentContext;
import com.alibaba.ttl.TransmittableThreadLocal;
import lombok.experimental.UtilityClass;

View File

@@ -0,0 +1,23 @@
package cn.bootx.platform.daxpay.service.common.typehandler;
import cn.bootx.platform.common.mybatisplus.handler.JacksonTypeReferenceHandler;
import cn.bootx.platform.daxpay.service.common.entity.OrderRefundableInfo;
import com.fasterxml.jackson.core.type.TypeReference;
import java.util.List;
/**
* 支付订单可退款信息对应的MP字段处理器
* @author xxm
* @since 2024/1/3
*/
public class RefundableInfoTypeHandler extends JacksonTypeReferenceHandler<List<OrderRefundableInfo>> {
/**
* 返回要反序列化的类型对象
*/
@Override
public TypeReference<List<OrderRefundableInfo>> getTypeReference() {
return new TypeReference<List<OrderRefundableInfo>>() {};
}
}

View File

@@ -0,0 +1,29 @@
package cn.bootx.platform.daxpay.service.core.channel.alipay.convert;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayConfig;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayOrder;
import cn.bootx.platform.daxpay.service.dto.channel.alipay.AliPayConfigDto;
import cn.bootx.platform.daxpay.service.dto.channel.alipay.AliPaymentDto;
import cn.bootx.platform.daxpay.service.param.channel.alipay.AliPayConfigParam;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 支付宝转换
*
* @author xxm
* @since 2021/7/5
*/
@Mapper
public interface AlipayConvert {
AlipayConvert CONVERT = Mappers.getMapper(AlipayConvert.class);
AliPayConfig convert(AliPayConfigDto in);
AliPayConfig convert(AliPayConfigParam in);
AliPayConfigDto convert(AliPayConfig in);
AliPaymentDto convert(AliPayOrder aliPayOrder);
}

View File

@@ -1,7 +1,7 @@
package cn.bootx.platform.daxpay.core.channel.alipay.dao;
package cn.bootx.platform.daxpay.service.core.channel.alipay.dao;
import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
import cn.bootx.platform.daxpay.core.channel.alipay.entity.AliPayConfig;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayConfig;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

View File

@@ -1,6 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.alipay.dao;
package cn.bootx.platform.daxpay.service.core.channel.alipay.dao;
import cn.bootx.platform.daxpay.core.channel.alipay.entity.AliPayConfig;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayConfig;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

View File

@@ -1,8 +1,8 @@
package cn.bootx.platform.daxpay.core.channel.alipay.dao;
package cn.bootx.platform.daxpay.service.core.channel.alipay.dao;
import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
import cn.bootx.platform.daxpay.common.entity.BasePayOrder;
import cn.bootx.platform.daxpay.core.channel.alipay.entity.AliPayOrder;
import cn.bootx.platform.daxpay.service.common.entity.BasePayOrder;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayOrder;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

View File

@@ -1,6 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.alipay.dao;
package cn.bootx.platform.daxpay.service.core.channel.alipay.dao;
import cn.bootx.platform.daxpay.core.channel.alipay.entity.AliPayOrder;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

View File

@@ -1,14 +1,13 @@
package cn.bootx.platform.daxpay.core.channel.alipay.entity;
package cn.bootx.platform.daxpay.service.core.channel.alipay.entity;
import cn.bootx.platform.common.core.annotation.BigField;
import cn.bootx.platform.common.core.annotation.EncryptionField;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
import cn.bootx.platform.common.mybatisplus.handler.StringListTypeHandler;
import cn.bootx.platform.daxpay.code.AliPayCode;
import cn.bootx.platform.daxpay.core.channel.alipay.convert.AlipayConvert;
import cn.bootx.platform.daxpay.dto.channel.alipay.AliPayConfigDto;
import cn.bootx.platform.daxpay.param.channel.alipay.AliPayConfigParam;
import cn.bootx.platform.daxpay.service.code.AliPayCode;
import cn.bootx.platform.daxpay.service.core.channel.alipay.convert.AlipayConvert;
import cn.bootx.platform.daxpay.service.dto.channel.alipay.AliPayConfigDto;
import cn.bootx.table.modify.annotation.DbColumn;
import cn.bootx.table.modify.annotation.DbTable;
import cn.bootx.table.modify.mysql.annotation.DbMySqlFieldType;
@@ -31,7 +30,7 @@ import java.util.List;
@Data
@Accessors(chain = true)
@DbTable(comment = "支付宝支付配置")
@TableName("pay_alipay_config")
@TableName(value = "pay_alipay_config",autoResultMap = true)
public class AliPayConfig extends MpBaseEntity implements EntityBaseFunction<AliPayConfigDto> {
/** 支付宝商户appId */
@@ -43,7 +42,7 @@ public class AliPayConfig extends MpBaseEntity implements EntityBaseFunction<Ali
private String notifyUrl;
/** 请求网关地址 */
@DbColumn(comment = "")
@DbColumn(comment = "请求网关地址")
private String serverUrl;
/**
@@ -98,6 +97,7 @@ public class AliPayConfig extends MpBaseEntity implements EntityBaseFunction<Ali
/** 可用支付方式 */
@DbColumn(comment = "可用支付方式")
@DbMySqlFieldType(MySqlFieldTypeEnum.VARCHAR)
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> payWays;
@@ -113,8 +113,4 @@ public class AliPayConfig extends MpBaseEntity implements EntityBaseFunction<Ali
return AlipayConvert.CONVERT.convert(this);
}
public static AliPayConfig init(AliPayConfigParam in) {
return AlipayConvert.CONVERT.convert(in);
}
}

View File

@@ -1,9 +1,10 @@
package cn.bootx.platform.daxpay.core.channel.alipay.entity;
package cn.bootx.platform.daxpay.service.core.channel.alipay.entity;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
import cn.bootx.platform.daxpay.common.entity.BasePayOrder;
import cn.bootx.platform.daxpay.dto.channel.alipay.AliPaymentDto;
import cn.hutool.core.bean.BeanUtil;
import cn.bootx.platform.daxpay.service.common.entity.BasePayOrder;
import cn.bootx.platform.daxpay.service.core.channel.alipay.convert.AlipayConvert;
import cn.bootx.platform.daxpay.service.dto.channel.alipay.AliPaymentDto;
import cn.bootx.table.modify.annotation.DbTable;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -18,6 +19,7 @@ import lombok.experimental.Accessors;
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@DbTable(comment = "支付宝支付记录")
@TableName("pay_ali_payment")
public class AliPayOrder extends BasePayOrder implements EntityBaseFunction<AliPaymentDto> {
@@ -29,9 +31,7 @@ public class AliPayOrder extends BasePayOrder implements EntityBaseFunction<AliP
@Override
public AliPaymentDto toDto() {
AliPaymentDto dto = new AliPaymentDto();
BeanUtil.copyProperties(this, dto);
return dto;
return AlipayConvert.CONVERT.convert(this);
}
}

View File

@@ -1,15 +1,15 @@
package cn.bootx.platform.daxpay.core.channel.alipay.service;
package cn.bootx.platform.daxpay.service.core.channel.alipay.service;
import cn.bootx.platform.common.core.util.CertUtil;
import cn.bootx.platform.common.redis.RedisClient;
import cn.bootx.platform.daxpay.code.AliPayCode;
import cn.bootx.platform.daxpay.service.code.AliPayCode;
import cn.bootx.platform.daxpay.code.PayChannelEnum;
import cn.bootx.platform.daxpay.code.PayStatusEnum;
import cn.bootx.platform.daxpay.common.local.PaymentContextLocal;
import cn.bootx.platform.daxpay.core.record.callback.dao.CallbackRecordManager;
import cn.bootx.platform.daxpay.core.channel.alipay.entity.AliPayConfig;
import cn.bootx.platform.daxpay.core.payment.callback.service.PayCallbackService;
import cn.bootx.platform.daxpay.func.AbsPayCallbackStrategy;
import cn.bootx.platform.daxpay.service.common.local.PaymentContextLocal;
import cn.bootx.platform.daxpay.service.core.record.callback.dao.CallbackRecordManager;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayConfig;
import cn.bootx.platform.daxpay.service.core.payment.callback.service.PayCallbackService;
import cn.bootx.platform.daxpay.service.func.AbsPayCallbackStrategy;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;

View File

@@ -1,8 +1,8 @@
package cn.bootx.platform.daxpay.core.channel.alipay.service;
package cn.bootx.platform.daxpay.service.core.channel.alipay.service;
import cn.bootx.platform.common.spring.exception.RetryableException;
import cn.bootx.platform.daxpay.code.AliPayCode;
import cn.bootx.platform.daxpay.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.service.code.AliPayCode;
import cn.bootx.platform.daxpay.service.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.exception.pay.PayFailureException;
import com.alipay.api.AlipayApiException;
import com.alipay.api.domain.AlipayTradeCloseModel;

View File

@@ -1,13 +1,13 @@
package cn.bootx.platform.daxpay.core.channel.alipay.service;
package cn.bootx.platform.daxpay.service.core.channel.alipay.service;
import cn.bootx.platform.common.core.exception.BizException;
import cn.bootx.platform.common.core.exception.DataNotExistException;
import cn.bootx.platform.common.core.rest.dto.LabelValue;
import cn.bootx.platform.daxpay.code.AliPayCode;
import cn.bootx.platform.daxpay.code.AliPayWay;
import cn.bootx.platform.daxpay.core.channel.alipay.dao.AliPayConfigManager;
import cn.bootx.platform.daxpay.core.channel.alipay.entity.AliPayConfig;
import cn.bootx.platform.daxpay.param.channel.alipay.AliPayConfigParam;
import cn.bootx.platform.daxpay.service.code.AliPayCode;
import cn.bootx.platform.daxpay.service.code.AliPayWay;
import cn.bootx.platform.daxpay.service.core.channel.alipay.dao.AliPayConfigManager;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayConfig;
import cn.bootx.platform.daxpay.service.param.channel.alipay.AliPayConfigParam;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.util.CharsetUtil;

View File

@@ -1,13 +1,13 @@
package cn.bootx.platform.daxpay.core.channel.alipay.service;
package cn.bootx.platform.daxpay.service.core.channel.alipay.service;
import cn.bootx.platform.daxpay.code.PayChannelEnum;
import cn.bootx.platform.daxpay.code.PayStatusEnum;
import cn.bootx.platform.daxpay.common.entity.OrderRefundableInfo;
import cn.bootx.platform.daxpay.common.local.PaymentContextLocal;
import cn.bootx.platform.daxpay.core.channel.alipay.dao.AliPayOrderManager;
import cn.bootx.platform.daxpay.core.channel.alipay.entity.AliPayOrder;
import cn.bootx.platform.daxpay.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.core.record.pay.service.PayOrderChannelService;
import cn.bootx.platform.daxpay.service.common.entity.OrderRefundableInfo;
import cn.bootx.platform.daxpay.service.common.local.PaymentContextLocal;
import cn.bootx.platform.daxpay.service.core.channel.alipay.dao.AliPayOrderManager;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayOrder;
import cn.bootx.platform.daxpay.service.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.service.core.record.pay.service.PayOrderChannelService;
import cn.bootx.platform.daxpay.param.pay.PayWayParam;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -41,7 +41,7 @@ public class AliPayOrderService {
*/
public void updatePaySuccess(PayOrder payOrder, PayWayParam payWayParam) {
// 更新支付宝异步支付类型信息
payOrder.setAsyncPay(true).setAsyncPayChannel(PayChannelEnum.ALI.getCode());
payOrder.setAsyncPay(true).setAsyncChannel(PayChannelEnum.ALI.getCode());
payOrderChannelService.updateChannel(payWayParam,payOrder);
// 更新支付宝可退款类型信息

View File

@@ -1,9 +1,9 @@
package cn.bootx.platform.daxpay.core.channel.alipay.service;
package cn.bootx.platform.daxpay.service.core.channel.alipay.service;
import cn.bootx.platform.daxpay.code.AliPayCode;
import cn.bootx.platform.daxpay.common.context.AsyncRefundLocal;
import cn.bootx.platform.daxpay.common.local.PaymentContextLocal;
import cn.bootx.platform.daxpay.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.service.code.AliPayCode;
import cn.bootx.platform.daxpay.service.common.context.AsyncRefundLocal;
import cn.bootx.platform.daxpay.service.common.local.PaymentContextLocal;
import cn.bootx.platform.daxpay.service.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.exception.pay.PayFailureException;
import cn.hutool.core.util.IdUtil;
import com.alipay.api.AlipayApiException;

View File

@@ -1,18 +1,18 @@
package cn.bootx.platform.daxpay.core.channel.alipay.service;
package cn.bootx.platform.daxpay.service.core.channel.alipay.service;
import cn.bootx.platform.daxpay.code.AliPayCode;
import cn.bootx.platform.daxpay.code.AliPayWay;
import cn.bootx.platform.daxpay.service.code.AliPayCode;
import cn.bootx.platform.daxpay.service.code.AliPayWay;
import cn.bootx.platform.daxpay.code.PayStatusEnum;
import cn.bootx.platform.daxpay.code.PayWayEnum;
import cn.bootx.platform.daxpay.common.context.AsyncPayLocal;
import cn.bootx.platform.daxpay.common.context.NoticeLocal;
import cn.bootx.platform.daxpay.common.local.PaymentContextLocal;
import cn.bootx.platform.daxpay.core.channel.alipay.entity.AliPayConfig;
import cn.bootx.platform.daxpay.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.service.common.context.AsyncPayLocal;
import cn.bootx.platform.daxpay.service.common.context.NoticeLocal;
import cn.bootx.platform.daxpay.service.common.local.PaymentContextLocal;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayConfig;
import cn.bootx.platform.daxpay.service.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.exception.pay.PayFailureException;
import cn.bootx.platform.daxpay.param.channel.AliPayParam;
import cn.bootx.platform.daxpay.param.pay.PayWayParam;
import cn.bootx.platform.daxpay.util.PayUtil;
import cn.bootx.platform.daxpay.service.util.PayUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.Method;
@@ -31,7 +31,7 @@ import java.time.LocalDateTime;
import java.util.Objects;
import java.util.Optional;
import static cn.bootx.platform.daxpay.code.AliPayCode.QUICK_MSECURITY_PAY;
import static cn.bootx.platform.daxpay.service.code.AliPayCode.QUICK_MSECURITY_PAY;
/**
@@ -50,7 +50,7 @@ public class AliPayService {
*/
public void validation(PayWayParam payWayParam, AliPayConfig alipayConfig) {
if (CollUtil.isNotEmpty(alipayConfig.getPayWays())){
if (CollUtil.isEmpty(alipayConfig.getPayWays())){
throw new PayFailureException("支付宝未配置可用的支付方式");
}
// 发起的支付类型是否在支持的范围内

View File

@@ -1,12 +1,12 @@
package cn.bootx.platform.daxpay.core.channel.alipay.service;
package cn.bootx.platform.daxpay.service.core.channel.alipay.service;
import cn.bootx.platform.daxpay.code.AliPayCode;
import cn.bootx.platform.daxpay.code.PayStatusEnum;
import cn.bootx.platform.daxpay.code.PaySyncStatusEnum;
import cn.bootx.platform.daxpay.common.local.PaymentContextLocal;
import cn.bootx.platform.daxpay.core.channel.alipay.dao.AliPayOrderManager;
import cn.bootx.platform.daxpay.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.core.payment.sync.result.GatewaySyncResult;
import cn.bootx.platform.daxpay.service.code.AliPayCode;
import cn.bootx.platform.daxpay.service.common.local.PaymentContextLocal;
import cn.bootx.platform.daxpay.service.core.channel.alipay.dao.AliPayOrderManager;
import cn.bootx.platform.daxpay.service.core.payment.sync.result.GatewaySyncResult;
import cn.bootx.platform.daxpay.service.core.record.pay.entity.PayOrder;
import cn.hutool.json.JSONUtil;
import com.alipay.api.AlipayApiException;
import com.alipay.api.domain.AlipayTradeQueryModel;
@@ -31,7 +31,7 @@ public class AliPaySyncService {
private final AliPayOrderManager payOrderManager;
/**
* 与支付宝网关同步状态, 退款状态会参加
* 与支付宝网关同步状态, 退款状态会
* 1 远程支付成功
* 2 交易创建等待买家付款
* 3 超时关闭
@@ -39,7 +39,7 @@ public class AliPaySyncService {
* 5 查询失败
*/
public GatewaySyncResult syncPayStatus(PayOrder payOrder) {
GatewaySyncResult syncResult = new GatewaySyncResult().setSyncStatus(PaySyncStatusEnum.FAIL.getCode());
GatewaySyncResult syncResult = new GatewaySyncResult().setSyncStatus(PaySyncStatusEnum.FAIL);
// 查询
try {
AlipayTradeQueryModel queryModel = new AlipayTradeQueryModel();
@@ -51,24 +51,24 @@ public class AliPaySyncService {
// 支付完成
if (Objects.equals(tradeStatus, AliPayCode.PAYMENT_TRADE_SUCCESS) || Objects.equals(tradeStatus, AliPayCode.PAYMENT_TRADE_FINISHED)) {
PaymentContextLocal.get().getAsyncPayInfo().setTradeNo(response.getTradeNo());
return syncResult.setSyncStatus(PaySyncStatusEnum.PAY_SUCCESS.getCode());
return syncResult.setSyncStatus(PaySyncStatusEnum.PAY_SUCCESS);
}
// 待支付
if (Objects.equals(tradeStatus, AliPayCode.PAYMENT_WAIT_BUYER_PAY)) {
return syncResult.setSyncStatus(PaySyncStatusEnum.PAY_WAIT.getCode());
return syncResult.setSyncStatus(PaySyncStatusEnum.PAY_WAIT);
}
// 已关闭或支付完成后全额退款
if (Objects.equals(tradeStatus, AliPayCode.PAYMENT_TRADE_CLOSED)) {
// 根据支付订单区分退款的情况, TODO 后期添加查询退款信息的逻辑
if (Objects.equals(payOrder.getStatus(), PayStatusEnum.REFUNDED.getCode())){
return syncResult.setSyncStatus(PaySyncStatusEnum.REFUND.getCode());
return syncResult.setSyncStatus(PaySyncStatusEnum.REFUND);
} else {
return syncResult.setSyncStatus(PaySyncStatusEnum.CLOSED.getCode());
return syncResult.setSyncStatus(PaySyncStatusEnum.CLOSED);
}
}
// 未找到
// 支付宝支付后, 客户未进行操作将不会创建出订单, 所以交易不存在等于未查询订单
if (Objects.equals(response.getSubCode(), AliPayCode.ACQ_TRADE_NOT_EXIST)) {
return syncResult.setSyncStatus(PaySyncStatusEnum.NOT_FOUND.getCode());
return syncResult.setSyncStatus(PaySyncStatusEnum.IGNORE);
}
}
catch (AlipayApiException e) {

View File

@@ -1,7 +1,7 @@
package cn.bootx.platform.daxpay.core.channel.cash.dao;
package cn.bootx.platform.daxpay.service.core.channel.cash.dao;
import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
import cn.bootx.platform.daxpay.core.channel.cash.entity.CashPayOrder;
import cn.bootx.platform.daxpay.service.core.channel.cash.entity.CashPayOrder;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;

View File

@@ -1,6 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.cash.dao;
package cn.bootx.platform.daxpay.service.core.channel.cash.dao;
import cn.bootx.platform.daxpay.core.channel.cash.entity.CashPayOrder;
import cn.bootx.platform.daxpay.service.core.channel.cash.entity.CashPayOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

View File

@@ -1,6 +1,7 @@
package cn.bootx.platform.daxpay.core.channel.cash.entity;
package cn.bootx.platform.daxpay.service.core.channel.cash.entity;
import cn.bootx.platform.daxpay.common.entity.BasePayOrder;
import cn.bootx.platform.daxpay.service.common.entity.BasePayOrder;
import cn.bootx.table.modify.annotation.DbTable;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -14,6 +15,7 @@ import lombok.experimental.Accessors;
*/
@Data
@EqualsAndHashCode(callSuper = true)
@DbTable(comment = "现金支付记录")
@TableName("pay_cash_payment")
@Accessors(chain = true)
public class CashPayOrder extends BasePayOrder {

View File

@@ -1,9 +1,9 @@
package cn.bootx.platform.daxpay.core.channel.cash.service;
package cn.bootx.platform.daxpay.service.core.channel.cash.service;
import cn.bootx.platform.daxpay.code.PayStatusEnum;
import cn.bootx.platform.daxpay.core.channel.cash.dao.CashPayOrderManager;
import cn.bootx.platform.daxpay.core.channel.cash.entity.CashPayOrder;
import cn.bootx.platform.daxpay.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.service.core.channel.cash.dao.CashPayOrderManager;
import cn.bootx.platform.daxpay.service.core.channel.cash.entity.CashPayOrder;
import cn.bootx.platform.daxpay.service.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.param.pay.PayParam;
import cn.bootx.platform.daxpay.param.pay.PayWayParam;
import lombok.RequiredArgsConstructor;

View File

@@ -1,7 +1,7 @@
package cn.bootx.platform.daxpay.core.channel.union.convert;
package cn.bootx.platform.daxpay.service.core.channel.union.convert;
import cn.bootx.platform.daxpay.core.channel.union.entity.UnionPayConfig;
import cn.bootx.platform.daxpay.dto.channel.union.UnionPayConfigDto;
import cn.bootx.platform.daxpay.service.core.channel.union.entity.UnionPayConfig;
import cn.bootx.platform.daxpay.service.dto.channel.union.UnionPayConfigDto;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

View File

@@ -1,7 +1,7 @@
package cn.bootx.platform.daxpay.core.channel.union.dao;
package cn.bootx.platform.daxpay.service.core.channel.union.dao;
import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
import cn.bootx.platform.daxpay.core.channel.union.entity.UnionPayConfig;
import cn.bootx.platform.daxpay.service.core.channel.union.entity.UnionPayConfig;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;

View File

@@ -1,6 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.union.dao;
package cn.bootx.platform.daxpay.service.core.channel.union.dao;
import cn.bootx.platform.daxpay.core.channel.union.entity.UnionPayConfig;
import cn.bootx.platform.daxpay.service.core.channel.union.entity.UnionPayConfig;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

View File

@@ -1,7 +1,7 @@
package cn.bootx.platform.daxpay.core.channel.union.dao;
package cn.bootx.platform.daxpay.service.core.channel.union.dao;
import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
import cn.bootx.platform.daxpay.core.channel.union.entity.UnionPayOrder;
import cn.bootx.platform.daxpay.service.core.channel.union.entity.UnionPayOrder;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;

View File

@@ -1,6 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.union.dao;
package cn.bootx.platform.daxpay.service.core.channel.union.dao;
import cn.bootx.platform.daxpay.core.channel.union.entity.UnionPayOrder;
import cn.bootx.platform.daxpay.service.core.channel.union.entity.UnionPayOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

View File

@@ -1,9 +1,10 @@
package cn.bootx.platform.daxpay.core.channel.union.entity;
package cn.bootx.platform.daxpay.service.core.channel.union.entity;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
import cn.bootx.platform.daxpay.core.channel.union.convert.UnionPayConvert;
import cn.bootx.platform.daxpay.dto.channel.union.UnionPayConfigDto;
import cn.bootx.platform.daxpay.service.core.channel.union.convert.UnionPayConvert;
import cn.bootx.platform.daxpay.service.dto.channel.union.UnionPayConfigDto;
import cn.bootx.table.modify.annotation.DbTable;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -17,6 +18,7 @@ import lombok.experimental.Accessors;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@DbTable(comment = "云闪付支付配置")
@Accessors(chain = true)
@TableName("pay_union_pay_config")
public class UnionPayConfig extends MpBaseEntity implements EntityBaseFunction<UnionPayConfigDto> {

View File

@@ -1,6 +1,7 @@
package cn.bootx.platform.daxpay.core.channel.union.entity;
package cn.bootx.platform.daxpay.service.core.channel.union.entity;
import cn.bootx.platform.daxpay.common.entity.BasePayOrder;
import cn.bootx.platform.daxpay.service.common.entity.BasePayOrder;
import cn.bootx.table.modify.annotation.DbTable;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -13,6 +14,7 @@ import lombok.experimental.Accessors;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@DbTable(comment = "云闪付支付订单")
@Accessors(chain = true)
@TableName("pay_union_payment")
public class UnionPayOrder extends BasePayOrder {

View File

@@ -1,6 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.union.service;
package cn.bootx.platform.daxpay.service.core.channel.union.service;
import cn.bootx.platform.daxpay.core.channel.union.dao.UnionPayConfigManager;
import cn.bootx.platform.daxpay.service.core.channel.union.dao.UnionPayConfigManager;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.core.channel.union.service;
package cn.bootx.platform.daxpay.service.core.channel.union.service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.core.channel.union.service;
package cn.bootx.platform.daxpay.service.core.channel.union.service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

View File

@@ -0,0 +1,27 @@
package cn.bootx.platform.daxpay.service.core.channel.voucher.convert;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.Voucher;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.VoucherLog;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.VoucherPayOrder;
import cn.bootx.platform.daxpay.service.dto.channel.voucher.VoucherDto;
import cn.bootx.platform.daxpay.service.dto.channel.voucher.VoucherLogDto;
import cn.bootx.platform.daxpay.service.dto.channel.voucher.VoucherPayOrderDto;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* @author xxm
* @since 2022/3/14
*/
@Mapper
public interface VoucherConvert {
VoucherConvert CONVERT = Mappers.getMapper(VoucherConvert.class);
VoucherDto convert(Voucher in);
VoucherLogDto convert(VoucherLog in);
VoucherPayOrderDto convert(VoucherPayOrder in);
}

View File

@@ -1,10 +1,10 @@
package cn.bootx.platform.daxpay.core.channel.voucher.dao;
package cn.bootx.platform.daxpay.service.core.channel.voucher.dao;
import cn.bootx.platform.common.core.rest.param.PageParam;
import cn.bootx.platform.common.mybatisplus.base.MpIdEntity;
import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
import cn.bootx.platform.common.mybatisplus.util.MpUtil;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.VoucherLog;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.VoucherLog;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

View File

@@ -1,6 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.voucher.dao;
package cn.bootx.platform.daxpay.service.core.channel.voucher.dao;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.VoucherLog;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.VoucherLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

View File

@@ -1,12 +1,12 @@
package cn.bootx.platform.daxpay.core.channel.voucher.dao;
package cn.bootx.platform.daxpay.service.core.channel.voucher.dao;
import cn.bootx.platform.common.core.rest.param.PageParam;
import cn.bootx.platform.common.mybatisplus.base.MpDelEntity;
import cn.bootx.platform.common.mybatisplus.base.MpIdEntity;
import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
import cn.bootx.platform.common.mybatisplus.util.MpUtil;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.Voucher;
import cn.bootx.platform.daxpay.param.channel.voucher.VoucherParam;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.Voucher;
import cn.bootx.platform.daxpay.service.param.channel.voucher.VoucherParam;
import cn.bootx.platform.starter.auth.util.SecurityUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

View File

@@ -1,6 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.voucher.dao;
package cn.bootx.platform.daxpay.service.core.channel.voucher.dao;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.Voucher;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.Voucher;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

View File

@@ -1,6 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.voucher.dao;
package cn.bootx.platform.daxpay.service.core.channel.voucher.dao;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.VoucherPayOrder;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.VoucherPayOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

View File

@@ -1,7 +1,7 @@
package cn.bootx.platform.daxpay.core.channel.voucher.dao;
package cn.bootx.platform.daxpay.service.core.channel.voucher.dao;
import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.VoucherPayOrder;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.VoucherPayOrder;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;

View File

@@ -1,10 +1,10 @@
package cn.bootx.platform.daxpay.core.channel.voucher.entity;
package cn.bootx.platform.daxpay.service.core.channel.voucher.entity;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
import cn.bootx.platform.daxpay.code.VoucherCode;
import cn.bootx.platform.daxpay.core.channel.voucher.convert.VoucherConvert;
import cn.bootx.platform.daxpay.dto.channel.voucher.VoucherDto;
import cn.bootx.platform.daxpay.service.code.VoucherCode;
import cn.bootx.platform.daxpay.service.core.channel.voucher.convert.VoucherConvert;
import cn.bootx.platform.daxpay.service.dto.channel.voucher.VoucherDto;
import cn.bootx.table.modify.annotation.DbColumn;
import cn.bootx.table.modify.annotation.DbComment;
import cn.bootx.table.modify.annotation.DbTable;

View File

@@ -1,10 +1,10 @@
package cn.bootx.platform.daxpay.core.channel.voucher.entity;
package cn.bootx.platform.daxpay.service.core.channel.voucher.entity;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
import cn.bootx.platform.daxpay.code.VoucherCode;
import cn.bootx.platform.daxpay.core.channel.voucher.convert.VoucherConvert;
import cn.bootx.platform.daxpay.dto.channel.voucher.VoucherLogDto;
import cn.bootx.platform.daxpay.service.code.VoucherCode;
import cn.bootx.platform.daxpay.service.core.channel.voucher.convert.VoucherConvert;
import cn.bootx.platform.daxpay.service.dto.channel.voucher.VoucherLogDto;
import cn.bootx.table.modify.annotation.DbColumn;
import cn.bootx.table.modify.annotation.DbTable;
import cn.bootx.table.modify.mysql.annotation.DbMySqlIndex;

View File

@@ -1,14 +1,16 @@
package cn.bootx.platform.daxpay.core.channel.voucher.entity;
package cn.bootx.platform.daxpay.service.core.channel.voucher.entity;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
import cn.bootx.platform.daxpay.common.entity.BasePayOrder;
import cn.bootx.platform.daxpay.core.channel.voucher.convert.VoucherConvert;
import cn.bootx.platform.daxpay.dto.channel.voucher.VoucherPayOrderDto;
import cn.bootx.platform.daxpay.service.common.entity.BasePayOrder;
import cn.bootx.platform.daxpay.service.core.channel.voucher.convert.VoucherConvert;
import cn.bootx.platform.daxpay.service.dto.channel.voucher.VoucherPayOrderDto;
import cn.bootx.table.modify.annotation.DbColumn;
import cn.bootx.table.modify.annotation.DbTable;
import cn.bootx.table.modify.mysql.annotation.DbMySqlFieldType;
import cn.bootx.table.modify.mysql.constants.MySqlFieldTypeEnum;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -28,7 +30,8 @@ public class VoucherPayOrder extends BasePayOrder implements EntityBaseFunction<
/** 扣款储值卡 */
@DbColumn(comment = "扣款储值卡")
@DbMySqlFieldType(MySqlFieldTypeEnum.LONGTEXT)
@DbMySqlFieldType(MySqlFieldTypeEnum.JSON)
@TableField(typeHandler = JacksonTypeHandler.class)
private VoucherRecord voucherRecord;

View File

@@ -1,4 +1,4 @@
package cn.bootx.platform.daxpay.core.channel.voucher.entity;
package cn.bootx.platform.daxpay.service.core.channel.voucher.entity;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@@ -1,10 +1,10 @@
package cn.bootx.platform.daxpay.core.channel.voucher.service;
package cn.bootx.platform.daxpay.service.core.channel.voucher.service;
import cn.bootx.platform.common.core.rest.PageResult;
import cn.bootx.platform.common.core.rest.param.PageParam;
import cn.bootx.platform.common.mybatisplus.util.MpUtil;
import cn.bootx.platform.daxpay.core.channel.voucher.dao.VoucherLogManager;
import cn.bootx.platform.daxpay.dto.channel.voucher.VoucherLogDto;
import cn.bootx.platform.daxpay.service.core.channel.voucher.dao.VoucherLogManager;
import cn.bootx.platform.daxpay.service.dto.channel.voucher.VoucherLogDto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

View File

@@ -1,11 +1,11 @@
package cn.bootx.platform.daxpay.core.channel.voucher.service;
package cn.bootx.platform.daxpay.service.core.channel.voucher.service;
import cn.bootx.platform.common.core.exception.BizException;
import cn.bootx.platform.daxpay.code.PayStatusEnum;
import cn.bootx.platform.daxpay.core.channel.voucher.dao.VoucherPaymentManager;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.VoucherPayOrder;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.VoucherRecord;
import cn.bootx.platform.daxpay.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.service.core.channel.voucher.dao.VoucherPaymentManager;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.VoucherPayOrder;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.VoucherRecord;
import cn.bootx.platform.daxpay.service.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.param.pay.PayParam;
import cn.bootx.platform.daxpay.param.pay.PayWayParam;
import lombok.RequiredArgsConstructor;

View File

@@ -1,14 +1,14 @@
package cn.bootx.platform.daxpay.core.channel.voucher.service;
package cn.bootx.platform.daxpay.service.core.channel.voucher.service;
import cn.bootx.platform.daxpay.code.VoucherCode;
import cn.bootx.platform.daxpay.core.channel.voucher.dao.VoucherLogManager;
import cn.bootx.platform.daxpay.core.channel.voucher.dao.VoucherManager;
import cn.bootx.platform.daxpay.core.channel.voucher.dao.VoucherPaymentManager;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.Voucher;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.VoucherLog;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.VoucherPayOrder;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.VoucherRecord;
import cn.bootx.platform.daxpay.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.service.code.VoucherCode;
import cn.bootx.platform.daxpay.service.core.channel.voucher.dao.VoucherLogManager;
import cn.bootx.platform.daxpay.service.core.channel.voucher.dao.VoucherManager;
import cn.bootx.platform.daxpay.service.core.channel.voucher.dao.VoucherPaymentManager;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.Voucher;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.VoucherLog;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.VoucherPayOrder;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.VoucherRecord;
import cn.bootx.platform.daxpay.service.core.record.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.exception.pay.PayFailureException;
import cn.bootx.platform.daxpay.param.channel.VoucherPayParam;
import cn.bootx.platform.daxpay.param.pay.PayWayParam;

View File

@@ -1,14 +1,14 @@
package cn.bootx.platform.daxpay.core.channel.voucher.service;
package cn.bootx.platform.daxpay.service.core.channel.voucher.service;
import cn.bootx.platform.common.core.exception.DataNotExistException;
import cn.bootx.platform.common.core.rest.PageResult;
import cn.bootx.platform.common.core.rest.param.PageParam;
import cn.bootx.platform.common.mybatisplus.util.MpUtil;
import cn.bootx.platform.daxpay.core.channel.voucher.dao.VoucherManager;
import cn.bootx.platform.daxpay.core.channel.voucher.entity.Voucher;
import cn.bootx.platform.daxpay.dto.channel.voucher.VoucherDto;
import cn.bootx.platform.daxpay.service.core.channel.voucher.dao.VoucherManager;
import cn.bootx.platform.daxpay.service.core.channel.voucher.entity.Voucher;
import cn.bootx.platform.daxpay.service.dto.channel.voucher.VoucherDto;
import cn.bootx.platform.daxpay.exception.pay.PayFailureException;
import cn.bootx.platform.daxpay.param.channel.voucher.VoucherParam;
import cn.bootx.platform.daxpay.service.param.channel.voucher.VoucherParam;
import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

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