From f211fe6fa703877f51758446b8ad45812ab30ff2 Mon Sep 17 00:00:00 2001 From: chenzhi Date: Thu, 27 May 2021 16:21:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=B9=E9=87=8F=E5=AF=BC?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controller/GameMarginController.class.php | 245 +++++++++++++++++- Application/Admin/View/GameMargin/lists.html | 16 ++ Public/Admin/excel/gamemargin.xlsx | Bin 12059 -> 12040 bytes 3 files changed, 248 insertions(+), 13 deletions(-) diff --git a/Application/Admin/Controller/GameMarginController.class.php b/Application/Admin/Controller/GameMarginController.class.php index 22077c380..b4fb909da 100644 --- a/Application/Admin/Controller/GameMarginController.class.php +++ b/Application/Admin/Controller/GameMarginController.class.php @@ -60,23 +60,26 @@ class GameMarginController extends AdminController "id"=>["in",$ids] ]; $info = $this->DBModel->where($where)->order("count_year asc,count_month asc")->select(); - $data = ["list"=>[]]; - if($info){ - foreach ($info as $k => $v) { - $tmp = []; - list($marginInfo,$count) = $this->marginCount($v); - $tmp["marginInfo"] = $marginInfo; - $tmp["count"] = $count; - $data["list"][] = $tmp; + + if (isset($_REQUEST['export']) && $_REQUEST['export']==1){ + $this->moreMarginExport($info); + }else{ + $data = ["list"=>[]]; + if($info){ + foreach ($info as $k => $v) { + $tmp = []; + list($marginInfo,$count) = $this->marginCount($v); + $tmp["marginInfo"] = $marginInfo; + $tmp["count"] = $count; + $data["list"][] = $tmp; + } + $data["count"] = $this->marginMoreCount(array_column($data["list"],"count")); } - //全部统计 - $data["count"] = $this->marginMoreCount(array_column($data["list"],"count")); + $this->assign("data",$data); + $this->display("marginView"); } - $this->assign("data",$data); - $this->display("marginView"); } - private function marginCount($info) { $marginInfo = json_decode($info['margin_info'],true); @@ -165,6 +168,221 @@ class GameMarginController extends AdminController $this->sprintfCell($count); return $count; } + private function moreMarginExport($info) + { + $line = 3; + $excelData = []; + $countLineArr = []; + foreach ($info as $index => $date) { + $marginInfo = json_decode($date['margin_info'],true); + foreach ($marginInfo as $v) { + // $v["cp_ratio"] = "=ROUND(G{$line}/D{$line},4)"; + + if($v["pc_pay_amount"] > 0){ + $v["pc_ratio"] ="=ROUND(M{$line}/K{$line},2)"; + $v["pc_margin_amount"] = "=ROUND((K{$line}*(1-E{$line})*(1-F{$line}-H{$line}-L{$line})),2)"; + $v["pc_margin_ratio"] ="=ROUND(N{$line}/K{$line},3)"; + } + if ($v["pu_pay_amount"] > 0) { + $v["pu_ratio"] ="=ROUND(R{$line}/P{$line},2)"; + $v["pu_margin_amount"] = "=ROUND((P{$line}-P{$line}*(1-E{$line})*(F{$line}+H{$line})-R{$line}),2)"; + $v["pu_margin_ratio"] = "=ROUND(S{$line}/P{$line},3)"; + } + $v['platform_margin_ratio'] = "=ROUND((D{$line}-V{$line}-G{$line}-I{$line}-J{$line}-M{$line}-R{$line})/(D{$line}-V{$line}),3)"; + + if($v['jh_pay_amount'] > 0){ + $v["jh_ratio"] ="=ROUND(X{$line}/V{$line},2)"; + $v["jh_margin_amount"] = "=ROUND((X{$line}-V{$line}*(1-E{$line})*(F{$line}+H{$line})),2)"; + $v["jh_margin_ratio"] = "=ROUND(Y{$line}/V{$line},3)"; + } + + $v['margin_amount'] = "=ROUND((D{$line}-G{$line}-I{$line}-J{$line}-M{$line}-R{$line}+X{$line}),2)"; + $v['margin_ratio'] = "=ROUND(AB{$line}/D{$line},3)"; + $v['count_year'] = $date['count_year']; + $v['count_month'] = $date['count_month']; + $v['cp_promote_ratio'] = $v['cp_promote_ratio']/100; + $v['cp_ratio'] = $v['cp_ratio']/100; + $v['cp_rebate_ratio'] = $v['cp_rebate_ratio']/100; + $excelData[] = $v; + $line ++; + } + $countLineArr[] = $line; + //计算统计 + $countLine = $line; + $line--; + $excelData[] = [ + "count_year" => $date['count_year'], + 'count_month' => $date['count_month'], + 'relation_game_name'=>"小计", + "pay_amount"=>"=SUM(D3:D{$line})", + + "cp_statement_amount"=>"=SUM(G3:G{$line})", + "cp_rebate_amount"=>"=SUM(I3:I{$line})", + "cp_other_amount"=>"=SUM(J3:J{$line})", + + "pc_pay_amount"=>"=SUM(K3:K{$line})", + "pc_ratio"=>"=ROUND(M{$countLine}/K{$countLine},4)", + "pc_statement_amount"=>"=SUM(M3:M{$line})", + "pc_margin_amount"=>"=SUM(N3:N{$line})", + "pc_margin_ratio"=>"=ROUND(N{$countLine}/K{$countLine},4)", + + "pu_pay_amount"=>"=SUM(P3:P{$line})", + "pu_statement_amount"=>"=SUM(R3:R{$line})", + "pu_ratio"=>"=ROUND(R{$countLine}/P{$countLine},4)", + "pu_margin_amount"=>"=SUM(S3:S{$line})", + "pu_margin_ratio"=>"=ROUND(S{$countLine}/P{$countLine},4)", + + "platform_margin_ratio"=>"=ROUND((D{$countLine}-V{$countLine}-G{$countLine}-I{$countLine}-J{$countLine}-M{$countLine}-R{$countLine})/(D{$countLine}-V{$countLine}),4)", + + "jh_pay_amount"=>"=SUM(V3:V{$line})", + "jh_statement_amount"=>"=SUM(X3:X{$line})", + "jh_ratio"=>"=ROUND(X{$countLine}/V{$countLine},4)", + "jh_margin_amount"=>"=SUM(Y3:Y{$line})", + "jh_margin_ratio"=>"=ROUND(Y{$countLine}/V{$countLine},4)", + "margin_ratio"=>"=ROUND(AB{$countLine}/D{$countLine},4)", + "margin_amount"=>"=SUM(AB3:AB{$line})", + + ]; + $line += 2; + } + $countLine = $line; + $line--; + //设置总计 + $allCountData = [ + "count_year" => "总计", + "pay_amount"=>"=SUM(", + + "cp_statement_amount"=>"=SUM(", + "cp_rebate_amount"=>"=SUM(", + "cp_other_amount"=>"=SUM(", + + "pc_pay_amount"=>"=SUM(", + "pc_ratio"=>"=ROUND(M{$countLine}/K{$countLine},4)", + "pc_statement_amount"=>"=SUM(", + "pc_margin_amount"=>"=SUM(", + "pc_margin_ratio"=>"=ROUND(N{$countLine}/K{$countLine},4)", + + "pu_pay_amount"=>"=SUM(", + "pu_statement_amount"=>"=SUM(", + "pu_ratio"=>"=ROUND(R{$countLine}/P{$countLine},4)", + "pu_margin_amount"=>"=SUM(", + "pu_margin_ratio"=>"=ROUND(S{$countLine}/P{$countLine},4)", + + "platform_margin_ratio"=>"=ROUND((D{$countLine}-V{$countLine}-G{$countLine}-I{$countLine}-J{$countLine}-M{$countLine}-R{$countLine})/(D{$countLine}-V{$countLine}),4)", + + "jh_pay_amount"=>"=SUM(", + "jh_statement_amount"=>"=SUM(", + "jh_ratio"=>"=ROUND(X{$countLine}/V{$countLine},4)", + "jh_margin_amount"=>"=SUM(", + "jh_margin_ratio"=>"=ROUND(Y{$countLine}/V{$countLine},4)", + "margin_ratio"=>"=ROUND(AB{$countLine}/D{$countLine},4)", + "margin_amount"=>"=SUM(", + + ]; + for ($i=0; $i < count($countLineArr); $i++) { + $allCountData['pay_amount'] .= ("D". $countLineArr[$i].","); + $allCountData['cp_statement_amount'] .= ("G". $countLineArr[$i].","); + $allCountData['cp_rebate_amount'] .= ("I". $countLineArr[$i].","); + $allCountData['cp_other_amount'] .= ("J". $countLineArr[$i].","); + + $allCountData['pc_pay_amount'] .= ("K". $countLineArr[$i].","); + $allCountData['pc_statement_amount'] .= ("M". $countLineArr[$i].","); + $allCountData['pc_margin_amount'] .= ("N". $countLineArr[$i].","); + + $allCountData['pu_pay_amount'] .= ("P". $countLineArr[$i].","); + $allCountData['pu_statement_amount'] .= ("R". $countLineArr[$i].","); + $allCountData['pu_margin_amount'] .= ("S". $countLineArr[$i].","); + + $allCountData['jh_pay_amount'] .= ("V". $countLineArr[$i].","); + $allCountData['jh_statement_amount'] .= ("X". $countLineArr[$i].","); + $allCountData['jh_margin_amount'] .= ("Y". $countLineArr[$i].","); + + $allCountData['margin_amount'] .= ("AB". $countLineArr[$i].","); + } + $allCountData['pay_amount'] = rtrim($allCountData['pay_amount'], ",").")"; + $allCountData['cp_statement_amount'] = rtrim($allCountData['cp_statement_amount'], ",").")"; + $allCountData['cp_rebate_amount'] = rtrim($allCountData['cp_rebate_amount'], ",").")"; + $allCountData['cp_other_amount'] = rtrim($allCountData['cp_other_amount'], ",").")"; + + $allCountData['pc_pay_amount'] = rtrim($allCountData['pc_pay_amount'], ",").")"; + $allCountData['pc_statement_amount'] = rtrim($allCountData['pc_statement_amount'], ",").")"; + $allCountData['pc_margin_amount'] = rtrim($allCountData['pc_margin_amount'], ",").")"; + + $allCountData['pu_pay_amount'] = rtrim($allCountData['pu_pay_amount'], ",").")"; + $allCountData['pu_statement_amount'] = rtrim($allCountData['pu_statement_amount'], ",").")"; + $allCountData['pu_margin_amount'] = rtrim($allCountData['pu_margin_amount'], ",").")"; + + $allCountData['jh_pay_amount'] = rtrim($allCountData['jh_pay_amount'], ",").")"; + $allCountData['jh_statement_amount'] = rtrim($allCountData['jh_statement_amount'], ",").")"; + $allCountData['jh_margin_amount'] = rtrim($allCountData['jh_margin_amount'], ",").")"; + + $allCountData['margin_amount'] = rtrim($allCountData['margin_amount'], ",").")"; + $excelData[] = $allCountData; + $this->exportExcel($excelData,"毛利分析表汇总"); + } + private function exportExcel($arr,$title) + { + header("Content-type: text/html; charset=utf-8"); + error_reporting(E_ALL); + ini_set('display_errors', TRUE); + ini_set('display_startup_errors', TRUE); + Vendor("PHPExcel.PHPExcel"); + $objReader = \PHPExcel_IOFactory::createReader('Excel2007'); + $objPHPExcel = $objReader->load("Public/Admin/excel/gamemargin.xlsx"); + $line = 3; + $objPHPExcel->getActiveSheet()->insertNewRowBefore($line+1,count($arr)-2); + + foreach ($arr as $v) { + //relation_game_name + $objPHPExcel->getActiveSheet() + ->setCellValue('A'.$line, $v['count_year']) + ->setCellValue('B'.$line, $v['count_month'] ?? '') + ->setCellValue('C'.$line, $v['relation_game_name'] ?? '') + ->setCellValue('D'.$line, $v['pay_amount']) + ->setCellValue('E'.$line, $v['cp_promote_ratio'] ?? '') + ->setCellValue('F'.$line, $v['cp_ratio'] ?? '') + ->setCellValue('G'.$line, $v['cp_statement_amount']) + ->setCellValue('H'.$line, $v['cp_rebate_ratio'] ?? '') + ->setCellValue('I'.$line, $v['cp_rebate_amount']) + ->setCellValue('J'.$line, $v['cp_other_amount']) + ->setCellValue('K'.$line, $v['pc_pay_amount']) + ->setCellValue('L'.$line, $v['pc_ratio']) + ->setCellValue('M'.$line, $v['pc_statement_amount']) + ->setCellValue('N'.$line, $v['pc_margin_amount']) + ->setCellValue('O'.$line, $v['pc_margin_ratio']) + ->setCellValue('P'.$line, $v['pu_pay_amount']) + ->setCellValue('Q'.$line, $v['pu_ratio']) + ->setCellValue('R'.$line, $v['pu_statement_amount']) + ->setCellValue('S'.$line, $v['pu_margin_amount']) + ->setCellValue('T'.$line, $v['pu_margin_ratio']) + ->setCellValue('U'.$line, $v['platform_margin_ratio']) + ->setCellValue('V'.$line, $v['jh_pay_amount']) + ->setCellValue('W'.$line, $v['jh_ratio']) + ->setCellValue('X'.$line, $v['jh_statement_amount']) + ->setCellValue('Y'.$line, $v['jh_margin_amount']) + ->setCellValue('Z'.$line, $v['jh_margin_ratio']) + ->setCellValue('AA'.$line, $v['margin_ratio']) + ->setCellValue('AB'.$line, $v['margin_amount']); + if(array_key_exists('relation_game_name',$v)){ + if($v['relation_game_name'] == "小计"){ + $objPHPExcel->getActiveSheet()->getStyle("A{$line}:AB{$line}")->getFont()->setBold(true); + } + }else{ + //总计 + $objPHPExcel->getActiveSheet()->mergeCells("A{$line}:C{$line}")->getStyle("A{$line}")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); + } + $line ++; + } + + $fileName = $title; + ob_end_clean();//清除缓冲区,避免乱码 + header('pragma:public'); + header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$fileName.'".xlsx'); + header("Content-Disposition:attachment;filename={$fileName}.xlsx");//attachment新窗口打印inline本窗口打印 + $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); + $objWriter->save('php://output'); + exit; + } private function marginExport($info) { @@ -278,6 +496,7 @@ class GameMarginController extends AdminController $objPHPExcel->getActiveSheet() ->setCellValue('A'.$line, $info['count_year']) ->setCellValue('B'.$line, $info['count_month']) + ->setCellValue('C'.$line, "小计") ->setCellValue('D'.$line, $count['pay_amount']) ->setCellValue('G'.$line, $count['cp_statement_amount']) ->setCellValue('I'.$line, $count['cp_rebate_amount']) diff --git a/Application/Admin/View/GameMargin/lists.html b/Application/Admin/View/GameMargin/lists.html index b8cab0876..0e1550637 100644 --- a/Application/Admin/View/GameMargin/lists.html +++ b/Application/Admin/View/GameMargin/lists.html @@ -86,6 +86,7 @@ 导出 汇总查看 + 汇总导出 @@ -297,6 +298,21 @@ }); }) + $("#moreMarginExport").click(function () { + var text = $("input:checkbox[name='ids[]']:checked").map(function(index,elem) { + return $(elem).val(); + }).get(); + + if(text.length < 2){ + layer.msg("" + '请选择大于两条(含)以上的数据' + ""); + return; + } + var ids = text.join(","); + var url = "{:U('moreMarginView')}"+"&export=1&ids="+ids + var iframeExcel = ""//添加下载的地址到iframe,这里是公司信息,我用**表示了。 + $("body").append(iframeExcel) + }) + $("#search").click(function(){ var url = $(this).attr('url'); diff --git a/Public/Admin/excel/gamemargin.xlsx b/Public/Admin/excel/gamemargin.xlsx index cd98f5c9e7f403544ed189a67a50ff449e1c3758..bb6d7e12cb82c0a526776fa0ac083cdd64d1a446 100644 GIT binary patch delta 5785 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 XE-wO~4U@kO8j}St5C&f=00000Hze?K delta 5787 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 T!YK+0**`~MprE*c|5N=Jq=WU|