TestOrderErr.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. use PHPUnit\Framework\TestCase;
  3. define('APP_ID', 'OrderErr');
  4. define('BASE_ROOT_PATH', str_replace('/test', '', dirname(__FILE__)));
  5. require_once(BASE_ROOT_PATH . '/global.php');
  6. require_once(BASE_CORE_PATH . '/lrlz.php');
  7. require_once(BASE_ROOT_PATH . '/fooder.php');
  8. class TestOrderErr extends TestCase
  9. {
  10. public static function setUpBeforeClass(): void
  11. {
  12. Base::run_util();
  13. }
  14. //docker-compose run -d phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestOrderErr::testRecoverPdlog)( .*)?$/" --test-suffix TestOrderErr.php /var/www/html/test
  15. public function testRecoverPdlog()
  16. {
  17. $names = ['4','45','55','81','116'];
  18. foreach ($names as $name) {
  19. $filename = BASE_DATA_PATH . "/log/recover/{$name}.log";
  20. $this->recover($filename);
  21. }
  22. }
  23. private function recover($filename)
  24. {
  25. $reader = function ($fp)
  26. {
  27. while(!feof($fp))
  28. {
  29. $logs = [];
  30. for ($index = 0; $index < 100 && !feof($fp); $index++) {
  31. $log = fgets($fp);
  32. $logs[] = $log;
  33. }
  34. yield $logs;
  35. }
  36. };
  37. $filter = function ($lines)
  38. {
  39. $logs = [];
  40. $keys = explode(',','lg_member_id,lg_member_name,lg_add_time,lg_type,lg_order_sn,lg_av_amount,lg_desc,lg_available');
  41. foreach ($lines as $line)
  42. {
  43. $ret = preg_match('/VALUES[^(][(]{1}(?P<value>[^)]+)[)]{1}/u', $line, $matches);
  44. if($ret) {
  45. $data = $matches['value'];
  46. $values = explode(',',$data);
  47. $conveter = function ($value) {
  48. $val = trim($value, '\'');
  49. return $val;
  50. };
  51. $values = array_map($conveter,$values);
  52. $log = array_combine($keys,$values);
  53. $logs[] = $log;
  54. }
  55. }
  56. return $logs;
  57. };
  58. $mod_log = Model();
  59. $inserter = function ($logs) use ($mod_log)
  60. {
  61. // $mod_log->table('acclog')->insertAll($logs);
  62. foreach ($logs as $log) {
  63. $mod_log->table('acclog')->insert($log);
  64. }
  65. };
  66. $file = fopen($filename,'r');
  67. $batches = $reader($file);
  68. foreach ($batches as $batch) {
  69. $logs = $filter($batch);
  70. $inserter($logs);
  71. }
  72. fclose($file);
  73. }
  74. public function testSQLMatch()
  75. {
  76. $line =<<< line
  77. [cordispatcher 38-123975 2021-12-28 15:22:10 0.261198] ERR: DbError eno=1062 msg=Duplicate entry '2147483647' for key 'lrlz_pd_log.PRIMARY' sql=INSERT INTO `lrlz_pd_log` (lg_member_id,lg_member_name,lg_add_time,lg_type,lg_order_sn,lg_av_amount,lg_desc,lg_available) VALUES ('66025','5d322c4ee98781023b16d9a3c21cbfb4',1640676130,'order_pay','6861760694020130235975',-48,'下单,支付预存款,订单号: 6861760694020130235975','954256.6700')
  78. line;
  79. $keys = explode(',','lg_member_id,lg_member_name,lg_add_time,lg_type,lg_order_sn,lg_av_amount,lg_desc,lg_available');
  80. $ret = preg_match('/VALUES[^(][(]{1}(?P<value>[^)]+)[)]{1}/u', $line, $matches);
  81. if($ret) {
  82. $data = $matches['value'];
  83. $values = explode(',',$data);
  84. $conveter = function ($value)
  85. {
  86. $val = trim($value,'\'');
  87. return $val;
  88. };
  89. $values = array_map($conveter,$values);
  90. $log = array_combine($keys,$values);
  91. }
  92. }
  93. public function testGetLatestSending()
  94. {
  95. $mod = Model();
  96. $item = $mod->table('refill_detail')->field('min(order_time) as mintime')->where(['order_time' => ['egt',time()-5 * 86400],'order_state'=>30])->find();
  97. }
  98. }