|
|
@@ -323,8 +323,8 @@ class AIVideoGenerationService
|
|
|
logDB('generate', 'info', '即梦AI视频生成任务成功', ['id' => $task->id, 'result_url' => $statusInfo['result_url']]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_SUCCESS, $statusInfo);
|
|
|
|
|
|
- // 同步调整分镜视频状态和结果
|
|
|
- $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ // 同步调整分镜视频状态和结果(兼容片段模式)
|
|
|
+ $segment_id = $this->getSegmentIdFromTask($task);
|
|
|
if ($segment_id && isset($statusInfo['result_url'])) {
|
|
|
try {
|
|
|
DB::beginTransaction();
|
|
|
@@ -346,16 +346,16 @@ class AIVideoGenerationService
|
|
|
if (isset($statusInfo['video_duration']) && $statusInfo['video_duration'] > 0) {
|
|
|
$segmentUpdateData['video_duration'] = $statusInfo['video_duration'];
|
|
|
$segmentUpdateData['video_time_point_start'] = 0;
|
|
|
- // $segmentUpdateData['video_time_point_end'] = $statusInfo['video_duration'];
|
|
|
- $audio_duration = DB::table('mp_episode_segments')->where('segment_id', $segment_id)->value('audio_duration');
|
|
|
+
|
|
|
+ $audio_duration = $this->getAudioDuration($task, $segment_id, $statusInfo['video_duration'] ?? null);
|
|
|
$segmentUpdateData['video_time_point_end'] = $audio_duration ?? 0;
|
|
|
}
|
|
|
|
|
|
- // 更新分镜表
|
|
|
- DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update($segmentUpdateData);
|
|
|
+ // 更新分镜表(兼容act模式)
|
|
|
+ $this->updateSegmentTable($task, $segmentUpdateData);
|
|
|
|
|
|
// 添加视频生成对话记录
|
|
|
- $this->addVideoGenerationRecords($segment_id, $statusInfo['result_url']);
|
|
|
+ $this->addVideoGenerationRecords($task, $segment_id, $statusInfo['result_url']);
|
|
|
|
|
|
DB::commit();
|
|
|
|
|
|
@@ -372,10 +372,10 @@ class AIVideoGenerationService
|
|
|
logDB('generate', 'error', '即梦AI视频生成任务失败', ['id' => $task->id, 'error' => $statusInfo['error_message']]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_FAILED, $statusInfo);
|
|
|
|
|
|
- // 同步更新分镜表状态为失败
|
|
|
- $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ // 同步更新分镜表状态为失败(兼容片段模式)
|
|
|
+ $segment_id = $this->getSegmentIdFromTask($task);
|
|
|
if ($segment_id) {
|
|
|
- DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update([
|
|
|
+ $this->updateSegmentTable($task, [
|
|
|
'video_task_status' => '失败',
|
|
|
'updated_at' => date('Y-m-d H:i:s')
|
|
|
]);
|
|
|
@@ -391,10 +391,10 @@ class AIVideoGenerationService
|
|
|
'error_message' => '任务处理超时(超过12小时)'
|
|
|
]);
|
|
|
|
|
|
- // 同步更新分镜表状态为失败
|
|
|
- $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ // 同步更新分镜表状态为失败(兼容片段模式)
|
|
|
+ $segment_id = $this->getSegmentIdFromTask($task);
|
|
|
if ($segment_id) {
|
|
|
- DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update([
|
|
|
+ $this->updateSegmentTable($task, [
|
|
|
'video_task_status' => '失败',
|
|
|
'updated_at' => date('Y-m-d H:i:s')
|
|
|
]);
|
|
|
@@ -587,8 +587,8 @@ class AIVideoGenerationService
|
|
|
logDB('generate', 'info', 'Seedance视频生成任务成功', ['id' => $task->id, 'result_url' => $statusInfo['result_url']]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_SUCCESS, $statusInfo);
|
|
|
|
|
|
- // 同步调整分镜视频状态和结果
|
|
|
- $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ // 同步调整分镜视频状态和结果(兼容片段模式)
|
|
|
+ $segment_id = $this->getSegmentIdFromTask($task);
|
|
|
if ($segment_id && isset($statusInfo['result_url'])) {
|
|
|
try {
|
|
|
DB::beginTransaction();
|
|
|
@@ -610,16 +610,17 @@ class AIVideoGenerationService
|
|
|
if (isset($statusInfo['video_duration']) && $statusInfo['video_duration'] > 0) {
|
|
|
$segmentUpdateData['video_duration'] = $statusInfo['video_duration'];
|
|
|
$segmentUpdateData['video_time_point_start'] = 0;
|
|
|
- // $segmentUpdateData['video_time_point_end'] = $statusInfo['video_duration'];
|
|
|
- $audio_duration = DB::table('mp_episode_segments')->where('segment_id', $segment_id)->value('audio_duration');
|
|
|
+
|
|
|
+ // 获取video_time_point_end(兼容片段模式)
|
|
|
+ $audio_duration = $this->getAudioDuration($task, $segment_id, $statusInfo['video_duration'] ?? null);
|
|
|
$segmentUpdateData['video_time_point_end'] = $audio_duration ?? 0;
|
|
|
}
|
|
|
|
|
|
- // 更新分镜表
|
|
|
- DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update($segmentUpdateData);
|
|
|
+ // 更新分镜表(兼容act模式)
|
|
|
+ $this->updateSegmentTable($task, $segmentUpdateData);
|
|
|
|
|
|
// 添加视频生成对话记录
|
|
|
- $this->addVideoGenerationRecords($segment_id, $statusInfo['result_url']);
|
|
|
+ $this->addVideoGenerationRecords($task, $segment_id, $statusInfo['result_url']);
|
|
|
|
|
|
DB::commit();
|
|
|
|
|
|
@@ -639,10 +640,10 @@ class AIVideoGenerationService
|
|
|
'result_json' => $statusInfo['result_json'] ?? []
|
|
|
]);
|
|
|
|
|
|
- // 同步更新分镜表状态为失败
|
|
|
- $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ // 同步更新分镜表状态为失败(兼容片段模式)
|
|
|
+ $segment_id = $this->getSegmentIdFromTask($task);
|
|
|
if ($segment_id) {
|
|
|
- DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update([
|
|
|
+ $this->updateSegmentTable($task, [
|
|
|
'video_task_status' => '失败',
|
|
|
'updated_at' => date('Y-m-d H:i:s')
|
|
|
]);
|
|
|
@@ -658,10 +659,10 @@ class AIVideoGenerationService
|
|
|
'error_message' => '任务处理超时(超过48小时)'
|
|
|
]);
|
|
|
|
|
|
- // 同步更新分镜表状态为失败
|
|
|
- $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ // 同步更新分镜表状态为失败(兼容片段模式)
|
|
|
+ $segment_id = $this->getSegmentIdFromTask($task);
|
|
|
if ($segment_id) {
|
|
|
- DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update([
|
|
|
+ $this->updateSegmentTable($task, [
|
|
|
'video_task_status' => '失败',
|
|
|
'updated_at' => date('Y-m-d H:i:s')
|
|
|
]);
|
|
|
@@ -1473,8 +1474,8 @@ class AIVideoGenerationService
|
|
|
logDB('generate', 'info', '可灵AI Omni视频生成任务成功', ['id' => $task->id, 'result_url' => $statusInfo['result_url']]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_SUCCESS, $statusInfo);
|
|
|
|
|
|
- // 同步调整分镜视频状态和结果
|
|
|
- $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ // 同步调整分镜视频状态和结果(兼容片段模式)
|
|
|
+ $segment_id = $this->getSegmentIdFromTask($task);
|
|
|
if ($segment_id && isset($statusInfo['result_url'])) {
|
|
|
try {
|
|
|
DB::beginTransaction();
|
|
|
@@ -1496,16 +1497,17 @@ class AIVideoGenerationService
|
|
|
if (isset($statusInfo['video_duration']) && $statusInfo['video_duration'] > 0) {
|
|
|
$segmentUpdateData['video_duration'] = $statusInfo['video_duration'];
|
|
|
$segmentUpdateData['video_time_point_start'] = 0;
|
|
|
- // $segmentUpdateData['video_time_point_end'] = $statusInfo['video_duration'];
|
|
|
- $audio_duration = DB::table('mp_episode_segments')->where('segment_id', $segment_id)->value('audio_duration');
|
|
|
+
|
|
|
+ // 获取video_time_point_end(兼容片段模式)
|
|
|
+ $audio_duration = $this->getAudioDuration($task, $segment_id, $statusInfo['video_duration']);
|
|
|
$segmentUpdateData['video_time_point_end'] = $audio_duration ?? 0;
|
|
|
}
|
|
|
|
|
|
- // 更新分镜表
|
|
|
- DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update($segmentUpdateData);
|
|
|
+ // 更新分镜表(兼容act模式)
|
|
|
+ $this->updateSegmentTable($task, $segmentUpdateData);
|
|
|
|
|
|
// 添加视频生成对话记录
|
|
|
- $this->addVideoGenerationRecords($segment_id, $statusInfo['result_url']);
|
|
|
+ $this->addVideoGenerationRecords($task, $segment_id, $statusInfo['result_url']);
|
|
|
|
|
|
DB::commit();
|
|
|
|
|
|
@@ -1524,10 +1526,10 @@ class AIVideoGenerationService
|
|
|
'result_json' => $statusInfo['result_json'] ?? []
|
|
|
]);
|
|
|
|
|
|
- // 同步更新分镜表状态为失败
|
|
|
- $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ // 同步更新分镜表状态为失败(兼容片段模式)
|
|
|
+ $segment_id = $this->getSegmentIdFromTask($task);
|
|
|
if ($segment_id) {
|
|
|
- DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update([
|
|
|
+ $this->updateSegmentTable($task, [
|
|
|
'video_task_status' => '失败',
|
|
|
'updated_at' => date('Y-m-d H:i:s')
|
|
|
]);
|
|
|
@@ -1543,10 +1545,10 @@ class AIVideoGenerationService
|
|
|
'error_message' => '任务处理超时(超过24小时)'
|
|
|
]);
|
|
|
|
|
|
- // 同步更新分镜表状态为失败
|
|
|
- $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ // 同步更新分镜表状态为失败(兼容片段模式)
|
|
|
+ $segment_id = $this->getSegmentIdFromTask($task);
|
|
|
if ($segment_id) {
|
|
|
- DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update([
|
|
|
+ $this->updateSegmentTable($task, [
|
|
|
'video_task_status' => '失败',
|
|
|
'updated_at' => date('Y-m-d H:i:s')
|
|
|
]);
|
|
|
@@ -2026,28 +2028,125 @@ class AIVideoGenerationService
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 根据task获取segment_id或act_id(兼容act模式)
|
|
|
+ * 分镜模式:返回segment_id用于查询
|
|
|
+ * 片段模式:返回act_id用于查询(因为segment_id为空)
|
|
|
+ */
|
|
|
+ private function getSegmentIdFromTask($task)
|
|
|
+ {
|
|
|
+ $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+
|
|
|
+ // 如果有segment_id,直接返回(分镜模式)
|
|
|
+ if ($segment_id) {
|
|
|
+ return $segment_id;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果有alias_act_id,返回act_id(片段模式,segment_id为空)
|
|
|
+ $act_id = getProp($task, 'alias_act_id');
|
|
|
+ if ($act_id) {
|
|
|
+ return $act_id; // 直接返回act_id,不需要查segment_id
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新分镜表(兼容act模式)
|
|
|
+ * 分镜模式:使用segment_id字段更新
|
|
|
+ * 片段模式:使用id字段更新
|
|
|
+ */
|
|
|
+ private function updateSegmentTable($task, $updateData)
|
|
|
+ {
|
|
|
+ $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ $act_id = getProp($task, 'alias_act_id');
|
|
|
+
|
|
|
+ if ($segment_id) {
|
|
|
+ // 分镜模式:使用segment_id更新
|
|
|
+ return DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update($updateData);
|
|
|
+ } elseif ($act_id) {
|
|
|
+ // 片段模式(全能模式):使用id更新
|
|
|
+ return DB::table('mp_episode_segments')->where('id', $act_id)->update($updateData);
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取audio_duration(兼容act模式)
|
|
|
+ * 分镜模式:使用segment_id查询
|
|
|
+ * 片段模式:使用id查询
|
|
|
+ * @param array $task 任务数据
|
|
|
+ * @param string|int $segmentIdOrActId segment_id或act_id
|
|
|
+ * @param float|null $video_duration 视频时长(如果传入,片段模式直接返回此值)
|
|
|
+ * @return float
|
|
|
+ */
|
|
|
+ private function getAudioDuration($task, $segmentIdOrActId, $video_duration = null)
|
|
|
+ {
|
|
|
+ $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ $act_id = getProp($task, 'alias_act_id');
|
|
|
+
|
|
|
+ if ($segment_id) {
|
|
|
+ // 分镜模式:使用segment_id查询
|
|
|
+ return DB::table('mp_episode_segments')->where('segment_id', $segmentIdOrActId)->value('audio_duration');
|
|
|
+ } elseif ($act_id) {
|
|
|
+ // 片段模式(全能模式):如果传入了video_duration直接返回,否则查询audio_duration
|
|
|
+ if ($video_duration !== null && $video_duration > 0) {
|
|
|
+ return $video_duration;
|
|
|
+ }
|
|
|
+ return DB::table('mp_episode_segments')->where('id', $segmentIdOrActId)->value('audio_duration');
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 添加视频生成对话记录
|
|
|
- *
|
|
|
- * @param int $segmentId 分镜ID
|
|
|
+ * @param array $task 任务数据
|
|
|
+ * @param string|int $segmentIdOrActId segment_id(分镜模式)或 act_id(片段模式)
|
|
|
* @param string $videoUrl 视频URL
|
|
|
* @return void
|
|
|
*/
|
|
|
- private function addVideoGenerationRecords($segmentId, $videoUrl)
|
|
|
+ private function addVideoGenerationRecords($task, $segmentIdOrActId, $videoUrl)
|
|
|
{
|
|
|
try {
|
|
|
- // 获取分镜信息
|
|
|
- $segment = DB::table('mp_episode_segments as a')->leftJoin('mp_animes as b', 'a.anime_id', 'b.id')
|
|
|
- ->where('a.segment_id', $segmentId)
|
|
|
- ->select('b.user_id as uid', 'a.anime_id', 'a.episode_number', 'a.tail_frame')
|
|
|
- ->first();
|
|
|
+ $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ $act_id = getProp($task, 'alias_act_id');
|
|
|
+
|
|
|
+ if ($segment_id) {
|
|
|
+ // 分镜模式:使用segment_id查询
|
|
|
+ $segment = DB::table('mp_episode_segments as a')->leftJoin('mp_animes as b', 'a.anime_id', 'b.id')
|
|
|
+ ->where('a.segment_id', $segmentIdOrActId)
|
|
|
+ ->select('b.user_id as uid', 'a.anime_id', 'a.episode_number', 'a.tail_frame', 'a.segment_id')
|
|
|
+ ->first();
|
|
|
+ } elseif ($act_id) {
|
|
|
+ // 片段模式:使用id查询
|
|
|
+ $segment = DB::table('mp_episode_segments as a')->leftJoin('mp_animes as b', 'a.anime_id', 'b.id')
|
|
|
+ ->where('a.id', $segmentIdOrActId)
|
|
|
+ ->select('b.user_id as uid', 'a.anime_id', 'a.episode_number', 'a.tail_frame', 'a.segment_id', 'a.id')
|
|
|
+ ->first();
|
|
|
+ } else {
|
|
|
+ dLog('generate')->warning('无法确定查询模式,任务缺少segment_id和act_id', ['segment_id_or_act_id' => $segmentIdOrActId]);
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
if (!$segment) {
|
|
|
- dLog('generate')->warning('分镜信息不存在,无法添加对话记录', ['segment_id' => $segmentId]);
|
|
|
+ dLog('generate')->warning('分镜信息不存在,无法添加对话记录', ['segment_id_or_act_id' => $segmentIdOrActId]);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
$now = date('Y-m-d H:i:s');
|
|
|
|
|
|
+ // 根据模式确定保存的字段和值
|
|
|
+ if ($segment_id) {
|
|
|
+ // 分镜模式:保存segment_id字段
|
|
|
+ $recordField = 'segment_id';
|
|
|
+ $recordValue = $segmentIdOrActId;
|
|
|
+ } else {
|
|
|
+ // 片段模式:保存act_id字段
|
|
|
+ $recordField = 'act_id';
|
|
|
+ $recordValue = $segmentIdOrActId;
|
|
|
+ }
|
|
|
+
|
|
|
// 保存对话记录
|
|
|
$records = [
|
|
|
[
|
|
|
@@ -2056,7 +2155,7 @@ class AIVideoGenerationService
|
|
|
'sequence' => $segment->episode_number,
|
|
|
'role' => 'user',
|
|
|
'content' => '图片转视频',
|
|
|
- 'segment_id' => $segmentId,
|
|
|
+ $recordField => $recordValue,
|
|
|
'video_url' => '',
|
|
|
'created_at' => $now,
|
|
|
'updated_at' => $now
|
|
|
@@ -2067,7 +2166,7 @@ class AIVideoGenerationService
|
|
|
'sequence' => $segment->episode_number,
|
|
|
'role' => 'assistant',
|
|
|
'content' => $segment->tail_frame ?: '',
|
|
|
- 'segment_id' => $segmentId,
|
|
|
+ $recordField => $recordValue,
|
|
|
'video_url' => $videoUrl,
|
|
|
'created_at' => $now,
|
|
|
'updated_at' => $now
|
|
|
@@ -2077,7 +2176,7 @@ class AIVideoGenerationService
|
|
|
DB::table('mp_anime_records')->insert($records);
|
|
|
|
|
|
dLog('generate')->info('视频生成对话记录添加成功', [
|
|
|
- 'segment_id' => $segmentId,
|
|
|
+ 'segment_id_or_act_id' => $segmentIdOrActId,
|
|
|
'video_url' => $videoUrl,
|
|
|
'uid' => $segment->uid,
|
|
|
'anime_id' => $segment->anime_id
|
|
|
@@ -2085,7 +2184,7 @@ class AIVideoGenerationService
|
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
dLog('generate')->error('添加视频生成对话记录失败: ' . $e->getMessage(), [
|
|
|
- 'segment_id' => $segmentId,
|
|
|
+ 'segment_id' => $segmentIdOrActId,
|
|
|
'video_url' => $videoUrl,
|
|
|
'error' => $e->getMessage()
|
|
|
]);
|
|
|
@@ -2418,8 +2517,8 @@ class AIVideoGenerationService
|
|
|
logDB('generate', 'info', '统一API视频生成任务成功', ['id' => $task->id, 'result_url' => $statusInfo['result_url']]);
|
|
|
$task->updateStatus(MpGenerateVideoTask::STATUS_SUCCESS, $statusInfo);
|
|
|
|
|
|
- // 同步调整分镜视频状态和结果
|
|
|
- $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ // 同步调整分镜视频状态和结果(兼容片段模式)
|
|
|
+ $segment_id = $this->getSegmentIdFromTask($task);
|
|
|
if ($segment_id && isset($statusInfo['result_url'])) {
|
|
|
try {
|
|
|
DB::beginTransaction();
|
|
|
@@ -2441,15 +2540,17 @@ class AIVideoGenerationService
|
|
|
if (isset($statusInfo['video_duration']) && $statusInfo['video_duration'] > 0) {
|
|
|
$segmentUpdateData['video_duration'] = $statusInfo['video_duration'];
|
|
|
$segmentUpdateData['video_time_point_start'] = 0;
|
|
|
- $audio_duration = DB::table('mp_episode_segments')->where('segment_id', $segment_id)->value('audio_duration');
|
|
|
+
|
|
|
+ // 获取audio_duration(兼容片段模式)
|
|
|
+ $audio_duration = $this->getAudioDuration($task, $segment_id, $statusInfo['video_duration'] ?? null);
|
|
|
$segmentUpdateData['video_time_point_end'] = $audio_duration ?? 0;
|
|
|
}
|
|
|
|
|
|
- // 更新分镜表
|
|
|
- DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update($segmentUpdateData);
|
|
|
+ // 更新分镜表(兼容act模式)
|
|
|
+ $this->updateSegmentTable($task, $segmentUpdateData);
|
|
|
|
|
|
// 添加视频生成对话记录
|
|
|
- $this->addVideoGenerationRecords($segment_id, $statusInfo['result_url']);
|
|
|
+ $this->addVideoGenerationRecords($task, $segment_id, $statusInfo['result_url']);
|
|
|
|
|
|
DB::commit();
|
|
|
|
|
|
@@ -2469,10 +2570,10 @@ class AIVideoGenerationService
|
|
|
'result_json' => $statusInfo['result_json'] ?? []
|
|
|
]);
|
|
|
|
|
|
- // 同步更新分镜表状态为失败
|
|
|
- $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ // 同步更新分镜表状态为失败(兼容片段模式)
|
|
|
+ $segment_id = $this->getSegmentIdFromTask($task);
|
|
|
if ($segment_id) {
|
|
|
- DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update([
|
|
|
+ $this->updateSegmentTable($task, [
|
|
|
'video_task_status' => '失败',
|
|
|
'updated_at' => date('Y-m-d H:i:s')
|
|
|
]);
|
|
|
@@ -2488,10 +2589,10 @@ class AIVideoGenerationService
|
|
|
'error_message' => '任务处理超时(超过48小时)'
|
|
|
]);
|
|
|
|
|
|
- // 同步更新分镜表状态为失败
|
|
|
- $segment_id = getProp($task, 'alias_segment_id');
|
|
|
+ // 同步更新分镜表状态为失败(兼容片段模式)
|
|
|
+ $segment_id = $this->getSegmentIdFromTask($task);
|
|
|
if ($segment_id) {
|
|
|
- DB::table('mp_episode_segments')->where('segment_id', $segment_id)->update([
|
|
|
+ $this->updateSegmentTable($task, [
|
|
|
'video_task_status' => '失败',
|
|
|
'updated_at' => date('Y-m-d H:i:s')
|
|
|
]);
|