|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace Admin\Controller;
|
|
|
|
|
use Think\Controller;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 聚合渠道结算接口对接
|
|
|
|
|
* @author cz
|
|
|
|
|
*/
|
|
|
|
|
class CompanyStatementSetController extends Controller {
|
|
|
|
|
public $cpapihost;
|
|
|
|
|
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'];
|
|
|
|
|
}
|
|
|
|
|
public function setFreeDateCount($begin,$end='')
|
|
|
|
|
{
|
|
|
|
|
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]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public function setDailyCount($stime="now")
|
|
|
|
|
{
|
|
|
|
|
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){
|
|
|
|
|
echo $nowdate.":".PHP_EOL;
|
|
|
|
|
echo "--周结begin".PHP_EOL;
|
|
|
|
|
$this->cpStatement(0,$stime);
|
|
|
|
|
}
|
|
|
|
|
if($d == 1){
|
|
|
|
|
echo $nowdate.":".PHP_EOL;
|
|
|
|
|
echo "--月结&补点begin".PHP_EOL;
|
|
|
|
|
$this->cpStatement(1,$stime);
|
|
|
|
|
// $this->cpStatement(2,$stime);
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
echo $nowdate."非周一和月初,无需任何处理".PHP_EOL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* TODO:以下为上下游结算
|
|
|
|
|
* 上游结算
|
|
|
|
|
* @param [string] $type 0:周结 1:月结 2:周结补点
|
|
|
|
|
*/
|
|
|
|
|
public function cpStatement($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;//上个月的月末时间戳
|
|
|
|
|
}
|
|
|
|
|
//获取哪些要结算
|
|
|
|
|
if($type == 1){
|
|
|
|
|
$cpDbRes = M("CompanyRelation","tab_")->where("settlement_type = 2 AND (first_company_type = '1' OR second_company_type = '1')")->select();
|
|
|
|
|
}else{
|
|
|
|
|
$cpDbRes = M("CompanyRelation","tab_")->where("settlement_type = 1 AND (first_company_type = '1' OR second_company_type = '1')")->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'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
$cp_id = implode(",",array_flip(array_flip(array_keys($cpList))));
|
|
|
|
|
$js_id = implode(",",array_unique($js_id));
|
|
|
|
|
//获取cp公司
|
|
|
|
|
$tmpp = M("Partner","tab_")->field("id,partner,link_man,link_phone,address,company_tax_no,payee_name,bank_account,opening_bank")->where(["id"=>['in',$cp_id]])->select();
|
|
|
|
|
$cp =[];
|
|
|
|
|
foreach ($tmpp as $v) {
|
|
|
|
|
$cp[$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);
|
|
|
|
|
//获取本地数据
|
|
|
|
|
$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);
|
|
|
|
|
$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] = ["pay_money"=>$va['pay_money']];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
$cpList[$k]["list"] = $v["list"];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//比例计算及保存
|
|
|
|
|
// TODO:此处不判断现游戏名=原包名,但却不是同一款游戏
|
|
|
|
|
$verify_log=json_encode(["create_user"=>$_SESSION['onethink_admin']['user_auth']["username"],"create_time"=>date("Y-m-d H:i:s")]);
|
|
|
|
|
$GameDb = M("Game","tab_");
|
|
|
|
|
$statement_begin_time = date("Y-m-d",$begintime);
|
|
|
|
|
$statement_end_time = date("Y-m-d",$endtime);
|
|
|
|
|
foreach($cpList as $k=>$v){
|
|
|
|
|
$add_data=[];
|
|
|
|
|
|
|
|
|
|
//1.获取甲乙方信息
|
|
|
|
|
if($v['first_company_type'] == 1){
|
|
|
|
|
//甲方上游
|
|
|
|
|
$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{
|
|
|
|
|
//乙方上游
|
|
|
|
|
$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();
|
|
|
|
|
foreach($v['list'] as $ke=>$va){
|
|
|
|
|
$game =[];
|
|
|
|
|
$game['pay_amount'] =$va['pay_money'];
|
|
|
|
|
//获取游戏id及比例
|
|
|
|
|
$game_id = $GameDb->where("game_name='{$ke}' OR relation_game_name='{$ke}'")->field("id")->find();
|
|
|
|
|
if(empty($game_id)){
|
|
|
|
|
$game['id']=0;
|
|
|
|
|
// $game['sum_money']=0;
|
|
|
|
|
$tratio = 0;
|
|
|
|
|
}else{
|
|
|
|
|
//获取比例
|
|
|
|
|
$game['id']=$game_id['id'];
|
|
|
|
|
if($type > 0){
|
|
|
|
|
$tratio = getGameCpRadio($game_id['id'],$va['pay_money'],true);
|
|
|
|
|
}else{
|
|
|
|
|
$tratio = getGameCpRadio($game_id['id'],$va['pay_money'],false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if($v['first_company_type'] == 1){
|
|
|
|
|
$game['first_ratio']=$tratio;
|
|
|
|
|
$game['second_ratio']=100-$tratio;
|
|
|
|
|
}else{
|
|
|
|
|
$game['first_ratio']=100-$tratio;
|
|
|
|
|
$game['second_ratio']=$tratio;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$game['sum_money']=round($va['pay_money']*$tratio/100,2);
|
|
|
|
|
|
|
|
|
|
$game['fax_ratio']=0;
|
|
|
|
|
$game['promote_ratio']=0;
|
|
|
|
|
$game['statement_begin_time']=$statement_begin_time;
|
|
|
|
|
$game['statement_end_time']=$statement_end_time;
|
|
|
|
|
$game['statement_type']=0;
|
|
|
|
|
dump($game);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dd($v['list']);
|
|
|
|
|
dd($v);
|
|
|
|
|
//获取游戏比例
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# code...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取本地上游结算
|
|
|
|
|
*/
|
|
|
|
|
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")->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,
|
|
|
|
|
"payed_time"=>["BETWEEN",[$begintime,$endtime]],
|
|
|
|
|
"game_id"=>["in",$gmstr]
|
|
|
|
|
];
|
|
|
|
|
$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{
|
|
|
|
|
$game_name = $v['original_package_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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|