addCard(['card_no' => $car_no,'card_key' => $card_key,'card_type' => $card_type,'amount' => $amount]); } public function testReadCSVFile() { $items = [ ['file' => 'phone-100.csv','card_type' => mtopcard\PhoneCardPaper, 'value' => 100], ['file' => 'oil-100.csv','card_type' => mtopcard\OilCardPaper, 'value' => 100], ['file' => 'oil-200.csv','card_type' => mtopcard\OilCardPaper, 'value' => 200], ['file' => 'oil-500.csv','card_type' => mtopcard\OilCardPaper, 'value' => 500], ['file' => 'oil-1000.csv','card_type' => mtopcard\OilCardPaper, 'value' => 1000], ]; $mod_card = Model('card_key'); foreach ($items as $item) { $file = BASE_DATA_PATH . '/cards/' . $item['file']; $amount = $item['value']; $card_type = $item['card_type']; $fn = fopen($file,"r"); if(empty($fn)) { Log::record("Open File {$item['file']} error.",Log::ERR); break; } else { Log::record("{$item['file']} start woring",Log::DEBUG); } while(! feof($fn)) { $line = trim(fgets($fn)); $results = explode(',',$line); if(empty($results)) { continue; } elseif(count($results) == 2) { $card_no = trim($results[0]); $card_key = trim($results[1]); } elseif(count($results) == 3) { $card_no = trim($results[1]); $card_key = trim($results[2]); } else { Log::record("分析数据失败:{$line}",Log::ERR); continue; } $this->addCard($mod_card,$card_no,$card_key,$card_type,$amount); } fclose($fn); } Log::record("All cards has been add to database.",Log::DEBUG); } private function addFile($file) { $filename = BASE_DATA_PATH . "/cards/{$file}"; if(!file_exists($filename)) { Log::record("{$file} not exists.",Log::ERR); return false; } $mod_card = Model('card_key'); $fileType = PHPExcel_IOFactory::identify($filename); $objReader = PHPExcel_IOFactory::createReader($fileType); $objPHPExcel = $objReader->load($filename); Log::record("{$file} begin....",Log::DEBUG); foreach ($objPHPExcel->getWorkSheetIterator() as $sheet) { $title = strtolower($sheet->getTitle()); Log::record("{$file} - {$title} start....",Log::DEBUG); [$type,$amount,$id] = explode('-',$title); Log::record("type = {$type} amount = {$amount}",Log::DEBUG); if($type == 'p') { $card_type = mtopcard\PhoneCardPaper; } elseif($type == 'o') { $card_type = mtopcard\OilCardPaper; } else { Log::record("{$filename} sheet {$title} name type error.",Log::ERR); return false; } if($amount <= 0) { Log::record("{$filename} sheet {$title} name amount error.",Log::ERR); return false; } foreach ($sheet->getRowIterator() as $row) { $index = $row->getRowIndex(); if ($index < 2) continue; $datas = []; foreach ($row->getCellIterator() as $cell) { $data = $cell->getValue(); $datas[] = $data; } if(empty($datas[1]) || empty($datas[2])) { continue; } $card_no = trim($datas[1]); $card_key = trim($datas[2]); if($this->check_cardno($card_no) && $this->check_cardkey($card_key)) { $this->addCard($mod_card,$card_no,$card_key,$card_type,$amount); } else { Log::record("{$card_no} {$card_key}",Log::ERR); } } } Log::record("{$file} end....",Log::DEBUG); return true; } private function check_cardno($card_no) { $count = self::CardNoLength; return preg_match("/^\d{{$count}}$/i",$card_no) > 0; } private function check_cardkey($card_no) { $count = self::CardKeyLength; return preg_match("/^[a-z0-9]{{$count}}$/",$card_no) > 0; } public function testAddCradFromExecl() { $files = ['lm-1.xlsx','by-1.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function testCancelOrder() { //2020-08-20 处理了一些订单。 $card_nos = ['1900000000668434', '1900000000668403', '1900000000668402', '1900000000668400', '1900000000668398', '1900000000668399', '1900000000668397', '1900000000668396', '1900000000668395', '1900000000668394', '1900000000668392', '1900000000668390', '1900000000668393', '1900000000668387', '1900000000668384', '1900000000668327', '1900000000040001', '1900000000569005', '1900000000264501', '1900000000569004']; $this->cancel_order($card_nos); } private function cancel_order($card_nos) { $mod_card = Model('card_key'); foreach ($card_nos as $card_no) { $items = $mod_card->field('*')->where(['card_no' => $card_no])->select(); $length = count($items); if($length > 1) { Log::record("有{$length}张卡号为{$card_no}的卡",Log::ERR); } elseif(empty($items)) { Log::record("未找到{$card_no}的卡号",Log::ERR); } else { $order_id = intval($items[0]['order_id']); $order_info = Model('vr_order')->getOrderInfo(['order_id' => $order_id]); $vr_logic = Logic('vr_order'); $result = $vr_logic->changeOrderStateCancel($order_info,'','管理员申请退款.'); Log::record("{$card_no} : {$result['state']}",Log::DEBUG); } } } public function test20200821_addCard() { $files = ['fen-p-200.xlsx','fen-p-500.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200902_addCard() { $files = ['fen-p-100-1.xlsx','fen-p-100-2.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200902_1_addCard() { $files = ['100-494-643.xlsx','200-779144-193.xlsx','200-779294-343.xlsx','500-794-843.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200903_addCard() { $files = ['100-895-943.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200904_addCard() { $files = ['100-644-743.xlsx','100-844-893.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200904_1_addCard() { $files = ['200-344-353.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200904_2_addCard() { $files = ['200-344-393.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200904_3_addCard() { $files = ['200-344-393.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200904_4_addCard() { $files = ['100-344-443.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200905_addCard() { $files = ['200-8344-8443.xlsx' , '100-144-243.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200905_1_addCard() { $files = ['100-294-343.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200905_2_addCard() { $files = ['200-244-343.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200905_3_addCard() { $files = ['100-669944-669993-670044-670093.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200906_addCard() { $files = ['200-807944-808043.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200906_1_addCard() { $files = ['100-1900000000669994-1900000000670043.xlsx' , '100-670844-893.xlsx' , '200-1900000000808194-1900000000808243.xlsx' , 'p100-670-644-693.xlsx' , 'p100-670894-943.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200907_addCard() { $files = ['p-100-670-544-593.xlsx', 'p-100-670-594-643.xlsx', 'p-100-670694-793.xlsx', 'p-100-670794-843.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200907_1_addCard() { $files = ['p200-807944-808043.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200908_addCard() { $files = ['话费100元670号段444-543.xlsx', '话费200元808系列094-143.xlsx', '话费200元808系列344-443.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200909_addCard() { $files = ['200元话费808系列895-943.xlsx','话费100元669列594-693.xlsx','话费100元669号段794-943.xlsx','话费100元699系列444-543.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200909_1_addCard() { $files = ['话费200元808系列444-543.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200910_addCard() { $files = ['100元话费669系列394-443.xlsx','100元话费699系列544-593.xlsx','200元话费808系列693-743.xlsx', '200元话费808系列744-843zn.xlsx','200元话费808系列844-893.xlsx','话费100元669号段694-793.xlsx', '话费200元808系列544-643.xlsx','话费100元668号段094-193zn.xlsx','话费100元 668号段444-493zn.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200916_addCard() { $files = ['100元668044——093.xlsx','话费100元670系列094-143.xlsx', '话费200元779244——779293.xlsx','话费200元808系列044-093.xlsx','话费200元808系列144-193.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200917_addCard() { $files = ['加油1000元569202——250.xlsx','加油1000元569251——300.xlsx','话费100元670系列244-293.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200918_addCard() { $files = ['200元810344——443.xlsx','加油1000元569301——500(200张).xlsx', '话费100元670系列244-293.xlsx', '话费200元809系列944-810系列143.xlsx','话费200元810系列144-343.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200926_addCard() { $files = ['100元话费669系列144-293.xlsx','100元话费669系列294-393卡.xlsx', '100元话费669系列394-443 50张.xlsx','100元话费669系列544-593 50张.xlsx', '话费100元669系列444-543.xlsx','加油卡1000元569系列071-150.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200927_addCard() { $files = ['加油卡1000元569系列51-70.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200927_01_addCard() { $files = ['500油卡264851-950.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200928_addCard() { $files = ['liumin500油卡264651-750.xlsx','加油卡500元264系列751-850.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20200928_01_addCard() { $files = ['668 944-043.xlsx','话费100元 669号段044-143.xlsx','加油卡200元备用卡124251——124300.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function testCardSequence() { $card_key = Model('card_key'); $count = 1000; $i = 0; $pairs = []; $pair = ['start' => 0,'end' => 0]; while (true) { $start = $i * $count; $items = $card_key->field('*')->order('card_no asc')->limit("{$start},{$count}")->select(); if(empty($items)) { break; } $i++; foreach ($items as $item) { try { $card_no = intval($item['card_no']); if($pair['end'] + 1 == $card_no) { $pair['end'] = $card_no; } else { $pairs[] = $pair; $pair = ['start' => $card_no,'end' => $card_no]; } } catch (Exception $ex) { Log::record($ex->getMessage(),Log::DEBUG); } } } foreach ($pairs as $pair) { $count = $pair['end'] - $pair['start'] + 1; Log::record("{$pair['start']}------{$pair['end']} count = {$count}",Log::DEBUG); } } public function testCardCheck() { $card_no = 1000113300023292731; $topcard = Model('topcard'); $items = $topcard->get_cards($card_no - 500,$card_no + 500); } private function find_card($file,$card_no) { $fileType = PHPExcel_IOFactory::identify($file); $objReader = PHPExcel_IOFactory::createReader($fileType); $objPHPExcel = $objReader->load($file); foreach ($objPHPExcel->getWorkSheetIterator() as $sheet) { foreach ($sheet->getRowIterator() as $row) { $index = $row->getRowIndex(); if ($index < 2) continue; $datas = []; foreach ($row->getCellIterator() as $cell) { $data = $cell->getValue(); $datas[] = $data; } if(empty($datas[1]) || empty($datas[2])) { continue; } $no = trim($datas[1]); if($no == $card_no) { return true; } } } return false; } public function testFindCard() { $finder = function ($card_no) { $dir = BASE_DATA_PATH . "/cards/old/"; if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { $file_name = $dir . $file; $ext = pathinfo($file_name)['extension']; if($ext == 'xlsx') { $ret = $this->find_card($file_name,$card_no); if($ret) { Log::record("{$card_no} in {$file}",Log::DEBUG); break; } } } closedir($dh); } }; $cards = ['1900000000669244','1900000000669294','1900000000669344','1900000000669094','1900000000669144', '1900000000669194','1900000000669394','1900000000669044','1900000000669994']; foreach ($cards as $card_no) { Log::record("{$card_no} is finding....",Log::DEBUG); $finder($card_no); Log::record("{$card_no} over.",Log::DEBUG); } } public function testModifyCardno() { $changer = function ($start,$end) { $card_key = Model('card_key'); $cond = ['_multi' => true, ['egt', $start], ['lt', $end]]; $items = $card_key->field('*')->where(['card_no&card_no' => $cond])->order('card_no asc')->select(); return $items; }; $cards = $changer('1900000000699000','1900000000700000'); $card_key = Model('card_key'); foreach ($cards as $card) { $card_id = intval($card['card_id']); $card_no = intval($card['card_no']) - 30000; $ret = $card_key->where(['card_id' => $card_id])->update(['card_no' => "{$card_no}"]); Log::record("{$card_no} ret = {$ret}",Log::DEBUG); } } public function test20201013_addCard() { $files = ['p100-671594-671643.xlsx','话费100元671794-671843.xlsx','话费100元671844-671943.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function test20201013_01_addCard() { $files = ['话费100元671系列444-493.xlsx','话费100元671系列494-593.xlsx','话费100元671系列644-693.xlsx','话费100元671系列694-793.xlsx']; foreach ($files as $file) { $this->addFile($file); } } public function testAddCard() { $finder = function () { $files = []; $dir = BASE_DATA_PATH . "/cards/"; $dh = opendir($dir); if($dh) { while (($file = readdir($dh)) !== false) { $file_name = $dir . $file; $ext = pathinfo($file_name)['extension']; if($ext == 'xlsx') { $files[] = $file; } } closedir($dh); } return $files; }; $files = $finder(); foreach ($files as $file) { $this->addFile($file); } } } //docker-compose -f ./docker-compose-dev.yml run phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestAddData::testCancelOrder)( .*)?$/" --test-suffix TestAddData.php /var/www/html/test //docker-compose -f ./docker-compose-dev.yml run phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestAddData::test20200821_addCard)( .*)?$/" --test-suffix TestAddData.php /var/www/html/test //docker-compose run phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestAddData::testAddCard)( .*)?$/" --test-suffix TestAddData.php /var/www/html/test //docker-compose run phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestAddData::testModifyCardno)( .*)?$/" --test-suffix TestAddData.php /var/www/html/test