平台管理后台已有账单管理页面(Billing/billing/index),但商家前端(foodie-store)缺少账单功能。需要为商家前端新增"财务管理"模块,包含账单查询功能。
| userType | 角色 | 账单可见范围 |
|---|---|---|
| 1 | 商家 | 自己名下所有门店的账单(user_id 查询,可选按 mdId 筛选) |
| 4 | 摊位主/门店 | 仅自己关联门店的账单(md_id 过滤) |
| 5 | 商家分管账号 | 所属主账号下当前授权门店的账单,列表与汇总范围一致 |
已有 md_id 字段,账单记录创建时会写入门店 ID。
| type | 含义 |
|---|---|
| 0 | 分成(收入) |
| 1 | 充值 |
| 2 | 提现 |
| 3 | 消费 |
| 4 | 金额冻结 |
| 5 | 金额解冻 |
| 6 | 抽成返还 |
| state | 含义 |
|---|---|
| 0 | 完成 |
| 1 | 退回 |
| 2 | 作废 |
| 3 | 未支付 |
参数:
mdId(可选)— 按门店筛选type(可选)— 账单类型startDate / endDate(可选)— 时间范围pageNum / pageSize — 分页权限逻辑:
user_billing WHERE user_id = 当前用户,可选按 mdId 筛选info_user.store_id 获取门店 → 查 user_billing WHERE md_id = 门店ID返回:分页账单列表 + 门店信息
参数同上。
返回:{ totalAmount, totalDivvy, netIncome }
现有 getzddaylist、getzdmeeklist、getzdmatlist 查询需增加 mdId 可选过滤条件。
新增参数:
mdId(可选)— 按门店筛选影响范围:
UserBillingMapper.getdaylist — SQL 增加 (#{mdId} IS NULL OR md_id = #{mdId})UserBillingMapper.getdaysum — SQL 增加 (#{mdId} IS NULL OR md_id = #{mdId})UserBillingMapper.getShDaysum — SQL 增加 (#{mdId} IS NULL OR b.md_id = #{mdId})新增参数:
mdId(可选)— 按门店筛选影响范围:
UserBillingMapper.getmeeklist — SQL 增加 (#{mdId} IS NULL OR md_id = #{mdId})UserBillingMapper.getmeeksum — SQL 增加 (#{mdId} IS NULL OR md_id = #{mdId})UserBillingMapper.getShMeeksum — SQL 增加 (#{mdId} IS NULL OR b.md_id = #{mdId})新增参数:
mdId(可选)— 按门店筛选影响范围:
UserBillingMapper.getmatlist — SQL 增加 (#{mdId} IS NULL OR md_id = #{mdId})UserBillingMapper.getmatsum — SQL 增加 (#{mdId} IS NULL OR md_id = #{mdId})UserBillingMapper.getshMonthsum — SQL 增加 (#{mdId} IS NULL OR b.md_id = #{mdId})财务管理
└── 账单管理
筛选条件
汇总区域
账单列表表格
权限区分
E:\QtwCode\foodie\foodie-storeE:\QtwCode\foodie\foodie-admin-vue\src\views\Billing\billing\index.vue| 接口 | 状态 | 说明 |
|---|---|---|
GET /billing/storeBillingList |
已完成 | 商家端账单列表,分页、筛选、权限逻辑 |
GET /billing/storeBillingSummary |
已完成 | 账单汇总,返回 totalAmount/totalDivvy/netIncome |
GET /billing/getzddaylist |
已完成 | 日账单,支持 mdId 可选过滤 |
GET /billing/getzdmeeklist |
已完成 | 周账单,支持 mdId 可选过滤 |
GET /billing/getzdmatlist |
已完成 | 月账单,支持 mdId 可选过滤 |
ruoyi-admin/src/main/java/com/ruoyi/app/pay/UserBillingController.java — 控制器ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserBillingMapper.java — Mapper SQLmdId 过滤采用 (#{mdId} IS NULL OR md_id = #{mdId}) 模式,mdId 不传时查询全部数据,传入时按门店过滤。涉及 join 查询的方法使用表别名前缀 b.md_id。
sys_qs_freight_bl 扣税费。旧的用户抽成比例、商家分成配置和骑手税率配置不参与本次结算。amount - customerDeliveryFee;旧订单按原商品金额及商家优惠口径。该金额全额入账,摊位仍入摊位钱包。freight 全额入账,到付代收金额和账单防重复规则保持。闪送含小费全额收入、自配送运费全额收入沿用现有实现。divvy=0、divvyRate=0;骑手另记 tax=0、taxRate="0"。商家账单响应当前 commissionRate=0,骑手响应当前 taxRate="0"。历史明细及汇总仍读取原账单,不抹除历史扣款事实。新增 GET /app/dict/data?dictType=sys_billing_type,商家及用户端共用 token 请求头,使用现有客户端会话认证。用户明确确认允许已登录客户端查询任意字典类型,不增加类型白名单。只返回启用项,复用现有缓存及排序;返回 dictLabel、dictValue、dictSort、isDefault,不返回后台审计字段。缺失、空白或超过100字符的类型返回国际化业务错误;不存在或无启用项返回空数组。标签使用后台维护原文,不自动翻译或改写类型5的业务含义。本增量仅提供共用接口,不改商家页面或字典数据。
GET /Billing/billing/storeBillingList 和 /storeBillingSummary 支持商家分管账号 userType=5,token 和请求/响应字段不变。MerchantStoreAccessService.resolve 校验分管账号、主账号状态及当前门店授权;账单限定 user_id=ownerUserId 且 md_id 在授权门店内。传入 mdId 必须属于授权集合;未传时仅汇总/查询授权门店。getzddaylist/getzdmeeklist/getzdmatlist 对 userType=5 解析主账号及实时授权门店;不传 mdId 查询全部授权门店,指定未授权门店拒绝。明细、金额/商品汇总、取消订单列表及数量使用相同范围,空授权查询零行。原普通商家/夜市/摊主/骑手路径不变,无数据库迁移。
新订单及运费以整数新台币元计价。闪送、多店及新版外卖报价沿用已有整数计算;用户、商家创建入口对传入运费增加非负、有限、整数校验。保留原字段类型和未传运费兼容,不静默取整改变应付。账单汇总使用十进制运算消除二进制尾差,整数以整数数字返回。用户明确历史数据不处理,历史分角账单保留,不改钱包、不补差、不迁移。
接入变化:POST /system/userOrder/createOrder和 POST /system/orderShOprate/createOrder 保留原入参结构;已有运费字段如传入必须是非负整数(40或40.0均可,40.5拒绝),未传时维持原处理。订单总额字段已有Integer/Long类型。storeBillingSummary 三个金额字段仍返回JSON数字,消除浮点尾差、整数不附带小数部分;历史真实分角仍保留。本轮不修改App及商家PC代码,前端由用户安排人员调整。
orderAmount,不关联订单表;列表响应结构保持不变。amount 保持实际账单入账金额,divvy 保持历史抽成记录。前端由用户安排人员将“订单金额”改为“收入”,直接使用 amount,不再减 divvy;本轮撤回所有前端代码及语言文件改动。storeBillingSummary.totalAmount 保持账单金额合计,totalDivvy 保留抽成合计,netIncome 等于已入账金额合计,不再次减抽成;使用十进制消除浮点尾差。POST /system/order/addorder 按用户要求彻底删除,不保留转发或兼容创建逻辑;用户及商家现有 createOrder 保持。/Billing/billing/riderIncome 与 /Billing/billing/riderIncome/{billId},旧共用账单接口保持不变。