'num', 'B'=>'company_name', 'C'=>'account', 'D'=>'company_belong_str', 'E'=>'company_relation_str', 'F'=>'nickname', 'G'=>'company_type', 'H'=>'game_name', 'I'=>'game_type_name', 'J'=>'time', 'K'=>'platform_amount', 'L'=>'refund', 'M'=>'ratio', 'N'=>'increment_ratio', 'O'=>'sum_money', 'P'=>'reward', 'Q'=>'fine', 'R'=>'withhold', 'S'=>'week_amount', 'T'=>'sum_money_s', 'U'=>'payee_name', 'V'=>'bank_account', 'W'=>'opening_bank', 'X'=>'is_payment', 'Y'=>'is_pay', 'Z'=>'remark' ]; header("Content-type: text/html; charset=utf-8"); error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '
'); date_default_timezone_set('Asia/Shanghai'); Vendor("PHPExcel.PHPExcel"); $objPHPExcel = new \PHPExcel(); $objReader = \PHPExcel_IOFactory::createReader('Excel2007'); //设置模板文件 $objPHPExcel = $objReader->load("Public/Admin/excel/set_info.xls"); $objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel); $currentSheet = $objPHPExcel->getSheet(0); //读取excel文件中的第一个工作表 $allColumn = 90; //取得最大的列号 $allRow = $currentSheet->getHighestRow(); //取得一共有多少行 $excelResult = []; //声明数组 // dump($allColumn);die(); $startRow = 3; for ($j = $startRow; $j <= $allRow; $j++) { //从A列读取数据 for ($k = 65; $k <= $allColumn; $k++) { // 读取单元格 $excelResult[$j][$arrkey[chr($k)]] = (string)$objPHPExcel->getActiveSheet()->getCell(chr($k)."$j")->getValue(); } } $handle_data = []; $pool_data = []; // dump($excelResult); foreach ($excelResult as $key => $value) { $is_continue = 0; $company_info = M("promote_company","tab_")->field("id company_id,company_type,bank_card,bank_cardname,bank_name,bank_address,ali_user,ali_account")->where(['company_name'=>$value['company_name']])->find(); if(!$company_info) { continue; } $lack_data = M("company_lack_statement_info","tab_") ->where([ 'company_id'=>$company_info['company_id'] ]) ->select(); $time = explode('-',$value['time']); $game_data = M("game","tab_")->where(['relation_game_name'=>$value['game_name']])->find(); foreach ($lack_data as $lkey => $lvalue) { $statement_info = json_decode($lvalue['statement_info'],true); // dump($statement_info); foreach ($statement_info as $skey => $svalue) { $game_list = $svalue['game_list']; foreach ($game_list as $gkey => $gvalue) { // if($company_info['company_id'] == 73&&$gvalue['pay_amount']=='12.00' ) { // dump($svalue); // dump($gvalue['statement_begin_time'] == $time['0']); // dump($gvalue['statement_end_time'] == $time['1']); // dump($gvalue['relation_game_id'] == $game_data['relation_game_id']); // dump($gvalue['pay_amount'] == number_format($value['platform_amount'],2,'.','')); // } //存在的游戏流水内部条件,如果存在不进行下列操作 if ($gvalue['statement_begin_time'] == $time['0'] &&$gvalue['statement_end_time'] == $time['1'] &&$gvalue['relation_game_id'] == $game_data['relation_game_id'] &&$gvalue['pay_amount'] == number_format($value['platform_amount'],2,'.','')) { $is_continue = 1; } } } } //已经存在的单子结算 if ($is_continue) { continue; } $handle_data[$value['time'].$company_info['company_id']]['company_id'] = $company_info['company_id']; $handle_data[$value['time'].$company_info['company_id']]['company_type'] = $company_info['company_type']; $handle_data[$value['time'].$company_info['company_id']]['company_name'] = $value['company_name']; $companyInfo = [ 'account'=>$value['account'], 'company_relation_str'=>$value['company_relation_str'], 'company_belong_str'=>$value['company_belong_str'], 'company_type_str'=>$value['company_type'], 'nickname'=>'nickname', ]; $relation = M("company_relation","tab_") ->where("(first_company_id = {$company_info['company_id']} and first_company_type!=3) or (second_company_id = {$company_info['company_id']} and second_company_type!=3)") ->find(); if ($relation['is_payment'] == 1) { $companyInfo['ali_user'] = $company_info['ali_user']; $companyInfo['ali_account'] = $company_info['ali_account']; } else { $companyInfo['payee_name'] = $company_info['bank_address']; $companyInfo['bank_account'] = $company_info['bank_card']; $companyInfo['opening_bank'] = $company_info['bank_name']; } $handle_data[$value['time'].$company_info['company_id']]['statement_money'] += $value['sum_money']-$value['fine']+$value['reward']-$value['withhold']; $handle_data[$value['time'].$company_info['company_id']]['pay_amount'] += $value['sum_money']-$value['fine']+$value['reward']-$value['withhold']; $handle_data[$value['time'].$company_info['company_id']]['company_info'] = json_encode($companyInfo); $handle_data[$value['time'].$company_info['company_id']]['platform_amount'] += $value['platform_amount']; $handle_data[$value['time'].$company_info['company_id']]['fine'] += $value['fine']; $handle_data[$value['time'].$company_info['company_id']]['reward'] += $value['reward']; $handle_data[$value['time'].$company_info['company_id']]['statement_begin_time'] = strtotime(str_replace('.','-',$time['0'])); $handle_data[$value['time'].$company_info['company_id']]['statement_end_time'] = strtotime(str_replace('.','-',$time['1']))+86399; $p_id = M("promote","tab_")->field("id")->where(['account'=>$value['account']])->find(); if ($handle_data[$value['time'].$company_info['company_id']]['statement_info']) { $handle_data[$value['time'].$company_info['company_id']]['statement_info'][0]['game_list'][] = [ 'pay_amount'=>$value['platform_amount'], 'relation_game_id'=>$game_data['relation_game_id'], 'game_name'=>$game_data['relation_game_name'], 'p_id'=>$p_id['id'], 'all_pay_amount'=>$value['platform_amount'], 'game_type_name'=>$game_data['game_type_name'], 'ratio'=>$value['ratio']*100, 'sum_money'=>number_format($value['sum_money'],2,'.',''), 'fax_ratio'=>0, 'statement_begin_time'=>$time['0'], 'statement_end_time'=>$time['1'], 'fine'=>$value['fine'], 'reward'=>$value['reward'], 'statement_type'=>0, 'refund'=>$value['refund'], 'withhold'=>$value['withhold'], 'increment_ratio'=>$value['increment_ratio']*100 ]; } else { $handle_data[$value['time'].$company_info['company_id']]['statement_info'][] = [ "account"=>$value['account'], "game_list"=>[ [ 'pay_amount'=>$value['platform_amount'], 'relation_game_id'=>$game_data['relation_game_id'], 'game_name'=>$game_data['relation_game_name'], 'p_id'=>$p_id['id'], 'all_pay_amount'=>$value['platform_amount'], 'game_type_name'=>$game_data['game_type_name'], 'ratio'=>$value['ratio']*100, 'sum_money'=>number_format($value['sum_money'],2,'.',''), 'fax_ratio'=>0, 'statement_begin_time'=>$time['0'], 'statement_end_time'=>$time['1'], 'fine'=>$value['fine'], 'reward'=>$value['reward'], 'statement_type'=>0, 'refund'=>$value['refund'], 'withhold'=>$value['withhold'], 'increment_ratio'=>$value['increment_ratio']*100 ] ] ]; } // $handle_data[$value['time'].$company_info['company_id']]['statement_info'] = $statement_info; // del_lack_ids $company_statement_pool = M("company_statement_pool","tab_") ->field("statement_num,del_lack_ids") ->where([ 'statement_begin_time'=>$handle_data[$value['time'].$company_info['company_id']]['statement_begin_time'], 'statement_end_time'=>$handle_data[$value['time'].$company_info['company_id']]['statement_end_time'], 'company_type'=>2, 'withdraw_type'=>['neq',3] ]) ->find(); $handle_data[$value['time'].$company_info['company_id']]['statement_pool_num'] = $company_statement_pool['statement_num']?$company_statement_pool['statement_num']:""; $handle_data[$value['time'].$company_info['company_id']]['is_payment'] = $relation['is_payment']; $handle_data[$value['time'].$company_info['company_id']]['remark'] = $company_statement_pool['remark']; } $handle_data = array_values($handle_data); // dump($handle_data); foreach ($handle_data as $key => $value) { $value['statement_info'] = json_encode($value['statement_info']); $lack_id = M("company_lack_statement_info","tab_")->add($value); $pool_data[$value['statement_pool_num']]['del_lack_ids'][] = $lack_id; } $lack_data324 = M("company_lack_statement_info","tab_") ->where([ 'id'=>324 ]) ->find(); $lack_data324['fine'] = 5000; $lack_data324['statement_money'] = $lack_data324['statement_money']-5000; $lack_data324['pay_amount'] = $lack_data324['pay_amount']-5000; $statement_info324 = json_decode($lack_data324['statement_info'],true); $statement_info324[0]['game_list'][0]['fine'] = 5000; $lack_data324['statement_info'] = json_encode($statement_info324); M("company_lack_statement_info","tab_") ->where([ 'id'=>324 ])->save($lack_data324); $lack_data334 = M("company_lack_statement_info","tab_") ->where([ 'id'=>334 ]) ->find(); $lack_data334['fine'] = 2000; $lack_data334['statement_money'] = $lack_data334['statement_money']-2000; $lack_data334['pay_amount'] = $lack_data334['pay_amount']-2000; $statement_info334 = json_decode($lack_data334['statement_info'],true); $statement_info334[0]['game_list'][0]['fine'] = 2000; $lack_data334['statement_info'] = json_encode($statement_info334); M("company_lack_statement_info","tab_") ->where([ 'id'=>334 ])->save($lack_data334); echo "success"; // foreach ($pool_data as $key => $value) { // // $pool_info = M("company_statement_pool","tab_") // ->where(['statement_num'=>$key]) // ->find(); // // $del_lack_ids = $pool_info['del_lack_ids'].','.implode(',',$value['del_lack_ids']); // M("company_statement_pool","tab_") // ->where(['statement_num'=>$key]) // ->save(['del_lack_ids'=>$del_lack_ids]); // // } // M("company_lack_statement_info","tab_")->addAll($handle_data); // dump($handle_data); } public function updateStatementInfo() { $data = M("company_statement_info","tab_") ->where(['pay_status'=>['neq',0]]) ->select(); foreach ($data as $key => $value) { M("company_statement_info","tab_") ->where(['id'=>$value['id']]) ->save([ 'pay_verify_status'=>1, 'verify_time'=>$value['pay_time'], 'verify_member_id'=>1 ]); } $data = M("excel_statement_info","tab_") ->where("1=1") ->select(); foreach ($data as $key => $value) { $statement_info = json_decode($value['statement_info'],true); $time = explode('-',$statement_info[0]['game_list'][0]['statement_time']); $start = strtotime(str_replace('.','-',$time[0])); $end = strtotime(str_replace('.','-',$time[1])); M("excel_statement_info","tab_") ->where(['id'=>$value['id']]) ->save([ 'statement_begin_time'=>$start, 'statement_end_time'=>$end ]); // dump($statement_info); } $data = M("excel_statement_info","tab_") ->where(['pay_status'=>['neq',0]]) ->select(); foreach ($data as $key => $value) { M("excel_statement_info","tab_") ->where(['id'=>$value['id']]) ->save([ 'verify_status'=>1, 'verify_time'=>$value['pay_time'], 'verify_member_id'=>1 ]); } echo "success"; } public function oldRewardChange() { $data = M("company_lack_statement_info","tab_") ->where("(fine > 0 or reward > 0) and company_type = 2") ->select(); foreach ($data as $key => $value) { $statement_info = json_decode($value['statement_info'],true); $statement_info[0]['game_list'][0]['fine'] = $value['fine']; $statement_info[0]['game_list'][0]['reward'] = $value['reward']; $statement_info = json_encode($statement_info); M("company_lack_statement_info","tab_")->where(['id'=>$value['id']])->save(['statement_info'=>$statement_info]); } echo "success"; } public function changeCompanyGameidToPromoteGameid() { //默认设为 $Promote = M("Promote","tab_"); $PromoteCompany = M("promote_company","tab_"); $p_res = $PromoteCompany->field("id,game_ids")->select(); foreach ($p_res as $k => $v) { if(!empty($v['game_ids'])){ $savedata['game_ids'] = $this->changeRelationGameidToGameid($v['game_ids']); $Promote->where(["company_id"=>$v['id']])->save($savedata); } } echo "changeCompanyGameidToPromoteGameid success"; } public function changeDevelopTypeData() { $is_save = M("promote","tab_")->where(['company_relation'=>2])->save(['company_relation'=>1]); $is_save = M("promote_company","tab_")->where(['develop_type'=>2])->save(['develop_type'=>1]); //更新tab_company_statement_info表的数据 $company_statement = M("company_statement_info","tab_")->field("id,company_info")->where(['company_info'=>['like',"%自主开发及维护%"]])->select(); foreach ($company_statement as $key => $value) { $replace_statement = str_replace('自主开发及维护','自主开发',$value['company_info']); M("company_statement_info","tab_")->where(['id'=>$value['id']])->save(['company_info'=>$replace_statement]); } //更新tab_company_lack_statement_info表的数据 $company_statement = M("company_lack_statement_info","tab_")->field("id,company_info")->where(['company_info'=>['like',"%自主开发及维护%"]])->select(); foreach ($company_statement as $key => $value) { $replace_statement = str_replace('自主开发及维护','自主开发',$value['company_info']); M("company_lack_statement_info","tab_")->where(['id'=>$value['id']])->save(['company_info'=>$replace_statement]); } echo "success\n"; } /** * 公会关系及游戏迁移 * 1. 迁移 公会company_relation到公司 * 2. 游戏 game_ids * 3. 同步公司develop_type到公会 */ public function changeOldCompanyRelation() { //默认设为 $Promote = M("Promote","tab_"); $PromoteCompany = M("promote_company","tab_"); $p_res = $Promote->field("id,account,game_ids,company_relation,company_id")->where("level = 1")->group("company_id")->select(); foreach ($p_res as $k => $v) { if($v['id'] < 1) continue; $savedata =[ "id"=>$v['company_id'] ]; if($v['company_relation'] == 1){ $savedata['develop_type'] = 3; }else{ $savedata['develop_type'] = 2; } $savedata['game_ids'] = $this->changeGameidToRelationGameid($v['game_ids']); $PromoteCompany->save($savedata); $p_data = [ "company_relation"=>$savedata['develop_type'] ]; $Promote->where("company_id = {$v['company_id']}")->save($p_data); } echo "changeOldCompanyRelation success"; } protected function changeGameidToRelationGameid($ids,$type=false) { $rid = M('game', 'tab_')->field('relation_game_id')->where(["id"=>["in",$ids]])->group("relation_game_id")->select(); if($type){ return array_column($rid,'relation_game_id'); }else{ return implode(",",array_column($rid,'relation_game_id')); } } protected function changeRelationGameidToGameid($ids,$type=false) { $rid = M('game', 'tab_')->field('id')->where(["relation_game_id"=>["in",$ids]])->select(); if($type){ return array_column($rid,'id'); }else{ return implode(",",array_column($rid,'id')); } } /** * 优化旧表数值,新表需要将 开票税点及渠道费 * 100 */ public function ChangePartnerField_ChannelRateInvoiceRate() { if(time() > 1596211200){ die("该函数已失效"); } $Partner = M("Partner","tab_"); $dbres = $Partner->field("id,channel_rate,invoice_rate")->select(); foreach ($dbres as $k => &$v) { $v['channel_rate'] = $v['channel_rate']*100; $v['invoice_rate'] = $v['invoice_rate']*100; $Partner->save($v); } echo "ChangePartnerField_ChannelRateInvoiceRate success"; } /** * 新的游戏比例后的数据迁移 * 重复执行将会叠加数据,请勿重复执行 */ public function PromoteToCompanyRatioInit() { //获取旧数据 $oldres = M("promote_game_ratio","tab_")->field("promote_id,relation_game_id,ratio,turnover_ratio,begin_time,end_time")->group("promote_id,relation_game_id")->select(); $adddata = []; $CompanyGameRatio = M("company_game_ratio","tab_"); foreach ($oldres as $k => &$v) { $comoany_id = $this->promoteIdToCompanyId($v['promote_id']); unset($v['promote_id']); $v['company_id'] = $comoany_id ; $adddata[$comoany_id] = $v; } foreach($adddata as $k => &$v){ $map = [ "company_id"=>$v['company_id'], "relation_game_id"=>$v['relation_game_id'] ]; $cres = $CompanyGameRatio->where($map)->find(); if(empty($cres)){ $CompanyGameRatio->add($v); } } echo "PromoteToCompanyRatioInit success"; } protected function promoteIdToCompanyId($promote_id) { return M("promote","tab_")->field("company_id")->where("id='{$promote_id}'")->find()['company_id']; } /** * 财务分类汇总统计旧数据聚合 */ public function FinancialSummaryInit() { $sql = "truncate table tab_financial_summary"; if(IS_SUBSITE){ $res =M()->db(1,SUBSITE_DB)->execute($sql); }else { //清空数据库 $res = M()->execute($sql); } echo "tab_financial_summary 清空成功".PHP_EOL; //获取19年9月到上个月的所有月份 $monthList = $this->getMonthsList(); $Financial = new FinancialSummarySetController(); foreach ($monthList as $k => $v) { $Financial->setMonthFinancialSummary($v); } } /* *超级签订单新增识别微信或者支付宝2019-12-11 */ public function gameSupersignPaywayInit() { $map = array( "pay_status"=>1, "pay_way"=>0 ); $GameSupersign = M("GameSupersign","tab_"); $dbres = $GameSupersign->field("id,trade_id")->where($map)->select(); $countdb = count($dbres); if($countdb < 1){ die("No initialization required"); } foreach ($dbres as $key => $value) { $savedata = array( "id"=>$value['id'] ); $tmp = (int)substr($value['trade_id'],0,4); if($tmp > 3000){ $savedata['pay_way'] = 2; //微信 }else{ $savedata['pay_way'] = 1;//支付宝 } $tres = $GameSupersign->save($savedata); if($tres === false){ die("DB ERROR"); } } die("init ok"); } /** * mend表新增paymount字段用于统计补链前归属金额 */ public function mendPayamountInit() { //获取符合条件的 $map = array("pay_amount"=>0); $Mend = M("mend","tab_"); $Spend = M("Spend","tab_"); $Mend->where($map)->select(); $dbres = $Mend->field("id,user_account,promote_account,order_time,create_time")->where($map)->select(); $countdb = count($dbres); if($countdb < 1) die("No initialization required"); echo "总需要统计数:{$countdb}".PHP_EOL; foreach ($dbres as $key => $value) { $savedata = array("id"=>$value['id']); $saveflag = false; //设置订单时间 $order_time = $value['order_time']; if($value['order_time'] == 0){ $saveflag = true; $savedata['order_time'] = $value['create_time']; $order_time = $savedata['create_time']; } //获取金额 $smap = array( "user_account"=>$value['user_account'], "promote_account"=>$value['promote_account'], "pay_time"=>array("LT",$order_time), "pay_status"=>1 ); $pay_amount = $Spend->field("IFNULL(sum(pay_amount),0) pay_amount")->where($smap)->find()["pay_amount"]; if($pay_amount > 0){ $saveflag = true; $savedata['pay_amount'] = $pay_amount; } if($saveflag){ $tres = $Mend->save($savedata); if($tres === false){ die("DB ERROR"); } } if( $key % 20 == 0){ $j = (floor)($key/$countdb*100); echo "当前进度:{$j}%".PHP_EOL; } } die("init ok"); } /** * 修改公会内外团关系跟随公司 旧数据跟随 20200318 */ public function promoteCompanyBelongInit() { //获取所有公司 $comoany = M("PromoteCompany","tab_")->field("id,company_belong,develop_type")->select(); $comoany[] = ["id"=>0,"company_belong"=>0,"develop_type"=>0]; //海南万盟 $count = count($comoany); $promote = M("Promote","tab_"); for ($i=0; $i < $count; $i++) { $savedata = array( "company_belong"=>$comoany[$i]['company_belong'], "company_relation"=>$comoany[$i]['develop_type'], ); $tmpid = $comoany[$i]['id']; $promote->where("company_id ='{$tmpid}'")->save($savedata); } die("promoteCompanyBelongInit success"); } //获取公司月结所需要的所有月份截止至上个月 public function getMonthsList() { $start_month = "2019-09"; $temp = strtotime(date('Y-m-01 00:00:00',strtotime('-1 month'))); $end_month = date('Y',$temp)."-".date('m',$temp); $time_arr = []; $begin = new \DateTime($start_month); $end = new \DateTime($end_month); $end = $end->modify('+1 month'); $interval = new \DateInterval('P1M'); $daterange = new \DatePeriod($begin, $interval ,$end); foreach($daterange as $date){ $time_arr[] = $date->format("Y-m"); } return $time_arr; } }