爱可深思▼ 2020▼ Quiz Scenario Express Price

内测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
  • 第二列以后是匹配的报价,邮编以9892551开头的价格
  • 美国邮编有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)导入功能,做必要的实际工程中必须有的检查
  • 价格表包含生效日时和失效日时
  • 必要的异常处理,性能优化,代码质量等

※ 我们的征途是星辰大海 ※

《内测023:快递分区报价表》 在跨境物流领域,包裹的运费是受包裹重量(实重),三遍尺寸(体积重),始发地和目的地的邮编(分区)约束的,本篇是实际业务中按分区阶梯计算价格的简化场景。
题图:义乌,十二山头,左手一只锤,右手一只捶,都忘了我是怎么拍的照