红包功能文件目录结构

以下是红包功能涉及的所有核心文件和目录:

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

检查红包详情页面中的状态显示逻辑