TASK:更新各生成功能需要消耗的积分
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -928,7 +935,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());
|
||||
}
|
||||
@@ -985,8 +995,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");
|
||||
@@ -1015,8 +1024,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");
|
||||
@@ -1044,7 +1052,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;
|
||||
@@ -1072,11 +1082,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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user