|
|
@@ -31,36 +31,90 @@ class AnimeCheckImgUrlCommand extends Command
|
|
|
$time_start = microtime(true);
|
|
|
|
|
|
// 获取待执行的动漫对话数据
|
|
|
- $data = DB::table('mp_animes')->where('status', '执行中')->select('roles', 'scenes')->get();
|
|
|
+ $data = DB::table('mp_animes')->where('generate_status', '执行中')->select('id', 'roles', 'scenes')->get();
|
|
|
|
|
|
- // foreach ($data as $val) {
|
|
|
- // $roles = json_decode($val->roles, true);
|
|
|
- // $scenes = json_decode($val->scenes, true);
|
|
|
- // $role_count = count($roles);
|
|
|
- // $scene_count = count($scenes);
|
|
|
- // $role_success_count = 0;
|
|
|
- // $scene_success_count = 0;
|
|
|
- // for ($i=0; $i < $role_count; $i++) {
|
|
|
- // if (isset($roles[$i]['url']) && !empty($roles[$i]['url'])) {
|
|
|
- // $role_success_count++;
|
|
|
- // }
|
|
|
- // }
|
|
|
- // for ($i=0; $i < $scene_count; $i++) {
|
|
|
- // if (isset($scenes[$i]['url']) && !empty($scenes[$i]['url'])) {
|
|
|
- // $scene_success_count++;
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
- // if ($role_success_count == $role_count && $scene_success_count == $scene_count) {
|
|
|
- // // 更新状态为已完成
|
|
|
- // DB::table('mp_animes')->where('status', '执行中')->update(['status' => '已完成']);
|
|
|
- // dLog('generate')->info('动漫对话图片已生成完成');
|
|
|
- // }
|
|
|
- // }
|
|
|
- // $this->info('检查完成');
|
|
|
+ foreach ($data as $item) {
|
|
|
+ $id = getProp($item, 'id');
|
|
|
+ $roles = json_decode(getProp($item, 'roles'), true);
|
|
|
+ $scenes = json_decode(getProp($item, 'scenes'), true);
|
|
|
+ $role_count = count($roles);
|
|
|
+ $scene_count = count($scenes);
|
|
|
+ $role_success_count = 0;
|
|
|
+ $scene_success_count = 0;
|
|
|
+
|
|
|
+ // 处理角色图片状态
|
|
|
+ $role_success_count = $this->checkRoles($id, $roles);
|
|
|
+
|
|
|
+ // 处理场景图片状态
|
|
|
+ $scene_success_count = $this->checkScenes($id, $scenes);
|
|
|
+
|
|
|
+ if ($role_success_count == $role_count && $scene_success_count == $scene_count) {
|
|
|
+ // 更新状态为已完成
|
|
|
+ DB::table('mp_animes')->where('id', $id)->update(['generate_status' => '已完成', 'updated_at'=>date('Y-m-d H:i:s')]);
|
|
|
+ dLog('generate')->info('动漫对话图片已生成完成');
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
$time_end = microtime(true);
|
|
|
dLog('generate')->info('脚本执行时间: '.round($time_end-$time_start, 2).'秒');
|
|
|
dLog('generate')->info('====================结束检查动漫对话角色和场景图片生成状态====================');
|
|
|
}
|
|
|
+
|
|
|
+ private function checkRoles($id, $roles) {
|
|
|
+ $role_success_count = 0;
|
|
|
+ foreach ($roles as &$role) {
|
|
|
+ $task_id = getProp($role, 'task_id');
|
|
|
+ $task_status = getProp($role, 'task_status');
|
|
|
+ if (!$task_id || $task_status == 'success') {
|
|
|
+ $role_success_count++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $task = DB::table('mp_generate_pic_tasks')->where('id', $task_id)->select('result_url', 'status')->first();
|
|
|
+ if (in_array(getProp($task, 'status'), ['success', 'failed'])) {
|
|
|
+ $role['task_status'] = 'success';
|
|
|
+ $role['url'] = '';
|
|
|
+ $result_url = getProp($task, 'result_url');
|
|
|
+ if ($result_url && is_json($result_url)) {
|
|
|
+ $role['url'] = json_decode($result_url, true)[0];
|
|
|
+ }
|
|
|
+
|
|
|
+ $role_success_count++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($role_success_count > 0) {
|
|
|
+ DB::table('mp_animes')->where('id', $id)->update(['roles' => json_encode($roles, 256)]);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $role_success_count;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function checkScenes($id, $scenes) {
|
|
|
+ $scene_success_count = 0;
|
|
|
+ foreach ($scenes as &$scene) {
|
|
|
+ $task_id = getProp($scene, 'task_id');
|
|
|
+ $task_status = getProp($scene, 'task_status');
|
|
|
+ if (!$task_id || $task_status == 'success') {
|
|
|
+ $scene_success_count++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $task = DB::table('mp_generate_pic_tasks')->where('id', $task_id)->select('result_url', 'status')->first();
|
|
|
+ if (in_array(getProp($task, 'status'), ['success', 'failed'])) {
|
|
|
+ $scene['task_status'] = 'success';
|
|
|
+ $scene['url'] = '';
|
|
|
+ $result_url = getProp($task, 'result_url');
|
|
|
+ if ($result_url && is_json($result_url)) {
|
|
|
+ $scene['url'] = json_decode($result_url, true)[0];
|
|
|
+ }
|
|
|
+
|
|
|
+ $scene_success_count++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($scene_success_count > 0) {
|
|
|
+ DB::table('mp_animes')->where('id', $id)->update(['scenes' => json_encode($scenes, 256)]);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $scene_success_count;
|
|
|
+ }
|
|
|
}
|