package com.youlai.boot.mini.controller; import com.youlai.boot.common.annotation.Log; import com.youlai.boot.common.annotation.RepeatSubmit; import com.youlai.boot.common.enums.ActionTypeEnum; import com.youlai.boot.common.enums.LogModuleEnum; import com.youlai.boot.common.result.Result; import com.youlai.boot.framework.security.util.SecurityUtils; import com.youlai.boot.mini.model.form.AiSingleImageGenerateForm; import com.youlai.boot.mini.model.vo.AiTaskCallbackVO; import com.youlai.boot.mini.service.AiGenerationService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.Collections; import java.util.List; @Tag(name = "AI生成图片视频相关接口") @RestController @RequestMapping("/api/v1/mini/ai/generation") @RequiredArgsConstructor @Valid public class AiGenerationController { private final AiGenerationService aiGenerationService; @Operation(summary = "上传AI生成参考文件", operationId = "AiReferenceSaveFile") @PostMapping(value = "/upload-reference", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @RepeatSubmit @Log(module = LogModuleEnum.AI_TASK_MEDIA, value = ActionTypeEnum.INSERT) public Result> uploadReferenceFile( @RequestPart(name = "images", required = false) List images, @RequestPart(name = "videos", required = false) List videos ) { Long userId = SecurityUtils.getUserId(); List urlList = aiGenerationService.uploadReferenceFile(images, videos, userId); return Result.success(urlList); } @Operation(summary = "提交单图生成任务") @PostMapping("/generate-single-image") @Log(module = LogModuleEnum.AI_GENERATION_TASK, value = ActionTypeEnum.INSERT) public Result generateSingleImage(@Valid @RequestBody AiSingleImageGenerateForm form) { Long userId = SecurityUtils.getUserId(); String taskUuid = aiGenerationService.createAndGenerateImage(form, userId); return Result.success(taskUuid); } //TODO: 后续增加用户小程序订阅通知 @Operation(summary = "单图任务回调接口") @PostMapping("/single-image/task/callback") @Log(module = LogModuleEnum.AI_GENERATION_TASK, value = ActionTypeEnum.UPDATE) public Result taskCallback(@Valid @RequestBody AiTaskCallbackVO vo) { boolean success = aiGenerationService.handleTaskCallback(vo); return Result.success(success); } // TODO: 添加 4宫格图片生成任务 接口 ,外部服务接口为:http://127.0.0.1:8001//api/v1/four-panel-comic }