ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

从商业需求文档到系统设计:智慧油站SaaS全解析

从商业需求文档到系统设计:智慧油站SaaS全解析 简介《骑士加油》商业需求文档面向油站经营者、互联网产品经理及能源零售数字化从业者聚焦传统油站服务效率低、管理成本高、车主支付不便等痛点提供互联网智慧油站的完整解决方案。内容分为市场分析、商业模式、产品规划、收益与成本、风险及对策五部分市场部分给出石油行业近3万亿交易额、11万座油站的背景及竞品对比商业模式部分设计技术服务费、佣金、硬件费用三类收入产品部分规划储值卡系统、第三方支付、会员等级、进销存管理等核心功能。收益部分测算2016年底开发推广成本约20.8万元按合作100家油站年收益可达185万元技术服务费外加200万元硬件费用风险部分针对竞品烧钱、线下网络不稳定与人员变动提出应对思路。包内为1个pptx文件大小2.26MB内容完整可直接用作商业计划书或需求评审参考。目前已有59人学习下载。1. 把商业需求文档当系统设计文档读骑士加油的 3 万亿生意与技术账拿到这份《骑士加油商业需求文档.pptx》时我习惯性地翻到了成本表208,200 元研发预算要覆盖储值卡系统、积分系统、进销存管理、移动 POS、微信支付五个模块。这个数字放在今天的 SaaS 创业里几乎不可想象但它恰恰说明了这份文档的价值——它把 11 万座油站的人工管理、现金支付、无法远程经营这些痛点翻译成了储值卡、第三方支付、会员等级、进销存这些可开发的系统模块而不是停留在口号层面。对产品经理它是需求边界对后端工程师它是数据模型和工作量估算的起点。这份文档资料适合所有想切入能源零售信息化的技术团队当作需求基线来读尤其是关注 B 端 SaaS 和产业互联网的从业者。2. 市场分析与竞品拆解为什么智慧油站要先解决支付和管理2.1 油站信息化的断层从三组数据看系统切入点石油行业年交易金额接近 3 万亿全国加油站超过 11 万座日交易近百亿。这么大的盘子油站却普遍没有技术团队运营靠人工老板想远程看数据看不到车主加油要么现金要么银行卡支付体验停留在十年前。文档把这些痛点拆成两条线——油站侧是管理成本高、无法远程管理车主侧是支付不便、流程繁杂、没有增值服务。把痛点翻译成系统模块就是下面这张映射表痛点归属具体问题对应系统模块油站管理人工管理、无法远程进销存管理、员工管理、公众号管理车主支付现金和银行卡不便第三方支付、扫码加油、移动 POS车主体验流程繁杂、无增值服务油站导航、非油消费、汽车周边服务油站运营无法沉淀忠实用户储值卡系统、积分系统、会员等级体系这张表的工程含义很直接油站侧需要一套 SaaS 管理后台车主侧需要一个公众号或 APP 入口。两个端的数据最终要汇聚到一套交易系统里这决定了后面所有架构设计的方向。这里有个常见误判很多团队先做车主端 C 端产品认为有流量就有一切。但文档给的顺序恰恰相反——先解决油站的支付和管理因为这是油站愿意付费的刚需。2.2 竞品模式对比补贴、理财、硬件三种打法的边界文档用易观智库数据列出了 2015 年第三季度 O2O 加油 APP 活跃用户覆盖率微车 86.2%加油宝 10.1%喂车车 5.9%其余可以忽略。这个数字说明当时的玩家在用户规模上差距悬殊但都没有形成绝对统治。各家模式的差异其实代表了三种不同的技术投入方向竞品核心玩法合作规模技术侧观察微车违章查询和加油双入口靠汽车电商和保险变现合作油站超 500 家用户 160 万交易额超 15 亿C 端流量打法依赖外部渠道采购加油宝加油卡充值 理财吸引高端车主合作油站约 400 家用户近百万涉及资金沉淀监管压力大喂车车与传统油站合作打造智慧油站获取加油数据合作油站超 200 家日订单过万有数据意识但变现路径较长车到加油提供油站硬件设施提升运营效率合作油站超 200 家硬件投入重扩张速度受约束易加油提供油站运营服务沉淀加油资金合作油站 150 家日订单接近 1000运营服务较重商业模式未清晰骑士加油的差异化策略很明确不采用烧钱战略定位于服务 B 端靠技术服务费和佣金盈利。这个定位在技术上的含义是要把系统做深而不是把流量做大。油站的支付、进销存、会员管理是核心场景这些场景的数据质量远比 C 端流量更有商业价值。2.3 SWOT 到选型策略为什么先做 SaaS 而不是先烧钱做 C 端文档的 SWOT 分析有四个要点优势是石化行业经验和对油站管理的技术沉淀劣势是产品阵列不足、缺少核心竞争力机会是 O2O 加油行业尚未成熟没有强势对手威胁是竞品的烧钱战略。这组分析直接推导出了应对策略——2C 提供全新加油体验2B 提供油站运营管理合起来是“互联网 智慧油站解决方案”。从技术选型角度看这个策略意味着两套产品线要并行面向车主的公众号/APP 做支付、导航、非油消费面向油站的 SaaS 后台做进销存、员工管理、储值卡、积分。两套系统共用账户体系和交易中台但产品节奏必须错开。先做油站管理端因为这是收入来源车主端先用公众号承载降低获客成本。这个判断即便放到现在做产业互联网依然成立。3. 商业模式建模技术服务费、佣金与数据资产的系统化落地3.1 技术服务费的套餐化设计把产品能力拆成可计价的边界文档提出将产品服务分级整合针对不同油站提供 ABCD 四类套餐收费。原文没有展开四档的具体边界按我对油站 SaaS 行业的理解合理的拆法如下表套餐面向油站类型包含模块收费模式A 类基础版单体民营油站公众号管理、扫码支付、交易报表年费B 类增长版有营销需求的油站A 储值卡系统 积分系统 会员等级年费 按交易流水抽佣C 类管理版连锁油站B 进销存 油枪/液位仪接入 员工管理年费 硬件费用D 类定制版大型油企C 组织定制 大数据分析报告项目制这个设计的工程意义在于每个套餐都是一组明确的功能边界。A 类几乎零实施成本一个收银 POS 加一个公众号模板就能上线C 类涉及硬件对接需要在油站现场部署采集网关。套餐化不只是销售策略它直接决定了开发排期——先做哪些模块、哪些模块可以复用看套餐覆盖度就知道优先级。3.2 佣金模式的流量归因保险、4S、银行的合作链路怎么接文档里的佣金模式是与保险、4S 店、银行等第三方合作通过流量转化收取佣金。技术上要解决三个问题用户从哪个渠道来、订单归属于哪个合作方、佣金按什么比例结算。def calc_commission(month: str) - dict: 按合作方结算月度佣金source 字段来自订单打标 orders query_orders(monthmonth) result {} for order in orders: source order[source] # insurance / 4s / bank / default amount order[amount] if source insurance: # 保险类订单佣金 8% rate 0.08 elif source 4s: # 4S 店保养订单佣金 5% rate 0.05 else: # 其他导流订单佣金 2% rate 0.02 result[source] result.get(source, 0) amount * rate return result这段逻辑的核心是source字段。用户从保险页面点进加油站导航或者从骑士加油公众号跳转 4S 店预约前端要带渠道参数后端在下单时写入订单表。如果不做这个归因佣金结算就会变成一笔糊涂账。另外注意保险和 4S 的大额订单佣金比例高但转化链路长普通加油订单佣金低但高频。技术侧要给两类来源分别建漏斗报表方便商务团队谈合作时用数据说话。3.3 数据资产的合规积累从埋点到油品金融的前置条件文档把“记录车主消费数据云端进行大数据分析提升公司市值”列为盈利模式之一这个认知在 2016 年算超前。但从工程落地看数据资产不是存下来就能变现的要过三关第一关是埋点规范。加油行为、支付行为、非油消费、会员活动每一类行为要有统一的事件模型。第二关是数据清洗和建模把原始流水加工成用户画像和油站经营标签。第三关就涉及合规了——车主的手机号、车牌号、交易金额都属于个人信息需要脱敏存储和授权协议。油品金融是文档里提到的远期方向储值卡余额本质上是资金池这个业务需要金融牌照和强监管普通创业公司碰不得。技术团队应该把它当作数据接口的设计约束而不是收入预期。我一般会建议在这类 BRD 评审时直接问清楚数据资产短期能不能变现、合规成本谁承担避免老板把“大数据分析”当成免费的期权。4. 产品规划落地储值卡、RFM 会员分层与支付对账的实现细节4.1 小步快跑的产品里程碑四个交付节点的取舍逻辑文档给出的产品迭代排期是这样的时间节点交付功能技术要点2016 年 5 月储值卡系统充值、交易、统计账务核心资金安全事务一致性2016 年 8 月公众号管理、积分系统、会员等级体系用户运营RFM 模型营销工具2016 年 10 月进销存管理接入油枪与液位仪物联网硬件对接数据采集2016 年 12 月移动 POS、第三方支付、交易统计支付对账核账报表这个排期的顺序是账务先行、营销跟上、硬件最后。先做储值卡是因为它直接绑定用户资金油站最需要再做积分和会员是因为储值卡跑通后有了数据基础进销存和液位仪涉及硬件实施成本高放在后面。支付打通放在年底是因为移动 POS 和微信支付要等前面模块稳定。这个节奏对今天做产业互联网的团队依然有参考价值——最赚钱的模块先上线硬件和支付放后面避免一开始就被实施复杂度拖住。4.2 储值卡系统账务模型与交易流水表设计储值卡是这套系统的资金核心设计上要满足两个要求一是账户余额和交易流水分离二是所有资金变动留痕。下面是基础的两张表CREATE TABLE card_account ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, card_no VARCHAR(32) NOT NULL UNIQUE COMMENT 骑士卡号, oil_station_id INT NOT NULL COMMENT 发卡油站, balance DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT 账户余额, status TINYINT NOT NULL DEFAULT 1 COMMENT 1可用 0冻结, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT储值卡账户表; CREATE TABLE card_transaction ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, card_id BIGINT NOT NULL COMMENT 账户ID, tx_type TINYINT NOT NULL COMMENT 1充值 2消费 3退款, amount DECIMAL(12,2) NOT NULL COMMENT 变动金额正数入账负数出账, trade_no VARCHAR(64) NOT NULL COMMENT 外部交易号幂等键, status TINYINT NOT NULL DEFAULT 0 COMMENT 0处理中 1成功 2失败, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_trade_no (trade_no) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT储值卡交易流水表;账户表只存当前余额流水表记录每一笔变动这是最常见的账务模型。trade_no是外部交易号充值时是微信支付单号消费时是 POS 订单号数据库层加唯一索引来保证幂等。tx_type用正负金额表达入账和出账比单独加方向字段更好扩展退款可以复用同一套逻辑。注意DECIMAL不能换成FLOAT金额计算一旦用浮点就会出现 0.1 精度问题这在支付系统里是红线。4.3 RFM 会员分层用四个分位数切出精准营销人群文档里提到通过 RFM 模型区分用户等级进行精准营销。RFM 是三个维度的缩写Recency最近消费时间、Frequency消费频率、Monetary消费金额。工程实现上用 pandas 做一次全量计算很快import pandas as pd def build_rfm(orders: pd.DataFrame, anchorpd.Timestamp(2016-12-31)) - pd.DataFrame: rfm orders.groupby(user_id).agg( recency(pay_time, lambda x: (anchor - x.max()).days), frequency(order_id, count), monetary(pay_amount, sum) ) # 四等分切分R 越小越好所以分数反向 rfm[R] pd.qcut(rfm[recency], 4, labels[4, 3, 2, 1]) rfm[F] pd.qcut(rfm[frequency], 4, labels[1, 2, 3, 4]) rfm[M] pd.qcut(rfm[monetary], 4, labels[1, 2, 3, 4]) rfm[rfm_score] rfm[R].astype(int) rfm[F].astype(int) rfm[M].astype(int) return rfmrecency是距离锚点最近一次消费的天数越小代表用户越活跃所以分位数标签反着给间隔天数最短的 25% 用户 R 得 4 分。frequency统计周期内下单次数monetary统计消费总额都是越大越好正序切分。三个分数相加得到rfm_score3 分以下属于流失预警人群9 分以上是核心高价值用户。这套模型要定期跑批比如每周日凌晨算一次结果落到会员表的四个字段里营销活动直接查表取数不要在活动时实时计算全量 RFM大促时会拖垮数据库。4.4 微信支付对接回调幂等与对账闭环文档要求接通微信支付实现交易数据统计。2016 年微信支付的企业付款、扫码支付接口已经成熟对接的核心在于回调处理。微信会把支付结果异步通知到商户服务器而且会重试多次代码必须幂等PostMapping(/wxpay/notify) public String wxpayNotify(RequestBody String xml) throws Exception { // 1. 验签防止伪造回调 MapString, String data WxPayUtil.xmlToMap(xml); if (!WxPayUtil.verifySign(data, apiKey)) { return WxPayUtil.fail(签名失败); } // 2. 查询本地订单状态已处理直接返回成功 String tradeNo data.get(out_trade_no); if (orderService.isProcessed(tradeNo)) { return WxPayUtil.success(); } // 3. 事务内更新订单状态并给储值卡入账 orderService.markPaid(tradeNo, data.get(transaction_id)); cardService.creditByTradeNo(tradeNo); return WxPayUtil.success(); }三个步骤缺一不可。验签是安全底线apiKey不能出现在前端代码或日志里isProcessed查询保证微信重试同一笔订单时不会重复入账markPaid和creditByTradeNo必须在同一个事务里否则会出现订单已支付但储值卡没到账的数据不一致。回调参数里最关键是out_trade_no商户订单号、transaction_id微信支付单号、total_fee金额单位是分。total_fee用整数分而不是元避免了浮点误差数据库里的金额统一用分存储展示时再转换。4.5 进销存与液位仪油品损耗率的工程口径进销存管理接入油枪和液位仪这是文档里最有行业特色的部分。油品是液体库存不能用“个数”而要用“体积”或“质量”而且液位仪读数会受温度影响。工程上要关注的核心指标是损耗率损耗率 (期初库存 本期进油量 - 期末库存 - 本期销量) / 本期进油量 × 100%行业合理损耗率一般在 0.3% 以内超过这个范围就要排查液位仪漂移、油枪计量误差甚至偷油。实现上油枪和液位仪按分钟上报数据采集网关做断点续传防止网络抖动导致库存数据缺口。这个模块属于物联网范畴和纯互联网系统最大的区别是——你必须处理设备离线、数据延迟、硬件型号兼容这些问题代码里要有重试机制和数据补偿任务。5. 成本收益模型与风险对策208,200 元预算的工程化排布5.1 收益模型的数学拆解从单站年费到 385 万总收入文档的成本收益部分是可以直接拿来做财务建模的。先看成本端表格按明细重新归类分类明细金额元研发人工研发人力 72,000 推广人力 48,000120,000推广物料推广费 20,000 宣传册 1,500 易拉宝 3,000 服装 50025,000差旅与测试出差 5,000 测试用机 1,0006,000知识产权专利申请 20,00020,000软件与运维软件产品 9,200 运维 8,00017,200预备金未知预估 20,00020,000合计208,200收益端文档给的假设是 100 家合作油站、平均每家使用 50% 的功能。单站年服务费 公众号运营 0.2 万 积分系统 1 万 储值卡 1 万 油站管理 1.5 万 3.7 万乘以 50% 使用率得 1.85 万100 站就是 185 万技术服务费加上硬件费用 2 万/站 × 100 站 200 万全年合计 385 万。这个模型的工程管理含义在于功能使用率是必须追踪的指标——每少一家油站启用储值卡就少 1 万的年收入。所以后台要给每个模块做独立的开关和活跃度统计。5.2 三类风险的工程化对策幂等、MVP 与文档基线文档列了三类风险对应三种不同的工程手段。技术风险是线下网络不稳定、硬件设备不齐全导致支付错误对策是支付回调幂等、移动 POS 离线缓存、设备适配层屏蔽厂商差异。市场风险是竞品烧钱抢油站对策是把可用版本逐步推向市场而不是全部功能完成才推广这本质是 MVP 策略。管理风险是人员调动影响进度对策在文档里写得直白——做好文档管理新成员可快速融入项目。我补一个实操建议从第一天就要维护好接口文档和数据库字典这比代码注释重要得多。油站项目的坑往往不在业务逻辑而在设备协议和支付对账。每周对一次微信支付流水、储值卡余额和油站进销存三方的数据任何一个不平衡项都从幂等表开始查不要直接改账这是油站系统线上线下一体化最基本的纪律。本文还有配套的精品资源点击获取
返回列表