clear($start_date,$end_date); } public function testPdlogClear() { $start_date = strtotime('2021-09-11'); $end_date = strtotime('2021-09-13'); $clear = new refill\pdlog_clear(); $clear->clear($start_date,$end_date); } //docker-compose run phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestRefillClear::testClearFirstDay)( .*)?$/" --test-suffix TestRefillClear.php /var/www/html/test public function testClearFirstDay() { $start_date = strtotime($this->earlist_orderday()); $end_date = $start_date + 86400; $clear = new refill\order_clear(); $clear->clear($start_date,$end_date); } //2021年,8、9、10、11 //docker-compose run -d phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestRefillClear::testDecember20)( .*)?$/" --test-suffix TestRefillClear.php /var/www/html/test public function testDecember20() { $start_date = strtotime('2021-12-20'); $end_date = strtotime('2022-12-28'); $clear = new refill\order_clear(); $clear->clear($start_date,$end_date); } //docker-compose run -d phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestRefillClear::test202202)( .*)?$/" --test-suffix TestRefillClear.php /var/www/html/test public function test202202() { $start_date = strtotime('2022-02-21'); $end_date = strtotime('2022-02-24'); $clear = new refill\order_clear(); $clear->clear($start_date,$end_date); } //docker-compose run -d phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestRefillClear::test202203)( .*)?$/" --test-suffix TestRefillClear.php /var/www/html/test public function test202203() { $start_date = strtotime('2022-03-04'); $end_date = strtotime('2022-03-05'); $clear = new refill\order_clear(); $clear->clear($start_date,$end_date); } private function earlist_orderday() { $mod_refill = Model('refill_order'); $item = $mod_refill->table('refill_order')->field('order_time')->order('order_id asc')->find(); if(empty($item)) { return false; } else { $order_time = intval($item['order_time']); $day_stamp = date('Y-m-d',$order_time); return $day_stamp; } } public function testEarlist() { $time = $this->earlist_orderday(); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// 以下代码为清除pdlog // const pdlog_table_name = 'pd_log_bak'; const pdlog_table_name = 'pd_log'; //docker-compose run -d phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestRefillClear::testLog202202)( .*)?$/" --test-suffix TestRefillClear.php /var/www/html/test public function testLog202202() { $start_date = strtotime('2022-02-18'); $end_date = strtotime('2022-02-19'); $clear = new refill\pdlog_clear(); $clear->clear($start_date,$end_date); } //docker-compose run -d phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestRefillClear::testLog202203)( .*)?$/" --test-suffix TestRefillClear.php /var/www/html/test public function testLog202203() { $start_date = strtotime('2022-03-03'); $end_date = strtotime('2022-03-05'); $clear = new refill\pdlog_clear(); $clear->clear($start_date,$end_date); } public function testImport() { $filename = BASE_DATA_PATH . "/log/pdlog/2022-01-02-1641055749.csv"; $this->import_pdlog($filename); } //docker-compose run -d phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestRefillClear::testImportNine)( .*)?$/" --test-suffix TestRefillClear.php /var/www/html/test public function testImportNine() { $filename = BASE_DATA_PATH . "/log/pdlog/2021-09-01.csv"; $this->import_pdlog($filename); } //docker-compose run -d phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestRefillClear::testImportTen)( .*)?$/" --test-suffix TestRefillClear.php /var/www/html/test public function testImportTen() { $filename = BASE_DATA_PATH . "/log/pdlog/2022-01-03-1641141137.csv"; $this->import_pdlog($filename); } private function import_pdlog($filename,$start_line = 0) { $position = function ($fp,$line) { $index = 0; while(!feof($fp) && $index < $line) { $items = fgetcsv($fp); $index += 1; } }; $reader = function ($fp) { while(!feof($fp)) { $logs = []; for ($index = 0; $index < 200 && !feof($fp); $index++) { $log = fgetcsv($fp); $logs[] = $log; } yield $logs; } }; $converter = function ($logs) { $result = []; $sns = []; foreach ($logs as $log) { $item = []; $logid = $log[0]; $item['lg_id'] = $log[0]; $item['lg_member_id'] = $log[1]; $item['lg_member_name'] = $log[2]; $item['lg_admin_name'] = $log[3]; $item['lg_type'] = $log[4]; $item['lg_av_amount'] = $log[5]; $item['lg_freeze_amount'] = $log[6]; $item['lg_add_time'] = $log[7]; $item['lg_desc'] = $log[8]; $item['lg_order_sn'] = $log[9]; $item['lg_available'] = $log[10]; $sns[] = $log[9]; $result[$logid] = $item; } return [$result,$sns]; }; $mod_refill = Model('refill_order'); $filter = function ($logs,$sns) use($mod_refill) { $sns = array_unique($sns); $sn2sn = []; $orders = $mod_refill->table('refill_order')->field('order_sn')->where(['order_sn' => ['in', $sns]])->master(true)->select(); foreach ($orders as $order) { $sn = $order['order_sn']; $sn2sn[$sn] = $sn; } $inserts = []; $dels = []; foreach ($logs as $lgid => $log) { $sn = $log['lg_order_sn']; if(array_key_exists($sn,$sn2sn)) { $inserts[] = $log; } else { $dels[] = $log; } } return [$inserts,$dels]; }; $inserter = function ($records) { if(empty($records)) return false; try { $ret = Model()->table(self::pdlog_table_name)->insertAll($records); return $ret; } catch (Exception $ex) { Log::record($ex->getMessage(),Log::ERR); return false; } }; $delname = BASE_DATA_PATH . "/log/pdlog/del.csv"; $fDel = fopen($delname,'a+'); $delter = function ($records) use ($fDel) { foreach ($records as $item) { $log = []; $log[] = $item['lg_id']; $log[] = $item['lg_member_id']; $log[] = $item['lg_member_name']; $log[] = $item['lg_admin_name']; $log[] = $item['lg_type']; $log[] = $item['lg_av_amount']; $log[] = $item['lg_freeze_amount']; $log[] = $item['lg_add_time']; $log[] = $item['lg_desc']; $log[] = $item['lg_order_sn']; $log[] = $item['lg_available']; fputcsv($fDel,$log); } }; //////////////////////////////////////////////////////////////////////////////////////////////////////////////// $fLog = fopen($filename,'r'); $position($fLog,$start_line); $logger = $reader($fLog); foreach ($logger as $items) { [$logs, $sns] = $converter($items); [$inserts, $dels] = $filter($logs, $sns); $inserter($inserts); $delter($dels); } fclose($fLog); fclose($fDel); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// } }