人人商城分销资格中消费金额新增按一次性消费计算
人人商城有个插件叫人人分销,在开启分销功能后,设置成为分销商条件时,如果选择“消费金额”,默认是按用户累计消费达到设置的数值来计算判断的。
先看最终效果图
需求及分析
在实际运营中,有个需求是强调分销资格中“消费金额”不能累计,需要一次性消费达到一定数值才能成为分销商。由于原代码的判断中用的是累计判断,考虑到原代码的完整性和后期的维护成本,我们可以新增一个开关,在条件选择时设置是否累计或一次性消费。
代码实现
1、添加条件选择的设置模板
新增参数 moneycount_type,为1时表示一次性消费满额,为0时表示总计消费满额(也是默认判断方式)。
打开模板设置文件
/addons/ewei_shopv2/plugin/commission/template/web_v3/set/relate.html
找到如下消费金额条件的代码段
<div class="form-group become become3" {if $data['become']!='3' }style="display:none"{/if}> <label class="col-lg control-label" ></label> <div class="col-sm-9 col-xs-12"> {ifp 'commission.set.edit'} <div class='input-group' > <div class='input-group-addon'>消费达到</div> <input type='text' class='form-control' name='data[become_moneycount]' value="{$data['become_moneycount']}" /> <div class='input-group-addon'>元</div> </div> {else} 消费达到 {$data['become_moneycount']}元 {/if} </div> </div>
新增开关判断代码,最终代码段为:
2、修改成为分销商的后端处理
打开分销处理文件
/addons/ewei_shopv2/plugin/commission/core/model.php
这里分为两种情况,在成为分销商设置的地方,有个选项是“消费条件统计的方式”,1种是订单付款后,对应函数 checkOrderPay();1种是订单完成后,对应函数 checkOrderFinish()。
注意,这里只修改 !($isagent) 的情况,也就是非分销商消费时是否符合升级条件,而 $isagent 则表示已经是分销商,这时就看成为便于股东的条件。
我们先来看第1种情况:订单付款后
找到订单完成后的处理函数 checkOrderPay(),以下操作均在本函数内。
首先添加读取订单的订单金额字段 price,如下
$order = pdo_fetch('select id,openid,ordersn,price,goodsprice,agentid,paytime from ' . tablename('ewei_shop_order') . ' where id=:id and status>=1 and uniacid=:uniacid limit 1', array(':id' => $orderid, ':uniacid' => $_W['uniacid']));
接着找到非分销商的操作代码段
if (!($isagent)) { …… //YangJunwei:成为分销商条件 消费金额 else if ($set['become'] == '3') { $moneycount = pdo_fetchcolumn('select sum(og.realprice) from ' . tablename('ewei_shop_order_goods') . ' og left join ' . tablename('ewei_shop_order') . ' o on og.orderid=o.id where o.openid=:openid and o.status>=1 and o.uniacid=:uniacid limit 1', array(':uniacid' => $_W['uniacid'], ':openid' => $openid)); $can = floatval($set['become_moneycount']) <= $moneycount; }
主要看上述 become = 3 的代码段,sum()函数默认是总计消费金额的,我们需要改造一下此段代码,修改后如下:
else if ($set['become'] == '3') { if ($set['moneycount_type'] == '1'){//YangJunwei:一次性消费的金额,直接读取订单金额即可 $moneycount = $order['price']; }else{ $moneycount = pdo_fetchcolumn('select sum(og.realprice) from ' . tablename('ewei_shop_order_goods') . ' og left join ' . tablename('ewei_shop_order') . ' o on og.orderid=o.id where o.openid=:openid and o.status>=1 and o.uniacid=:uniacid limit 1', array(':uniacid' => $_W['uniacid'], ':openid' => $openid)); } $can = floatval($set['become_moneycount']) <= $moneycount; }
接着来看第2种情况:订单完成后
为保证代码独立性,同时降低小白的修改难度,我把过程完全写出来,有基础的可以不用往下看了,对应上述第1种情况修改即可。
找到订单完成后的处理函数 checkOrderFinish(),以下操作均在本函数内。
首先添加读取订单的订单金额字段 price,如下
$order = pdo_fetch('select id,openid,ordersn,price,goodsprice,agentid,finishtime from ' . tablename('ewei_shop_order') . ' where id=:id and status>=3 and uniacid=:uniacid limit 1', array(':id' => $orderid, ':uniacid' => $_W['uniacid']));
接着找到非分销商的操作代码段
//Y:当前为非分销商且条件为订单完成后,判断是否符合成为分销商的条件 if (!($isagent) && ($set['become_order'] == '1')) { …… //YangJunwei:成为分销商条件 消费金额 else if ($set['become'] == '3') { $moneycount = pdo_fetchcolumn('select sum(goodsprice) from ' . tablename('ewei_shop_order') . ' where openid=:openid and status>=3 and uniacid=:uniacid limit 1', array(':uniacid' => $_W['uniacid'], ':openid' => $openid)); $can = floatval($set['become_moneycount']) <= $moneycount; }
主要看上述 become = 3 的代码段,sum()函数默认是总计消费金额的,我们需要改造一下此段代码,修改后如下:
至此修改结束。