diff --git a/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/service/pay/AlipayPayService.java b/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/service/pay/AlipayPayService.java index 7d3913506..b930ab55d 100644 --- a/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/service/pay/AlipayPayService.java +++ b/daxpay-channel/daxpay-channel-alipay/src/main/java/cn/daxpay/open/channel/alipay/service/pay/AlipayPayService.java @@ -13,7 +13,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.math.BigDecimal; import java.time.OffsetDateTime; import java.time.format.DateTimeFormatter; import java.util.Map; @@ -27,8 +26,6 @@ import java.util.Map; @RequiredArgsConstructor public class AlipayPayService { - private static final BigDecimal HUNDRED = new BigDecimal("100"); - private final AlipayChannelClient alipayChannelClient; /// 执行支付宝支付 @@ -43,7 +40,7 @@ public class AlipayPayService { req.setChannel("alipay"); // 使用支付交易号作为商户订单号透传给支付宝, 回调时凭此反查 PayTrade req.setBizOrderNo(order.getTradeNo()); - req.setAmount(payParam.getAmount().multiply(HUNDRED).longValue()); + req.setAmount(payParam.getAmount()); req.setSubject(payParam.getTitle()); req.setDescription(payParam.getDescription()); // 将平台支付方式(PayMethodEnum code)映射为支付宝通道识别码 diff --git a/daxpay-channel/daxpay-channel-douyin/src/main/java/cn/daxpay/open/channel/douyin/strategy/DouyinDirectPayStrategy.java b/daxpay-channel/daxpay-channel-douyin/src/main/java/cn/daxpay/open/channel/douyin/strategy/DouyinDirectPayStrategy.java index f4b477686..0d4220db2 100644 --- a/daxpay-channel/daxpay-channel-douyin/src/main/java/cn/daxpay/open/channel/douyin/strategy/DouyinDirectPayStrategy.java +++ b/daxpay-channel/daxpay-channel-douyin/src/main/java/cn/daxpay/open/channel/douyin/strategy/DouyinDirectPayStrategy.java @@ -12,7 +12,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.math.BigDecimal; import java.util.Map; /// # 抖音支付直连支付策略 @@ -24,8 +23,6 @@ import java.util.Map; @RequiredArgsConstructor public class DouyinDirectPayStrategy extends AbsPayStrategy { - private static final BigDecimal HUNDRED = new BigDecimal("100"); - private final DouyinChannelClient douyinChannelClient; @Override @@ -39,7 +36,7 @@ public class DouyinDirectPayStrategy extends AbsPayStrategy { DouyinPayReq req = new DouyinPayReq(); req.setChannel(ProductEnum.DOUYIN_PAY.getChannel()); req.setBizOrderNo(context.getPayParam().getBizOrderNo()); - req.setAmount(context.getPayParam().getAmount().multiply(HUNDRED).longValue()); + req.setAmount(context.getPayParam().getAmount()); req.setSubject(context.getPayParam().getTitle()); req.setMethod(context.getPayParam().getMethod()); // TODO 从数据库获取抖音通道配置 diff --git a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/common/util/PayUtil.java b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/common/util/PayUtil.java index a3fb34ef9..7812a5093 100644 --- a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/common/util/PayUtil.java +++ b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/common/util/PayUtil.java @@ -25,7 +25,6 @@ import cn.daxpay.open.platform.core.code.CommonCode; /// @UtilityClass public class PayUtil { - private static final BigDecimal HUNDRED = new BigDecimal(100); /// 获取支付单的超时时间 public OffsetDateTime getPaymentExpiredTime(Integer minute) { @@ -38,25 +37,6 @@ public class PayUtil { return Math.toIntExact(duration.getSeconds() / 60); } - /// 元转分 - /// - /// @param amount 元的金额 - /// @return 分的金额 - public int convertCentAmount(BigDecimal amount) { - return amount.multiply(HUNDRED) - .setScale(0, RoundingMode.HALF_UP) - .intValue(); - } - - /// 分转元,保留两位小数 - /// - /// @param amount 元的金额 - /// @return 元的金额 两位小数 - public BigDecimal conversionAmount(int amount) { - return BigDecimal.valueOf(amount) - .divide(HUNDRED, 2, RoundingMode.HALF_UP); - } - /// xx.xx%转换为基点表示费率(万分之多少) public String toBasisPointRate(BigDecimal rate) { return Opt.ofBlankAble(rate) diff --git a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/bo/sync/PaySyncResultBo.java b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/bo/sync/PaySyncResultBo.java index dfddd4ea4..e07125caa 100644 --- a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/bo/sync/PaySyncResultBo.java +++ b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/bo/sync/PaySyncResultBo.java @@ -5,7 +5,6 @@ import cn.daxpay.open.platform.core.enums.pay.channel.PayProviderEnum; import lombok.Data; import lombok.experimental.Accessors; -import java.math.BigDecimal; import java.time.OffsetDateTime; /// # 支付同步结果 @@ -23,11 +22,11 @@ public class PaySyncResultBo { /// 支付通道对应系统的交易号, 用与和本地记录关联起来 private String outOrderNo; - /// 交易金额 - private BigDecimal amount; + /// 交易金额(分,最小货币单位) + private Long amount; - /// 实收金额 - private BigDecimal realAmount; + /// 实收金额(分,最小货币单位) + private Long realAmount; /// 支付完成时间 private OffsetDateTime finishTime; diff --git a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/bo/trade/PayResultBo.java b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/bo/trade/PayResultBo.java index 9a435aa88..59118dddc 100644 --- a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/bo/trade/PayResultBo.java +++ b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/bo/trade/PayResultBo.java @@ -4,7 +4,6 @@ import cn.daxpay.open.platform.core.enums.unipay.PayBodyTypeEnum; import lombok.Data; import lombok.experimental.Accessors; -import java.math.BigDecimal; import java.time.OffsetDateTime; /// # 支付结果业务类 @@ -21,8 +20,8 @@ public class PayResultBo { /// 是否支付完成 private boolean complete; - /// 实收金额 - private BigDecimal realAmount; + /// 实收金额(分,最小货币单位) + private Long realAmount; /// 完成时间 private OffsetDateTime finishTime; diff --git a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/controller/order/PayOrderController.java b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/controller/order/PayOrderController.java index 1c712c6b7..18ad8e97c 100644 --- a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/controller/order/PayOrderController.java +++ b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/controller/order/PayOrderController.java @@ -23,8 +23,6 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.math.BigDecimal; - /// # 支付订单控制器 /// @Validated @@ -70,7 +68,7 @@ public class PayOrderController { @Operation(summary = "查询金额汇总") @GetMapping("/get-total-amount") - public Result getTotalAmount(PayOrderQuery query){ + public Result getTotalAmount(PayOrderQuery query){ return Res.ok(queryService.getTotalAmount(query)); } diff --git a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/order/pay/PayOrderManager.java b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/order/pay/PayOrderManager.java index 619b6a4e6..6a7ee4643 100644 --- a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/order/pay/PayOrderManager.java +++ b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/order/pay/PayOrderManager.java @@ -17,7 +17,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; -import java.math.BigDecimal; import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.util.List; @@ -77,7 +76,7 @@ public class PayOrderManager extends BaseManager { } /// 查询汇总金额 - public BigDecimal getTotalAmount(PayOrderQuery query){ + public Long getTotalAmount(PayOrderQuery query){ QueryWrapper generator = QueryGenerator.generator(query); // 商户和应用AppId generator.eq(MpUtil.getColumnName(PayOrder::getStatus), PayStatusEnum.SUCCESS.getCode()); diff --git a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/order/pay/PayOrderMapper.java b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/order/pay/PayOrderMapper.java index 085631ab2..62527c530 100644 --- a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/order/pay/PayOrderMapper.java +++ b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/order/pay/PayOrderMapper.java @@ -8,12 +8,10 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; -import java.math.BigDecimal; - @Mapper public interface PayOrderMapper extends MPJBaseMapper { - @Select("select sum(amount) from pay_order ${ew.customSqlSegment}") - BigDecimal getTotalAmount(@Param(Constants.WRAPPER) QueryWrapper param); + @Select("select sum(amount)::bigint from pay_order ${ew.customSqlSegment}") + Long getTotalAmount(@Param(Constants.WRAPPER) QueryWrapper param); } diff --git a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/record/flow/TradeFlowRecordManager.java b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/record/flow/TradeFlowRecordManager.java index 3d76f2c4e..6f96674ec 100644 --- a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/record/flow/TradeFlowRecordManager.java +++ b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/record/flow/TradeFlowRecordManager.java @@ -13,8 +13,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; -import java.math.BigDecimal; - /// # 交易流水 /// @Slf4j @@ -30,7 +28,7 @@ public class TradeFlowRecordManager extends BaseManager generator = QueryGenerator.generator(query); generator.eq(MpUtil.getColumnName(TradeFlowRecord::getType), tradeTypeEnum.getCode()); return baseMapper.getTotalAmount(generator); diff --git a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/record/flow/TradeFlowRecordMapper.java b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/record/flow/TradeFlowRecordMapper.java index 8df9c0522..0d7718526 100644 --- a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/record/flow/TradeFlowRecordMapper.java +++ b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/dao/record/flow/TradeFlowRecordMapper.java @@ -8,13 +8,11 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; -import java.math.BigDecimal; - /// # 交易流水 /// @Mapper public interface TradeFlowRecordMapper extends MPJBaseMapper { - @Select("select sum(amount) from pay_trade_flow_record ${ew.customSqlSegment}") - BigDecimal getTotalAmount(@Param(Constants.WRAPPER) QueryWrapper generator); + @Select("select sum(amount)::bigint from pay_trade_flow_record ${ew.customSqlSegment}") + Long getTotalAmount(@Param(Constants.WRAPPER) QueryWrapper generator); } diff --git a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/entity/order/pay/PayOrder.java b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/entity/order/pay/PayOrder.java index 5582741fd..c9a54cc38 100644 --- a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/entity/order/pay/PayOrder.java +++ b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/entity/order/pay/PayOrder.java @@ -17,7 +17,6 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import java.math.BigDecimal; import java.time.OffsetDateTime; /// # 支付订单 @@ -75,11 +74,11 @@ public class PayOrder extends MchBaseEntity implements ToResult { /// @see PayLimitPayEnum private String limitPay; - /// 金额(元) - private BigDecimal amount; + /// 金额(分,最小货币单位) + private Long amount; - /// 可退金额(元) - private BigDecimal refundableBalance; + /// 可退金额(分,最小货币单位) + private Long refundableBalance; /// 支付状态 /// @see PayStatusEnum diff --git a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/entity/order/pay/PayOrderExpand.java b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/entity/order/pay/PayOrderExpand.java index 67b0fe7c7..3be5b3283 100644 --- a/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/entity/order/pay/PayOrderExpand.java +++ b/daxpay-payment/daxpay-payment-common/src/main/java/cn/daxpay/open/payment/old/pay/entity/order/pay/PayOrderExpand.java @@ -12,7 +12,6 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import java.math.BigDecimal; import java.time.OffsetDateTime; /// # 支付订单扩展存储参数 @@ -42,8 +41,8 @@ public class PayOrderExpand extends MchBaseEntity implements ToResult