Merge branch 'dev/dev_xp' into dev/dev

# Conflicts:
#	src/main/java/com/ai/da/model/vo/MagicToolResultVO.java
This commit is contained in:
2025-06-20 14:57:39 +08:00
5 changed files with 88 additions and 46 deletions

View File

@@ -294,8 +294,8 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
if (!status.equals("Invalid")) {
String accountId = taskId.substring(taskId.lastIndexOf("-") + 1);
String uuid = taskId.substring(0, taskId.substring(0, taskId.lastIndexOf("-")).lastIndexOf("-"));
Boolean flag = creditsService.taskCreditsDeduction(Long.parseLong(accountId), uuid);
if (flag) creditsService.updateChangedCredits(accountId, uuid);
Boolean flag = creditsService.taskCreditsDeduction(Long.parseLong(accountId), taskId);
if (flag) creditsService.updateChangedCredits(accountId, taskId);
}
}
@@ -530,10 +530,10 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
}
CreditsEventsEnum creditsEventsEnum = CreditsEventsEnum.OTHER;
if (generateThroughImageTextDTO.getModelName().equals("wx")){
String taskId = createAsyncTask(generateThroughImageTextDTO);
// String taskId = "e53c86ea-53be-424b-8ac7-3c01c141f4f7";
creditsEventsEnum = CreditsEventsEnum.WX_TEXT2IMG;
// 6、添加预扣除积分到redis
creditsService.addRecordToCreditsDeduction(generateThroughImageTextDTO.getUserId(), taskId, creditsEventsEnum);
// 6.1 添加积分扣除记录到db
@@ -560,12 +560,14 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
validateGeneraType(generate, text, elementId);
// 校验后获取
generateThroughImageTextDTO.setGenerateType(generate.getGenerateType());
creditsEventsEnum = CreditsEventsEnum.PATTERN;
// creditsEventsEnum = CreditsEventsEnum.PATTERN;
creditsEventsEnum = CreditsEventsEnum.LOCAL_TEXT2IMG;
// 模型迁移SD1.? -> flux,从而产生了不同模型的选择,
// high -> 生成图片质量高,但生成速度慢,每次生成只返回一张图片
// fast -> 生成图片质量低,但生成速度快,每次生成返回四张图片
if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("high")){
creditsEventsEnum = CreditsEventsEnum.LOCAL_TEXT2IMG_HIGH;
times = 1;
}
}
@@ -623,13 +625,15 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
creditsEventsEnum = CreditsEventsEnum.LOGO;
}
} else if (generateThroughImageTextDTO.getLevel1Type().equals(MOOD_BOARD.getRealName())) {
creditsEventsEnum = CreditsEventsEnum.MOOD_BOARD;
creditsEventsEnum = CreditsEventsEnum.LOCAL_TEXT2IMG;
if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("high")){
creditsEventsEnum = CreditsEventsEnum.LOCAL_TEXT2IMG_HIGH;
times = 1;
}
} else if (generateThroughImageTextDTO.getLevel1Type().equals(SKETCH_BOARD.getRealName())) {
creditsEventsEnum = CreditsEventsEnum.SKETCH_BOARD;
creditsEventsEnum = CreditsEventsEnum.LOCAL_TEXT2IMG;
if (!StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getModelName()) && generateThroughImageTextDTO.getModelName().equals("high")){
creditsEventsEnum = CreditsEventsEnum.LOCAL_TEXT2IMG_HIGH;
times = 1;
}
}
@@ -650,30 +654,30 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
ArrayList<String> taskIdList = new ArrayList<>();
for (int i = 1; i <= times; i++) {
String temp = uuid;
temp += "-" + i + "-" + generateThroughImageTextDTO.getUserId();
taskIdList.add(temp);
generateThroughImageTextDTO.setUniqueId(temp);
String taskId = uuid;
taskId += "-" + i + "-" + generateThroughImageTextDTO.getUserId();
taskIdList.add(taskId);
generateThroughImageTextDTO.setUniqueId(taskId);
String jsonString = JSON.toJSONString(generateThroughImageTextDTO);
// 4、加入redis排队便于获取实时排队信息
Double maxScore = redisUtil.getMaxScore(consumptionOrderKey);
redisUtil.addToZSet(consumptionOrderKey, temp, maxScore);
redisUtil.addToZSet(consumptionOrderKey, taskId, maxScore);
// 加入resultMap
String key = generateResultKey + ":" + temp;
String key = generateResultKey + ":" + taskId;
GenerateResultVO generateResultVO = new GenerateResultVO(generateThroughImageTextDTO.getUniqueId(), null, null, "Waiting");
redisUtil.addToString(key, new Gson().toJson(generateResultVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME);
// 5、将消息发布到MQ消息队列
rabbitMQService.publishMessageToGenerate(jsonString);
// update 积分扣除由按次收费改为按生成图片数量收费
// 6、添加预扣除积分到redis
creditsService.addRecordToCreditsDeduction(generateThroughImageTextDTO.getUserId(), taskId, creditsEventsEnum);
// 6.1 添加积分扣除记录到db
creditsService.preInsert(generateThroughImageTextDTO.getUserId(), creditsEventsEnum.getName(), taskId, Boolean.TRUE, null);
}
// 6、添加预扣除积分到redis
creditsService.addRecordToCreditsDeduction(generateThroughImageTextDTO.getUserId(), uuid, creditsEventsEnum);
// 6.1 添加积分扣除记录到db
creditsService.preInsert(generateThroughImageTextDTO.getUserId(), creditsEventsEnum.getName(), uuid, Boolean.TRUE, null);
// 7、返回唯一id
return new PrepareForGenerateVO(taskIdList, 2);
}
@@ -987,7 +991,8 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
log.info("imageToSketch parameter : {}", imageToSketchDTO);
// 检查积分是否够本次扣除
CreditsEventsEnum event = CreditsEventsEnum.IMAGE_TO_SKETCH;
// CreditsEventsEnum event = CreditsEventsEnum.IMAGE_TO_SKETCH;
CreditsEventsEnum event = CreditsEventsEnum.FLUX_IMG2IMG;
Boolean b = creditsService.checkCredits(accountId, event, 1);
if (!b) {
throw new BusinessException("remaining.credits.insufficient", ResultEnum.PROMPT.getCode());
@@ -1005,15 +1010,21 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
}else {
imagePath = collagePictureUrl;
}
taskId = flux(CreditsEventsEnum.IMAGE_TO_SKETCH, null, imagePath);
taskId = flux(event, null, imagePath);
// 存数据库
saveExtractSketchRequest(imageToSketchDTO, collagePictureUrl, projectId,
accountId, imageToSketchDTO.getStyle(), "flux", taskId);
// 6、添加预扣除积分到redis
creditsService.addRecordToCreditsDeduction(accountId, taskId, event);
// 6.1 添加积分扣除记录到db
creditsService.preInsert(accountId, event.getName(), taskId, Boolean.TRUE, null);
return taskId;
}
taskId = UUID.randomUUID().toString();
// 异步执行耗时操作
// 异步执行耗时操作(由于prompt提取耗时较长页面暂时只提供flux生成,废弃以下部分)
CompletableFuture.runAsync(() -> {
try {
processImageToSketch(taskId, imageToSketchDTO, collagePictureUrl, projectId, accountId, event);
@@ -1117,9 +1128,10 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
Long projectId = poseTransformDTO.getProjectId();
String productImage = poseTransformDTO.getProductImage();
Integer poseId = poseTransformDTO.getPoseId();
boolean wxTask = StringUtil.isNullOrEmpty(poseTransformDTO.getModelName()) && poseTransformDTO.getModelName().equals("wx");
// 1、判断用户当前积分是否够本次生成消耗
CreditsEventsEnum creditsEventsEnum = CreditsEventsEnum.POSE_TRANSFORMATION;
CreditsEventsEnum creditsEventsEnum = wxTask ? CreditsEventsEnum.WX_ANIMATION : CreditsEventsEnum.LOCAL_ANIMATION;
Boolean preDeduction = creditsService.creditsPreDeduction(creditsEventsEnum, 1);
if (!preDeduction) {
throw new BusinessException("remaining.credits.insufficient", ResultEnum.WARNING.getCode());
@@ -2162,16 +2174,20 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
String objectName = accountId + "/imageToSketch/" + taskId + ".png";
String fluxResult = getFluxResult(taskId, objectName);
if (Objects.isNull(generateDetail)){
if (fluxResult.equals("Fail") || fluxResult.equals("Pending")){
if (StringUtil.isNullOrEmpty(fluxResult)){
return new GenerateResultVO(taskId, "Fail");
}else if (fluxResult.equals("Fail") || fluxResult.equals("Pending")){
String status = fluxResult.equals("Fail") ? "Fail" : "Executing";
return new GenerateResultVO(taskId, status);
}
generateDetail = new GenerateDetail(generate.getId(), fluxResult,
MD5Utils.encryptFile(
minioUtil.getPreSignedUrl(fluxResult, CommonConstant.MINIO_IMAGE_EXPIRE_TIME), false),
LocalDateTime.now());
generateDetailMapper.insert(generateDetail);
// 扣积分
Boolean flag = creditsService.taskCreditsDeduction(accountId, taskId);
if (flag) creditsService.updateChangedCredits(String.valueOf(accountId), taskId);
} else if (StringUtil.isNullOrEmpty(generateDetail.getUrl())){
// 一般来说这条线应该走不到
generateDetail.setGenerateId(generate.getId());

View File

@@ -375,7 +375,10 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
@Transactional(rollbackFor = Exception.class)
public List<ToProductImageResult> toProduct(ToProductImageDTO toProductImageDTO) {
// 判断用户当前积分是否够本次生成消耗
Boolean preDeduction = creditsService.creditsPreDeduction(CreditsEventsEnum.TO_PRODUCT_IMAGE, toProductImageDTO.getToProductImageVOList().size());
boolean fluxTask = !StringUtil.isNullOrEmpty(toProductImageDTO.getModelName())
&& toProductImageDTO.getModelName().equals("flux");
CreditsEventsEnum creditsEventsEnum = fluxTask ? CreditsEventsEnum.FLUX_IMG2IMG : CreditsEventsEnum.TO_PRODUCT_IMAGE;
Boolean preDeduction = creditsService.creditsPreDeduction(creditsEventsEnum, toProductImageDTO.getToProductImageVOList().size());
if (!preDeduction) {
throw new BusinessException("Your remaining credits are insufficient for this generation. Please recharge.", ResultEnum.WARNING.getCode());
}
@@ -399,7 +402,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
}
String[] words = prompt.split("\\s+");
if (words.length > 200) {
if (words.length > 180) {
throw new BusinessException("Please keep your input text under 200 words. Thanks!");
}
@@ -454,8 +457,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
sb.append(",high quality clothing details,").append(prompt).append(",8K realistic,HDR");
}
ToProductImageResult toProductImageResult = new ToProductImageResult();
if (!StringUtil.isNullOrEmpty(toProductImageDTO.getModelName())
&& toProductImageDTO.getModelName().equals("flux")){
if (fluxTask){
taskId = generateService.flux(CreditsEventsEnum.TO_PRODUCT_IMAGE, sb.toString(), tDesignPythonOutfit.getDesignUrl());
toProductImageResult.setModelName("flux");
toProductImageResult.setResultType("ToProductImage");
@@ -494,8 +496,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
ToProductElement toProductElement = toProductElementMapper.selectById(toProductImageVO.getElementId());
ToProductImageResult toProductImageResult = new ToProductImageResult();
if (!StringUtil.isNullOrEmpty(toProductImageDTO.getModelName())
&& toProductImageDTO.getModelName().equals("flux")){
if (fluxTask){
taskId = generateService.flux(CreditsEventsEnum.TO_PRODUCT_IMAGE, sb.toString(), toProductElement.getUrl());
toProductImageResult.setModelName("flux");
toProductImageResult.setResultType("ToProductImage");
@@ -527,7 +528,9 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
i ++;
sb = new StringBuilder("The best quality, masterpiece, real image.");
// 添加需要扣除的积分到预扣除区
creditsService.addRecordToCreditsDeduction(userHolder.getId(), taskId, CreditsEventsEnum.TO_PRODUCT_IMAGE);
creditsService.addRecordToCreditsDeduction(userHolder.getId(), taskId, creditsEventsEnum);
// 添加积分扣除记录到db
creditsService.preInsert(userHolder.getId(), creditsEventsEnum.getName(), taskId, Boolean.TRUE, null);
}
return result;
@@ -667,12 +670,16 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
String objectName = project.getAccountId() + "/product_image/" + taskId + ".png";
String fluxResult = generateService.getFluxResult(taskId, objectName);
if (StringUtil.isNullOrEmpty(fluxResult)){
results.add(new MagicToolResultVO());
results.add(new MagicToolResultVO(taskId, "Fail"));
} else if (fluxResult.equals("Fail") || fluxResult.equals("Pending")) {
results.add(new MagicToolResultVO(fluxResult));
results.add(new MagicToolResultVO(taskId, fluxResult));
} else {
results.add(processFluxResult(fluxResult, toProductImageResult, taskId));
// 扣积分
Boolean flag = creditsService.taskCreditsDeduction(project.getAccountId(), taskId);
if (flag) creditsService.updateChangedCredits(String.valueOf(project.getAccountId()), taskId);
}
// 在这个stream中不再继续往后执行
return;
}
@@ -956,7 +963,10 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
@Transactional(rollbackFor = Exception.class)
public List<ToProductImageResult> relight(ToProductImageDTO toProductImageDTO) {
// 判断用户当前积分是否够本次生成消耗
Boolean preDeduction = creditsService.creditsPreDeduction(CreditsEventsEnum.RELIGHT, toProductImageDTO.getToProductImageVOList().size());
boolean fluxTask = !StringUtil.isNullOrEmpty(toProductImageDTO.getModelName())
&& toProductImageDTO.getModelName().equals("flux");
CreditsEventsEnum creditsEventsEnum = fluxTask ? CreditsEventsEnum.FLUX_IMG2IMG : CreditsEventsEnum.RELIGHT;
Boolean preDeduction = creditsService.creditsPreDeduction(creditsEventsEnum, toProductImageDTO.getToProductImageVOList().size());
if (!preDeduction) {
throw new BusinessException("Your remaining credits are insufficient for this generation. Please recharge.", ResultEnum.WARNING.getCode());
}
@@ -1013,8 +1023,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
}
ToProductImageResult toProductImageResult = new ToProductImageResult();
if (!StringUtil.isNullOrEmpty(toProductImageDTO.getModelName())
&& toProductImageDTO.getModelName().equals("flux")){
if (fluxTask){
taskId = generateService.flux(CreditsEventsEnum.RELIGHT, s, toProductImageResult1.getUrl());
toProductImageResult.setModelName("flux");
toProductImageResult.setResultType("Relight");
@@ -1043,8 +1052,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
}else {
ToProductElement toProductElement = toProductElementMapper.selectById(toProductImageVO.getElementId());
ToProductImageResult toProductImageResult = new ToProductImageResult();
if (!StringUtil.isNullOrEmpty(toProductImageDTO.getModelName())
&& toProductImageDTO.getModelName().equals("flux")){
if (fluxTask){
taskId = generateService.flux(CreditsEventsEnum.RELIGHT, s, toProductElement.getUrl());
toProductImageResult.setModelName("flux");
toProductImageResult.setResultType("Relight");
@@ -1072,7 +1080,9 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
result.add(toProductImageResult);
}
// 添加需要扣除的积分到预扣除区
creditsService.addRecordToCreditsDeduction(userHolder.getId(), taskId, CreditsEventsEnum.RELIGHT);
creditsService.addRecordToCreditsDeduction(userHolder.getId(), taskId, creditsEventsEnum);
// 添加积分扣除记录到db
creditsService.preInsert(userHolder.getId(), creditsEventsEnum.getName(), taskId, Boolean.TRUE, null);
}
return result;
@@ -1100,11 +1110,14 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
String fluxResult = generateService.getFluxResult(taskId, objectName);
if (StringUtil.isNullOrEmpty(fluxResult)){
results.add(new MagicToolResultVO());
results.add(new MagicToolResultVO(taskId, "Fail"));
} else if (fluxResult.equals("Fail") || fluxResult.equals("Pending")) {
results.add(new MagicToolResultVO(fluxResult));
results.add(new MagicToolResultVO(taskId, fluxResult));
} else {
results.add(processFluxResult(fluxResult, toProductImageResult, taskId));
// 扣积分
Boolean flag = creditsService.taskCreditsDeduction(project.getAccountId(), taskId);
if (flag) creditsService.updateChangedCredits(String.valueOf(project.getAccountId()), taskId);
}
return;
}