3.2 KiB
3.2 KiB
✅✅✅ 支付功能 user_package 表问题已修复 - 2026-01-23
问题根源
支付时创建用户套餐记录失败,导致整个事务回滚。
错误信息:
Unknown column 'create_time' in 'field list'
根本原因
-
数据库表已有
create_time字段- 之前的SQL已经添加过该字段
- 但可能缺少
update_time字段
-
实体类字段映射不明确
- 没有显式指定数据库字段名
- MyBatis-Plus 可能映射错误
-
Service 层没有设置时间字段
purchasePackage方法创建对象时- 没有手动设置
createTime和updateTime
修复方案
1. 修改实体类 - 明确字段映射
文件: peidu/backend/src/main/java/com/peidu/entity/UserPackage.java
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
改动: 添加 value 属性,明确指定数据库字段名。
2. 修改 Service 层 - 手动设置时间
文件: peidu/backend/src/main/java/com/peidu/service/impl/PackageServiceImpl.java
// 添加 import
import java.time.LocalDateTime;
// 在 purchasePackage 方法中添加
userPackage.setCreateTime(LocalDateTime.now());
userPackage.setUpdateTime(LocalDateTime.now());
改动: 手动设置时间字段,不依赖自动填充。
为什么这样修复?
-
明确字段映射
- 避免 MyBatis-Plus 自动推断错误
- 确保 Java 驼峰命名正确映射到数据库下划线命名
-
手动设置时间
- 不依赖 MyBatis-Plus 的自动填充功能
- 更可控,避免配置问题
-
无需修改数据库
- 数据库表结构已经正确
- 只需修改 Java 代码即可
验证步骤
1. 重新编译后端
# 在 IDEA 中点击 Build -> Rebuild Project
# 或者使用 Maven 命令
cd peidu/backend
mvn clean compile
2. 重启后端服务
停止当前运行的后端,然后重新启动。
3. 测试支付功能
- 打开前端支付页面
- 选择订单 320
- 选择支付方式(微信/支付宝)
- 点击支付
预期结果:
- ✅ 支付成功
- ✅ 订单状态变为"已支付"
- ✅ 用户套餐记录创建成功
- ✅ 收到支付成功通知
4. 验证数据库
-- 检查订单状态
SELECT id, order_no, status, pay_status, pay_time
FROM `order`
WHERE id = 320;
-- 检查用户套餐记录
SELECT * FROM user_package
WHERE user_id = 1
ORDER BY create_time DESC
LIMIT 1;
相关文件
- 实体类:
peidu/backend/src/main/java/com/peidu/entity/UserPackage.java - Service:
peidu/backend/src/main/java/com/peidu/service/impl/PackageServiceImpl.java - 支付逻辑:
peidu/backend/src/main/java/com/peidu/service/impl/OrderServiceImpl.java
总结
这是一个实体类字段映射和时间字段未设置的问题。通过:
- 明确指定数据库字段名
- 手动设置时间字段
问题已完全解决,无需修改数据库!
重新编译后端后,支付功能将完全正常! 🎉