|
|
<?php
|
|
|
|
|
|
namespace Admin\Controller;
|
|
|
use Think\Controller;
|
|
|
|
|
|
/**
|
|
|
* 聚合渠道结算接口对接
|
|
|
* @author cz
|
|
|
* TODO: 罚款的游戏没有流水不统计,补点为0 无法重算
|
|
|
*/
|
|
|
class CompanyStatementSetController extends Controller {
|
|
|
public $cpapihost;
|
|
|
public $TYPE=[
|
|
|
"0"=>"周结",
|
|
|
"1"=>"月结",
|
|
|
"2"=>"补点"
|
|
|
];
|
|
|
public $token = "LYHTQDJS";
|
|
|
|
|
|
public function _initialize(){
|
|
|
$cpapihost = M("Kv")->field("value")->where("`key` = 'aggregate_cp_settlement_api'")->find();
|
|
|
|
|
|
if(empty($cpapihost)){
|
|
|
echo "请先设置请求接口aggregate_cp_settlement_api的值".PHP_EOL;die;
|
|
|
}
|
|
|
$this->cpapihost = $cpapihost['value'];
|
|
|
}
|
|
|
/**
|
|
|
* Undocumented function
|
|
|
*
|
|
|
* @param [type] $begin 开始时间 2020-04-01
|
|
|
* @param string $end 结束时间,默认今天
|
|
|
* @param string $company all/pc/cp/pu 全部 下游公司 上游 下游个人
|
|
|
* @return void
|
|
|
*/
|
|
|
public function setFreeDateCount($begin,$end='',$company='all')
|
|
|
{
|
|
|
if($end == '') $end = $begin;
|
|
|
//判断日期格式
|
|
|
$patten = "/^\d{4}[\-](0?[1-9]|1[012])[\-](0?[1-9]|[12][0-9]|3[01])$/";
|
|
|
if (!preg_match($patten, $begin)) {
|
|
|
die("开始时间格式错误");
|
|
|
}
|
|
|
if (!preg_match($patten, $end)) {
|
|
|
die("结束时间格式错误");
|
|
|
}
|
|
|
if(strtotime($end) < strtotime($begin)){
|
|
|
die("结束时间不能比开始时间小");
|
|
|
}
|
|
|
if(strtotime($end)+86399-24*3600 > time()){
|
|
|
die("结束时间不能大于当前");
|
|
|
}
|
|
|
|
|
|
$starttime = $begin?strtotime($begin):mktime(0,0,0,date('m'),date('d'),date('Y'));
|
|
|
$endtime = $end?strtotime($end)+86399:$starttime+86399;
|
|
|
$datelist = get_date_list($starttime,$endtime,1);
|
|
|
$countdate = count($datelist);
|
|
|
for($i=0;$i<$countdate;$i++){
|
|
|
$this->setDailyCount($datelist[$i],$company);
|
|
|
}
|
|
|
}
|
|
|
public function setDailyCount($stime="now",$company='all')
|
|
|
{
|
|
|
if(!IS_CLI){
|
|
|
die("只支持脚本访问");
|
|
|
}
|
|
|
if($stime=="now"){
|
|
|
$stime=time();
|
|
|
}else{
|
|
|
$stime = strtotime($stime);
|
|
|
}
|
|
|
$nowdate = date("Y-m-d",$stime);
|
|
|
$w = (int)date("w",$stime);
|
|
|
$d = (int)date("d",$stime);
|
|
|
|
|
|
if($w == 1 || $d == 1){
|
|
|
if($w == 1){
|
|
|
if($company == "all"){
|
|
|
echo $nowdate.":".PHP_EOL;
|
|
|
echo "--周结begin".PHP_EOL;
|
|
|
|
|
|
$this->cpStatement(0,$stime);
|
|
|
echo "∟----CP周结统计ok".PHP_EOL;
|
|
|
|
|
|
$this->promoteCompanyStatement(0,$stime);
|
|
|
echo "∟----推广公司周结统计ok".PHP_EOL;
|
|
|
if(!IS_SUBSITE){
|
|
|
$this->promoteUserPool(0,$stime);
|
|
|
echo "∟----推广个人周结ok".PHP_EOL;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
if($company == "cp"){
|
|
|
$this->cpStatement(0,$stime);
|
|
|
echo "∟----CP周结统计ok".PHP_EOL;
|
|
|
}
|
|
|
if($company == "pc"){
|
|
|
$this->promoteCompanyStatement(0,$stime);
|
|
|
echo "∟----推广公司周结统计ok".PHP_EOL;
|
|
|
}
|
|
|
if($company == "pu"){
|
|
|
$this->promoteUserPool(0,$stime);
|
|
|
echo "∟----推广个人周结ok".PHP_EOL;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
if($d == 1){
|
|
|
if($company == "all"){
|
|
|
echo $nowdate.":".PHP_EOL;
|
|
|
echo "--月结&补点begin".PHP_EOL;
|
|
|
|
|
|
$this->cpStatement(1,$stime);
|
|
|
$this->cpStatement(2,$stime);
|
|
|
echo "∟----CP月结&补点统计ok".PHP_EOL;
|
|
|
|
|
|
$this->promoteCompanyStatement(1,$stime);
|
|
|
$this->promoteCompanyStatement(2,$stime);
|
|
|
$this->officeCompanyStatement($stime); //官方结算
|
|
|
echo "∟----官方/推广公司月结&补点统计ok".PHP_EOL;
|
|
|
if(!IS_SUBSITE){
|
|
|
$this->promoteUserPool(1,$stime);
|
|
|
$this->promoteUserPool(2,$stime);
|
|
|
echo "∟----推广个人月结&补点统计ok".PHP_EOL;
|
|
|
}
|
|
|
}
|
|
|
if($company == "cp"){
|
|
|
$this->cpStatement(1,$stime);
|
|
|
$this->cpStatement(2,$stime);
|
|
|
echo "∟----CP月结&补点统计ok".PHP_EOL;
|
|
|
}
|
|
|
if($company == "pc"){
|
|
|
$this->promoteCompanyStatement(1,$stime);
|
|
|
$this->promoteCompanyStatement(2,$stime);
|
|
|
$this->officeCompanyStatement($stime); //官方结算
|
|
|
echo "∟----官方/推广公司月结&补点统计ok".PHP_EOL;
|
|
|
}
|
|
|
if($company == "pu"){
|
|
|
$this->promoteUserPool(1,$stime);
|
|
|
$this->promoteUserPool(2,$stime);
|
|
|
echo "∟----推广个人月结&补点统计ok".PHP_EOL;
|
|
|
}
|
|
|
}
|
|
|
}else{
|
|
|
echo $nowdate."非周一和月初,无需任何处理".PHP_EOL;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* 上游结算
|
|
|
* @param [string] $type 0:周结 1:月结 2:周结补点
|
|
|
*/
|
|
|
public function cpStatement($type,$stime,$company_id=false,$recount=true)
|
|
|
{
|
|
|
$t = $this->setBeginAndEndTime($type,$stime);;
|
|
|
$begintime = $t[0];
|
|
|
$endtime = $t[1];
|
|
|
if($company_id === false){
|
|
|
//非重算
|
|
|
$where = [
|
|
|
"_string"=>"first_company_type = '1' OR second_company_type = '1'"
|
|
|
];
|
|
|
}else{
|
|
|
$where = [
|
|
|
"_string"=>"(first_company_type = '1' AND first_company_id in ({$company_id}) ) OR (second_company_type = '1' AND second_company_id in ({$company_id}) )"
|
|
|
];
|
|
|
}
|
|
|
//获取哪些要结算
|
|
|
if($type == 1){
|
|
|
$where['settlement_type']=2;
|
|
|
$cpDbRes = M("CompanyRelation","tab_")->where($where)->select();
|
|
|
}else{
|
|
|
$where['settlement_type']=1;
|
|
|
$cpDbRes = M("CompanyRelation","tab_")->where($where)->select();
|
|
|
}
|
|
|
|
|
|
$cpList=[];
|
|
|
$js_id = [];//己方公司
|
|
|
foreach ($cpDbRes as $k => $v) {
|
|
|
if($v['first_company_type'] == 1){
|
|
|
$cpList[$v['first_company_id']] =$v;
|
|
|
$js_id[] =$v['second_company_id'];
|
|
|
}else{
|
|
|
$cpList[$v['second_company_id']] =$v;
|
|
|
$js_id[] =$v['first_company_id'];
|
|
|
}
|
|
|
|
|
|
}
|
|
|
if(count($js_id) ==0 || count($cpList) == 0){return ;}
|
|
|
|
|
|
$cp_id = implode(",",array_flip(array_flip(array_keys($cpList))));//已绑定关系
|
|
|
$js_id = implode(",",array_unique($js_id));
|
|
|
//获取cp公司
|
|
|
$cpmap = [
|
|
|
"id"=>['in',$cp_id],
|
|
|
"_string"=>"(validity_start_time > 0 AND validity_end_time = 0 ) OR validity_end_time >= {$endtime}"
|
|
|
];
|
|
|
$tmpp = M("Partner","tab_")->field("id,partner,link_man,link_phone,address,company_tax_no,payee_name,bank_account,opening_bank,channel_rate,invoice_rate,taxation_rate,company_type,ali_user,ali_account,has_advance_charge,has_server_fee,server_fee")->where($cpmap)->select();
|
|
|
if(empty($tmpp)){
|
|
|
return true;
|
|
|
}
|
|
|
$cp =[];
|
|
|
foreach ($tmpp as $v) {
|
|
|
$cp[$v['id']]=$v;
|
|
|
}
|
|
|
$cp_id = implode(",",array_column($tmpp,"id")); //结算的id
|
|
|
unset($tmpp);
|
|
|
//获取己方公司
|
|
|
$our = [];
|
|
|
$tmpp = M("CompanyInfo","tab_")->field("id,partner,link_man,link_phone,address,company_tax_no,payee_name,bank_account,opening_bank")->where(["id"=>['in',$js_id]])->select();
|
|
|
foreach ($tmpp as $v) {
|
|
|
$our[$v['id']]=$v;
|
|
|
}
|
|
|
unset($tmpp);
|
|
|
unset($js_id);
|
|
|
//获取本地数据
|
|
|
$locals = $this->getLocalStatementData($begintime,$endtime,$cp_id);
|
|
|
//获取聚合数据
|
|
|
$sign = md5($begintime.$endtime."1".$this->token);
|
|
|
$arr = [
|
|
|
"begintime"=>$begintime,
|
|
|
"endtime"=>$endtime,
|
|
|
"type"=>1,
|
|
|
"sign"=>$sign,
|
|
|
"cp_id"=>$cp_id
|
|
|
];
|
|
|
$dataurl .= $this->cpapihost."&".http_build_query($arr);
|
|
|
$html = file_get_contents($dataurl);
|
|
|
//防止并发压力
|
|
|
sleep(3);
|
|
|
$rsp = json_decode($html,true);
|
|
|
if($rsp['code'] != 1){
|
|
|
echo $rsp['error'].PHP_EOL;die;
|
|
|
}else{
|
|
|
$rsp = $rsp['data'];
|
|
|
}
|
|
|
//整合数据本地
|
|
|
|
|
|
foreach($locals as $k=>$v){
|
|
|
$cpList[$k]["list"] = $v["list"];
|
|
|
}
|
|
|
|
|
|
//整合数据,聚合
|
|
|
foreach($rsp as $k=>$v){
|
|
|
if(isset($cpList[$k]["list"])){
|
|
|
//已经存在
|
|
|
foreach($rsp[$k]["list"] as $ke=>$va){
|
|
|
if(isset($cpList[$k]["list"][$ke])){
|
|
|
$cpList[$k]["list"][$ke]['pay_money'] += $va['pay_money'];
|
|
|
}else{
|
|
|
$cpList[$k]["list"][$ke] = $va;
|
|
|
}
|
|
|
}
|
|
|
}else{
|
|
|
$cpList[$k]["list"] = $v["list"];
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//比例计算及保存
|
|
|
// TODO:此处不判断现游戏名=原包名,但却不是同一款游戏
|
|
|
$verify_log=json_encode(["create_user"=>"system","create_time"=>date("Y-m-d H:i:s")]);
|
|
|
$GameDb = M("Game","tab_");
|
|
|
$StatementDb = SM("CompanyStatement","tab_");
|
|
|
$statement_begin_time = date("Y.m.d",$begintime);
|
|
|
$statement_end_time = date("Y.m.d",$endtime);
|
|
|
foreach($cpList as $k=>$v){
|
|
|
$add_data=[];
|
|
|
$handleed_data = [];
|
|
|
//1.获取甲乙方信息
|
|
|
if($v['first_company_type'] == 1){
|
|
|
//甲方上游
|
|
|
$cp[$v['first_company_id']]['invoice_type'] = $v['invoice_type'];
|
|
|
$cp[$v['first_company_id']]['invoice_content'] = $v['invoice_content'];
|
|
|
|
|
|
$add_data['first_party_info'] = json_encode($cp[$v['first_company_id']],JSON_UNESCAPED_UNICODE);
|
|
|
$add_data['second_party_info'] = json_encode($our[$v['second_company_id']],JSON_UNESCAPED_UNICODE);
|
|
|
$add_data['company_id'] = $v['first_company_id'];
|
|
|
$add_data['company_name'] = $v['first_company_name'];
|
|
|
|
|
|
}else{
|
|
|
//乙方上游
|
|
|
$cp[$v['second_company_id']]['invoice_type'] = $v['invoice_type'];
|
|
|
$cp[$v['second_company_id']]['invoice_content'] = $v['invoice_content'];
|
|
|
|
|
|
$add_data['first_party_info'] = json_encode($our[$v['first_company_id']],JSON_UNESCAPED_UNICODE);
|
|
|
$add_data['second_party_info'] = json_encode($cp[$v['second_company_id']],JSON_UNESCAPED_UNICODE);
|
|
|
$add_data['company_id'] = $v['second_company_id'];
|
|
|
$add_data['company_name'] = $v['second_company_name'];
|
|
|
}
|
|
|
$add_data['pay_type'] = $v['collection'];
|
|
|
$add_data['withdraw_type'] = $type;
|
|
|
$add_data['statement_begin_time'] = $begintime;
|
|
|
$add_data['statement_end_time'] = $endtime;
|
|
|
$add_data['statement_money'] = 0;
|
|
|
$add_data['pay_amount'] = 0;
|
|
|
$add_data['verify_log'] = $verify_log;
|
|
|
$add_data['op_time'] =time();
|
|
|
$add_data['statement_info'] =[];
|
|
|
$add_data['company_belong']=9;//上游
|
|
|
$add_data['company_type']=$cp[$add_data['company_id']]['company_type'];
|
|
|
$add_data['is_payment']=$v['is_payment'];
|
|
|
//获取渠道及税费费率
|
|
|
$promote_ratio = $cp[$add_data['company_id']]['channel_rate'] ?? 0;
|
|
|
$fax_ratio = $cp[$add_data['company_id']]['taxation_rate'] ?? 0;
|
|
|
//游戏统计
|
|
|
if (isset($v['list'])) {
|
|
|
foreach ($v['list'] as $ke=>$va) {
|
|
|
$game =[];
|
|
|
$game['pay_amount'] =$va['pay_money'];
|
|
|
$game['game_name'] =$ke;
|
|
|
//获取游戏id及比例
|
|
|
$game_id = $GameDb->where("relation_game_name='{$ke}' OR original_package_name='{$ke}'")->field("id,relation_game_id")->find();
|
|
|
if (empty($game_id) && isset($va['unique_code']) && !empty($va['unique_code'])) {
|
|
|
$unique_code = $va['unique_code'];
|
|
|
$game_id = $GameDb->where("unique_code='{$unique_code }'")->field("id,relation_game_id")->find();
|
|
|
}
|
|
|
if (empty($game_id)) {
|
|
|
$game['relation_game_id']=0;
|
|
|
$tratio = 0;
|
|
|
} else {
|
|
|
//获取比例
|
|
|
$game['relation_game_id']=$game_id['relation_game_id'];
|
|
|
if ($type == 1) {
|
|
|
$tratio = getGameCpRadio($game_id['id'], $va['pay_money'], true);
|
|
|
} elseif ($type == 0) {
|
|
|
$tratio = getGameCpRadio($game_id['id'], $va['pay_money'], false);
|
|
|
} else {
|
|
|
//补丁
|
|
|
$tratio1 = getGameCpRadio($game_id['id'], $va['pay_money'], true);
|
|
|
$tratio2 = getGameCpRadio($game_id['id'], $va['pay_money'], false);
|
|
|
$tratio = $tratio1-$tratio2;
|
|
|
if ($tratio <= 0) {
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if ($v['first_company_type'] == 1) {
|
|
|
$game['first_ratio']=$tratio-0;
|
|
|
$game['second_ratio']=100-$tratio;
|
|
|
} else {
|
|
|
$game['first_ratio']=100-$tratio;
|
|
|
$game['second_ratio']=$tratio-0;
|
|
|
}
|
|
|
$add_data['pay_amount'] += $va['pay_money'];
|
|
|
|
|
|
$game['sum_money']=round($va['pay_money']*(100-$promote_ratio)*$tratio*(100-$fax_ratio)/(100*100*100), 2);//结算金额=平台总额*(1-渠道费)*分成比例*(1-税费费率)
|
|
|
|
|
|
$add_data['statement_money'] += $game['sum_money'];
|
|
|
|
|
|
$game['fax_ratio']=$fax_ratio;
|
|
|
$game['promote_ratio']=$promote_ratio;
|
|
|
|
|
|
$game['statement_begin_time']=$statement_begin_time;
|
|
|
$game['statement_end_time']=$statement_end_time;
|
|
|
$game['statement_type']=0;
|
|
|
|
|
|
$RewardRecordRes = $this->getPromoteUserGameRewardRecordCp($add_data['company_id'],$statement_begin_time,$statement_end_time);
|
|
|
|
|
|
if (
|
|
|
($handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['fine'] || $handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['fine'] == '0')
|
|
|
|| ($handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['reward'] || $handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['reward'] == '0')
|
|
|
) {
|
|
|
$game['fine'] = 0;
|
|
|
$game['reward'] = 0;
|
|
|
} else {
|
|
|
$game['fine'] = $RewardRecordRes['fine']?$RewardRecordRes['fine']:0;
|
|
|
$game['reward'] = $RewardRecordRes['reward']?$RewardRecordRes['reward']:0;
|
|
|
$handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['fine'] = (string)$RewardRecordRes['fine'];
|
|
|
$handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['reward'] = (string)$RewardRecordRes['reward'];
|
|
|
}
|
|
|
|
|
|
$add_data['statement_info'][] = $game;
|
|
|
}
|
|
|
}else{
|
|
|
$add_data['statement_info'] = [];
|
|
|
}
|
|
|
$add_data['platform_amount'] = $add_data['pay_amount'];
|
|
|
if($type < 2){
|
|
|
//非补点奖罚
|
|
|
$rrmap = array(
|
|
|
"d.confirm_time" => ['between', [$begintime,$endtime]],
|
|
|
"company_type"=>1,
|
|
|
"company_id"=>$add_data['company_id'],
|
|
|
"settlement_type"=>2,
|
|
|
"is_verify"=>1,
|
|
|
);
|
|
|
$rfres = M("RewardDetail","tab_")
|
|
|
->alias("d")
|
|
|
->field("
|
|
|
IFNULL(SUM(CASE WHEN type = 1 THEN amount ELSE 0 END),0) as reward_count,
|
|
|
IFNULL(SUM(CASE WHEN type = 2 THEN amount ELSE 0 END),0) as fine_count
|
|
|
")
|
|
|
|
|
|
->join('tab_reward_record as r on d.record_id = r.id', 'LEFT')
|
|
|
->where($rrmap)->find();
|
|
|
if($rfres['reward_count'] > 0){
|
|
|
$reward_count = $rfres['reward_count'];
|
|
|
$add_data['statement_info'][] = array(
|
|
|
"statement_begin_time"=>$statement_begin_time,
|
|
|
"statement_end_time"=>$statement_end_time,
|
|
|
'statement_type'=>2,
|
|
|
"game_name"=>"奖励",
|
|
|
'pay_amount'=>$reward_count,
|
|
|
'sum_money'=>$reward_count,
|
|
|
);
|
|
|
$add_data['statement_money']+=$reward_count;
|
|
|
$add_data['pay_amount']+=$reward_count;
|
|
|
}
|
|
|
if($rfres['fine_count'] > 0){
|
|
|
$fine_count = $rfres['fine_count'];
|
|
|
$add_data['statement_info'][] = array(
|
|
|
"statement_begin_time"=>$statement_begin_time,
|
|
|
"statement_end_time"=>$statement_end_time,
|
|
|
'statement_type'=>1,
|
|
|
"game_name"=>"罚款",
|
|
|
'pay_amount'=>$fine_count,
|
|
|
'sum_money'=>$fine_count,
|
|
|
);
|
|
|
$add_data['statement_money'] -= $fine_count;
|
|
|
$add_data['pay_amount'] -= $fine_count;;
|
|
|
}
|
|
|
//获取服务器费用
|
|
|
$tmp_company_info= $cp[$add_data['company_id']];
|
|
|
if($tmp_company_info['has_server_fee'] == 1 && $tmp_company_info['server_fee'] >0){
|
|
|
$server_count = $tmp_company_info['server_fee'];
|
|
|
$add_data['statement_info'][] = array(
|
|
|
"statement_begin_time"=>$statement_begin_time,
|
|
|
"statement_end_time"=>$statement_end_time,
|
|
|
'statement_type'=>1,
|
|
|
"game_name"=>"服务器费用",
|
|
|
'pay_amount'=>$server_count,
|
|
|
'sum_money'=>$server_count,
|
|
|
);
|
|
|
$add_data['statement_money'] -= $server_count;
|
|
|
$add_data['pay_amount'] -= $server_count;;
|
|
|
}
|
|
|
}
|
|
|
$add_data['statement_info'] = json_encode($add_data['statement_info'],JSON_UNESCAPED_UNICODE);
|
|
|
if($type == 2 && $add_data['statement_money'] == 0){
|
|
|
//金额为0不补点
|
|
|
continue;
|
|
|
}
|
|
|
if($add_data['platform_amount'] == 0 && $add_data['statement_money'] == 0){
|
|
|
//全等于0表示没有流水,小于0依旧要结算
|
|
|
continue;
|
|
|
}
|
|
|
//添加
|
|
|
if($recount && $company_id !== false){
|
|
|
//非重算
|
|
|
return $add_data;
|
|
|
}
|
|
|
$StatementDb->add($add_data);
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取本地上游结算
|
|
|
*/
|
|
|
public function getLocalStatementData($begintime,$endtime,$cp_id)
|
|
|
{
|
|
|
$game_where = "partner_id in ({$cp_id})";
|
|
|
$game = M('game','tab_');
|
|
|
$gameDbRes = $game->field("id,relation_game_name as game_name,partner_id as cp_id,original_package_name,select_package_name")->where($game_where)->select();
|
|
|
$gameList=[];
|
|
|
foreach ($gameDbRes as $k => $v) {
|
|
|
$gameList[$v['id']] =$v;
|
|
|
}
|
|
|
//获取所有id
|
|
|
$gmstr = implode(",",array_flip(array_flip(array_column($gameDbRes,'id'))));
|
|
|
//获取支付记录
|
|
|
$paywhere = [
|
|
|
"pay_status"=>1,
|
|
|
"pay_game_status"=>1,
|
|
|
"payed_time"=>["BETWEEN",[$begintime,$endtime]],
|
|
|
"game_id"=>["in",$gmstr]
|
|
|
];
|
|
|
D("Spend")->addSubsiteWhere($paywhere);
|
|
|
$paydb = M('spend','tab_');
|
|
|
$paylist = $paydb->field("game_id,SUM(pay_amount) pay_amount")->where($paywhere)->group("game_id")->select();
|
|
|
if(empty($paylist)){
|
|
|
return [];
|
|
|
}
|
|
|
//绑定价格
|
|
|
foreach ($paylist as $k => $v) {
|
|
|
$gameList[$v['game_id']]['pay_money'] =$v["pay_amount"];
|
|
|
}
|
|
|
unset($paylist);
|
|
|
//按游戏名称及cp整理数据
|
|
|
$cplList = [];
|
|
|
foreach ($gameList as $k => $v) {
|
|
|
if($v['pay_money'] <= 0) continue; //0值不发送
|
|
|
if(empty($v['original_package_name'])){
|
|
|
$game_name = $v['game_name'];
|
|
|
}else{
|
|
|
if($v['select_package_name'] == 0){
|
|
|
$game_name = $v['original_package_name'];
|
|
|
}else{
|
|
|
$game_name = $v['game_name'];
|
|
|
}
|
|
|
}
|
|
|
$cp_id = $v['cp_id'];
|
|
|
unset($v['cp_id']);
|
|
|
$ymoney = $cplList[$cp_id]['list'][$game_name]["pay_money"]?:0;
|
|
|
$cplList[$cp_id]['list'][$game_name]["pay_money"] =$ymoney+$v["pay_money"];
|
|
|
// if($type==2){
|
|
|
// $cplList[$cp_id]['list'][$game_name]["list"][] =$v; //传递列表详情
|
|
|
// }
|
|
|
}
|
|
|
return $cplList;
|
|
|
}
|
|
|
//官方结算
|
|
|
public function officeCompanyStatement($stime,$recount=false)
|
|
|
{
|
|
|
|
|
|
$t = $this->setBeginAndEndTime(1,$stime);
|
|
|
$begintime = $t[0];
|
|
|
$endtime = $t[1];
|
|
|
//获取官方信息
|
|
|
$pc_map = [
|
|
|
"id"=>["IN",$pc_id],
|
|
|
"_string"=>"(validity_start_time > 0 AND validity_end_time = 0 ) OR validity_end_time >= {$endtime}",
|
|
|
"company_type"=>1
|
|
|
];
|
|
|
//获取pc公司
|
|
|
$company = M("CompanyInfo","tab_")->field("id,partner,link_man,link_phone,address,company_tax_no,payee_name,bank_account,opening_bank")->where("partner = '海南万盟天下科技有限公司'")->find();
|
|
|
$first_party_info = json_encode($company,JSON_UNESCAPED_UNICODE);
|
|
|
$company['partner'] = C("OFFICIEL_CHANNEL");
|
|
|
$second_party_info = json_encode($company,JSON_UNESCAPED_UNICODE);
|
|
|
$add_data=[
|
|
|
"first_party_info"=>$first_party_info,
|
|
|
"second_party_info"=>$second_party_info,
|
|
|
"pay_type"=>2,
|
|
|
"withdraw_type"=>1,
|
|
|
"statement_begin_time"=>$begintime,
|
|
|
"statement_end_time"=>$endtime,
|
|
|
"statement_money"=>0,
|
|
|
"pay_amount"=>0,
|
|
|
"platform_amount"=>0,
|
|
|
"verify_log"=>json_encode(["create_user"=>"system","create_time"=>date("Y-m-d H:i:s")]),
|
|
|
"op_time"=>time(),
|
|
|
"is_payment"=>2,
|
|
|
"statement_info"=>[],
|
|
|
"company_belong"=>0,
|
|
|
"company_name"=>C("OFFICIEL_CHANNEL"),
|
|
|
"company_id"=>0,
|
|
|
"company_type"=>1
|
|
|
];
|
|
|
|
|
|
//获取渠道及发票税率
|
|
|
$fax_ratio = 0; //税费费率
|
|
|
$company_belong = 0;
|
|
|
|
|
|
|
|
|
|
|
|
$Promote = M("Promote","tab_");
|
|
|
$Spend = M("Spend","tab_");
|
|
|
$spenMap = [
|
|
|
"s.pay_status"=>1,
|
|
|
"s.payed_time"=>['between', [$begintime,$endtime]],
|
|
|
"s.promote_id"=>0
|
|
|
];
|
|
|
D("Spend")->addSubsiteWhere($spenMap,"s");
|
|
|
$list = $Spend->alias('s')->field('sum(s.pay_amount) pay_amount,g.relation_game_id,g.relation_game_name game_name')->where($spenMap)->group('relation_game_id')
|
|
|
->join("left join tab_game g on s.game_id = g.id")
|
|
|
->select();
|
|
|
if(empty($list)){return;}
|
|
|
$statement_begin_time = date("Y.m.d",$begintime);
|
|
|
$statement_end_time = date("Y.m.d",$endtime);
|
|
|
|
|
|
foreach ($list as $k => $v) {
|
|
|
$v['fax_ratio'] = 0;
|
|
|
$v['statement_begin_time']=$statement_begin_time;
|
|
|
$v['statement_end_time']=$statement_end_time;
|
|
|
$v['ratio']=0;
|
|
|
$v['sum_money'] = 0;
|
|
|
$v['statement_type']=0;
|
|
|
|
|
|
$add_data['platform_amount'] += $v['pay_amount'];
|
|
|
$add_data['pay_amount'] += $v['pay_amount'];
|
|
|
$add_data['statement_info'][] = $v;
|
|
|
}
|
|
|
$add_data['statement_info'] = json_encode($add_data['statement_info'],JSON_UNESCAPED_UNICODE);
|
|
|
if($recount){
|
|
|
//非重算
|
|
|
return $add_data;
|
|
|
}
|
|
|
SM("CompanyStatement","tab_")->add($add_data);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 下游结算
|
|
|
*/
|
|
|
public function promoteCompanyStatement($type,$stime,$company_id=false,$recount=true)
|
|
|
{
|
|
|
$t = $this->setBeginAndEndTime($type,$stime);
|
|
|
$begintime = $t[0];
|
|
|
$endtime = $t[1];
|
|
|
|
|
|
if($company_id === false){
|
|
|
//非重算
|
|
|
$where = [
|
|
|
"_string"=>"first_company_type = '2' OR second_company_type = '2'"
|
|
|
];
|
|
|
}else{
|
|
|
$where = [
|
|
|
"_string"=>"(first_company_type = '2' AND first_company_id in ({$company_id}) ) OR (second_company_type = '2' AND second_company_id in ({$company_id}) )"
|
|
|
];
|
|
|
}
|
|
|
//获取哪些要结算
|
|
|
if($type == 1){
|
|
|
$where['settlement_type']=2;
|
|
|
$pcDbRes = M("CompanyRelation","tab_")->where($where)->select();
|
|
|
}else{
|
|
|
$where['settlement_type']=1;
|
|
|
$pcDbRes = M("CompanyRelation","tab_")->where($where)->select();
|
|
|
}
|
|
|
$pcList=[];
|
|
|
$js_id = [];//己方公司
|
|
|
foreach ($pcDbRes as $k => $v) {
|
|
|
if($v['first_company_type'] == 2){
|
|
|
$pcList[$v['first_company_id']] =$v;
|
|
|
$js_id[] =$v['second_company_id'];
|
|
|
}else{
|
|
|
$pcList[$v['second_company_id']] =$v;
|
|
|
$js_id[] =$v['first_company_id'];
|
|
|
}
|
|
|
|
|
|
}
|
|
|
$pc_id = implode(",",array_flip(array_flip(array_keys($pcList))));
|
|
|
$js_id = implode(",",array_unique($js_id));
|
|
|
if(count($js_id) ==0 || count($pcList) == 0){
|
|
|
//无需处理
|
|
|
return ;
|
|
|
}
|
|
|
$pc_map = [
|
|
|
"id"=>["IN",$pc_id],
|
|
|
"_string"=>"(validity_start_time > 0 AND validity_end_time = 0 ) OR validity_end_time >= {$endtime}",
|
|
|
"company_type"=>1
|
|
|
];
|
|
|
//获取pc公司
|
|
|
$tmpp = M("PromoteCompany","tab_")->field("id,uid,company_name partner,settlement_contact link_man,address,contact_phone link_phone,bank_name opening_bank,bank_address payee_name,bank_card bank_account,fax_ratio,taxation_rate,company_belong,company_type,ali_user,ali_account,has_server_fee,server_fee,has_ratio,turnover_ratio")
|
|
|
->where($pc_map)
|
|
|
->select();
|
|
|
// dump($tmpp);
|
|
|
if(empty($tmpp)){
|
|
|
return true;
|
|
|
}
|
|
|
$pc =[];
|
|
|
$Promote = M("Promote","tab_");
|
|
|
foreach ($tmpp as $v) {
|
|
|
// //获取会长的支付宝账号
|
|
|
// $p_map = [
|
|
|
// "company_id"=>$v['id'],
|
|
|
// "withdraw_done"=>1
|
|
|
// ];
|
|
|
// $pres = $Promote->field("alipay_account,alipay_real_name")->where($p_map)->find();
|
|
|
// if(!empty($pres) && !empty($pres['alipay_account']) && !empty($pres['alipay_real_name'])){
|
|
|
// $v['ali_user'] = $pres['alipay_real_name'];
|
|
|
// $v['ali_account'] = $pres['alipay_account'];
|
|
|
// }
|
|
|
if($v['has_ratio']){
|
|
|
$v['turnover_ratio'] = json_decode($v['turnover_ratio'],true);
|
|
|
}
|
|
|
$pc[$v['id']]=$v;
|
|
|
}
|
|
|
|
|
|
unset($tmpp);
|
|
|
//获取己方公司
|
|
|
$our = [];
|
|
|
$tmpp = M("CompanyInfo","tab_")->field("id,partner,link_man,link_phone,address,company_tax_no,payee_name,bank_account,opening_bank")->where(["id"=>['in',$js_id]])->select();
|
|
|
foreach ($tmpp as $v) {
|
|
|
$our[$v['id']]=$v;
|
|
|
}
|
|
|
unset($tmpp);
|
|
|
unset($js_id);
|
|
|
|
|
|
$this->getPromoteCompanySpend($pcList,array_unique(array_keys($pcList)),$begintime,$endtime);
|
|
|
|
|
|
//数据整合
|
|
|
$verify_log=json_encode(["create_user"=>"system","create_time"=>date("Y-m-d H:i:s")]);
|
|
|
$StatementDb = SM("CompanyStatement","tab_");
|
|
|
|
|
|
$statement_begin_time = date("Y.m.d",$begintime);
|
|
|
$statement_end_time = date("Y.m.d",$endtime);
|
|
|
$RewardRecord = M("RewardDetail","tab_");
|
|
|
foreach($pcList as $k=>$v){
|
|
|
if(!isset($pc[$k])){continue;}//不存在的公司不结算
|
|
|
if($pc[$k]['has_ratio'] == 1){
|
|
|
$company_ratio = $this->getCompanyRatio($v['pay_amount'],$pc[$k]['turnover_ratio']);
|
|
|
}else{
|
|
|
$company_ratio = 0;
|
|
|
}
|
|
|
$add_data=[];
|
|
|
//1.获取甲乙方信息
|
|
|
if($v['first_company_type'] > 0){
|
|
|
//甲方合作
|
|
|
$pc[$v['first_company_id']]['invoice_type'] = $v['invoice_type'];
|
|
|
$pc[$v['first_company_id']]['invoice_content'] = $v['invoice_content'];
|
|
|
|
|
|
$add_data['first_party_info'] = json_encode($pc[$v['first_company_id']],JSON_UNESCAPED_UNICODE);
|
|
|
$add_data['second_party_info'] = json_encode($our[$v['second_company_id']],JSON_UNESCAPED_UNICODE);
|
|
|
$add_data['company_id'] = $v['first_company_id'];
|
|
|
$add_data['company_name'] = $v['first_company_name'];
|
|
|
|
|
|
}else{
|
|
|
//乙方合作
|
|
|
$pc[$v['second_company_id']]['invoice_type'] = $v['invoice_type'];
|
|
|
$pc[$v['second_company_id']]['invoice_content'] = $v['invoice_content'];
|
|
|
$add_data['first_party_info'] = json_encode($our[$v['first_company_id']],JSON_UNESCAPED_UNICODE);
|
|
|
$add_data['second_party_info'] = json_encode($pc[$v['second_company_id']],JSON_UNESCAPED_UNICODE);
|
|
|
$add_data['company_id'] = $v['second_company_id'];
|
|
|
$add_data['company_name'] = $v['second_company_name'];
|
|
|
}
|
|
|
$add_data['pay_type'] = $v['collection'];
|
|
|
$add_data['withdraw_type'] = $type;
|
|
|
$add_data['statement_begin_time'] = $begintime;
|
|
|
$add_data['statement_end_time'] = $endtime;
|
|
|
$add_data['statement_money'] = 0;
|
|
|
$add_data['pay_amount'] = 0;
|
|
|
$add_data['verify_log'] = $verify_log;
|
|
|
$add_data['op_time'] =time();
|
|
|
$add_data['is_payment']=$v['is_payment'];
|
|
|
$add_data['statement_info'] =[];
|
|
|
|
|
|
//获取渠道及发票税率
|
|
|
$fax_ratio = $pc[$add_data['company_id']]['taxation_rate'] ?? 0; //税费费率
|
|
|
$company_belong = $pc[$add_data['company_id']]['company_belong'];
|
|
|
$add_data['company_belong']=$company_belong;
|
|
|
$add_data['company_type']=$pc[$add_data['company_id']]['company_type'];
|
|
|
|
|
|
if(!isset($v['game_list'])){continue;}
|
|
|
//获取多段比例
|
|
|
$game_ratio_list = D("CompanyGameRatio")->getPromoteCompanyGameRatio($add_data['company_id'],$v['game_ids'],$begintime,$endtime,$company_belong);
|
|
|
|
|
|
$handleed_data = [];
|
|
|
|
|
|
foreach ($game_ratio_list as $t_game_id => $t_game_ratio) {
|
|
|
$game =[];
|
|
|
$game['game_name'] =$v['game_list'][$t_game_id]['game_name'];
|
|
|
$game['relation_game_id'] =$v['game_list'][$t_game_id]['relation_game_id'];
|
|
|
if(isset($v['game_list'][$t_game_id]['all_pay_amount'])){
|
|
|
$game_all_payment = $v['game_list'][$t_game_id]['all_pay_amount']-0;
|
|
|
}else{
|
|
|
// $game_all_payment = $v['game_list'][$t_game_id]['pay_amount']-0;
|
|
|
$game_all_payment = $v['game_list'][$t_game_id]['ratio_pay_amount']-0;
|
|
|
}
|
|
|
|
|
|
// dump($tratio);
|
|
|
$game['fax_ratio']=$fax_ratio-0;
|
|
|
|
|
|
$game['statement_type']=0;
|
|
|
|
|
|
if(count($t_game_ratio) == 1){
|
|
|
$tmp_game_ratio = $t_game_ratio[0];
|
|
|
|
|
|
$game['pay_amount'] =$this->getRelationGameIdSpend($add_data['company_id'],$t_game_id,$tmp_game_ratio['begintime'],$tmp_game_ratio['endtime']);
|
|
|
|
|
|
// $game['pay_amount'] = $v['game_list'][$t_game_id]['pay_amount'];
|
|
|
$game['pay_amount'] -=0;
|
|
|
|
|
|
$game['statement_begin_time']=$statement_begin_time;
|
|
|
$game['statement_end_time']=$statement_end_time;
|
|
|
$add_data['pay_amount'] += $game['pay_amount'];
|
|
|
|
|
|
if($type == 1){
|
|
|
$tratio =$this->getTurnoverRatio($game_all_payment,$tmp_game_ratio['ratio'],$tmp_game_ratio['turnover_ratio']);
|
|
|
$tratio += $company_ratio;
|
|
|
|
|
|
// if ($add_data['company_id'] == 5) {
|
|
|
// dump($game_all_payment);
|
|
|
// dump($this->getTurnoverType($t_game_id,$k,$begintime,$endtime));
|
|
|
// dump($tmp_game_ratio);
|
|
|
// }
|
|
|
|
|
|
}elseif($type == 0){
|
|
|
// $tratio = $tmp_game_ratio['ratio'];
|
|
|
$turnover_type = $this->getTurnoverType($t_game_id,$k,$begintime,$endtime);
|
|
|
|
|
|
if ($turnover_type == 2 || $turnover_type == 4) {
|
|
|
$tratio =$this->getTurnoverRatio($game_all_payment,$tmp_game_ratio['ratio'],$tmp_game_ratio['turnover_ratio']);
|
|
|
} else {
|
|
|
$tratio = $tmp_game_ratio['ratio'];
|
|
|
}
|
|
|
}else{
|
|
|
//补点
|
|
|
$turnover_type = $this->getTurnoverType($t_game_id,$k,$begintime,$endtime);
|
|
|
if ($turnover_type == 2 || $turnover_type == 4) {
|
|
|
continue;
|
|
|
}
|
|
|
$tratio1 =$this->getTurnoverRatio($game_all_payment,$tmp_game_ratio['ratio'],$tmp_game_ratio['turnover_ratio']);
|
|
|
$tratio2 =$tmp_game_ratio['ratio'];
|
|
|
$tratio = $tratio1-$tratio2+$company_ratio;
|
|
|
if($tratio <= 0){ continue;}
|
|
|
}
|
|
|
if($v['type'] == 2){
|
|
|
$game['increment_ratio']=$tratio;
|
|
|
}else{
|
|
|
$game['ratio']=$tratio;
|
|
|
}
|
|
|
|
|
|
$RewardRecordRes = $this->getPromoteUserGameRewardRecord($add_data['company_id'],$statement_begin_time,$statement_end_time);
|
|
|
|
|
|
if (
|
|
|
($handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['fine'] || $handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['fine'] == '0')
|
|
|
|| ($handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['reward'] || $handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['reward'] == '0')
|
|
|
) {
|
|
|
$game['fine'] = 0;
|
|
|
$game['reward'] = 0;
|
|
|
} else {
|
|
|
$game['fine'] = $RewardRecordRes['fine']?$RewardRecordRes['fine']:0;
|
|
|
$game['reward'] = $RewardRecordRes['reward']?$RewardRecordRes['reward']:0;
|
|
|
$handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['fine'] = (string)$RewardRecordRes['fine'];
|
|
|
$handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['reward'] = (string)$RewardRecordRes['reward'];
|
|
|
}
|
|
|
|
|
|
$game['sum_money']=round($game['pay_amount']*$tratio*(100-$fax_ratio)/(100*100),2);//结算金额=平台总额*(分成比例+补点比例)*(1-税费费率)
|
|
|
$add_data['statement_money'] += $game['sum_money'];
|
|
|
if ($game['pay_amount'] != '0') {
|
|
|
$add_data['statement_info'][] = $game;
|
|
|
}
|
|
|
}else{
|
|
|
// dd($t_game_ratio);
|
|
|
for ($i=0; $i < count($t_game_ratio); $i++) {
|
|
|
$tmp_game_ratio = $t_game_ratio[$i];
|
|
|
$temp_game = $game;
|
|
|
$temp_game['statement_begin_time']=date("Y.m.d",$tmp_game_ratio['begintime']);
|
|
|
$temp_game['statement_end_time']=date("Y.m.d",$tmp_game_ratio['endtime']);
|
|
|
// dd($t_game_id);
|
|
|
$temp_game['pay_amount'] =$this->getRelationGameIdSpend($add_data['company_id'],$t_game_id,$tmp_game_ratio['begintime'],$tmp_game_ratio['endtime']);
|
|
|
$temp_game['pay_amount'] -=0;
|
|
|
$add_data['pay_amount'] += $temp_game['pay_amount'];
|
|
|
|
|
|
if($type == 1){
|
|
|
|
|
|
// if ($add_data['company_id'] == 5) {
|
|
|
// dump($game_all_payment);
|
|
|
// dump($this->getTurnoverType($t_game_id,$k,$begintime,$endtime));
|
|
|
// dump($tmp_game_ratio);
|
|
|
// }
|
|
|
|
|
|
$tratio =$this->getTurnoverRatio($game_all_payment,$tmp_game_ratio['ratio'],$tmp_game_ratio['turnover_ratio']);
|
|
|
$tratio += $company_ratio;
|
|
|
}elseif($type == 0){
|
|
|
// $tratio = $t_game_ratio['ratio'];
|
|
|
$turnover_type = $this->getTurnoverType($t_game_id,$k,$begintime,$endtime);
|
|
|
|
|
|
if ($turnover_type == 2 || $turnover_type == 4) {
|
|
|
$tratio =$this->getTurnoverRatio($game_all_payment,$tmp_game_ratio['ratio'],$tmp_game_ratio['turnover_ratio']);
|
|
|
} else {
|
|
|
$tratio = $tmp_game_ratio['ratio'];
|
|
|
}
|
|
|
}else{
|
|
|
$turnover_type = $this->getTurnoverType($t_game_id,$k,$begintime,$endtime);
|
|
|
if ($turnover_type == 2 || $turnover_type == 4) {
|
|
|
continue;
|
|
|
}
|
|
|
//补点
|
|
|
$tratio1 =$this->getTurnoverRatio($game_all_payment,$tmp_game_ratio['ratio'],$tmp_game_ratio['turnover_ratio']);
|
|
|
$tratio2 =$tmp_game_ratio['ratio'];
|
|
|
$tratio = $tratio1-$tratio2+$company_ratio;
|
|
|
if($tratio <= 0){ continue;}
|
|
|
}
|
|
|
if($v['type'] == 2){
|
|
|
$temp_game['increment_ratio']=$tratio;
|
|
|
}else{
|
|
|
$temp_game['ratio']=$tratio;
|
|
|
}
|
|
|
|
|
|
$RewardRecordRes = $this->getPromoteUserGameRewardRecord($add_data['company_id'],$temp_game['statement_begin_time'],$temp_game['statement_end_time']);
|
|
|
|
|
|
if (
|
|
|
($handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['fine'] || $handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['fine'] == '0')
|
|
|
|| ($handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['reward'] || $handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['reward'] == '0')
|
|
|
) {
|
|
|
$game['fine'] = 0;
|
|
|
$game['reward'] = 0;
|
|
|
} else {
|
|
|
$game['fine'] = $RewardRecordRes['fine']?$RewardRecordRes['fine']:0;
|
|
|
$game['reward'] = $RewardRecordRes['reward']?$RewardRecordRes['reward']:0;
|
|
|
$handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['fine'] = (string)$RewardRecordRes['fine'];
|
|
|
$handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['reward'] = (string)$RewardRecordRes['reward'];
|
|
|
}
|
|
|
|
|
|
$temp_game['sum_money']=round($temp_game['pay_amount']*$tratio*(100-$fax_ratio)/(100*100),2);//结算金额=平台总额*(分成比例+补点比例)*(1-税费费率)
|
|
|
$add_data['statement_money'] += $temp_game['sum_money'];
|
|
|
if ($temp_game['pay_amount'] != '0') {
|
|
|
$add_data['statement_info'][] = $temp_game;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
$add_data['platform_amount'] = $add_data['pay_amount'];
|
|
|
if($type < 2){
|
|
|
//非补点计算奖罚
|
|
|
$rrmap = array(
|
|
|
"d.confirm_time" => ['between', [$begintime,$endtime]],
|
|
|
"company_type"=>2,
|
|
|
"company_id"=>$add_data['company_id'],
|
|
|
"settlement_type"=>2,
|
|
|
"is_verify"=>1,
|
|
|
);
|
|
|
$rfres = M("RewardDetail","tab_")
|
|
|
->alias("d")
|
|
|
->field("
|
|
|
IFNULL(SUM(CASE WHEN type = 1 THEN amount ELSE 0 END),0) as reward_count,
|
|
|
IFNULL(SUM(CASE WHEN type = 2 THEN amount ELSE 0 END),0) as fine_count
|
|
|
")
|
|
|
->join('tab_reward_record as r on d.record_id = r.id', 'LEFT')
|
|
|
->where($rrmap)->find();
|
|
|
if($rfres['reward_count'] > 0){
|
|
|
$reward_count = $rfres['reward_count'];
|
|
|
$add_data['statement_info'][] = array(
|
|
|
"statement_begin_time"=>$statement_begin_time,
|
|
|
"statement_end_time"=>$statement_end_time,
|
|
|
'statement_type'=>2,
|
|
|
"game_name"=>"奖励",
|
|
|
'pay_amount'=>$reward_count,
|
|
|
'sum_money'=>$reward_count,
|
|
|
);
|
|
|
$add_data['statement_money']+=$reward_count;
|
|
|
$add_data['pay_amount']+=$reward_count;
|
|
|
}
|
|
|
if($rfres['fine_count'] > 0){
|
|
|
$fine_count = $rfres['fine_count'];
|
|
|
$add_data['statement_info'][] = array(
|
|
|
"statement_begin_time"=>$statement_begin_time,
|
|
|
"statement_end_time"=>$statement_end_time,
|
|
|
'statement_type'=>1,
|
|
|
"game_name"=>"罚款",
|
|
|
'pay_amount'=>$fine_count,
|
|
|
'sum_money'=>$fine_count,
|
|
|
);
|
|
|
$add_data['statement_money'] -= $fine_count;
|
|
|
$add_data['pay_amount'] -= $fine_count;;
|
|
|
}
|
|
|
//获取服务器费用
|
|
|
$tmp_company_info= $pc[$add_data['company_id']];
|
|
|
if($tmp_company_info['has_server_fee'] == 1 && $tmp_company_info['server_fee'] >0){
|
|
|
$server_count = $tmp_company_info['server_fee'];
|
|
|
$add_data['statement_info'][] = array(
|
|
|
"statement_begin_time"=>$statement_begin_time,
|
|
|
"statement_end_time"=>$statement_end_time,
|
|
|
'statement_type'=>1,
|
|
|
"game_name"=>"服务器费用",
|
|
|
'pay_amount'=>$server_count,
|
|
|
'sum_money'=>$server_count,
|
|
|
);
|
|
|
$add_data['statement_money'] -= $server_count;
|
|
|
$add_data['pay_amount'] -= $server_count;;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
$is_continue = false;
|
|
|
$statement_data = $add_data['statement_info'];
|
|
|
foreach ($statement_data as $skey => $sval) {
|
|
|
if ($sval) {
|
|
|
$is_continue = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (!$is_continue) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
$add_data['statement_info'] = json_encode($add_data['statement_info'],JSON_UNESCAPED_UNICODE);
|
|
|
if($type == 2 && $add_data['statement_money'] == 0){
|
|
|
//金额为0不补点
|
|
|
continue;
|
|
|
}
|
|
|
if($add_data['platform_amount'] == 0){
|
|
|
continue;
|
|
|
}
|
|
|
//添加
|
|
|
if($recount === true && $company_id !== false){
|
|
|
//非重算
|
|
|
return $add_data;
|
|
|
}
|
|
|
$StatementDb->add($add_data);
|
|
|
}
|
|
|
}
|
|
|
//设定开始结束时间
|
|
|
public function setBeginAndEndTime($type,$stime){
|
|
|
if($type == 0){
|
|
|
$begintime = mktime(0,0,0,date('m',$stime),date('d',$stime)-7,date('Y',$stime));
|
|
|
$endtime = mktime(0,0,0,date('m',$stime),date('d',$stime),date('Y',$stime))-1;
|
|
|
}else{
|
|
|
$thismonth = date('m',$stime);
|
|
|
$thisyear = date('Y',$stime);
|
|
|
if ($thismonth == 1) {
|
|
|
$lastmonth = 12;
|
|
|
$lastyear = $thisyear - 1;
|
|
|
} else {
|
|
|
$lastmonth = $thismonth - 1;
|
|
|
$lastyear = $thisyear;
|
|
|
}
|
|
|
$lastStartDay = $lastyear . '-' . $lastmonth . '-1';
|
|
|
$lastEndDay = $lastyear . '-' . $lastmonth . '-' . date('t', strtotime($lastStartDay));
|
|
|
$begintime = strtotime($lastStartDay);//上个月的月初时间戳
|
|
|
$endtime = strtotime($lastEndDay)+24*3600-1;//上个月的月末时间戳
|
|
|
}
|
|
|
return [$begintime,$endtime];
|
|
|
}
|
|
|
//获取推广公司推广金额
|
|
|
public function getPromoteCompanySpend(&$pcList,$idarr,$begintime,$endtime){
|
|
|
$res = [];
|
|
|
$all_res = [];
|
|
|
$cp_res = [];
|
|
|
$cp_all_res = [];
|
|
|
//获取推广员
|
|
|
if(count($idarr) == 0){return $res;}
|
|
|
$Promote = M("Promote","tab_");
|
|
|
$Spend = M("Spend","tab_");
|
|
|
$spenMap = [
|
|
|
"s.pay_status"=>1,
|
|
|
"s.payed_time"=>['between', [$begintime,$endtime]],
|
|
|
"s.is_check"=>1
|
|
|
];
|
|
|
D("Spend")->addSubsiteWhere($spenMap);
|
|
|
$cpMap = [
|
|
|
"s.pay_status"=>1,
|
|
|
"s.payed_time"=>['between', [$begintime,$endtime]]
|
|
|
];
|
|
|
D("Spend")->addSubsiteWhere($cpMap);
|
|
|
$cpAllMap =[
|
|
|
"s.pay_status"=>1,
|
|
|
"s.payed_time"=>['elt',$endtime]
|
|
|
];
|
|
|
D("Spend")->addSubsiteWhere($cpAllMap);
|
|
|
|
|
|
for ($i=0; $i <count($idarr); $i++) {
|
|
|
$company_id = $idarr[$i];
|
|
|
|
|
|
$pres = $Promote->field("group_concat(id) ids,count(id) count")->where("company_id = '{$company_id}'")->group("company_id")->find();
|
|
|
if($pres['count'] ==0 ){continue;}
|
|
|
$spenMap['s.promote_id']=["in",$pres['ids']];
|
|
|
//获取支付记录
|
|
|
$list = $Spend->alias('s')->field('sum(s.pay_amount) pay_amount,s.game_id,g.relation_game_id,g.relation_game_name game_name')->where($spenMap)->group('game_id')
|
|
|
->join("left join tab_game g on s.game_id = g.id")
|
|
|
->select();
|
|
|
|
|
|
$allSpendMap = $spenMap;
|
|
|
unset($allSpendMap["s.payed_time"]);
|
|
|
|
|
|
$allspend_list = $Spend->alias('s')->field('sum(s.pay_amount) pay_amount,s.game_id,g.relation_game_id,g.relation_game_name game_name')->where($allSpendMap)->group('game_id')
|
|
|
->join("left join tab_game g on s.game_id = g.id")
|
|
|
->select();
|
|
|
|
|
|
foreach($allspend_list as $k=>$v){
|
|
|
try {
|
|
|
$all_res[$company_id]["pay_amount"] += $v['pay_amount'];
|
|
|
} catch (\Throwable $th) {
|
|
|
$all_res[$company_id]["pay_amount"] = $v['pay_amount'];
|
|
|
}
|
|
|
if(isset($all_res[$company_id][$v['relation_game_id']])){
|
|
|
//
|
|
|
$all_res[$company_id][$v['relation_game_id']]['pay_amount'] += $v['pay_amount'];
|
|
|
}else{
|
|
|
unset($v['game_id']);
|
|
|
$all_res[$company_id][$v['relation_game_id']]= $v;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
if(empty($list)){continue;}
|
|
|
|
|
|
foreach($list as $k=>$v){
|
|
|
|
|
|
try {
|
|
|
$res[$company_id]["pay_amount"] += $v['pay_amount'];
|
|
|
} catch (\Throwable $th) {
|
|
|
$res[$company_id]["pay_amount"] = $v['pay_amount'];
|
|
|
}
|
|
|
if(isset($res[$company_id][$v['relation_game_id']])){
|
|
|
//
|
|
|
|
|
|
$res[$company_id][$v['relation_game_id']]['pay_amount'] += $v['pay_amount'];
|
|
|
|
|
|
$res[$company_id][$v['relation_game_id']]['ratio_pay_amount'] += $v['pay_amount'];
|
|
|
}else{
|
|
|
|
|
|
unset($v['game_id']);
|
|
|
$v['ratio_pay_amount'] = $v['pay_amount'];
|
|
|
$res[$company_id][$v['relation_game_id']]= $v;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$game_ids = implode(",",array_unique(array_column($list,"relation_game_id")));
|
|
|
$game_ids = $this->getModuleRatioGame($company_id,$game_ids,$begintime,$endtime);
|
|
|
$sameGame = $this->getTheSameGame($game_ids);
|
|
|
|
|
|
|
|
|
if(!empty($sameGame)){
|
|
|
foreach ($sameGame as $k => $v) {
|
|
|
|
|
|
$temp = 0;
|
|
|
for ($j=0; $j < count($v); $j++) {
|
|
|
|
|
|
// $turnover_where = [
|
|
|
// "relation_game_id"=>$v[$j],
|
|
|
// "company_id"=>$company_id,
|
|
|
// "_string"=>"begin_time <={$endtime} AND ( end_time = 0 OR end_time >= {$begintime})"
|
|
|
// ];
|
|
|
// $turnover_type = D("CompanyGameRatio")->field("turnover_type")->where($turnover_where)->find()['turnover_type'];
|
|
|
$turnover_type = $this->getTurnoverType($v[$j],$company_id,$begintime,$endtime);
|
|
|
|
|
|
if ($turnover_type == 2) {
|
|
|
$res[$company_id][$v[$j]]['ratio_pay_amount'] = $all_res[$company_id][$v[$j]]['pay_amount'];
|
|
|
$temp += $all_res[$company_id][$v[$j]]['pay_amount'];
|
|
|
} elseif($turnover_type == 3){
|
|
|
if (empty($cp_res[$company_id])) {
|
|
|
$cpSpendList = $Spend->alias('s')->field('sum(s.pay_amount) pay_amount,s.game_id,g.relation_game_id,g.relation_game_name game_name')->where($cpMap)->group('game_id')
|
|
|
->join("left join tab_game g on s.game_id = g.id")
|
|
|
->select();
|
|
|
|
|
|
// if ($company_id == 5) {
|
|
|
// dump($cpMap);
|
|
|
// }
|
|
|
|
|
|
foreach($cpSpendList as $ck=>$cv){
|
|
|
try {
|
|
|
$cp_res[$company_id]["pay_amount"] += $cv['pay_amount'];
|
|
|
} catch (\Throwable $th) {
|
|
|
$cp_res[$company_id]["pay_amount"] = $cv['pay_amount'];
|
|
|
}
|
|
|
if(isset($cp_res[$company_id][$cv['relation_game_id']])){
|
|
|
//
|
|
|
$cp_res[$company_id][$cv['relation_game_id']]['pay_amount'] += $cv['pay_amount'];
|
|
|
}else{
|
|
|
unset($cv['game_id']);
|
|
|
$cp_res[$company_id][$cv['relation_game_id']]= $cv;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
$res[$company_id][$v[$j]]['ratio_pay_amount'] = $cp_res[$company_id][$v[$j]]['pay_amount'];
|
|
|
$temp += $cp_res[$company_id][$v[$j]]['pay_amount'];
|
|
|
|
|
|
} elseif($turnover_type == 4){
|
|
|
|
|
|
if (empty($cp_all_res[$company_id])) {
|
|
|
|
|
|
$cpAllSpendList = $Spend->alias('s')->field('sum(s.pay_amount) pay_amount,s.game_id,g.relation_game_id,g.relation_game_name game_name')->where($cpAllMap)->group('game_id')
|
|
|
->join("left join tab_game g on s.game_id = g.id")
|
|
|
->select();
|
|
|
foreach ($cpAllSpendList as $ck => $cv) {
|
|
|
try {
|
|
|
$cp_all_res[$company_id]["pay_amount"] += $cv['pay_amount'];
|
|
|
} catch (\Throwable $th) {
|
|
|
$cp_all_res[$company_id]["pay_amount"] = $cv['pay_amount'];
|
|
|
}
|
|
|
if (isset($cp_all_res[$company_id][$cv['relation_game_id']])) {
|
|
|
//
|
|
|
$cp_all_res[$company_id][$cv['relation_game_id']]['pay_amount'] += $cv['pay_amount'];
|
|
|
} else {
|
|
|
unset($cv['game_id']);
|
|
|
$cp_all_res[$company_id][$cv['relation_game_id']] = $cv;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
$res[$company_id][$v[$j]]['ratio_pay_amount'] = $cp_all_res[$company_id][$v[$j]]['pay_amount'];
|
|
|
$temp += $cp_all_res[$company_id][$v[$j]]['pay_amount'];
|
|
|
|
|
|
} else {
|
|
|
// $res[$company_id][$v[$j]]['ratio_pay_amount'] = $res[$company_id][$v[$j]]['pay_amount'];
|
|
|
$temp += $res[$company_id][$v[$j]]['pay_amount'];
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
$sameGame[$k] = $temp;
|
|
|
}
|
|
|
foreach ($sameGame as $k => $v) {
|
|
|
$res[$company_id][$k]['all_pay_amount'] = $v;
|
|
|
// $game[$k]['pay_amount']= $v;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
foreach($res as $key=>$value){
|
|
|
|
|
|
foreach ($value as $k => $v){
|
|
|
if ($k!='pay_amount') {
|
|
|
|
|
|
$turnover_type = $this->getTurnoverType($k,$key,$begintime,$endtime);
|
|
|
|
|
|
if ($turnover_type == 2) {
|
|
|
$res[$key][$k]['ratio_pay_amount'] = $all_res[$key][$k]['pay_amount'];
|
|
|
} elseif($turnover_type == 3){
|
|
|
|
|
|
if (empty($cp_res[$key])) {
|
|
|
// if ($key == 5) {
|
|
|
// dump(2);
|
|
|
// dump($cpMap);
|
|
|
// dump($cp_res);
|
|
|
// }
|
|
|
$cpSpendList = $Spend->alias('s')->field('sum(s.pay_amount) pay_amount,s.game_id,g.relation_game_id,g.relation_game_name game_name')->where($cpMap)->group('game_id')
|
|
|
->join("left join tab_game g on s.game_id = g.id")
|
|
|
->select();
|
|
|
|
|
|
foreach($cpSpendList as $ck=>$cv){
|
|
|
try {
|
|
|
$cp_res[$key]["pay_amount"] += $cv['pay_amount'];
|
|
|
} catch (\Throwable $th) {
|
|
|
$cp_res[$key]["pay_amount"] = $cv['pay_amount'];
|
|
|
}
|
|
|
if(isset($cp_res[$key][$cv['relation_game_id']])){
|
|
|
//
|
|
|
$cp_res[$key][$cv['relation_game_id']]['pay_amount'] += $cv['pay_amount'];
|
|
|
}else{
|
|
|
unset($cv['game_id']);
|
|
|
$cp_res[$key][$cv['relation_game_id']]= $cv;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$res[$key][$k]['ratio_pay_amount'] = $cp_res[$key][$k]['pay_amount'];
|
|
|
} elseif($turnover_type == 4){
|
|
|
|
|
|
if (empty($cp_all_res[$key])) {
|
|
|
|
|
|
$cpAllSpendList = $Spend->alias('s')->field('sum(s.pay_amount) pay_amount,s.game_id,g.relation_game_id,g.relation_game_name game_name')->where($cpAllMap)->group('game_id')
|
|
|
->join("left join tab_game g on s.game_id = g.id")
|
|
|
->select();
|
|
|
foreach ($cpAllSpendList as $ck => $cv) {
|
|
|
try {
|
|
|
$cp_all_res[$key]["pay_amount"] += $cv['pay_amount'];
|
|
|
} catch (\Throwable $th) {
|
|
|
$cp_all_res[$key]["pay_amount"] = $cv['pay_amount'];
|
|
|
}
|
|
|
if (isset($cp_all_res[$key][$cv['relation_game_id']])) {
|
|
|
//
|
|
|
$cp_all_res[$key][$cv['relation_game_id']]['pay_amount'] += $cv['pay_amount'];
|
|
|
} else {
|
|
|
unset($cv['game_id']);
|
|
|
$cp_all_res[$key][$cv['relation_game_id']] = $cv;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$res[$key][$k]['ratio_pay_amount'] = $cp_all_res[$key][$k]['pay_amount'];
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
foreach($res as $k=>$v){
|
|
|
$pcList[$k]["pay_amount"] = $v['pay_amount'];
|
|
|
unset($v['pay_amount']);
|
|
|
$pcList[$k]['game_list'] = $v;
|
|
|
$pcList[$k]['game_ids'] = implode(",",array_keys($pcList[$k]['game_list']));
|
|
|
}
|
|
|
|
|
|
}
|
|
|
/**
|
|
|
* 返回结算流水类型
|
|
|
*/
|
|
|
public function getTurnoverType($relation_game_id = 0, $company_id = 0, $begin_time = 0, $end_time = 0){
|
|
|
$company_belong = M("promote_company","tab_")->field("company_belong")->where(['id'=>$company_id])->find();
|
|
|
|
|
|
if (!$company_belong) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
$turnover_where = [
|
|
|
"relation_game_id"=>$relation_game_id,
|
|
|
"company_id"=>$company_id,
|
|
|
"_string"=>"begin_time <={$end_time} AND ( end_time = 0 OR end_time >= {$begin_time})"
|
|
|
];
|
|
|
$turnover_type = D("CompanyGameRatio")->field("turnover_type")->where($turnover_where)->find();
|
|
|
|
|
|
if (!$turnover_type) {
|
|
|
$turnover_where = [
|
|
|
"company_belong"=>$company_belong['company_belong'],
|
|
|
"relation_game_id"=>$relation_game_id,
|
|
|
"company_id"=>0,
|
|
|
"_string"=>"begin_time <={$end_time} AND ( end_time = 0 OR end_time >= {$begin_time})"
|
|
|
];
|
|
|
$turnover_type = D("CompanyGameRatio")->field("turnover_type")->where($turnover_where)->find();
|
|
|
}
|
|
|
|
|
|
//判断特殊比例是否存在,存在直接返回结算流水类型
|
|
|
if (!$turnover_type) {
|
|
|
|
|
|
//判断公司内外团类型是否存在,不存在直接返回0
|
|
|
if (!$company_belong) {
|
|
|
return 0;
|
|
|
} else {
|
|
|
$company_belong = $company_belong['company_belong'];
|
|
|
}
|
|
|
$mould_where = [
|
|
|
"relation_game_id"=>$relation_game_id,
|
|
|
"company_belong"=>$company_belong,
|
|
|
"_string"=>"begin_time <={$end_time} AND ( end_time = 0 OR end_time >= {$begin_time})"
|
|
|
];
|
|
|
$mould_data = M("game_ratio_mould","tab_")->where($mould_where)->find();
|
|
|
//判断游戏比例模板是否存在,不存在直接返回0,否则返回查询的类型
|
|
|
if ($mould_data) {
|
|
|
return $mould_data['turnover_type'];
|
|
|
} else {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
return $turnover_type['turnover_type'];
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//获取推广公司推广金额
|
|
|
protected function getPuPromoteSpend(&$pcList,$idarr,$begintime,$endtime){
|
|
|
$res = [];
|
|
|
//获取推广员
|
|
|
if(count($idarr) == 0){return $res;}
|
|
|
$Promote = M("Promote","tab_");
|
|
|
$Spend = M("Spend","tab_");
|
|
|
$spenMap = [
|
|
|
"s.pay_status"=>1,
|
|
|
"s.payed_time"=>['between', [$begintime,$endtime]],
|
|
|
"s.is_check"=>1
|
|
|
];
|
|
|
D("Spend")->addSubsiteWhere($spenMap,"s");
|
|
|
$cpallgame = [];
|
|
|
$cpgame = [];
|
|
|
$cpMap = [
|
|
|
"s.pay_status"=>1,
|
|
|
"s.payed_time"=>['between', [$begintime,$endtime]]
|
|
|
];
|
|
|
D("Spend")->addSubsiteWhere($cpMap,"s");
|
|
|
$cpAllMap = [
|
|
|
"s.pay_status"=>1,
|
|
|
"s.payed_time"=>['elt',$endtime]
|
|
|
];
|
|
|
D("Spend")->addSubsiteWhere($cpAllMap,"s");
|
|
|
// unset($cpAllMap["s.payed_time"]);
|
|
|
|
|
|
for ($i=0; $i <count($idarr); $i++) {
|
|
|
$company_id = $idarr[$i];
|
|
|
|
|
|
$pres = $Promote->field("id,account")->where("company_id = '{$company_id}'")->select();
|
|
|
if(empty($pres)){continue;}
|
|
|
$spenMap['s.promote_id']=["in",array_column($pres,"id")];
|
|
|
$promote_a = [];
|
|
|
foreach($pres as $key=>$value){
|
|
|
$promote_a[$value['id']] = $value['account'];
|
|
|
}
|
|
|
unset($pres);
|
|
|
//获取支付记录
|
|
|
$list = $Spend
|
|
|
->alias('s')
|
|
|
->field("sum(s.pay_amount) pay_amount,s.game_id,g.relation_game_id,g.relation_game_name game_name,IFNULL(if(substring_index(substring_index(promote.`chain`,'/',2),'/',-1)='',s.promote_id,substring_index(substring_index(promote.`chain`,'/',2),'/',-1)),0) p_id")
|
|
|
->where($spenMap)
|
|
|
->group('p_id,game_id')
|
|
|
->join("tab_promote promote ON s.promote_id = promote.id","left")
|
|
|
->join("left join tab_game g on s.game_id = g.id")
|
|
|
->select();
|
|
|
|
|
|
$all_spendMap = $spenMap;
|
|
|
unset($all_spendMap['s.payed_time']);
|
|
|
|
|
|
$all_list = $Spend
|
|
|
->alias('s')
|
|
|
->field("sum(s.pay_amount) pay_amount,s.game_id,g.relation_game_id,g.relation_game_name game_name,IFNULL(if(substring_index(substring_index(promote.`chain`,'/',2),'/',-1)='',s.promote_id,substring_index(substring_index(promote.`chain`,'/',2),'/',-1)),0) p_id")
|
|
|
->where($all_spendMap)
|
|
|
->group('p_id,game_id')
|
|
|
->join("tab_promote promote ON s.promote_id = promote.id","left")
|
|
|
->join("left join tab_game g on s.game_id = g.id")
|
|
|
->select();
|
|
|
|
|
|
// if ($company_id == 64) {
|
|
|
// dump($all_list);
|
|
|
// }
|
|
|
|
|
|
if(empty($list)){continue;}
|
|
|
$game = [];
|
|
|
foreach($list as $k=>$v){
|
|
|
if(isset($game[$v['relation_game_id']])){
|
|
|
$game[$v['relation_game_id']]['pay_amount'] += $v['pay_amount'];
|
|
|
}else{
|
|
|
$game[$v['relation_game_id']]['pay_amount'] = $v['pay_amount'];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$allgame = [];
|
|
|
foreach($all_list as $k=>$v){
|
|
|
if(isset($allgame[$v['relation_game_id']])){
|
|
|
$allgame[$v['relation_game_id']]['pay_amount'] += $v['pay_amount'];
|
|
|
}else{
|
|
|
$allgame[$v['relation_game_id']]['pay_amount'] = $v['pay_amount'];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//同cp,同一个原包名的共享总流水分成
|
|
|
$game_ids = implode(",",array_keys($game));
|
|
|
$game_ids = $this->getModuleRatioGame($company_id,$game_ids,$begintime,$endtime);
|
|
|
$sameGame = $this->getTheSameGame($game_ids);
|
|
|
|
|
|
if(!empty($sameGame)){
|
|
|
foreach ($sameGame as $k => $v) {
|
|
|
$temp = 0;
|
|
|
for ($j=0; $j < count($v); $j++) {
|
|
|
$turnover_type = $this->getTurnoverType($v[$j],$company_id,$begintime,$endtime);
|
|
|
if ($turnover_type == 2) {
|
|
|
$temp += $allgame[$v[$j]]['pay_amount'];
|
|
|
} elseif($turnover_type == 3) {
|
|
|
|
|
|
if (empty($cpgame)) {
|
|
|
$cpSpendList = $Spend->alias('s')->field('sum(s.pay_amount) pay_amount,s.game_id,g.relation_game_id,g.relation_game_name game_name')->where($cpMap)->group('game_id')
|
|
|
->join("left join tab_game g on s.game_id = g.id")
|
|
|
->select();
|
|
|
// if ($company_id == 43) {
|
|
|
// dump($cpMap);
|
|
|
// }
|
|
|
foreach($cpSpendList as $ck=>$cv){
|
|
|
if(isset($cpgame[$cv['relation_game_id']])){
|
|
|
$cpgame[$cv['relation_game_id']]['pay_amount'] += $cv['pay_amount'];
|
|
|
}else{
|
|
|
$cpgame[$cv['relation_game_id']]['pay_amount'] = $cv['pay_amount'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$temp += $cpgame[$v[$j]]['pay_amount'];
|
|
|
} elseif($turnover_type == 4) {
|
|
|
|
|
|
if (empty($cpallgame)) {
|
|
|
$cpAllSpendList = $Spend->alias('s')->field('sum(s.pay_amount) pay_amount,s.game_id,g.relation_game_id,g.relation_game_name game_name')->where($cpAllMap)->group('game_id')
|
|
|
->join("left join tab_game g on s.game_id = g.id")
|
|
|
->select();
|
|
|
|
|
|
foreach($cpAllSpendList as $ck=>$cv){
|
|
|
if(isset($cpallgame[$cv['relation_game_id']])){
|
|
|
$cpallgame[$cv['relation_game_id']]['pay_amount'] += $cv['pay_amount'];
|
|
|
}else{
|
|
|
$cpallgame[$cv['relation_game_id']]['pay_amount'] = $cv['pay_amount'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$temp += $cpallgame[$v[$j]]['pay_amount'];
|
|
|
} else {
|
|
|
// $res[$company_id][$v[$j]]['ratio_pay_amount'] = $res[$company_id][$v[$j]]['pay_amount'];
|
|
|
$temp += $game[$v[$j]]['pay_amount'];
|
|
|
}
|
|
|
// $temp += $game[$v[$j]]['pay_amount'];
|
|
|
}
|
|
|
$sameGame[$k] = $temp;
|
|
|
}
|
|
|
foreach ($sameGame as $k => $v) {
|
|
|
$game[$k]['pay_amount']= $v;
|
|
|
}
|
|
|
}
|
|
|
$pcList[$company_id]['game_ids'] = implode(",",array_keys($game));
|
|
|
|
|
|
foreach($list as $k=>$v){
|
|
|
try {
|
|
|
$res[$company_id]["pay_amount"] += $v['pay_amount'];
|
|
|
} catch (\Throwable $th) {
|
|
|
$res[$company_id]["pay_amount"] = $v['pay_amount'];
|
|
|
}
|
|
|
$p_account = $promote_a[$v['p_id']];
|
|
|
|
|
|
if(isset($res[$company_id][$p_account][$v['relation_game_id']])){
|
|
|
//
|
|
|
$res[$company_id][$p_account][$v['relation_game_id']]['pay_amount'] += $v['pay_amount'];
|
|
|
}else{
|
|
|
unset($v['game_id']);
|
|
|
$res[$company_id][$p_account][$v['relation_game_id']]= $v;
|
|
|
|
|
|
$turnover_type = $this->getTurnoverType($v['relation_game_id'],$company_id,$begintime,$endtime);
|
|
|
|
|
|
if ($turnover_type == 2) {
|
|
|
// $temp += $allgame[$v[$j]]['pay_amount'];
|
|
|
$res[$company_id][$p_account][$v['relation_game_id']]['all_pay_amount']= $allgame[$v['relation_game_id']]['pay_amount'];
|
|
|
} elseif($turnover_type == 3) {
|
|
|
|
|
|
if (empty($cpgame)) {
|
|
|
$cpSpendList = $Spend->alias('s')->field('sum(s.pay_amount) pay_amount,s.game_id,g.relation_game_id,g.relation_game_name game_name')->where($cpMap)->group('game_id')
|
|
|
->join("left join tab_game g on s.game_id = g.id")
|
|
|
->select();
|
|
|
// if ($company_id == 43) {
|
|
|
// dump($cpMap);
|
|
|
// }
|
|
|
|
|
|
foreach($cpSpendList as $ck=>$cv){
|
|
|
if(isset($cpgame[$cv['relation_game_id']])){
|
|
|
$cpgame[$cv['relation_game_id']]['pay_amount'] += $cv['pay_amount'];
|
|
|
}else{
|
|
|
$cpgame[$cv['relation_game_id']]['pay_amount'] = $cv['pay_amount'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$res[$company_id][$p_account][$v['relation_game_id']]['all_pay_amount']= $cpgame[$v['relation_game_id']]['pay_amount'];
|
|
|
} elseif($turnover_type == 4) {
|
|
|
|
|
|
if (empty($cpallgame)) {
|
|
|
$cpAllSpendList = $Spend->alias('s')->field('sum(s.pay_amount) pay_amount,s.game_id,g.relation_game_id,g.relation_game_name game_name')->where($cpAllMap)->group('game_id')
|
|
|
->join("left join tab_game g on s.game_id = g.id")
|
|
|
->select();
|
|
|
|
|
|
foreach($cpAllSpendList as $ck=>$cv){
|
|
|
if(isset($cpallgame[$cv['relation_game_id']])){
|
|
|
$cpallgame[$cv['relation_game_id']]['pay_amount'] += $cv['pay_amount'];
|
|
|
}else{
|
|
|
$cpallgame[$cv['relation_game_id']]['pay_amount'] = $cv['pay_amount'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$res[$company_id][$p_account][$v['relation_game_id']]['all_pay_amount']= $cpallgame[$v['relation_game_id']]['pay_amount'];
|
|
|
} else {
|
|
|
// $res[$company_id][$v[$j]]['ratio_pay_amount'] = $res[$company_id][$v[$j]]['pay_amount'];
|
|
|
$res[$company_id][$p_account][$v['relation_game_id']]['all_pay_amount']= $game[$v['relation_game_id']]['pay_amount'];
|
|
|
}
|
|
|
|
|
|
// $res[$company_id][$p_account][$v['relation_game_id']]['all_pay_amount']= $game[$v['relation_game_id']]['pay_amount'];
|
|
|
$res[$company_id][$p_account][$v['relation_game_id']]['game_type_name'] = $this->getGameTypeName($v['relation_game_id']);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
foreach($res as $k=>$v){
|
|
|
$pcList[$k]["pay_amount"] = $v['pay_amount'];
|
|
|
unset($v['pay_amount']);
|
|
|
foreach($v as $ke=>$va){
|
|
|
$tmp = [
|
|
|
"account"=>$ke,
|
|
|
'game_list'=>$va
|
|
|
];
|
|
|
$pcList[$k]['list'][] = $tmp;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
public function promoteUserPool($type,$stime,$recount = false){
|
|
|
$t = $this->setBeginAndEndTime($type,$stime);
|
|
|
$begintime = $t[0];
|
|
|
$endtime = $t[1];
|
|
|
|
|
|
$user = [
|
|
|
"pay_amount"=>0,
|
|
|
"statement_money"=>0,
|
|
|
"lack_statement_money"=>0,
|
|
|
"withdraw_type"=>$type,
|
|
|
"platform_amount"=>0,
|
|
|
"create_lack_ids"=>[],
|
|
|
"del_lack_ids"=>[],
|
|
|
"statement_begin_time"=>$begintime,
|
|
|
"statement_end_time"=>$endtime,
|
|
|
"fine"=>0,
|
|
|
"reward"=>0,
|
|
|
"verify_status"=>0,
|
|
|
"company_type"=>2,
|
|
|
"verify_log"=>json_encode(["create_user"=>"system","create_time"=>date("Y-m-d H:i:s")]),
|
|
|
"op_time"=>time(),
|
|
|
"statement_num"=>"PL_".date('Ymd').date('His').sp_random_num(3)
|
|
|
];
|
|
|
// $users = $user = $basedata;
|
|
|
// $users['is_payment'] = 1;
|
|
|
// $users['statement_num'] = "PL_".date('Ymd').date('His').sp_random_num(3);
|
|
|
|
|
|
// $user['is_payment'] = 2;
|
|
|
// $user['statement_num'] = "PL_".date('Ymd').date('His').sp_random_num(3);
|
|
|
|
|
|
|
|
|
|
|
|
if($type == 0){//周结
|
|
|
$this->doPromoteUserPool($user,0,$stime,$recount);
|
|
|
}else if($type == 1){
|
|
|
$users['withdraw_type'] = 1;
|
|
|
$user['withdraw_type'] = 1;
|
|
|
//月结&补点
|
|
|
$this->doPromoteUserPool($user,1,$stime,$recount);
|
|
|
|
|
|
}else{
|
|
|
$users['withdraw_type'] = 2;
|
|
|
$user['withdraw_type'] = 2;
|
|
|
$this->doPromoteUserPool($user,2,$stime,$recount);
|
|
|
}
|
|
|
|
|
|
$this->savePromotateUserPool($user);
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 下游个人汇总单
|
|
|
*/
|
|
|
public function doPromoteUserPool(&$user,$type,$stime,$recount = false)
|
|
|
{
|
|
|
$t = $this->setBeginAndEndTime($type,$stime);
|
|
|
$begintime = $t[0];
|
|
|
$endtime = $t[1];
|
|
|
|
|
|
$where = [
|
|
|
"_string"=>"first_company_type = '2' OR second_company_type = '2'"
|
|
|
];
|
|
|
|
|
|
//单一公司调试
|
|
|
// $where['_string'] = "( " . $where['_string'] .") AND ( first_company_id = '509' OR first_company_id = '509' )";
|
|
|
|
|
|
//获取哪些要结算
|
|
|
if($type == 1){//月结
|
|
|
$where['settlement_type']=2;
|
|
|
$pcDbRes = M("CompanyRelation","tab_")->where($where)->select();
|
|
|
}else{
|
|
|
$where['settlement_type']=1;
|
|
|
$pcDbRes = M("CompanyRelation","tab_")->where($where)->select();
|
|
|
}
|
|
|
|
|
|
$pcList=[];
|
|
|
$js_id = [];//己方公司
|
|
|
foreach ($pcDbRes as $k => $v) {
|
|
|
if($v['first_company_type'] == 2){
|
|
|
$pcList[$v['first_company_id']] =$v;
|
|
|
$js_id[] =$v['second_company_id'];
|
|
|
}else{
|
|
|
$pcList[$v['second_company_id']] =$v;
|
|
|
$js_id[] =$v['first_company_id'];
|
|
|
}
|
|
|
}
|
|
|
//获取pc公司
|
|
|
$pc_id = implode(",",array_flip(array_flip(array_keys($pcList))));
|
|
|
$pu_map = [
|
|
|
"id"=>["IN",$pc_id],
|
|
|
"_string"=>"(validity_start_time > 0 AND validity_end_time = 0 ) OR validity_end_time >= {$endtime}",
|
|
|
"company_type"=>2
|
|
|
];
|
|
|
$tmpp = M("PromoteCompany","tab_")
|
|
|
->field("id,uid,company_name partner,settlement_contact link_man,contact_phone link_phone,bank_name opening_bank,bank_address payee_name,bank_card bank_account,fax_ratio,taxation_rate,company_belong,company_type,ali_user,ali_account,has_server_fee,server_fee,has_ratio,turnover_ratio")
|
|
|
->where($pu_map)
|
|
|
->select();
|
|
|
if(count($tmpp)<1){return;}
|
|
|
|
|
|
$pc =[];
|
|
|
$Promote = M("Promote","tab_");
|
|
|
foreach ($tmpp as $v) {
|
|
|
$p_map = [
|
|
|
"company_id"=>$v['id'],
|
|
|
"withdraw_done"=>1
|
|
|
];
|
|
|
// $pres = $Promote->field("alipay_account,alipay_real_name")->where($p_map)->find();
|
|
|
// if(!empty($pres) && !empty($pres['alipay_account']) && !empty($pres['alipay_real_name'])){
|
|
|
// $v['ali_user'] = $pres['alipay_real_name'];
|
|
|
// $v['ali_account'] = $pres['alipay_account'];
|
|
|
// }
|
|
|
if($v['has_ratio']){
|
|
|
$v['turnover_ratio'] = json_decode($v['turnover_ratio'],true);
|
|
|
}
|
|
|
|
|
|
$pc[$v['id']]=$v;
|
|
|
$pc[$v['id']]['is_payment']=$pcList[$v['id']]['is_payment'];
|
|
|
}
|
|
|
unset($tmpp);
|
|
|
|
|
|
$this->getPuPromoteSpend($pc,array_unique(array_keys($pc)),$begintime,$endtime);
|
|
|
// dump($pc);die();
|
|
|
|
|
|
$StatementDb = SM("CompanyStatement","tab_");
|
|
|
$statement_begin_time = date("Y.m.d",$begintime);
|
|
|
$statement_end_time = date("Y.m.d",$endtime);
|
|
|
// $RewardRecord = M("RewardRecord","tab_");
|
|
|
$LackStatement = SM("company_lack_statement_info","tab_");
|
|
|
$StatementInfo = SM("company_statement_info","tab_");
|
|
|
|
|
|
foreach($pc as $k=>&$v){
|
|
|
$fax_ratio = $v['taxation_rate'];
|
|
|
$RewardRecordRes = $this->getPromoteUserRewardRecord($v['id'],$begintime,$endtime);
|
|
|
if($v['has_ratio'] == 1){
|
|
|
$company_ratio = $this->getCompanyRatio($v['pay_amount'],$pc[$k]['turnover_ratio']);
|
|
|
}else{
|
|
|
$company_ratio = 0;
|
|
|
}
|
|
|
//获取其他信息
|
|
|
$v = $this->getCompanyOtherInfo($v,$k);
|
|
|
$countdata = &$user;
|
|
|
$v['statement_money'] = 0;
|
|
|
$v['pay_amount'] = 0;
|
|
|
if($type < 2 && $RewardRecordRes){
|
|
|
$v['fine'] = $RewardRecordRes['fine'];
|
|
|
$v['reward'] = $RewardRecordRes['reward'];
|
|
|
$v['statement_money'] -= $v['fine'];
|
|
|
$v['statement_money'] += $v['reward'];
|
|
|
}else{
|
|
|
$v['fine'] = 0;
|
|
|
$v['reward'] = 0;
|
|
|
}
|
|
|
$v['platform_amount'] = 0;
|
|
|
if(!isset($v['list']) && $v['fine'] == 0 && $v['reward'] == 0){continue;}
|
|
|
if(!array_key_exists('list',$v) && ($v['fine'] > 0 || $v['reward'] > 0)){
|
|
|
//没有流水,但是有罚款
|
|
|
$sta_info = [
|
|
|
"account" => $v['account'],
|
|
|
"game_list" => [
|
|
|
[
|
|
|
"pay_amount" => 0,
|
|
|
"relation_game_id" => 0,
|
|
|
"game_name" => "其他",
|
|
|
"p_id" => 0,
|
|
|
"all_pay_amount" => 0,
|
|
|
"game_type_name" => "其他",
|
|
|
"ratio"=>0,
|
|
|
"sum_money" => 0,
|
|
|
"fax_ratio" => 0,
|
|
|
"statement_begin_time" => $statement_begin_time,
|
|
|
"statement_end_time" => $statement_end_time,
|
|
|
"fine" => $v['fine'],
|
|
|
"reward" => $v['reward'],
|
|
|
"statement_type" => 0
|
|
|
]
|
|
|
]
|
|
|
];
|
|
|
$v['statement_info'][] = $sta_info;
|
|
|
}else{
|
|
|
$company_belong = $pc[$v['id']]['company_belong'];
|
|
|
//服务器费用
|
|
|
if ($type < 2) {
|
|
|
if ($v['has_server_fee'] == 1 && $v['server_fee'] > 0) {
|
|
|
$v['statement_info'][] = [
|
|
|
"game_name"=>"服务器费用",
|
|
|
"sum_money"=>-$v['server_fee'],
|
|
|
"pay_amount"=>-$v['server_fee'],
|
|
|
'statement_type'=>1,
|
|
|
"statement_begin_time"=>$statement_begin_time,
|
|
|
"statement_end_time"=>$statement_end_time
|
|
|
];
|
|
|
$v['pay_amount'] -= $v['server_fee'];
|
|
|
$v['statement_money'] -= $v['server_fee'];
|
|
|
}
|
|
|
}
|
|
|
$promoteCompanyGameRatio = D("CompanyGameRatio")->getPromoteCompanyGameRatio($v['id'], $v['game_ids'], $begintime, $endtime, $company_belong);
|
|
|
|
|
|
$handleed_data = [];
|
|
|
|
|
|
foreach ($v['list'] as $ke=>$va) {
|
|
|
$templist = $va['game_list'];
|
|
|
$va['game_list'] = [];
|
|
|
foreach ($templist as $p_id => $p_info) {
|
|
|
$ratioCount = count($promoteCompanyGameRatio[$p_info['relation_game_id']]);
|
|
|
$isMoreRatio = $ratioCount > 1 ? true : false;
|
|
|
|
|
|
if (!$isMoreRatio) {
|
|
|
$tmp_game_ratio = $promoteCompanyGameRatio[$p_info['relation_game_id']][0];
|
|
|
if ($type == 1) {
|
|
|
$tratio =$this->getTurnoverRatio($p_info['all_pay_amount'], $tmp_game_ratio['ratio'], $tmp_game_ratio['turnover_ratio']);
|
|
|
$tratio += $company_ratio;
|
|
|
} elseif ($type == 0) {
|
|
|
$turnover_type = $this->getTurnoverType($p_info['relation_game_id'], $k, $begintime, $endtime);
|
|
|
if ($turnover_type == 2||$turnover_type == 4) {
|
|
|
$tratio =$this->getTurnoverRatio($p_info['all_pay_amount'], $tmp_game_ratio['ratio'], $tmp_game_ratio['turnover_ratio']);
|
|
|
} else {
|
|
|
$tratio = $tmp_game_ratio['ratio'];
|
|
|
}
|
|
|
} else {
|
|
|
$turnover_type = $this->getTurnoverType($p_info['relation_game_id'], $k, $begintime, $endtime);
|
|
|
if ($turnover_type == 2||$turnover_type == 4) {
|
|
|
continue;
|
|
|
}
|
|
|
//补点
|
|
|
$tratio1 =$this->getTurnoverRatio($p_info['all_pay_amount'], $tmp_game_ratio['ratio'], $tmp_game_ratio['turnover_ratio']);
|
|
|
$tratio2 =$tmp_game_ratio['ratio'];
|
|
|
$tratio = $tratio1-$tratio2+$company_ratio;
|
|
|
if ($tratio <= 0) {
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
$tratio -= 0;
|
|
|
if ($type == 2) {
|
|
|
$p_info['increment_ratio']=$tratio;
|
|
|
} else {
|
|
|
$p_info['ratio']=$tratio;
|
|
|
}
|
|
|
|
|
|
$p_info['pay_amount'] = $this->getRelationGameIdPromoteSpend($p_info["p_id"], $p_info['relation_game_id'], $tmp_game_ratio['begintime'], $tmp_game_ratio['endtime']);
|
|
|
|
|
|
$p_info['pay_amount'] = number_format($p_info['pay_amount'], 2, '.', '');
|
|
|
|
|
|
$v['platform_amount'] += $p_info['pay_amount'];
|
|
|
$p_info['sum_money']=round($p_info['pay_amount']*$tratio/100, 2); //个人等于 结算金额*比例
|
|
|
$v['pay_amount'] += $p_info['sum_money'];
|
|
|
$v['statement_money'] += $p_info['sum_money'];
|
|
|
$p_info['fax_ratio']=$fax_ratio;
|
|
|
$p_info['statement_begin_time']=$statement_begin_time;
|
|
|
$p_info['statement_end_time']=$statement_end_time;
|
|
|
|
|
|
$RewardRecordRes = $this->getPromoteUserGameRewardRecord($v['id'], $statement_begin_time, $statement_end_time);
|
|
|
|
|
|
if (
|
|
|
($handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['fine'] || $handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['fine'] == '0')
|
|
|
|| ($handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['reward'] || $handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['reward'] == '0')
|
|
|
) {
|
|
|
$p_info['fine'] = 0;
|
|
|
$p_info['reward'] = 0;
|
|
|
} else {
|
|
|
$p_info['fine'] = $RewardRecordRes['fine']?$RewardRecordRes['fine']:0;
|
|
|
$p_info['reward'] = $RewardRecordRes['reward']?$RewardRecordRes['reward']:0;
|
|
|
$handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['fine'] = (string)$RewardRecordRes['fine'];
|
|
|
$handleed_data[$v['id'].$statement_begin_time.$statement_end_time]['reward'] = (string)$RewardRecordRes['reward'];
|
|
|
}
|
|
|
$p_info['statement_type']=0;
|
|
|
|
|
|
if ($p_info['pay_amount'] !='0') {
|
|
|
$va['game_list'][] = $p_info;
|
|
|
}
|
|
|
} else {
|
|
|
for ($i=0; $i < $ratioCount; $i++) {
|
|
|
$temp_game = [];
|
|
|
$tmp_game_ratio = $promoteCompanyGameRatio[$p_info['relation_game_id']][$i];
|
|
|
if ($type == 1) {
|
|
|
$tratio =$this->getTurnoverRatio($p_info['all_pay_amount'], $tmp_game_ratio['ratio'], $tmp_game_ratio['turnover_ratio']);
|
|
|
$tratio += $company_ratio;
|
|
|
} elseif ($type == 0) {
|
|
|
$turnover_type = $this->getTurnoverType($p_info['relation_game_id'], $k, $begintime, $endtime);
|
|
|
if ($turnover_type == 2 || $turnover_type == 4) {
|
|
|
$tratio =$this->getTurnoverRatio($p_info['all_pay_amount'], $tmp_game_ratio['ratio'], $tmp_game_ratio['turnover_ratio']);
|
|
|
} else {
|
|
|
$tratio = $tmp_game_ratio['ratio'];
|
|
|
}
|
|
|
} else {
|
|
|
$turnover_type = $this->getTurnoverType($p_info['relation_game_id'], $k, $begintime, $endtime);
|
|
|
if ($turnover_type == 2 || $turnover_type == 4) {
|
|
|
continue;
|
|
|
}
|
|
|
//补点
|
|
|
$tratio1 =$this->getTurnoverRatio($p_info['all_pay_amount'], $tmp_game_ratio['ratio'], $tmp_game_ratio['turnover_ratio']);
|
|
|
$tratio2 =$tmp_game_ratio['ratio'];
|
|
|
$tratio = $tratio1-$tratio2+$company_ratio;
|
|
|
if ($tratio <= 0) {
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
$tratio -= 0;
|
|
|
if ($type == 2) {
|
|
|
$temp_game['increment_ratio']=$tratio;
|
|
|
} else {
|
|
|
$temp_game['ratio']=$tratio;
|
|
|
}
|
|
|
$temp_game['pay_amount'] = $this->getRelationGameIdPromoteSpend($p_info["p_id"], $p_info['relation_game_id'], $tmp_game_ratio['begintime'], $tmp_game_ratio['endtime']);
|
|
|
$temp_game['pay_amount'] -=0;
|
|
|
$temp_game['pay_amount'] = number_format($temp_game['pay_amount'], 2, '.', '');
|
|
|
|
|
|
$v['platform_amount'] += $temp_game['pay_amount'];
|
|
|
$temp_game['sum_money']=round($temp_game['pay_amount']*$tratio/100, 2); //个人等于 结算金额*比例
|
|
|
$v['pay_amount'] += $temp_game['sum_money'];
|
|
|
$v['statement_money'] += $temp_game['sum_money'];
|
|
|
|
|
|
$temp_game['fax_ratio']=$fax_ratio-0;
|
|
|
$temp_game['statement_begin_time']=date("Y.m.d", $tmp_game_ratio['begintime']);
|
|
|
$temp_game['statement_end_time']=date("Y.m.d", $tmp_game_ratio['endtime']);
|
|
|
$temp_game['statement_type']=0;
|
|
|
|
|
|
$RewardRecordRes = $this->getPromoteUserGameRewardRecord($v['id'], $temp_game['statement_begin_time'], $temp_game['statement_end_time']);
|
|
|
|
|
|
if (
|
|
|
($handleed_data[$v['id'].$temp_game['statement_begin_time'].$temp_game['statement_end_time']]['fine'] || $handleed_data[$v['id'].$temp_game['statement_begin_time'].$temp_game['statement_end_time']]['fine'] == '0')
|
|
|
|| ($handleed_data[$v['id'].$temp_game['statement_begin_time'].$temp_game['statement_end_time']]['reward'] || $handleed_data[$v['id'].$temp_game['statement_begin_time'].$temp_game['statement_end_time']]['reward'] == '0')
|
|
|
) {
|
|
|
$temp_game['fine'] = 0;
|
|
|
$temp_game['reward'] = 0;
|
|
|
} else {
|
|
|
$temp_game['fine'] = $RewardRecordRes['fine']?$RewardRecordRes['fine']:0;
|
|
|
$temp_game['reward'] = $RewardRecordRes['reward']?$RewardRecordRes['reward']:0;
|
|
|
$handleed_data[$v['id'].$temp_game['statement_begin_time'].$temp_game['statement_end_time']]['fine'] = (string)$RewardRecordRes['fine'];
|
|
|
$handleed_data[$v['id'].$temp_game['statement_begin_time'].$temp_game['statement_end_time']]['reward'] = (string)$RewardRecordRes['reward'];
|
|
|
}
|
|
|
$temp_game['statement_type']=0;
|
|
|
|
|
|
$temp_game['relation_game_id']=$p_info["relation_game_id"];
|
|
|
$temp_game['game_name']=$p_info["game_name"];
|
|
|
$temp_game['game_type_name']=$p_info["game_type_name"];
|
|
|
$temp_game['all_pay_amount']=$p_info["all_pay_amount"];
|
|
|
|
|
|
if ($temp_game['pay_amount'] != '0') {
|
|
|
$va['game_list'][] = $temp_game;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
$v['statement_info'][] = $va;
|
|
|
}
|
|
|
}
|
|
|
$company_info = [
|
|
|
'account'=>$v['account'],
|
|
|
"company_relation_str"=>$v['company_relation_str'],
|
|
|
"company_belong_str"=>$v['company_belong_str'],
|
|
|
"company_type_str"=>$v['company_type_str'],
|
|
|
"nickname"=>$v['nickname'],
|
|
|
"payee_name"=>$v['payee_name'],
|
|
|
"bank_account"=>$v['bank_account'],
|
|
|
"opening_bank"=>$v['opening_bank'],
|
|
|
"ali_user"=>$v['ali_user'],
|
|
|
"ali_account"=>$v['ali_account']
|
|
|
];
|
|
|
if($v['platform_amount'] < 300){
|
|
|
$lackcompany =[
|
|
|
"company_id"=>$k,
|
|
|
"company_type"=>2,
|
|
|
"company_name"=>$v['partner'],
|
|
|
"company_info"=>json_encode($company_info,JSON_UNESCAPED_UNICODE),
|
|
|
"statement_money"=>$v['statement_money'],
|
|
|
"pay_amount"=>$v['pay_amount'],
|
|
|
"platform_amount"=>$v['platform_amount'],
|
|
|
"fine"=>$v['fine'],
|
|
|
"reward"=>$v['reward'],
|
|
|
"statement_begin_time"=>$begintime,
|
|
|
"statement_end_time"=>$endtime,
|
|
|
|
|
|
"statement_pool_num"=>$countdata['statement_num'],//母单
|
|
|
|
|
|
"is_payment"=>$v['is_payment'],
|
|
|
"statement_info"=>json_encode($v['statement_info'],JSON_UNESCAPED_UNICODE)
|
|
|
];
|
|
|
}
|
|
|
$is_continue = false;
|
|
|
$statement_data = $v['statement_info'];
|
|
|
foreach ($statement_data as $skey => $sval) {
|
|
|
if ($sval['game_list']) {
|
|
|
$is_continue = true;
|
|
|
}
|
|
|
// dump($sval);
|
|
|
}
|
|
|
|
|
|
if (!$is_continue) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
//无需补点不统计其他金额
|
|
|
if($type == 2 && $v['statement_money'] == 0){
|
|
|
continue ;
|
|
|
}
|
|
|
//聚合未结算数据
|
|
|
$lsres = $LackStatement->where("company_id='{$k}' and is_pool = 0")->select();
|
|
|
$del_lack_ids = [];
|
|
|
if(count($lsres) > 0){
|
|
|
//进行聚合
|
|
|
foreach($lsres as $key=>$val){
|
|
|
|
|
|
$del_lack_ids[] = $val['id'];
|
|
|
$v['statement_money'] += $val['statement_money'];
|
|
|
$v['pay_amount'] += $val['pay_amount'];
|
|
|
$v['fine'] += $val['fine'];
|
|
|
$v['reward'] += $val['reward'];
|
|
|
$v['platform_amount'] += $val['platform_amount'];
|
|
|
$t_statement_info = json_decode($val['statement_info'],true);
|
|
|
$statement_info = [];
|
|
|
foreach($t_statement_info as $p=>$info){
|
|
|
$statement_info[$info['account']] = $info['game_list'];
|
|
|
}
|
|
|
foreach($v['statement_info'] as $p=>$info){
|
|
|
if(isset($statement_info[$info['account']])){
|
|
|
$v['statement_info'][$p]['game_list'] = array_merge($statement_info[$info['account']],$v['statement_info'][$p]['game_list']);
|
|
|
unset($statement_info[$info['account']]);
|
|
|
}
|
|
|
}
|
|
|
if(!empty($statement_info)){
|
|
|
foreach($statement_info as $p=>$info){
|
|
|
$v['statement_info'][] = ["account"=>$p,"game_list"=>$info];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if($v['platform_amount'] == 0 && $v['statement_money'] == 0){
|
|
|
continue ;
|
|
|
}
|
|
|
|
|
|
if($v['platform_amount'] < 300){
|
|
|
//存未满
|
|
|
// if($lackcompany['pay_amount'] != 0){
|
|
|
$lask_id = $LackStatement->add($lackcompany);
|
|
|
$countdata['create_lack_ids'][] =$lask_id;
|
|
|
$countdata['lack_statement_money'] +=$lackcompany['statement_money'];
|
|
|
$countdata['lack_platform_amount'] +=$lackcompany['platform_amount'];
|
|
|
// }
|
|
|
|
|
|
}else{
|
|
|
// if($v['pay_amount'] != 0){
|
|
|
//存成功配置单号
|
|
|
$company =[
|
|
|
"pool_id"=>0,
|
|
|
"company_id"=>$k,
|
|
|
"company_type"=>2,
|
|
|
"company_name"=>$v['partner'],
|
|
|
"company_info"=>json_encode($company_info,JSON_UNESCAPED_UNICODE),
|
|
|
"statement_money"=>$v['statement_money'],
|
|
|
"pay_amount"=>$v['pay_amount'],
|
|
|
"platform_amount"=>$v['platform_amount'],
|
|
|
"fine"=>$v['fine'],
|
|
|
"reward"=>$v['reward'],
|
|
|
"statement_begin_time"=>$begintime,
|
|
|
"statement_end_time"=>$endtime,
|
|
|
"statement_info"=>json_encode($v['statement_info'],JSON_UNESCAPED_UNICODE),
|
|
|
"statement_num"=>"JS_".date('Ymd').date('His').$v['company_id'].sp_random_string(5)
|
|
|
];
|
|
|
if($v['is_payment'] == 1){
|
|
|
$company['verify_status'] = 0;
|
|
|
}else{
|
|
|
$company['verify_status'] = 2;
|
|
|
}
|
|
|
$companyid = $StatementInfo->add($company);
|
|
|
$countdata['info_ids'][] =$companyid;
|
|
|
$countdata['del_lack_ids'] =array_merge($countdata['del_lack_ids'],$del_lack_ids);
|
|
|
$countdata['statement_money'] +=$v['statement_money'];
|
|
|
$countdata['pay_amount'] +=$v['pay_amount'];
|
|
|
$countdata['platform_amount'] +=$v['platform_amount'];
|
|
|
$countdata['fine'] +=$v['fine'];
|
|
|
$countdata['reward'] +=$v['reward'];
|
|
|
// }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* 保存信息汇总信息
|
|
|
*/
|
|
|
public function savePromotateUserPool($data){
|
|
|
if(IS_CLI){
|
|
|
$op_name ="system";
|
|
|
}else{
|
|
|
$op_name =$_SESSION['onethink_admin']['user_auth']["username"];
|
|
|
}
|
|
|
if(empty($data['create_lack_ids']) && empty($data['del_lack_ids']) && empty($data['info_ids'])){ //补点为空不重算
|
|
|
return ;
|
|
|
}
|
|
|
if($data['statement_money'] == 0){
|
|
|
$data['verify_status'] = 5;
|
|
|
$data['verify_log'] = json_encode(["create_user"=>$op_name,"create_time"=>date("Y-m-d H:i:s"),"verify_user"=>"system","verify_time"=>date("Y-m-d H:i:s"),"payment_user"=>"system","payment_time"=>date("Y-m-d H:i:s")]);
|
|
|
}else{
|
|
|
$data['verify_log'] = json_encode(["create_user"=>$op_name,"create_time"=>date("Y-m-d H:i:s")]);
|
|
|
}
|
|
|
$data['create_lack_ids'] = implode(",",$data['create_lack_ids']);
|
|
|
$data['del_lack_ids'] = implode(",",$data['del_lack_ids']);
|
|
|
$info = implode(",",$data['info_ids']);
|
|
|
unset($data['info_ids']);
|
|
|
$id = SM("company_statement_pool","tab_")->add($data);
|
|
|
//回写
|
|
|
if(!empty($info)){
|
|
|
$save["pool_id"]=$id;
|
|
|
SM("company_statement_info","tab_")->where("id in ({$info})")->save($save);
|
|
|
}
|
|
|
if(!empty($data['del_lack_ids'])){
|
|
|
SM("company_lack_statement_info","tab_")->where("id in ({$data['del_lack_ids']})")->save(["is_pool"=>1]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取公司额为信息
|
|
|
*/
|
|
|
public function getCompanyOtherInfo($company_info,$company_id)
|
|
|
{
|
|
|
$pl = M("promote_company","tab_")
|
|
|
->alias('pc')
|
|
|
->field("p.account,p.company_relation,IFNULL(s.real_name,'-') nickname")
|
|
|
->join("left join (select company_id,account,company_relation,admin_id from tab_promote where level = 1 group by company_id ) p on p.company_id = pc.id")//获取会长
|
|
|
->join("left join sys_member s on s.uid = p.admin_id")
|
|
|
->where("pc.id = {$company_id}")
|
|
|
->find();
|
|
|
$company = array_merge($company_info,$pl);
|
|
|
$company['company_relation_str'] =getCompanyRelation($company['company_relation']);
|
|
|
$company['company_belong_str'] =getCompanyBlong($company['company_belong']);
|
|
|
$company['company_type_str'] = "个人";
|
|
|
return $company;
|
|
|
|
|
|
}
|
|
|
/**
|
|
|
* 获取游戏分类名称
|
|
|
*/
|
|
|
public function getGameTypeName($relation_game_id){
|
|
|
return M("Game","tab_")->field("game_type_name")->where("relation_game_id = '{$relation_game_id}'")->find()['game_type_name'];
|
|
|
}
|
|
|
/**
|
|
|
* 获取公司比例加成
|
|
|
* @param [type] $paymount 支付金额
|
|
|
* @param [type] $turnover_ratio 梯度
|
|
|
*/
|
|
|
protected function getCompanyRatio($paymount,$turnover_ratio)
|
|
|
{
|
|
|
$ratio = 0;
|
|
|
foreach($turnover_ratio as $k=>$v){
|
|
|
if($v['instanceof'] == 1){
|
|
|
if($paymount >= $v['turnover']){
|
|
|
$ratio = $v['ratio'];
|
|
|
}
|
|
|
}else{
|
|
|
if($paymount > $v['turnover']){
|
|
|
$ratio = $v['ratio'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return $ratio;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取游戏奖罚
|
|
|
*/
|
|
|
protected function getPromoteUserGameRewardRecord($cpmpamy_id,$begintime,$endtime)
|
|
|
{
|
|
|
|
|
|
$begintime = strtotime(str_replace('.','-',$begintime));
|
|
|
$endtime = strtotime(str_replace('.','-',$endtime))+86499;
|
|
|
|
|
|
//获取所有公司的奖罚
|
|
|
$rrmap = array(
|
|
|
"d.confirm_time" => ['between', [$begintime,$endtime]],
|
|
|
"d.company_type"=>2,
|
|
|
"d.company_id"=>$cpmpamy_id,
|
|
|
"d.settlement_type"=>2,
|
|
|
"is_verify"=>1,
|
|
|
// "relation_game_id"=>$relation_game_id,
|
|
|
);
|
|
|
|
|
|
$rfres = M("RewardDetail","tab_")
|
|
|
->alias("d")
|
|
|
->field("
|
|
|
IFNULL(SUM(CASE WHEN type = 1 THEN amount ELSE 0 END),0) as reward,
|
|
|
IFNULL(SUM(CASE WHEN type = 2 THEN amount ELSE 0 END),0) as fine")
|
|
|
->join('tab_reward_record as r on d.record_id = r.id', 'LEFT')
|
|
|
->where($rrmap)
|
|
|
->group("company_id")
|
|
|
->find();
|
|
|
|
|
|
// $rfres = M('reward_record', 'tab_')
|
|
|
// ->alias('r')
|
|
|
// ->field("
|
|
|
// IFNULL(SUM(CASE WHEN type = 1 THEN amount ELSE 0 END),0) as reward,
|
|
|
// IFNULL(SUM(CASE WHEN type = 2 THEN amount ELSE 0 END),0) as fine")
|
|
|
// ->where($rrmap)
|
|
|
// ->join('tab_reward_detail as d on d.record_id = r.id', 'LEFT')
|
|
|
// ->group("company_id")
|
|
|
// ->find();
|
|
|
// if ($relation_game_id == 191 && $cpmpamy_id == 334) {
|
|
|
// dump($rfres);
|
|
|
// }
|
|
|
|
|
|
if(empty($rfres)){
|
|
|
return false;
|
|
|
}else{
|
|
|
return $rfres;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取上游游戏奖罚
|
|
|
*/
|
|
|
protected function getPromoteUserGameRewardRecordCp($cpmpamy_id,$begintime,$endtime)
|
|
|
{
|
|
|
|
|
|
$begintime = strtotime(str_replace('.','-',$begintime));
|
|
|
$endtime = strtotime(str_replace('.','-',$endtime))+86499;
|
|
|
|
|
|
//获取所有公司的奖罚
|
|
|
$rrmap = array(
|
|
|
"d.confirm_time" => ['between', [$begintime,$endtime]],
|
|
|
"d.company_type"=>1,
|
|
|
"d.company_id"=>$cpmpamy_id,
|
|
|
"d.settlement_type"=>2,
|
|
|
"is_verify"=>1,
|
|
|
// "relation_game_id"=>$relation_game_id,
|
|
|
);
|
|
|
|
|
|
$rfres = M("RewardDetail","tab_")
|
|
|
->alias("d")
|
|
|
->field("
|
|
|
IFNULL(SUM(CASE WHEN type = 1 THEN amount ELSE 0 END),0) as reward,
|
|
|
IFNULL(SUM(CASE WHEN type = 2 THEN amount ELSE 0 END),0) as fine")
|
|
|
->join('tab_reward_record as r on d.record_id = r.id', 'LEFT')
|
|
|
->where($rrmap)
|
|
|
->group("company_id")
|
|
|
->find();
|
|
|
|
|
|
if(empty($rfres)){
|
|
|
return false;
|
|
|
}else{
|
|
|
return $rfres;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取公司奖罚
|
|
|
*/
|
|
|
protected function getPromoteUserRewardRecord($cpmpamy_id,$begintime,$endtime)
|
|
|
{
|
|
|
//获取所有公司的奖罚
|
|
|
$rrmap = array(
|
|
|
"d.confirm_time" => ['between', [$begintime,$endtime]],
|
|
|
"d.company_type"=>2,
|
|
|
"d.company_id"=>$cpmpamy_id,
|
|
|
"d.settlement_type"=>2,
|
|
|
"is_verify"=>1,
|
|
|
);
|
|
|
$rfres = M("RewardDetail","tab_")
|
|
|
->alias("d")
|
|
|
->field("
|
|
|
IFNULL(SUM(CASE WHEN type = 1 THEN amount ELSE 0 END),0) as reward,
|
|
|
IFNULL(SUM(CASE WHEN type = 2 THEN amount ELSE 0 END),0) as fine")
|
|
|
->join('tab_reward_record as r on d.record_id = r.id', 'LEFT')
|
|
|
->where($rrmap)
|
|
|
->group("company_id")
|
|
|
->find();
|
|
|
if(empty($rfres)){
|
|
|
return false;
|
|
|
}else{
|
|
|
return $rfres;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* 获取比例
|
|
|
*
|
|
|
* @param [type] $amount 总额
|
|
|
* @param [type] $ratio 默认比例
|
|
|
* @param [type] $turnover_ratio 比例梯度
|
|
|
* @return void
|
|
|
*/
|
|
|
protected function getTurnoverRatio($amount,$ratio,$turnover_ratio)
|
|
|
{
|
|
|
if(empty($turnover_ratio)){
|
|
|
return $ratio;
|
|
|
}
|
|
|
if(!is_array($turnover_ratio)){
|
|
|
$turnover_ratio = json_decode($turnover_ratio,true);
|
|
|
}
|
|
|
foreach($turnover_ratio as $k=>$v){
|
|
|
if($v['instanceof'] == 1){
|
|
|
if($amount >= $v['turnover']){
|
|
|
$ratio = $v['ratio'];
|
|
|
}
|
|
|
}else{
|
|
|
if($amount > $v['turnover']){
|
|
|
$ratio = $v['ratio'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return $ratio;
|
|
|
}
|
|
|
|
|
|
protected function getRelationGameIdSpend($company_id,$relation_game_id,$begintime,$endtime)
|
|
|
{
|
|
|
$res = [];
|
|
|
//获取推广员
|
|
|
$Promote = M("Promote","tab_");
|
|
|
$Spend = M("Spend","tab_");
|
|
|
$spenMap = [
|
|
|
"s.pay_status"=>1,
|
|
|
"s.payed_time"=>['between', [$begintime,$endtime]],
|
|
|
"s.is_check"=>1
|
|
|
];
|
|
|
|
|
|
$company_id = $company_id;
|
|
|
$pres = $Promote->field("group_concat(id) ids,count(id) count")->where("company_id = '{$company_id}'")->group("company_id")->find();
|
|
|
if($pres['count'] ==0 ){return 0;}
|
|
|
$spenMap['s.promote_id']=["in",$pres['ids']];
|
|
|
//游戏
|
|
|
|
|
|
$game_id = D("Game")->changeRelationGameidToGameid($relation_game_id);
|
|
|
// dd($game_id);
|
|
|
$spenMap['s.game_id'] =['in',$game_id];
|
|
|
D("Spend")->addSubsiteWhere($spenMap);
|
|
|
//获取支付记录
|
|
|
$pay_amount = $Spend->alias('s')->field('sum(s.pay_amount) pay_amount')->where($spenMap)->find();
|
|
|
return $pay_amount['pay_amount'] ?? 0;
|
|
|
}
|
|
|
|
|
|
protected function getRelationGameIdPromoteSpend($promote_id,$relation_game_id,$begintime,$endtime)
|
|
|
{
|
|
|
$res = [];
|
|
|
//获取推广员
|
|
|
$Promote = M("Promote","tab_");
|
|
|
$Spend = M("Spend","tab_");
|
|
|
$spenMap = [
|
|
|
"s.pay_status"=>1,
|
|
|
"s.payed_time"=>['between', [$begintime,$endtime]],
|
|
|
"s.is_check"=>1
|
|
|
];
|
|
|
D("Spend")->addSubsiteWhere($spenMap);
|
|
|
|
|
|
$Pmap = [
|
|
|
"chain"=>["LIKE","%/{$promote_id}/%"],
|
|
|
"_logic"=>"OR",
|
|
|
"id"=>$promote_id
|
|
|
];
|
|
|
$pres = $Promote->field("group_concat(id) ids,count(id) count")->where($Pmap)->group("company_id")->find();
|
|
|
if($pres['count'] ==0 ){return 0;}
|
|
|
$spenMap['s.promote_id']=["in",$pres['ids']];
|
|
|
//游戏
|
|
|
|
|
|
$game_id = D("Game")->changeRelationGameidToGameid($relation_game_id);
|
|
|
// dd($game_id);
|
|
|
$spenMap['s.game_id'] =['in',$game_id];
|
|
|
//获取支付记录
|
|
|
$pay_amount = $Spend->alias('s')->field('sum(s.pay_amount) pay_amount')->where($spenMap)->find();
|
|
|
return $pay_amount['pay_amount'] ?? 0;
|
|
|
}
|
|
|
/**
|
|
|
* 获取游戏是否有特殊比例,返回没有特殊比例的游戏
|
|
|
* return string "148,157"
|
|
|
*/
|
|
|
protected function getModuleRatioGame($company_id,$relation_game_ids,$begintime,$endtime){
|
|
|
|
|
|
$where = [
|
|
|
"relation_game_id"=>["in",$relation_game_ids],
|
|
|
"company_id"=>$company_id,
|
|
|
"_string"=>"begin_time <={$endtime} AND ( end_time = 0 OR end_time >= {$begintime})"
|
|
|
];
|
|
|
$dbres = D("CompanyGameRatio")->field("relation_game_id")->where($where)->select();
|
|
|
|
|
|
if (!$dbres) {
|
|
|
$company_belong = M("promote_company","tab_")->field("company_belong")->where(['id'=>$company_id])->find();
|
|
|
|
|
|
$where = [
|
|
|
"company_id"=>0,
|
|
|
"company_belong"=>$company_belong['company_belong'],
|
|
|
"relation_game_id"=>["in",$relation_game_ids],
|
|
|
"_string"=>"begin_time <={$endtime} AND ( end_time = 0 OR end_time >= {$begintime})"
|
|
|
];
|
|
|
$dbres = D("CompanyGameRatio")->field("relation_game_id")->where($where)->select();
|
|
|
}
|
|
|
|
|
|
if(is_string($relation_game_ids)) $relation_game_ids = explode(",",$relation_game_ids);
|
|
|
|
|
|
$array_mer = [];
|
|
|
|
|
|
foreach ($relation_game_ids as $key => $value) {
|
|
|
$turnover_type = $this->getTurnoverType($value,$company_id,$begintime,$endtime);
|
|
|
|
|
|
if ($turnover_type == 2 || $turnover_type == 3 || $turnover_type == 4) {
|
|
|
|
|
|
$mercy_game = M("game",'tab_')->field("original_package_name")->where(['relation_game_id'=>$value])->find()['original_package_name'];
|
|
|
|
|
|
$original_game_id = M("game",'tab_')
|
|
|
->field("relation_game_id")
|
|
|
->where(['original_package_name'=>$mercy_game,'relation_game_id'=>['neq',$value]])
|
|
|
->group("relation_game_id")
|
|
|
->select();
|
|
|
|
|
|
foreach ($original_game_id as $k => $v) {
|
|
|
|
|
|
if(!in_array($v['relation_game_id'], $relation_game_ids)){
|
|
|
|
|
|
$array_mer[] = $v['relation_game_id'];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
$relation_game_ids = array_merge($relation_game_ids,$array_mer);
|
|
|
|
|
|
|
|
|
if(empty($dbres)){
|
|
|
return implode(",",$relation_game_ids);
|
|
|
}else{
|
|
|
$dbres = array_column($dbres,"relation_game_id");
|
|
|
$diff = array_diff($relation_game_ids,$dbres);
|
|
|
|
|
|
return implode(",",$diff);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 识别游戏为同款游戏,共享流水分成比例
|
|
|
* return [
|
|
|
* 148 =>["148","157"],
|
|
|
* 157=>["148","157"]
|
|
|
* ]
|
|
|
*/
|
|
|
protected function getTheSameGame($relation_game_ids)
|
|
|
{
|
|
|
if(empty($relation_game_ids)) return [];
|
|
|
$where = [
|
|
|
"id"=>["in",$relation_game_ids]
|
|
|
];
|
|
|
$Gameinfo = D("Game")->field("relation_game_id,partner_id,original_package_name")->where($where)->select();
|
|
|
if(empty($Gameinfo)){
|
|
|
return [];
|
|
|
}
|
|
|
$data = [];
|
|
|
foreach ($Gameinfo as $k => $v) {
|
|
|
if(empty($v['original_package_name'])) continue;
|
|
|
if(!isset($data[$v['partner_id']])){
|
|
|
$data[$v['partner_id']] = [];
|
|
|
}
|
|
|
if(!isset($data[$v['partner_id']][$v['original_package_name']])){
|
|
|
$data[$v['partner_id']][$v['original_package_name']] = [$v['relation_game_id']];
|
|
|
}else{
|
|
|
$data[$v['partner_id']][$v['original_package_name']][] = $v['relation_game_id'];
|
|
|
}
|
|
|
}
|
|
|
$senddata = [];
|
|
|
foreach ($data as $k => $partenr) {
|
|
|
foreach($partenr as $ke => $game){
|
|
|
$gamecount = count($game);
|
|
|
if($gamecount > 1){
|
|
|
for ($i=0; $i < $gamecount; $i++) {
|
|
|
$senddata[$game[$i]] = $game;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return $senddata;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 重算接口
|
|
|
* 不进行结算方式重算
|
|
|
* @param [type] $id 原数据id
|
|
|
* @param string $admin_user 操作用户
|
|
|
* @return void bool
|
|
|
*/
|
|
|
public function updateCompanyStatementData($id,$admin_user='system')
|
|
|
{
|
|
|
//获取数据
|
|
|
$StatementDb = SM("CompanyStatement","tab_");
|
|
|
$dbres = $StatementDb->where("id='{$id}'")->find();
|
|
|
//获取时间
|
|
|
$stime = $dbres['statement_end_time']-0+1;
|
|
|
$company_id = $dbres['company_id'];
|
|
|
|
|
|
if($company_id == 0){
|
|
|
$savedata = $this->officeCompanyStatement($stime,true);
|
|
|
}else{
|
|
|
if($dbres['company_belong'] == 9){
|
|
|
//上游
|
|
|
$savedata = $this->cpStatement($dbres['withdraw_type'],$stime,$company_id);
|
|
|
}else{
|
|
|
$savedata = $this->promoteCompanyStatement($dbres['withdraw_type'],$stime,$company_id);
|
|
|
}
|
|
|
}
|
|
|
//重写用户
|
|
|
$savedata['verify_log'] = json_encode(["create_user"=>$admin_user,"create_time"=>date("Y-m-d H:i:s")]);
|
|
|
$savedata['verify_status'] = 0;
|
|
|
$savedata['confirm_status'] = 0;
|
|
|
$savedata['confirm_log'] = '';
|
|
|
$savedata['id'] = $dbres['id'];
|
|
|
return $StatementDb->save($savedata);
|
|
|
}
|
|
|
|
|
|
}
|