初始提交:飞球 ETL 系统全量代码

This commit is contained in:
Neo
2026-02-13 08:05:34 +08:00
commit 3c51f5485d
441 changed files with 117631 additions and 0 deletions

View File

@@ -0,0 +1,919 @@
# 结账记录GetAllOrderSettleList
> 自动生成于 2026-02-13 | 数据来源:实时 API
## 基本信息
| 属性 | 值 |
|------|-----|
| 接口路径 | `Site/GetAllOrderSettleList` |
| 完整 URL | `https://pc.ficoo.vip/apiprod/admin/v1/Site/GetAllOrderSettleList` |
| 请求方法 | `POST` |
| Content-Type | `application/json` |
| 鉴权方式 | Bearer Token`Authorization` 头) |
| ODS 对应表 | `settlement_records` |
| 分页方式 | `page` + `limit`(最大 100 |
| 时间范围 | 需要rangeStartTime / rangeEndTime |
## 请求参数
| 参数名 | 类型 | 示例值 | 说明 |
|--------|------|--------|------|
| `settleType` | int | `0` | 结算类型0=全部) |
| `rangeStartTime` | string | `"2026-02-01 08:00:00"` | 查询起始时间 |
| `rangeEndTime` | string | `"2026-02-13 08:00:00"` | 查询结束时间 |
| `siteId` | int | `2790685415443269` | 门店 ID |
| `siteTableAreaIdList` | array | `[]` | 台桌区域 ID 列表(空=全部) |
| `page` | int | `1` | 页码(从 1 开始) |
| `limit` | int | `100` | 每页条数(最大 100 |
## 响应字段(共 92 个)
| # | 字段名 | 类型 | 示例值 |
|---|--------|------|--------|
| 1 | `id` | int | 3092711340902597 |
| 2 | `tenantId` | int | 2790683160709957 |
| 3 | `siteId` | int | 2790685415443269 |
| 4 | `siteName` | string | '朗朗桌球' |
| 5 | `balanceAmount` | float | 4285.55 |
| 6 | `cardAmount` | float | 0.0 |
| 7 | `cashAmount` | float | 0.0 |
| 8 | `couponAmount` | float | 0.0 |
| 9 | `createTime` | string | '2026-02-13 04:48:42' |
| 10 | `memberId` | int | 2799207522600709 |
| 11 | `memberName` | string | '' |
| 12 | `tenantMemberCardId` | int | 0 |
| 13 | `memberCardTypeName` | string | '' |
| 14 | `memberPhone` | string | '' |
| 15 | `tableId` | int | 2956248279567557 |
| 16 | `consumeMoney` | float | 5567.77 |
| 17 | `onlineAmount` | float | 0.0 |
| 18 | `operatorId` | int | 2790687322443013 |
| 19 | `operatorName` | string | '收银员:郑丽珊' |
| 20 | `revokeOrderId` | int | 0 |
| 21 | `revokeOrderName` | string | '' |
| 22 | `revokeTime` | string | '0001-01-01 00:00:00' |
| 23 | `payAmount` | float | 0.0 |
| 24 | `pointAmount` | float | 0.0 |
| 25 | `refundAmount` | float | 0.0 |
| 26 | `settleName` | string | '发财 发财' |
| 27 | `settleRelateId` | int | 3092230766020741 |
| 28 | `settleStatus` | int | 2 |
| 29 | `settleType` | int | 1 |
| 30 | `payTime` | string | '2026-02-13 04:49:48' |
| 31 | `roundingAmount` | float | 0.0 |
| 32 | `paymentMethod` | int | 0 |
| 33 | `adjustAmount` | float | 1282.22 |
| 34 | `assistantCxMoney` | float | 0.0 |
| 35 | `assistantPdMoney` | float | 646.32 |
| 36 | `couponSaleAmount` | float | 0.0 |
| 37 | `plCouponSaleAmount` | float | 0.0 |
| 38 | `merVouSalesAmount` | float | 0.0 |
| 39 | `memberDiscountAmount` | float | 0.0 |
| 40 | `tableChargeMoney` | float | 2564.45 |
| 41 | `goodsMoney` | float | 2357.0 |
| 42 | `realGoodsMoney` | float | 2357.0 |
| 43 | `serviceMoney` | float | 0.0 |
| 44 | `prepayMoney` | float | 0.0 |
| 45 | `salesManName` | string | '' |
| 46 | `orderRemark` | string | '' |
| 47 | `salesManUserId` | int | 0 |
| 48 | `canBeRevoked` | bool | False |
| 49 | `pointDiscountPrice` | float | 0.0 |
| 50 | `pointDiscountCost` | float | 0.0 |
| 51 | `activityDiscount` | float | 0.0 |
| 52 | `serialNumber` | int | 0 |
| 53 | `assistantManualDiscount` | float | 0.0 |
| 54 | `allCouponDiscount` | float | 0.0 |
| 55 | `goodsPromotionMoney` | float | 0.0 |
| 56 | `assistantPromotionMoney` | float | 0.0 |
| 57 | `isUseCoupon` | bool | False |
| 58 | `isUseDiscount` | bool | False |
| 59 | `isActivity` | bool | False |
| 60 | `isBindMember` | bool | False |
| 61 | `isFirst` | int | 0 |
| 62 | `rechargeCardAmount` | float | 4285.55 |
| 63 | `giftCardAmount` | int | 0 |
| 64 | `electricityMoney` | float | 0.0 |
| 65 | `realElectricityMoney` | float | 0.0 |
| 66 | `electricityAdjustMoney` | float | 0.0 |
| 67 | `siteProfile.id` | int | 0 |
| 68 | `siteProfile.org_id` | int | 0 |
| 69 | `siteProfile.shop_name` | string | '' |
| 70 | `siteProfile.avatar` | string | '' |
| 71 | `siteProfile.business_tel` | string | '' |
| 72 | `siteProfile.full_address` | string | '' |
| 73 | `siteProfile.address` | string | '' |
| 74 | `siteProfile.longitude` | float | 0.0 |
| 75 | `siteProfile.latitude` | float | 0.0 |
| 76 | `siteProfile.tenant_site_region_id` | int | 0 |
| 77 | `siteProfile.tenant_id` | int | 0 |
| 78 | `siteProfile.auto_light` | int | 1 |
| 79 | `siteProfile.attendance_distance` | int | 0 |
| 80 | `siteProfile.wifi_name` | string | '' |
| 81 | `siteProfile.wifi_password` | string | '' |
| 82 | `siteProfile.customer_service_qrcode` | string | '' |
| 83 | `siteProfile.customer_service_wechat` | string | '' |
| 84 | `siteProfile.fixed_pay_qrCode` | string | '' |
| 85 | `siteProfile.prod_env` | int | 1 |
| 86 | `siteProfile.light_status` | int | 1 |
| 87 | `siteProfile.light_type` | int | 0 |
| 88 | `siteProfile.site_type` | int | 1 |
| 89 | `siteProfile.light_token` | string | '' |
| 90 | `siteProfile.site_label` | string | '' |
| 91 | `siteProfile.attendance_enabled` | int | 1 |
| 92 | `siteProfile.shop_status` | int | 1 |
## 新增字段(相对本地 JSON 样本)
以下字段在最新 API 响应中出现,但本地 JSON 样本中不存在:
| 字段名 | 类型 |
|--------|------|
| `electricityAdjustMoney` | float |
| `electricityMoney` | float |
| `merVouSalesAmount` | float |
| `plCouponSaleAmount` | float |
| `realElectricityMoney` | float |
## 详细字段分析
> 以下内容迁移自旧版 `settlement_records-Analysis.md`,包含字段的业务含义、枚举值、跨表关联等详细说明。
data.total
类型int
含义:本次查询命中的结账记录总数,这里是 4739。
注意:每页只返回最多 100 条记录total 是全量总数。
data.settleList
类型:数组
含义:当前页的结账记录列表。
每个元素结构为:
{
"siteProfile": { ... },
"settleList": { ...结账明细... }
}
即“门店快照 + 单条结账记录”组合。
2. 外层记录结构
每个 data.settleList 元素包含两个字段:
siteProfile
settleList内层真正的结账明细对象
2.1 siteProfile
类型object
本文件中 siteProfile 字段结构与其他 JSON 一致,但内容多为 0 或空字符串:
id门店 ID这里为 0说明该接口没有填充真实门店快照
org_id组织 ID。
shop_name店名这里为空。
avatar门店头像 URL。
business_tel门店电话。
full_address / address门店详细地址 / 简要地址。
longitude / latitude经纬度。
tenant_site_region_id地区编码。
tenant_id租户 ID。
auto_light / light_status / light_type / light_token灯控相关配置。
site_type门店类型枚举。
site_label门店标签。
attendance_enabled / attendance_distance考勤开关及距离。
customer_service_qrcode / customer_service_wechat客服信息。
fixed_pay_qrCode固定收款码。
prod_env环境标记。
shop_status门店状态。
结构用途:
字段设计上与其它文件相同,用作“门店维度快照”;但当前导出中几乎是空壳,真正的门店信息在结账记录的内层字段 siteId / siteName 以及其他 JSON 的门店档案里。
2.2 settleList内层结算对象
类型object
含义:本次结账的一条汇总记录(整单维度),真正的业务字段都在这个对象里。
下文所有字段说明,都是针对这个内层 settleList。
二、内层结账记录字段逐个说明(共 61 个)
为便于理解,按维度分组说明。
1. 主键与关联 ID / 桌台信息
id
类型int
示例2957922914357125
含义:结账记录主键 ID订单结算 ID
结构关联:
与台费流水siteTableUseDetailsList中的 order_settle_id 一致。
与小票详情orderSettleId一致。
即:这是全系统统一的“结账单号”。
tenantId
类型int
示例2790683160709957全表固定
含义:租户/商户 ID品牌维度
siteId
类型int
示例2790685415443269朗朗桌球
含义:门店 ID。
关联:
与其他所有 JSON 中的 site_id 对应。
与门店档案中的 id 对应。
siteName
类型string
示例:"朗朗桌球"
含义:门店名称,冗余展示字段。
tableId
类型int
示例2793003705192517
含义:本次结账对应的桌台 ID。
关联:
对应台桌维表或台费流水中的 site_table_id。
用于定位具体是哪张桌。
settleName
类型string
示例:"A区 A17", "A区 A4"
含义:结账对象名称,一般是“区域 + 桌号”的组合。
结构关系:
与台费流水中的 site_table_area_name + ledger_name 一致(如 A区 + A17
便于报表和前端展示。
settleRelateId
类型int
示例2957858167230149
含义关联订单的“交易号”order_trade_no
结构关联:
与台费流水order_trade_no、助教流水order_trade_no中的该字段完全一致。
这一字段将“结账记录”与“各类明细表(台费、助教、商品等)”逻辑上串起来。
serialNumber
类型int
示例0当前样本均为 0
含义(推测):结账序列号 / 打印序号,用于内部排序或冲正追踪。
2. 时间与状态字段
createTime
类型string时间字符串
格式:"YYYY-MM-DD HH:MM:SS"
示例:"2025-11-09 23:34:49"
含义:结账记录创建时间,一般对应收银端点“确认结账”的时间。
payTime
类型string
示例:"2025-11-09 23:35:57"
含义:实际支付完成时间。通常晚于 createTime比如多支付场景
settleStatus
类型int枚举
当前样本:全部为 2
含义(推测):结账状态枚举。
2 很可能表示“已结算/已完成”。
其它枚举值(未出现在本数据中)可能为“待支付”、“已撤销”等。
settleType
类型int枚举
当前样本值1、3
含义(结构层面):
代表结账类型,比如:
1正常结账
3特殊类型例如挂账、补单、某类调整单
具体含义依赖系统配置,但可以确定这是“结账类型”的枚举字段。
canBeRevoked
类型bool
当前样本:全部为 False
含义:是否允许被撤销/冲正。
True当前结账记录仍可做撤销或冲正操作
False不能再撤销例如已过撤销时限、已经被冲正
revokeOrderId
类型int
当前样本:全为 0
含义:若当前记录是“被撤销的单”,则记录对应的“撤销单 ID”或反过来记录“原单 ID”。
结构上:作为撤销关系的外键使用,目前样本中未出现实际撤销记录。
revokeOrderName
类型string
当前样本:全为空字符串
含义:撤销单名称/标识,用于辅助说明撤销关系。
revokeTime
类型string时间
当前样本:全为 "0001-01-01 00:00:00"(无效时间)
含义:撤销时间。当记录发生撤销时将写入真实时间,当前数据尚未出现此场景。
3. 会员维度字段
memberId
类型int
示例0 或 2799207363643141 等
含义:会员主键 ID。
结构关联:
与“会员卡列表tenantMemberCards”中的 tenant_member_id 一致。
即:这是“租户维度的会员卡 ID”。
memberName
类型string
当前样本:均为空字符串
含义:会员姓名快照。
说明:当前导出中未填充,但结构上就是成员名称。
memberPhone
类型string
当前样本:均为空
含义:会员手机号快照。
tenantMemberCardId
类型int
当前样本:均为 0
含义(推测):会员卡账户 ID与 memberId、会员卡表的 id 之间存在映射)。
当前导出未实际使用,但结构上预留了“结账记录 → 会员卡账户表”的外键。
memberCardTypeName
类型string
当前样本:空
含义:会员卡类型名称,如“储值卡”“次卡”“活动抵用券”等。
对应会员卡表中的 member_card_type_name 字段。
isBindMember
类型bool
当前样本:全部为 False
含义:本次结账是否绑定了会员。
True本单关联会员即 memberId > 0
False散客。
isFirst
类型int0/1 枚举的可能性较大)
当前样本:全部为 0
含义(推测):是否首单(新客首单)。
0
1是。
当前导出中未出现首单记录,值全部为 0。
memberDiscountAmount
类型float
当前样本:全部为 0.0
含义:会员折扣产生的优惠金额(元)。
虽然值全为 0但结构上这是“会员折扣”维度的金额字段后续可与其他优惠字段一起分层统计。
4. 消费构成(台费/商品/助教/服务)
这些字段是在“消费侧”拆解每一笔结账的构成(不涉及付款方式)。
consumeMoney
类型float
示例58.0, 96.0, 362.82 等
含义:本次结账消费总额(不考虑支付方式/优惠结构的前后顺序,单纯汇总项目金额)。
结构关系(从金额结构角度):
近似可表示为:
consumeMoney ≈ tableChargeMoney + goodsMoney + assistantPdMoney + assistantCxMoney + serviceMoney ± 各类调价/抹零
这里不展开计算,只指出这是综合金额。
tableChargeMoney
类型float
示例48.0, 96.0, 85.72 等
含义:台费(桌台计费部分)的金额。
goodsMoney
类型float
示例10.0, 0.0, 8.0 等
含义:商品销售金额(原始商品金额)。
realGoodsMoney
类型float
示例10.0, 0.0, 6.0 等
含义:商品实际计入金额(可能已扣除某些折扣、促销)。
结构上realGoodsMoney 通常是 goodsMoney 调整后的结果。
assistantPdMoney
类型float
示例0.0, 206.67, 194.99 等
含义:助教“排钟/上课”应计金额(原价)。
结构关联:
与 助教流水.json 中对应订单的 ledger_amount 一致(应收金额)。
与该订单下所有助教明细合计后对齐。
assistantCxMoney
类型float
示例0.0, 1330.0, 2280.0
含义(推测):助教“次课/套餐/持续课”等另一类助教项目的金额。
从结构看,这是对助教收入的另一种拆分维度,和 assistantPdMoney 一起将助教项目区分为不同类型。
serviceMoney
类型float
示例:当前样本全为 0.0
含义:服务费/其他服务类收费金额,结构上单独列出一个维度,便于区分台费、商品、助教之外的服务收入。
5. 支付与资金构成(按渠道拆分)
这些字段描述“钱从哪来/怎么付”的分配,不是消费项目构成。
payAmount
类型float
示例10.0, 58.0, 0.0 等
含义:本次结账“实付金额”(顾客实际支付的总金额),不包括券面值、积分等非现金部分。
cashAmount
类型float
示例0.0, 8.0 等
含义:现金支付部分金额。
cardAmount
类型float
示例0.0, 8.0, 14.0 等(样本中主要为 0
含义(推测):非储值卡类的刷卡金额(例如信用卡/银行卡)。也可能是“会员卡支付”的一种编码方式,视系统定义而定。
balanceAmount
类型float
示例0.0, 120.0, 144.0 等
含义:从会员余额账户扣除的金额(储值卡余额消费)。
onlineAmount
类型float
示例0.0, 8.0, 352.0 等
含义:线上支付金额汇总(微信/支付宝/云闪付等通道的总和),具体通道细分不在本表中体现。
rechargeCardAmount
类型float / int大部分 0少数为 float
示例0, 120.0, 114.61, 1194.0
含义(推测):与“充值卡”相关的支付额,可能表示本次使用充值卡抵扣的金额。
giftCardAmount
类型float / int
示例0, 41.0, 18.0, 500.0, 100.0
含义:礼品卡/代金卡的支付金额。
refundAmount
类型float
示例:目前样本中多为 0.0
含义:本次结账中涉及的退款金额(如果是退款单或部分退单,则为正数)。
prepayMoney
类型float
示例0.0
含义:预付金(定金)部分金额。用于记录提前预付在本单中使用的金额。
6. 优惠 / 折扣 / 活动等金额字段
couponAmount
类型float
示例48.0, 96.0, 0.0 等
含义:本单实际由优惠券(代金券/团购券等)抵扣的金额。
couponSaleAmount
类型float
示例:当前样本为 0.0
含义(推测):优惠券本身的售卖金额/成本金额(比如顾客为购券支付的金额)。
allCouponDiscount
类型float
示例0.0
含义:归集所有券类优惠折扣的金额,作为汇总字段,便于统计“总券优惠”。
goodsPromotionMoney
类型float
示例:当前样本为 0.0
含义:商品促销产生的优惠金额(如买赠、满减分摊到商品部分)。
assistantPromotionMoney
类型float
示例0.0
含义:助教项目参与活动或促销产生的优惠金额。
activityDiscount
类型float
示例0.0
含义:活动折扣金额(如整单打折、满减等归集)。
memberDiscountAmount
前文已提(会员维度),本质也是优惠金额字段,只是专属于会员折扣。
roundingAmount
类型float
示例0.0, 0.33, 0.01 等
含义:抹零金额/舍入差值。如四舍五入或按角、分抹零产生的调整。
adjustAmount
类型float
示例0.0, 148.15, 120.0, 38.34, 18.0 等
含义:人工调价金额(总和),包括整单减免、特殊调整等。
在某些记录中,该值较大,说明存在明显的人工改价行为,但这里不做业务解释,仅说明字段角色是“可调整浮动金额”。
assistantManualDiscount
类型float
示例:当前样本为 0.0
含义:专门针对助教服务进行的人工减免金额(区别于普通商品/台费的折扣)。
7. 积分相关字段
pointAmount
类型float
示例10.0, 215.0 等
含义(结构层面):
代表与积分相关的一个金额或数量指标。结合字段命名,可能有两种用途:
本单“获得的积分数量”;
本单“用积分抵扣了多少金额”。
具体业务含义需要结合系统配置,不在本次结构分析范围内。
pointDiscountPrice
类型float
示例:当前样本为 0.0
含义:积分抵扣对应的金额(售价侧)。
pointDiscountCost
类型float
示例0.0
含义:积分抵扣对应的成本金额(成本侧)。
8. 布尔标志位(优惠/活动使用情况)
isUseCoupon
类型bool
当前样本:全部 False
含义:本次结账是否使用了优惠券。
True使用
False未使用。
isUseDiscount
类型bool
当前样本False
含义:是否使用了折扣(比如会员折扣、整单打折等)。
isActivity
类型bool
当前样本False
含义:是否参与了营销活动(活动价、满减活动等)。
9. 员工 / 操作相关字段
operatorId
类型int
示例2790687322443013
含义:结账操作员的用户 ID。
关联:可与员工/账号表中的 id 对应。
operatorName
类型string
示例:"收银员:郑丽珊"
含义:结账操作员名称,包含角色前缀(如“收银员:”)。
salesManName
类型string
当前样本:为空字符串
含义:营业员/业务员名称(用于提成或业绩归属)。
说明:样本中未单独设置营业员,字段留空。
salesManUserId
类型int
当前样本0
含义:营业员对应的用户 ID。
orderRemark
类型string
当前样本:为空字符串
含义订单备注由收银员手工输入记录特殊说明例如“客人反映XX”、“活动赠送”等
三、字段级结构关系与重要线索(只谈结构,不做业务结论)
从字段结构和跨表关系来看,结账记录.json 在整个系统中的定位非常清晰,主要有以下关键点:
1. 结账记录是多张明细表的“汇总头”
关键外键映射关系已经非常明确:
结账.id = 台费流水的 order_settle_id = 助教流水的 order_settle_id = 小票详情的 orderSettleId
→ 结账记录是这些明细表的“结算头表”。
结账.settleRelateId = 台费流水 / 助教流水 / 其他订单明细中的 order_trade_no
→ 表示的是同一笔“交易号”,可跨不同业务明细汇总。
结论(结构层面):
结账记录.json 是所有消费行为(台费、助教、商品、服务)在“订单维度”上的整合节点。
2. 桌台维度的绑定
tableId ↔ 台费流水的 site_table_id ↔ 台桌列表的 id
settleName 与台费流水中的 site_table_area_name + ledger_name 一致。
结构上表明:“结账”是针对于具体某张桌和某个区域的。
3. 与助教流水的金额映射
对于含助教的结账记录:
assistantPdMoney = 对应订单下助教流水的 ledger_amount 汇总(原价侧金额)。
助教流水中的 projected_income 则是助教部分在核算侧的实际计入金额。
在本表中不出现 projected_income而是用一系列折扣、调价、券金额等字段从其他角度拆分。
结构层面:
本表承担“按项目类型(台费/商品/助教/服务)+ 按优惠来源(券、活动、会员、抹零、调价…)”两个维度的汇总拆分。
4. 与会员卡 / 积分体系的连接点
memberId ↔ 会员卡 JSON (tenantMemberCards) 中的 tenant_member_id。
多个金额字段专门为会员卡和积分预留:
balanceAmount、rechargeCardAmount、giftCardAmount → 不同卡/余额类型的资金来源。
memberDiscountAmount、pointAmount、pointDiscountPrice、pointDiscountCost → 会员折扣与积分收益/抵扣的金额维度。
结构上,这说明:
结账记录不仅仅是“收了多少钱”,而是同时承载了“会员体系如何参与本单”的信息,且与会员卡与积分的专门表有外键可以联动。
5. 小票详情与结账记录的一对一关系
在“小票详情.json”你那边是 orderSettleId + data 那个文件)中:
orderSettleId 与本表的 id 完全一致。
小票详情中也存在大量与本表同名字段couponAmount、giftCardAmount、adjustAmount 等)。
结构层面:
结账记录.json 是一个“汇总视图”,字段较为精简。
“小票详情.json” 是更细粒度的结构(包含 orderItem 列表、配送信息、会员详情等)。
这意味着如果你要做字段级的数据模型,通常会把结账记录作为 fact 表的一部分,小票详情作为明细扩展。
6. 优惠维度设计的全面性
从字段命名可以看出系统在优惠维度上做了非常细的拆分:
按来源:会员折扣、活动折扣、商品促销、助教促销、券优惠、积分优惠、人工调价、抹零。
每一个维度都对应独立的金额字段(多为 float并非简单的“总折扣”。
从纯结构角度,这个设计为后续做“多维折扣分析 / 审计 / 对账”提供了足够信息,但同时也增加了建模复杂度,需要在模型中清晰标注每个字段代表“折扣来源”还是“支付渠道”。