Datacount.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <?php
  2. namespace app\index\controller;
  3. use app\common\controller\Frontend;
  4. use PHPExcel_IOFactory;
  5. require_once VENDOR_PATH . 'phpoffice/phpexcel/Classes/PHPExcel.php';
  6. class Datacount extends Frontend
  7. {
  8. protected $noNeedLogin = '*';
  9. protected $noNeedRight = '*';
  10. protected $layout = '';
  11. public function index()
  12. {
  13. return $this->view->fetch();
  14. }
  15. /**
  16. * 收益数据导出
  17. */
  18. public function explode() {
  19. // 先做统计
  20. $p_id = $this->request->request('p_id',0,"intval"); // 派对ID
  21. $startdate = $this->request->request('starttime'); // 起始时间
  22. $enddate = $this->request->request('endtime'); // 结束时间
  23. if($p_id <=0 || !$startdate || !$enddate) $this->error("请选择起始时间!");
  24. $starttime = strtotime($startdate);
  25. $endtime = strtotime($enddate);
  26. if(strlen($starttime) != 10 || strlen($endtime) != 10) $this->error("时间格式有误!");
  27. $partyInfo = \app\common\model\Party::where(["id"=>$p_id])->find();
  28. $p_id = $partyInfo->party_id;
  29. $party_id = $partyInfo->id;
  30. // 查询连麦数据
  31. global $where;
  32. global $whereOr;
  33. $where = [];
  34. $where["party_id"] = $party_id;
  35. $where["offsite_time"] = ["gt",0];
  36. $where["onsite_time"] = [["gt",$starttime],["lt",$endtime]];
  37. $whereOr["party_id"] = $party_id;
  38. $whereOr["offsite_time"] = ["gt",0];
  39. $whereOr["offsite_time"] = [["gt",$starttime],["lt",$endtime]];
  40. $userOnlieTime = \app\common\model\UserOnsiteTime::
  41. where(function ($query) {
  42. global $where;
  43. $query->where($where);
  44. })
  45. ->whereOr(function ($query) {
  46. global $whereOr;
  47. $query->where($whereOr);
  48. })->select();
  49. $sitetimeList = [];
  50. if($userOnlieTime) foreach($userOnlieTime as $k => $v) {
  51. $onsite_time = $v["onsite_time"]<$starttime?$starttime:$v["onsite_time"];
  52. $offsite_time = $v["offsite_time"]>$endtime?$endtime:$v["offsite_time"];
  53. $site_time = $offsite_time-$onsite_time;
  54. isset($sitetimeList[$v["user_id"]]) && $sitetimeList[$v["user_id"]] += $site_time;
  55. isset($sitetimeList[$v["user_id"]]) || $sitetimeList[$v["user_id"]] = $site_time;
  56. }
  57. // 获取收礼声币数
  58. $where = [];
  59. $where["a.party_id"] = $party_id;
  60. $where["a.createtime"] = [["gt",$starttime],["lt",$endtime]];;
  61. $profitloglist = \app\common\model\UserProfitLog::alias("a")
  62. ->field("a.user_id,u.u_id,u.nickname,sum(gift_value) as gift_value,sum(guilder_value) as guilder_value")
  63. ->join("hx_user u","u.id = a.user_id")
  64. ->where($where)->group("a.user_id")
  65. ->select();
  66. $profit = [];
  67. $party_all_value = 0;
  68. $guilder_all_value = 0;
  69. if($profitloglist) foreach($profitloglist as $k => $v) {
  70. $sitetime = isset($sitetimeList[$v["user_id"]])?$sitetimeList[$v["user_id"]]:0;
  71. $profit[] = [
  72. "user_id" => $v["user_id"],
  73. "gift_value" => $v["gift_value"],
  74. "guilder_value" => $v["guilder_value"],
  75. "u_id" => $v["u_id"],
  76. "nickname" => $v["nickname"],
  77. "sitetime" => intval($sitetime/60)
  78. ];
  79. $party_all_value += $v["gift_value"];
  80. $guilder_all_value += $v["guilder_value"];
  81. }
  82. // print_r($profit);exit;
  83. // 获取派对信息
  84. $party_id = $p_id;
  85. $party_name = \app\common\model\Party::where(["party_id"=>$p_id])->value("party_name");
  86. // 导出数据
  87. $title = $startdate."—".$enddate." 房间营收数据";
  88. //实例化phpexcel对象
  89. $objPHPExcel = new \PHPExcel();
  90. //设置Excel属性
  91. $objPHPExcel->getProperties()->setTitle($title); //设置标题
  92. $objPHPExcel->getActiveSheet()->mergeCells('A1:F1');
  93. $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10); //设置宽度
  94. $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(30); //设置宽度
  95. $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25); //设置宽度
  96. $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20); //设置宽度
  97. $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(20); //设置宽度
  98. $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(20); //设置宽度
  99. $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal("left");//水平方向上靠左
  100. $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal("left");//水平方向上靠左
  101. $objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal("left");//水平方向上靠左
  102. $objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal("left");//水平方向上靠左
  103. $objPHPExcel->getActiveSheet()->getStyle('E')->getAlignment()->setHorizontal("left");//水平方向上靠左
  104. $objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal("left");//水平方向上靠左
  105. // 给表格添加数据
  106. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1',$title);
  107. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A2',"房间ID");
  108. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B2',"房间名称");
  109. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C2',"收礼总声币数");
  110. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D2',"房主抽成声币数");
  111. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A3',$party_id);
  112. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B3',$party_name);
  113. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C3',$party_all_value);
  114. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D3',$guilder_all_value);
  115. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A5',"序号");
  116. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B5',"连麦用户");
  117. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C5',"用户昵称");
  118. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D5',"连麦时长(分钟)");
  119. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E5',"收礼总声币数");
  120. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('F5',"收礼抽成声币数");
  121. //处理数据
  122. $j = 6;//行数
  123. foreach($profit as $key => $val){
  124. $objPHPExcel->getActiveSheet()
  125. ->setCellValue("A".$j,$key+1)
  126. ->setCellValue("B".$j,$val['u_id'])
  127. ->setCellValue("C".$j,$val['nickname'])
  128. ->setCellValue("D".$j,$val['sitetime'])
  129. ->setCellValue("E".$j,$val['gift_value'])
  130. ->setCellValue("F".$j,$val['guilder_value']);
  131. $j++;
  132. }
  133. //激活当前表
  134. $objPHPExcel->setActiveSheetIndex(0);
  135. ob_end_clean();//清除缓冲区,避免乱码
  136. //弹出提示下载文件
  137. header('pragma:public');
  138. header("Content-Disposition:attachment;filename=".$title.".xlsx");
  139. header('Cache-Control: max-age=0');
  140. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  141. $objWriter->save( 'php://output');
  142. }
  143. }