|
@@ -4,6 +4,7 @@ namespace app\api\controller;
|
|
|
|
|
|
use app\common\controller\Api;
|
|
|
use think\Db;
|
|
|
+use app\utils\RedisUtil;
|
|
|
/**
|
|
|
* 示例接口
|
|
|
*/
|
|
@@ -40,22 +41,26 @@ class Demo extends Api
|
|
|
*/
|
|
|
public function test()
|
|
|
{
|
|
|
- $order_amount = 1000; //消费额
|
|
|
- $rate = 10; //商家比例
|
|
|
- $user_id = 10; //消费者id
|
|
|
- $shop_id = 10; //门店id
|
|
|
- $this->test1($order_amount,$rate,$user_id,$shop_id);
|
|
|
+ $total_amount = 1000; //消费额
|
|
|
+ $back_rate = 10; //商家比例
|
|
|
+ $user_id = 1; //消费者id
|
|
|
+ $shop_id = 1; //门店id
|
|
|
+ $this->task_bill($total_amount,$back_rate,$user_id,$shop_id,'hotel_order');
|
|
|
}
|
|
|
|
|
|
|
|
|
/*
|
|
|
* 订单额,返利比例
|
|
|
- * $table : offline_shop ,
|
|
|
+ * $total_amount : 订单金额 ,需要计算的订单金额
|
|
|
+ * $back_rate : 各店铺设置的返佣比例 3-20%
|
|
|
+ * $user_id : 下单用户id
|
|
|
+ * $shop_id : 店铺id
|
|
|
+ * $table_name : hotel_order , hotel_canteen_order , university_event_apply , offline_shop_order
|
|
|
* */
|
|
|
- public function test1($total_amount,$back_rate,$user_id,$shop_id,$table_name)
|
|
|
+ public function task_bill($total_amount,$back_rate,$user_id,$shop_id,$table_name)
|
|
|
{
|
|
|
//3-20%
|
|
|
- $amount = bcdiv(bcmul($total_amount,$back_rate,2),100,2);
|
|
|
+ $amount = bcdiv(bcmul($total_amount,$back_rate,4),100,2);
|
|
|
|
|
|
//5倍
|
|
|
// $back_double = config('site.back_double');
|
|
@@ -65,30 +70,226 @@ class Demo extends Api
|
|
|
|
|
|
//商务 发给门店的上级 收益
|
|
|
$shangwu_rate = config('site.back_shangwu');
|
|
|
- $shangwu_amount = bcdiv(bcmul($amount,$shangwu_rate,2),2);
|
|
|
- $shangwu_invite_id = Db::name($table_name)->where('id',$shop_id)->value('invite_id');
|
|
|
+ $shangwu_amount = bcdiv(bcmul($amount,$shangwu_rate,4),100,2);
|
|
|
|
|
|
- //发钱给 $shangwu_invite_id
|
|
|
- if($shangwu_invite_id && $shangwu_amount > 0){
|
|
|
+ $shop_info = (new \app\common\business\PaymentBusiness)->getShopInfo($table_name,$shop_id);
|
|
|
+ if($shop_info && $shop_info['invite_id'] && $shangwu_amount > 0){
|
|
|
+ //发钱给 $shop_info['invite_id']
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//锁客 发给消费者的上级 收益
|
|
|
$suoke_rate = config('site.back_suoke');
|
|
|
- $suoke_amount = bcdiv(bcmul($amount,$suoke_rate,2),2);
|
|
|
- $suoke_invite_id = Db::name('user')->where('id',$user_id)->value('invite_id');
|
|
|
+ $suoke_amount = bcdiv(bcmul($amount,$suoke_rate,4),100,2);
|
|
|
|
|
|
- //发钱给 $suoke_invite_id
|
|
|
+ $suoke_invite_id = Db::name('user')->where('id',$user_id)->value('invite_id');
|
|
|
if($suoke_invite_id && $suoke_amount > 0){
|
|
|
-
|
|
|
+ //发钱给 $suoke_invite_id
|
|
|
}
|
|
|
|
|
|
//网体 业务员逻辑 按月发 收益
|
|
|
|
|
|
|
|
|
- //省代,市代,区代 三个代理 都按月发 收益
|
|
|
+ //省代,市代,区代 三个代理 都按月发 收益, 放到代理月辅助表
|
|
|
+ $map_agent = [
|
|
|
+ 'month_date' => date('Ym'),
|
|
|
+ 'province_id' => $shop_info['province_id'],
|
|
|
+ 'city_id' => $shop_info['city_id'],
|
|
|
+ 'district_id' => $shop_info['district_id'],
|
|
|
+ ];
|
|
|
+ $agent_month = Db::name('agent_month')->where($map_agent)->order('id asc')->find();
|
|
|
+ if(empty($agent_month)){
|
|
|
+ $map_agent['back_amount'] = $amount;
|
|
|
+ $map_agent['updatetime'] = time();
|
|
|
+ $map_agent['status'] = 0;
|
|
|
+
|
|
|
+ Db::name('agent_month')->insertGetId($map_agent);
|
|
|
+ }else{
|
|
|
+ Db::name('agent_month')->where('id',$agent_month['id'])->update([
|
|
|
+ 'updatetime' => time(),
|
|
|
+ 'back_amount' => bcadd($agent_month['back_amount'],$amount,2)
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //业务员奖
|
|
|
+ public function yewuyuan(){
|
|
|
+ $user_id = 1;
|
|
|
+ $last_month = date('Ym',strtotime(date('Y-m-01')) - 86400);
|
|
|
+
|
|
|
+ //我直推线下商家的总数量。
|
|
|
+ $invite_count = Db::name('offline_shop')->where('invite_id',$user_id)->count();
|
|
|
+
|
|
|
+ //我上个月直推线下商家的总数量
|
|
|
+ $invite_count_mon = Db::name('offline_shop')->where('invite_id',$user_id)->whereTime('back_time','last month')->count();
|
|
|
+
|
|
|
+ //我的个人业绩。我所有直推线下商家的3-20%的让利总额
|
|
|
+ $invite_amount = Db::name('bill')->where('shop_invite_id',$user_id)->where('table_name','offline_shop_order')->where('back_status','neq',0)
|
|
|
+ ->whereTime('back_time','last month')->sum('back_amount');
|
|
|
+
|
|
|
+ //我团队业绩
|
|
|
+ $invite_uids = $this->get_all_down_uids($user_id);
|
|
|
+ $invite_amount_tuandui = Db::name('bill')->where('shop_invite_id','IN',$invite_uids)->where('table_name','offline_shop_order')->where('back_status','neq',0)
|
|
|
+ ->whereTime('back_time','last month')->sum('back_amount');
|
|
|
+
|
|
|
+ //dd($last_month,$invite_count,$invite_count_mon,$invite_amount,$invite_amount_tuandui);
|
|
|
+
|
|
|
+ //补贴/提成
|
|
|
+ $butie = 0; //补贴
|
|
|
+ $yeji = 0; //个人业绩提成
|
|
|
+ $yingxiao_level = 0;//用户的营销等级
|
|
|
+
|
|
|
+ //各级的条件
|
|
|
+ $level_list = Db::name('yingxiao_level')->order('id asc')->select();
|
|
|
+ foreach($level_list as $level){
|
|
|
+ if($level['type'] == 1 || 1==1){
|
|
|
|
|
|
+ //营销经理
|
|
|
+ if(1 == 1 || $invite_amount_tuandui >= $level['invite_amount_tuandui'] && $invite_amount >= $level['invite_amount'] && $invite_count >= $level['invite_count']){
|
|
|
+ $butie = $level['butie'];
|
|
|
+ $ticheng_rate = $level['ticheng_rate'];
|
|
|
+
|
|
|
+ $yeji = bcdiv(bcmul($invite_amount,$ticheng_rate,4),100,2);
|
|
|
+
|
|
|
+ $yingxiao_level = $level['id'];
|
|
|
+
|
|
|
+ //公司分红(a%平分,b%业绩加权)
|
|
|
+ $redis_key_a = $last_month . '_yingxiao_' . $yingxiao_level . '_a';
|
|
|
+ RedisUtil::getInstance($redis_key_a)->lPush($user_id);
|
|
|
+
|
|
|
+ //redis左推入当前用户
|
|
|
+ $redis_key_b = $last_month . '_yingxiao_' . $yingxiao_level . '_b';
|
|
|
+ RedisUtil::getInstance($redis_key_b)->lPush(json_encode([
|
|
|
+ 'user_id' => $user_id,'invite_amount_tuandui' => $invite_amount_tuandui,
|
|
|
+ ]));
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ //营销员
|
|
|
+ if($invite_amount >= 60000 && $invite_count_mon >= 5){
|
|
|
+ $butie = $level['butie'];
|
|
|
+ $ticheng_rate = $level['ticheng_rate'];
|
|
|
+
|
|
|
+ $yeji = bcdiv(bcmul($invite_amount,$ticheng_rate,4),100,2);
|
|
|
+
|
|
|
+ $yingxiao_level = $level['id'];
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //dd($butie,$yeji,$yingxiao_level);
|
|
|
+
|
|
|
+ if($yingxiao_level != 0){
|
|
|
+ if($butie > 0){
|
|
|
+ //给 $user_id 发 补贴
|
|
|
+ }
|
|
|
+ if($yeji > 0){
|
|
|
+ //给 $user_id 发 个人业绩
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取我的团队用户ids
|
|
|
+ private function get_all_down_uids($user_id){
|
|
|
+ return $user_id;
|
|
|
+ }
|
|
|
+
|
|
|
+ //业务员 a%评分,b%业绩加权
|
|
|
+ public function yewuyuan_ab(){
|
|
|
+
|
|
|
+ //上个月的公司分红1% 。酒店,餐厅,老年大学活动,线下,商城,所有让利总额,作为基数
|
|
|
+ $back_amount_sum = Db::name('bill')->whereTime('back_time','last month')->where('back_status','neq',0)->sum('back_amount');
|
|
|
+ if($back_amount_sum <= 0){
|
|
|
+ echo '基数为0结束';exit;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ dump('总基数'.$back_amount_sum);
|
|
|
+
|
|
|
+ $yingxiao_level = Db::name('yingxiao_level')->where('id','IN','1,2')->column('id,fenhong,pingfen,jiaquan');
|
|
|
+
|
|
|
+ //百分之一
|
|
|
+ $base_1 = bcdiv(bcmul($back_amount_sum,$yingxiao_level[1]['fenhong'],4),100,4);
|
|
|
+ $base_2 = bcdiv(bcmul($back_amount_sum,$yingxiao_level[2]['fenhong'],4),100,4);
|
|
|
+ dump('百分之一'.$base_1);
|
|
|
+ dump('百分之一'.$base_2);
|
|
|
+ //两个ab基数
|
|
|
+ $back_amount_1_a = bcdiv(bcmul($base_1,$yingxiao_level[1]['pingfen'],4),100,4);
|
|
|
+ $back_amount_1_b = bcdiv(bcmul($base_1,$yingxiao_level[1]['jiaquan'],4),100,4);
|
|
|
+
|
|
|
+ $back_amount_2_a = bcdiv(bcmul($base_2,$yingxiao_level[2]['pingfen'],4),100,4);
|
|
|
+ $back_amount_2_b = bcdiv(bcmul($base_2,$yingxiao_level[2]['jiaquan'],4),100,4);
|
|
|
+
|
|
|
+ dd($base_1,$base_2,$back_amount_1_a,$back_amount_1_b,$back_amount_2_a,$back_amount_2_b);
|
|
|
+
|
|
|
+ //两个ab奖
|
|
|
+ $last_month = date('Ym',strtotime(date('Y-m-01')) - 86400);
|
|
|
+
|
|
|
+ $redis_key_1_a = $last_month . '_yingxiao_1_a';
|
|
|
+ $redis_key_1_b = $last_month . '_yingxiao_1_b';
|
|
|
+
|
|
|
+ $redis_key_2_a = $last_month . '_yingxiao_2_a';
|
|
|
+ $redis_key_2_b = $last_month . '_yingxiao_2_b';
|
|
|
+
|
|
|
+ $list_1_a = RedisUtil::getInstance($redis_key_1_a)->LRANGE();
|
|
|
+ $list_1_b = RedisUtil::getInstance($redis_key_1_b)->LRANGE();
|
|
|
+
|
|
|
+ $list_2_a = RedisUtil::getInstance($redis_key_2_a)->LRANGE();
|
|
|
+ $list_2_b = RedisUtil::getInstance($redis_key_2_b)->LRANGE();
|
|
|
+
|
|
|
+
|
|
|
+ if(!empty($list_1_a)){
|
|
|
+ $price_1_a = bcdiv($back_amount_1_a,count($list_1_a),2);
|
|
|
+ foreach($list_1_a as $item_1_a){
|
|
|
+ dump($item_1_a);
|
|
|
+ dump($price_1_a);
|
|
|
+ //给用户id:$a1发钱
|
|
|
+//
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dump($list_1_b);
|
|
|
+ if(!empty($list_1_b)){
|
|
|
+ //总额
|
|
|
+ foreach($list_1_b as $k_1_b => $v_1_b){
|
|
|
+ $list_1_b[$k_1_b] = json_decode($v_1_b,true);
|
|
|
+ }
|
|
|
+ $total_1_b = array_sum(array_column($list_1_b,'invite_amount_tuandui'));
|
|
|
+ dump($total_1_b);
|
|
|
+ foreach($list_1_b as $v_1_b){
|
|
|
+ dump($v_1_b['user_id']);
|
|
|
+ $price_1_b = bcmul($back_amount_1_b,bcdiv($v_1_b['invite_amount_tuandui'],$total_1_b,4),2);
|
|
|
+ dump($price_1_b);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!empty($list_2_a)){
|
|
|
+ $price_2_a = bcdiv($back_amount_2_a,count($list_2_a),2);
|
|
|
+ foreach($list_2_a as $item_2_a){
|
|
|
+ dump($item_2_a);
|
|
|
+ dump($price_2_a);
|
|
|
+ //给用户id:$a2发钱
|
|
|
+//
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ dump($list_2_b);
|
|
|
+ if(!empty($list_2_b)){
|
|
|
+ //总额
|
|
|
+ foreach($list_2_b as $k_2_b => $v_2_b){
|
|
|
+ $list_2_b[$k_2_b] = json_decode($v_2_b,true);
|
|
|
+ }
|
|
|
+ $total_2_b = array_sum(array_column($list_2_b,'invite_amount_tuandui'));
|
|
|
+ dump($total_2_b);
|
|
|
+ foreach($list_2_b as $v_2_b){
|
|
|
+ dump($v_2_b['user_id']);
|
|
|
+ $price_2_b = bcmul($back_amount_2_b,bcdiv($v_2_b['invite_amount_tuandui'],$total_2_b,4),2);
|
|
|
+ dump($price_2_b);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|