tasks.md 13 KB


description: "Task list for 商家前端账单功能 feature implementation"

Tasks: 商家前端账单功能

Input: Design documents from specs/003-merchant-billing/ Prerequisites: plan.md, spec.md

Tests: 手动测试(项目无自动化测试框架)

Organization: Tasks are grouped by backend API changes and frontend implementation.

Format: [ID] [P?] [Story] Description

  • [P]: Can run in parallel (different files, no dependencies)
  • [Story]: Which phase this task belongs to (BE=后端, FE=前端)
  • Include exact file paths in descriptions

Phase 1: 后端 — 新增商家端账单接口

Purpose: 新增商家端专用的账单列表和汇总接口

  • [x] T001 [BE] UserBillingController.java 新增 storeBillingList 方法 — ruoyi-admin/src/main/java/com/ruoyi/app/pay/UserBillingController.java

    • GET /billing/storeBillingList
    • 支持 mdId、type、startDate、endDate 筛选
    • userType=1 按 user_id 查,userType=4 按 store_id 查
    • 返回分页账单列表 + 门店信息
  • [x] T002 [BE] UserBillingController.java 新增 storeBillingSummary 方法 — ruoyi-admin/src/main/java/com/ruoyi/app/pay/UserBillingController.java

    • GET /billing/storeBillingSummary
    • 参数同 storeBillingList
    • 返回 { totalAmount, totalDivvy, netIncome }

Checkpoint: 商家端账单列表和汇总接口可用


Phase 2: 后端 — 现有账单接口增加 mdId 过滤

Purpose: 修改日/周/月账单接口,支持按门店筛选

  • [x] T003 [P] [BE] UserBillingMapper.getdaylist / getdaysum / getShDaysum 增加 mdId 过滤条件 — ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserBillingMapper.java

    • SQL: (#{mdId} IS NULL OR md_id = #{mdId})
    • join 查询使用 b.md_id
  • [x] T004 [P] [BE] UserBillingMapper.getmeeklist / getmeeksum / getShMeeksum 增加 mdId 过滤条件 — ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserBillingMapper.java

    • SQL: (#{mdId} IS NULL OR md_id = #{mdId})
    • join 查询使用 b.md_id
  • [x] T005 [P] [BE] UserBillingMapper.getmatlist / getmatsum / getshMonthsum 增加 mdId 过滤条件 — ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserBillingMapper.java

    • SQL: (#{mdId} IS NULL OR md_id = #{mdId})
    • join 查询使用 b.md_id

Checkpoint: 所有账单接口支持 mdId 可选过滤


Phase 3: 前端 — 账单管理页面

Purpose: 商家前端新增财务管理模块和账单管理页面

  • [x] T006 [P] [FE] 创建 billing.js API 层 — foodie-store/src/api/billing.js

    • getStoreBillingList(params)
    • getStoreBillingSummary(params)
  • [x] T007 [FE] 创建 BillingManage.vue 账单管理页面 — foodie-store/src/views/BillingManage.vue

    • 筛选条件:门店选择、账单类型、时间范围
    • 汇总区域:总金额、总抽成、净收入
    • 账单列表表格 + 分页
    • 权限区分:商家可选门店,摊位主自动限定
  • [x] T008 [FE] router/index.js 添加账单管理路由 — foodie-store/src/router/index.js

  • [x] T009 [FE] Aside.vue 添加「财务管理 > 账单管理」菜单项 — foodie-store/src/components/Aside.vue

Checkpoint: 商家登录 → 财务管理 → 账单管理 → 筛选查看账单


Phase 4: 收尾

Purpose: 文档更新和代码提交

  • T010 更新 spec.md 记录实现状态和涉及文件
  • T011 补充 plan.md 和 tasks.md 文档
  • T012 提交代码: git commit -m "feat(billing): 商家端账单功能 — 列表查询、汇总、mdId 过滤"

Dependencies & Execution Order

Phase Dependencies

  • Phase 1 (新增接口): 无依赖,立即开始
  • Phase 2 (mdId 过滤): 无依赖,可与 Phase 1 并行
  • Phase 3 (前端页面): 依赖 Phase 1 完成(前端需要调用新增接口)
  • Phase 4 (收尾): 依赖所有 Phase 完成

Parallel Opportunities

  • Phase 1 和 Phase 2 可并行(不同接口,独立修改)
  • T006 可与 T007 并行(API 层和页面可同时开发)
  • T003, T004, T005 可并行(修改不同 SQL 方法组)

Notes

  • 无数据库 Schema 变更(UserBilling 已有 md_id 字段)
  • mdId 过滤采用 (#{mdId} IS NULL OR md_id = #{mdId}) 模式,不传时查全部
  • 前端日/周/月账单明细页(getzddaylist / getzdmeeklist / getzdmatlist)尚未在前端实现,仅后端接口已就绪

2026-11-04 取消平台抽成及骑手税费

  • T013 商家及摊位商品收入不扣抽成,保留原有优惠、免运基数及钱包归属。
  • T014 骑手运费不扣抽成和税费;账单明细保存零费率,当前费率接口归零,历史汇总不改写。
  • T015 完成定向回归、后端打包及关联规格同步,无数据库迁移和历史回写。

验证记录(2026-11-04):旧实现定向测试 9 项中 7 项按预期失败;修复后 JDK 21 执行上述 6 个测试类共 55 项全部通过,Maven ruoyi-admin 及依赖模块 package 成功,git diff --check 通过。未执行真实数据库入账、支付渠道或 App 联调,未部署。无数据库变更,不回写历史账单。

2026-11-04 客户端共用字典接口

  • T016 新增按dictType查询的共用接口,支持商家/用户token与任意类型,返回启用项精简字段。
  • T017 补齐参数国际化与接口契约测试。
  • T018 运行字典与认证定向回归及JDK21构建,记录结果。

验证:JDK21执行 mvn -q -pl ruoyi-admin -am -Dtest=AppDictControllerTest,AuthAspectTest -Dsurefire.failIfNoSpecifiedTests=false package,退出码0,11项测试通过(字典6、认证5),失败/错误/跳过均0;差异检查通过。日志 ruoyi-admin/target/app-dict-query.log。未修改客户端页面,未进行线上字典联调、全量回归或部署;提交状态以 Git 记录为准。

2026-11-04 分管账号账单查询权限

  • T019 列表与汇总支持分管账号实时授权门店,并限制主账号归属;未授权/空授权安全处理。
  • T020 日期参数绑定与旧角色、门店权限回归,补齐003/022文档并构建后端。

验证记录:修复前18项定向测试中12项失败,复现分管账号被拒绝;修复后 JDK21 执行 mvn -q -pl ruoyi-admin -am -Dtest=StoreBillingSubaccountAccessTest,MerchantStoreAccessServiceTest,UserBillingFlashDeliveryTest,OrderBillingNoDeductionTest -Dsurefire.failIfNoSpecifiedTests=false package,40项全部通过,模块打包成功。git diff --check通过。日志 ruoyi-admin/target/store-billing-access-red.log / store-billing-access-green.log。无数据库变更,未执行线上账号/App联调、部署或全量回归,提交状态以Git为准。

  • T021 补齐分管旧日/周/月账单及取消统计的实时授权范围,执行控制器与 SQL 回归,保留骑手原账单行为。验证结果与022 T015共用。

T021验证:022 T015所列JDK21定向回归144项全部通过,模块package成功,差异检查通过。分管旧账单控制器12项、SQL范围测试1项,以及既有商家/骑手账单回归均包含在内。无数据库变更,未部署;提交与推送状态以 Git 记录为准。

2026-11-05 骑手收入账单改版

  • T028 写入已确认规格与实现计划,确认仅后端和接入文档,不创建分支。
  • T029 新增 Mapper、金额投影与 SQL 实际执行测试,统一范围、日期和分类口径。
  • T030 新增骑手专用接口与服务、参数国际化校验、固定汇总和受权限保护的单笔详情。
  • T031 补充 App 接入文档及示例,验证不返回钱包/提现/小费分项。
  • [x] T032 运行定向回归、JDK21 打包和差异/换行检查,记录结果与未执行项目。

  • [x] T033 补充全部时间查询,默认今日,验证全历史收入/分页/日期互斥并同步契约。

验证记录(2026-11-05):spec-kit check-prerequisites.ps1 -Json -RequireTasks -IncludeTasks 通过,使用现有 003 规格增量。本次直接在原分支修改,临时源码副本隔离 Maven 产物;未创建分支。首次 4 项 SQL 测试因 Mapper 缺失失败;全部时间扩展另有 2 项红灯,分别复现日期条件导致累计收入为 0、Service 拒绝 ALL。最终 JDK 21.0.12 执行:

mvn -q -pl ruoyi-admin -am -Dtest=RiderIncomeMapperTest,RiderIncomeServiceTest,RiderIncomeControllerTest,UserBillingFlashDeliveryTest,OrderBillingNoDeductionTest,AuthAspectTest -Dsurefire.failIfNoSpecifiedTests=false package

37 项全部通过(SQL 5、Service 10、Controller 3、旧闪送账单 9、无抽成结算 5、认证 5),失败/错误/跳过均 0,Maven package 退出码 0。SQL 在 H2 MySQL 兼容模式实际执行。校验临时副本与交付源码相同,六份国际化文件的新 key 齐全且唯一,差异检查通过;独立只读评审未发现重要问题。

日志:ruoyi-admin/target/rider-income-red.log、rider-income-all-red.log、rider-income-green.log。未执行生产 MySQL 查询/性能验证、真实账号与 App 联调、全量回归或部署;没有数据库迁移/历史回写,没有提交或推送,因此无本次提交 SHA。当前交付为后端及 rider-income-api.md,App 由调用方接入。

  • T034 按截图增加本周七天、最近五周、最近五月日期选项和默认选中信息,补齐跨年/闰年测试及 App 契约并验证。

T034 验证(2026-11-05):旧响应缺少 periodOptions 的 5 项测试按预期失败;补齐实现及固定 Clock 边界用例后,JDK21 执行 mvn -q -pl ruoyi-admin -am -Dtest=RiderIncomePeriodOptionsTest,RiderIncomeMapperTest,RiderIncomeServiceTest,RiderIncomeControllerTest,UserBillingFlashDeliveryTest,OrderBillingNoDeductionTest,AuthAspectTest -Dsurefire.failIfNoSpecifiedTests=false package,45 项全部通过(日期选项 8 项),失败/错误/跳过均 0,package 退出码 0。独立只读复审未发现重要问题,API 示例 JSON 及日期选中项检查通过,验证源码与工作区一致,git diff --check 通过。

日志:ruoyi-admin/target/rider-income-period-options-red.log、rider-income-period-options-green.log。本次仅后端响应及 spec-kit/接入文档;没有创建分支、提交、推送、数据库迁移或部署。未做 App 实机联调、生产 MySQL 与全量回归;无本次提交 SHA。

最终职责调整:前端计算日期、后端只查范围(2026-11-05)

T033/T034 中 period=ALL 与后端日期选项实现已被本节替代;前期测试记录仅作过程证据,不作为最终契约。

  • T035 将接口改为 startTime/endTime 成对完整时间查询(yyyy-MM-dd HH:mm:ss,闭区间),无范围查询全部历史;移除后端周期选择计算与 DTO,不再补零点或换算结束日期。
  • T036 更新范围/Controller 回归、六份国际化文案和 App 接入说明,运行定向回归与模块打包,记录最终验证。

用户最终补充:前端发送日期开始/结束的完整时分秒,例如 2026-11-05 00:00:00 至 2026-11-05 23:59:59;仅日期的中间实现已撤回。时间闭区间实际SQL回归覆盖末秒与起止时刻相等场景。

T035/T036 最终验证(2026-11-05):仅日期的中间实现已撤回,最终采用 startTime/endTime 秒精度闭区间。SQL 红灯 6 项中 3 项按预期失败,复现结束时刻账单遗漏及相同时刻查询为空;修复后 JDK21 执行 mvn -q -pl ruoyi-admin -am -Dtest=RiderIncomeMapperTest,RiderIncomeServiceTest,RiderIncomeControllerTest,UserBillingFlashDeliveryTest,OrderBillingNoDeductionTest,AuthAspectTest -Dsurefire.failIfNoSpecifiedTests=false package,38 项全部通过(SQL 6、Service 10、Controller 3、旧闪送账单 9、无抽成结算 5、认证 5),失败/错误/跳过均0,package退出码0。

独立复审指出的两处旧 Controller 验证参数已修正,最终复审无重要问题。源码与临时验证副本一致,API示例JSON及差异检查通过。日志:ruoyi-admin/target/rider-income-time-range-red.log、rider-income-time-range-green.log。未执行生产MySQL/性能、App实机联调、全量回归或部署;未创建分支、提交、推送或数据库迁移,无本次提交SHA。

直接使用账单订单号(2026-11-05)

  • T037 去掉骑手账单查询的订单主表关联与 orderId,使用 orderSource + orderNo 跳转既有骑手详情,更新接入文档并验证仅依赖账单表的查询和响应契约。

T037 验证(2026-11-05):响应契约测试先出现预期失败(仍含 orderId,7 字段而非6字段);删除投影字段及订单主表子查询后,JDK21 执行 mvn -q -pl ruoyi-admin -am -Dtest=RiderIncomeMapperTest,RiderIncomeServiceTest,RiderIncomeControllerTest -Dsurefire.failIfNoSpecifiedTests=false package,19项通过(SQL6、Service10、Controller3),失败/错误/跳过均0,package退出码0。SQL用例仅建立 user_billing 表,验证账单读取无需订单主表;JSON示例与工作区测试源码核对通过,git diff --check通过。未进行真实MySQL性能测试、App联调、完整回归或部署;未创建分支、提交或推送。

提交前验证(2026-11-05):按用户 commit push 指令,仅暂存骑手账单代码、测试、六份语言文件的骑手提示和003规格增量,共20个文件;整数运费、旧接口删除等其他工作区改动不纳入。从暂存区导出独立源码副本,JDK21执行T035/T036所列6类定向测试及package,38项全部通过,失败/错误/跳过均0,打包退出码0。暂存差异检查通过。未执行App联调、真实MySQL性能测试、完整回归或部署;实际提交及推送结果以Git记录为准。