内测023:快递分区报价表
#Quiz #Scenario #Express #Price
在跨境物流领域,包裹的运费是受包裹重量(实重),三遍尺寸(体积重),始发地和目的地的邮编(分区)约束的,本篇是实际业务中按分区阶梯计算价格的简化场景。
@史荣久 / 2020-09-06 / CC-BY-SA-3.0
1.需求描述
业务部门的同事会维护一张excel的报价表,格式和数据简化如下。
阶梯 ⁄ 邮编 | 9* | 8* | 92551* |
---|---|---|---|
25 | 10 | 20 | 5 |
50 | 15 | 25 | 10 |
75 | 20 | 30 | 15 |
其中,标题和内容的说明如下,
- 第一行是表头,阶梯报价和邮编分区的匹配模式
- 第一列为收费重量(kg)的闭开区间,如25表示,25≤重量<50
- 第二列以后是匹配的报价,邮编以
9
,8
和92551
开头的价格 - 美国邮编有
5
位和5-4
两种格式 - 匹配模式中的
*
为通配符 - 小于最小重(如25kg)按最小重单价取值
- 大于最大重(如75kg)按最大重单价取值
- 重量单位为kg,保留三位小数,向上取整
- 价格单位为元,保留两位小数,向上取整
举例,客户订单JPFB000A,目的地为ONT8,其邮编是(92551-9534,为5-4
格式),收费重量为30kg。那么,
- 重量30kg在[25,50)区间,所以在第二行(25kg)取值
- 邮编匹配
9*
和92551*
匹配,所以可取10或5(元/kg) - 多个匹配时,相识度高者优先,所以取5(元/kg)
- 相似度,即编辑距离更短,或匹配字符更多。
- 如abc匹配时,
abc*
高于a*
,高于*c
- 要求
*
只能一个,必须在首尾,不可在中间。
所以,这个包裹的费用为 30KG * 5元/KG = 150元。
2.基本要求
新建一个spring或springboot工程,数据库使用mysql,java8环境。
- 设计zone_price的表结构以支持价格的存取和计算。
- 设计PriceService,能支持订单的分区价格计算。
- 有TestCase,满足ONT8等的边界测试。
- 可简化价格表导入功能,录入静态数据。
- 无法实现部分以TODO和md或伪代码说明思路。
- 至少要保证TestCase通过运行。
- 时间不限,期间可联网。
3.加分功能
根据个人能力和实际情况,完成以下任意内容(包括但不限于)
- 匹配模式,增加区间,如
92551-92553
,优先级高于通配符 - 增加价格表(csv)导入功能,做必要的实际工程中必须有的检查
- 价格表包含生效日时和失效日时
- 必要的异常处理,性能优化,代码质量等
–
※ 我们的征途是星辰大海 ※
题图:义乌,十二山头,左手一只锤,右手一只捶,都忘了我是怎么拍的照