Commit 1ffbd9399ebd0f04f13be28da5f3d9d90a5a11d1

Authored by jason
1 parent 9b6f5bd5

新增获得支付钱包接口

Showing 13 changed files with 227 additions and 63 deletions
sql/mysql/pay_wallet.sql 0 → 100644
  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 '用户 id',
  9 + `user_type` tinyint NOT NULL DEFAULT 0 COMMENT '用户类型',
  10 + `balance` int NOT NULL DEFAULT 0 COMMENT '余额, 单位分',
  11 + `total_expense` bigint NOT NULL DEFAULT 0 COMMENT '累计支出, 单位分',
  12 + `total_recharge` bigint NOT NULL DEFAULT 0 COMMENT '累计充值, 单位分',
  13 + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
  14 + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  15 + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
  16 + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  17 + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  18 + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
  19 + PRIMARY KEY (`id`) USING BTREE
  20 +) ENGINE=InnoDB COMMENT='支付钱包表';
  21 +
  22 +-- ----------------------------
  23 +-- 支付- 钱包余额明细表
  24 +-- ----------------------------
  25 +DROP TABLE IF EXISTS `pay_wallet_transaction`;
  26 +CREATE TABLE `pay_wallet_transaction`
  27 +(
  28 + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  29 + `wallet_id` bigint NOT NULL COMMENT '会员钱包 id',
  30 + `user_id` bigint NOT NULL COMMENT '用户 id',
  31 + `biz_type` tinyint NOT NULL COMMENT '关联类型',
  32 + `biz_id` bigint NOT NULL COMMENT '关联业务编号',
  33 + `no` varchar(64) NOT NULL COMMENT '流水号',
  34 + `description` varchar(255) COMMENT '操作说明',
  35 + `amount` int NOT NULL COMMENT '交易金额, 单位分',
  36 + `balance` int NOT NULL COMMENT '余额, 单位分',
  37 + `transaction_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 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='支付钱包余额明细表';
0 \ No newline at end of file 45 \ No newline at end of file
yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/member/WalletTransactionGategoryEnum.java renamed to yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/member/WalletBizTypeEnum.java
@@ -4,20 +4,21 @@ import lombok.AllArgsConstructor; @@ -4,20 +4,21 @@ import lombok.AllArgsConstructor;
4 import lombok.Getter; 4 import lombok.Getter;
5 5
6 /** 6 /**
7 - * 钱包交易大类枚举 7 + * 钱包交易业务分类
8 * 8 *
9 * @author jason 9 * @author jason
10 */ 10 */
11 @AllArgsConstructor 11 @AllArgsConstructor
12 @Getter 12 @Getter
13 -public enum WalletTransactionGategoryEnum {  
14 - TOP_UP(1, "充值"),  
15 - SPENDING(2, "支出"); 13 +public enum WalletBizTypeEnum {
  14 + RECHARGE(1, "充值"),
  15 + RECHARGE_REFUND(2, "充值退款");
16 16
  17 + // TODO 后续增加
17 /** 18 /**
18 - * 分类 19 + * 业务分类
19 */ 20 */
20 - private final Integer category; 21 + private final Integer bizType;
21 22
22 /** 23 /**
23 * 说明 24 * 说明
yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/member/WalletOperateTypeEnum.java renamed to yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/member/WalletTypeEnum.java
@@ -4,16 +4,15 @@ import lombok.AllArgsConstructor; @@ -4,16 +4,15 @@ import lombok.AllArgsConstructor;
4 import lombok.Getter; 4 import lombok.Getter;
5 5
6 /** 6 /**
7 - * 钱包操作类型枚举 7 + * 钱包交易大分类
8 * 8 *
9 * @author jason 9 * @author jason
10 */ 10 */
11 @AllArgsConstructor 11 @AllArgsConstructor
12 @Getter 12 @Getter
13 -public enum WalletOperateTypeEnum {  
14 - TOP_UP_INC(1, "充值增加"),  
15 - ORDER_DEC(2, "订单消费扣除");  
16 - // TODO 其它类型 13 +public enum WalletTypeEnum {
  14 + RECHARGE(1, "充值"),
  15 + EXPENSE(2, "消费");
17 16
18 private final Integer type; 17 private final Integer type;
19 18
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/AppPayWalletController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.pay.controller.app.wallet;
  2 +
  3 +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
  4 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  5 +import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.AppPayWalletRespVO;
  6 +import cn.iocoder.yudao.module.pay.convert.wallet.PayWalletConvert;
  7 +import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
  8 +import cn.iocoder.yudao.module.pay.service.wallet.PayWalletService;
  9 +import io.swagger.v3.oas.annotations.Operation;
  10 +import io.swagger.v3.oas.annotations.tags.Tag;
  11 +import lombok.extern.slf4j.Slf4j;
  12 +import org.springframework.validation.annotation.Validated;
  13 +import org.springframework.web.bind.annotation.GetMapping;
  14 +import org.springframework.web.bind.annotation.RequestMapping;
  15 +import org.springframework.web.bind.annotation.RestController;
  16 +
  17 +import javax.annotation.Resource;
  18 +
  19 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  20 +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
  21 +
  22 +/**
  23 + * @author jason
  24 + */
  25 +@Tag(name = "用户 APP - 支付钱包")
  26 +@RestController
  27 +@RequestMapping("/pay/wallet")
  28 +@Validated
  29 +@Slf4j
  30 +public class AppPayWalletController {
  31 +
  32 + @Resource
  33 + private PayWalletService payWalletService;
  34 +
  35 + @GetMapping("/get")
  36 + @Operation(summary = "获取支付钱包")
  37 + public CommonResult<AppPayWalletRespVO> getPayWallet() {
  38 + PayWalletDO payWallet = payWalletService.getPayWallet(getLoginUserId(), UserTypeEnum.MEMBER.getValue());
  39 + return success(PayWalletConvert.INSTANCE.convert(payWallet));
  40 + }
  41 +}
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/wallet/vo/AppPayWalletRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.pay.controller.app.wallet.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +/**
  7 + * @author jason
  8 + */
  9 +@Schema(description = "用户 APP - 获取用户钱包 Response VO")
  10 +@Data
  11 +public class AppPayWalletRespVO {
  12 +
  13 + @Schema(description = "钱包余额,单位分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
  14 + private Integer balance;
  15 +
  16 + @Schema(description = "累计支出, 单位分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
  17 + private Long totalExpense;
  18 +
  19 + @Schema(description = "累计充值, 单位分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000")
  20 + private Long totalRecharge;
  21 +}
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/convert/wallet/PayWalletConvert.java 0 → 100644
  1 +package cn.iocoder.yudao.module.pay.convert.wallet;
  2 +
  3 +import cn.iocoder.yudao.module.pay.controller.app.wallet.vo.AppPayWalletRespVO;
  4 +import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
  5 +import org.mapstruct.Mapper;
  6 +import org.mapstruct.factory.Mappers;
  7 +
  8 +@Mapper
  9 +public interface PayWalletConvert {
  10 +
  11 + PayWalletConvert INSTANCE = Mappers.getMapper(PayWalletConvert.class);
  12 +
  13 + AppPayWalletRespVO convert(PayWalletDO bean);
  14 +}
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/member/MemberWalletDO.java renamed to yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/wallet/PayWalletDO.java
1 -package cn.iocoder.yudao.module.pay.dal.dataobject.member; 1 +package cn.iocoder.yudao.module.pay.dal.dataobject.wallet;
2 2
  3 +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
4 import com.baomidou.mybatisplus.annotation.KeySequence; 5 import com.baomidou.mybatisplus.annotation.KeySequence;
5 import com.baomidou.mybatisplus.annotation.TableId; 6 import com.baomidou.mybatisplus.annotation.TableId;
6 import com.baomidou.mybatisplus.annotation.TableName; 7 import com.baomidou.mybatisplus.annotation.TableName;
7 import lombok.Data; 8 import lombok.Data;
8 9
9 -// TODO @jason:修改 MemberWalletDO 为 PayWalletDO  
10 /** 10 /**
11 * 支付 - 会员钱包 DO 11 * 支付 - 会员钱包 DO
12 * 12 *
13 * @author jason 13 * @author jason
14 */ 14 */
15 -@TableName(value ="pay_member_wallet")  
16 -@KeySequence("pay_member_wallet_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 15 +@TableName(value ="pay_wallet")
  16 +@KeySequence("pay_wallet_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
17 @Data 17 @Data
18 -public class MemberWalletDO extends BaseDO { 18 +public class PayWalletDO extends BaseDO {
19 19
20 /** 20 /**
21 * 编号 21 * 编号
@@ -23,7 +23,6 @@ public class MemberWalletDO extends BaseDO { @@ -23,7 +23,6 @@ public class MemberWalletDO extends BaseDO {
23 @TableId 23 @TableId
24 private Long id; 24 private Long id;
25 25
26 - // TODO @jaosn:增加 userType 字段;  
27 /** 26 /**
28 * 用户 id 27 * 用户 id
29 * 28 *
@@ -33,6 +32,13 @@ public class MemberWalletDO extends BaseDO { @@ -33,6 +32,13 @@ public class MemberWalletDO extends BaseDO {
33 private Long userId; 32 private Long userId;
34 33
35 /** 34 /**
  35 + * 用户类型, 预留 多商户转帐可能需要用到
  36 + *
  37 + * 关联 {@link UserTypeEnum}
  38 + */
  39 + private Integer userType;
  40 +
  41 + /**
36 * 余额, 单位分 42 * 余额, 单位分
37 */ 43 */
38 private Integer balance; 44 private Integer balance;
@@ -40,10 +46,10 @@ public class MemberWalletDO extends BaseDO { @@ -40,10 +46,10 @@ public class MemberWalletDO extends BaseDO {
40 /** 46 /**
41 * 累计支出, 单位分 47 * 累计支出, 单位分
42 */ 48 */
43 - private Integer totalSpending; 49 + private Long totalExpense;
44 50
45 /** 51 /**
46 * 累计充值, 单位分 52 * 累计充值, 单位分
47 */ 53 */
48 - private Integer totalTopUp; 54 + private Long totalRecharge;
49 } 55 }
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/member/MemberWalletTransactionDO.java renamed to yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/dataobject/wallet/PayWalletTransactionDO.java
1 -package cn.iocoder.yudao.module.pay.dal.dataobject.member; 1 +package cn.iocoder.yudao.module.pay.dal.dataobject.wallet;
2 2
3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
4 -import cn.iocoder.yudao.module.pay.enums.member.WalletOperateTypeEnum;  
5 -import cn.iocoder.yudao.module.pay.enums.member.WalletTransactionGategoryEnum; 4 +import cn.iocoder.yudao.module.pay.enums.member.WalletBizTypeEnum;
6 import com.baomidou.mybatisplus.annotation.KeySequence; 5 import com.baomidou.mybatisplus.annotation.KeySequence;
7 import com.baomidou.mybatisplus.annotation.TableId; 6 import com.baomidou.mybatisplus.annotation.TableId;
8 import com.baomidou.mybatisplus.annotation.TableName; 7 import com.baomidou.mybatisplus.annotation.TableName;
@@ -15,10 +14,10 @@ import java.time.LocalDateTime; @@ -15,10 +14,10 @@ import java.time.LocalDateTime;
15 * 14 *
16 * @author jason 15 * @author jason
17 */ 16 */
18 -@TableName(value ="pay_member_wallet_transaction")  
19 -@KeySequence("pay_member_wallet_transaction_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 17 +@TableName(value ="pay_wallet_transaction")
  18 +@KeySequence("pay_wallet_transaction_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
20 @Data 19 @Data
21 -public class MemberWalletTransactionDO extends BaseDO { 20 +public class PayWalletTransactionDO extends BaseDO {
22 21
23 /** 22 /**
24 * 编号 23 * 编号
@@ -29,7 +28,7 @@ public class MemberWalletTransactionDO extends BaseDO { @@ -29,7 +28,7 @@ public class MemberWalletTransactionDO extends BaseDO {
29 /** 28 /**
30 * 会员钱包 id 29 * 会员钱包 id
31 * 30 *
32 - * 关联 {@link MemberWalletDO#getId()} 31 + * 关联 {@link PayWalletDO#getId()}
33 */ 32 */
34 private Long walletId; 33 private Long walletId;
35 34
@@ -41,45 +40,39 @@ public class MemberWalletTransactionDO extends BaseDO { @@ -41,45 +40,39 @@ public class MemberWalletTransactionDO extends BaseDO {
41 private Long userId; 40 private Long userId;
42 41
43 /** 42 /**
44 - * 交易单号 @芋艿 这里是关联交易单号, 还是订单号 , 退款单号! ?? 43 + * 关联业务
  44 + *
  45 + * 枚举 {@link WalletBizTypeEnum#getBizType()}
45 */ 46 */
46 - private String tradeNo; 47 + private Integer bizType;
47 48
48 /** 49 /**
49 - * 交易分类  
50 - *  
51 - * 枚举 {@link WalletTransactionGategoryEnum#getCategory()} 50 + * 关联业务编号
52 */ 51 */
53 - private Integer category; 52 + private Long bizId;
54 53
55 /** 54 /**
56 - * 操作分类  
57 - *  
58 - * 枚举 {@link WalletOperateTypeEnum#getType()} 55 + * 流水号
59 */ 56 */
60 - private Integer operateType; 57 + private String no;
61 58
62 /** 59 /**
63 - * 操作详情 60 + * 附加说明
64 */ 61 */
65 - private String operateDesc; 62 + private String description;
66 63
67 /** 64 /**
68 * 交易金额, 单位分 65 * 交易金额, 单位分
  66 + * 正值表示余额增加,负值表示余额减少
69 */ 67 */
70 - private Integer price; 68 + private Integer amount;
71 69
72 /** 70 /**
73 - * 余额, 单位分 71 + * 交易后余额,单位分
74 */ 72 */
75 private Integer balance; 73 private Integer balance;
76 74
77 /** 75 /**
78 - * 备注  
79 - */  
80 - private String mark;  
81 -  
82 - /**  
83 * 交易时间 76 * 交易时间
84 */ 77 */
85 private LocalDateTime transactionTime; 78 private LocalDateTime transactionTime;
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/member/MemberWalletTransactionMapper.java deleted
1 -package cn.iocoder.yudao.module.pay.dal.mysql.member;  
2 -  
3 -  
4 -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;  
5 -import cn.iocoder.yudao.module.pay.dal.dataobject.member.MemberWalletTransactionDO;  
6 -import org.apache.ibatis.annotations.Mapper;  
7 -  
8 -@Mapper  
9 -public interface MemberWalletTransactionMapper extends BaseMapperX<MemberWalletTransactionDO> {  
10 -  
11 -}  
12 -  
13 -  
14 -  
15 -  
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/wallet/PayWalletMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.pay.dal.mysql.wallet;
  2 +
  3 +
  4 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  5 +import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
  6 +import org.apache.ibatis.annotations.Mapper;
  7 +
  8 +@Mapper
  9 +public interface PayWalletMapper extends BaseMapperX<PayWalletDO> {
  10 +
  11 + default PayWalletDO selectByUserIdAndType(Long userId, Integer userType) {
  12 + return selectOne(PayWalletDO::getUserId, userId, PayWalletDO::getUserType, userType);
  13 + }
  14 +}
  15 +
  16 +
  17 +
  18 +
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/member/MemberWalletMapper.java renamed to yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/wallet/PayWalletTransactionMapper.java
1 -package cn.iocoder.yudao.module.pay.dal.mysql.member; 1 +package cn.iocoder.yudao.module.pay.dal.mysql.wallet;
2 2
3 3
4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 -import cn.iocoder.yudao.module.pay.dal.dataobject.member.MemberWalletDO; 5 +import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletTransactionDO;
6 import org.apache.ibatis.annotations.Mapper; 6 import org.apache.ibatis.annotations.Mapper;
7 7
8 @Mapper 8 @Mapper
9 -public interface MemberWalletMapper extends BaseMapperX<MemberWalletDO> { 9 +public interface PayWalletTransactionMapper extends BaseMapperX<PayWalletTransactionDO> {
10 10
11 } 11 }
12 12
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.pay.service.wallet;
  2 +
  3 +import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
  4 +
  5 +/**
  6 + * 支付钱包 Service 接口
  7 + *
  8 + * @author jason
  9 + */
  10 +public interface PayWalletService {
  11 +
  12 + /**
  13 + * 得到用户的支付钱包
  14 + * @param userId 用户 id
  15 + * @param userType 用户类型
  16 + */
  17 + PayWalletDO getPayWallet(Long userId, Integer userType);
  18 +}
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.pay.service.wallet;
  2 +
  3 +import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
  4 +import cn.iocoder.yudao.module.pay.dal.mysql.wallet.PayWalletMapper;
  5 +import org.springframework.stereotype.Service;
  6 +
  7 +import javax.annotation.Resource;
  8 +
  9 +/**
  10 + * 支付钱包 Service 实现类
  11 + *
  12 + * @author jason
  13 + */
  14 +@Service
  15 +public class PayWalletServiceImpl implements PayWalletService {
  16 +
  17 + @Resource
  18 + private PayWalletMapper payWalletMapper;
  19 +
  20 + @Override
  21 + public PayWalletDO getPayWallet(Long userId, Integer userType) {
  22 + return payWalletMapper.selectByUserIdAndType(userId, userType);
  23 + }
  24 +}