Commit 16cea614354bcb24a5ec00c39facc6c44138fd2b
1 parent
34891447
wallet:增加充值套餐
Showing
10 changed files
with
126 additions
and
95 deletions
sql/mysql/pay_wallet.sql
| 1 | 1 | -- ---------------------------- |
| 2 | --- 会员钱包表 | |
| 3 | --- ---------------------------- | |
| 4 | -DROP TABLE IF EXISTS `pay_wallet`; | |
| 5 | -CREATE TABLE `pay_wallet` | |
| 6 | -( | |
| 7 | - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', | |
| 8 | - `user_id` bigint NOT NULL COMMENT '用户编号', | |
| 9 | - `user_type` tinyint NOT NULL DEFAULT 0 COMMENT '用户类型', | |
| 10 | - `balance` int NOT NULL DEFAULT 0 COMMENT '余额,单位分', | |
| 11 | - `total_expense` int NOT NULL DEFAULT 0 COMMENT '累计支出,单位分', | |
| 12 | - `total_recharge` int NOT NULL DEFAULT 0 COMMENT '累计充值,单位分', | |
| 13 | - `freeze_price` int NOT NULL DEFAULT 0 COMMENT '冻结金额,单位分', | |
| 14 | - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', | |
| 15 | - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | |
| 16 | - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', | |
| 17 | - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', | |
| 18 | - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', | |
| 19 | - `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', | |
| 20 | - PRIMARY KEY (`id`) USING BTREE | |
| 21 | -) ENGINE=InnoDB COMMENT='会员钱包表'; | |
| 22 | - | |
| 23 | --- ---------------------------- | |
| 24 | --- 会员钱包流水表 | |
| 25 | --- ---------------------------- | |
| 26 | -DROP TABLE IF EXISTS `pay_wallet_transaction`; | |
| 27 | -CREATE TABLE `pay_wallet_transaction` | |
| 28 | -( | |
| 29 | - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', | |
| 30 | - `wallet_id` bigint NOT NULL COMMENT '会员钱包 id', | |
| 31 | - `biz_type` tinyint NOT NULL COMMENT '关联类型', | |
| 32 | - `biz_id` varchar(64) NOT NULL COMMENT '关联业务编号', | |
| 33 | - `no` varchar(64) NOT NULL COMMENT '流水号', | |
| 34 | - `title` varchar(128) NOT NULL COMMENT '流水标题', | |
| 35 | - `price` int NOT NULL COMMENT '交易金额, 单位分', | |
| 36 | - `balance` int NOT NULL COMMENT '余额, 单位分', | |
| 37 | - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', | |
| 38 | - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | |
| 39 | - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', | |
| 40 | - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', | |
| 41 | - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', | |
| 42 | - `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', | |
| 43 | - PRIMARY KEY (`id`) USING BTREE | |
| 44 | -) ENGINE=InnoDB COMMENT='会员钱包流水表'; | |
| 45 | - | |
| 46 | --- ---------------------------- | |
| 47 | --- 会员钱包充值 | |
| 48 | --- ---------------------------- | |
| 49 | -DROP TABLE IF EXISTS `pay_wallet_recharge`; | |
| 50 | -CREATE TABLE `pay_wallet_recharge` | |
| 51 | -( | |
| 52 | - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', | |
| 53 | - `wallet_id` bigint NOT NULL COMMENT '会员钱包 id', | |
| 54 | - `total_price` int NOT NULL COMMENT '用户实际到账余额,例如充 100 送 20,则该值是 120', | |
| 55 | - `pay_price` int NOT NULL COMMENT '实际支付金额', | |
| 56 | - `bonus_price` int NOT NULL COMMENT '钱包赠送金额', | |
| 57 | - `pay_status` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已支付:[0:未支付 1:已经支付过]', | |
| 58 | - `pay_order_id` bigint NULL COMMENT '支付订单编号', | |
| 59 | - `pay_channel_code` varchar(16) NULL COMMENT '支付成功的支付渠道', | |
| 60 | - `pay_time` datetime NULL COMMENT '订单支付时间', | |
| 61 | - `pay_refund_id` bigint NULL COMMENT '支付退款单编号', | |
| 62 | - `refund_total_price` int NOT NULL DEFAULT 0 COMMENT '退款金额,包含赠送金额', | |
| 63 | - `refund_pay_price` int NOT NULL DEFAULT 0 COMMENT '退款支付金额', | |
| 64 | - `refund_bonus_price` int NOT NULL DEFAULT 0 COMMENT '退款钱包赠送金额', | |
| 65 | - `refund_time` datetime NULL COMMENT '退款时间', | |
| 66 | - `refund_status` int NOT NULL DEFAULT 0 COMMENT '退款状态', | |
| 67 | - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', | |
| 68 | - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', | |
| 69 | - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者', | |
| 70 | - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', | |
| 71 | - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', | |
| 72 | - `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', | |
| 73 | - PRIMARY KEY (`id`) USING BTREE | |
| 74 | -) ENGINE=InnoDB COMMENT='会员钱包充值'; | |
| 75 | - | |
| 76 | --- ---------------------------- | |
| 77 | 2 | -- 转账单表 |
| 78 | 3 | -- ---------------------------- |
| 79 | 4 | DROP TABLE IF EXISTS `pay_transfer`; | ... | ... |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/wallet/PayWalletRechargeController.java
| ... | ... | @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.pay.controller.admin.wallet; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | 4 | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; |
| 5 | +import cn.iocoder.yudao.module.pay.api.notify.dto.PayOrderNotifyReqDTO; | |
| 5 | 6 | import cn.iocoder.yudao.module.pay.api.notify.dto.PayRefundNotifyReqDTO; |
| 6 | 7 | import cn.iocoder.yudao.module.pay.service.wallet.PayWalletRechargeService; |
| 7 | 8 | import io.swagger.v3.oas.annotations.Operation; |
| ... | ... | @@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.*; |
| 13 | 14 | |
| 14 | 15 | import javax.annotation.Resource; |
| 15 | 16 | import javax.annotation.security.PermitAll; |
| 17 | +import javax.validation.Valid; | |
| 16 | 18 | |
| 17 | 19 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 18 | 20 | import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; |
| ... | ... | @@ -27,12 +29,22 @@ public class PayWalletRechargeController { |
| 27 | 29 | @Resource |
| 28 | 30 | private PayWalletRechargeService walletRechargeService; |
| 29 | 31 | |
| 32 | + @PostMapping("/update-paid") | |
| 33 | + @Operation(summary = "更新钱包充值为已充值") // 由 pay-module 支付服务,进行回调,可见 PayNotifyJob | |
| 34 | + @PermitAll // 无需登录, 内部校验实现 | |
| 35 | + @OperateLog(enable = false) // 禁用操作日志,因为没有操作人 | |
| 36 | + public CommonResult<Boolean> updateWalletRechargerPaid(@Valid @RequestBody PayOrderNotifyReqDTO notifyReqDTO) { | |
| 37 | + walletRechargeService.updateWalletRechargerPaid(Long.valueOf(notifyReqDTO.getMerchantOrderId()), | |
| 38 | + notifyReqDTO.getPayOrderId()); | |
| 39 | + return success(true); | |
| 40 | + } | |
| 30 | 41 | |
| 42 | + // TODO @jason:发起退款,要 post 操作哈; | |
| 31 | 43 | @GetMapping("/refund") |
| 32 | 44 | @Operation(summary = "发起钱包充值退款") |
| 33 | 45 | @Parameter(name = "id", description = "编号", required = true, example = "1024") |
| 34 | 46 | public CommonResult<Boolean> refundWalletRecharge(@RequestParam("id") Long id) { |
| 35 | - walletRechargeService.refundWalletRecharge(id,getClientIP()); | |
| 47 | + walletRechargeService.refundWalletRecharge(id, getClientIP()); | |
| 36 | 48 | return success(true); |
| 37 | 49 | } |
| 38 | 50 | ... | ... |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/AppPayWalletRechargeController.java
| 1 | 1 | package cn.iocoder.yudao.module.pay.controller.app.wallet; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | |
| 5 | -import cn.iocoder.yudao.module.pay.api.notify.dto.PayOrderNotifyReqDTO; | |
| 6 | 4 | import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge.AppPayWalletRechargeCreateReqVO; |
| 7 | 5 | import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge.AppPayWalletRechargeCreateRespVO; |
| 8 | 6 | import cn.iocoder.yudao.module.pay.convert.wallet.PayWalletRechargeConvert; |
| ... | ... | @@ -18,7 +16,6 @@ import org.springframework.web.bind.annotation.RequestMapping; |
| 18 | 16 | import org.springframework.web.bind.annotation.RestController; |
| 19 | 17 | |
| 20 | 18 | import javax.annotation.Resource; |
| 21 | -import javax.annotation.security.PermitAll; | |
| 22 | 19 | import javax.validation.Valid; |
| 23 | 20 | |
| 24 | 21 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| ... | ... | @@ -44,13 +41,4 @@ public class AppPayWalletRechargeController { |
| 44 | 41 | return success(PayWalletRechargeConvert.INSTANCE.convert(walletRecharge)); |
| 45 | 42 | } |
| 46 | 43 | |
| 47 | - @PostMapping("/update-paid") | |
| 48 | - @Operation(summary = "更新钱包充值为已充值") // 由 pay-module 支付服务,进行回调,可见 PayNotifyJob | |
| 49 | - @PermitAll // 无需登录,安全由 内部校验实现 | |
| 50 | - @OperateLog(enable = false) // 禁用操作日志,因为没有操作人 | |
| 51 | - public CommonResult<Boolean> updateWalletRechargerPaid(@Valid @RequestBody PayOrderNotifyReqDTO notifyReqDTO) { | |
| 52 | - walletRechargeService.updateWalletRechargerPaid(Long.valueOf(notifyReqDTO.getMerchantOrderId()), | |
| 53 | - notifyReqDTO.getPayOrderId()); | |
| 54 | - return success(true); | |
| 55 | - } | |
| 56 | 44 | } | ... | ... |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/AppPayWalletRechargePackageController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.pay.controller.app.wallet; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 4 | +import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge.AppPayWalletPackageRespVO; | |
| 5 | +import io.swagger.v3.oas.annotations.Operation; | |
| 6 | +import io.swagger.v3.oas.annotations.tags.Tag; | |
| 7 | +import lombok.extern.slf4j.Slf4j; | |
| 8 | +import org.springframework.validation.annotation.Validated; | |
| 9 | +import org.springframework.web.bind.annotation.GetMapping; | |
| 10 | +import org.springframework.web.bind.annotation.RequestMapping; | |
| 11 | +import org.springframework.web.bind.annotation.RestController; | |
| 12 | + | |
| 13 | +import java.util.ArrayList; | |
| 14 | +import java.util.List; | |
| 15 | + | |
| 16 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | |
| 17 | + | |
| 18 | +@Tag(name = "用户 APP - 钱包充值套餐") | |
| 19 | +@RestController | |
| 20 | +@RequestMapping("/pay/wallet-recharge-package") | |
| 21 | +@Validated | |
| 22 | +@Slf4j | |
| 23 | +public class AppPayWalletRechargePackageController { | |
| 24 | + | |
| 25 | + @GetMapping("/list") | |
| 26 | + @Operation(summary = "获得钱包充值套餐列表") | |
| 27 | + public CommonResult<List<AppPayWalletPackageRespVO>> getWalletRechargePackageList() { | |
| 28 | + // 只查询开启;需要按照 payPrice 排序; | |
| 29 | + List<AppPayWalletPackageRespVO> list = new ArrayList<>(); | |
| 30 | + list.add(new AppPayWalletPackageRespVO().setId(1L).setName("土豆").setPayPrice(10).setBonusPrice(2)); | |
| 31 | + list.add(new AppPayWalletPackageRespVO().setId(2L).setName("番茄").setPayPrice(20).setBonusPrice(5)); | |
| 32 | + return success(list); | |
| 33 | + } | |
| 34 | + | |
| 35 | +} | ... | ... |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/vo/recharge/AppPayWalletPackageRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +@Schema(description = "用户 APP - 用户充值套餐 Response VO") | |
| 7 | +@Data | |
| 8 | +public class AppPayWalletPackageRespVO { | |
| 9 | + | |
| 10 | + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | |
| 11 | + private Long id; | |
| 12 | + @Schema(description = "套餐名", requiredMode = Schema.RequiredMode.REQUIRED, example = "小套餐") | |
| 13 | + private String name; | |
| 14 | + | |
| 15 | + @Schema(description = "支付金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") | |
| 16 | + private Integer payPrice; | |
| 17 | + @Schema(description = "赠送金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "20") | |
| 18 | + private Integer bonusPrice; | |
| 19 | + | |
| 20 | +} | ... | ... |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/vo/recharge/AppPayWalletRechargeCreateReqVO.java
| ... | ... | @@ -3,24 +3,27 @@ package cn.iocoder.yudao.module.pay.controller.app.wallet.vo.recharge; |
| 3 | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | 4 | import lombok.Data; |
| 5 | 5 | |
| 6 | -import javax.validation.constraints.DecimalMin; | |
| 7 | 6 | import javax.validation.constraints.Min; |
| 8 | -import javax.validation.constraints.NotNull; | |
| 9 | 7 | |
| 10 | 8 | @Schema(description = "用户 APP - 创建钱包充值 Request VO") |
| 11 | 9 | @Data |
| 12 | 10 | public class AppPayWalletRechargeCreateReqVO { |
| 13 | 11 | |
| 14 | 12 | @Schema(description = "支付金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000") |
| 15 | - @NotNull(message = "支付金额不能为空") | |
| 13 | +// @NotNull(message = "支付金额不能为空") | |
| 16 | 14 | @Min(value = 1, message = "支付金额必须大于零") |
| 17 | 15 | private Integer payPrice; |
| 18 | 16 | |
| 19 | 17 | // TODO @jason:这个是不是后端计算出来呀?不然前端可以直接搞了。。。 |
| 20 | 18 | // TOTO 那是不是搞一个充值模板 |
| 21 | 19 | @Schema(description = "钱包赠送金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000") |
| 22 | - @NotNull(message = "钱包赠送金额不能为空") | |
| 23 | - @DecimalMin(value = "0", message = "钱包赠送金额必须大于等于零") | |
| 24 | - private Integer bonusPrice; | |
| 20 | +// @NotNull(message = "钱包赠送金额不能为空") | |
| 21 | +// @DecimalMin(value = "0", message = "钱包赠送金额必须大于等于零") | |
| 22 | + private Integer bonusPrice = 0; | |
| 23 | + | |
| 24 | + @Schema(description = "充值套餐编号", example = "1024") | |
| 25 | + private Long packageId; | |
| 26 | + | |
| 27 | + // TODO @jason:可以改成 payPrice 和 packageId 两个至少一个不为空; | |
| 25 | 28 | |
| 26 | 29 | } | ... | ... |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/vo/wallet/AppPayWalletRespVO.java
| ... | ... | @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.pay.controller.app.wallet.vo.wallet; |
| 3 | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | 4 | import lombok.Data; |
| 5 | 5 | |
| 6 | -@Schema(description = "用户 APP - 获取用户钱包 Response VO") | |
| 6 | +@Schema(description = "用户 APP - 用户钱包 Response VO") | |
| 7 | 7 | @Data |
| 8 | 8 | public class AppPayWalletRespVO { |
| 9 | 9 | ... | ... |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/wallet/PayWalletRechargeDO.java
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/wallet/PayWalletRechargePackageDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.pay.dal.dataobject.wallet; | |
| 2 | + | |
| 3 | +import com.baomidou.mybatisplus.annotation.KeySequence; | |
| 4 | +import com.baomidou.mybatisplus.annotation.TableId; | |
| 5 | +import com.baomidou.mybatisplus.annotation.TableName; | |
| 6 | +import lombok.Data; | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * 会员钱包充值套餐 DO | |
| 10 | + * | |
| 11 | + * 通过套餐充值时,可以赠送一定金额; | |
| 12 | + * | |
| 13 | + * @author 芋道源码 | |
| 14 | + */ | |
| 15 | +@TableName(value ="pay_wallet_recharge_package") | |
| 16 | +@KeySequence("pay_wallet_recharge_package_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | |
| 17 | +@Data | |
| 18 | +public class PayWalletRechargePackageDO { | |
| 19 | + | |
| 20 | + /** | |
| 21 | + * 编号 | |
| 22 | + */ | |
| 23 | + @TableId | |
| 24 | + private Long id; | |
| 25 | + /** | |
| 26 | + * 套餐名 | |
| 27 | + */ | |
| 28 | + private String name; | |
| 29 | + | |
| 30 | + /** | |
| 31 | + * 支付金额 | |
| 32 | + */ | |
| 33 | + private Integer payPrice; | |
| 34 | + /** | |
| 35 | + * 赠送金额 | |
| 36 | + */ | |
| 37 | + private Integer bonusPrice; | |
| 38 | + | |
| 39 | + /** | |
| 40 | + * 状态 | |
| 41 | + * | |
| 42 | + * 枚举 {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum} | |
| 43 | + */ | |
| 44 | + private Integer status; | |
| 45 | + | |
| 46 | +} | ... | ... |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletRechargeServiceImpl.java