Files

192 lines
6.4 KiB
PHP

<?php
namespace app\common\behavior\app\agent;
use app\common\model\order\Item;
use app\common\model\app\agent\Goods;
use app\common\model\app\agent\Order as AgentOrder;
/**
* 分销等级
*/
class Commission
{
/**
* 分佣金 创建订单
* @param $order 订单
* @return bool
*/
public function run($orderNo)
{
$agentConfig = \app\common\model\app\Config::getConfig('agent');
if(!$agentConfig){
return false;
}
//未开启分销
if($agentConfig['status'] != 1){
return false;
}
$order = \app\common\model\order\Order::where([
'order_no'=>$orderNo
])->find();
if(!$order){
return false;
}
$this->addLog($order);
return true;
}
/**
* 添加记录
* @param $order
* @return false|void
*/
public function addLog($order){
$agentConfig = \app\common\model\app\Config::getConfig('agent');
$orderUserRelation = [
'parent'=>false,
'grandpa'=>false
];
if($order->source == 'channels'){
//获取视频号分享员信息
if(!\app\admin\library\project\App::isInstall('channels')){
return false;
}
$channelsOrder = (new \app\admin\model\app\channels\Order())->getOrderDetail($order->order_no);
if(!$channelsOrder || !$channelsOrder->member || !$channelsOrder->member->user_id || $channelsOrder->member->status != 1){
return false;
}
$orderUserRelation['parent']['parent_id'] = $channelsOrder->member->user_id;
if($orderUserRelation['parent']['parent_id']){
$orderUserRelation['grandpa'] = \app\common\model\app\agent\Relation::getParentUser($channelsOrder->member->user_id);
}
}else{
//找该下单用户的上级关系
$orderUserRelation = \app\common\model\app\agent\Relation::getUserRelation($order->user_id);
if(!$orderUserRelation['parent'] && !$orderUserRelation['grandpa']){
return false;
}
}
//计算佣金
$orderItemList = (new Item())->getItemList($order->order_no);
if(!empty($orderItemList)){
foreach ($orderItemList as $orderItem){
//找该下单用户的上级 商品佣金
try{
if($orderUserRelation['parent']){
$parentProp = Goods::getUserGoodsProp($orderUserRelation['parent']['parent_id'],$orderItem['item_id'],$orderItem['goods_type'],$orderItem['total_price']);
if($parentProp){
$data = [
'uniacid'=>UNIACID,
'order_user_id'=>$order->user_id,
'beneficiary_user_id'=>$orderUserRelation['parent']['parent_id'],
'order_no'=>$order->order_no,
'goods_id'=>$orderItem['item_id'],
'goods_type'=>$orderItem['goods_type'],
'price'=>$orderItem['real_price'],
'order_item_id'=>$orderItem['id'],
'brokerage_price'=>$parentProp['price']['goods'],//
'brokerage_prop'=>$parentProp['prop']['goods'],
'type'=>'commission',
'mode'=>$parentProp['mode'],
'status'=>0,
'createtime'=>time()
];
AgentOrder::insert($data);
}
}
if($agentConfig['mode'] == 2 && $orderUserRelation['grandpa']){
//继续分佣 找该下单用户的上级的上级 下级分销员卖货提成
$grandpaProp = Goods::getUserGoodsProp($orderUserRelation['grandpa']['parent_id'],$orderItem['item_id'],$orderItem['goods_type'],$orderItem['real_price']);
if($grandpaProp){
$data = [
'uniacid'=>UNIACID,
'order_user_id'=>$order->user_id,
'beneficiary_user_id'=>$orderUserRelation['grandpa']['parent_id'],
'order_no'=>$order->order_no,
'goods_id'=>$orderItem['item_id'],
'goods_type'=>$orderItem['goods_type'],
'order_item_id'=>$orderItem['id'],
'price'=>$orderItem['real_price'],
'brokerage_price'=>$grandpaProp['price']['customer'],//
'brokerage_prop'=>$grandpaProp['prop']['customer'],
'type'=>'subordinate',
'mode'=>$grandpaProp['mode'],
'status'=>0,
'createtime'=>time()
];
AgentOrder::insert($data);
}
}
}catch(\think\Exception $e){
continue;
}
}
}
}
/**
* 结算
* @return void
*/
public function settle($orderNo){
$logList = AgentOrder::where([
'order_no'=>$orderNo,
'status'=>0
])->select();
AgentOrder::where([
'order_no'=>$orderNo
])->update([
'status'=>1
]);
if($logList){
foreach ($logList as $log){
$memo = $log['type'] == 'commission' ? '商品佣金' : '下级分销员卖货提成';
\app\api\model\app\agent\Money::changeMoney($log['beneficiary_user_id'],'money',$log['brokerage_price'],false,$memo);
//检查升级
(new \app\api\model\app\agent\Level())->handle($log['beneficiary_user_id']);
}
}
return true;
}
/**
* 取消订单后 作废分佣记录
* @param $orderNo
* @return bool
*/
public function cancelOrder($orderNo){
AgentOrder::where([
'order_no'=>$orderNo
])->update([
'status'=>2
]);
return true;
}
}