| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 | <?phpnamespace 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');    }}
 |