$v) { $template = Db::name('template') ->field('id,english_content') ->where('ids',1) ->find(); $baseItem = [ "sourceDir" => $this->sourceDir($v, 1), // 获取源目录 "outputDir" => $this->sourceDir($v, 2), // 获取输出目录 "file_name" => $this->sourceDir($v, 3), // 获取文件名 "type" => $params['type'] ?? '', // 获取处理类型 "selectedOption" => $params['selectedOption'], //生图模型参数 "prompt" => $template['content'], // 获取处理提示 "width" => $params['width'], // 获取图像宽度 "height" => $params['height'] // 获取图像高度 ]; // 创建$num个相同的项目并合并到$arr $arr = array_merge($arr, array_fill(0, $num, $baseItem)); } // 设置基础字段 $insertData = [ 'create_time' => date('Y-m-d H:i:s'), 'old_image_file' => $params['old_image_file'], 'status' => '等待中', 'image_count' => count($arr), 'params' => json_encode($params, JSON_UNESCAPED_UNICODE) ]; // 根据任务类型设定模型 switch ($params['type']) { case '图生文': $insertData['model'] = 'gpt-4-vision-preview'; break; case '文生文': $insertData['model'] = 'gpt-4'; break; case '文生图': $insertData['model'] = $params['selectedOption'] ?? '未知模型'; break; default: // 混合任务或自定义模型逻辑 $selected = $params['selectedOption'] ?? '未知'; $insertData['model'] = "gpt-4-vision-preview,gpt-4,{$selected}"; break; } // 插入并获取任务 ID $task_id = Db::name('queue_logs')->insertGetId($insertData); // 推送到队列 $payload = [ 'task_id' => $task_id, 'data' => $arr ]; //测试查看推送队列前的数据 // echo "
";print_r($payload);echo "
";die;

        // 推送队列
        Queue::push('app\job\ImageArrJob', $payload, "arrimage");
    }

    /**
     * 解析图像路径并返回相关信息
     *
     * @param string $filePath 图像文件路径
     * @param int $type 返回类型标识
     * @return string|null 返回解析后的路径或文件名
     */
    public function sourceDir($filePath,$type){
        $arr = [];

        // 使用正则表达式匹配完整路径
        if (preg_match('/^(.+?)\/Preview\/(\d{8})\/(.+)$/', $filePath, $matches)) {
            $arr =  [
                'basePath' => $matches[1],  // 基础路径
                'date' => $matches[2],      // 日期 (YYYYMMDD)
                'filename' => $matches[3]   // 文件名
            ];
        }else{
            // 备用方案:如果正则匹配失败
            $pathParts = explode('/', $filePath);
            $filename = array_pop($pathParts);

            $date = '';
            $baseParts = [];

            foreach ($pathParts as $part) {
                if (preg_match('/^\d{8}$/', $part)) {
                    $date = $part;
                    break;
                }
                $baseParts[] = $part;
            }

            $arr = [
                'basePath' => implode('/', $baseParts),
                'date' => $date,
                'filename' => $filename
            ];
        }

        // 根据类型返回不同的路径
        if ($type == 1) {
            return $arr["basePath"] . "/Preview/" . $arr["date"]; // 返回预览目录
        }
        if ($type == 2) {
            return '/' . $arr["basePath"] . "/dall-e/" . $arr["date"]; // 返回输出目录
        }
        if($type==3){
            return $arr["filename"]; // 返回图片名称
        }
    }
}