123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- <?php
- namespace App\Console\Commands;
- use App\Models\Meta;
- use BlockMatrix\EosRpc\ChainFactory;
- use BlockMatrix\EosRpc\EosRpc;
- use BlockMatrix\EosRpc\WalletFactory;
- use GuzzleHttp\Client;
- use Illuminate\Console\Command;
- use Illuminate\Support\Facades\Log;
- use Illuminate\Support\Facades\Storage;
- use Org\Multilinguals\Apollo\Client\ApolloClient;
- use ZanySoft\Zip\Zip;
- class Trace extends Command
- {
- /**
- * The name and signature of the console command.
- *
- * @var string
- */
- protected $signature = 'trace';
- /**
- * The console command description.
- *
- * @var string
- */
- protected $description = '自动打zip包,并进行上链操作';
- protected $save_dir = '';
- /**
- * Create a new command instance.
- *
- * @return void
- */
- public function __construct()
- {
- parent::__construct();
- $this->save_dir = '';
- }
- /**
- * Execute the console command.
- *
- * @return mixed
- */
- public function handle()
- {
- $this->line('-----------traceing---------');
- $metas = Meta::where('status',0)->get();
- foreach($metas as $meta){
- $this->save_dir = storage_path($meta['patch_num']);
- if(!is_dir($this->save_dir)){
- mkdir($this->save_dir);
- }
- $files = [];
- //1.生成txt
- $myfile = fopen($this->save_dir."/批次信息.txt", "w");
- $txt = "批次号:{$meta['patch_num']}\n";
- $txt .= "鸡种:{$meta['variety']}\n";
- $txt .= "年龄:{$meta['age']}\n";
- $txt .= "口粮:{$meta['food']}\n";
- $txt .= "水源:{$meta['water']}\n";
- fwrite($myfile, $txt);
- fclose($myfile);
- array_push($files,$this->save_dir."/批次信息.txt");
- //2.生成质检信息
- $myfile = fopen($this->save_dir."/质检信息.html", "w");
- $txt = $meta['report'];
- fwrite($myfile, $txt);
- fclose($myfile);
- array_push($files,$this->save_dir."/质检信息.html");
- $varietyImg = $this->downloadImg($this->save_dir,$meta['variety_img'],'鸡种');
- array_push($files,$varietyImg);
- $foodImg = $this->downloadImg($this->save_dir,$meta['food_img'],'口粮');
- array_push($files,$foodImg);
- $waterImg = $this->downloadImg($this->save_dir,$meta['water_img'],'水源');
- array_push($files,$waterImg);
- $farms = \GuzzleHttp\json_decode($meta['farm'],true);
- foreach ($farms as $k=>$v){
- $farmImg = $this->downloadImg($this->save_dir,$v,'农场'.($k+1));
- array_push($files,$farmImg);
- }
- //生成zip包
- $zipPath = storage_path().'/'.$meta['patch_num'].".zip";
- $zip = Zip::create($zipPath);
- $zip->add($this->save_dir,true);
- $zip->close();
- $md5 = md5_file($zipPath);
- $this->line($zipPath.'ZIP包MD5码:'.$md5);
- $zipUrl = Storage::put('/trace/'.date('Ym'), file_get_contents($zipPath));
- //Meta::where('patch_num',$meta['patch_num'])->update(['md5'=>$md5,'zip'=>$zipUrl]);
- $row = $this->transcation($md5);
- var_dump($row);
- }
- }
- //下载远程图片到服务器
- protected function downloadImg($path,$img,$name=''){
- $client = new Client(['verify' => false]); //忽略SSL错误
- if($name){
- $path = $path .'/'. $name . '.jpg';
- }else{
- $path = $path .'/'. md5(time()) . '.jpg';
- }
- $response = $client->get($img, ['save_to' => $path]); //保存远程url到文件
- if ($response->getStatusCode() == 200) {
- return $path;
- }
- Log::debug('下载'.$img.'失败');
- return false;
- }
- protected function transcation($md5){
- $api = (new ChainFactory())->api(base_path());
- $walapi = (new WalletFactory())->api(base_path());
- $eos = (new EosRpc($api, $walapi));
- $walletPassword = "PW5KFL5mQSWauhwnYTMFU3v9ALhkTCuCkfvVJgzJTpRKZysygTJZe";
- $eos->setWalletInfo("default", $walletPassword);
- $trans = $eos->transfer("alice", "bob", "1.0000 SYS", $md5);
- $aliceBalance = $api->getCurrencyBalance('eosio.token', 'alice', 'SYS');
- $bobBalance = $api->getCurrencyBalance('eosio.token', 'bob', 'SYS');
- $row = $api->getBlockHeaderState($trans);
- return response()->json([
- 'trans' => $trans,
- 'alice' => $aliceBalance,
- 'bob' => $bobBalance,
- 'row' => $row,
- ]);
- }
- }
|