• 注册

人人商城分销资格中消费金额新增按一次性消费计算

人人商城有个插件叫人人分销,在开启分销功能后,设置成为分销商条件时,如果选择“消费金额”,默认是按用户累计消费达到设置的数值来计算判断的。

先看最终效果图

需求及分析

在实际运营中,有个需求是强调分销资格中“消费金额”不能累计,需要一次性消费达到一定数值才能成为分销商。由于原代码的判断中用的是累计判断,考虑到原代码的完整性和后期的维护成本,我们可以新增一个开关,在条件选择时设置是否累计或一次性消费。

代码实现

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>

新增开关判断代码,最终代码段为:

<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}
		
		{ifp 'commission.set.edit'}
			<label class="radio-inline"><input type="radio" name="data[moneycount_type]" value="0" {if $data['moneycount_type'] ==0} checked="checked"{/if} name="total" /> 按总计消费金额</label>
			<label class="radio-inline"><input type="radio" name="data[moneycount_type]" value="1" {if $data['moneycount_type'] ==1} checked="checked"{/if} name="disposable" /> 按一次性消费金额</label>
			<span class="help-block">消费金额计算方式(如不选,默认按总计消费金额)</span>
		{else}
			{if $data['moneycount_type']==1}按一次性消费金额{else}按总计消费金额{/if}
		{/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()函数默认是总计消费金额的,我们需要改造一下此段代码,修改后如下:

	//YangJunwei:成为分销商条件 消费金额
	else if ($set['become'] == '3') 
	{
		if ($set['moneycount_type'] == '1'){//YangJunwei:一次性消费的金额,直接读取订单金额即可
			$moneycount = $order['price'];
		}else{
			$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;
	}

至此修改结束。

发表评论 

我还是想用邮箱注册

登录

忘记密码 ?

用第三方帐号快捷登录

已有账户?前往登录吧~

注册