DatabaseCleanController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: blues
  5. * Date: 2019/1/4
  6. * Time: 18:36
  7. */
  8. namespace App\Http\Controllers\Admin;
  9. use App\Http\Controllers\Controller;
  10. use App\Models\GameType;
  11. use Request;
  12. use Illuminate\Support\Facades\DB;
  13. class DatabaseCleanController extends Controller
  14. {
  15. private $table_names;
  16. public function __construct()
  17. {
  18. $this->table_names=$this->tableDescription();
  19. }
  20. //特殊表单
  21. private function specialTable(){
  22. return [
  23. 'account','account_group'
  24. ];
  25. }
  26. //不处理表单
  27. private function blacklist(){
  28. return [
  29. 'account_bank'
  30. ];
  31. }
  32. function index()
  33. {
  34. if (!empty($_POST)){
  35. $time = $_POST['time']??'';
  36. $rel =[];
  37. if(!isset($_POST['games'])&&empty($_POST['games'] ))
  38. return ['status'=>-1,'data'=>[],'msg'=>'请选择清理表'];
  39. if(time()-strtotime($time)<=120*3600*24)
  40. return ['status'=>-1,'data'=>[],'msg'=>'请选择半年之前的数据'];
  41. foreach ($_POST['games'] as $k=> $v){
  42. $rel[$k]['name']=$this->tableName($k);
  43. $rel[$k]['success']=$this->del($k,$time);
  44. if(strpos($k,'game_')===0){
  45. $k=$k.'_buy';
  46. $rel[$k]['name']=$this->tableName($k);
  47. $rel[$k]['success']=$this->del($k,$time);
  48. }
  49. }
  50. return ['status'=>1,'data'=>$rel,'msg'=>'成功'];
  51. }
  52. //表名 非游戏表
  53. $tables = DB::select("SELECT tablename FROM pg_tables WHERE tablename not like 'pg_%' and (tablename not like 'Z_%')and (tablename not like 'sql_%') and (tablename not like 'game_%')") ;
  54. $tables = array_map(function ($v){
  55. $a['gameCode'] = $v->tablename ;
  56. $a['name']=$this->tableName($v->tablename);
  57. $a['time']=!empty($this->fieldTimes($v->tablename))?$this->fieldTimes($v->tablename):$this->getOtherFields( $v->tablename);
  58. return $a;
  59. },$tables);
  60. //表分类
  61. $special=[];
  62. $normal=[];
  63. $other = [];
  64. foreach ($tables as $m=>$n) {
  65. if(in_array($n['gameCode'],$this->blacklist()))continue;
  66. if(in_array($n['name'],['未知','未用']))continue;
  67. if (in_array($n['gameCode'], $this->specialTable())) {
  68. $special[] = $n;
  69. } elseif (!empty($n['time'])) {
  70. $normal[]= $n;
  71. } else {
  72. $other[] = $n;
  73. }
  74. }
  75. $games = new GameType();
  76. $gamelist = $games->getGameList();
  77. return view('admin.systemSet/databaseClean', ['gamelist' => array_map(function ($v){ $v['gameCode']='game_'.$v['gameCode'];
  78. return $v;},$gamelist), 'special'=>$special,'other'=>$other,'normal'=>$normal,'limitdate' => date('Y-m-d 00:00:00', time() - 120 * 24 * 3600)]);
  79. }
  80. function del($table_name = '', $time = '')
  81. {
  82. if(!$time)return -1;
  83. $field = $this->fieldTimes($table_name);
  84. $other = $this->getOtherFields($table_name) ;
  85. $field=!empty($field)||empty($other)?$field:$this->fieldTimes($table_name,$other);
  86. $del = DB::table($table_name);
  87. if(isset($field['field'])){
  88. if ($field['type']=='varchar'||strpos($field['type'],'int')!==false){
  89. $time = strtotime($time);
  90. }
  91. $del= $del-> where($field['field'],'<',$time);
  92. }
  93. try{
  94. return $del->delete();
  95. }catch (\Exception $e){
  96. return $e->getMessage();
  97. }
  98. }
  99. /**
  100. * @param $table_name 表名
  101. * @param string $field_name like字段名
  102. * @return array 返回字段名称,类型,说明
  103. */
  104. private function fieldTimes($table_name,$field_name='time'){
  105. $field = DB::select("SELECT a.attname AS field,t.typname AS type ,col_description(a.attrelid,a.attnum) as comment FROM pg_class c,pg_attribute a,pg_type t
  106. WHERE c.relname = '" . $table_name . "' and a.attnum > 0 and a.attrelid = c.oid and a.atttypid = t.oid and a.attname like '%".$field_name."%'
  107. ORDER BY a.attnum;");
  108. $arr=[];
  109. if($field&&count($field)>=1){
  110. foreach ($field[0] as $k=>$v){
  111. $arr[$k]=$v;
  112. }
  113. }
  114. return $arr;
  115. }
  116. /**
  117. * 表备注
  118. * @return mixed
  119. */
  120. private function tableDescription()
  121. {
  122. $json = '{"withdraw_rule":"提现流水表","user_log_record":"用户日志记录","system_log":"管理员操作日志表","sixmoney_prize":"六合中奖记录表","sixmoney_buy":"六合购买记录表","prize_api_log":"开奖详情表","orderurl":"投注记录表","nagent_money":"级差代理资金记录表","nagent_edgerecharge":"级差代理代充","nagent_detailed":"级差代理详情表","money_take":"提现申请记录表","money_return":"回水记录表","money_red":"答题红包好运彩金表","money_recharge_remark":"充值记录备注表","money_recharge":"充值记录表","money_prize":"中奖记录表","money_nagent":"级差代理申请金额表","money_details":"资金详情表","money_count":"用户资金统计表","money_buy":"购买记录表","money_back":"资金反水记录表","money_agent":"代理资金申请表","message_read":"消息记录表","message":"消息提示表","lucky_money_take":"红包领取记录表","lucky_money":"红包发送记录表","lottery_money_log":"彩金记录表","long_record":"长龙记录表","long_main":"长龙期号表","logfile":"登录日志表","game_xy28_buy":"幸运28购买表","game_xy28":"幸运28游戏表","game_xjssc_buy":"新疆时时彩购买表","game_xjssc":"新疆时时彩游戏表","game_xjp28_buy":"新加坡28购买表","game_xjp28":"新加坡28游戏表","game_tw28_buy":"台湾28购买表","game_tw28":"台湾28游戏表","game_tjssc_buy":"天津时时彩购买表","game_tjssc":"天津时时彩游戏表","game_tjkl10_buy":"天津快乐10购买表","game_tjkl10":"天津快乐10游戏表","game_threessc_buy":"三分时时彩购买表","game_threessc":"三分时时彩游戏表","game_ssq_buy":"双色球购买表","game_ssq":"双色球游戏表","game_sixlottery_log":"极速六合彩开奖号码表","game_sixlottery":"六合彩游戏表","game_sixlottery_buy":"六合彩购买表","game_shssl_buy":"上海时时乐购买表","game_shssl":"上海时时乐游戏表","game_shkuai3_buy":"上海快3购买表","game_shkuai3":"上海快3游戏表","game_sfsixlottery_log":"极速六合彩开奖号码表","game_sfsixlottery_buy":"极速六合彩购买表","game_sfsixlottery":"极速六合彩游戏表","game_sd11x5_buy":"山东11x5购买表","game_sd11x5":"山东11x5游戏表","game_rule_info":"游戏投注号码统计金额","game_qqffc_buy":"QQ分分彩购买表","game_qqffc":"QQ分分彩游戏表","game_prize":"预期开奖时间表","game_preno":"预备游戏信息表","game_pl3_buy":"排列3购买表","game_pl3":"排列3游戏表","game_onessc_buy":"极速分分彩购买表","game_onessc":"极速分分彩游戏表","game_onepk10_buy":"极速pk10购买表","game_onepk10":"极速PK10游戏表","game_onekuai3_buy":"极速快3购买表","game_onekuai3":"极速快3游戏表","game_one28_buy":"极速28购买表","game_one28":"极速28游戏表","game_oggame_buy":"真人视讯购买表","game_oggame":"真人视讯表","game_luckyft_buy":"幸运飞艇购买表","game_luckyft":"幸运飞艇游戏表","game_jxkuai3_buy":"江西快3购买表","game_jxkuai3":"江西快3游戏表","game_jspk10_buy":"三分pk拾购买表","game_jspk10":"三分pk拾游戏表","game_jskuai3_buy":"江苏快3购买表","game_jskuai3":"江苏快3游戏表","game_js11x5_buy":"江苏11x5购买表","game_js11x5":"江苏11x5游戏表","game_jnd28_buy":"加拿大28购买表","game_jnd28":"加拿大28游戏表","game_hs28_buy":"韩式28购买表","game_hs28":"韩式28游戏表","game_hnkuai3_buy":"湖南快3购买表","game_hnkuai3":"湖南快3游戏表","game_hlj11x5_buy":"黑龙江11x5购买表","game_hlj11x5":"黑龙江11x5游戏表","game_hebkuai3":"河北快3购买表","game_hebkuai3":"河北快游戏表","game_hbkuai3_buy":"湖北快3购买表","game_hbkuai3":"湖北快3游戏表","game_gxkuai3_buy":"广西快3购买表","game_gxkuai3":"广西快3游戏表","game_gxkl10_buy":"广西快乐10购买表","game_gxkl10":"广西快乐10游戏表","game_gpxy28_buy":"高赔幸运28购买表","game_gpxy28":"高赔幸运28游戏表","game_gpjnd28_buy":"高赔加拿大28购买表","game_gpjnd28":"高赔加拿大28","game_gdkl10_buy":"广东快乐10购买表","game_gdkl10":"广东快乐10游戏表","game_gd11x5_buy":"广东11x5购买表","game_gd11x5":"广东11x5游戏表","game_fc3d_buy":"福彩3D购买表","game_fc3d":"福彩3D游戏表","game_dj28_buy":"东京28购买表","game_dj28":"东京28游戏表","game_dice_buy":"摇骰子购买表","game_dice":"摇骰子游戏表","game_cqssc_buy":"重庆时时彩购买表","game_cqssc":"重庆时时彩","game_cqkl10_buy":"重庆快乐10购买表","game_cqkl10":"重庆快乐10","game_bjpk10_buy":"北京PK10购买表","game_bjpk10":"北京PK10","game_betcount":"六合彩投注详情","feedback":"反馈表","game_ankuai3":"安徽快3游戏表","game_ahkuai3_buy":"安徽快3购买表","chat_users":"聊天室用户表","chat_message":"聊天室消息表","btrecord":"不知道是什么表,有用,","bet_count":"投注统计","account_token":"用户token表","oggame_betting_ogrbv":"OG视讯表","kygame_betting_ogrbv":"开元棋牌","aggame_betting_ogrbv":"AG视讯"}';
  123. return json_decode($json,1);
  124. }
  125. /**
  126. * 优先使用数组中的字段删除
  127. */
  128. private function getOtherFields ($table_name)
  129. {
  130. $other= [
  131. 'lucky_money'=>'created_at',
  132. 'oggame_betting_ogrbv'=>'AddTime',
  133. 'kygame_betting_ogrbv'=>'GameEndTime',
  134. ];
  135. return $other[$table_name]??'null';
  136. }
  137. /**
  138. * 获取表名称
  139. * @param $table
  140. * @return string
  141. */
  142. private function tableName($table){
  143. return $name= $this->table_names[$table]??'未知';
  144. }
  145. }