diff --git a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java index 42f7a5c7..2bab0e43 100644 --- a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java @@ -66,6 +66,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import jakarta.annotation.Resource; + import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.*; @@ -248,18 +249,27 @@ public class GenerateServiceImpl extends ServiceImpl i jsonString = JSON.toJSONString(generateToPythonDTO, SerializerFeature.WriteMapNullValue); } } else { - path = CommonConstant.GENERATE_PATH_FLUX2_KLEIN; - // 构建object_name: {userId}/{category}/{uuid}.png - String objectName = generateThroughImageTextDTO.getUserId() + "/" + category + "/" + UUID.randomUUID() + ".png"; + if (Objects.equals(version, "fast")) { + GenerateToPythonDTO generateToPythonDTO = new GenerateToPythonDTO(generateThroughImageTextDTO.getUniqueId(), text, Objects.isNull(collectionElement) ? "" : collectionElement.getUrl(), + mode, category, generateThroughImageTextDTO.getGender(), version); + jsonString = JSON.toJSONString(generateToPythonDTO, SerializerFeature.WriteMapNullValue); + } else { + + + path = CommonConstant.GENERATE_PATH_FLUX2_KLEIN; + // 构建object_name: {userId}/{category}/{uuid}.png + String objectName = generateThroughImageTextDTO.getUserId() + "/" + category + "/" + UUID.randomUUID() + ".png"; + + ImageProcessRequest imageProcessRequest = ImageProcessRequest.builder() + .object_name(objectName) + .bucket_name(userBucket) + .prompt(text).build(); + jsonString = JSON.toJSONString(imageProcessRequest); + } - ImageProcessRequest imageProcessRequest = ImageProcessRequest.builder() - .object_name(objectName) - .bucket_name(userBucket) - .prompt(text).build(); - jsonString = JSON.toJSONString(imageProcessRequest); } - Boolean requestResult = pythonService.generateSketchOrPrint(jsonString, port, path,generateThroughImageTextDTO.getUniqueId()); + Boolean requestResult = pythonService.generateSketchOrPrint(jsonString, port, path, generateThroughImageTextDTO.getUniqueId()); // 5、将本次请求存入redis @@ -274,6 +284,7 @@ public class GenerateServiceImpl extends ServiceImpl i redisUtil.addToString(key, new Gson().toJson(generateResultVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME); } + public void saveGenerateImmediately(Generate generate) { save(generate); // 使用 TransactionSynchronizationManager 在事务真正提交后再设锁 @@ -329,52 +340,52 @@ public class GenerateServiceImpl extends ServiceImpl i log.info("============ProcessGenerateResult listening=========="); log.debug("taskId: " + taskId); String status = null; - // 1、处理模型返回的数据 - GenerateDetail generateDetail = new GenerateDetail(); - GenerateCollectionItemVO generateCollectionItemVO = new GenerateCollectionItemVO(); - Generate generate; - try { - // 等待 HTTP 线程写入完成后再查库 - waitForSaveLock(taskId); - generate = selectByUniqueId(taskId); - } catch (MybatisPlusException e) { - log.error(e.getMessage()); - if (e.getMessage().equals("One record is expected, but the query result is multiple records")) { - generate = selectListByUniqueId(taskId).get(0); - } else { - log.error("There are some problems with database query, please try again."); - return; - } + // 1、处理模型返回的数据 + GenerateDetail generateDetail = new GenerateDetail(); + GenerateCollectionItemVO generateCollectionItemVO = new GenerateCollectionItemVO(); + Generate generate; + try { + // 等待 HTTP 线程写入完成后再查库 + waitForSaveLock(taskId); + generate = selectByUniqueId(taskId); + } catch (MybatisPlusException e) { + log.error(e.getMessage()); + if (e.getMessage().equals("One record is expected, but the query result is multiple records")) { + generate = selectListByUniqueId(taskId).get(0); + } else { + log.error("There are some problems with database query, please try again."); + return; } + } // Generate generate = selectByUniqueId(taskId); - String md5 = MD5Utils.encryptFile(minioUtil.getPreSignedUrl(url, 24 * 60), Boolean.FALSE); - // 通过MD5值和level1Type,判断不同level1Type下相同的图片是否被like过 - List> libraryIdList = generateDetailMapper.getLibraryIdThroughMD5(md5, generate.getLevel1Type()); - if (!libraryIdList.isEmpty()) { - generateDetail.setIsLike((byte) 1); - generateDetail.setLibraryId(libraryIdList.get(0).get("library_id")); - generateCollectionItemVO.setIsLiked(Boolean.TRUE); - } - generateDetail.setUrl(url); - generateDetail.setGenerateId(generate.getId()); - generateDetail.setCreateDate(LocalDateTime.now()); - generateDetail.setMd5(""); - // 将相应的url保存到数据库 - generateDetailMapper.insert(generateDetail); - log.debug("generateDetail: " + generateDetail.toString()); + String md5 = MD5Utils.encryptFile(minioUtil.getPreSignedUrl(url, 24 * 60), Boolean.FALSE); + // 通过MD5值和level1Type,判断不同level1Type下相同的图片是否被like过 + List> libraryIdList = generateDetailMapper.getLibraryIdThroughMD5(md5, generate.getLevel1Type()); + if (!libraryIdList.isEmpty()) { + generateDetail.setIsLike((byte) 1); + generateDetail.setLibraryId(libraryIdList.get(0).get("library_id")); + generateCollectionItemVO.setIsLiked(Boolean.TRUE); + } + generateDetail.setUrl(url); + generateDetail.setGenerateId(generate.getId()); + generateDetail.setCreateDate(LocalDateTime.now()); + generateDetail.setMd5(""); + // 将相应的url保存到数据库 + generateDetailMapper.insert(generateDetail); + log.debug("generateDetail: " + generateDetail.toString()); // String uuid = taskId.substring(0, taskId.substring(0, taskId.lastIndexOf("-")).lastIndexOf("-")); - String key = generateResultKey + ":" + taskId; - String imageName = url.substring(url.lastIndexOf("/") + 1); - status = imageName.equals("white_image.jpg") ? "Invalid" : "Success"; - if (StringUtil.isNullOrEmpty(category)) { - Generate generateRecord = selectByUniqueId(taskId); - category = generateRecord.getLevel2Type(); - } - GenerateResultVO generateResultVO = new GenerateResultVO(taskId, generateDetail.getId(), url, status, category); - // 更新redis - redisUtil.addToString(key, new Gson().toJson(generateResultVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME); - log.debug("generateResultVO: " + generateResultVO.toString()); + String key = generateResultKey + ":" + taskId; + String imageName = url.substring(url.lastIndexOf("/") + 1); + status = imageName.equals("white_image.jpg") ? "Invalid" : "Success"; + if (StringUtil.isNullOrEmpty(category)) { + Generate generateRecord = selectByUniqueId(taskId); + category = generateRecord.getLevel2Type(); + } + GenerateResultVO generateResultVO = new GenerateResultVO(taskId, generateDetail.getId(), url, status, category); + // 更新redis + redisUtil.addToString(key, new Gson().toJson(generateResultVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME); + log.debug("generateResultVO: " + generateResultVO.toString()); // 执行积分扣除 @@ -837,7 +848,7 @@ public class GenerateServiceImpl extends ServiceImpl i response.code(), (requestEndTime - requestStartTime), taskId); String result = response.body().string(); if (!response.isSuccessful()) { - log.warn("Google API响应失败,状态码: {} for taskId: {},结果:{}", response.code(), taskId,result); + log.warn("Google API响应失败,状态码: {} for taskId: {},结果:{}", response.code(), taskId, result); if (attempt < maxRetries) { Thread.sleep(retryDelay * attempt); // 递增延迟 continue; @@ -1260,7 +1271,7 @@ public class GenerateServiceImpl extends ServiceImpl i * @param modelName advanced high normal */ private HashMap chooseModelAndPrompt(GenerateThroughImageTextDTO generateDTO, String modelName) { - if (StringUtil.isNullOrEmpty(modelName)){ + if (StringUtil.isNullOrEmpty(modelName)) { throw new BusinessException("system error"); } HashMap modelAndPromptMap = new HashMap<>(); @@ -1278,7 +1289,7 @@ public class GenerateServiceImpl extends ServiceImpl i String style = generateDTO.getText().substring(0, firstCommaIndex).trim(); String prompt = generateDTO.getText().substring(firstCommaIndex + 1).trim(); - prompt = getPrintboardPrompt(style, prompt,modelName,isUseImage); + prompt = getPrintboardPrompt(style, prompt, modelName, isUseImage); modelAndPromptMap.put(ModelConstants.PROMPT, prompt); @@ -1676,14 +1687,14 @@ public class GenerateServiceImpl extends ServiceImpl i "Flat textile pattern printed directly on fabric surface, no three-dimensional objects, no items placed on cloth. \n" + "Real style: fabric print, realistic woven/printed pattern, detailed surface pattern only"; } - }else { - throw new BusinessException("style error:"+ style); + } else { + throw new BusinessException("style error:" + style); } if (userInput == null || userInput.trim().isEmpty()) { - if (isUseImage){ + if (isUseImage) { prompt = "Theme: Image content" + "\nRequirement: " + systemPrompt; - }else { + } else { throw new BusinessException("prompt null"); } } else { @@ -4258,11 +4269,11 @@ public class GenerateServiceImpl extends ServiceImpl i // 处理不同状态 switch (statusEnum) { case TASK_NOT_FOUND: - // 审核没过 + // 审核没过 case REQUEST_MODERATED: - // 审核没过 + // 审核没过 case CONTENT_MODERATED: - // 出错 + // 出错 case ERROR: return "Fail"; case PENDING_F: