123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- <?php
- use PHPUnit\Framework\TestCase;
- define('APP_ID', 'test');
- define('BASE_ROOT_PATH', str_replace('/test', '', dirname(__FILE__)));
- require_once(BASE_ROOT_PATH . '/global.php');
- require_once(BASE_CORE_PATH . '/lrlz.php');
- require_once(BASE_ROOT_PATH . '/fooder.php');
- require_once(BASE_HELPER_PATH . '/PHPExcel/PHPExcel.php');
- require_once(BASE_HELPER_PATH . '/refill/RefillFactory.php');
- class TestRefillUtil extends TestCase
- {
- public static function setUpBeforeClass(): void
- {
- Base::run_util();
- }
- //docker-compose run phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestRefillUtil::testRefillFromExecl)( .*)?$/" --test-suffix TestRefillUtil.php /var/www/html/test
- public function testRefillFromExecl()
- {
- $filename = BASE_ROOT_PATH . "/data/upload/refill/cards.xls";
- if(!file_exists($filename)) {
- Log::record("{$filename} not exists.",Log::ERR);
- return false;
- }
- $field_reader = function ($filename)
- {
- $fileType = PHPExcel_IOFactory::identify($filename);
- $objReader = PHPExcel_IOFactory::createReader($fileType);
- $objPHPExcel = $objReader->load($filename);
- foreach ($objPHPExcel->getWorkSheetIterator() as $sheet)
- {
- foreach ($sheet->getRowIterator() as $row)
- {
- $items = [];
- foreach ($row->getCellIterator() as $cell) {
- $items[] = $cell->getValue();
- }
- yield $items;
- }
- }
- };
- $cardno_checker = function ($card_no)
- {
- $card_no = trim($card_no);
- $ret = preg_match("/^\d{11}$/i",$card_no) > 0;
- if($ret) {
- return $card_no;
- } else {
- return false;
- }
- };
- $amount_checker = function ($amount)
- {
- $amount = floatval($amount) + 0.0005;
- $amount = intval($amount);
- if($amount > 0) {
- return $amount;
- } else {
- return false;
- }
- };
- $mchid = 10239;
- $buyer_id = 66221;
- $sender = function ($card_no, $amount, $order_sn) use ($mchid, $buyer_id)
- {
- $params = [ 'mchid' => $mchid,
- 'buyer_id' => $buyer_id,
- 'amount' => $amount,
- 'mch_order' => $order_sn,
- 'card_no' => $card_no
- ];
- $ret = refill\util::push_add($params);
- return $ret;
- };
- $record_csv = fopen(BASE_ROOT_PATH . "/data/upload/refill/record.csv", 'a+');
- $items = $field_reader($filename);
- foreach ($items as $item)
- {
- Log::record("{$item[0]}:{$item[1]}", Log::DEBUG);
- $card_no = $cardno_checker($item[0]);
- $amount = $amount_checker($item[1]);
- if ($card_no != false && $amount != false) {
- $order_sn = $this->make_sn();
- $ret = $sender($card_no, $amount, $order_sn);
- Log::record("{$order_sn}:{$card_no}:{$amount}:{$ret}", Log::DEBUG);
- $order_time = date('Y-m-d H:i:S',time());
- $row = [$order_sn,$card_no, $amount,$order_time];
- if($ret) {
- $row[] = 'SUCC';
- } else {
- $row[] = 'FAIL';
- }
- fputcsv($record_csv,$row);
- }
- sleep(1);
- }
- fclose($record_csv);
- }
- private function make_sn()
- {
- return mt_rand(1000, 9999)
- . sprintf('%010d', time())
- . sprintf('%06d', (float)microtime() * 1000000);
- }
- public function testDiffFromExecl()
- {
- $field_reader = function ($filename)
- {
- $fileType = PHPExcel_IOFactory::identify($filename);
- $objReader = PHPExcel_IOFactory::createReader($fileType);
- $objPHPExcel = $objReader->load($filename);
- foreach ($objPHPExcel->getWorkSheetIterator() as $sheet)
- {
- foreach ($sheet->getRowIterator() as $row)
- {
- $items = [];
- foreach ($row->getCellIterator() as $cell) {
- $items[] = $cell->getValue();
- }
- yield $items;
- }
- }
- };
- $cardno_checker = function ($card_no)
- {
- $card_no = trim($card_no);
- $ret = preg_match("/^\d{11}$/i",$card_no) > 0;
- if($ret) {
- return $card_no;
- } else {
- return false;
- }
- };
- $differ = function ($left,$right)
- {
- $result = [];
- $ll = count($left);
- $lr = count($right);
- $i = $j = 0;
- while ($i < $ll && $j < $lr)
- {
- if ($left[$i] > $right[$j]) {
- $j += 1;
- } elseif ($left[$i] === $right[$j]) {
- $i += 1;
- $j += 1;
- } else {
- $result[] = $left[$i];
- $i += 1;
- }
- }
- for (; $i < $ll; $i++) {
- $result[] = $left[$i];
- }
- return $result;
- };
- $filename = BASE_ROOT_PATH . "/data/upload/refill/all.xls";
- if(!file_exists($filename)) {
- Log::record("{$filename} not exists.",Log::ERR);
- return false;
- }
- $items = $field_reader($filename);
- $left = [];
- $right = [];
- foreach ($items as $item) {
- $noa = $cardno_checker($item[0]);
- $nob = $cardno_checker($item[2]);
- if ($noa != false) $left[] = $noa;
- if ($nob != false) $right[] = $noa;
- }
- sort($left);
- sort($right);
- $result = $differ($left,$right);
- $csv = fopen(BASE_ROOT_PATH . "/data/upload/refill/diff.csv", 'a+');
- foreach ($result as $item) {
- $row = [$item,10];
- fputcsv($csv,$row);
- }
- fclose($csv);
- }
- }
|