123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- <?php
- namespace app\index\controller;
- use app\common\controller\Frontend;
- use PHPExcel_IOFactory;
- require_once VENDOR_PATH . 'phpoffice/phpexcel/Classes/PHPExcel.php';
- class Datacount extends Frontend
- {
- protected $noNeedLogin = '*';
- protected $noNeedRight = '*';
- protected $layout = '';
- public function index()
- {
- return $this->view->fetch();
- }
- /**
- * 收益数据导出
- */
- public function explode() {
- // 先做统计
- $p_id = $this->request->request('p_id',0,"intval"); // 派对ID
- $startdate = $this->request->request('starttime'); // 起始时间
- $enddate = $this->request->request('endtime'); // 结束时间
- if($p_id <=0 || !$startdate || !$enddate) $this->error("请选择起始时间!");
- $starttime = strtotime($startdate);
- $endtime = strtotime($enddate);
- if(strlen($starttime) != 10 || strlen($endtime) != 10) $this->error("时间格式有误!");
- $partyInfo = \app\common\model\Party::where(["id"=>$p_id])->find();
- $p_id = $partyInfo->party_id;
- $party_id = $partyInfo->id;
- // 查询连麦数据
- global $where;
- global $whereOr;
- $where = [];
- $where["party_id"] = $party_id;
- $where["offsite_time"] = ["gt",0];
- $where["onsite_time"] = [["gt",$starttime],["lt",$endtime]];
- $whereOr["party_id"] = $party_id;
- $whereOr["offsite_time"] = ["gt",0];
- $whereOr["offsite_time"] = [["gt",$starttime],["lt",$endtime]];
- $userOnlieTime = \app\common\model\UserOnsiteTime::
- where(function ($query) {
- global $where;
- $query->where($where);
- })
- ->whereOr(function ($query) {
- global $whereOr;
- $query->where($whereOr);
- })->select();
- $sitetimeList = [];
- if($userOnlieTime) foreach($userOnlieTime as $k => $v) {
- $onsite_time = $v["onsite_time"]<$starttime?$starttime:$v["onsite_time"];
- $offsite_time = $v["offsite_time"]>$endtime?$endtime:$v["offsite_time"];
- $site_time = $offsite_time-$onsite_time;
- isset($sitetimeList[$v["user_id"]]) && $sitetimeList[$v["user_id"]] += $site_time;
- isset($sitetimeList[$v["user_id"]]) || $sitetimeList[$v["user_id"]] = $site_time;
- }
- // 获取收礼声币数
- $where = [];
- $where["a.party_id"] = $party_id;
- $where["a.createtime"] = [["gt",$starttime],["lt",$endtime]];;
- $profitloglist = \app\common\model\UserProfitLog::alias("a")
- ->field("a.user_id,u.u_id,u.nickname,sum(gift_value) as gift_value,sum(guilder_value) as guilder_value")
- ->join("hx_user u","u.id = a.user_id")
- ->where($where)->group("a.user_id")
- ->select();
- $profit = [];
- $party_all_value = 0;
- $guilder_all_value = 0;
- if($profitloglist) foreach($profitloglist as $k => $v) {
- $sitetime = isset($sitetimeList[$v["user_id"]])?$sitetimeList[$v["user_id"]]:0;
- $profit[] = [
- "user_id" => $v["user_id"],
- "gift_value" => $v["gift_value"],
- "guilder_value" => $v["guilder_value"],
- "u_id" => $v["u_id"],
- "nickname" => $v["nickname"],
- "sitetime" => intval($sitetime/60)
- ];
- $party_all_value += $v["gift_value"];
- $guilder_all_value += $v["guilder_value"];
- }
- // print_r($profit);exit;
- // 获取派对信息
- $party_id = $p_id;
- $party_name = \app\common\model\Party::where(["party_id"=>$p_id])->value("party_name");
- // 导出数据
- $title = $startdate."—".$enddate." 房间营收数据";
- //实例化phpexcel对象
- $objPHPExcel = new \PHPExcel();
- //设置Excel属性
- $objPHPExcel->getProperties()->setTitle($title); //设置标题
- $objPHPExcel->getActiveSheet()->mergeCells('A1:F1');
- $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10); //设置宽度
- $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(30); //设置宽度
- $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25); //设置宽度
- $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20); //设置宽度
- $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(20); //设置宽度
- $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(20); //设置宽度
- $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal("left");//水平方向上靠左
- $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal("left");//水平方向上靠左
- $objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal("left");//水平方向上靠左
- $objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal("left");//水平方向上靠左
- $objPHPExcel->getActiveSheet()->getStyle('E')->getAlignment()->setHorizontal("left");//水平方向上靠左
- $objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal("left");//水平方向上靠左
- // 给表格添加数据
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1',$title);
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A2',"房间ID");
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B2',"房间名称");
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C2',"收礼总声币数");
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D2',"房主抽成声币数");
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A3',$party_id);
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B3',$party_name);
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C3',$party_all_value);
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D3',$guilder_all_value);
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A5',"序号");
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B5',"连麦用户");
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C5',"用户昵称");
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D5',"连麦时长(分钟)");
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E5',"收礼总声币数");
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue('F5',"收礼抽成声币数");
- //处理数据
- $j = 6;//行数
- foreach($profit as $key => $val){
- $objPHPExcel->getActiveSheet()
- ->setCellValue("A".$j,$key+1)
- ->setCellValue("B".$j,$val['u_id'])
- ->setCellValue("C".$j,$val['nickname'])
- ->setCellValue("D".$j,$val['sitetime'])
- ->setCellValue("E".$j,$val['gift_value'])
- ->setCellValue("F".$j,$val['guilder_value']);
- $j++;
- }
- //激活当前表
- $objPHPExcel->setActiveSheetIndex(0);
- ob_end_clean();//清除缓冲区,避免乱码
- //弹出提示下载文件
- header('pragma:public');
- header("Content-Disposition:attachment;filename=".$title.".xlsx");
- header('Cache-Control: max-age=0');
- $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
- $objWriter->save( 'php://output');
- }
- }
|