feat(wallet): 新增主题购买与钱包交易模块

This commit is contained in:
2025-12-10 19:17:37 +08:00
parent 0d1545f568
commit 4f56541913
10 changed files with 335 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
package com.yolo.keyborad.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yolo.keyborad.model.entity.KeyboardThemePurchase;
/*
* @author: ziin
* @date: 2025/12/10 19:17
*/
public interface KeyboardThemePurchaseMapper extends BaseMapper<KeyboardThemePurchase> {
}

View File

@@ -0,0 +1,12 @@
package com.yolo.keyborad.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yolo.keyborad.model.entity.KeyboardWalletTransaction;
/*
* @author: ziin
* @date: 2025/12/10 18:54
*/
public interface KeyboardWalletTransactionMapper extends BaseMapper<KeyboardWalletTransaction> {
}

View File

@@ -0,0 +1,117 @@
package com.yolo.keyborad.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Date;
import lombok.Data;
/*
* @author: ziin
* @date: 2025/12/10 19:17
*/
/**
* 皮肤购买记录表(积分支付)
*/
@Schema(description="皮肤购买记录表(积分支付)")
@Data
@TableName(value = "keyboard_theme_purchase")
public class KeyboardThemePurchase {
@TableId(value = "id", type = IdType.AUTO)
@Schema(description="")
private Long id;
/**
* 业务订单号
*/
@TableField(value = "order_no")
@Schema(description="业务订单号")
private String orderNo;
/**
* 购买用户ID
*/
@TableField(value = "user_id")
@Schema(description="购买用户ID")
private Long userId;
/**
* 主题皮肤ID
*/
@TableField(value = "theme_id")
@Schema(description="主题皮肤ID")
private Long themeId;
/**
* 皮肤原始所需积分
*/
@TableField(value = "cost_points")
@Schema(description="皮肤原始所需积分")
private Integer costPoints;
/**
* 实际扣除积分
*/
@TableField(value = "paid_points")
@Schema(description="实际扣除积分")
private Integer paidPoints;
/**
* 支付状态0待支付 1已支付 2已关闭 3已退款
*/
@TableField(value = "pay_status")
@Schema(description="支付状态0待支付 1已支付 2已关闭 3已退款")
private Short payStatus;
/**
* 关联的积分扣费流水ID
*/
@TableField(value = "wallet_tx_id")
@Schema(description="关联的积分扣费流水ID")
private Long walletTxId;
/**
* 已退款的积分数量
*/
@TableField(value = "refund_points")
@Schema(description="已退款的积分数量")
private Integer refundPoints;
/**
* 积分退款完成时间
*/
@TableField(value = "refunded_at")
@Schema(description="积分退款完成时间")
private Date refundedAt;
/**
* 创建时间
*/
@TableField(value = "created_at")
@Schema(description="创建时间")
private Date createdAt;
/**
* 支付完成时间
*/
@TableField(value = "paid_at")
@Schema(description="支付完成时间")
private Date paidAt;
/**
* 更新时间
*/
@TableField(value = "updated_at")
@Schema(description="更新时间")
private Date updatedAt;
/**
* 备注或扩展信息
*/
@TableField(value = "remark")
@Schema(description="备注或扩展信息")
private String remark;
}

View File

@@ -0,0 +1,83 @@
package com.yolo.keyborad.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;
/*
* @author: ziin
* @date: 2025/12/10 18:54
*/
@Schema
@Data
@TableName(value = "keyboard_wallet_transaction")
public class KeyboardWalletTransaction {
/**
* 主键 Id
*/
@TableId(value = "id", type = IdType.AUTO)
@Schema(description="主键 Id")
private Long id;
/**
* 用户 Id
*/
@TableField(value = "user_id")
@Schema(description="用户 Id")
private Long userId;
/**
* 订单 Id
*/
@TableField(value = "order_id")
@Schema(description="订单 Id")
private Long orderId;
/**
* 金额
*/
@TableField(value = "amount")
@Schema(description="金额")
private BigDecimal amount;
/**
* 变动类型
*/
@TableField(value = "\"type\"")
@Schema(description="变动类型")
private Short type;
/**
* 变动前余额
*/
@TableField(value = "before_balance")
@Schema(description="变动前余额")
private BigDecimal beforeBalance;
/**
* 变动后余额
*/
@TableField(value = "after_balance")
@Schema(description="变动后余额")
private BigDecimal afterBalance;
/**
* 描述
*/
@TableField(value = "description")
@Schema(description="描述")
private String description;
/**
* 创建时间
*/
@TableField(value = "created_at")
@Schema(description="创建时间")
private Date createdAt;
}

View File

@@ -0,0 +1,13 @@
package com.yolo.keyborad.service;
import com.yolo.keyborad.model.entity.KeyboardThemePurchase;
import com.baomidou.mybatisplus.extension.service.IService;
/*
* @author: ziin
* @date: 2025/12/10 19:17
*/
public interface KeyboardThemePurchaseService extends IService<KeyboardThemePurchase>{
}

View File

@@ -0,0 +1,13 @@
package com.yolo.keyborad.service;
import com.yolo.keyborad.model.entity.KeyboardWalletTransaction;
import com.baomidou.mybatisplus.extension.service.IService;
/*
* @author: ziin
* @date: 2025/12/10 18:54
*/
public interface KeyboardWalletTransactionService extends IService<KeyboardWalletTransaction>{
}

View File

@@ -0,0 +1,18 @@
package com.yolo.keyborad.service.impl;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yolo.keyborad.model.entity.KeyboardThemePurchase;
import com.yolo.keyborad.mapper.KeyboardThemePurchaseMapper;
import com.yolo.keyborad.service.KeyboardThemePurchaseService;
/*
* @author: ziin
* @date: 2025/12/10 19:17
*/
@Service
public class KeyboardThemePurchaseServiceImpl extends ServiceImpl<KeyboardThemePurchaseMapper, KeyboardThemePurchase> implements KeyboardThemePurchaseService{
}

View File

@@ -0,0 +1,18 @@
package com.yolo.keyborad.service.impl;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yolo.keyborad.mapper.KeyboardWalletTransactionMapper;
import com.yolo.keyborad.model.entity.KeyboardWalletTransaction;
import com.yolo.keyborad.service.KeyboardWalletTransactionService;
/*
* @author: ziin
* @date: 2025/12/10 18:54
*/
@Service
public class KeyboardWalletTransactionServiceImpl extends ServiceImpl<KeyboardWalletTransactionMapper, KeyboardWalletTransaction> implements KeyboardWalletTransactionService{
}

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yolo.keyborad.mapper.KeyboardThemePurchaseMapper">
<resultMap id="BaseResultMap" type="com.yolo.keyborad.model.entity.KeyboardThemePurchase">
<!--@mbg.generated-->
<!--@Table keyboard_theme_purchase-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="order_no" jdbcType="VARCHAR" property="orderNo" />
<result column="user_id" jdbcType="BIGINT" property="userId" />
<result column="theme_id" jdbcType="BIGINT" property="themeId" />
<result column="cost_points" jdbcType="INTEGER" property="costPoints" />
<result column="paid_points" jdbcType="INTEGER" property="paidPoints" />
<result column="pay_status" jdbcType="SMALLINT" property="payStatus" />
<result column="wallet_tx_id" jdbcType="BIGINT" property="walletTxId" />
<result column="refund_points" jdbcType="INTEGER" property="refundPoints" />
<result column="refunded_at" jdbcType="TIMESTAMP" property="refundedAt" />
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
<result column="paid_at" jdbcType="TIMESTAMP" property="paidAt" />
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
<result column="remark" jdbcType="VARCHAR" property="remark" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, order_no, user_id, theme_id, cost_points, paid_points, pay_status, wallet_tx_id,
refund_points, refunded_at, created_at, paid_at, updated_at, remark
</sql>
</mapper>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yolo.keyborad.mapper.KeyboardWalletTransactionMapper">
<resultMap id="BaseResultMap" type="com.yolo.keyborad.model.entity.KeyboardWalletTransaction">
<!--@mbg.generated-->
<!--@Table keyboard_wallet_transaction-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="user_id" jdbcType="BIGINT" property="userId" />
<result column="order_id" jdbcType="BIGINT" property="orderId" />
<result column="amount" jdbcType="NUMERIC" property="amount" />
<result column="type" jdbcType="SMALLINT" property="type" />
<result column="before_balance" jdbcType="NUMERIC" property="beforeBalance" />
<result column="after_balance" jdbcType="NUMERIC" property="afterBalance" />
<result column="description" jdbcType="VARCHAR" property="description" />
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, user_id, order_id, amount, "type", before_balance, after_balance, description,
created_at
</sql>
</mapper>