积分相关修改

1、BUGFIX: 用户表中的积分与积分详细中不统一;
2、To_Product_Image 添加扣除积分
3、每周刷新付费用户积分
This commit is contained in:
2024-06-26 13:55:20 +08:00
parent e614e3a07a
commit 0759452381
13 changed files with 142 additions and 130 deletions

View File

@@ -67,27 +67,14 @@ public class GenerateConsumer {
} catch (IOException ex) { } catch (IOException ex) {
log.error("手动确认,不返回队列重新消费"); log.error("手动确认,不返回队列重新消费");
} }
// 2.2 将该消息从取消列表中删除
// redisUtil.removeFromSet(cancelSetKey, uniqueId);
} else { } else {
// GenerateCollectionVO generateCollectionVO = generateService.generateThroughImageText(generateThroughImageTextDTO); generateService.generateThroughImageText(generateThroughImageTextDTO);
try {
generateService.generateThroughImageText(generateThroughImageTextDTO);
}catch (Exception e){
log.error("error message : {}", e.getMessage());
}
// 将消息从redis排队队列中删除,需保证被消费的消息存储到db之后再从redis删除 // 将消息从redis排队队列中删除,需保证被消费的消息存储到db之后再从redis删除
redisUtil.removeFromZSet(consumptionOrderKey, uniqueId); redisUtil.removeFromZSet(consumptionOrderKey, uniqueId);
/*if (!Objects.isNull(generateCollectionVO)) {
HashMap<String, String> generateResult = new HashMap<>();
generateResult.put(uniqueId, JSONObject.toJSONString(generateCollectionVO));
// 将结果存在redis中 ,为空时不要存
redisUtil.addToMap(resultMapKey, generateResult);
}*/
} }
} catch (BusinessException e) { } catch (Exception e) {
log.error(e.getMsg()); log.error(e.getMessage());
// channel.basicNack() 为不确认deliveryTag对应的消息第二个参数是否应用于多消息第三个参数是否requeue // channel.basicNack() 为不确认deliveryTag对应的消息第二个参数是否应用于多消息第三个参数是否requeue
try { try {
// 第二个参数是否批量确认消息当传false时只确认当前 deliveryTag对应的消息;当传true时会确认当前及之前所有未确认的消息。 // 第二个参数是否批量确认消息当传false时只确认当前 deliveryTag对应的消息;当传true时会确认当前及之前所有未确认的消息。
@@ -102,7 +89,7 @@ public class GenerateConsumer {
} }
// 将入参和错误信息存入数据库 // 将入参和错误信息存入数据库
String exceptionMessage = JSONObject.toJSONString(generateThroughImageTextDTO) + String exceptionMessage = JSONObject.toJSONString(generateThroughImageTextDTO) +
" Exception message " + e.getMsg(); " Exception message " + e.getMessage();
HashMap<String, String> exceptionInfo = new HashMap<>(); HashMap<String, String> exceptionInfo = new HashMap<>();
exceptionInfo.put(String.valueOf(uniqueId), exceptionMessage); exceptionInfo.put(String.valueOf(uniqueId), exceptionMessage);
// 存redis // 存redis
@@ -256,71 +243,71 @@ public class GenerateConsumer {
log.info("============ProcessRelightResult End listening=========="); log.info("============ProcessRelightResult End listening==========");
} }
// @RabbitListener(queues = MQConfig.GENERATE_QUEUE) @RabbitListener(queues = MQConfig.GENERATE_QUEUE)
// @RabbitHandler @RabbitHandler
// public void generateConsumer1(Message msg, Channel channel) { public void generateConsumer1(Message msg, Channel channel) {
// generate(msg, channel, "consumer 1"); generate(msg, channel, "consumer 1");
// } }
//
// @RabbitListener(queues = MQConfig.GENERATE_QUEUE) @RabbitListener(queues = MQConfig.GENERATE_QUEUE)
// @RabbitHandler @RabbitHandler
// public void generateConsumer2(Message msg, Channel channel) { public void generateConsumer2(Message msg, Channel channel) {
// generate(msg, channel, "consumer 2"); generate(msg, channel, "consumer 2");
// } }
//
// @RabbitListener(queues = MQConfig.GENERATE_QUEUE) @RabbitListener(queues = MQConfig.GENERATE_QUEUE)
// @RabbitHandler @RabbitHandler
// public void generateConsumer3(Message msg, Channel channel) { public void generateConsumer3(Message msg, Channel channel) {
// generate(msg, channel, "consumer 3"); generate(msg, channel, "consumer 3");
// } }
//
// @RabbitListener(queues = MQConfig.GENERATE_QUEUE) @RabbitListener(queues = MQConfig.GENERATE_QUEUE)
// @RabbitHandler @RabbitHandler
// public void generateConsumer4(Message msg, Channel channel) { public void generateConsumer4(Message msg, Channel channel) {
// generate(msg, channel, "consumer 4"); generate(msg, channel, "consumer 4");
// } }
//
// @RabbitListener(queues = MQConfig.GENERATE_QUEUE) @RabbitListener(queues = MQConfig.GENERATE_QUEUE)
// @RabbitHandler @RabbitHandler
// public void generateConsumer5(Message msg, Channel channel) { public void generateConsumer5(Message msg, Channel channel) {
// generate(msg, channel, "consumer 5"); generate(msg, channel, "consumer 5");
// } }
//
// @RabbitListener(queues = MQConfig.GENERATE_QUEUE) @RabbitListener(queues = MQConfig.GENERATE_QUEUE)
// @RabbitHandler @RabbitHandler
// public void generateConsumer6(Message msg, Channel channel) { public void generateConsumer6(Message msg, Channel channel) {
// generate(msg, channel, "consumer 6"); generate(msg, channel, "consumer 6");
// } }
//
// @RabbitListener(queues = MQConfig.GENERATE_QUEUE) @RabbitListener(queues = MQConfig.GENERATE_QUEUE)
// @RabbitHandler @RabbitHandler
// public void generateConsumer7(Message msg, Channel channel) { public void generateConsumer7(Message msg, Channel channel) {
// generate(msg, channel, "consumer 7"); generate(msg, channel, "consumer 7");
// } }
//
// @RabbitListener(queues = MQConfig.GENERATE_QUEUE) @RabbitListener(queues = MQConfig.GENERATE_QUEUE)
// @RabbitHandler @RabbitHandler
// public void generateConsumer8(Message msg, Channel channel) { public void generateConsumer8(Message msg, Channel channel) {
// generate(msg, channel, "consumer 8"); generate(msg, channel, "consumer 8");
// } }
//
// @RabbitListener(queues = MQConfig.GENERATE_QUEUE) @RabbitListener(queues = MQConfig.GENERATE_QUEUE)
// @RabbitHandler @RabbitHandler
// public void generateConsumer9(Message msg, Channel channel) { public void generateConsumer9(Message msg, Channel channel) {
// generate(msg, channel, "consumer 9"); generate(msg, channel, "consumer 9");
// } }
//
// @RabbitListener(queues = MQConfig.GENERATE_RESULT_QUEUE) @RabbitListener(queues = MQConfig.GENERATE_RESULT_QUEUE)
// @RabbitHandler @RabbitHandler
// public void getGenerateResult(Message msg, Channel channel) { public void getGenerateResult(Message msg, Channel channel) {
// processGenerateResult(msg, channel); processGenerateResult(msg, channel);
// } }
//
// @RabbitListener(queues = MQConfig.TO_PRODUCT_IMAGE_RESULT_QUEUE) @RabbitListener(queues = MQConfig.TO_PRODUCT_IMAGE_RESULT_QUEUE)
// @RabbitHandler @RabbitHandler
// public void getToProductImageResult(Message msg, Channel channel) { public void getToProductImageResult(Message msg, Channel channel) {
// processToProductImageResult(msg, channel); processToProductImageResult(msg, channel);
// } }
@RabbitListener(queues = MQConfig.RELIGHT_RESULT_QUEUE) @RabbitListener(queues = MQConfig.RELIGHT_RESULT_QUEUE)
@RabbitHandler @RabbitHandler

View File

@@ -14,9 +14,10 @@ public enum CreditsEventsEnum {
// BUY_CREDITS("Buy Credits","10"), // BUY_CREDITS("Buy Credits","10"),
// 每月更新 // 每月更新
INIT_YEARLY("init", "6000"), INIT_YEARLY("init_yearly", "6000"),
INIT_MONTHLY("init", "5000"), INIT_MONTHLY("init_monthly", "5000"),
INIT_TRIAL("init", "100"), INIT_TRIAL("init_trial", "100"),
INIT_WEEKLY("init_weekly","10000"),
// SUPER_RESOLUTION("Super Resolution","30"), // SUPER_RESOLUTION("Super Resolution","30"),
SUPER_RESOLUTION("Super Resolution","10"), SUPER_RESOLUTION("Super Resolution","10"),

View File

@@ -12,10 +12,10 @@ public class AccountTask {
@Resource @Resource
private AccountService accountService; private AccountService accountService;
/** 每个月1号凌晨刷新 年付用户的积分 */ /** 每周日晚上刷新 年付用户、月付用户的积分 */
// @Scheduled(cron = "0 0 0 1 * ?") // @Scheduled(cron = "59 59 23 ? * SUN")
public void refreshCreditsMonthly(){ public void refreshCreditsMonthly(){
accountService.refreshCreditsMonthly(); accountService.refreshCreditsWeekly();
} }
// todo 多久执行一次? // todo 多久执行一次?

View File

@@ -55,6 +55,6 @@ public class GenerateThroughImageTextDTO {
@ApiModelProperty("页面上用户设计的slogan所截的图片") @ApiModelProperty("页面上用户设计的slogan所截的图片")
String sloganBase64; String sloganBase64;
@ApiModelProperty("种子 取值范围 0~99999") @ApiModelProperty("种子 取值范围 0~500")
String seed; String seed;
} }

View File

@@ -139,5 +139,5 @@ public interface AccountService extends IService<Account> {
Boolean collectQuestionnaires(String questionnaireInfo); Boolean collectQuestionnaires(String questionnaireInfo);
void refreshCreditsMonthly(); void refreshCreditsWeekly();
} }

View File

@@ -1233,12 +1233,12 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
/** /**
* 为年费用户每月更新积分 * 为年费用户每月更新积分
*/ */
public void refreshCreditsMonthly(){ public void refreshCreditsWeekly(){
UpdateWrapper<Account> accountUpdateWrapper = new UpdateWrapper<>(); UpdateWrapper<Account> accountUpdateWrapper = new UpdateWrapper<>();
// 刷新账号有效期截止之前的年付用户的积分 // 刷新账号有效期截止之前的年付用户的积分
long epochMilli = Instant.now().toEpochMilli(); long epochMilli = Instant.now().toEpochMilli();
accountUpdateWrapper.lambda().set(Account::getCredits, CreditsEventsEnum.INIT_YEARLY.getValue()) accountUpdateWrapper.lambda().set(Account::getCredits, CreditsEventsEnum.INIT_WEEKLY.getValue())
.eq(Account::getSystemUser,1) .eq(Account::getSystemUser,1).or().eq(Account::getSystemUser,2)
.gt(Account::getValidEndTime, epochMilli); .gt(Account::getValidEndTime, epochMilli);
baseMapper.update(null,accountUpdateWrapper); baseMapper.update(null,accountUpdateWrapper);
} }

View File

@@ -210,13 +210,13 @@ public class AliPayServiceImpl implements AliPayService {
orderInfoService.updateStatusByOrderNo(orderNo, OrderStatusEnum.SUCCESS); orderInfoService.updateStatusByOrderNo(orderNo, OrderStatusEnum.SUCCESS);
//记录支付日志 //记录支付日志
paymentInfoService.createPaymentInfoForAliPay(params); paymentInfoService.createPaymentInfoForAliPay(params);
// 更新积分
creditsService.buyCredits(orderByOrderNo.getAccountId(),Float.parseFloat(totalAmount) / Float.parseFloat(CreditsEventsEnum.PRICE.getValue()));
// 添加积分变更记录 // 添加积分变更记录
creditsService.insertToCreditsDetail(orderByOrderNo.getAccountId(), creditsService.insertToCreditsDetail(orderByOrderNo.getAccountId(),
CreditsEventsEnum.BUY_CREDITS.getName() + "--Alipay", CreditsEventsEnum.BUY_CREDITS.getName() + "--Alipay",
CreditsEventsEnum.BUY_CREDITS.getValue(), CreditsEventsEnum.BUY_CREDITS.getValue(),
"positive"); "positive");
// 更新积分
creditsService.buyCredits(orderByOrderNo.getAccountId(),Float.parseFloat(totalAmount) / Float.parseFloat(CreditsEventsEnum.PRICE.getValue()));
} finally { } finally {
//要主动释放锁 //要主动释放锁
lock.unlock(); lock.unlock();
@@ -312,13 +312,13 @@ public class AliPayServiceImpl implements AliPayService {
orderInfoService.updateStatusByOrderNo(orderNo, OrderStatusEnum.SUCCESS); orderInfoService.updateStatusByOrderNo(orderNo, OrderStatusEnum.SUCCESS);
//并记录支付日志 //并记录支付日志
paymentInfoService.createPaymentInfoForAliPay(alipayTradeQueryResponse); paymentInfoService.createPaymentInfoForAliPay(alipayTradeQueryResponse);
// 更新积分
creditsService.buyCredits(orderByOrderNo.getAccountId(),orderByOrderNo.getTotalFee() / Float.parseFloat(CreditsEventsEnum.PRICE.getValue()));
// 添加积分变更记录 // 添加积分变更记录
creditsService.insertToCreditsDetail(orderByOrderNo.getAccountId(), creditsService.insertToCreditsDetail(orderByOrderNo.getAccountId(),
CreditsEventsEnum.BUY_CREDITS.getName() + "--Alipay", CreditsEventsEnum.BUY_CREDITS.getName() + "--Alipay",
CreditsEventsEnum.BUY_CREDITS.getValue(), CreditsEventsEnum.BUY_CREDITS.getValue(),
"positive"); "positive");
// 更新积分
creditsService.buyCredits(orderByOrderNo.getAccountId(),orderByOrderNo.getTotalFee() / Float.parseFloat(CreditsEventsEnum.PRICE.getValue()));
} }
} }

View File

@@ -241,13 +241,13 @@ public class AlipayHKServiceImpl implements AlipayHKService {
//记录支付日志 //记录支付日志
paymentInfoService.createPaymentInfoForAliPayHK(alipayHKCallbackDTO); paymentInfoService.createPaymentInfoForAliPayHK(alipayHKCallbackDTO);
log.info("Alipay-HK 订单:{} 支付信息状态更新成功",orderNo); log.info("Alipay-HK 订单:{} 支付信息状态更新成功",orderNo);
// 更新积分
creditsService.buyCredits(orderByOrderNo.getAccountId(),Float.parseFloat(totalAmount) / Float.parseFloat(CreditsEventsEnum.PRICE.getValue()));
// 添加积分变更记录 // 添加积分变更记录
creditsService.insertToCreditsDetail(orderByOrderNo.getAccountId(), creditsService.insertToCreditsDetail(orderByOrderNo.getAccountId(),
CreditsEventsEnum.BUY_CREDITS.getName() + "--AlipayHK", CreditsEventsEnum.BUY_CREDITS.getName() + "--AlipayHK",
CreditsEventsEnum.BUY_CREDITS.getValue(), CreditsEventsEnum.BUY_CREDITS.getValue(),
"positive"); "positive");
// 更新积分
creditsService.buyCredits(orderByOrderNo.getAccountId(),Float.parseFloat(totalAmount) / Float.parseFloat(CreditsEventsEnum.PRICE.getValue()));
log.info("用户:{} 积分信息更新成功",orderByOrderNo.getAccountId()); log.info("用户:{} 积分信息更新成功",orderByOrderNo.getAccountId());
} finally { } finally {
//要主动释放锁 //要主动释放锁

View File

@@ -118,20 +118,20 @@ public class CreditsServiceImpl extends ServiceImpl<CreditsDetailMapper, Credits
public void insertToCreditsDetail(Long accountId, String changeEvent, String credits, String changeType) { public void insertToCreditsDetail(Long accountId, String changeEvent, String credits, String changeType) {
CreditsDetail creditsDetail = new CreditsDetail(); CreditsDetail creditsDetail = new CreditsDetail();
Account account = accountMapper.selectById(accountId); Account account = accountMapper.selectById(accountId);
BigDecimal finalCredits; // BigDecimal finalCredits;
String changeCredits; String changeCredits;
if ("positive".equals(changeType)) { if ("positive".equals(changeType)) {
finalCredits = account.getCredits().add(new BigDecimal(credits)); // finalCredits = account.getCredits().add(new BigDecimal(credits));
changeCredits = "+" + credits; changeCredits = "+" + credits;
} else { } else {
finalCredits = account.getCredits().subtract(new BigDecimal(credits)); // finalCredits = account.getCredits().subtract(new BigDecimal(credits));
changeCredits = "-" + credits; changeCredits = "-" + credits;
} }
creditsDetail.setAccountId(accountId); creditsDetail.setAccountId(accountId);
creditsDetail.setChangeEvent(changeEvent); creditsDetail.setChangeEvent(changeEvent);
creditsDetail.setChangedCredits(changeCredits); creditsDetail.setChangedCredits(changeCredits);
creditsDetail.setCredits(finalCredits); // creditsDetail.setCredits(finalCredits);
// creditsDetail.setCredits(account.getCredits()); creditsDetail.setCredits(account.getCredits());
creditsDetail.setCreateTime(LocalDateTime.now()); creditsDetail.setCreateTime(LocalDateTime.now());
baseMapper.insert(creditsDetail); baseMapper.insert(creditsDetail);
@@ -286,7 +286,7 @@ public class CreditsServiceImpl extends ServiceImpl<CreditsDetailMapper, Credits
CreditsDetail creditsDetail = baseMapper.selectOne(queryWrapper); CreditsDetail creditsDetail = baseMapper.selectOne(queryWrapper);
String changeEvent = creditsDetail.getChangeEvent(); String changeEvent = creditsDetail.getChangeEvent();
BigDecimal currentCredits = creditsDetail.getCredits(); BigDecimal currentCredits = accountMapper.selectById(accountId).getCredits();
String credits = "0"; String credits = "0";
if (changeEvent.equals("Logo") || if (changeEvent.equals("Logo") ||
changeEvent.equals("Pattern") || changeEvent.equals("Pattern") ||
@@ -297,14 +297,14 @@ public class CreditsServiceImpl extends ServiceImpl<CreditsDetailMapper, Credits
credits = CreditsEventsEnum.SLOGAN.getValue(); credits = CreditsEventsEnum.SLOGAN.getValue();
} }
BigDecimal finalCredits = currentCredits.subtract(new BigDecimal(credits)); // BigDecimal finalCredits = currentCredits.subtract(new BigDecimal(credits));
String changeCredits = "-" + credits; String changeCredits = "-" + credits;
UpdateWrapper<CreditsDetail> updateWrapper = new UpdateWrapper<>(); UpdateWrapper<CreditsDetail> updateWrapper = new UpdateWrapper<>();
updateWrapper.lambda() updateWrapper.lambda()
.eq(CreditsDetail::getTaskId, taskId) .eq(CreditsDetail::getTaskId, taskId)
.set(CreditsDetail::getChangedCredits, changeCredits) .set(CreditsDetail::getChangedCredits, changeCredits)
.set(CreditsDetail::getCredits, finalCredits); .set(CreditsDetail::getCredits, currentCredits);
baseMapper.update(null, updateWrapper); baseMapper.update(null, updateWrapper);

View File

@@ -86,6 +86,8 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
@Value("${access.python.generate_sr_port}") @Value("${access.python.generate_sr_port}")
private String generateServicePort; private String generateServicePort;
// 创建 Random 对象
Random random = new Random();
@Override @Override
public GenerateCaptionVO generateCaption(Long sketchElementId) { public GenerateCaptionVO generateCaption(Long sketchElementId) {
@@ -266,6 +268,17 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
String status = imageName.equals("white_image.jpg") ? "Invalid" : "Success"; String status = imageName.equals("white_image.jpg") ? "Invalid" : "Success";
GenerateResultVO generateResultVO = new GenerateResultVO(taskId, toProductImageResult.getId(), url, status, category); GenerateResultVO generateResultVO = new GenerateResultVO(taskId, toProductImageResult.getId(), url, status, category);
redisUtil.addToString(key, new Gson().toJson(generateResultVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME); redisUtil.addToString(key, new Gson().toJson(generateResultVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME);
Long accountId = Long.parseLong(taskId.substring(taskId.lastIndexOf("-") + 1));
if (!status.equals("Invalid")){
// 4、扣除积分
Boolean b = creditsService.taskCreditsDeduction(accountId, taskId);
// 3、记录积分变更
if (b) creditsService.insertToCreditsDetail(accountId,
CreditsEventsEnum.TO_PRODUCT_IMAGE.getName(),
CreditsEventsEnum.TO_PRODUCT_IMAGE.getValue(),
"negative");
}
} }
private void validateGeneraType(Generate generate, String text, Long elementId) { private void validateGeneraType(Generate generate, String text, Long elementId) {
@@ -476,13 +489,14 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
}*/ }*/
// 判断试用用户是否还有剩余试用机会 // 判断试用用户是否还有剩余试用机会
int trialsCount = 0; // ** 不再通过生成次数限制试用用户,统一使用积分限制
/*int trialsCount = 0;
if (generateThroughImageTextDTO.getIsTestUser()) { if (generateThroughImageTextDTO.getIsTestUser()) {
trialsCount = getTrialsCount(generateThroughImageTextDTO.getUserId(), generateThroughImageTextDTO.getLevel1Type()); trialsCount = getTrialsCount(generateThroughImageTextDTO.getUserId(), generateThroughImageTextDTO.getLevel1Type());
if (trialsCount >= 2) { if (trialsCount >= 2) {
return new PrepareForGenerateVO(0); return new PrepareForGenerateVO(0);
} }
} }*/
CreditsEventsEnum creditsEventsEnum = CreditsEventsEnum.OTHER; CreditsEventsEnum creditsEventsEnum = CreditsEventsEnum.OTHER;
int times = 4; int times = 4;
// 当level1Type为Print_board时level2Type为pattern时需要确定generateType // 当level1Type为Print_board时level2Type为pattern时需要确定generateType
@@ -550,10 +564,10 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
} }
// 校验seed的取值范围 // 校验seed的取值范围
int seed = Integer.parseInt(generateThroughImageTextDTO.getSeed()); int seed = random.nextInt(501);
if (seed < 0 || seed > 99999) { log.info("随机种子:{}", seed);
throw new BusinessException("the.value.range.of.seed"); generateThroughImageTextDTO.setSeed(String.valueOf(seed));
}
creditsEventsEnum = CreditsEventsEnum.LOGO; creditsEventsEnum = CreditsEventsEnum.LOGO;
} }
} else if (generateThroughImageTextDTO.getLevel1Type().equals(MOOD_BOARD.getRealName())) { } else if (generateThroughImageTextDTO.getLevel1Type().equals(MOOD_BOARD.getRealName())) {
@@ -598,7 +612,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
creditsService.preInsert(generateThroughImageTextDTO.getUserId(), creditsEventsEnum.getName(), uuid); creditsService.preInsert(generateThroughImageTextDTO.getUserId(), creditsEventsEnum.getName(), uuid);
// 7、返回唯一id // 7、返回唯一id
return new PrepareForGenerateVO(taskIdList, 2 - trialsCount); return new PrepareForGenerateVO(taskIdList, 2);
} }
@Override @Override

View File

@@ -586,13 +586,13 @@ public class PayPalCheckoutServiceImpl implements PayPalCheckoutService {
orderInfoService.updateStatusByOrderNo(orderId, OrderStatusEnum.SUCCESS); orderInfoService.updateStatusByOrderNo(orderId, OrderStatusEnum.SUCCESS);
//记录支付日志 //记录支付日志
paymentInfoService.createPaymentInfoForPayPal(capturedOrder); paymentInfoService.createPaymentInfoForPayPal(capturedOrder);
// 更新积分
creditsService.buyCredits(orderInfo.getAccountId(), orderInfo.getTotalFee() / Float.parseFloat(CreditsEventsEnum.PRICE.getValue()));
// 添加积分变更记录 // 添加积分变更记录
creditsService.insertToCreditsDetail(orderInfo.getAccountId(), creditsService.insertToCreditsDetail(orderInfo.getAccountId(),
CreditsEventsEnum.BUY_CREDITS.getName() + "--PayPal", CreditsEventsEnum.BUY_CREDITS.getName() + "--PayPal",
CreditsEventsEnum.BUY_CREDITS.getValue(), CreditsEventsEnum.BUY_CREDITS.getValue(),
"positive"); "positive");
// 更新积分
creditsService.buyCredits(orderInfo.getAccountId(), orderInfo.getTotalFee() / Float.parseFloat(CreditsEventsEnum.PRICE.getValue()));
} }
} }
@@ -628,14 +628,14 @@ public class PayPalCheckoutServiceImpl implements PayPalCheckoutService {
orderInfoService.updateStatusByOrderNo(orderNo, OrderStatusEnum.SUCCESS); orderInfoService.updateStatusByOrderNo(orderNo, OrderStatusEnum.SUCCESS);
//并记录支付日志 //并记录支付日志
paymentInfoService.createPaymentInfoForPayPal(result); paymentInfoService.createPaymentInfoForPayPal(result);
// 更新积分
// creditsService.buyCredits(orderByOrderNo.getAccountId(),orderByOrderNo.getTotalFee() / Integer.parseInt(CreditsEventsEnum.PRICE.getValue()));
creditsService.buyCredits(orderByOrderNo.getAccountId(),orderByOrderNo.getTotalFee() / Float.parseFloat(CreditsEventsEnum.PRICE.getValue()));
// 添加积分变更记录 // 添加积分变更记录
creditsService.insertToCreditsDetail(orderByOrderNo.getAccountId(), creditsService.insertToCreditsDetail(orderByOrderNo.getAccountId(),
CreditsEventsEnum.BUY_CREDITS.getName() + "--Paypal", CreditsEventsEnum.BUY_CREDITS.getName() + "--Paypal",
CreditsEventsEnum.BUY_CREDITS.getValue(), CreditsEventsEnum.BUY_CREDITS.getValue(),
"positive"); "positive");
// 更新积分
// creditsService.buyCredits(orderByOrderNo.getAccountId(),orderByOrderNo.getTotalFee() / Integer.parseInt(CreditsEventsEnum.PRICE.getValue()));
creditsService.buyCredits(orderByOrderNo.getAccountId(),orderByOrderNo.getTotalFee() / Float.parseFloat(CreditsEventsEnum.PRICE.getValue()));
} }
} }

View File

@@ -144,13 +144,13 @@ public class SuperResolutionServiceImpl extends ServiceImpl<TaskListMapper, Task
updateSROutput(taskId, status, output); updateSROutput(taskId, status, output);
if ("success".equals(status)) { if ("success".equals(status)) {
// 3、记录积分变更 // 3、扣除积分
creditsService.taskCreditsDeduction(accountId, taskId);
// 4、记录积分变更
creditsService.insertToCreditsDetail(accountId, creditsService.insertToCreditsDetail(accountId,
CreditsEventsEnum.SUPER_RESOLUTION.getName(), CreditsEventsEnum.SUPER_RESOLUTION.getName(),
CreditsEventsEnum.SUPER_RESOLUTION.getValue(), CreditsEventsEnum.SUPER_RESOLUTION.getValue(),
"negative"); "negative");
// 4、扣除积分
creditsService.taskCreditsDeduction(accountId, taskId);
} }
} }

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
import com.ai.da.common.config.exception.BusinessException; import com.ai.da.common.config.exception.BusinessException;
import com.ai.da.common.constant.CommonConstant; import com.ai.da.common.constant.CommonConstant;
import com.ai.da.common.context.UserContext; import com.ai.da.common.context.UserContext;
import com.ai.da.common.enums.CreditsEventsEnum;
import com.ai.da.common.utils.CopyUtil; import com.ai.da.common.utils.CopyUtil;
import com.ai.da.common.utils.DateUtil; import com.ai.da.common.utils.DateUtil;
import com.ai.da.common.utils.MinioUtil; import com.ai.da.common.utils.MinioUtil;
@@ -15,10 +16,7 @@ import com.ai.da.model.dto.ProductImageLikeDTO;
import com.ai.da.model.dto.ToProductImageDTO; import com.ai.da.model.dto.ToProductImageDTO;
import com.ai.da.model.vo.*; import com.ai.da.model.vo.*;
import com.ai.da.python.PythonService; import com.ai.da.python.PythonService;
import com.ai.da.service.AccountService; import com.ai.da.service.*;
import com.ai.da.service.CollectionService;
import com.ai.da.service.UserLikeGroupService;
import com.ai.da.service.UserLikeService;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -222,9 +220,17 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
@Resource @Resource
private PythonService pythonService; private PythonService pythonService;
@Resource
private CreditsService creditsService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public List<ToProductImageResult> toProduct(ToProductImageDTO toProductImageDTO) { public List<ToProductImageResult> toProduct(ToProductImageDTO toProductImageDTO) {
// 判断用户当前积分是否够本次生成消耗
Boolean preDeduction = creditsService.creditsPreDeduction(CreditsEventsEnum.TO_PRODUCT_IMAGE, toProductImageDTO.getToProductImageVOList().size());
if (!preDeduction) {
throw new BusinessException("Not enough Credits");
}
AuthPrincipalVo userHolder = UserContext.getUserHolder(); AuthPrincipalVo userHolder = UserContext.getUserHolder();
Long userLikeGroupId = toProductImageDTO.getUserLikeGroupId(); Long userLikeGroupId = toProductImageDTO.getUserLikeGroupId();
ToProductImageRecord toProductImageRecord = new ToProductImageRecord(); ToProductImageRecord toProductImageRecord = new ToProductImageRecord();
@@ -240,11 +246,12 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
int i = 0; int i = 0;
// 翻译 // 翻译
String prompt = toProductImageDTO.getPrompt(); String prompt = toProductImageDTO.getPrompt();
String s = pythonService.promptTranslate(prompt); String s = "";
if (!StringUtil.isNullOrEmpty(prompt)) s = pythonService.promptTranslate(prompt);
for (ToProductImageVO toProductImageVO : toProductImageDTO.getToProductImageVOList()) { for (ToProductImageVO toProductImageVO : toProductImageDTO.getToProductImageVOList()) {
String taskId;
if (toProductImageVO.getElementType().equals("DesignOutfit")) { if (toProductImageVO.getElementType().equals("DesignOutfit")) {
String taskId = UUID.randomUUID() + "-" + i + "-" + userHolder.getId(); taskId = UUID.randomUUID() + "-" + i + "-" + userHolder.getId();
i ++;
TDesignPythonOutfit tDesignPythonOutfit = designPythonOutfitMapper.selectById(toProductImageVO.getElementId()); TDesignPythonOutfit tDesignPythonOutfit = designPythonOutfitMapper.selectById(toProductImageVO.getElementId());
// 走模型 // 走模型
pythonService.toProductImage(tDesignPythonOutfit.getDesignUrl(), taskId, s); pythonService.toProductImage(tDesignPythonOutfit.getDesignUrl(), taskId, s);
@@ -261,7 +268,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
// toProductImageResult.setUrl(minioUtil.getPresignedUrl(toProductImageResult.getUrl(), 24 * 60)); // toProductImageResult.setUrl(minioUtil.getPresignedUrl(toProductImageResult.getUrl(), 24 * 60));
result.add(toProductImageResult); result.add(toProductImageResult);
}else { }else {
String taskId = UUID.randomUUID() + "-" + i + "-" + userHolder.getId(); taskId = UUID.randomUUID() + "-" + i + "-" + userHolder.getId();
ToProductElement toProductElement = toProductElementMapper.selectById(toProductImageVO.getElementId()); ToProductElement toProductElement = toProductElementMapper.selectById(toProductImageVO.getElementId());
// 走模型 // 走模型
pythonService.toProductImage(toProductElement.getUrl(), taskId, s); pythonService.toProductImage(toProductElement.getUrl(), taskId, s);
@@ -277,6 +284,9 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
// toProductImageResult.setUrl(minioUtil.getPresignedUrl(toProductImageResult.getUrl(), 24 * 60)); // toProductImageResult.setUrl(minioUtil.getPresignedUrl(toProductImageResult.getUrl(), 24 * 60));
result.add(toProductImageResult); result.add(toProductImageResult);
} }
i ++;
// 添加需要扣除的积分到预扣除区
creditsService.addRecordToCreditsDeduction(userHolder.getId(), taskId, CreditsEventsEnum.TO_PRODUCT_IMAGE);
} }
return result; return result;