新增经理计算

master
chenzhi
parent 9789da2aab
commit 52e7f3059f

@ -846,441 +846,6 @@ class TimingController extends AdminController {
A("MarketPerformanceSet")->setFreeMonth($count_date);
$this->createMarketBonus($_REQUEST['time']);
die();
echo date("Y-m-d H:i:s")."----------------------市场结算管理计算----------------------\n";
$map['pay_time'] = date('Y-m',strtotime(date('Y',time()).'-'.(date('m',time())-1).'-01'));
if ($_REQUEST['time']) {
$map['pay_time'] = $_REQUEST['time'];
}
$spend_map = [];
$time_start = 0;
$time_end = 0;
$month_time = [];
if($_REQUEST['time'] == 'all') {
$belong_map = [];
$month_time[] = date('Y-m',strtotime(date('Y',time()).'-'.(date('m',time())-1).'-01'));
// $month_time[] = date('Y-m',strtotime(date('Y',time()).'-'.(date('m',time())-2).'-01'));
$map['pay_time'] = ['in',$month_time];
$spend_map['pay_time'] = ['elt',strtotime(date('Y-m-t 23:59:59', strtotime(date('Y',time()).'-'.(date('m',time())-1).'-01')))];
$time_end = strtotime(date('Y-m-t',strtotime($month_time)));
} else {
$month_time = $map['pay_time'];
$time_start = strtotime(date('Y-m-1',strtotime($map['pay_time'])));
$time_end = strtotime(date('Y-m-t',strtotime($map['pay_time'])));
$belong_map = "((begin_time<={$time_start} and (end_time >={$time_start} or end_time=0)) or (begin_time<={$time_end} and end_time >={$time_end}) or (end_time>={$time_start} and end_time <={$time_end}))";
}
if ($map['pay_time']) {
SM("settleup_marketorder","tab_")
->where(['pay_time'=>['in',$month_time]])
->delete();
}
$data = M("auth_group")
->where(['title'=>['like','%市场%']])
->select(false);
$data = M("auth_group_access")
->field("auth.market_percentage,real_name,sys_member.uid,sys_auth_group_access.group_id")
->join("left join ({$data}) auth on auth.id = sys_auth_group_access.group_id")
->join("left join sys_member on sys_member.uid = sys_auth_group_access.uid")
->where("auth.title is not null")
->select(false);
$belong_game = M("company_belong_game","tab_")
->field("game_ids,begin_time,end_time")
->where($belong_map)
->select();
// if($belong_game) {
// unset($spend_map['pay_time']);
// }
$unsettlement = $spend_map;
foreach ($belong_game as $key => $value) {
$value['game_ids'] = explode(',',$value['game_ids']);
foreach ($value['game_ids'] as $k => $v) {
if (!$v) {
unset($value['game_ids'][$k]);
}
}
if (!$value['end_time']) {
$value['end_time'] = $time_end;
}
$value['game_ids'] = implode(',',$value['game_ids']);
if (!$spend_map['_string']) {
$spend_map['_string'] = "(pay_time between {$value['begin_time']} and {$value['end_time']}+86399 and relation_game_id in({$value['game_ids']}))";
} else {
$spend_map['_string'] .= " or (pay_time between {$value['begin_time']} and {$value['end_time']}+86399 and relation_game_id in({$value['game_ids']}))";
}
}
if (!$spend_map['_string']) {
$spend_map['_string'] = "relation_game_id = 0";
}
D("Spend")->addSubsiteWhere($spend_map,"tab_spend");
$spend = M("spend","tab_")
->field("sum(pay_amount) as pay_amount,FROM_UNIXTIME(pay_time,'%Y-%m') pay_time,
substring_index(substring_index(tab_spend.game_name,'(',1),'(',-1) game_name,game_id,relation_game_id,tab_spend.sdk_version,
CASE WHEN substring_index(substring_index(`chain`,'/',2),'/',-1) !='' THEN substring_index(substring_index(`chain`,'/',2),'/',-1) ELSE promote_id END promote_id,pay_way,market_admin_id,0 is_settlement,is_check")
->join("left join tab_promote on tab_spend.promote_id = tab_promote.id")
->join("left join tab_game game on game.id=tab_spend.game_id")
->where(['tab_spend.pay_status'=>1,'pay_way'=>['egt',0]])
->where($spend_map)
->group("tab_spend.id")
->select(false);
$not_in_spend = M("spend","tab_")
->field("tab_spend.id id")
->join("left join tab_promote on tab_spend.promote_id = tab_promote.id")
->join("left join tab_game game on game.id=tab_spend.game_id")
->where(['tab_spend.pay_status'=>1,'pay_way'=>['egt',0]])
->where($spend_map)
->group("tab_spend.id")
->select(false);
$unsettlement['_string'] = "tab_spend.id not in($not_in_spend)";
D("Spend")->addSubsiteWhere($unsettlement,"tab_spend");
$unsettlement_spend = M("spend","tab_")
->field("sum(pay_amount) as pay_amount,FROM_UNIXTIME(pay_time,'%Y-%m') pay_time,
substring_index(substring_index(tab_spend.game_name,'(',1),'(',-1) game_name,game_id,relation_game_id,tab_spend.sdk_version,
CASE WHEN substring_index(substring_index(`chain`,'/',2),'/',-1) !='' THEN substring_index(substring_index(`chain`,'/',2),'/',-1) ELSE promote_id END promote_id,pay_way,market_admin_id,1 is_settlement,is_check")
->join("left join tab_promote on tab_spend.promote_id = tab_promote.id")
->join("left join tab_game game on game.id=tab_spend.game_id")
->where(['tab_spend.pay_status'=>1,'pay_way'=>['egt',0]])
->where($unsettlement)
->group("tab_spend.id")
->select(false);
$spend = "{$spend} UNION ALL {$unsettlement_spend}";
$payway_spend = M()->table("({$spend}) spend")
->field("sum(pay_amount) as pay_amount,pay_time,promote_id,game_name,game_id,relation_game_id,pay_way,sdk_version,market_admin_id,is_settlement")
->where(['is_check'=>['neq',2]])
->where($map)
->group("pay_time,promote_id,game_name,pay_way,market_admin_id,is_settlement")
->select();
$channel_fee = [];
$paywayData = M("tool","tab_")
->field("name,config")
->where(['name'=>['in',"alipay,weixin,wei_xin,wei_xin_app,jubaobar,weixin_gf,jft,jft_wap,goldpig,ptb_pay,bind_pay,sqpay,heepay,yeepay,ptb_pay"]])
->select();
//公司税费计算
$tax_radio = [];
$tax_data = M("tax_radio","tab_")
->field("tax_radio,time")
->order("time ASC")
->select();
foreach ($tax_data as $key => $value) {
$tax_radio[$key]['start'] = $value['time'];
$tax_radio[$key]['end'] = $tax_data[$key+1]['time'];
$tax_radio[$key]['tax_radio'] = $value['tax_radio'];
if (!$tax_data[$key+1]['time']) {
$tax_radio[$key]['end'] = 99999999999;
}
}
$pay_rate = [];
foreach ($paywayData as $key => $value) {
$pay_config = json_decode($value['config'],true);
if ($this->getPayway($value['name'])||$this->getPayway($value['name'])=='0') {
$pay_rate[$this->getPayway($value['name'])] = $pay_config['channel_rate']?$pay_config['channel_rate']:0;
}
}
foreach ($payway_spend as $key => $value) {
switch ($value['pay_way']){
case 3: //微信同步
$value['pay_way'] = '2';
break;
case 10: //双乾同步
$value['pay_way'] = '9';
break;
case 15: //双乾同步
$value['pay_way'] = '9';
break;
}
//将时间、推广员id、游戏名、设备类型作为键值标记渠道费用
if (!$channel_fee[$value['pay_time'].$value['promote_id'].$value['game_name'].$value['market_admin_id'].$value['is_settlement']]) {
if (!$value['pay_way']) {
$channel_fee[$value['pay_time'].$value['promote_id'].$value['game_name'].$value['market_admin_id'].$value['is_settlement']] = 0;
}
$channel_fee[$value['pay_time'].$value['promote_id'].$value['game_name'].$value['market_admin_id'].$value['is_settlement']]
= $value['pay_amount'] * ($pay_rate[$value['pay_way']]/100);
} else {
$channel_fee[$value['pay_time'].$value['promote_id'].$value['game_name'].$value['market_admin_id'].$value['is_settlement']]
= $channel_fee[$value['pay_time'].$value['promote_id'].$value['game_name'].$value['market_admin_id'].$value['is_settlement']]+($value['pay_amount'] * ($pay_rate[$value['pay_way']]/100));
}
}
$spend = M()->table("({$spend}) spend")
->field("sum(pay_amount) as pay_amount,pay_time,promote_id,game_name,game_id,relation_game_id,sdk_version,market_admin_id,is_settlement")
->where(['is_check'=>['neq',2]])
->where($map)
->group("pay_time,promote_id,game_name,market_admin_id,is_settlement")
->select(false);
$promote_data = M()->table("({$spend}) spend")
->field("pay_time,company_id,company.company_name,account as promote_account,company.company_belong,develop_type,spend.promote_id,spend.game_name,game_id,relation_game_id,spend.pay_amount,auth.real_name,market_admin_id as admin_id,market_percentage,sdk_version,is_settlement")
->join("left join tab_promote promote on spend.promote_id = promote.id")
->join("left join tab_promote_company company on promote.company_id = company.id")
->join("left join ({$data}) auth on auth.uid=market_admin_id")
->where(['develop_type'=>['egt',1],'group_id'=>['in',['11','12','21']]])
// ->where(['company_id'=>43,'spend.promote_id'=>1498,'relation_game_id'=>191])
// ->order("is_settlement ASC")
->select();
$specialPayAmount = [];
$unsettlement_amount = [];
foreach ($promote_data as $key => $value) {
if ($value['pay_time'] == date("Y-m",time())) {
continue;
}
$cp_radio = getGameCpRadio($value['game_id'],$value['pay_amount'],true);
if (!$cp_radio) {
$cp_radio = getGameCpRadio($value['game_id'],$value['pay_amount'],false);
}
//上游流水
$promote_data[$key]['cp_amount'] = $value['pay_amount'] * ($cp_radio * 0.01);
//下游
// $promote_radio = getGamePromoteCompanyRadio($value['company_id'],$value['relation_game_id'],time(),$value['pay_amount'],true,$value['company_belong']);
// if (!$promote_radio) {
// $promote_radio = getGamePromoteCompanyRadio($value['company_id'],$value['relation_game_id'],time(),$value['pay_amount'],false,$value['company_belong']);
// }
$begin_pay_time = strtotime(date("Y-m-1",strtotime($value['pay_time'])));
$end_pay_time = strtotime(date("Y-m-t",strtotime($value['pay_time'])))+86399;
$company_belong_game = M("company_belong_game","tab_")
->field("game_ids,begin_time,end_time")
->where("begin_time <={$end_pay_time} AND ( end_time = 0 OR end_time >= {$begin_pay_time})")
// ->where("((begin_time<={$begin_pay_time} and (end_time >={$begin_pay_time} or end_time=0)) or (begin_time<={$end_pay_time} and end_time >={$end_pay_time}) or (end_time>={$begin_pay_time} and end_time <={$end_pay_time}))")
->order("begin_time ASC")
->select();
// dump($company_belong_game);
$promote_data[$key]['promote_amount'] = 0;
foreach ($company_belong_game as $ck => $cv) {
$ungame_ids = explode(',',$cv['game_ids']);
if ($cv['end_time'] == 0 || !$cv['end_time']) {
$cv['end_time'] = 99999999999;
}
$use_begin = 0;
$use_end = 0;
if ($value['is_settlement'] == '0') {
if ($begin_pay_time > $cv['begin_time']) {
$use_begin = $begin_pay_time;
if ($end_pay_time > $cv['end_time']+86399) {
$use_end = $cv['end_time']+86399;
} else {
$use_end = $end_pay_time;
}
} else {
$use_begin = $cv['begin_time'];
if ($end_pay_time > $cv['end_time']) {
$use_end = $cv['end_time']+86399;
} else {
$use_end = $end_pay_time;
}
}
//下游流水
$promote_data[$key]['promote_amount'] += $this->getCompanyGameRadio($value['admin_id'],$value['promote_id'],$value['company_id'],$value['relation_game_id'],$use_begin,$use_end,$value['pay_amount']);
} elseif($value['is_settlement'] == '1') {
if ($ck == 0) {
// echo 1;
if ($cv['begin_time'] >= $begin_pay_time) {
$promote_data[$key]['promote_amount'] += $this->getCompanyGameRadio($value['admin_id'],$value['promote_id'],$value['company_id'],$value['relation_game_id'],$begin_pay_time,$cv['begin_time']-1,$value['pay_amount']);
// dump(date($begin_pay_time)."-".date($cv['begin_time']-1));
// dump($promote_data[$key]['promote_amount']);
}
}
if (!$company_belong_game[$ck+1]) {
// dump($end_pay_time);
// dump($cv['end_time']);
if ($end_pay_time > $cv['end_time']) {
// echo 2;
$promote_data[$key]['promote_amount'] += $this->getCompanyGameRadio($value['admin_id'],$value['promote_id'],$value['company_id'],$value['relation_game_id'],$cv['end_time']+86400,$end_pay_time,$value['pay_amount']);
}
}
if ($ck > 0) {
if (($cv['begin_time'] - $company_belong_game[$ck-1]['end_time'] + 86399) > 1) {
// echo 3;
$promote_data[$key]['promote_amount'] += $this->getCompanyGameRadio($value['admin_id'],$value['promote_id'],$value['company_id'],$value['relation_game_id'],$company_belong_game[$ck-1]['end_time'] + 86400,$cv['begin_time']-1,$value['pay_amount']);
}
}
if (!in_array($value['relation_game_id'],$ungame_ids)) {
// echo 4;
if (($cv['end_time']+86399) > $end_pay_time) {
$cv['end_time'] = $end_pay_time;
} else {
$cv['end_time'] = $cv['end_time']+86399;
}
if ($cv['begin_time'] < $begin_pay_time) {
$cv['begin_time'] = $begin_pay_time;
}
// dump($promote_data[$key]['promote_amount']);
// dump(date($cv['begin_time'])."-".date($cv['end_time']));
$promote_data[$key]['promote_amount'] += $this->getCompanyGameRadio($value['admin_id'],$value['promote_id'],$value['company_id'],$value['relation_game_id'],$cv['begin_time'],$cv['end_time'],$value['pay_amount']);
// dump($promote_data[$key]['promote_amount']);
}
}
// if (!in_array($value['relation_game_id'],$ungame_ids)) {
//
// if ($begin_pay_time > $cv['begin_time']) {
// $use_begin = $begin_pay_time;
// if ($end_pay_time > $cv['end_time']+86399) {
// $use_end = $cv['end_time']+86399;
// } else {
// $use_end = $end_pay_time;
// }
// } else {
//
// $use_begin = $cv['begin_time'];
// if ($end_pay_time > $cv['end_time']) {
// $use_end = $cv['end_time']+86399;
// } else {
// $use_end = $end_pay_time;
// }
//
// }
//
// //下游流水
// $promote_data[$key]['promote_amount'] += $this->getCompanyGameRadio($value['admin_id'],$value['promote_id'],$value['company_id'],$value['relation_game_id'],$use_begin,$use_end,$value['pay_amount']);
// }
}
if (!$company_belong_game) {
$promote_data[$key]['promote_amount'] += $this->getCompanyGameRadio($value['admin_id'],$value['promote_id'],$value['company_id'],$value['relation_game_id'],$begin_pay_time,$end_pay_time,$value['pay_amount']);
}
//下游流水
// $promote_data[$key]['promote_amount'] = $this->getCompanyGameRadio($value['admin_id'],$value['promote_id'],$value['company_id'],$value['relation_game_id'],$value['pay_time'],$value['pay_amount'],$value['is_settlement']);
//下游流水
// $promote_data[$key]['promote_amount'] = $value['pay_amount'] * ($promote_radio * 0.01);
//特殊补点
$specialPayAmount[$value['pay_time']] = $this->getSpecialComplement(strtotime(date("Y-m-1",strtotime($value['pay_time']))),strtotime(date("Y-m-t",strtotime($value['pay_time'])))+86399,$value['promote_id']);
$specialAmount = $specialPayAmount[$value['pay_time']][$value['company_id']."-".$value['promote_id']."-".$value['relation_game_id']]?$specialPayAmount[$value['pay_time']][$value['company_id']."-".$value['promote_id']."-".$value['relation_game_id']]:0;
//渠道费用
$promote_data[$key]['channel_amount'] = $channel_fee[$value['pay_time'].$value['promote_id'].$value['game_name'].$value['admin_id'].$value['is_settlement']];
$tax = 0;
//公司税费
foreach($tax_radio as $k => $v) {
if (strtotime($value['pay_time'])>=$v['start'] && strtotime($value['pay_time'])<$v['end']) {
$tax = $v['tax_radio'];
}
}
// $belong_game = M("company_belong_game","tab_")
// ->field("game_ids")
// ->where("time='{$value['pay_time']}'")
// ->find();
//
// $belong_game = array_values(explode(",",$belong_game['game_ids']));
//
// if ((in_array($value['relation_game_id'],$belong_game) && $value['company_belong'] ==1) || $value['company_belong'] !=1) {
// $promote_data[$key]['is_settlement']=1;
// } else {
// $promote_data[$key]['is_settlement']=0;
// }
$promote_data[$key]['is_settlement'] = $value['is_settlement'];
$promote_data[$key]['promote_amount'] += $specialAmount;
$promote_data[$key]['company_tax'] = ($value['pay_amount']-$promote_data[$key]['cp_amount']- $promote_data[$key]['promote_amount'])*($tax/100);
//毛利
$promote_data[$key]['company_profit'] = $value['pay_amount']-$promote_data[$key]['cp_amount']-$promote_data[$key]['promote_amount']-$promote_data[$key]['channel_amount']-$promote_data[$key]['company_tax'];
// dump($promote_data[$key]['promote_amount']);
if ($value['promote_id'] == 0) {
// $promote_data[$key]['promote_account']='官方渠道';
// $promote_data[$key]['company_id']='0';
// $promote_data[$key]['company_belong']='3';
// $promote_data[$key]['develop_type']='0';
continue;
}
unset($promote_data[$key]['market_percentage']);
$marker_data = SM("settleup_marketorder","tab_")
->where(['pay_time'=>$value['pay_time'],'promote_id'=>$value['promote_id'],'game_name'=>$value['game_name'],'admin_id'=>$value['admin_id'],'is_settlement'=>$value['is_settlement']])
->find();
echo "日期:{$value['pay_time']},游戏:{$value['game_name']},推广员:{$value['promote_account']}\n";
echo "市场员:{$value['admin_id']} 推广员:{$value['promote_id']} 公司id{$value['company_id']} 游戏关联id{$value['relation_game_id']} 支付时间:{$value['pay_time']} 金额:{$value['pay_amount']}\n";
// dump($promote_data[$key]);die();
if (!$marker_data) {
SM("settleup_marketorder","tab_")
->add($promote_data[$key]);
} else {
SM("settleup_marketorder","tab_")
->where(['pay_time'=>$value['pay_time'],'promote_id'=>$value['promote_id'],'game_name'=>$value['game_name'],'admin_id'=>$value['admin_id'],'is_settlement'=>$value['is_settlement']])
->save($promote_data[$key]);
}
}
// var_dump($_REQUEST['time']);
$this->createMarketBonus($_REQUEST['time']);
echo date("Y-m-d H:i:s")."----------------------市场结算管理计算----------------------\n";
}
@ -1323,7 +888,7 @@ class TimingController extends AdminController {
$pay_time = date('Y-m',strtotime(date('Y',time()).'-'.(date('m',time())-1).'-01'));
$map['pay_time'] = date('Y-m',strtotime(date('Y',time()).'-'.(date('m',time())-1).'-01'));
}
//经理计算
A("MarketPerformanceSet")->marketManagerSet($pay_time);
// $this->createMarketBonus($_REQUEST['time']);

Loading…
Cancel
Save