asynclog.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. /**
  3. * 异步流水
  4. * Class ModelAsyncLog
  5. * Created by: Owen
  6. * Created on: 2020/3/18 19:32
  7. */
  8. class ModelAsynclog{
  9. public function cacheIntoDb(){
  10. $log = [
  11. 'SLOT' => [ // 老虎机流水
  12. 'length'=> 10000,
  13. 'tb' => otable::slotlog(),
  14. 'tbType'=> true,
  15. ],
  16. 'ASSETS' => [ // 财产流水
  17. 'length'=> 10000,
  18. 'tb' => otable::Assetslog(),
  19. 'tbType'=> true,
  20. ],
  21. 'ABNORMAL' => [ // 异常流水
  22. 'length'=> 10000,
  23. 'tb' => otable::abnormalSta(),
  24. 'tbType'=> false,
  25. ],
  26. ];
  27. foreach ($log as $logClass=>$classInfo){
  28. $ret = self::pop($logClass,$classInfo['length']);
  29. if(empty($ret)){
  30. continue;
  31. }
  32. $sqlKeys = array_keys($ret[0]);
  33. $usersArr = [];
  34. foreach ($ret as $user){
  35. $index = $user['uid'] % 100;
  36. $usersArr[$index][] = $user;
  37. }
  38. $sqlKeyStr = "";
  39. foreach ($sqlKeys as $sqlKey){
  40. $sqlKeyStr .= "`{$sqlKey}`,";
  41. }
  42. $sqlKeyStr = trim($sqlKeyStr,',');
  43. foreach ($usersArr as $userIndex => $userArr){
  44. $tb = $classInfo['tbType']?$classInfo['tb'].$userIndex%100:$classInfo['tb'];
  45. $sql= "INSERT INTO {$tb} ({$sqlKeyStr}) VALUE ";
  46. $sqlValueStr = "";
  47. foreach ($userArr as $row){
  48. $sqlValueStr .= "(";
  49. foreach ($sqlKeys as $sqlKey){
  50. $sqlValueStr .= "'{$row[$sqlKey]}',";
  51. }
  52. $sqlValueStr = trim($sqlValueStr,',');
  53. $sqlValueStr .= "),";
  54. }
  55. $sqlValueStr = trim($sqlValueStr,',');
  56. $sql .= $sqlValueStr;
  57. oo::commonOprDb('common')->query($sql);
  58. }
  59. }
  60. }
  61. /**
  62. * 入队
  63. * @param $class
  64. * @param $param
  65. * @return bool
  66. * Created by: Owen
  67. * Created on: 2020/3/19 17:58
  68. */
  69. public function push($class,$param){
  70. if(is_array($param)){
  71. $param = json_encode($param);
  72. }
  73. $key = okeys::CacheIntoDb($class);
  74. $ret = oo::commonOprRedis('common')->rPush($key,$param);
  75. if($ret){
  76. return true;
  77. }
  78. return false;
  79. }
  80. /**
  81. * 出队
  82. * @param $class
  83. * @param int $length
  84. * @return array
  85. * Created by: Owen
  86. * Created on: 2020/3/23 14:18
  87. */
  88. public function pop($class,$length = 1000){
  89. $key = okeys::CacheIntoDb($class);
  90. $ret = oo::commonOprRedis('common')->lGetRange($key,0,$length);
  91. $return = [];
  92. foreach ($ret as $row){
  93. $return[] = json_decode($row,true);
  94. }
  95. oo::commonOprRedis('common')->lTrim($key,$length,-1);
  96. return $return;
  97. }
  98. }