Commit ffddce78 authored by 刘小敏's avatar 刘小敏

3D试戴优化

parent 7e2d1ee4
......@@ -170,7 +170,7 @@ class AiTryon extends Common
// $attachment = $upload->uploadBase64($res['data']);
// 记录入参日志
custom_log('用户ID:'. $user->id .' AI生成图片 保存到本地接口接口出参:'.json_encode($attachment), 'gen_ai');
custom_log('[AI生成图片接口] user_id:'. $user->id .' 保存到本地接口接口出参:'.json_encode($attachment), 'gen_ai');
if($attachment == 0){
$tryonData['ai_status'] = 2;
......@@ -181,12 +181,16 @@ class AiTryon extends Common
$tryonData['ai_status'] = 1;
$tryonData['ai_url'] = config('shopro.api_host') . $attachment['data'];
$tryonModel->save($tryonData);
$id = $tryonModel->insertGetId($tryonData);
// 试戴次数+1
$userService = new User();
$userService->addTryTimes($user->id);
// 发送消息通知
$aiService = new Ai();
$aiService->sendNotification($user->id, $id);
$this->success('图片生成成功', config('shopro.api_host') . $attachment['data']??'');
}
......@@ -239,7 +243,7 @@ class AiTryon extends Common
}
//开发过程中临时调试代码
// \think\Queue::push('\addons\shopro\job\AiVideoGen@save', ['taskid' => 'cgt-20260518151431-zcrgp', 'user' => $user], 'shopro-high');
// \think\Queue::push('\addons\shopro\job\AiVideoGen@save', ['taskid' => 'cgt-20260518151431-zcrgp', 'user' => $user, 'id'=> 214], 'shopro-high');
// $this->success('推送队列成功');
// exit;
// $this->success('视频生成中', 13);
......@@ -294,7 +298,7 @@ class AiTryon extends Common
$userService->addTryTimes($user->id);
// 推送队列
\think\Queue::push('\addons\shopro\job\AiVideoGen@save', ['taskid' => $res['data'], 'user' => $user], 'shopro-high');
\think\Queue::push('\addons\shopro\job\AiVideoGen@save', ['taskid' => $res['data'], 'user' => $user, 'id' => $id], 'shopro-high');
$this->success($res['msg'], $id);
......
......@@ -130,6 +130,7 @@ class AiVideoGen extends BaseJob
try {
$taskid = $data['taskid'];
$id = $data['id'];
$user = $data['user'];
$user_id = isset($user['id']) ? $user['id'] : 0;
$this->debug_log('***************************** '.date('Y-m-d H:i:s'). '保存AI视频脚本开始 userid '.$user_id.' taskid:'.$taskid.' ***********************************'.PHP_EOL);
......@@ -177,7 +178,10 @@ class AiVideoGen extends BaseJob
// AI接口 返回失败
if (isset($result['error'])){
$message = $result['error']['message'] ?? '未知错误';
AiTryOnModel::where('user_id', $user_id)->where('ai_task_id', $taskid)->update(['ai_status' => 2, 'ai_err_msg' => $message]);
AiTryOnModel::where('user_id', $user_id)
->where('ai_task_id', $taskid)
->where('id', $id)
->update(['ai_status' => 2, 'ai_err_msg' => $message]);
// 删除队列job
$this->debug_log('[AI视频异步队列]删除Job');
......@@ -195,6 +199,7 @@ class AiVideoGen extends BaseJob
$video_url = $aiService->saveFileLoc(isset($result['content']['video_url']) ? $result['content']['video_url'] : '', 'gen_ai');
// $video_url = $this->saveVideoLoc(isset($result['content']['video_url']) ? $result['content']['video_url'] : '');
$this->debug_log('[AI视频异步队列]保存本地接口返回值 video_url:'.$video_url);
if ($video_url === 0){
......@@ -207,7 +212,8 @@ class AiVideoGen extends BaseJob
$this->debug_log('[AI视频异步队列]保存本地视频成功 sql: '.db()->getLastSql());
// 发送消息通知
$this->sendNotification($user_id, $taskid);
$aiService = new Ai();
$aiService->sendNotification($user_id, $id);
// 删除队列job
$this->debug_log('[AI视频异步队列]删除Job');
......@@ -278,37 +284,4 @@ class AiVideoGen extends BaseJob
}
}
/**
* 发送AI视频生成成功通知
*/
private function sendNotification($user_id, $taskid)
{
try {
// 获取用户信息
$user = User::find($user_id);
if (!$user) {
$this->debug_log('[AI视频异步队列][通知]用户不存在: ' . $user_id);
return false;
}
// 获取AI试戴记录
$aiTryon = AiTryOnModel::where('user_id', $user_id)
->where('ai_task_id', $taskid)
->find();
// 发送通知
$user && $user->notify(
new AiVideoSuccess([
'ai_tryon' => $aiTryon ? $aiTryon->toArray() : [],
'user' => $aiTryon ? $user->toArray() : []
])
);
$this->debug_log('[AI视频异步队列][通知]通知发送成功: user_id=' . $user_id . ' taskid=' . $taskid);
return true;
} catch (\Exception $e) {
format_log_error_custom_name($e, '[AI视频异步队列][通知]通知发送失败: user_id=' . $user_id . ' taskid=' . $taskid, '', 'gen_ai');
}
}
}
\ No newline at end of file
......@@ -3,6 +3,9 @@
namespace addons\shopro\service\user;
use addons\shopro\library\HttpClient as Http;
use addons\shopro\notification\ai\AiVideoSuccess;
use app\admin\model\shopro\AiTryon as AiTryOnModel;
use app\admin\model\shopro\user\User;
use think\Config;
use think\Log;
......@@ -18,6 +21,39 @@ class Ai
}
/**
* 发送AI生成成功通知
*/
public function sendNotification($user_id, $id)
{
try {
// 获取用户信息
$user = User::find($user_id);
if (!$user) {
custom_log('[AI][通知]用户不存在: ' . $user_id, 'gen_ai');
return false;
}
// 获取AI试戴记录
$aiTryon = AiTryOnModel::where('user_id', $user_id)
->where('id', $id)
->find();
// 发送通知
$user && $user->notify(
new AiVideoSuccess([
'ai_tryon' => $aiTryon ? $aiTryon->toArray() : [],
'user' => $aiTryon ? $user->toArray() : []
])
);
custom_log('[AI][通知]通知发送成功: user_id=' . $user_id . ' id=' . $id, 'gen_ai');
return true;
} catch (\Exception $e) {
format_log_error_custom_name($e, '[AI][通知]通知发送失败: user_id=' . $user_id . ' id=' . $id, '', 'gen_ai');
}
}
/**
* 保存远端文件到本地
* 主要用于3D试戴 2026.05.19
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment