本文将介绍如何使用Java来实现一个功能性的代码示例,涉及的主要功能包括预估价格和结算价格的计算。此模块依赖于有效的订单ID,并基于订单计费规则镜像表【tbl_order_rule_mirror】来执行计价规则。
首先,确保具备前置条件:订单ID的有效性。这需要检查订单计费规则镜像表中是否存在该ID的数据,并验证【content】字段内容是否非空且为JSON格式。
对外提供的主要接口有两个:
1. 预估价格:订单创建后,通过发送HTTP请求到“/valuation/forecast/{order_id}”获取预估价格。价格的计算基于城市编码、服务类型、渠道和车辆级别四个条件。值得注意的是,预估价格的计算不具备幂等性,即相同的查询条件可能得到不同的结果。
动态调价机制是在预估价格基础上进行的,根据行驶的公里数调整。返回结果等于预估价格减去动态调价金额。
2. 结算价格:当顾客到达目的地准备付款时,调用“/valuation/settlement/{order_id}”接口,返回结算价格。结算价格与预估价格逻辑相同,但不包括额外的费用如停车费、过路费等。
核心计价逻辑如下:
- 总价格(预估或结算价格) = 价格A - 价格B + 价格C
- 价格A(初步价格) = Max(起步价 + 历程费 + 历程时长费 + 夜间历程费 + 夜间时长费 + 远途历程费,基础价格)
- 价格B(动态调价) = 价格A * 行驶最大公里数对应的折扣价格(折扣价格有且至多一个,范围在[0,1],否则抛出异常)
- 价格C(额外费用) = 停车费 + 过路费 + 其他费用
历程费的计算涉及分段计价和基础计价两种方式,具体规则如下:
- 如果起步公里数和起步时长均为零,采用基础套餐计费;否则,采用分段计价。
夜间费的计算类似分段计价,分为预估和结算两种情况,涉及夜间历程费和夜间时长费,按不同时间段的单位费用累加。
远途费的计算则根据行驶距离来确定,其费用计算公式未给出完整细节,但可以理解为基于一定的单位距离费率进行计算。
这个Java模块实现了订单计价的核心逻辑,包括预估和结算两个阶段,涉及到各种费用的计算和动态调价机制,为订单处理提供了完整的定价流程。