StatisticsModuleAction.class.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. <?php
  2. // 资金管理——统计模块
  3. class StatisticsModuleAction extends CommonAction{
  4. /**
  5. * 统计图表
  6. */
  7. public function chart()
  8. {
  9. //列表过滤器,生成查询Map对象
  10. $map2 = $this->com_search();
  11. $sql_pay .= 'is_paid=1 and ';
  12. if($map2['start_time'] == '' && $map2['end_time'] == ''){
  13. $_REQUEST['start_time'] =date("Y-m-d",mktime(0,0,0,date('m'),1,date('Y')));
  14. $_REQUEST['end_time'] = date("Y-m-d",mktime(23,59,59,date('m'),date('t'),date('Y')));
  15. $map2['start_time'] = to_timespan($_REQUEST['start_time']);
  16. $map2['end_time'] =to_timespan($_REQUEST['end_time'])+86399;
  17. }
  18. /* $map2['start_time'] = 1473177600;
  19. $map2['end_time'] = 1474632000;*/
  20. if($map2['start_time'] != '' && $map2['end_time'] != ''){
  21. $sql_pay .="pay_time between '". $map2['start_time']. "' and '". $map2['end_time'] ."' and ";
  22. }
  23. $model = D ();
  24. $sql_str = "SELECT sum(money) money,DATE_FORMAT(FROM_UNIXTIME(pay_time+28800),'%Y-%m-%d') bdate FROM ".DB_PREFIX."payment_notice WHERE 1=1 ";
  25. $user_payment_sql .= " and ".$sql_pay." 1=1 ";
  26. if($map2['end_time'] > to_timespan('2017-07-01')){
  27. $user_payment_sql .= ' and payment_id !=2 ';
  28. }
  29. $sql_str .= " and ".$sql_pay." 1=1 group by bdate ORDER BY bdate asc ";
  30. $payRatesql =$GLOBALS['db']->getAll($sql_str);
  31. /*admin_ajax_return($payRatesql);*/
  32. $sql_refund .= 'is_pay=3 and ';
  33. if($map2['start_time'] != '' && $map2['end_time'] != ''){
  34. $sql_refund .="pay_time between '". $map2['start_time']. "' and '". $map2['end_time'] ."' and ";
  35. }
  36. $model = D ();
  37. $sql_str = "SELECT sum(money) money,DATE_FORMAT(FROM_UNIXTIME(pay_time+28800),'%Y-%m-%d') bdate FROM ".DB_PREFIX."user_refund WHERE 1=1 ";
  38. $user_refund_sql .= " and ".$sql_refund." 1=1 ";
  39. $sql_str .= " and ".$sql_refund." 1=1 group by bdate ORDER BY bdate asc ";
  40. $refundRatesql =$GLOBALS['db']->getAll($sql_str);
  41. //整理两张表的X坐标
  42. for($i=0;$i<count($payRatesql);$i++)
  43. {
  44. for($j=0;$j<count($refundRatesql);$j++)
  45. {
  46. if($payRatesql[$i]['bdate'] == $refundRatesql[$j]['bdate'])
  47. break;
  48. }
  49. if($j==count($refundRatesql))
  50. {
  51. $refundRatesql[] = array('money'=>0,'bdate'=>$payRatesql[$i]['bdate']);
  52. }
  53. }
  54. for($i=0;$i<count($refundRatesql);$i++)
  55. {
  56. for($j=0;$j<count($payRatesql);$j++)
  57. {
  58. if($refundRatesql[$i]['bdate'] == $payRatesql[$j]['bdate'])
  59. break;
  60. }
  61. if($j==count($payRatesql))
  62. {
  63. $payRatesql[] = array('money'=>0,'bdate'=>$refundRatesql[$i]['bdate']);
  64. }
  65. }
  66. //两表均按照时间排序
  67. for($k = 0;$k<count($refundRatesql);$k++)
  68. {
  69. for($l = 0; $l<count($refundRatesql)-$k-1; $l++)
  70. if($refundRatesql[$l]['bdate']>$refundRatesql[$l+1]['bdate'])
  71. {
  72. $tmp = $refundRatesql[$l];
  73. $refundRatesql[$l] = $refundRatesql[$l+1];
  74. $refundRatesql[$l+1] = $tmp;
  75. }
  76. }
  77. for($k = 0;$k<count($payRatesql);$k++)
  78. {
  79. for($l = 0; $l<count($payRatesql)-$k-1; $l++)
  80. if($payRatesql[$l]['bdate']>$payRatesql[$l+1]['bdate'])
  81. {
  82. $tmp = $payRatesql[$l];
  83. $payRatesql[$l] = $payRatesql[$l+1];
  84. $payRatesql[$l+1] = $tmp;
  85. }
  86. }
  87. $this->assign ( 'list', $payRatesql );
  88. $this->assign ( 'list2', $refundRatesql );
  89. $user_payment = floatval($GLOBALS['db']->getOne("SELECT sum(money) FROM ".DB_PREFIX."payment_notice where 1=1 ".$user_payment_sql));
  90. $this->assign("user_payment",$user_payment);
  91. $user_refund = floatval($GLOBALS['db']->getOne("SELECT sum(money) FROM ".DB_PREFIX."user_refund where 1=1 ".$user_refund_sql));
  92. $this->assign("user_refund",$user_refund);
  93. $this->display ();
  94. return;
  95. }
  96. /*
  97. * 充值统计
  98. */
  99. public function statistics_recharge(){
  100. //列表过滤器,生成查询Map对象
  101. $map2 = $this->com_search();
  102. $parameter .= 'is_paid=1&';
  103. $sql_w .= 'is_paid=1 and ';
  104. if($map2['start_time'] != '' && $map2['end_time'] != ''){
  105. $parameter.="pay_time between '". $map2['start_time'] . "' and '". $map2['end_time'] ."'&";
  106. $sql_w .="pay_time between '". $map2['start_time']. "' and '". $map2['end_time'] ."' and ";
  107. //unset($map2);
  108. }
  109. $model = D ();
  110. $sql_str = "SELECT sum(money) money,user_id,is_paid" .
  111. " FROM ".DB_PREFIX."payment_notice WHERE 1=1 ";
  112. if($map2['end_time'] > to_timespan('2017-07-01')){
  113. $user_refund_sql .= ' and payment_id !=2 ';
  114. }
  115. $user_refund_sql .= " and ".$sql_w." 1=1 ";
  116. $sql_str .= " and ".$sql_w." 1=1 group by user_id ";
  117. $voList = $this->_Sql_list($model, $sql_str, "&".$parameter,'money');
  118. $this->assign ( 'list', $voList );
  119. $count = $model->query($sql_str);
  120. $count = count($count);
  121. $this->assign("count",$count);
  122. $user_refund = floatval($GLOBALS['db']->getOne("SELECT sum(money) FROM ".DB_PREFIX."payment_notice where 1=1 ".$user_refund_sql));
  123. $this->assign("user_refund",$user_refund);
  124. $this->display ();
  125. return;
  126. }
  127. /**
  128. * 提现统计
  129. */
  130. public function statistics_refund()
  131. {
  132. //列表过滤器,生成查询Map对象
  133. $map2 = $this->com_search();
  134. $parameter .= 'is_pay=3&';
  135. $sql_w .= 'is_pay=3 and ';
  136. if($map2['start_time'] != '' && $map2['end_time'] != ''){
  137. $parameter.="pay_time between '". $map2['start_time'] . "' and '". $map2['end_time'] ."'&";
  138. $sql_w .="pay_time between '". $map2['start_time']. "' and '". $map2['end_time'] ."' and ";
  139. unset($map2);
  140. }
  141. $model = D ();
  142. $sql_str = "SELECT sum(money) money,sum(ticket) ticket,user_id,is_pay" .
  143. " FROM ".DB_PREFIX."user_refund WHERE 1=1 ";
  144. $user_refund_sql .= " and ".$sql_w." 1=1 ";
  145. $sql_str .= " and ".$sql_w." 1=1 group by user_id ";
  146. $voList = $this->_Sql_list($model, $sql_str, "&".$parameter,'money');
  147. $this->assign ( 'list', $voList );
  148. $count = $model->query($sql_str);
  149. $count = count($count);
  150. $this->assign("count",$count);
  151. $user_refund = floatval($GLOBALS['db']->getOne("SELECT sum(money) FROM ".DB_PREFIX."user_refund where 1=1 ".$user_refund_sql));
  152. $this->assign("user_refund",$user_refund);
  153. $this->display ();
  154. return;
  155. }
  156. //导出电子表,type=1为充值统计表,否则为提现统计表
  157. public function export_csv($page = 1)
  158. {
  159. $type = $_REQUEST['type'];
  160. /*admin_ajax_return($type);*/
  161. $pagesize = 10;
  162. set_time_limit(0);
  163. $limit = (($page - 1)*intval($pagesize)).",".(intval($pagesize));
  164. //列表过滤器,生成查询Map对象
  165. $map2 = $this->com_search();
  166. if($type)
  167. {
  168. $sql_w .= 'is_paid=1 and ';
  169. }
  170. else
  171. {
  172. $sql_w .= 'is_pay=3 and ';
  173. }
  174. if($map2['start_time'] != '' && $map2['end_time'] != ''){
  175. $parameter.="pay_time between '". $map2['start_time'] . "' and '". $map2['end_time'] ."'&";
  176. $sql_w .="pay_time between '". $map2['start_time']. "' and '". $map2['end_time'] ."' and ";
  177. //unset($map2);
  178. }
  179. if($type) //充值
  180. {
  181. $sql_str = "SELECT t1.user_id,t2.nick_name as name,sum(t1.money) money,t1.is_paid" .
  182. " FROM ".DB_PREFIX."payment_notice t1,".DB_PREFIX."user t2 WHERE t1.user_id = t2.id and 1=1 ";
  183. }
  184. else
  185. {
  186. $sql_str = "SELECT sum(t1.money) as money,t2.nick_name as name,sum(t1.ticket) as ticket,t1.user_id" .
  187. " FROM ".DB_PREFIX."user_refund t1,".DB_PREFIX."user t2 WHERE t1.user_id = t2.id and 1=1 ";
  188. }
  189. if($map2['end_time'] > to_timespan('2017-07-01')){
  190. $user_refund_sql .= ' and payment_id !=2 ';
  191. }
  192. $user_refund_sql .= " and ".$sql_w." 1=1 ";
  193. $sql_str .= " and ".$sql_w." 1=1 group by user_id ";
  194. $time ='1970-01-01 16:00:00';
  195. $sql =$sql_str." limit ";
  196. $sql .= $limit;
  197. /*admin_ajax_return($sql);*/
  198. $list=$GLOBALS['db']->getAll($sql);
  199. /*admin_ajax_return($list);*/
  200. if($list)
  201. {
  202. register_shutdown_function(array(&$this, 'export_csv'), $page+1);
  203. $m_config = load_auto_cache('m_config');
  204. $ticket_name = $m_config['ticket_name']!=''?$m_config['ticket_name']:'印票';
  205. if($type)
  206. $refund_value = array( 'user_id'=>'""','name'=>'""', 'money'=>'""');
  207. else
  208. $refund_value = array( 'user_id'=>'""','name'=>'""','ticket'=>'""', 'money'=>'""');
  209. if($page == 1)
  210. {
  211. if($type)
  212. $content = iconv("utf-8","gbk","用户ID,用户昵称,充值金额¥");
  213. else
  214. $content = iconv("utf-8","gbk","用户ID,用户昵称,提现印票,提现金额¥");
  215. $content = $content . "\n";
  216. }
  217. foreach($list as $k=>$v)
  218. {
  219. $refund_value['user_id'] = '"' . iconv('utf-8','gbk',$list[$k]['user_id']) . '"';
  220. $refund_value['money'] = '"' . iconv('utf-8','gbk',$list[$k]['money']) . '"';
  221. $refund_value['name'] = '"' . iconv('utf-8','gbk',$list[$k]['name']) . '"';
  222. if(!$type)
  223. {
  224. $refund_value['ticket'] = '"' . iconv('utf-8','gbk',$list[$k]['ticket']) . '"';
  225. }
  226. $content .= implode(",", $refund_value) . "\n";
  227. }
  228. //
  229. if($type)
  230. header("Content-Disposition: attachment; filename=recharge_statistics.csv");
  231. else
  232. header("Content-Disposition: attachment; filename=refund_statistics.csv");
  233. echo $content ;
  234. }
  235. else
  236. {
  237. if($page==1)
  238. $this->error(L("NO_RESULT"));
  239. }
  240. }
  241. //导出电子表,为充值导出电子表设计
  242. public function export_csv_recharge($page = 1)
  243. {
  244. $pagesize = 10;
  245. set_time_limit(0);
  246. $limit = (($page - 1)*intval($pagesize)).",".(intval($pagesize));
  247. //列表过滤器,生成查询Map对象
  248. $map2 = $this->com_search();
  249. $sql_w .= 'is_paid=1 and ';
  250. if($map2['start_time'] != '' && $map2['end_time'] != ''){
  251. $parameter.="pay_time between '". $map2['start_time'] . "' and '". $map2['end_time'] ."'&";
  252. $sql_w .="pay_time between '". $map2['start_time']. "' and '". $map2['end_time'] ."' and ";
  253. //unset($map2);
  254. }
  255. $sql_str = "SELECT t1.user_id,t2.nick_name as name,sum(t1.money) money,t1.is_paid" .
  256. " FROM ".DB_PREFIX."payment_notice t1,".DB_PREFIX."user t2 WHERE t1.user_id = t2.id and 1=1 ";
  257. if($map2['end_time'] > to_timespan('2017-07-01')){
  258. $user_refund_sql .= ' and payment_id !=2 ';
  259. }
  260. $user_refund_sql .= " and ".$sql_w." 1=1 ";
  261. $sql_str .= " and ".$sql_w." 1=1 group by user_id ";
  262. $time ='1970-01-01 16:00:00';
  263. $sql =$sql_str." limit ";
  264. $sql .= $limit;
  265. /*admin_ajax_return($sql);*/
  266. $list=$GLOBALS['db']->getAll($sql);
  267. /*admin_ajax_return($list);*/
  268. if($list)
  269. {
  270. register_shutdown_function(array(&$this, 'export_csv_recharge'), $page+1);
  271. $m_config = load_auto_cache('m_config');
  272. $ticket_name = $m_config['ticket_name']!=''?$m_config['ticket_name']:'印票';
  273. $refund_value = array( 'user_id'=>'""','name'=>'""', 'money'=>'""');
  274. if($page == 1)
  275. {
  276. $content = iconv("utf-8","gbk","用户ID,用户昵称,充值金额¥");
  277. $content = $content . "\n";
  278. }
  279. foreach($list as $k=>$v)
  280. {
  281. $refund_value['user_id'] = '"' . iconv('utf-8','gbk',$list[$k]['user_id']) . '"';
  282. $refund_value['money'] = '"' . iconv('utf-8','gbk',$list[$k]['money']) . '"';
  283. $refund_value['name'] = '"' . iconv('utf-8','gbk',$list[$k]['name']) . '"';
  284. $refund_value['ticket'] = '"' . iconv('utf-8','gbk',$list[$k]['ticket']) . '"';
  285. $content .= implode(",", $refund_value) . "\n";
  286. }
  287. //121212121212
  288. header("Content-Disposition: attachment; filename=recharge_statistics.csv");
  289. echo $content ;
  290. }
  291. else
  292. {
  293. if($page==1)
  294. $this->error(L("NO_RESULT"));
  295. }
  296. }
  297. }