共计 1512 个字符,预计需要花费 4 分钟才能阅读完成。
电商大伙每天都在用,相似某猫,某狗等。
电商零碎设计看似简单又很简略,看似简略又很简单
本章适宜初中级工程师细看,大佬请随便
前言
在订单零碎中,运费模板是其中一个重要组成部分,看似简略的一个设置,在其内的设计中,要思考的问题还是很多滴,上一章咱们讲了运费的一些规定以及在数据库表中如何设计,本章聊聊如何计算运费
获取
通过上一篇文章咱们建设的数据表获取该商品绑定的哪一个运费模版
$templateId = Product::where('id',$product)->value('template_id');
if($template == 0) return [];
指定商品或者会应用多项规定,例如像这样
- 是否包邮
- 指定地区运费
- 达成某种条件下运费多少或者包邮
那这么多条件,咱们要保障所有的规定全副都能够检索到,并且还要晋升其计算速度。
在计算前,该当想好有几种可能性,再抉择其优先级,就像有
三个不同色彩的球,拼凑的办法有多种一样
我记得这应该是一道小学的数学题。
就近准则
相比大家必定做过这道面试题
把一份打乱的字符串,进行排序
那依照经典的形式
- 疾速排序
- 抉择排序
- 插入排序
- 冒泡排序
当然,咱们不讲排序,咱们是要通过这类算法去思考如何以疾速的形式去查问到咱们想要的信息。
排序算法归并与一点外围,就是通过比拟的形式进行,无论是从两头开始进行计算,还是从头或者从尾开始,都是通过对字符串自身要出现形式的一种猜想。
那咱们对于运费计算,应该从什么地位开始“排序”呢?
依据业务,首先咱们思考对于是否包邮、指定地区运费、达成指定条件这三种规定,他们的优先级大多是这样的。
达成指定条件 > 指定地区运费 > 是否包邮
一、达成 指定条件 就不在计算指定地区条件和是否包邮
二、达成 指定地区条件 就不判断是否包邮
思路是不是清晰了一点呢,那么咱们上代码
实战
演示为伪代码,这类计算必定不能交给 前端去计算,会呈现很多平安问题,例如数据被篡改等等,偷懒的后端不是一个好后端
当咱们获取 templateId 后,在表 product_template_config 中查问其关联的规定,这是一个一对多的数据列,意味着会查问出多条,首先咱们先查问指定条件。
select count(1) product_template_config where template_id = $templateId and 是否有指定条件
当有指定条件则进行计算,例如
- 达成指定金额,运费固定
- 达成指定金额,运费多少
计算就简略了,小学就学过的嘛~
商品数量 * 商品单价 > 指定金额 = 运费
如果没有指定条件,则去查问指定城市运费,城市咱们应用的是 json 存储,会有多条,免不了 for,这样你必定会说了,那很多个城市不会导致效率低嘛?做任何性能都要以理论业务登程,除了西藏、新疆及偏远地区,会有商家一个市一个市设置不同运费的嘛????,那咱们就应用 2 种形式
第一种:没有蛇精病的商家
$list = "select * from `product_template_config` where template_id = $templateId";
$city = [];
for($list){if($list->city == "北京市"){return price;}
}
第二种:有蛇精病的商家
这种办法,那咱们就在 sql 高低点功夫, 不应用 json 查问
select * from `product_template_config` where city like "% 北京市 %"
最初如果以上两种规定都不满足,则就回到最简略都自定义运费和是否包邮,自定义运费的话就计算最终运费,包邮的话,间接 return 0 就完事喽。
流程图如下
至此,咱们运费模版的设计和实战就到此结束了。
致谢
感激你的关注,心愿本篇文章能够帮到你,谢谢。