# 我的收益页面 - 开发任务清单 ## 📌 需求概述 实现"我的收益"功能,包含以下核心功能: 1. 收益统计展示(待提现、已提现) 2. 收益记录列表 3. 提现申请与记录 4. 收益规则说明 5. 后台赴约审核功能 --- ## 📊 收益来源说明 | 类型 | 来源 | 获得者 | 触发方式 | |------|------|--------|----------| | 佣金 | 房费10% | 发起者 | 后台员工手动添加 | | 鸽子费 | 参与者押金 | 已赴约的参与者 | 后台审核通过后自动发放 | --- ## 🗃️ 数据库修改 ### 1. 修改用户表 `CoreCmsUser` **文件**:`CoreCms.Net.Model\Entities\User\CoreCmsUser.cs` 新增字段: | 字段名 | 类型 | 说明 | |--------|------|------| | `pending_earnings` | decimal(18,2) | 待提现收益 | | `withdrawn_earnings` | decimal(18,2) | 已提现收益(历史累计) | ```csharp /// /// 待提现收益 /// [Display(Name = "待提现收益")] [SugarColumn(ColumnDescription = "待提现收益")] public System.Decimal pending_earnings { get; set; } /// /// 已提现收益(历史累计) /// [Display(Name = "已提现收益")] [SugarColumn(ColumnDescription = "已提现收益")] public System.Decimal withdrawn_earnings { get; set; } ``` ### 2. 新增收益记录表 `SQEarningsRecord` **文件**:`CoreCms.Net.Model\Entities\SQ\SQEarningsRecord.cs` | 字段名 | 类型 | 说明 | |--------|------|------| | `id` | int | 主键,自增 | | `user_id` | int | 用户ID | | `reservation_id` | int | 预约ID(可为空,手动添加时) | | `room_id` | int | 房间ID(可为空) | | `room_number` | string | 房号 | | `room_name` | string | 房名 | | `room_fee` | decimal | 房费 | | `earnings` | decimal | 收益金额 | | `type` | int | 类型:1=佣金,2=鸽子费 | | `remark` | string | 备注 | | `create_time` | datetime | 创建时间 | | `operator_id` | int | 操作员ID(后台添加时) | ### 3. 新增提现记录表 `SQWithdrawRecord` **文件**:`CoreCms.Net.Model\Entities\SQ\SQWithdrawRecord.cs` | 字段名 | 类型 | 说明 | |--------|------|------| | `id` | int | 主键,自增 | | `user_id` | int | 用户ID | | `amount` | decimal | 提现金额 | | `status` | int | 状态:0=提现中,1=已到账,2=已拒绝/取消 | | `apply_time` | datetime | 申请时间 | | `process_time` | datetime | 处理时间(可为空) | | `operator_id` | int | 处理人ID(可为空) | | `remark` | string | 备注(拒绝原因等) | --- ## 🔧 后端开发任务 ### 1. 实体层 `CoreCms.Net.Model` - [ ] 修改 `CoreCmsUser.cs`:新增 `pending_earnings`、`withdrawn_earnings` 字段 - [ ] 新建 `SQEarningsRecord.cs`:收益记录实体 - [ ] 新建 `SQWithdrawRecord.cs`:提现记录实体 ### 2. 仓储层 `CoreCms.Net.Repository` - [ ] 新建 `ISQEarningsRecordRepository.cs` - [ ] 新建 `SQEarningsRecordRepository.cs` - [ ] 新建 `ISQWithdrawRecordRepository.cs` - [ ] 新建 `SQWithdrawRecordRepository.cs` ### 3. 服务层 `CoreCms.Net.Services` - [ ] 新建 `ISQEarningsServices.cs` - [ ] 新建 `SQEarningsServices.cs` 服务方法: ```csharp // 获取收益统计 Task<(decimal pendingAmount, decimal extractedAmount)> GetEarningsSummary(int userId); // 获取收益记录列表 Task> GetEarningsRecordList(int userId, int pageIndex, int pageSize); // 获取提现记录列表 Task> GetWithdrawRecordList(int userId, int pageIndex, int pageSize); // 申请提现 Task ApplyWithdraw(int userId, decimal amount); // 添加收益(后台调用) Task AddEarnings(int userId, int reservationId, decimal roomFee, decimal earnings, int type, string remark, int operatorId); // 发放鸽子费收益(审核通过后调用) Task DistributePigeonFee(int reservationId, int operatorId); ``` ### 4. 前端API `CoreCms.Net.Web.WebApi` **文件**:`SQController.cs` 或新建 `UserEarningsController.cs` | 接口 | 方法 | 说明 | |------|------|------| | `/api/SQ/GetEarningsSummary` | GET | 获取收益统计 | | `/api/SQ/GetEarningsRule` | GET | 获取收益规则说明 | | `/api/SQ/GetEarningsRecordList` | POST | 获取收益记录列表 | | `/api/SQ/GetWithdrawRecordList` | POST | 获取提现记录列表 | | `/api/SQ/ApplyWithdraw` | POST | 申请提现 | ### 5. 后台管理 `CoreCms.Net.Web.Admin` #### 5.1 收益管理 - [ ] 新建 `SQEarningsController.cs`:收益管理控制器 - [ ] 新建 `wwwroot/views/sq/sqearnings/index.html`:收益记录列表页 - [ ] 新建 `wwwroot/views/sq/sqearnings/add.html`:手动添加收益页 功能点: - 查看所有用户的收益记录 - 手动为用户添加佣金(发起者) - 筛选:用户、时间、类型 #### 5.2 提现管理 - [ ] 新建 `SQWithdrawController.cs`:提现管理控制器 - [ ] 新建 `wwwroot/views/sq/sqwithdraw/index.html`:提现申请列表页 功能点: - 查看所有提现申请 - 同意/拒绝申请 - 标记已打款 - 筛选:状态、用户、时间 #### 5.3 赴约审核功能 ⚠️ 缺失 **文件**:修改 `SQReservationsController.cs` 或新建独立控制器 | 功能 | 说明 | |------|------| | 查看待审核列表 | `is_arrive = 2` 的参与者记录 | | 审核通过 | 将 `is_arrive` 改为 `3`,扣除鸽子费,发放给已赴约者 | | 审核拒绝 | 将 `is_arrive` 改回其他状态,退还押金 | --- ## 📝 配置项 ### 收益规则说明 需要在系统配置中新增一项配置: | 配置Key | 说明 | |---------|------| | `earnings_rule_content` | 收益规则说明内容(富文本) | 可使用现有的 `CoreCmsSetting` 表存储。 --- ## 🔄 业务流程 ### 流程1:手动添加佣金 ``` 后台员工 → 选择用户 → 输入房间信息和房费 → 系统计算佣金(10%) → 保存收益记录 → 更新用户待提现收益 ``` ### 流程2:鸽子费发放 ``` 预约完成 → 发起者标记参与者未赴约(is_arrive=2) → 后台审核(is_arrive=3) → 扣除未赴约者押金(不退) → 按比例发放给已赴约者 → 保存收益记录 → 更新用户待提现收益 ``` ### 流程3:用户提现 ``` 用户申请提现 → 生成提现记录(status=0) → 扣减待提现收益 → 后台审核 → 线下打款 → 标记已到账(status=1) → 增加已提现收益 ``` ### 流程4:提现拒绝 ``` 用户申请提现 → 生成提现记录(status=0) → 扣减待提现收益 → 后台拒绝(status=2) → 退还待提现收益 ``` --- ## ✅ 开发优先级 | 优先级 | 任务 | 预估工时 | |--------|------|----------| | P0 | 数据库表结构(实体创建) | 1h | | P0 | 仓储层和服务层基础代码 | 2h | | P1 | 前端API(5个接口) | 3h | | P1 | 后台-提现管理 | 3h | | P1 | 后台-收益管理(手动添加) | 2h | | P2 | 后台-赴约审核功能 | 3h | | P2 | 鸽子费自动发放逻辑 | 2h | --- ## 📌 注意事项 1. **金额精度**:所有金额使用 `decimal(18,2)`,保留两位小数 2. **并发控制**:提现时需要加锁,防止重复提现 3. **数据一致性**:收益增减需要同时更新收益记录表和用户表 4. **审计日志**:后台操作需要记录操作员ID和时间 5. **事务处理**:涉及多表更新的操作需要使用事务 --- ## 🗄️ SQL脚本(参考) ```sql -- 修改用户表 ALTER TABLE CoreCmsUser ADD pending_earnings decimal(18,2) NOT NULL DEFAULT 0; ALTER TABLE CoreCmsUser ADD withdrawn_earnings decimal(18,2) NOT NULL DEFAULT 0; -- 创建收益记录表 CREATE TABLE SQEarningsRecord ( id INT IDENTITY(1,1) PRIMARY KEY, user_id INT NOT NULL, reservation_id INT NULL, room_id INT NULL, room_number NVARCHAR(50) NULL, room_name NVARCHAR(100) NULL, room_fee DECIMAL(18,2) NOT NULL DEFAULT 0, earnings DECIMAL(18,2) NOT NULL DEFAULT 0, type INT NOT NULL DEFAULT 1, -- 1=佣金,2=鸽子费 remark NVARCHAR(500) NULL, create_time DATETIME NOT NULL DEFAULT GETDATE(), operator_id INT NULL ); -- 创建提现记录表 CREATE TABLE SQWithdrawRecord ( id INT IDENTITY(1,1) PRIMARY KEY, user_id INT NOT NULL, amount DECIMAL(18,2) NOT NULL, status INT NOT NULL DEFAULT 0, -- 0=提现中,1=已到账,2=已拒绝 apply_time DATETIME NOT NULL DEFAULT GETDATE(), process_time DATETIME NULL, operator_id INT NULL, remark NVARCHAR(500) NULL ); -- 创建索引 CREATE INDEX IX_SQEarningsRecord_UserId ON SQEarningsRecord(user_id); CREATE INDEX IX_SQWithdrawRecord_UserId ON SQWithdrawRecord(user_id); CREATE INDEX IX_SQWithdrawRecord_Status ON SQWithdrawRecord(status); ```