作为电商基础中最关键的一环,运费计算是基础并且核心的设计,而且计算过程也比较复杂,一不小心就会考虑不周。
笔者分为三个问题分析该怎么计算运费
问题一:各种商品混在一起时运费怎么归类计算呢?
问题二:多个商品和单个商品运费是一个运费价格计算的吗?
问题三:不同的多个商品选择了不同的运费模版,怎样才能合理计算运费保证商家和用户双方的利益呢?
问题一:各种商品混在一起时运费怎么归类计算呢?
1)一般方法按照店铺归类的品类计算运费。
店铺一般是以商品分类为导向的。比如淘宝店铺的归类。卖家具的店铺一般就不会有卖衣服。因此卖家具的店铺采用按体积计算运费,采用的是物流或者某些特别的快递服务。卖衣服的店铺一般按照重量计算运费,采用如四通一达的快递服务,模版选择按重量计算。
当一次购买多件商品的时候,一个店铺的商品自动归类到一个订单,如淘宝店铺。
当然也可以按照自营与联营的方式计算。普通的自营店铺一起计算运费,联营店铺算是各个商家独自的店铺分别计算,如京东商城。
2)特殊品类按品类分别计算运费。
为什么上面第一点一直强调的普通店铺。因为商品存在特殊性,比如生鲜水果水产冰冻食品,易碎物品对快递及时性和冷链配置要求比较高,导致于普通无要求的商品的价格不一样。另外店铺在做活动时,特价商品会和其他普通商品可能存在不同价格的运费。
因此无论是京东还是淘宝都将生鲜水果和普通的商品划分出来独自成立一个店铺或者说独自计算运费。
比如京东的生鲜与普通商品一起购买时,未达到京东生鲜的包邮标准时需要同时支付生鲜的运费以及普通商品运费。虽然是合在一个订单里面,实际是按照两笔订单计算运费。
京东订单天猫超市则是分开成2个店铺生成2个订单计算运费。
淘宝订单3)贵重商品计算运费方式。
一般贵重商品比如贵重的电器,金银首饰等,运费相对于商品价格微乎其微,运费相对利润比较少,大多数贵重商品的品类采用的是包邮方式。当然也可以采用保价方式。而一般金银首饰更加贵重的商品考虑到安全性线上支付定金,线下自己提货的方式居多。
问题二:多个商品和单个商品运费是一个运费价格计算的吗?
商品虽然一般是按照店铺为单位计算运费,但是由于每个商品还是有自己的特殊性,计算商品运费是按照每个商品自己的模版进行计算。另外商品运输可能采用四通一达还是顺丰或者其他小快递公司也会导致运费价格不一致。
比如商品A 和B的运费模版为江浙沪运费5元,江浙沪以外地区10元。但是现在店铺为了促销做活动,商品A江浙沪包邮。则商品A需要设置成江浙沪运费0元,江浙沪以外地区10元的运费模版。
商品A用户要求使用顺丰快递邮寄,则江浙沪运费为10元,江浙沪以外地区为22元。
那么,运费模版该怎么设计呢?
要考虑的有几个步骤:
1)店铺商家设置可以不同快递或者不同活动的运费模版
2)店铺商家设置不同区域的运费模版
3)店铺商家给每个商品选择相应的运费模版或者用户在确认订单下单时可以自主选择可选范围其一的运费模版。
我们以经常使用计重方式为例,在商家的店铺后台设置运费模版。
第一步:新建模版。
输入模版名称,比如顺丰运费模版,用于商品选择模版时进行区分。
默认运费是指除指定区域的运费以外地区使用的模版。
包邮则不用计算重量,无论该数据多少kg运费都为0元,选择不包邮则需要设置首重和续重。
在运费计算里面,首重的kg数内是一个指定的价格,续重则为超过首重以后的kg数,增加的运费价格,一般快递公司是按照每超过1kg计算增加运费。
新建运费模版第二步:为每个区域设置相应的运费价格。
按照普遍快递公司收费标准,为指定区域设置运费设置到省级就足够。以店铺发货点为始发地根据距离以及交通的便利情况置不同的区间价格。
以江浙沪为例,一般快递公司分为第一区间(江浙沪) 第二区间(皖赣鲁京津冀豫湘粤),第三区间其他 边远地区等价格。
选择指定区域根据店铺需要,可以设置多个运费模版以用于其他活动或者其他快递公司
多个运费模版第三步:设置每个商品的运费模版。
首先,模版需要根据重量计算运费,则每个商品的属性中需要输入重量。
一般商品重量包括 净重+ 包装重量 = 毛重。
商品计算运费的重量使用的是毛重。
商品编辑的毛重需要输入数字类型,用于在运费计算时作为统一单位计算。
其次为商品选择一个指定的运费模版,或者如果希望用户在下单时自己选择每个商品的运费模版时,商家可以设置可选的运费模版以及设置默认的运费模版。
设置运费模版保存好后就可以按照规则计算运费了。
问题三:不同的多个商品选择了不同的运费模版,怎样才能合理计算运费保证商家和用户双方的利益呢?
一个订单只有一个商品时的计算运费方式比较简单:
if(商品毛重>该模版首重)
该订单运费 = 该模版首重价格+ceil(商品毛重-该模版首重) *该模版续重价格
else
该订单运费 = 该运费模版首重价格。
当多个具有相同运费模版商品,同一个订单默认同一个包裹发出,则不能分别计算独自的首重和续重,应该统一在一起计算运费,否则用户则相当于使用了2个包裹:
if(Sum(商品毛重)>该模版首重)
该订单运费 =该模版首重价格+ceil(Sum(商品毛重)-该模版首重) *该模版续重价格
else
该订单运费 =该模版首重价格。
问题来了,如果不同运费模版商品怎么计算运费呢?同一个包裹发出不同的运费模版时(可能某个商品包邮,也有可能某个商品江浙沪需要运费,某个商品江浙沪不要运费),也不能分别计算独自的首重和续重,怎样才能同时保证商家和用户双方的利益呢?
一般取舍方案是:
1)取最大首重价格的模版首重作为订单首重价格和首重门槛,然后你分别计算商品独自的续重价格。
2)当有最大首重价格相同,首重单位价格相同,续重价格不同的模版时,选取最小续重的模版作为订单首重。
3)当有最大首重价格相同,单位价格不同时,取单位价格最大的模版作为订单的首重。
4)包邮商品不参与运费计算
计算方式如下:
1.先计算Max首重价格商品的运费值
2.顺序计算除去Max首重价格商品以外的商品毛重值
2.1 该商品毛重小于首重中剩余的重量,则不用计算运费,使用首重运费
2.2 该商品毛重大于首重中剩余的重量则多出来的重量则需要使用自增运费
(按照顺序计算逻辑简单也可以按照计算最优值,看计算复杂程度)
伪代码逻辑如下:
temp = 0;//temp首重中累计商品的毛重,最大值为首重
运费 = 0;
if(Max首重价格商品毛重 > 首重) {
运费 = 首重运费 + (temp - 首重)* Max首重价格商品的增重价格 ;
temp = 首重;
} else {
运费 = 首重运费;
temp = max商品毛重;
}
for(对其余有效商品遍历) {
if( 该商品毛重 <= 首重 - temp ) {
//该商品毛重小于首重中剩余的重量,则不用计算运费,使用首重运费。
temp = temp + 该商品毛重;
} else {
//该商品毛重大于首重中剩余的重量则多出来的重量则需要使用自增运费
运费 = 运费 + 该商品增重运费 *( 该商品毛重 - (首重 - temp));
temp = 首重;
}
}
举例说明:
模版A 首重3kg 5元,续重1kg 1元。
模版B 首重3kg 3元,续重1kg 2元。
模版C 首重2kg 5元,续重1kg 1元。
3个商品ABC 分别重 4kg,4kg,4kg,分别使用模版ABC,则首重则选择的是模版C的首重 2kg5元。
多个商品模版计算运费先取最大首重(单位首重)价格和最小增重价格的商品来计算所有商品毛重的首重。
则购买3个商品各买一件时的运费即为:
5(A的首重)+ (4-2)*1(商品A续重)+ 4*2(商品B续重)+4*1(商品C续重) = 19元
Why?为什么不直接选取最贵的首重费用模版直接计算首重和续重呢?
首先首重作为商品重量总和的一个台阶,只要有包裹产生则该最贵的首重价格必然产生。因此采取最贵首重的模版。
其次其他模版的商品相当于搭载了最贵首重包裹的顺风车,将多余的重量塞在了最贵首重的包裹里面,独立商品多出来的部分则独立计算多余金额。
因此这种算法考虑了商家和用户双方的利益有一定的合理性。
基本的运费计算方法已经介绍完成。当然还有重要的一点是:订单中总运费需要计算以外,每个商品的单独的运费需要在订单属性中保存下来,用于商品的退款计算等。另外,结合整体店铺的活动运费分摊到每个商品的运费价格还有需要注意的地方,下篇再讨论。
网友评论
1)第一个问题,你说的对的。该模版续重价格应该强调是归一价格。
2)第二个问题,不同商品不同的种类计算方式可以参考前面【问题一:各种商品混在一起时运费怎么归类计算呢?】的解决方式。在确认订单前可以判断每个商品计量方式,提示需要分别计算。
《《《一个订单只有一个商品时的计算运费方式比较简单:
if(商品毛重>该模版首重)
该订单运费 = 该模版首重价格+ceil(商品毛重-该模版首重) *该模版续重价格
else
该订单运费 = 该运费模版首重价格。
》》》
这一句应该是:该订单运费 = 该模版首重价格+ceil((商品毛重-该模版首重)/模版续重) *该模版续重价格。
我想请教一下,如果一个订单里有多种商品,而且不同商品的运费模版不同,有可能一种是按件计算,一种是按重计算。对于这种情况什么才能合理的计算运费呢?