审计对象:B 端原型(
prototype/84 页 / 13 模块)+ C 端原型(c-prototype/37 页 / 6 域)+ 老系统(gridvo 178 表)。原则(用户 2026-08-18 定):功能以原型为准(老系统功能过时仅作升级参照);mock 数据全部从老系统字段级提取;对老系统数据结构与数据表提出修改方案。
方法:自动化提取(两端枚举/金额/实体键 + 老系统 88 业务表 / 1567 字段)→ 逐字段对照 design-conventions / api-traceability / legacy-field-view → 分级问题清单。
| 维度 | 结论 | 严重度 |
|---|---|---|
| BC 功能配合度 | 主链路闭环良好,6 域 ↔ 13 模块映射清晰;存在换电未建模、互联互通 C 端缺失、异常订单契约空白 3 处功能缺口 | P1 |
| 字段符合度 | 枚举/金额单位对齐 design-conventions 良好;存在接口前缀不统一、C 端接口未入追溯矩阵、会员折扣口径老系统语义变更 | P1 |
| mock 数据一致性 | 站编码 / 枪编码 / 城市三处实体键跨端断裂(P0),另有站点集合错位、pileCode 内部双轨、占位费参数漂移 | P0×4 |
| 老系统校核 | 老系统 88 业务表 1567 字段已全量提取;发现 varchar 脏类型、金额单位三套、枚举值无注释等需改造点 | P1 |
问题分级:P0 阻断 4 项 / P1 fast-follow 9 项 / P2 后续 4 项(见 §五全量清单)。
C 端 6 域 → B 端 13 模块支撑映射(复用 c-end-design §六 复用库表口径):
| C 端域 | 支撑 B 端模块 | 复用库表 | 配合度 | 缺口 |
|---|---|---|---|---|
| 找桩(9页) | station-device + billing | business_station / business_equipment / connector / cost_template* | ✅ 闭环 | 换电站 station_type 未建模(P1-6) |
| 充电(6页) | charging + order | real_time_monitor / business_order / connector | ✅ 闭环 | 异常订单补单 C↔B 契约空白(P2-1) |
| 订单发票(7页) | order + finance + payment | business_order / order_details / occupancy_fee / finance_invoice / pay_* | ✅ 闭环 | 占位费申诉升 P0 未定 |
| 会员福利(5页) | member + marketing | member_member / member_level / points / paid_* / coupon | ✅ 闭环 | 会员 Tab 触发指标未定 |
| 客服售后(4页) | member + system | member_feedback / experience / operate_log | ✅ 闭环 | 自助宫格合并入口 |
| 账号资产(5页) | member + payment | pay_wallet / member_plate / member_member | ✅ 闭环 | 先充后付 P2 |
功能缺口:
station_type=换电、stationType: ['换电'];C 端找桩只按功率分「超充≥180/快充30~180/慢充<30」,换电站无对应展示与筛选。| 枚举 | B 端 constants | C 端 constants | 权威 | 结论 |
|---|---|---|---|---|
| 设备 7 态 | 空闲/充电中/预约/故障/离线/建设中/未知 | 同 | §八 | ✅ 一致 |
| 订单 10 态 | 待启动/充电中/启动失败/异常中断/结算中/待支付/已支付/已关闭/退款中/已退款 | 同 | order-state-machine | ✅ 一致 |
| C 端 Tab 映射 | — | 进行中/待支付/已完成/退款中+异常独立 | c-end-design §9.2 | ✅ 一致 |
| 券类型/状态 | 满减/折扣/立减/兑换券 × 4 态 | 同 | member spec | ✅ 一致 |
| 积分 10 类 | 充电获取/签到/评价/首单/邀请/活动/补偿调整/兑换消耗/抵扣消耗/过期扣减 | 同 | member spec | ✅ 一致 |
| 支付渠道 | 微信/支付宝/钱包 | 同 | §二 | ✅ 一致 |
| 字段域 | 单位 | B 端 | C 端 | 老系统 | 结论 |
|---|---|---|---|---|---|
| 订单金额/电费/服务费/占位费 | 元 numeric | ✅ 直显 | ✅ 直显 | business_order numeric(20,2)/numeric(20,4) | ✅ 一致 |
| 钱包/支付/券 | 分 bigint | ✅ | ✅ store balanceFen | pay_wallet.balance bigint / pay_order.price bigint | ✅ 一致 |
| 服务费 | 4 位精度 | ✅ | ✅ | service_price numeric(20,4) | ✅ 一致 |
老系统金额脏类型待改造(见 §六):business_order.org_all_amount varchar(255)、parked_discount_amount varchar、charged_discount_amount varchar、business_station.park_buffer_time/overtime_min varchar(255)。
home.md 用 /api/cend/station/list、realtime.md 用 /api/c-end/charging/realtime/{orderId}、mine.md 用 /api/c-end/auth/wechat-bind——cend vs c-end 双前缀。api-traceability-matrix(554 行)仅 13 个 B 端模块,grep cend/c-end 零命中;C 端接口散落在 36 页 spec §8,未收敛、未四维对齐。以「站 / 枪 / 订单 / 券 / 会员」五条主线的实体键做跨端 diff,结果如下。
| 端 | 站编码 | 站名 |
|---|---|---|
| B 端 | ST0001~ST0008 | 福道能源站/中心站/东站/西站/南站/北站/机场站/旧站(已关) |
| C 端 | S-SZ-001~S-SZ-006 | 福道能源站/中心站/东站/西站/南站/高铁站超充站 |
结论:编码体系(STxxxx vs S-SZ-xxx)与站点集合(8 vs 6)均错位,B↔C 无法用站编码串联。
| 端 | 枪编码 | pileCode |
|---|---|---|
| B 端 station-device | G-01~G-12 | P0001~P0007(5 位前导零) |
| B 端 charging | G-01~G-12 | P001~P006(3 位) |
| C 端 | A-01~F-08 | P001~P021(3 位) |
结论:① 枪编码 B 端 G-* vs C 端 A~F-* 完全断裂;② B 端内部 pileCode 双轨(P0001 vs P001)矛盾。
B 端 mock 全站 city: '北京市',地址为朝阳/海淀/通州等;C 端 DEFAULT_CITY='深圳',地址为南山/福田/罗湖等。地域基准不一致,地图/距离/城市筛选口径无法对齐。
| 站 | 参数 | B 端 | C 端 |
|---|---|---|---|
| 福道能源站 | parkBufferTime | 15 分钟 | 30 分钟 |
同站占位费免费时长不一致;且老系统 business_station.park_buffer_time 为 varchar(255),需类型化。
C 端订单 mock 复用了 B 端订单号与金额(BJ202608110930000123=8.5、BJ202608110845000098=21.66、…),金额可验算一致 ✅。仅 BJ202608100920000077(C 端)vs B 端申诉单 BJ202608100930000077(0930)一字之差,疑似笔误。
| # | 问题 | 证据 | 建议 |
|---|---|---|---|
| P0-1 | 站编码体系不一致 | B:ST0001-8 vs C:S-SZ-001-6 | 统一站编码(建议沿用老系统 station_code 规则),两端共用 |
| P0-2 | 枪编码体系不一致 | B:G-01~12 vs C:A-01~F-08 | 统一枪编码(建议 connector_code),两端共用 |
| P0-3 | 城市基准不一致 | B:北京市 vs C:深圳(DEFAULT_CITY) | 统一城市基准(以老系统 area_code_name 为准) |
| P0-4 | 站点集合错位 | B 8 站 vs C 6 站(互相缺站) | 站点清单两端对齐(含停运/建设过滤态) |
| # | 问题 | 建议 |
|---|---|---|
| P1-1 | C 端接口前缀 /api/cend vs /api/c-end 不统一 | 归一为 /api/c-end 或 /api/cend 单一前缀 |
| P1-2 | C 端接口未入 api-traceability-matrix(554 行) | C 端 36 页接口收敛进矩阵,四维对齐 |
| P1-3 | C 端 7 专属表未纳入 DDL/RLS | member_wechat_bind/member_station_favorite/cend_invoice_title/faq*4 落 DDL + S11 RLS |
| P1-4 | B 端 pileCode 双轨(P0001 vs P001) | 统一 pileCode 格式 |
| P1-5 | 会员折扣口径语义变更 | 老 member_level.discount_percent(百分比) → 新版 E2 折扣额(元),需迁移映射 |
| P1-6 | 换电站未建模 | C 端补换电类型或明确 P2 |
| P1-7 | 占位费参数跨端漂移 + 老系统 varchar 类型 | park_buffer_time/overtime_min varchar→int,参数统一 |
| P1-8 | 站状态过滤不一致 | C 端按 B 端 is_display/station_status 过滤停运/建设中 |
| P1-9 | 订单状态枚举映射(C1 contested) | 老 order_status smallint dump 无注释,需开发期定稿映射表 |
| # | 问题 | 建议 |
|---|---|---|
| P2-1 | 异常订单 C↔B 契约空白 | 补 abnormalId/handle_status 字段与回写契约 |
| P2-2 | 订单号疑似笔误 | C 端 BJ202608100920000077 → 0930 核对 |
| P2-3 | 互联互通渠道差异 C 端缺失 | C 端补第三方渠道价格/折扣/结算口径 |
| P2-4 | 先充后付评估 checkpoint 缺失 | 定义资质启动/决策/验收 checkpoint |
已全量提取老系统 88 业务表 / 1567 字段(/tmp/legacy_fields.txt),关键结论:
business_station(50 列):占位费族完整(is_occupation_cost/park_buffer_time/overtime_money/overtime_min/single_deduction_limit/is_brake/park_explain),但 park_buffer_time、overtime_min 为 varchar(255) 脏类型。business_order(88 列):金额拆分族完整(all_amount/charged_amount/service_price/service_discount_price/coupon_price/order_commission/parked_amount/red_packet_consume),但 org_all_amount、parked_discount_amount、charged_discount_amount 为 varchar 脏类型;amount_method=2预充值/3混合。business_equipment_connector(21 列):work_status bigint 枚举无注释(0空闲/1充电/2预约/3启动中/10失败/05故障,协议侧)。member_level:discount_percent smallint(百分比)→ 新版 E2 改折扣额(元),语义变更。pay_wallet:balance/freeze_price/total_expense/total_recharge/gift_money/money 均 bigint(分) ✅ 与 C 端对齐。pay_order:price/refund_price bigint(分) ✅。real_time_monitor:全 varchar(协议帧直存),需 Redis 实时态 + PG 规范化(C4)。