192 lines
6.4 KiB
PHP
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;
|
|
}
|
|
} |