task_bill($total_amount,$back_rate,$user_id,$shop_id,'hotel_order');
}
/**
* 40期限 数据模拟
* @return void
*/
public function fenhong40()
{
$jishu = !empty(input('js')) ? input('js') : rand(100,99999);// 最初基数
$rlbl = !empty(input('rl')) ? input('rl') : rand(3,20);// 让利比例,3-20;单位 %
$qi = !empty(input('qi')) ? input('qi') : 40;// 期数
$mqzz = !empty(input('sz')) ? input('sz') : 1.15;// 每期上涨金额倍数
echo "";
echo "
期数 |
消费(元) |
让利比例(%) |
让利(元) |
商家5倍积分 |
用户5倍积分 |
发放40%(元) |
商家得 |
用户得 |
累计总得 |
";
// $arr = [];
$z = 0;
for ($i = 1; $i <= $qi; $i++) {
$sj5b = bcmul($jishu, 5,2);
$ff40 = bcmul($jishu,'0.01',2);
$ff402 = bcdiv($ff40,'2',2);
$xf = bcmul($jishu,$rlbl,2);
$z = bcadd($z,$ff402,2);
$class = $i%2 == 1 ? 'bg' : '';
echo "{$i} | {$xf} | {$rlbl} | {$jishu} | {$sj5b} | {$sj5b} | {$ff40} | {$ff402} | {$ff402} | {$z} |
";
//$arr[] = "第{$i}期————消费:{$xf}元—————让利:{$jishu}元—————商家5倍积分:{$sj5b}—————用户5倍积分:{$sj5b}—————发放40%1期:{$ff40}—————商家得:{$ff402}—————用户得:{$ff402}————总得:{$z}";
$jishu = bcmul($jishu,$mqzz,2);
}
echo "
";
}
/*
* 订单额,返利比例
* $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 task_bill($total_amount,$back_rate,$user_id,$shop_id,$table_name)
{
//3-20%
$amount = bcdiv(bcmul($total_amount,$back_rate,4),100,2);
//5倍
// $back_double = config('site.back_double');
// $amount = bcmul($amount,$back_double,2);
//商务 + 锁客 + 网体 + 省代 + 市代 + 区代 = 40% (大约40%,具体看多少看各级配置)
//商务 发给门店的上级 收益
$shangwu_rate = config('site.back_shangwu');
$shangwu_amount = bcdiv(bcmul($amount,$shangwu_rate,4),100,2);
$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,4),100,2);
$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);
}
}
}
//每月初执行,跑代理辅助表,把上个月的数据全部推送到 代理队列
public function task_agent(){
$last_month = date('Ym',strtotime(date('Y-m-01')) - 86400); //上个月一号,202502
$agent_month = Db::name('agent_month')->where('month_date',$last_month)->where('status',0)->column('id');
//推送到代理job
//修改状态
Db::name('agent_month')->where('id','IN',$agent_month)->update([
'status' => 1,
'updatetime' => time(),
]);
}
//代理job,跑完代理队列里的每一条
public function job_agent($agent_month_id){
$agent_month = Db::name('agent_month')->where('id',$agent_month_id)->find();
if($agent_month['status'] != 1){
//结束
return;
}
$area = Db::name('shopro_data_area')
->where('id','IN',[$agent_month['province_id'],$agent_month['city_id'],$agent_month['district_id']])
->where('user_id','>',0)
->where('back_rate','>',0)
->select();
if(empty($area)){
//结束
return;
}
//省市县执行三次
foreach($area as $key => $agent){
$agent_money = bcdiv(bcmul($agent_month['back_amount'],$agent['back_rate'],2),100,2);
//发钱
if($agent_money > 0){
$agent['user_id'];
}
}
//状态改为已发放
Db::name('agent_month')->where('id',$agent_month_id)->update([
'status' => '2',
'exec_time' => time(),
]);
}
//注册时设置推荐人,顺带修改网体
//已经放到注册里了
public function set_invite($invite_id = 13){
$intro = Db::name('user')->where('id',$invite_id)->field('id,invite_id,intro_level,intro_ids')->find();
if(!$intro) {
echo '无效推荐人';
}
$data_reg['invite_id'] = $intro['id']; //推荐人id
$data_reg['intro_ids'] = $intro['intro_ids'] ? ($intro['intro_ids'].','.$intro['id']) : $intro['id']; //所有上级
if(!empty($data_reg['intro_ids'])) {
$data_reg['intro_ids_new'] = ','.$data_reg['intro_ids'].','; //便于查询所有下级
}
$data_reg['intro_level'] = $intro['intro_level'] + 1; //推荐网层数
//修改用户
Db::name('user')->where('id',$this->auth->id)->update($data_reg);
//更新直推数和团队数
model('Intro')->addIntroNum($intro['id'], 1, 1);
echo '结束';
}
/**
* 1000为起点,循环40次15%累加,入库
*
*/
public function test2()
{
echo 111;exit;
$amount = 1000;
$rate = 15;
$data = [];
for($i=1;$i<=40;$i++){
$data[] = [
'amount' => $amount,
];
$amount = bcdiv(bcmul($amount,$rate,2),100,2);
}
dump($data);
// Db::name('back_base')->insertAll($data);
}
/**
* 需要登录且需要验证有相应组的权限
*
*/
public function test3()
{
//$this->success('返回成功', ['action' => 'test3']);
$data = [
'order_paidnum' => ['inc',1],
'order_total_amount' => ['inc',11.25],
'goods_sales' => ['inc',5],
];
Db::name('live_room_log')->where('id',23)->update($data);
}
}