liuhairui 1 неделя назад
Родитель
Сommit
d204ba3acd

+ 8 - 0
application/api/controller/WorkOrder.php

@@ -59,6 +59,9 @@ class WorkOrder extends Api{
             return json($res);
         }
         $taskInfo = json_decode($taskData, true);
+        if (!empty($taskInfo['status'])) {
+            $taskInfo['status'] = ImageService::normalizeTaskStatus((string)$taskInfo['status']);
+        }
         if (!empty($taskInfo['image'])) {
             $taskInfo['image'] = Common::ossFullUrl((string)$taskInfo['image']);
         }
@@ -351,6 +354,7 @@ class WorkOrder extends Api{
             'model' => $data['model'],
             'seconds' => (string)$data['duration'],
             'size' => (string)$data['ratio'],
+            'sys_id' => $data['sys_id'],
             'sys_rq' => date('Y-m-d H:i:s'),
         ];
 
@@ -730,6 +734,10 @@ class WorkOrder extends Api{
         if (!empty($search)) {
             $where['prompt'] = ['like', '%' . $search . '%'];
         }
+        //除超级管理员以外都查看当前账号信息数据
+        if (!empty($params['sys_id']) && $params['sys_id'] != '超级管理员') {
+            $where['sys_id'] = $params['sys_id'];
+        }
         $list = Db::name('video')->where('mod_rq', null)
             ->where($where)
             ->order('id desc')

+ 13 - 6
application/job/ImageToImageJob.php

@@ -2,6 +2,7 @@
 namespace app\job;
 use app\api\controller\Common;
 use app\service\AIGatewayService;
+use app\service\ImageService;
 use think\Db;
 use think\queue\Job;
 use think\Queue;
@@ -17,14 +18,20 @@ class ImageToImageJob{
             $existing = $redis->get("img_to_img_task:{$taskId}");
             if ($existing) {
                 $info = json_decode($existing, true);
-                if (isset($info['status']) && $info['status'] === 'completed') {
+                if (isset($info['status']) && ImageService::isTaskCompleted($info['status'])) {
                     echo "任务 {$taskId} 已完成,跳过重复执行\n";
                     $job->delete();
                     return;
                 }
             }
             try {
-                echo " 开始处理图生图".date('Y-m-d H:i:s')."\n";
+                // 标记处理中(前端轮询可见)
+                $redis->set("img_to_img_task:{$taskId}", json_encode([
+                    'status' => ImageService::TASK_STATUS_PROCESSING,
+                    'started_at' => date('Y-m-d H:i:s'),
+                ], JSON_UNESCAPED_UNICODE), ['EX' => 300]);
+
+                \think\Log::info("[ImageToImageJob] start task_id={$taskId} status_type=" . ($data['status_type'] ?? ''));
 
                 $result = $this->get_img_to_img($data);
                 // get_img_to_img 内部已写入 img_to_img_task,此处无需重复写入
@@ -37,9 +44,9 @@ class ImageToImageJob{
 
             } catch (\Exception $e) {
                 echo "图生图失败: " . $e->getMessage() . "\n";
+                \think\Log::error('[ImageToImageJob] ' . $e->getMessage());
                 $job->delete();
             }
-            $job->delete();
         } else {
             $logId = $data['log_id'] ?? null;
             try {
@@ -192,7 +199,7 @@ class ImageToImageJob{
         $height = trim((string)($data['height'] ?? ''));
         $width = trim((string)($data['width'] ?? ''));
         $model = trim($data['model'] ?? '');
-        $sysId = (int)($data['sys_id'] ?? 0);
+        $sysId = $data['sys_id'];
         $now = date('Y-m-d H:i:s');
 
         // texttoimage:前端传 old_img(base64/路径),size 为空时用 width x height
@@ -211,7 +218,7 @@ class ImageToImageJob{
                 try {
                     $redis = getTaskRedis();
                     $redis->set("img_to_img_task:" . $data['task_id'], json_encode([
-                        'status' => 'failed',
+                        'status' => ImageService::TASK_STATUS_FAILED,
                         'msg' => $msg,
                         'error' => $msg,
                         'completed_at' => date('Y-m-d H:i:s')
@@ -229,7 +236,7 @@ class ImageToImageJob{
                 try {
                     $redis = getTaskRedis();
                     $redis->set("img_to_img_task:" . $data['task_id'], json_encode([
-                        'status' => 'completed',
+                        'status' => ImageService::TASK_STATUS_COMPLETED,
                         'image' => $imgPath,
                         'image_url' => $imgPath,
                         'completed_at' => date('Y-m-d H:i:s')

+ 5 - 4
application/job/TextToImageJob.php

@@ -3,6 +3,7 @@ namespace app\job;
 use app\api\controller\Common;
 use app\api\controller\WorkOrder;
 use app\service\AIGatewayService;
+use app\service\ImageService;
 use think\Db;
 use think\Exception;
 use think\Queue;
@@ -43,7 +44,7 @@ class TextToImageJob
 
             // 更新任务状态为处理中
             $redis->set("text_to_image_task:{$taskId}", json_encode([
-                'status' => 'processing',
+                'status' => ImageService::TASK_STATUS_PROCESSING,
                 'started_at' => date('Y-m-d H:i:s')
             ]), ['EX' => 300]); // 5分钟过期
 
@@ -53,7 +54,7 @@ class TextToImageJob
                 // sleep(10);
                 // 更新Redis中的任务状态为成功
                 $redis->set("text_to_image_task:{$taskId}", json_encode([
-                    'status' => 'completed',
+                    'status' => ImageService::TASK_STATUS_COMPLETED,
                     // 'image_url' => "/uploads/merchant/690377511/6903775111138/newimg/698550113c2b8.jpeg",
                     'image_url' => $result,
                     'completed_at' => date('Y-m-d H:i:s')
@@ -69,14 +70,14 @@ class TextToImageJob
                     // 对于超时错误,保持任务状态为处理中,让前端继续查询
                     echo "⚠️ 检测到网络超时,任务可能仍在执行中\n";
                     $redis->set("text_to_image_task:{$taskId}", json_encode([
-                        'status' => 'processing',
+                        'status' => ImageService::TASK_STATUS_PROCESSING,
                         'error' => '网络连接超时,正在重试...',
                         'updated_at' => date('Y-m-d H:i:s')
                     ]), ['EX' => 300]); // 5分钟过期
                 } else {
                     // 其他错误,标记为失败
                     $redis->set("text_to_image_task:{$taskId}", json_encode([
-                        'status' => 'failed',
+                        'status' => ImageService::TASK_STATUS_FAILED,
                         'error' => $e->getMessage(),
                         'completed_at' => date('Y-m-d H:i:s')
                     ]), ['EX' => 300]); // 5分钟过期

+ 2 - 1
application/job/TextToTextJob.php

@@ -1,6 +1,7 @@
 <?php
 namespace app\job;
 use app\service\AIGatewayService;
+use app\service\ImageService;
 use think\Db;
 use think\queue\Job;
 use think\Queue;
@@ -20,7 +21,7 @@ class TextToTextJob
             $existing = $redis->get("txt_to_txt_task:{$taskId}");
             if ($existing) {
                 $info = json_decode($existing, true);
-                if (isset($info['status']) && $info['status'] === 'completed') {
+                if (isset($info['status']) && ImageService::isTaskCompleted($info['status'])) {
                     echo "任务 {$taskId} 已完成,跳过重复执行\n";
                     $job->delete();
                     return;

+ 2 - 2
application/service/AIGatewayService.php

@@ -189,7 +189,7 @@ class AIGatewayService{
                 ]
             ],
             'generationConfig' => [
-                'responseModalities' => ['IMAGE'],
+                'responseModalities' => ['TEXT', 'IMAGE'],
                 'imageConfig' => ['aspectRatio' => $size, 'imageSize' => '1K']
             ]
         ];
@@ -269,7 +269,7 @@ class AIGatewayService{
                 ]
             ],
             'generationConfig' => [
-                'responseModalities' => ['IMAGE'],
+                'responseModalities' => ['TEXT', 'IMAGE'],
                 'imageConfig' => ['aspectRatio' => $size, 'imageSize' => '1K']
             ]
         ];

+ 25 - 1
application/service/ImageService.php

@@ -12,6 +12,12 @@ use think\Queue;
  */
 class ImageService
 {
+    /** AI 异步任务状态(Redis / GetImageStatus 返回中文) */
+    public const TASK_STATUS_PENDING = '排队中';
+    public const TASK_STATUS_PROCESSING = '生成中';
+    public const TASK_STATUS_COMPLETED = '已完成';
+    public const TASK_STATUS_FAILED = '失败';
+
     /** 队列名称 */
     private const QUEUE_ARRIMAGE = 'arrimage';
 
@@ -22,6 +28,24 @@ class ImageService
     private const KEY_TEXT_TO_IMAGE = 'text_to_image_task:';
     private const KEY_IMG_TO_IMG = 'img_to_img_task:';
 
+    /** 是否已完成(兼容旧英文状态) */
+    public static function isTaskCompleted(string $status): bool
+    {
+        return in_array($status, [self::TASK_STATUS_COMPLETED, 'completed'], true);
+    }
+
+    /** 英文状态转中文(兼容 Redis 里尚未过期的旧任务) */
+    public static function normalizeTaskStatus(string $status): string
+    {
+        $map = [
+            'pending' => self::TASK_STATUS_PENDING,
+            'processing' => self::TASK_STATUS_PROCESSING,
+            'completed' => self::TASK_STATUS_COMPLETED,
+            'failed' => self::TASK_STATUS_FAILED,
+        ];
+        return $map[$status] ?? $status;
+    }
+
     /**
      * 图生文:提交到队列
      * @param array $params 请求参数
@@ -103,7 +127,7 @@ class ImageService
 
         $redis = getTaskRedis();
         $redis->set($redisKeyPrefix . $taskId, json_encode([
-            'status' => 'pending',
+            'status' => self::TASK_STATUS_PENDING,
             'created_at' => date('Y-m-d H:i:s')
         ]), ['EX' => self::TASK_TTL]);