商城系统运费模版的设计与实现

395 篇文章 35 订阅

对于商城系统来说,运费系统是必不可少的,最简单的就是在每个商品添加的时候设置此商品购买时候的运费,但是这个逻辑并不能满足用户的需求,无法按照客户的地址设置不同的运费,设置地区包邮,不配送等一系列的操作。那怎么能更快更简单的实现这个功能呢,这篇文章,我会将我开发CRMEB单商户系统时的设计思路拿出来和大家分享,希望大家看完能有所启发并找到更好的解决办法。

希望大家看完在动手,看一半就觉得自己行了,容易写BUG~

初版~

对于运费的计算来说,最开始就是要知道用户选择的送货地址,运费计算也不用过于精确地址信息,所以我在全国省市区的数据库里增加了城市ID字段,用户在添加地址的时候,将对应的城市ID也同时存储在用户的地址信息中,这样,用户在每次切换地址的时候,可以根据城市ID字段判断用户所处的城市。

接下来,先创建一个最简单运费模版A表,里面只有城市ID和运费,只要用户的城市ID就能找出你要付多少运费啦,但是当我设置运费的时候,发现了一个大问题,全国这么多城市,难道要一个一个的进行设置么?当然不,国家运输系统这么完善,只有很少的地区运费是不同的,我只要把不同运费的地区设置了就好。其他的,就让他用默认的数据就可以啦。于是,我创建了一条默认数据,城市ID设置为0,当用户的地址在数据里面找不到对应的运费的时候,我就给他默认的运费。

好,最简单的运费模版已经出来了,管理者可以简单的设置每个地区的运费是多少,在用户下单的时候按照地址计算运费就能得出对应地址的运费啦。

进阶版~

思考一下,商城里面包含多种多样的商品,总不能一件衣服和一台冰箱的运费是一样的吧,那岂不是很亏。所以商城里面需要多个运费模版进行不同的价格计算,我创建了新的数据B表来存储多个运费模版,包括模版名称,添加时间,A表内就可以增加B表内对应的模版ID,和城市ID和运费来计算不同运费模版下同一个城市的不同运费啦。

接下来,我考虑物流中会出现首件和续件的问题,那么我们地区运费就要增加续件的字段,来存储续件的金额,比如我购买了2件商品,商品的首件是10元,续件是5元,那么这个订单的运费就是首件加上续件的费用一共15元。

现在运费模版已经成型了,每个商品都可以使用不同的运费模版来计算整体订单的运费,购买多件商品,就可以按照不同用户地址,不同的运费模版,不同的首件和续件的费用,来确定当前订单的世纪运费了,接下来就是继续细化运费模版的其他功能了。

终极版~

江浙沪包邮?这个问题又出现在了我的脑海中,那我怎么能在模版中设置包邮信息呢?思前想后,我发现一个最简单的办法,就是把对应包邮的地址的首件和续件费用都写成0,计算的时候就不会增加运费了。

不过,如果是满多少钱进行包邮呢?如果说,我有一个上海地区的运费模版,我想用户在购买超过100元的时候给他包邮怎么办。我又开始了我的发呆时间。。。

想到了,我又给A表里增加了满额包邮的字段,用来记录此区域需要满额的金额,计算的时候将同一个运费模版下的金额加起来,只要大于了这个金额,我就直接跳过此模版的计算。

订单在购买多个商品,牵扯到多个运费模版的时候,可以在计算的时候按照运费模版进行数据的分类整理,计算出每个运费模版里面商品的件数,总金额,然后每个运费模版单独计算,先通过计算此运费模版是否满足了包邮,如果满足跳过后面的运费计算,如果没有满足包邮情况的时候,继续进行件数的首件和续件的计算,将每次计算出来的运费相加,就得出了最后的订单运费。

接下来,就是完善我们的运费模版了,模版名称,模版是按照件数、重量还是体积进行运费的计算,包邮是否还要按照别的情况进行计算。

CRMEB运费模版的实现

CRMEB单商户系统中的运费模版很强大了,不仅可以设置不同地区的运费,还可以判断运费模版是按照件数、体积还是重量进行计算。可以设置单独的包邮数据以及指定地区不送货的逻辑。首件和续件的金额计算可以设定首件件数。包邮同时判断了件数和金额。可以满足大多数商城系统管理者的需求。

运费模版的添加

后台添加运费模版的页面,填写运费模版的名称,选择该运费模版是按照那种计费方式进行计费(件数,重量,体积),选择对应的城市数据,添加运费和包邮信息等。

在这里插入图片描述

运费模版的计算逻辑

1.先获取到用户订单的商品和地址信息,将所有的商品按照运费模版进行分组整理,得到每个运费模版的商品总数,总价和此运费模版的运费金额,指定包邮信息等。 c a r t I n f o 变 量 里 面 存 储 的 就 是 该 订 单 下 所 有 的 商 品 信 息 , 包 括 金 额 , 件 数 或 体 积 或 重 量 , 对 应 的 运 费 模 版 I D 等 信 息 。 cartInfo变量里面存储的就是该订单下所有的商品信息,包括金额,件数或体积或重量,对应的运费模版ID等信息。 cartInfoIDaddr里面包含用户现在选择的的地址信息,用于最后查询包邮或者运费。

在这里插入图片描述

2.按照用户当前选择的地址,根据当前地址数据内的city_id查询当前地址是否在指定包邮的地区内,然后在判断商品件数和金额是否大于设定的件数和金额,满足条件在运费模版的数组中删除此运费模版的数据。

在这里插入图片描述

3.经过步骤2,$temp_num数组中,只会剩下需要计算运费的数据,系统接下来会在先计算出首件运费最大值,设置初始运费为0开始计算订单所需运费。

在这里插入图片描述

4.循环计算运费,将首件最大的运费模版设置为首件计算,剩余的模版都按照续件进行金额的计算,如果有多个首件金额等于最大值,会将多个运费模版当作首件进行计算,最后取得运费最大值返回。
在这里插入图片描述
如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star: http://github.crmeb.net/u/defu 不胜感激 !

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值