oracle分区键使用大于小于会失效吗_内测023:快递分区报价表

1b8611e8129e7e427cc942093787ff83.png

义乌,十二山头,左手一只锤,右手一只捶,都忘了我是怎么拍的照

#Quiz #Scenario #Express #Price

在跨境物流领域,包裹的运费是受包裹重量(实重),三边尺寸(体积重),始发地和目的地的邮编(分区)约束的,本篇是实际业务中按分区阶梯计算价格的简化场景。

@史荣久 / 2020-09-06 / CC-BY-SA-3.0  

## 1.需求描述

业务部门的同事会维护一张excel的报价表,格式和数据简化如下。

阶梯 ⁄ 邮编9* 8*92551*
2510205
50152510
75203015

其中,标题和内容的说明如下,

  • 第一行是表头,阶梯报价和邮编分区的匹配模式

  • 第一列为收费重量(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)导入功能,做必要的实际工程中必须有的检查

  • 价格表包含生效日时和失效日时

  • 必要的异常处理,性能优化,代码质量

--

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值