argument('gid'); $good = Good::where('id', $gid)->first(); $good->is_key = 'D'; $good->save(); $keyNum = Trace::where('gid', $gid)->count(); $jishu = $good->group ?? $good->number; $leijia = 0; //生成key if (($num = ($good->number - $keyNum)) > 0) { $zNum = floor($num / 1000); $yNum = $num % 1000; $i = 0; while ($i < $zNum) { $data = []; for ($j = 0; $j < 1000; $j++) { $key = $good->skey . $this->num_random($good->bit); $data[] = [ 'gid' => $gid, 'key' => $key, 'group' => floor($leijia / $jishu), 'created_at' => Carbon::now(), 'updated_at' => Carbon::now(), ]; $leijia++; } Trace::insert($data); $i++; } for ($m = 0; $m < $yNum; $m++) { Trace::create([ 'gid' => $gid, 'key' => $good->skey . $this->num_random($good->bit), 'group' => floor($leijia / $jishu), ]); $leijia++; } } $keyNum = Trace::where('gid', $gid)->count(); if ($keyNum < $good->number) { Artisan::call("generate:key", ['gid' => $good->id]); } else { $ids = Trace::whereNull('slug')->pluck('id'); foreach ($ids as $id) { Trace::where('id', $id)->update(['slug' => Hashids::encode($id)]); } $good->is_key = 'T'; $good->save(); } } private function num_random($len = 16) { $num = ''; for ($i = 0; $i < $len; $i++) { $num .= rand(0, 9); } return $num; } }