diff --git a/src/main/java/com/ai/da/common/enums/CreditsEventsEnum.java b/src/main/java/com/ai/da/common/enums/CreditsEventsEnum.java index 2fcc8fde..adefd454 100644 --- a/src/main/java/com/ai/da/common/enums/CreditsEventsEnum.java +++ b/src/main/java/com/ai/da/common/enums/CreditsEventsEnum.java @@ -21,10 +21,14 @@ public enum CreditsEventsEnum { // SUPER_RESOLUTION("Super Resolution","30"), SUPER_RESOLUTION("Super Resolution","10"), SLOGAN("Slogan","10"), - NORMAL_GENERATE("Normal_Generate","5"), + LOGO("Logo","5"), + PATTERN("Pattern","5"), + MOOD_BOARD("MoodBoard","5"), + SKETCH_BOARD("SketchBoard","5"), + TO_PRODUCT_IMAGE("ToProductImage","5"), QUESTIONNAIRE("Questionnaire","100"), - OTHER("Other","10"); + OTHER("Other","5"); private String name; diff --git a/src/main/java/com/ai/da/mapper/primary/entity/CreditsDetail.java b/src/main/java/com/ai/da/mapper/primary/entity/CreditsDetail.java index 1422ba4c..8a0aa02a 100644 --- a/src/main/java/com/ai/da/mapper/primary/entity/CreditsDetail.java +++ b/src/main/java/com/ai/da/mapper/primary/entity/CreditsDetail.java @@ -12,6 +12,8 @@ import java.math.BigDecimal; public class CreditsDetail extends BaseEntity { /** 用户id */ private Long accountId; + /** 任务id或uuid */ + private String taskId; /** 积分变更事件 */ private String changeEvent; /** 变更积分 ( + 表示加,- 表示减) */ diff --git a/src/main/java/com/ai/da/python/PythonService.java b/src/main/java/com/ai/da/python/PythonService.java index f64dc3ea..754c7ade 100644 --- a/src/main/java/com/ai/da/python/PythonService.java +++ b/src/main/java/com/ai/da/python/PythonService.java @@ -3160,8 +3160,9 @@ public class PythonService { try { Boolean result = JSON.parseObject(JSON.toJSONString(response)).getBoolean("successful"); if (result && jsonObject.get("msg").equals("OK!")) { - JSONObject data = jsonObject.getJSONObject("data"); - JSONArray list = JSONArray.parseArray(data.get("list").toString()); +// JSONObject data = jsonObject.getJSONObject("data"); +// JSONArray list = JSONArray.parseArray(data.get("list").toString()); + JSONArray list = jsonObject.getJSONArray("data"); JSONObject map = (JSONObject) list.get(0); return map.get("category").toString(); } diff --git a/src/main/java/com/ai/da/service/CreditsService.java b/src/main/java/com/ai/da/service/CreditsService.java index ec2592c4..faf19ce7 100644 --- a/src/main/java/com/ai/da/service/CreditsService.java +++ b/src/main/java/com/ai/da/service/CreditsService.java @@ -29,7 +29,11 @@ public interface CreditsService extends IService { void addRecordToCreditsDeduction(Long accountId, String taskId, CreditsEventsEnum creditsEventsEnum); - void taskCreditsDeduction(Long accountId, String taskId); + Boolean taskCreditsDeduction(Long accountId, String taskId); CreditsDetail getByAccountIdAndChangeEvent(Long accountId, String changeEvent, String changedCredits); + + void preInsert(Long accountId, String changeEventName, String taskId); + + void updateChangedCredits(String accountId, String taskId); } diff --git a/src/main/java/com/ai/da/service/impl/CreditsServiceImpl.java b/src/main/java/com/ai/da/service/impl/CreditsServiceImpl.java index e245145f..4ddbc568 100644 --- a/src/main/java/com/ai/da/service/impl/CreditsServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/CreditsServiceImpl.java @@ -14,6 +14,7 @@ import com.ai.da.model.dto.QueryIncomeOrExpenditureDTO; import com.ai.da.service.AccountService; import com.ai.da.service.CreditsService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import io.netty.util.internal.StringUtil; @@ -190,8 +191,10 @@ public class CreditsServiceImpl extends ServiceImpl qw = new QueryWrapper<>(); qw.eq("account_id", accountId); qw.eq("change_event", changeEvent); @@ -258,4 +264,50 @@ public class CreditsServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("account_id", accountId) + .eq("task_id", taskId); + + CreditsDetail creditsDetail = baseMapper.selectOne(queryWrapper); + String changeEvent = creditsDetail.getChangeEvent(); + BigDecimal currentCredits = creditsDetail.getCredits(); + String credits = "0"; + if (changeEvent.equals("Logo") || + changeEvent.equals("Pattern") || + changeEvent.equals("MoodBoard") || + changeEvent.equals("SketchBoard")) { + credits = CreditsEventsEnum.LOGO.getValue(); + }else if (changeEvent.equals("Slogan")){ + credits = CreditsEventsEnum.SLOGAN.getValue(); + } + + BigDecimal finalCredits = currentCredits.subtract(new BigDecimal(credits)); + String changeCredits = "-" + credits; + + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.lambda() + .eq(CreditsDetail::getTaskId, taskId) + .set(CreditsDetail::getChangedCredits, changeCredits) + .set(CreditsDetail::getCredits, finalCredits); + + baseMapper.update(null, updateWrapper); + + } + } 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 1b30e1ac..a122a1a4 100644 --- a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java @@ -143,11 +143,11 @@ public class GenerateServiceImpl extends ServiceImpl i String jsonString = ""; HashMap params = new HashMap<>(); // 3.1 确定不同类型的印花分别调哪个接口 - if (generateThroughImageTextDTO.getLevel1Type().equals(PRINT_BOARD.getRealName())){ - switch(generateThroughImageTextDTO.getLevel2Type()){ + if (generateThroughImageTextDTO.getLevel1Type().equals(PRINT_BOARD.getRealName())) { + switch (generateThroughImageTextDTO.getLevel2Type()) { case "Logo": path = CommonConstant.GENERATE_SINGLE_LOGO; - params.put("tasks_id",generateThroughImageTextDTO.getUniqueId()); + params.put("tasks_id", generateThroughImageTextDTO.getUniqueId()); params.put("prompt", text); params.put("seed", generateThroughImageTextDTO.getSeed()); jsonString = JSON.toJSONString(params, SerializerFeature.WriteMapNullValue); @@ -155,8 +155,8 @@ public class GenerateServiceImpl extends ServiceImpl i case "Slogan": path = CommonConstant.GENERATE_SLOGAN; port = CommonConstant.PYTHON_PORT_9997; - params.put("num_point","16"); - params.put("tasks_id",generateThroughImageTextDTO.getUniqueId()); + params.put("num_point", "16"); + params.put("tasks_id", generateThroughImageTextDTO.getUniqueId()); params.put("prompt", text); params.put("image_url", collectionElement.getUrl()); jsonString = JSON.toJSONString(params, SerializerFeature.WriteMapNullValue); @@ -166,7 +166,7 @@ public class GenerateServiceImpl extends ServiceImpl i mode, category, generateThroughImageTextDTO.getGender()); jsonString = JSON.toJSONString(generateToPythonDTO, SerializerFeature.WriteMapNullValue); } - }else { + } else { GenerateToPythonDTO generateToPythonDTO = new GenerateToPythonDTO(generateThroughImageTextDTO.getUniqueId(), text, Objects.isNull(collectionElement) ? "" : collectionElement.getUrl(), mode, category, generateThroughImageTextDTO.getGender()); jsonString = JSON.toJSONString(generateToPythonDTO, SerializerFeature.WriteMapNullValue); @@ -231,9 +231,13 @@ public class GenerateServiceImpl extends ServiceImpl i redisUtil.addToString(key, new Gson().toJson(generateResultVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME); // 执行积分扣除 - String accountId = taskId.substring(taskId.lastIndexOf("-") + 1); - String uuid = taskId.substring(0,taskId.substring(0, taskId.lastIndexOf("-")).lastIndexOf("-")); - creditsService.taskCreditsDeduction(Long.parseLong(accountId), uuid); + // ** 注:如果生成的图片都是空白 则不扣积分 + 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); + } } @Resource @@ -315,7 +319,7 @@ public class GenerateServiceImpl extends ServiceImpl i text = "Flat coating,romantic,soft,pencil strokes,accentuating and widening the depth of pencil strokes,paper patterns,block colors,crayons,reducing image contrast,and hand drawn painting marks," + translated + ", fabric print, high quality"; } else if (userInput.contains("Real Style")) { text = "Still life photography,hyper realism,3d,deepened projection,increased permutation value,increased concavity and convexity value," + translated + ", fabric print, high quality"; - }else { + } else { text = translated; } // text = userInput + ", fabric print, high quality"; @@ -475,33 +479,34 @@ public class GenerateServiceImpl extends ServiceImpl i return new PrepareForGenerateVO(0); } } - CreditsEventsEnum creditsEventsEnum = CreditsEventsEnum.NORMAL_GENERATE; + CreditsEventsEnum creditsEventsEnum = CreditsEventsEnum.OTHER; int times = 4; // 当level1Type为Print_board时,level2Type为pattern时需要确定generateType - if (generateThroughImageTextDTO.getLevel1Type().equals(PRINT_BOARD.getRealName())){ - if (StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getLevel2Type())){ + if (generateThroughImageTextDTO.getLevel1Type().equals(PRINT_BOARD.getRealName())) { + if (StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getLevel2Type())) { throw new BusinessException("level2Type.cannot.be.empty"); - }else if (!CollectionLevel2TypeEnum.printType().contains(generateThroughImageTextDTO.getLevel2Type())){ + } else if (!CollectionLevel2TypeEnum.printType().contains(generateThroughImageTextDTO.getLevel2Type())) { throw new BusinessException("unknown.parameter.level2Type"); } // Pattern 参数校验 - if (generateThroughImageTextDTO.getLevel2Type().equals(CollectionLevel2TypeEnum.Pattern.getRealName())){ + if (generateThroughImageTextDTO.getLevel2Type().equals(CollectionLevel2TypeEnum.Pattern.getRealName())) { String text = generateThroughImageTextDTO.getText(); Long elementId = generateThroughImageTextDTO.getCollectionElementId(); Generate generate = new Generate(); validateGeneraType(generate, text, elementId); // 校验后获取 generateThroughImageTextDTO.setGenerateType(generate.getGenerateType()); + creditsEventsEnum = CreditsEventsEnum.PATTERN; } // Slogan 参数校验 - if (generateThroughImageTextDTO.getLevel2Type().equals(CollectionLevel2TypeEnum.SLOGAN.getRealName())){ - if (StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getSloganBase64())){ + if (generateThroughImageTextDTO.getLevel2Type().equals(CollectionLevel2TypeEnum.SLOGAN.getRealName())) { + if (StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getSloganBase64())) { log.error("Printboard-Slogan模式下,slogan image为空"); throw new BusinessException("slogan.image.cannot.be.empty"); } - if (StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getText())){ + if (StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getText())) { log.error("Printboard-Slogan模式下,slogan text为空"); throw new BusinessException("slogan.style.cannot.be.empty"); } @@ -532,20 +537,25 @@ public class GenerateServiceImpl extends ServiceImpl i } // Logo参数校验 - if (generateThroughImageTextDTO.getLevel2Type().equals(CollectionLevel2TypeEnum.LOGO.getRealName())){ + if (generateThroughImageTextDTO.getLevel2Type().equals(CollectionLevel2TypeEnum.LOGO.getRealName())) { // logo模式下一次只生成一张 times = 1; // 校验是否输入内容 - if (StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getText().trim())){ + if (StringUtil.isNullOrEmpty(generateThroughImageTextDTO.getText().trim())) { throw new BusinessException("please.input.the.prompt"); } // 校验seed的取值范围 int seed = Integer.parseInt(generateThroughImageTextDTO.getSeed()); - if (seed < 0 || seed > 99999){ + if (seed < 0 || seed > 99999) { throw new BusinessException("the.value.range.of.seed"); } + creditsEventsEnum = CreditsEventsEnum.LOGO; } + } else if (generateThroughImageTextDTO.getLevel1Type().equals(MOOD_BOARD.getRealName())) { + creditsEventsEnum = CreditsEventsEnum.MOOD_BOARD; + } else if (generateThroughImageTextDTO.getLevel1Type().equals(SKETCH_BOARD.getRealName())) { + creditsEventsEnum = CreditsEventsEnum.SKETCH_BOARD; } // 2、判断用户当前积分是否够本次生成消耗 @@ -580,6 +590,8 @@ public class GenerateServiceImpl extends ServiceImpl i // 6、添加预扣除积分到redis creditsService.addRecordToCreditsDeduction(generateThroughImageTextDTO.getUserId(), uuid, creditsEventsEnum); + // 6.1 添加积分扣除记录到db + creditsService.preInsert(generateThroughImageTextDTO.getUserId(), creditsEventsEnum.getName(), uuid); // 7、返回唯一id return new PrepareForGenerateVO(taskIdList, 2 - trialsCount); @@ -665,15 +677,15 @@ public class GenerateServiceImpl extends ServiceImpl i } }*/ String path; - if (type.equals("Logo")){ + if (type.equals("Logo")) { path = CommonConstant.GENERATE_LOGO_SINGLE_CANCEL; - }else { + } else { path = CommonConstant.GENERATE_CANCEL; } String key = generateResultKey + ":" + uniqueId; GenerateResultVO generateResultVO = new Gson().fromJson(redisUtil.getFromString(key), GenerateResultVO.class); - if (Objects.isNull(generateResultVO)){ + if (Objects.isNull(generateResultVO)) { log.warn("任务不存在,无法取消"); return; }