2026-04-30-merchant-billing-mdid-filter.md 15 KB

商家账单日/周/月查询增加 mdId 过滤 实现计划

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 (- [ ]) syntax for tracking.

Goal:getzddaylistgetzdmeeklistgetzdmatlist 三个接口增加可选的 mdId 门店过滤参数。

Architecture: 在 Controller 层接收可选参数 mdId,传入 Mapper 层 SQL。利用 #{mdId} IS NULL OR md_id = #{mdId} 模式在 @Select 注解中实现动态过滤,无需改用 XML。同时更新对应的统计查询(getdaysum/getmeeksum/getmatsumgetShDaysum/getShMeeksum/getshMonthsum),保证列表和汇总数据一致。

Tech Stack: Java, Spring Boot, MyBatis Plus, MySQL


涉及文件

文件 操作 说明
ruoyi-admin/src/main/java/com/ruoyi/app/pay/UserBillingController.java 修改 3 个接口方法增加 mdId 参数
ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserBillingMapper.java 修改 6 个 @Select SQL 增加 mdId 条件

Task 1: Mapper 层 — 修改日账单相关 SQL

Files:

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

  • [ ] Step 1: 修改 getdaylist 方法 — 增加 mdId 参数和 SQL 条件

将方法签名从:

List<UserBilling> getdaylist(@Param("shid") Long shid, @Param("riqi") String riqi,@Param("page") Long page,@Param("size") Long size);

改为:

List<UserBilling> getdaylist(@Param("shid") Long shid, @Param("riqi") String riqi, @Param("mdId") Long mdId, @Param("page") Long page, @Param("size") Long size);

SQL 从:

SELECT * FROM user_billing WHERE type=0 and user_id=#{shid} and date_format (cretim,'%Y-%m-%d %H:%i:%s') >= date_format (CONCAT(#{riqi}, ' 00:00:00'),'%Y-%m-%d %H:%i:%s') and date_format (cretim,'%Y-%m-%d %H:%i:%s') <= date_format (CONCAT(#{riqi}, ' 23:59:59'),'%Y-%m-%d %H:%i:%s') ORDER BY id desc limit #{page},#{size}

改为:

SELECT * FROM user_billing WHERE type=0 and user_id=#{shid} and (#{mdId} IS NULL OR md_id = #{mdId}) and date_format (cretim,'%Y-%m-%d %H:%i:%s') >= date_format (CONCAT(#{riqi}, ' 00:00:00'),'%Y-%m-%d %H:%i:%s') and date_format (cretim,'%Y-%m-%d %H:%i:%s') <= date_format (CONCAT(#{riqi}, ' 23:59:59'),'%Y-%m-%d %H:%i:%s') ORDER BY id desc limit #{page},#{size}
  • Step 2: 修改 getdaysum 方法 — 增加 mdId 参数和 SQL 条件

方法签名增加 @Param("mdId") Long mdId,SQL 在 user_id=#{shid} 后增加 and (#{mdId} IS NULL OR md_id = #{mdId})

原 SQL:

SELECT IFNULL(COUNT(1),0) AS sul,IFNULL(SUM(amount),0) AS shouru,IFNULL(SUM(divvy),0) AS commission,IFNULL(SUM(tax),0) AS tax,IFNULL(SUM(behalf_amount),0) AS behalfAmount FROM user_billing WHERE type=0 and user_id=#{shid} and date_format (cretim,'%Y-%m-%d %H:%i:%s') >= date_format (CONCAT(#{riqi}, ' 00:00:00'),'%Y-%m-%d %H:%i:%s') and date_format (cretim,'%Y-%m-%d %H:%i:%s') <= date_format (CONCAT(#{riqi}, ' 23:59:59'),'%Y-%m-%d %H:%i:%s') and state=0

改为:

SELECT IFNULL(COUNT(1),0) AS sul,IFNULL(SUM(amount),0) AS shouru,IFNULL(SUM(divvy),0) AS commission,IFNULL(SUM(tax),0) AS tax,IFNULL(SUM(behalf_amount),0) AS behalfAmount FROM user_billing WHERE type=0 and user_id=#{shid} and (#{mdId} IS NULL OR md_id = #{mdId}) and date_format (cretim,'%Y-%m-%d %H:%i:%s') >= date_format (CONCAT(#{riqi}, ' 00:00:00'),'%Y-%m-%d %H:%i:%s') and date_format (cretim,'%Y-%m-%d %H:%i:%s') <= date_format (CONCAT(#{riqi}, ' 23:59:59'),'%Y-%m-%d %H:%i:%s') and state=0
  • Step 3: 修改 getShDaysum 方法 — 增加 mdId 参数和 SQL 条件

方法签名增加 @Param("mdId") Long mdId,SQL 在 b.user_id=#{shid} 后增加 and (#{mdId} IS NULL OR b.md_id = #{mdId})

原 SQL:

SELECT IFNULL(SUM(o.food_amount),0) AS foodAmount,IFNULL(SUM(o.md_discount_amount),0)+IFNULL(SUM(o.md_sales_reduction),0) as shYh  FROM user_billing b left join pos_order o on b.dd_id=o.dd_id WHERE b.type=0 and b.user_id=#{shid} and date_format (b.cretim,'%Y-%m-%d %H:%i:%s') >= date_format (CONCAT(#{riqi}, ' 00:00:00'),'%Y-%m-%d %H:%i:%s') and date_format (b.cretim,'%Y-%m-%d %H:%i:%s') <= date_format (CONCAT(#{riqi}, ' 23:59:59'),'%Y-%m-%d %H:%i:%s')

改为:

SELECT IFNULL(SUM(o.food_amount),0) AS foodAmount,IFNULL(SUM(o.md_discount_amount),0)+IFNULL(SUM(o.md_sales_reduction),0) as shYh  FROM user_billing b left join pos_order o on b.dd_id=o.dd_id WHERE b.type=0 and b.user_id=#{shid} and (#{mdId} IS NULL OR b.md_id = #{mdId}) and date_format (b.cretim,'%Y-%m-%d %H:%i:%s') >= date_format (CONCAT(#{riqi}, ' 00:00:00'),'%Y-%m-%d %H:%i:%s') and date_format (b.cretim,'%Y-%m-%d %H:%i:%s') <= date_format (CONCAT(#{riqi}, ' 23:59:59'),'%Y-%m-%d %H:%i:%s')
  • [ ] Step 4: Commit

    git add ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserBillingMapper.java
    git commit -m "feat(billing): 日账单 mapper 增加 mdId 可选过滤"
    

Task 2: Mapper 层 — 修改周账单相关 SQL

Files:

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

  • [ ] Step 1: 修改 getmeeklist 方法 — 增加 mdId 参数和 SQL 条件

方法签名增加 @Param("mdId") Long mdId,SQL 在 user_id=#{shid} 后增加 and (#{mdId} IS NULL OR md_id = #{mdId})

原 SQL:

SELECT * FROM user_billing WHERE type=0 and user_id=#{shid} and WEEK(cretim) = WEEK(#{riqi}) and  YEAR(cretim) = YEAR(#{riqi}) ORDER BY id desc limit #{page},#{size}

改为:

SELECT * FROM user_billing WHERE type=0 and user_id=#{shid} and (#{mdId} IS NULL OR md_id = #{mdId}) and WEEK(cretim) = WEEK(#{riqi}) and  YEAR(cretim) = YEAR(#{riqi}) ORDER BY id desc limit #{page},#{size}
  • Step 2: 修改 getmeeksum 方法 — 增加 mdId 参数和 SQL 条件

方法签名增加 @Param("mdId") Long mdId,SQL 在 user_id=#{shid} 后增加 and (#{mdId} IS NULL OR md_id = #{mdId})

原 SQL:

SELECT IFNULL(COUNT(1),0) AS sul,IFNULL(SUM(amount),0) AS shouru ,IFNULL(SUM(divvy),0) AS commission,IFNULL(SUM(tax),0) AS tax,IFNULL(SUM(behalf_amount),0) AS behalfAmount FROM user_billing WHERE type=0 and user_id=#{shid} and  WEEK(cretim) = WEEK(#{riqi}) and  YEAR(cretim) = YEAR(#{riqi}) and state=0

改为:

SELECT IFNULL(COUNT(1),0) AS sul,IFNULL(SUM(amount),0) AS shouru ,IFNULL(SUM(divvy),0) AS commission,IFNULL(SUM(tax),0) AS tax,IFNULL(SUM(behalf_amount),0) AS behalfAmount FROM user_billing WHERE type=0 and user_id=#{shid} and (#{mdId} IS NULL OR md_id = #{mdId}) and  WEEK(cretim) = WEEK(#{riqi}) and  YEAR(cretim) = YEAR(#{riqi}) and state=0
  • Step 3: 修改 getShMeeksum 方法 — 增加 mdId 参数和 SQL 条件

方法签名增加 @Param("mdId") Long mdId,SQL 在 b.user_id=#{shid} 后增加 and (#{mdId} IS NULL OR b.md_id = #{mdId})

原 SQL:

SELECT IFNULL(SUM(o.food_amount),0) AS foodAmount,IFNULL(SUM(o.md_discount_amount),0)+IFNULL(SUM(o.md_sales_reduction),0) as shYh  FROM user_billing b left join pos_order o on b.dd_id=o.dd_id WHERE b.type=0 and b.user_id=#{shid} and  WEEK(b.cretim) = WEEK(#{riqi}) and  YEAR(b.cretim) = YEAR(#{riqi}) and b.state=0

改为:

SELECT IFNULL(SUM(o.food_amount),0) AS foodAmount,IFNULL(SUM(o.md_discount_amount),0)+IFNULL(SUM(o.md_sales_reduction),0) as shYh  FROM user_billing b left join pos_order o on b.dd_id=o.dd_id WHERE b.type=0 and b.user_id=#{shid} and (#{mdId} IS NULL OR b.md_id = #{mdId}) and  WEEK(b.cretim) = WEEK(#{riqi}) and  YEAR(b.cretim) = YEAR(#{riqi}) and b.state=0
  • [ ] Step 4: Commit

    git add ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserBillingMapper.java
    git commit -m "feat(billing): 周账单 mapper 增加 mdId 可选过滤"
    

Task 3: Mapper 层 — 修改月账单相关 SQL

Files:

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

  • [ ] Step 1: 修改 getmatlist 方法 — 增加 mdId 参数和 SQL 条件

方法签名增加 @Param("mdId") Long mdId,SQL 在 user_id=#{shid} 后增加 and (#{mdId} IS NULL OR md_id = #{mdId})

原 SQL:

SELECT * FROM user_billing WHERE type=0 and user_id=#{shid} and DATE_FORMAT(cretim, '%Y-%m') = #{riqi}  ORDER BY id desc limit #{page},#{size}

改为:

SELECT * FROM user_billing WHERE type=0 and user_id=#{shid} and (#{mdId} IS NULL OR md_id = #{mdId}) and DATE_FORMAT(cretim, '%Y-%m') = #{riqi}  ORDER BY id desc limit #{page},#{size}
  • Step 2: 修改 getmatsum 方法 — 增加 mdId 参数和 SQL 条件

方法签名增加 @Param("mdId") Long mdId,SQL 在 user_id=#{shid} 后增加 and (#{mdId} IS NULL OR md_id = #{mdId})

原 SQL:

SELECT IFNULL(COUNT(1),0) AS sul,IFNULL(SUM(amount),0) AS shouru ,IFNULL(SUM(divvy),0) AS commission,IFNULL(SUM(tax),0) AS tax,IFNULL(SUM(behalf_amount),0) AS behalfAmount FROM user_billing WHERE type=0 and user_id=#{shid} and DATE_FORMAT(cretim, '%Y-%m') = #{riqi} and state=0

改为:

SELECT IFNULL(COUNT(1),0) AS sul,IFNULL(SUM(amount),0) AS shouru ,IFNULL(SUM(divvy),0) AS commission,IFNULL(SUM(tax),0) AS tax,IFNULL(SUM(behalf_amount),0) AS behalfAmount FROM user_billing WHERE type=0 and user_id=#{shid} and (#{mdId} IS NULL OR md_id = #{mdId}) and DATE_FORMAT(cretim, '%Y-%m') = #{riqi} and state=0
  • Step 3: 修改 getshMonthsum 方法 — 增加 mdId 参数和 SQL 条件

方法签名增加 @Param("mdId") Long mdId,SQL 在 b.user_id=#{shid} 后增加 and (#{mdId} IS NULL OR b.md_id = #{mdId})

原 SQL:

SELECT IFNULL(SUM(o.food_amount),0) AS foodAmount,IFNULL(SUM(o.md_discount_amount),0)+IFNULL(SUM(o.md_sales_reduction),0) as shYh  FROM user_billing b left join pos_order o on b.dd_id=o.dd_id WHERE b.type=0 and b.user_id=#{shid} and DATE_FORMAT(b.cretim, '%Y-%m') = #{riqi} and b.state=0

改为:

SELECT IFNULL(SUM(o.food_amount),0) AS foodAmount,IFNULL(SUM(o.md_discount_amount),0)+IFNULL(SUM(o.md_sales_reduction),0) as shYh  FROM user_billing b left join pos_order o on b.dd_id=o.dd_id WHERE b.type=0 and b.user_id=#{shid} and (#{mdId} IS NULL OR b.md_id = #{mdId}) and DATE_FORMAT(b.cretim, '%Y-%m') = #{riqi} and b.state=0
  • [ ] Step 4: Commit

    git add ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserBillingMapper.java
    git commit -m "feat(billing): 月账单 mapper 增加 mdId 可选过滤"
    

Task 4: Controller 层 — 三个接口方法增加 mdId 参数

Files:

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

  • [ ] Step 1: 修改 getzddaylist 方法

在方法签名中增加 @RequestParam(required = false) Long mdId 参数,并在调用 mapper 时传入 mdId

修改前:

public AjaxResult getzddaylist(@RequestHeader String token,
                               @RequestParam Long page,
                               @RequestParam Long size,
                               @RequestParam String riqi,
                               @RequestParam(required = false) Boolean isCancel
) {

修改后:

public AjaxResult getzddaylist(@RequestHeader String token,
                               @RequestParam Long page,
                               @RequestParam Long size,
                               @RequestParam String riqi,
                               @RequestParam(required = false) Boolean isCancel,
                               @RequestParam(required = false) Long mdId
) {

调用 mapper 处,将 null 改为 mdId

// 原:List<UserBilling> list = userBillingMapper.getdaylist(id, riqi, (page - 1) * size, size);
List<UserBilling> list = userBillingMapper.getdaylist(id, riqi, mdId, (page - 1) * size, size);
// 原:BillDTO sum = userBillingMapper.getdaysum(id, riqi);
BillDTO sum = userBillingMapper.getdaysum(id, riqi, mdId);

以及商户统计处:

// 原:ShBillingDto shBillingDto = userBillingMapper.getShDaysum(id, riqi);
ShBillingDto shBillingDto = userBillingMapper.getShDaysum(id, riqi, mdId);
  • Step 2: 修改 getzdmeeklist 方法

在方法签名中增加 @RequestParam(required = false) Long mdId 参数:

public AjaxResult getzdmeeklist(@RequestHeader String token,
                                @RequestParam Long page,
                                @RequestParam Long size,
                                @RequestParam String riqi,
                                @RequestParam(required = false) Boolean isCancel,
                                @RequestParam(required = false) Long mdId) {

调用 mapper 处传入 mdId

List<UserBilling> list = userBillingMapper.getmeeklist(id, riqi, mdId, (page - 1) * size, size);
BillDTO sum = userBillingMapper.getmeeksum(id, riqi, mdId);

以及商户统计处:

ShBillingDto shBillingDto = userBillingMapper.getShMeeksum(id, riqi, mdId);
  • Step 3: 修改 getzdmatlist 方法

在方法签名中增加 @RequestParam(required = false) Long mdId 参数:

public AjaxResult getzdmatlist(@RequestHeader String token,
                               @RequestParam Long page,
                               @RequestParam Long size,
                               @RequestParam String riqi,
                               @RequestParam(required = false) Boolean isCancel,
                               @RequestParam(required = false) Long mdId) {

调用 mapper 处传入 mdId

List<UserBilling> list = userBillingMapper.getmatlist(id, riqi, mdId, (page - 1) * size, size);
BillDTO sum = userBillingMapper.getmatsum(id, riqi, mdId);

以及商户统计处:

ShBillingDto shBillingDto = userBillingMapper.getshMonthsum(id, riqi, mdId);
  • [ ] Step 4: Commit

    git add ruoyi-admin/src/main/java/com/ruoyi/app/pay/UserBillingController.java
    git commit -m "feat(billing): 日/周/月账单接口增加 mdId 可选过滤参数"
    

Self-Review

Spec coverage:

  • spec 要求 getdaylistgetmeeklistgetmatlist 增加 mdId 过滤 -> Task 1/2/3 (mapper) + Task 4 (controller) 覆盖
  • mdId 为非必需参数 -> 所有 SQL 使用 (#{mdId} IS NULL OR md_id = #{mdId}) 模式,mdId 为 null 时不影响原逻辑

Placeholder scan: 无 TBD/TODO,所有 SQL 和代码均完整提供。

Type consistency: 所有 mapper 方法 mdId 参数类型为 Long,与 controller @RequestParamUserBilling.mdId 字段类型一致。

Note: 取消订单列表(getDayCancleOrderList/getWeekCancleOrderList/getMonthCancleOrderList)查询的是 pos_order 表而非 user_billing 表,spec 未要求对其增加 mdId 过滤,因此不在本次范围内。