修改极差问题
This commit is contained in:
parent
d97311b349
commit
e6885ed7de
|
|
@ -108,11 +108,24 @@ class Fenxiao extends BaseApi
|
|||
}
|
||||
}
|
||||
}
|
||||
$sideways_in_progress_commission = $fenxiao_order_model->getFenxiaoOrderList([ [ 'sideways_fenxiao_id', 'like', '%'.$info[ 'data' ][ 'fenxiao_id' ].'%' ], [ 'is_settlement', '=', 0 ], [ 'is_refund', '=', 0 ] ], 'sideways_fenxiao_id,sideways_fenxiao_detail');
|
||||
$sideways_money = 0;
|
||||
if($sideways_in_progress_commission){
|
||||
foreach($sideways_in_progress_commission['data'] as $key => &$val){
|
||||
$ids = json_decode($val['sideways_fenxiao_id'],true);
|
||||
$detail = json_decode($val['sideways_fenxiao_detail'],true);
|
||||
$search = array_search($info[ 'data' ][ 'fenxiao_id' ],$ids);
|
||||
if($search !== false){
|
||||
$sideways_money += $detail[$search]['commission'];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!empty($one_in_progress_commission[ 'data' ][ 'commission' ])) $info[ 'data' ][ 'in_progress_money' ] += $one_in_progress_commission[ 'data' ][ 'commission' ];
|
||||
if (!empty($two_in_progress_commission[ 'data' ][ 'commission' ])) $info[ 'data' ][ 'in_progress_money' ] += $two_in_progress_commission[ 'data' ][ 'commission' ];
|
||||
if (!empty($three_in_progress_commission[ 'data' ][ 'commission' ])) $info[ 'data' ][ 'in_progress_money' ] += $three_in_progress_commission[ 'data' ][ 'commission' ];
|
||||
if ($wholesale_money) $info[ 'data' ][ 'in_progress_money' ] += $wholesale_money;
|
||||
if ($founder_money) $info[ 'data' ][ 'in_progress_money' ] += $founder_money;
|
||||
if ($sideways_money) $info[ 'data' ][ 'in_progress_money' ] += $sideways_money;
|
||||
}
|
||||
return $this->response($info);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -82,12 +82,12 @@ class Order extends BaseApi
|
|||
$field = 'fo.fenxiao_order_id,fo.order_no,fo.site_id,fo.site_name,fo.sku_id,fo.sku_name,fo.sku_image,fo.price,fo.num,fo.real_goods_money,fo.member_name,
|
||||
fo.member_mobile,fo.one_fenxiao_name,fo.is_settlement,fo.commission,fo.is_refund,
|
||||
o.order_status_name,o.create_time,fo.one_fenxiao_id,fo.two_fenxiao_id,fo.three_fenxiao_id,fo.one_commission,fo.two_commission,fo.three_commission
|
||||
,fo.wholesale_fenxiao_id,fo.wholesale_fenxiao_detail,fo.founder_fenxiao_id,fo.founder_fenxiao_detail';
|
||||
,fo.wholesale_fenxiao_id,fo.wholesale_fenxiao_detail,fo.founder_fenxiao_id,fo.founder_fenxiao_detail,fo.sideways_fenxiao_id,fo.sideways_fenxiao_detail';
|
||||
$sql = Db::name('fenxiao_order')->alias('fo')
|
||||
->field($field)
|
||||
->join('order o','fo.order_id = o.order_id','inner')
|
||||
->whereOr([['fo.one_fenxiao_id|fo.two_fenxiao_id|fo.three_fenxiao_id','=',$fenxiao_info['data']['fenxiao_id']] ,
|
||||
['fo.wholesale_fenxiao_id|fo.founder_fenxiao_id','like','%'.$fenxiao_info['data']['fenxiao_id'].'%']]);
|
||||
['fo.wholesale_fenxiao_id|fo.founder_fenxiao_id|fo.sideways_fenxiao_id','like','%'.$fenxiao_info['data']['fenxiao_id'].'%']]);
|
||||
if (!empty($is_settlement)) {
|
||||
if ($is_settlement == 3) {
|
||||
$sql->where('fo.is_refund','=',1);
|
||||
|
|
@ -138,6 +138,13 @@ class Order extends BaseApi
|
|||
if($search !== false){
|
||||
$list['data']['list'][$k]['founder_point'] = $detail[$search]['commission'];
|
||||
}
|
||||
$ids = json_decode($item['sideways_fenxiao_id'],true);
|
||||
$detail = json_decode($item['sideways_fenxiao_detail'],true);
|
||||
$search = array_search($fenxiao_info['data']['fenxiao_id'],$ids);
|
||||
if($search !== false){
|
||||
$list['data']['list'][$k]['two_commission'] = $detail[$search]['commission'];
|
||||
$list['data']['list'][$k]['is_sideways'] = isset($detail[$search]['is_sideways']) && $detail[$search]['is_sideways'] == 1 ? 1 : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $this->response($list);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ namespace addon\fenxiao\model;
|
|||
use app\model\BaseModel;
|
||||
use app\model\message\Message;
|
||||
use app\model\system\Stat;
|
||||
use think\db\Raw;
|
||||
use think\facade\Db;
|
||||
use addon\fenxiao\model\Config as ConfigModel;
|
||||
/**
|
||||
|
|
@ -90,6 +91,7 @@ class FenxiaoOrder extends BaseModel
|
|||
'sideways_rate' => 0,
|
||||
'sideways_commission' => 0,
|
||||
'sideways_fenxiao_detail' => [],
|
||||
'is_range' => $fenxiao_basic_config['is_range'],
|
||||
'weight_money' => 0,
|
||||
// 'weight_fenxiao_id' => [],
|
||||
'is_weight' => 0
|
||||
|
|
@ -146,6 +148,8 @@ class FenxiaoOrder extends BaseModel
|
|||
'sideways_rate' => $order_fenxiao_data['sideways_rate'],
|
||||
'sideways_commission' => $order_fenxiao_data['sideways_commission'],
|
||||
'sideways_fenxiao_detail' => json_encode($order_fenxiao_data['sideways_fenxiao_detail']),
|
||||
'is_range' => $order_fenxiao_data['is_range'],
|
||||
|
||||
'is_weight' => $order_fenxiao_data['is_weight'],
|
||||
// 'weight_fenxiao_id' => json_encode($order_fenxiao_data['weight_fenxiao_id']),
|
||||
'weight_money' => $order_fenxiao_data['weight_money'],
|
||||
|
|
@ -172,8 +176,8 @@ class FenxiaoOrder extends BaseModel
|
|||
private function getPushFenXiaoCommission($fenxiao_info,$v,&$order_fenxiao_data,$type,$config){
|
||||
$one_rate = $config['direct_rate'];
|
||||
$two_rate = $config['indirect_rate'];
|
||||
$is_range = $config['is_range'];
|
||||
$sideways_rate = $config['sideways_rate'];
|
||||
$is_range = $config['is_range'];
|
||||
$one_money = $two_money = 0;
|
||||
$join = [
|
||||
['fenxiao_level fl','f.level_id = fl.level_id','right']
|
||||
|
|
@ -206,32 +210,67 @@ class FenxiaoOrder extends BaseModel
|
|||
}
|
||||
|
||||
//间退
|
||||
if (!empty($g_parent_fenxiao_info) && $g_parent_fenxiao_info[ 'status' ] == 1) {
|
||||
if (!empty($g_parent_fenxiao_info) && $g_parent_fenxiao_info[ 'status' ] == 1 && $order_fenxiao_data['one_fenxiao_id'] > 0) {
|
||||
|
||||
if($type == 2){
|
||||
$fenxiao_level = model('fenxiao_goods_sku')->getInfo([ [ 'goods_id', '=', $v[ 'goods_id' ] ], [ 'sku_id', '=', $v[ 'sku_id' ] ], [ 'level_id', '=', $g_parent_fenxiao_info[ 'level_id' ] ] ]);
|
||||
|
||||
if (empty($fenxiao_level)) return false;
|
||||
$two_rate = $fenxiao_level['indirect_rate'];
|
||||
$two_money = $fenxiao_level['indirect_money'];
|
||||
//必须开启极差并且
|
||||
if($is_range && $type == 2){
|
||||
|
||||
//开启后需要计算所有分销用户
|
||||
if($fenxiao_info['chain']){
|
||||
$data = explode(',', $fenxiao_info['chain']);
|
||||
$chain = array_filter($data, function ($value) {
|
||||
return !empty($value);
|
||||
});
|
||||
$chain = array_values($chain);
|
||||
$count = count($chain);
|
||||
//要删除最后一个数据,最后一个数据是自己的分销商ID
|
||||
unset($chain[$count - 1]);
|
||||
if($parent_fenxiao_info['fenxiao_id'] == $chain[0])
|
||||
unset($chain[0]);//删掉第一个用户,第一个用户拿的是直推奖励
|
||||
$chain = array_values($chain);
|
||||
$chain = array_reverse($chain);
|
||||
|
||||
if($chain){
|
||||
$nodeUser = Db::name('fenxiao')
|
||||
->where('f.is_delete', '=', 0)
|
||||
->alias('f')
|
||||
->join('fenxiao_level l', 'f.level_id = l.level_id', 'right')
|
||||
->where('f.fenxiao_id', '<>', $fenxiao_info['fenxiao_id'])
|
||||
->whereIn('f.fenxiao_id', $chain)
|
||||
->field('f.fenxiao_id,f.fenxiao_name,f.member_id,f.level_id,f.site_id,f.fenxiao_name,f.status,l.level_num,l.rank,l.is_weight')
|
||||
->select(); //获取上级用户
|
||||
$nodeUser = $nodeUser ? $nodeUser->toArray() : [];
|
||||
if(count($nodeUser) > 0){
|
||||
$order_fenxiao_data = $this->getSidewaysCommission($nodeUser,$v,$order_fenxiao_data,$chain,$config,$parent_fenxiao_info['level_num']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if($type == 2){
|
||||
$fenxiao_level = model('fenxiao_goods_sku')->getInfo([ [ 'goods_id', '=', $v[ 'goods_id' ] ], [ 'sku_id', '=', $v[ 'sku_id' ] ], [ 'level_id', '=', $g_parent_fenxiao_info[ 'level_id' ] ] ]);
|
||||
|
||||
if (empty($fenxiao_level)) return false;
|
||||
$two_rate = $fenxiao_level['indirect_rate'];
|
||||
$two_money = $fenxiao_level['indirect_money'];
|
||||
}
|
||||
if ($two_rate > 0) {
|
||||
$order_fenxiao_data['commission_rate'] += $order_fenxiao_data[ 'two_rate' ] = $two_rate;
|
||||
$commission = $two_rate * $v[ 'real_goods_money' ] / 100;
|
||||
} else {
|
||||
$order_fenxiao_data['commission_rate'] += $order_fenxiao_data[ 'two_rate' ] = round($two_money * $v[ 'num' ] / $v[ 'real_goods_money' ], 2);
|
||||
$commission = $two_money * $v[ 'num' ];
|
||||
}
|
||||
//计算极差
|
||||
if($parent_fenxiao_info['level_num'] == $g_parent_fenxiao_info['level_num']){
|
||||
$commission = bcsub($order_fenxiao_data['one_commission'],$commission,2);
|
||||
$order_fenxiao_data[ 'two_commission' ] = $sideways_rate * $commission / 100;
|
||||
$order_fenxiao_data['commission'] += $commission;
|
||||
}
|
||||
$order_fenxiao_data['two_fenxiao_id'] = $g_parent_fenxiao_info['fenxiao_id'];
|
||||
$order_fenxiao_data['two_fenxiao_name'] = $g_parent_fenxiao_info['fenxiao_name'];
|
||||
}
|
||||
|
||||
if ($two_rate > 0) {
|
||||
$order_fenxiao_data['commission_rate'] += $order_fenxiao_data[ 'two_rate' ] = $two_rate;
|
||||
$commission = $two_rate * $v[ 'real_goods_money' ] / 100;
|
||||
} else {
|
||||
$order_fenxiao_data['commission_rate'] += $order_fenxiao_data[ 'two_rate' ] = round($two_money * $v[ 'num' ] / $v[ 'real_goods_money' ], 2);
|
||||
$commission = $two_money * $v[ 'num' ];
|
||||
}
|
||||
|
||||
//计算极差
|
||||
if($is_range && $order_fenxiao_data['one_fenxiao_id'] > 0 && $parent_fenxiao_info['level_num'] == $g_parent_fenxiao_info['level_num']){
|
||||
$commission = bcsub($order_fenxiao_data['one_commission'],$commission,2);
|
||||
$order_fenxiao_data[ 'two_commission' ] = $sideways_rate * $commission / 100;
|
||||
$order_fenxiao_data['commission'] += $commission;
|
||||
}
|
||||
$order_fenxiao_data['two_fenxiao_id'] = $g_parent_fenxiao_info['fenxiao_id'];
|
||||
$order_fenxiao_data['two_fenxiao_name'] = $g_parent_fenxiao_info['fenxiao_name'];
|
||||
}
|
||||
return $order_fenxiao_data;
|
||||
}
|
||||
|
|
@ -253,8 +292,8 @@ class FenxiaoOrder extends BaseModel
|
|||
$chain = array_filter($data, function ($value) {
|
||||
return !empty($value);
|
||||
});
|
||||
$chain = array_values($chain);
|
||||
$count = count($chain);
|
||||
|
||||
//要删除最后一个数据,最后一个数据是自己的分销商ID
|
||||
unset($chain[$count - 1]);
|
||||
$chain = array_values($chain);
|
||||
|
|
@ -342,6 +381,49 @@ class FenxiaoOrder extends BaseModel
|
|||
return $order_fenxiao_data;
|
||||
}
|
||||
|
||||
protected function getSidewaysCommission($nodeUser,$v,&$order_fenxiao_data,$chain,$config,$level_num = 0){
|
||||
$fenxiao_user_id = array_column($nodeUser,'fenxiao_id');
|
||||
$sideways_rate = $config['sideways_rate'];
|
||||
$last_commission = $order_fenxiao_data['one_commission'];
|
||||
foreach($chain as $k => $value){
|
||||
$key = array_search($value,$fenxiao_user_id);
|
||||
$user = $key !== false ? $nodeUser[$key] : [];
|
||||
if($user){
|
||||
$commission = 0;
|
||||
$is_sideways = 0;
|
||||
//计算平级将奖
|
||||
if($level_num == $user['level_num']){
|
||||
$is_sideways = 1;
|
||||
$compute_money = $this->getSidewaysFenxiao($user,$v,$last_commission);
|
||||
$order_fenxiao_data['commission_rate'] += $order_fenxiao_data[ 'sideways_rate' ] = $sideways_rate;
|
||||
$commission = $sideways_rate * $compute_money / 100;
|
||||
}else if($user['level_num'] > $level_num){
|
||||
//必须要大于上一个等级的人才可以拿奖励
|
||||
$goods_config = model('fenxiao_goods_sku')->getInfo([ [ 'goods_id', '=', $v['goods_id'] ], [ 'sku_id', '=', $v['sku_id'] ], [ 'level_id', '=', $user['level_id'] ] ]);
|
||||
|
||||
if ($goods_config['direct_rate'] > 0) {
|
||||
$order_fenxiao_data['commission_rate'] += $order_fenxiao_data[ 'sideways_rate' ] = $goods_config['direct_rate'];
|
||||
$commission = $goods_config['direct_rate'] * $v[ 'real_goods_money' ] / 100;
|
||||
} else {
|
||||
$order_fenxiao_data['commission_rate'] += $order_fenxiao_data[ 'sideways_rate' ] = round($goods_config['direct_money'] * $v[ 'num' ] / $v[ 'real_goods_money' ], 2);
|
||||
$commission = $goods_config['direct_money'] * $v[ 'num' ];
|
||||
}
|
||||
$commission = $commission - $last_commission;
|
||||
|
||||
}
|
||||
if($commission > 0){
|
||||
$level_num = $user['level_num'];
|
||||
$last_commission = $commission;
|
||||
$order_fenxiao_data['sideways_fenxiao_id'][] = $user['fenxiao_id'];
|
||||
$order_fenxiao_data['commission'] += $order_fenxiao_data[ 'sideways_commission' ] += $commission;
|
||||
$order_fenxiao_data['sideways_fenxiao_detail'][] = ['name' => $user['fenxiao_name'], 'commission' => $commission,'is_sideways' => $is_sideways];
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return $order_fenxiao_data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -366,6 +448,59 @@ class FenxiaoOrder extends BaseModel
|
|||
return $rates[$rank];
|
||||
}
|
||||
|
||||
protected function getSidewaysFenxiao($user,$v,$money){
|
||||
$commission = 0;
|
||||
$fenxiao_info = model('fenxiao')->getInfo([ 'fenxiao_id' => $user['fenxiao_id'] ], 'parent,chain');
|
||||
if($fenxiao_info['chain'] && $fenxiao_info['parent'] > 0){
|
||||
//必须有关系链并且存在父级ID才继续执行
|
||||
$data = explode(',', $fenxiao_info['chain']);
|
||||
$chain = array_filter($data, function ($value) {
|
||||
return !empty($value);
|
||||
});
|
||||
$chain = array_values($chain);
|
||||
$count = count($chain);
|
||||
|
||||
//要删除最后一个数据,最后一个数据是自己的分销商ID
|
||||
unset($chain[$count - 1]);
|
||||
$chain = array_values($chain);
|
||||
$chain = array_reverse($chain);
|
||||
|
||||
$nodeUser = Db::name('fenxiao')
|
||||
->where('f.is_delete', '=', 0)
|
||||
->alias('f')
|
||||
->join('fenxiao_level l', 'f.level_id = l.level_id', 'right')
|
||||
->where('f.fenxiao_id', '<>', $user['fenxiao_id'])
|
||||
->whereIn('f.fenxiao_id', $chain)
|
||||
->where('l.level_num' ,'>', $user['level_num'])
|
||||
->field('f.fenxiao_id,f.fenxiao_name,f.member_id,f.level_id,f.site_id,f.fenxiao_name,f.status,l.level_num,l.rank,l.is_weight')
|
||||
->select(); //获取上级用户
|
||||
$nodeUser = $nodeUser ? $nodeUser->toArray() : [];
|
||||
usort($nodeUser, function($a, $b) use ($chain) {
|
||||
$posA = array_search($a['fenxiao_id'], $chain);
|
||||
$posB = array_search($b['fenxiao_id'], $chain);
|
||||
|
||||
return $posA - $posB;
|
||||
});
|
||||
|
||||
if($nodeUser){
|
||||
$nsUser = $nodeUser[0];//取顺位第一位
|
||||
$goods_config = model('fenxiao_goods_sku')->getInfo([ [ 'goods_id', '=', $v['goods_id'] ], [ 'sku_id', '=', $v['sku_id'] ], [ 'level_id', '=', $nsUser['level_id'] ] ]);
|
||||
if ($goods_config['direct_rate'] > 0) {
|
||||
$commission = $goods_config['direct_rate'] * $v[ 'real_goods_money' ] / 100;
|
||||
} else {
|
||||
$commission = $goods_config['direct_money'] * $v[ 'num' ];
|
||||
}
|
||||
$commission = $commission - $money;
|
||||
}
|
||||
}
|
||||
return $commission > 0 ? $commission : 0;
|
||||
|
||||
}
|
||||
// 定义比较函数
|
||||
protected function compareByAge($a, $b) {
|
||||
return $a['age'] <=> $b['age']; // 使用太空船操作符(PHP 7+)进行比较
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单退款
|
||||
* @param $order_goods_id
|
||||
|
|
|
|||
|
|
@ -104,7 +104,18 @@ Order.prototype.cols = [
|
|||
merge : false,
|
||||
template : function(orderitem,order){
|
||||
var html = '<div>直推分佣:'+ (orderitem.one_fenxiao_id > 0 ? orderitem.one_fenxiao_name +' ¥' + orderitem.one_commission : '--') +'</div>';
|
||||
html += '<div>间推分佣:'+ (orderitem.two_fenxiao_id > 0 ? orderitem.two_fenxiao_name +' ¥' + orderitem.two_commission : '--') +'</div>';
|
||||
if(orderitem.is_range > 0){
|
||||
var array_detail = $.parseJSON(orderitem.sideways_fenxiao_detail);
|
||||
for(var i=0;i<array_detail.length;i++){
|
||||
if(i == 0){
|
||||
html += '<div>间推分佣:'+ (array_detail[i].commission > 0 ? array_detail[i].name +' ¥' + array_detail[i].commission : '--') +'</div>';
|
||||
}else{
|
||||
html += '<div style="padding-left: 24%">'+ (array_detail[i].commission > 0 ? array_detail[i].name +' ¥' + array_detail[i].commission + (array_detail[i].is_sideways == 1 ? '(平级奖)' : '') : '--') +'</div>';
|
||||
}
|
||||
}
|
||||
}else{
|
||||
html += '<div>间推分佣:'+ (orderitem.two_fenxiao_id > 0 ? orderitem.two_fenxiao_name +' ¥' + orderitem.two_commission : '--') +'</div>';
|
||||
}
|
||||
if(orderitem.wholesale_commission > 0){
|
||||
var array_detail = $.parseJSON(orderitem.wholesale_fenxiao_detail);
|
||||
for(var i=0;i<array_detail.length;i++){
|
||||
|
|
|
|||
|
|
@ -24,16 +24,16 @@ class Test{
|
|||
|
||||
//
|
||||
public function test(){
|
||||
$orderId = 108;
|
||||
$orderId = 111;
|
||||
$order_info = model('order')->getInfo(['order_id' => $orderId]);
|
||||
$fenxiao_order = new OrderPay();
|
||||
// $fenxiao_order = new OrderPay();
|
||||
// $res = $fenxiao_order->handle($order_info);
|
||||
// $fenxiao_order = new WeightOrder();
|
||||
// $res = $fenxiao_order->calculate(1);
|
||||
// $fenxiao_order_model = new FenxiaoOrder();
|
||||
$res = $fenxiao_order->handle($order_info);
|
||||
// $fenxiao_order_model = new FenxiaoOrder();
|
||||
// $res = $fenxiao_order_model->calculate($order_info);
|
||||
// $res = $fenxiao_order->handle($order_info);
|
||||
$fenxiao_order_model = new FenxiaoOrder();
|
||||
$res = $fenxiao_order_model->calculate($order_info);
|
||||
// $res = $fenxiao_order_model->settlement($orderId);
|
||||
dump($res);die;
|
||||
$fenxiao_id = 195;
|
||||
|
|
|
|||
Loading…
Reference in New Issue