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->line('------开始:' . $meta['patch_num']); $this->save_dir = storage_path($meta['patch_num']); if (!is_dir($this->save_dir)) { mkdir($this->save_dir); } //1.生成txt $this->line('------开始生成txt:' . $meta['patch_num']); $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); //2.生成质检信息 $this->line('------开始生成质检信息:' . $meta['patch_num']); $myfile = fopen($this->save_dir . "/质检信息.html", "w"); $txt = $meta['report']; fwrite($myfile, $txt); fclose($myfile); $this->line('------开始下载图片:' . $meta['patch_num']); $varietyImg = $this->downloadImg($this->save_dir, $meta['variety_img'], '鸡种'); $foodImg = $this->downloadImg($this->save_dir, $meta['food_img'], '口粮'); $waterImg = $this->downloadImg($this->save_dir, $meta['water_img'], '水源'); $farms = \GuzzleHttp\json_decode($meta['farm'], true); foreach ($farms as $k => $v) { $farmImg = $this->downloadImg($this->save_dir, $v, '农场' . ($k + 1)); } //生成zip包 $this->line('------开始生成ZIP:' . $meta['patch_num']); $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('------ZIP包MD5码:' . $md5); $zipUrl = Storage::put('/trace/' . date('Ym'), file_get_contents($zipPath)); $data = [ 'md5' => $md5, 'zip' => $zipUrl ]; $this->line('zip地址:' . $zipUrl); $this->line('------开始上链:' . $md5); $row = $this->transcation($md5); $this->line('------上链结果:' . var_export($row, true)); if (isset($row['transaction_id']) && $row['transaction_id']) { $data['transaction_id'] = $row['transaction_id']; $data['block_height'] = $row['block_num']; $data['block_time'] = Carbon::parse($row['block_time'])->toDateTimeString(); $data['status'] = 1; } else { $data['status'] = 2; } Meta::where('patch_num', $meta['patch_num'])->update($data); } $this->line('-----------traceing-end--------'); } //下载远程图片到服务器 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; } $this->line('下载' . $img . '失败'); return false; } protected function transcation($md5) { try{ $api = (new ChainFactory())->api(base_path()); $walapi = (new WalletFactory())->api(base_path()); $eos = (new EosRpc($api, $walapi)); $accountA = "chxqsuyuanaa"; $accountB = "chxqsuyuanbb"; $coinCode = "EOS"; $coin = "0.1";//每次转多少 $walletPassword = "PW5KiK4oBMgjvxjhYxJzeRWNYtLot7GbH9wLM8pDmTH17yzUb4GTP"; $walletName = "caihongxingqiu"; $eos->setWalletInfo($walletName, $walletPassword); $aliceBalance = $api->getCurrencyBalance('eosio.token', $accountA, $coinCode); $bobBalance = $api->getCurrencyBalance('eosio.token', $accountB, $coinCode); $this->line('balance-a:'.var_export($aliceBalance,true)); $this->line('balance-b:'.var_export($bobBalance,true)); $balaceA = 0; $balaceB = 0; if (isset($aliceBalance[$accountA])) { $balaceA = $aliceBalance[$accountA][0]; } if (isset($bobBalance[$accountB])) { $balaceB = $bobBalance[$accountB][0]; } if ($balaceA == 0 && $balaceB == 0) { $this->line("两个账号都没钱了,快充钱"); return false; } if ($balaceA >= $coin * 2) { $trans = $eos->transfer($accountA, $accountB, $coin . " " . $coinCode, $md5, 'eosio.token', false); }elseif ($balaceB >= $coin * 2) { $trans = $eos->transfer($accountB, $accountA, $coin . " " . $coinCode, $md5, 'eosio.token', false); }else{ $this->line('账号余额不足'); return false; } Log::debug('transinfo:'.\GuzzleHttp\json_encode($trans)); return [ 'transaction_id' => $trans['trans']['transaction_id'] ?? '', 'block_num' => $trans['trans']['processed']['block_num'] ?? 0, 'block_time' => $trans['trans']['processed']['block_time'] ?? '' ]; }catch (\Exception $exception){ $this->line('上链失败:'.$exception->getMessage()); return false; } } }