plan.md 6.2 KB

商家前端账单功能 Implementation Plan

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [x]) syntax for tracking.

Goal: 为商家前端(foodie-store)新增"财务管理"模块,包含账单查询、汇总功能,支持按门店筛选。

Architecture: 后端新增 2 个商家端账单接口(列表+汇总),修改 3 个现有账单接口增加 mdId 过滤。前端商家端新增账单管理页面,集成菜单和路由。

Tech Stack: Java / Spring Boot / MyBatis / MySQL / Vue 2 / Element UI


Technical Context

Language/Version: Java 8+, Vue 2 Primary Dependencies: RuoYi framework, MyBatis, Element UI Storage: MySQL Testing: 手动测试(项目无自动化测试框架) Target Platform: Web (商家管理后台) Project Type: Web application (前后端分离)

注意事项:

  • UserBilling 表已有 md_id 字段,无需数据库变更
  • 商家(userType=1)通过 user_id 查所有门店,可选 mdId 筛选
  • 摊位主(userType=4)通过 info_user.store_id 获取门店,仅查自己门店
  • mdId 过滤采用 (#{mdId} IS NULL OR md_id = #{mdId}) 模式,不传时查全部

Project Structure

Documentation (this feature)

specs/003-merchant-billing/
├── spec.md              # 需求文档
├── plan.md              # 本文件(实施计划)
└── tasks.md             # 任务清单

Source Code

foodie_server/
├── ruoyi-admin/src/main/java/com/ruoyi/app/pay/
│   └── UserBillingController.java                # [修改] 新增 storeBillingList、storeBillingSummary 接口
├── ruoyi-system/src/main/java/com/ruoyi/system/
│   └── mapper/
│       └── UserBillingMapper.java                # [修改] SQL 增加 mdId 过滤条件

foodie-store/                                     # 商家前端
├── src/
│   ├── api/billing.js                            # [新建] 账单 API
│   ├── views/
│   │   └── BillingManage.vue                     # [新建] 账单管理页面
│   ├── components/
│   │   └── Aside.vue                             # [修改] 侧边栏菜单
│   └── router/index.js                           # [修改] 路由配置

Tasks

Task 1: 后端 — 新增 storeBillingList 接口

Files:

  • Modify: ruoyi-admin/src/main/java/com/ruoyi/app/pay/UserBillingController.java

  • [x] Step 1: 实现 storeBillingList 方法

在 UserBillingController 中新增 GET /billing/storeBillingList 接口:

  • 参数:mdId(可选)、type(可选)、startDate/endDate(可选)、pageNum/pageSize
  • 权限逻辑:userType=1 按 user_id 查询,userType=4 按 store_id 查询
  • 返回分页账单列表 + 门店信息

  • [x] Step 2: 验证

使用 Postman 测试不同 userType 的查询结果。


Task 2: 后端 — 新增 storeBillingSummary 接口

Files:

  • Modify: ruoyi-admin/src/main/java/com/ruoyi/app/pay/UserBillingController.java

  • [x] Step 1: 实现 storeBillingSummary 方法

在 UserBillingController 中新增 GET /billing/storeBillingSummary 接口:

  • 参数同 storeBillingList
  • 返回 { totalAmount, totalDivvy, netIncome }

  • [x] Step 2: 验证

测试汇总数据是否正确。


Task 3: 后端 — 修改 getzddaylist 增加 mdId 过滤

Files:

  • Modify: ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserBillingMapper.java

  • [x] Step 1: getdaylist SQL 增加 mdId 条件

添加 (#{mdId} IS NULL OR md_id = #{mdId})

  • Step 2: getdaysum SQL 增加 mdId 条件

添加 (#{mdId} IS NULL OR md_id = #{mdId})

  • Step 3: getShDaysum SQL 增加 mdId 条件

添加 (#{mdId} IS NULL OR b.md_id = #{mdId})

  • Step 4: 验证

测试传入/不传 mdId 的查询结果。


Task 4: 后端 — 修改 getzdmeeklist 增加 mdId 过滤

Files:

  • Modify: ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserBillingMapper.java

  • [x] Step 1: getmeeklist SQL 增加 mdId 条件

添加 (#{mdId} IS NULL OR md_id = #{mdId})

  • Step 2: getmeeksum SQL 增加 mdId 条件

添加 (#{mdId} IS NULL OR md_id = #{mdId})

  • Step 3: getShMeeksum SQL 增加 mdId 条件

添加 (#{mdId} IS NULL OR b.md_id = #{mdId})

  • Step 4: 验证

测试传入/不传 mdId 的查询结果。


Task 5: 后端 — 修改 getzdmatlist 增加 mdId 过滤

Files:

  • Modify: ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserBillingMapper.java

  • [x] Step 1: getmatlist SQL 增加 mdId 条件

添加 (#{mdId} IS NULL OR md_id = #{mdId})

  • Step 2: getmatsum SQL 增加 mdId 条件

添加 (#{mdId} IS NULL OR md_id = #{mdId})

  • Step 3: getshMonthsum SQL 增加 mdId 条件

添加 (#{mdId} IS NULL OR b.md_id = #{mdId})

  • Step 4: 验证

测试传入/不传 mdId 的查询结果。


Task 6: 前端 — 账单管理 API 层

Files:

  • Create: E:\QtwCode\foodie\foodie-store\src\api\billing.js

  • [x] Step 1: 创建 billing.js

提供 API 方法:getStoreBillingList、getStoreBillingSummary


Task 7: 前端 — 账单管理页面

Files:

  • Create: E:\QtwCode\foodie\foodie-store\src\views\BillingManage.vue
  • Modify: E:\QtwCode\foodie\foodie-store\src\router\index.js
  • Modify: E:\QtwCode\foodie\foodie-store\src\components\Aside.vue

  • [x] Step 1: 创建 BillingManage.vue 页面

页面包含:

  1. 筛选条件(门店选择、账单类型、时间范围)
  2. 汇总区域(总金额、总抽成、净收入)
  3. 账单列表表格(订单号、类型、金额、抽成、净收入、门店、状态、时间、说明)
  4. 分页
  • [x] Step 2: 修改 router/index.js 添加账单管理路由

  • [x] Step 3: 修改 Aside.vue 添加「财务管理 > 账单管理」菜单项

  • [x] Step 4: 验证

启动前端,登录商家账号,验证账单管理页面功能正常。


Task 8: 提交与收尾

  • [x] Step 1: 更新 spec.md 记录实现状态

  • [x] Step 2: 提交代码

    git commit -m "feat(billing): 商家端账单功能 — 列表查询、汇总、mdId 过滤"