红包功能文件目录结构
以下是红包功能涉及的所有核心文件和目录:
core/models/profile.py
用户资料模型,包含余额字段和余额计算方法
core/views/auth_views.py
用户注册视图,初始化用户余额
core/views/user_views.py
用户相关视图,可能包含余额显示逻辑
red_packet/models.py
红包相关数据模型定义
red_packet/views.py
红包创建、发送、领取的视图处理
red_packet/services.py
红包业务逻辑和核心计算
red_packet/utils.py
红包相关工具函数
chat/models.py
聊天消息模型,包含红包消息关联
chat/views.py
聊天视图,处理红包消息显示
merchant/models.py
门店和共享红包模型
merchant/views.py
门店红包视图处理
余额计算相关文件和公式
core/models/profile.py
用户余额字段定义和余额操作方法
余额扣除公式
新余额 = 当前余额 - 扣除金额
前提条件:当前余额 ≥ 扣除金额
余额增加公式
新余额 = 当前余额 + 增加金额
余额检查公式
当前余额 ≥ 操作金额 → 允许操作
红包创建相关文件和公式
red_packet/services.py
create_red_packet 方法 - 红包创建核心逻辑
red_packet/views.py
红包创建视图处理
红包创建检查
发送者余额 ≥ 红包总金额
红包创建流程
1. 扣除发送者余额 → 2. 创建红包记录 → 3. 设置剩余金额=总金额
红包过期时间
过期时间 = 创建时间 + 24小时
红包领取相关文件和公式
red_packet/services.py
receive_red_packet 方法 - 红包领取核心逻辑
red_packet/models.py
RedPacketReceive 模型 - 红包领取记录
红包领取检查
剩余金额 > 0 AND 已领取个数 < 总个数
红包领取流程
1. 计算领取金额 → 2. 更新红包状态 → 3. 增加接收者余额 → 4. 创建领取记录
红包状态更新
剩余金额 = 剩余金额 - 领取金额
已领取个数 = 已领取个数 + 1
拼手气红包相关文件和公式
red_packet/services.py
_calculate_lucky_amount 方法 - 拼手气红包计算逻辑
普通红包金额计算
金额 = 总金额 / 红包个数
拼手气红包金额计算
金额 = 随机数(最小值=0.01, 最大值=剩余人均金额×2)
最后一个红包金额
金额 = 剩余全部金额
金额约束条件
最小值 ≤ 金额 ≤ (剩余金额 - 剩余人数×0.01)
模板文件说明
core/templates/core/base.html
基础模板,显示用户余额
red_packet/templates/red_packet/create.html
创建红包页面
red_packet/templates/red_packet/detail.html
红包详情页面
red_packet/templates/red_packet/list.html
红包列表页面
chat/templates/chat/conversation_base.html
聊天基础页面,显示余额
chat/templates/chat/partials/red_packet_message.html
红包消息模板
merchant/templates/merchant/store_list.html
门店列表页面,显示余额
merchant/templates/merchant/red_packet_share.html
共享红包页面
常见问题排查指南
余额相关问题
问题 余额扣除失败
排查文件: core/models/profile.py
检查 deduct_balance 方法中的余额检查逻辑
问题 余额显示不正确
排查文件: core/templates/core/base.html
检查余额显示模板中的变量和格式化
红包创建问题
问题 无法创建红包
排查文件: red_packet/services.py
检查 create_red_packet 方法中的余额验证和红包创建逻辑
问题 红包创建后余额未扣除
排查文件: red_packet/services.py
检查事务处理是否完整,余额扣除是否成功
红包领取问题
问题 无法领取红包
排查文件: red_packet/services.py
检查 receive_red_packet 方法中的红包状态验证
问题 领取后余额未增加
排查文件: red_packet/services.py
检查领取后的余额增加逻辑和事务处理
拼手气红包问题
问题 拼手气红包金额异常
排查文件: red_packet/services.py
检查 _calculate_lucky_amount 方法中的随机算法和金额约束
问题 最后一个红包金额错误
排查文件: red_packet/services.py
检查最后一个红包的特殊处理逻辑
数据显示问题
问题 红包消息不显示
排查文件: chat/templates/chat/partials/red_packet_message.html
检查红包消息模板和数据传递
问题 红包状态显示错误
排查文件: red_packet/templates/red_packet/detail.html
检查红包详情页面中的状态显示逻辑