运费计算规则
<h3>一、分组</h3>
<p>按商家和计费类型分组,其中每组中的商品都是按规格合并后的(总数量、总重量、总金额)。</p>
<p>A、B商品在商家a中,都是按件计费
X、Y商品在商家b中,都是按重量计费
A商品规格m,单价1,数量2,重量3kg
A商品规格n,单价4,数量5,重量6kg</p>
<table>
<thead>
<tr>
<th>商家</th>
<th>计费类型</th>
<th>商品</th>
<th>总数量</th>
<th>总重量</th>
<th>总金额</th>
</tr>
</thead>
<tbody>
<tr>
<td>第一组:商家a</td>
<td>按件</td>
<td>A</td>
<td>2+5=7</td>
<td>2*3+5*6=36</td>
<td>1*3+4*6=27</td>
</tr>
<tr>
<td>B</td>
<td>..</td>
<td>..</td>
<td>..</td>
</tr>
<tr>
<td>第二组:商家b</td>
<td>按重量</td>
<td>X</td>
<td>..</td>
<td>..</td>
<td>..</td>
</tr>
<tr>
<td>Y</td>
<td>..</td>
<td>..</td>
<td>..</td>
</tr>
</tbody>
</table>
<blockquote>
<p>只以A商品为例,其它商品计算规则类似</p>
</blockquote>
<hr />
<h3>二、每个组运费的计算</h3>
<h4>1、分别计算每个商品的最终运费模板规则</h4>
<p>如果运费模板包含特定地区,则判断用户当前地址是否符合,如果符合,则用特定地区的首件、首重、首费、续件、续重、续费覆盖当前运费模板中的项。</p>
<table>
<thead>
<tr>
<th>模板类型</th>
<th>首件</th>
<th>首重</th>
<th>首费</th>
<th>续件</th>
<th>续重</th>
<th>续费</th>
<th>是否包邮</th>
<th>包邮金额</th>
</tr>
</thead>
<tbody>
<tr>
<td>当前运费模板</td>
<td>1</td>
<td>0</td>
<td>5</td>
<td>1</td>
<td>0</td>
<td>1</td>
<td>是</td>
<td>10</td>
</tr>
<tr>
<td>特定地区-新疆</td>
<td>1</td>
<td>0</td>
<td>20</td>
<td>1</td>
<td>0</td>
<td>3</td>
<td>-</td>
<td>-</td>
</tr>
<tr>
<td>特定地区-西藏</td>
<td>1</td>
<td>0</td>
<td>18</td>
<td>1</td>
<td>0</td>
<td>4</td>
<td>-</td>
<td>-</td>
</tr>
</tbody>
</table>
<p>如果当前地址为<strong>新疆</strong>,则最终计算规则为:</p>
<table>
<thead>
<tr>
<th>首件</th>
<th>首重</th>
<th>首费</th>
<th>续件</th>
<th>续重</th>
<th>续费</th>
<th>是否包邮</th>
<th>包邮金额</th>
<th>是否为特定地区</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>0</td>
<td>20</td>
<td>1</td>
<td>0</td>
<td>3</td>
<td>是</td>
<td>10</td>
<td>是</td>
</tr>
</tbody>
</table>
<p>如果当前地址为<strong>新疆、西藏之外</strong>的地区,则最终计算规则为:</p>
<table>
<thead>
<tr>
<th>首件</th>
<th>首重</th>
<th>首费</th>
<th>续件</th>
<th>续重</th>
<th>续费</th>
<th>是否包邮</th>
<th>包邮金额</th>
<th>是否为特定地区</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>0</td>
<td>5</td>
<td>1</td>
<td>0</td>
<td>1</td>
<td>是</td>
<td>10</td>
<td>否</td>
</tr>
</tbody>
</table>
<h4>2、在每一组中排除最终包邮的项</h4>
<p>如果运费模板是包邮,并且商品总金额达到包邮金额,并且不在特定地区,则该项的运费为0</p>
<h4>3、计算剩余项的运费</h4>
<table>
<thead>
<tr>
<th>商品</th>
<th>购买数量</th>
<th>首件</th>
<th>首费</th>
<th>续件</th>
<th>续费</th>
</tr>
</thead>
<tbody>
<tr>
<td>梨</td>
<td>5</td>
<td>2</td>
<td>3</td>
<td>2</td>
<td>2</td>
</tr>
<tr>
<td>桔</td>
<td>3</td>
<td>3</td>
<td>2</td>
<td>1</td>
<td>1</td>
</tr>
</tbody>
</table>
<p>以按件计费为例,计算过程如下:
(1)找首费最多且续费最小的项为首费模板:即梨
(2)梨的运费 = 3(首费) + 2 * ceil( ( 5 - 2 ) / 2 ) = 3 + 4 =7
(3)桔的运费 = ceil( 3 / 1 ) * 1 = 3 (非首费模板只按续费算)
(4)该组总运费 = 7 + 3 = 10</p>
<hr />
<h3>三、每个组的运费之和为总运费</h3>