使用java框架实现业务:电商业务中,需要给电商app设计一个用户钱包,用户可以往钱包中充值,购买商品时用户可以使用钱包中的钱消费,商品申请退款成功后钱会退回钱包中,用户也可以申请提现把钱提到银行卡中 用程序实现如下api接口 1. 查询用户钱包余额 2. 用户消费100元的接口 3. 用户退款20元接口 4. 查询用户钱包金额变动明细的接口 请给出建表语句和对应的代码(只要能实现上面api接口要求即可,不相关的表和代码不用写)
时间: 2023-03-21 10:00:42 浏览: 175
建表语句如下:
```
CREATE TABLE `user_wallet` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) NOT NULL,
`balance` decimal(10,2) NOT NULL DEFAULT '0.00',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
```
代码实现如下:
```java
// 查询用户钱包余额
public BigDecimal getUserBalance(long userId) {
UserWallet wallet = userWalletMapper.selectByUserId(userId);
return wallet != null ? wallet.getBalance() : BigDecimal.ZERO;
}
// 用户消费100元的接口
public void consume(long userId) {
UserWallet wallet = userWalletMapper.selectByUserId(userId);
BigDecimal balance = wallet.getBalance();
if (balance.compareTo(BigDecimal.valueOf(100)) >= 0) {
wallet.setBalance(balance.subtract(BigDecimal.valueOf(100)));
userWalletMapper.updateByPrimaryKey(wallet);
// 记录消费流水
recordFlow(userId, "消费", BigDecimal.valueOf(100), balance, wallet.getBalance());
} else {
throw new RuntimeException("余额不足");
}
}
// 用户退款20元接口
public void refund(long userId) {
UserWallet wallet = userWalletMapper.selectByUserId(userId);
BigDecimal balance = wallet.getBalance();
wallet.setBalance(balance.add(BigDecimal.valueOf(20)));
userWalletMapper.updateByPrimaryKey(wallet);
// 记录退款流水
recordFlow(userId, "退款", BigDecimal.valueOf(20), balance, wallet.getBalance());
}
// 查询用户钱包金额变动明细的接口
public List<WalletFlow> getWalletFlowList(long userId) {
return walletFlowMapper.selectByUserId(userId);
}
// 记录流水
private void recordFlow(long userId, String type, BigDecimal amount, BigDecimal preBalance, BigDecimal postBalance) {
WalletFlow flow = new WalletFlow();
flow.setUserId(userId);
flow.setType(type);
flow.setAmount(amount);
flow.setPreBalance(preBalance);
flow.setPostBalance(postBalance);
walletFlowMapper.insert(flow);
}
```
其中,`UserWallet`是用户钱包实体类,包含用户ID和余额信息,`WalletFlow`是钱包流水实体类,包含用户ID、流水类型(消费或退款)、流水金额、操作前余额和操作后余额。`userWalletMapper`和`walletFlowMapper`是对应的DAO对象,用于数据库操作。在使用上述API接口时,需要先调用充值接口将钱充值到钱包中。
阅读全文