moodboard基础模型修改

This commit is contained in:
litianxiang
2026-03-25 10:39:22 +08:00
parent cb6f94d2d4
commit 76eeb2be53

View File

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