PageRenderTime 52ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/web/admin/module/center/all_activity_type_log.php

https://gitlab.com/xusasuke6/Slg_php
PHP | 476 lines | 420 code | 44 blank | 12 comment | 61 complexity | be0088bf3fde2cd6f7d82a8da7f5e406 MD5 | raw file
  1. <?php
  2. define('IN_DATANG_SYSTEM', true);
  3. include "../../../config/config.php";
  4. include SYSDIR_ADMIN."/include/global.php";
  5. global $smarty, $db;
  6. $ctype_desc = array(
  7. //副本
  8. 2=>'英雄殿',
  9. 4=>'机关洞',
  10. 6=>'东溟派',
  11. 7=>'水下地宫',
  12. 8=>'铁骑会',
  13. 9=>'深渊地穴',
  14. 100=>'命运之间',
  15. 152=>'宠物岛',
  16. 999=>'皇陵秘境',
  17. 9998=>'轮回殿',
  18. 9999=>'净念禅院',
  19. //活动
  20. 107=>'演武' ,
  21. 102=>'征战' ,
  22. 109=>'运镖' ,
  23. 2005=>'沉船寻宝' ,
  24. 2006=>'英雄帖' ,
  25. 11916=>'无双战场' ,
  26. 11023=>'守关' ,
  27. 106=>'答题' ,
  28. 5=>'龙泉山庄',
  29. 111=>'帮会副本' ,
  30. 12001=>'魔幻迷宫',
  31. 11=>'灵虚幻境' ,
  32. 151=>'突厥攻城' ,
  33. 108=>'坐骑竞技' ,
  34. 104=>'竞技场' ,
  35. 11917=>'奴隶抓捕' ,
  36. 12=>'阵营战' ,
  37. 110251=>'长安争夺战',
  38. 110252=>'荥阳争夺战',
  39. 110253=>'洛阳争夺战',
  40. 150=>'镜像挑战', //(没实际用到)
  41. 15001=>'单人镜像-简单',
  42. 15002=>'单人镜像-普通',
  43. 15003=>'单人镜像-困难',
  44. 15011=>'组队镜像-简单',
  45. 15012=>'组队镜像-普通',
  46. 15013=>'组队镜像-困难',
  47. 20201=>'接普通刺探',
  48. 20202=>'完成普通刺探',
  49. 20203=>'接国探',
  50. 20204=>'完成国探',
  51. 888888=>'登陆',
  52. );
  53. $note_arr = array(
  54. //副本
  55. 2=>'35级',
  56. 4=>'60级',
  57. 6=>'25级',
  58. 7=>'47级',
  59. 8=>'45级',
  60. 9=>'35级',
  61. 100=>'40级',
  62. 152=>'41级',
  63. 999=>'75级',
  64. 9998=>'65级',
  65. 9999=>'50级',
  66. //活动
  67. 107=>'28级' ,
  68. 102=>'29级' ,
  69. 109=>'30级' ,
  70. 2005=>'30级' ,
  71. 2006=>'30级' ,
  72. 11916=>'无双战场' ,
  73. 11023=>'31级' ,
  74. 106=>'38级' ,
  75. 5=>'32级',
  76. 111=>'30级' ,
  77. 12001=>'35级',
  78. 11=>'35级' ,
  79. 151=>'40级' ,
  80. 108=>'21级' ,
  81. 104=>'30级' ,
  82. 11917=>'奴隶抓捕' ,
  83. 12=>'30级' ,
  84. 110251=>'35级',
  85. 110252=>'35级',
  86. 110253=>'35级',
  87. 150=>'50级', //(没实际用到)
  88. 15001=>'50级',
  89. 15002=>'50级',
  90. 15003=>'50级',
  91. 15011=>'50级',
  92. 15012=>'50级',
  93. 15013=>'50级',
  94. 20201=>'31级',
  95. 20202=>'31级',
  96. 20203=>'31级',
  97. 20204=>'31级',
  98. 888888=>'1级',
  99. );
  100. $act_type_option = array(
  101. '0' => $buf_lang['new']['select'],
  102. '1' => $buf_lang['left']['arena'],
  103. );
  104. if ( isset($_REQUEST['dStartDate'])){
  105. $date_start1 = explode("-",$_REQUEST['dStartDate']);
  106. $date_start1[1] = (strlen($date_start1[1]) >= 2) ? $date_start1[1] : '0'.$date_start1[1];
  107. $date_start1[2] = (strlen($date_start1[2]) >= 2) ? $date_start1[2] : '0'.$date_start1[2];
  108. $date_start_temp = $date_start1[0].'-'.$date_start1[1].'-'.$date_start1[2];
  109. $dateStart = $date_start1[0].$date_start1[1].$date_start1[2];
  110. }
  111. else
  112. {
  113. $date_start_temp = strftime ("%Y-%m-%d", time()-(60*60*24)*2 );
  114. $dateStart = str_replace('-','',$date_start_temp);
  115. }
  116. if ( isset($_REQUEST['dEndDate']))
  117. {
  118. $date_end1 = explode("-",$_REQUEST['dEndDate']);
  119. $date_end1[1] = (strlen($date_end1[1]) >= 2) ? $date_end1[1] : '0'.$date_end1[1];
  120. $date_end1[2] = (strlen($date_end1[2]) >= 2) ? $date_end1[2] : '0'.$date_end1[2];
  121. $date_end_temp = $date_end1[0].'-'.$date_end1[1].'-'.$date_end1[2];
  122. $dateEnd = $date_end1[0].$date_end1[1].$date_end1[2];
  123. }
  124. else
  125. {
  126. $date_end_temp= strftime ("%Y-%m-%d",time());
  127. $dateEnd = str_replace('-','',$date_end_temp);
  128. }
  129. $u_date_start = strtotime($date_start_temp);
  130. $u_end_start = strtotime($date_end_temp);
  131. $action_agent = isset($_REQUEST['radio_agent'])?$_REQUEST['radio_agent']:0;
  132. $action_server = isset($_REQUEST['radio_server'])?$_REQUEST['radio_server']:0;
  133. foreach($ALL_SERVER_LIST as $key=>$value) {
  134. if($key == 0) continue;
  135. foreach($value as $k=>$v) {
  136. $serStr = "S".$k;
  137. if($v['stat'] == 4)//未开
  138. {
  139. continue;
  140. }
  141. else if($v['stat'] == 2)//合服
  142. {
  143. $serStr .= "(合)";
  144. }
  145. else if($v['stat'] == 3)//关服
  146. {
  147. $serStr .= "(关)";
  148. }
  149. $servers[$key][$k] = $serStr;
  150. }
  151. }
  152. $where = $group_by = '';
  153. if($action_agent!=0){
  154. $where = " and agent_id=$action_agent ";
  155. $group_by = ",agent_id ";
  156. if($action_server!=0){
  157. $where .= " and server_id = $action_server ";
  158. $group_by .= " ,server_id ";
  159. }
  160. }
  161. $act_type = isset($_REQUEST['act_type']) ? $_REQUEST['act_type'] : 0;
  162. if (isset($act_type))
  163. {
  164. if($act_type == '0')
  165. {
  166. $match_sql = "SELECT mtime,r_id,sum(players) as players,sum(do_times) as do_times " .
  167. " FROM `all_routine_log` " .
  168. " WHERE mtime>='{$dateStart}' AND mtime<='{$dateEnd}' $where " .
  169. " GROUP BY mtime, r_id $group_by".
  170. " ORDER BY mtime desc";
  171. $match_data = GFetchRowSet($match_sql);
  172. }
  173. else
  174. {
  175. $match_sql = "SELECT mtime,r_id,sum(players) as players,sum(do_times) as do_times " .
  176. " FROM `all_routine_log` " .
  177. " WHERE r_id='{$act_type}' AND mtime>='{$dateStart}' AND mtime<='{$dateEnd}' $where " .
  178. " GROUP BY mtime,r_id $group_by".
  179. " ORDER BY mtime desc";
  180. $match_data = GFetchRowSet($match_sql);
  181. }
  182. }
  183. $ttype = isset($_REQUEST['ttype']) ? $_REQUEST['ttype'] :1;
  184. $date_arr = array();
  185. $date_arr = getFormatDate($date_start_temp,$date_end_temp,$ttype);
  186. //if($ttype == 3){exit(print_r($date_arr));};
  187. if(isset($match_data))
  188. {
  189. if(isset($date_arr['format']))
  190. {
  191. foreach($date_arr['format'] as $k => $v)
  192. {
  193. $data_per[$k] = array();
  194. $v['start'] = isset($v['start']) ? str_replace('-','',$v['start']) : '';
  195. $v['end'] = isset($v['end']) ? str_replace('-','',$v['end']) : '';
  196. $v['date'] = isset($v['date']) ? str_replace('-','',$v['date']) : '';
  197. if($v['date'] != '')
  198. {
  199. $start1 = $v['date'];
  200. $end1 = $v['date'];
  201. }
  202. else
  203. {
  204. $start1 = $v['start'];
  205. $end1 = $v['end'];
  206. }
  207. foreach($match_data as $data)
  208. {
  209. if($data['mtime'] >= $start1 && $data['mtime'] <= $end1 )
  210. {
  211. $data_per[$k][] = $data;
  212. }
  213. }
  214. }
  215. }
  216. }
  217. //if($ttype == 2 ){exit(print_r($data_per));}
  218. $log_all = array();
  219. foreach($data_per as $k => $v)
  220. {
  221. if(is_array($v) && !empty($v))
  222. {
  223. foreach($v as $v1)
  224. {
  225. if(isset($v1['r_id']) && $v1['r_id'] == 888888)
  226. {
  227. $log_all[$k]['all_players'] += $v1['players'];
  228. $log_all[$k]['all_do_times'] += $v1['do_times'];
  229. }
  230. }
  231. }
  232. }
  233. //if($ttype == 2 ){exit(print_r($log_all));}
  234. $data10 = array();
  235. $rid_arr = array();
  236. foreach($data_per as $k => $v)
  237. {
  238. if(is_array($v) && !empty($v))
  239. {
  240. $all_players = (isset($log_all[$k]) && !empty($log_all[$k])) ? $log_all[$k]['all_players'] : 0;
  241. foreach($v as $v1)
  242. {
  243. if($ttype != 1)
  244. {
  245. //echo $k.":".$all_players."--".$v1['players']."--".$v1['players'] / $all_players."<br>";
  246. if(!isset($rid_arr[$k][$v1['r_id']]))
  247. {
  248. if($all_players != 0)
  249. {
  250. $v1['all_players'] = $all_players;
  251. $v1['players_rate'] = number_format($v1['players'] / $all_players , 2);
  252. $v1['do_times_rate'] = number_format( $v1['do_times'] / $all_players ,2);
  253. }
  254. else
  255. {
  256. $v1['all_players'] = 0;
  257. $v1['players_rate'] = 0;
  258. $v1['do_times_rate'] = 0;
  259. }
  260. $rid_arr[$k][$v1['r_id']] = $v1;
  261. }
  262. else
  263. {
  264. if($all_players != 0)
  265. {
  266. $rid_arr[$k][$v1['r_id']]['all_players'] = $all_players;
  267. $rid_arr[$k][$v1['r_id']]['players_rate'] += number_format($v1['players'] / $all_players , 2);
  268. $rid_arr[$k][$v1['r_id']]['do_times_rate'] += number_format($v1['do_times'] / $all_players , 2);
  269. }
  270. else{
  271. $rid_arr[$k][$v1['r_id']]['all_players'] = 0;
  272. $rid_arr[$k][$v1['r_id']]['players_rate'] =0;
  273. $rid_arr[$k][$v1['r_id']]['do_times_rate'] = 0;
  274. }
  275. $rid_arr[$k][$v1['r_id']]['mtime'] = $v1['mtime'];
  276. $rid_arr[$k][$v1['r_id']]['r_id'] = $v1['r_id'];
  277. $rid_arr[$k][$v1['r_id']]['players'] = $rid_arr[$k][$v1['r_id']]['players'] + $v1['players'];
  278. $rid_arr[$k][$v1['r_id']]['do_times'] = $rid_arr[$k][$v1['r_id']]['do_times'] + $v1['do_times'];
  279. }
  280. }
  281. else
  282. {
  283. $rid_arr[$k][$v1['r_id']]['mtime'] = $v1['mtime'];
  284. $rid_arr[$k][$v1['r_id']]['r_id'] = $v1['r_id'];
  285. $rid_arr[$k][$v1['r_id']]['players'] = $v1['players'];
  286. $rid_arr[$k][$v1['r_id']]['do_times'] = $v1['do_times'];
  287. $rid_arr[$k][$v1['r_id']]['all_players'] = $all_players;
  288. if($all_players != 0)
  289. {
  290. $rid_arr[$k][$v1['r_id']]['players_rate'] = number_format($v1['players'] / $all_players ,2); ///number_format("1000000",2);
  291. $rid_arr[$k][$v1['r_id']]['do_times_rate'] = number_format($v1['do_times'] / $all_players ,2);
  292. }
  293. else
  294. {
  295. $rid_arr[$k][$v1['r_id']]['players_rate'] = 0;
  296. $rid_arr[$k][$v1['r_id']]['do_times_rate'] = 0;
  297. }
  298. }
  299. }
  300. $v = array();
  301. $v = $rid_arr[$k];
  302. }
  303. $data10[] = $v;
  304. }
  305. foreach ($data10 as $k => $v) {
  306. ksort($v);
  307. $hhh[$k] = $v;
  308. }
  309. $output = output_data($hhh,$u_date_start,$ctype_desc,$ttype,$date_arr,$note_arr);
  310. $smarty->assign("ctype_desc", $ctype_desc);
  311. $smarty->assign("output", $output);
  312. $smarty->assign("search_keyword1", $date_start_temp);
  313. $smarty->assign("search_keyword2", $date_end_temp);
  314. $smarty->assign("act_type_option", $act_type_option);
  315. $smarty->assign("act_type", $act_type);
  316. $smarty->assign('ttype',$ttype);
  317. $smarty->assign('agent_id',$action_agent);
  318. $smarty->assign('server_id',$action_server);
  319. $smarty->assign('servers',json_encode($servers));
  320. $smarty->assign("allAgentName", $AGENT_NAME);
  321. $smarty->display("module/center/all_activity_type_log.html");
  322. function output_data($data,$u_date_start,$ctype_desc,$t_type,$date,$note_arr) {
  323. if(empty($data)) return FALSE;
  324. $html = '';
  325. $flag = array(1=>'<font color="red"><b>↓</b></font>',2=>'<font color="green"><b>↑</b></font>');
  326. $table = '<td width="310" valign="top" ><table cellspacing="1" cellpadding="0" border="1" bgcolor="#bbe5e5" width="310" valign="top">';
  327. $thead = '<tr align="center"><td width="50"><b>活动类型</b></td><td width="30"><b>人数</b></td><td width="30"><b>参加率</b></td><td width="30"><b>次数</b></td><td width="30"><b>操作率</b></td><td width="30"><b>说明</b></td></tr>';
  328. for($i = 0; $i < count($data);$i++) {
  329. if($t_type == 1)
  330. {
  331. $info = $date['format'][$i]['date'].' 活动类型统计';
  332. }
  333. elseif($t_type == 2)
  334. {
  335. $info = '第'.$date['format'][$i]['yearweek'].'周'.$date['format'][$i]['start'].'~'.$date['format'][$i]['end'].'活动类型统计';
  336. }
  337. else
  338. {
  339. $info = '第'.$date['format'][$i]['yearmonth'].'月'.$date['format'][$i]['start'].'~'.$date['format'][$i]['end'].'活动类型统计';
  340. }
  341. $head = "<tr align='center'><td colspan='6'><b>$info</b></td></tr>";
  342. $tr = '';
  343. foreach($data[$i] as $k1=>$v1) {
  344. $before_players = 0;
  345. $before_do_times = 0;
  346. if($i >= 0 && $i < count($data) && isset($data[$i+1]))
  347. {
  348. foreach($data[$i+1] as $before)
  349. {
  350. if($before['r_id'] == $v1['r_id'])
  351. {
  352. $before_players = $before['players'];
  353. $before_do_times = $before['do_times'];
  354. }
  355. }
  356. $is_players = (($v1['players'] - $before_players)>=0)? $flag[2] : $flag[1];
  357. $is_do_times = (($v1['do_times'] - $before_do_times)>=0)? $flag[2] : $flag[1];
  358. $tr .= '<tr><td>'.$ctype_desc[$v1['r_id']].'</td><td>'.$v1['players'].$is_players.'</td><td>'.$v1['players_rate']*100 .'%'.$is_players.'</td><td>'.$v1['do_times'].$is_do_times.'</td><td>'.$v1['do_times_rate']*100 .'%'.$is_do_times.'</td><td>'.$note_arr[$v1['r_id']].'</td></tr>';
  359. }
  360. else
  361. {
  362. $tr .= '<tr><td>'.$ctype_desc[$v1['r_id']].'</td><td>'.$v1['players'].'</td><td>'.$v1['players_rate']*100 .'%</td><td>'.$v1['do_times'].'</td><td>'.$v1['do_times_rate']*100 .'%</td><td>'.$note_arr[$v1['r_id']].'</td></tr>';
  363. }
  364. }
  365. $tbody .=$tr;
  366. $html .=$table.$head.$thead.$tbody.'</table></td>';
  367. $tbody='';
  368. }
  369. return $html;
  370. }
  371. function getFormatDate($start,$end,$flag=1) {
  372. if($flag == 2) {
  373. //生成某一天所在星期的星期一的日期
  374. $weekday = date('N',strtotime($start));
  375. $startday = date('Y-m-d',strtotime($start)-($weekday-1)*60*60*24);
  376. $rt['start'] = $startday;
  377. //生成某一天所在星期的星期天的日期
  378. $weekday= date('N',strtotime($end));
  379. $endday = date('Y-m-d',strtotime($end)+(7-$weekday)*60*60*24);
  380. $rt['end'] = $endday;
  381. $stamp = strtotime($startday);
  382. $etamp = strtotime($endday);
  383. for($i=0,$t=$stamp;$t<$etamp;$t += 60*60*24,$i++) {
  384. $rt_date[$i]['yearweek'] = date('Y-W',$t);
  385. $rt_date[$i]['week'] = date('W',$t);
  386. $rt_date[$i]['start'] = date('Y-m-d',$t);
  387. $t += 6*24*60*60;
  388. $rt_date[$i]['end'] =date('Y-m-d',$t);
  389. }
  390. $rt_date['format'] = array_reverse($rt_date);
  391. } else if($flag == 3) {
  392. //生成某一天所在月份的第一天的日期
  393. $date_arr= getdate(strtotime($start));
  394. $day = $date_arr['year'].'-'.$date_arr['mon'].'-1';
  395. $startday =date('Y-m-d',strtotime($day));
  396. $rt['start'] = $startday;
  397. print_r($data_arr);
  398. //生成某一天所在月份的最后一天的日期
  399. $date_arr = getdate(strtotime($end));
  400. $day = $date_arr['year'].'-'.($date_arr['mon']+1).'-1';
  401. $endday =date('Y-m-d',strtotime($day)-1);
  402. $rt['end'] = $endday;
  403. $stamp = strtotime($startday);
  404. $etamp = strtotime($endday);
  405. for($i=0,$t=$stamp; $t<$etamp; $t += 60*60*24,$i++) {
  406. $rt_date[$i]['yearmonth'] = date('Y-n',$t);
  407. $rt_date[$i]['start'] = date('Y-m-d',$t);
  408. $date_arr = getdate($t);
  409. $rt_date[$i]['month'] = $date_arr['mon'];
  410. if($date_arr['mon']<12)
  411. $day = $date_arr['year'].'-'.($date_arr['mon']+1).'-1';
  412. else $day = ($date_arr['year']+1).'-1-1';
  413. $rt_date[$i]['end'] = date('Y-m-d',strtotime($day)-1);
  414. $t = strtotime($rt_date[$i]['end']);
  415. }
  416. $rt_date['format'] = array_reverse($rt_date);
  417. } else {
  418. $rt['start'] = $start;
  419. $rt['end'] = $end;
  420. $strtime1 = strtotime($end)+60*60*24;
  421. $strtime2 = strtotime($start);
  422. for($t=$strtime1-1,$i=0; $t>=$strtime2; ) {
  423. $rt_date['format'][$i]['date'] = date('Y-m-d',$t);
  424. $rt_date['format'][$i]['weekday'] = date('l',$t);
  425. $t -= 60*60*24;
  426. $i++;
  427. }
  428. }
  429. $rt_date['start'] = $rt['start']; //str_replace('-','',$rt['start']);
  430. $rt_date['end'] = $rt['end']; //str_replace('-','',$rt['end']);
  431. return $rt_date;
  432. }