diff --git a/src/main/java/com/ai/da/mapper/primary/entity/CloudTask.java b/src/main/java/com/ai/da/mapper/primary/entity/CloudTask.java index ea61a799..c366072e 100644 --- a/src/main/java/com/ai/da/mapper/primary/entity/CloudTask.java +++ b/src/main/java/com/ai/da/mapper/primary/entity/CloudTask.java @@ -35,7 +35,7 @@ public class CloudTask implements Serializable { private Integer completedNum; - private Decimal costCredits; + private Integer costCredits; private Integer status; diff --git a/src/main/java/com/ai/da/mapper/primary/entity/ThreeDModule.java b/src/main/java/com/ai/da/mapper/primary/entity/ThreeDModule.java index fb8b89d8..d1c9d967 100644 --- a/src/main/java/com/ai/da/mapper/primary/entity/ThreeDModule.java +++ b/src/main/java/com/ai/da/mapper/primary/entity/ThreeDModule.java @@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; +import java.math.BigDecimal; @Data @EqualsAndHashCode(callSuper = false) @@ -19,4 +20,7 @@ public class ThreeDModule implements Serializable { private Long id; private Long projectId; private Long threeDSimpleId; + private Long collectionElementId; + private BigDecimal x; + private BigDecimal y; } diff --git a/src/main/java/com/ai/da/model/dto/ModuleSaveDTO.java b/src/main/java/com/ai/da/model/dto/ModuleSaveDTO.java index 93bd1175..950647c8 100644 --- a/src/main/java/com/ai/da/model/dto/ModuleSaveDTO.java +++ b/src/main/java/com/ai/da/model/dto/ModuleSaveDTO.java @@ -27,7 +27,7 @@ public class ModuleSaveDTO { @ApiModelProperty("手稿板图片id 数组") private List sketchBoard; - private Long patternMaking3D; + private PatternMaking3DDTO patternMaking3D; // private MoodBoardModuleChooseVO moodBoard; // private List printBoard; diff --git a/src/main/java/com/ai/da/model/dto/PatternMaking3DDTO.java b/src/main/java/com/ai/da/model/dto/PatternMaking3DDTO.java new file mode 100644 index 00000000..83857bf8 --- /dev/null +++ b/src/main/java/com/ai/da/model/dto/PatternMaking3DDTO.java @@ -0,0 +1,13 @@ +package com.ai.da.model.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class PatternMaking3DDTO { + private Long threeDSimpleId; + private Long collectionElementId; + private BigDecimal x; + private BigDecimal y; +} diff --git a/src/main/java/com/ai/da/model/vo/ThreeDVO.java b/src/main/java/com/ai/da/model/vo/ThreeDVO.java index 4b067fcf..da31eef7 100644 --- a/src/main/java/com/ai/da/model/vo/ThreeDVO.java +++ b/src/main/java/com/ai/da/model/vo/ThreeDVO.java @@ -3,7 +3,9 @@ package com.ai.da.model.vo; import com.ai.da.mapper.primary.entity.ThreeDLayout; import com.ai.da.mapper.primary.entity.ThreeDPatternLayout; import lombok.Data; +import org.apache.poi.hpsf.Decimal; +import java.math.BigDecimal; import java.util.List; @Data @@ -14,4 +16,8 @@ public class ThreeDVO { // private ThreeDPatternLayout threeDPatternLayoutUrl; private String threeDPatternLayoutUrl; private String threeDSimpleUrl; + + private BigDecimal x; + private BigDecimal y; + private String printUrl; } diff --git a/src/main/java/com/ai/da/service/CreditsService.java b/src/main/java/com/ai/da/service/CreditsService.java index a3030057..9f7cf8bf 100644 --- a/src/main/java/com/ai/da/service/CreditsService.java +++ b/src/main/java/com/ai/da/service/CreditsService.java @@ -27,6 +27,8 @@ public interface CreditsService extends IService { Boolean creditsPreDeduction(CreditsEventsEnum event, Integer num); + Boolean creditsPreDeduction(Integer credits); + void addRecordToCreditsDeduction(Long accountId, String taskId, CreditsEventsEnum creditsEventsEnum); Boolean taskCreditsDeduction(Long 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 4bf27209..4b7c836c 100644 --- a/src/main/java/com/ai/da/service/impl/CreditsServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/CreditsServiceImpl.java @@ -227,6 +227,32 @@ public class CreditsServiceImpl extends ServiceImpl keys = redisUtil.getKeysFromString(creditsDeduction + ":" + accountId + ":*"); + List multiValue = redisUtil.getMultiValue(keys); + // 1.1 预扣除区 积分总和 + int sum = multiValue.stream().mapToInt(Integer::parseInt).sum(); + // 1.2 加上本次操作需要扣除的积分 + sum += credits; + + // 2、获取当前积分 + BigDecimal existingCredits = accountMapper.selectById(accountId).getCredits(); + BigDecimal subtract = existingCredits.subtract(new BigDecimal(sum)); + + // 3、判断剩余积分是否够本次操作 + if (subtract.compareTo(BigDecimal.ZERO) < 0) { + // 3.1 不够,直接返回余额不够,充值 + return Boolean.FALSE; + } + + return Boolean.TRUE; + } + @Override public void addRecordToCreditsDeduction(Long accountId, String taskId, CreditsEventsEnum creditsEventsEnum) { // 5、添加当前任务的预扣积分到redis 任务有效期一天,若待扣积分两天还没被移除,说明任务已经失败,待扣积分自动失效 diff --git a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java index f72665a2..64c857f2 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -1825,10 +1825,10 @@ public class DesignServiceImpl extends ServiceImpl impleme }else if (cloudTaskDTO.getBuildType().equals(BuildType.TO_PRODUCT_IMAGE.getValue())) { ToProductImageDTO toProductImageDTO = cloudTaskDTO.getToProductImage(); // 判断用户当前积分是否够本次生成消耗 -// Boolean preDeduction = creditsService.creditsPreDeduction(CreditsEventsEnum.TO_PRODUCT_IMAGE, toProductImageDTO.getToProductImageVOList().size()); -// if (!preDeduction) { -// throw new BusinessException("Your remaining credits are insufficient for this generation. Please recharge.", ResultEnum.WARNING.getCode()); -// } + Boolean preDeduction = creditsService.creditsPreDeduction(cloudTaskDTO.getCostCredits()); + if (!preDeduction) { + throw new BusinessException("Your remaining credits are insufficient for this generation. Please recharge.", ResultEnum.WARNING.getCode()); + } AuthPrincipalVo userHolder = UserContext.getUserHolder(); String batchTaskId = UUID.randomUUID() + "-" + userHolder.getId(); @@ -1955,10 +1955,10 @@ public class DesignServiceImpl extends ServiceImpl impleme }else if (cloudTaskDTO.getBuildType().equals(BuildType.RELIGHT.getValue())) { ToProductImageDTO toProductImageDTO = cloudTaskDTO.getToProductImage(); // 判断用户当前积分是否够本次生成消耗 -// Boolean preDeduction = creditsService.creditsPreDeduction(CreditsEventsEnum.RELIGHT, toProductImageDTO.getToProductImageVOList().size()); -// if (!preDeduction) { -// throw new BusinessException("Your remaining credits are insufficient for this generation. Please recharge.", ResultEnum.WARNING.getCode()); -// } + Boolean preDeduction = creditsService.creditsPreDeduction(cloudTaskDTO.getCostCredits()); + if (!preDeduction) { + throw new BusinessException("Your remaining credits are insufficient for this generation. Please recharge.", ResultEnum.WARNING.getCode()); + } AuthPrincipalVo userHolder = UserContext.getUserHolder(); String batchTaskId = UUID.randomUUID() + "-" + userHolder.getId(); @@ -2066,17 +2066,16 @@ public class DesignServiceImpl extends ServiceImpl impleme return batchTaskId; } else if (cloudTaskDTO.getBuildType().equals(BuildType.POSE_TRANSFORM.getValue())) { Long accountId = UserContext.getUserHolder().getId(); - + Boolean preDeduction = creditsService.creditsPreDeduction(cloudTaskDTO.getCostCredits()); + if (!preDeduction) { + throw new BusinessException("Your remaining credits are insufficient for this generation. Please recharge.", ResultEnum.WARNING.getCode()); + } List poseTransformList = cloudTaskDTO.getPoseTransform(); if (CollectionUtil.isNotEmpty(poseTransformList)) { String taskBatchId = UUID.randomUUID().toString() + "-" + accountId; for (PoseTransformBatchDTO poseTransformBatchDTO : poseTransformList) { // 1、判断用户当前积分是否够本次生成消耗 CreditsEventsEnum creditsEventsEnum = CreditsEventsEnum.POSE_TRANSFORMATION; - Boolean preDeduction = creditsService.creditsPreDeduction(creditsEventsEnum, 1); - if (!preDeduction) { - throw new BusinessException("remaining.credits.insufficient", ResultEnum.WARNING.getCode()); - } // 3、生成唯一id 使用uuid,由于uuid重复的几率很小,故取消对uuid重复性的校验 String uuid = UUID.randomUUID().toString(); diff --git a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java index 036ea6bf..82e0fa3e 100644 --- a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java @@ -1643,6 +1643,10 @@ public class UserLikeGroupServiceImpl extends ServiceImpl threeDModuleQueryWrapper = new QueryWrapper<>(); threeDModuleQueryWrapper.lambda().eq(ThreeDModule::getProjectId, projectId); @@ -1901,12 +1906,18 @@ public class UserLikeGroupServiceImpl extends ServiceImpl