feat: 积分先按aimanager配置扣减,任务终态时再回补

This commit is contained in:
yys 2026-04-13 09:53:37 +08:00
parent a67a8e202a
commit 982ce1f179
3 changed files with 34 additions and 25 deletions

View File

@ -4,7 +4,6 @@ import com.ruoyi.ai.domain.*;
import com.ruoyi.ai.service.*; import com.ruoyi.ai.service.*;
import com.ruoyi.api.request.ByteApiRequest; import com.ruoyi.api.request.ByteApiRequest;
import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.constant.BalanceChangerConstants;
import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.request.video.dto.VideoTaskCallBackRequest; import com.ruoyi.common.core.request.video.dto.VideoTaskCallBackRequest;
@ -12,7 +11,6 @@ import com.ruoyi.common.core.response.video.GetVideoGenerationTaskResponse;
import com.ruoyi.common.enums.AiOrderStatusType; import com.ruoyi.common.enums.AiOrderStatusType;
import com.ruoyi.common.enums.VideoTaskStatusType; import com.ruoyi.common.enums.VideoTaskStatusType;
import com.ruoyi.common.utils.RandomStringUtil; import com.ruoyi.common.utils.RandomStringUtil;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.TencentCosUtil; import com.ruoyi.common.utils.TencentCosUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -20,12 +18,12 @@ import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;

View File

@ -263,7 +263,7 @@ public class PortalVideoController extends BaseController {
private AjaxResult submitOrderAndCreate(PortalVideoGenRequest req, String mode, ByteBodyReq byteBodyReq) { private AjaxResult submitOrderAndCreate(PortalVideoGenRequest req, String mode, ByteBodyReq byteBodyReq) {
String functionType = resolveFunctionType(req); String functionType = resolveFunctionType(req);
// 判断余额是否足够aimanager里配置了最低限额创建订单 // 判断余额是否足够aimanager里配置了最低限额创建订单
AiOrder aiOrder = aiOrderService.getAiOrder(functionType, false); AiOrder aiOrder = aiOrderService.getAiOrder(functionType);
if (aiOrder == null) { if (aiOrder == null) {
return AjaxResult.error(-1, "You have a low balance, please recharge"); return AjaxResult.error(-1, "You have a low balance, please recharge");
} }
@ -285,30 +285,33 @@ public class PortalVideoController extends BaseController {
aiOrder.setVideoGenRequestId(byteBodyRes.getRequestId()); aiOrder.setVideoGenRequestId(byteBodyRes.getRequestId());
// aiOrderService.orderSuccess(aiOrder); // aiOrderService.orderSuccess(aiOrder);
aiOrderService.updateAiOrder(aiOrder); aiOrderService.updateAiOrder(aiOrder);
// 逻辑暂时停用先不预扣 start !!!!!
// 查询任务详情按字节返回的预扣数量扣减 // 查询任务详情按字节返回的预扣数量扣减
GetVideoGenerationTaskResponse task = byteService.getVideoGenerationTasks(thirdPartyOrderNumId, key); // GetVideoGenerationTaskResponse task = byteService.getVideoGenerationTasks(thirdPartyOrderNumId, key);
if (task == null || task.getUsage() == null || task.getUsage().getTotalTokens() == null) { // if (task == null || task.getUsage() == null || task.getUsage().getTotalTokens() == null) {
return AjaxResult.error(-2, "generation failed, byte task's usage is null"); // return AjaxResult.error(-2, "generation failed, byte task's usage is null");
} // }
if (task.getUsage().getTotalTokens() <= 0) { // if (task.getUsage().getTotalTokens() <= 0) {
return AjaxResult.error(-2, "generation failed, byte task's totalTokens <= 0"); // return AjaxResult.error(-2, "generation failed, byte task's totalTokens <= 0");
} // }
BigDecimal totalTokens = new BigDecimal(task.getUsage().getTotalTokens()); // BigDecimal totalTokens = new BigDecimal(task.getUsage().getTotalTokens());
// 同步设置aiOrder以防在抛异常时数值没变 // // 同步设置aiOrder以防在抛异常时数值没变
aiOrder.setPreDeductAmount(totalTokens); // aiOrder.setPreDeductAmount(totalTokens);
aiOrder.setAmount(totalTokens); // aiOrder.setAmount(totalTokens);
// 设置订单信息 // 设置订单信息
AiOrder updAiOrder = new AiOrder(); // AiOrder updAiOrder = new AiOrder();
updAiOrder.setId(aiOrder.getId()); // updAiOrder.setId(aiOrder.getId());
updAiOrder.setOrderNum(aiOrder.getOrderNum()); // updAiOrder.setOrderNum(aiOrder.getOrderNum());
updAiOrder.setPreDeductAmount(totalTokens); // updAiOrder.setPreDeductAmount(totalTokens);
// 先设置成预扣数量等收到回调再改过来这样后续报表会比较准确 // 先设置成预扣数量等收到回调再改过来这样后续报表会比较准确
updAiOrder.setAmount(totalTokens); // updAiOrder.setAmount(totalTokens);
aiOrderService.updateAiOrder(updAiOrder); // aiOrderService.updateAiOrder(updAiOrder);
// 扣减余额 // 扣减余额
aiUserService.addUserBalance(aiOrder.getOrderNum(), SecurityUtils.getAiUserId() // aiUserService.addUserBalance(aiOrder.getOrderNum(), SecurityUtils.getAiUserId()
, NumberUtil.mul(-1, totalTokens), aiOrderService.getChangerType(functionType)); // , NumberUtil.mul(-1, totalTokens), aiOrderService.getChangerType(functionType));
// 逻辑暂时停用先不预扣 start !!!!!
return AjaxResult.success(byteBodyRes); return AjaxResult.success(byteBodyRes);
} catch (Exception e) { } catch (Exception e) {
aiOrderService.orderFailure(aiOrder); aiOrderService.orderFailure(aiOrder);

View File

@ -219,8 +219,10 @@ public class AiOrderServiceImpl implements IAiOrderService {
aiOrder.setRemark(remark); aiOrder.setRemark(remark);
aiOrderMapper.updateById(aiOrder); aiOrderMapper.updateById(aiOrder);
Long userId = aiOrder.getUserId() != null ? aiOrder.getUserId() : SecurityUtils.getAiUserId(); Long userId = aiOrder.getUserId() != null ? aiOrder.getUserId() : SecurityUtils.getAiUserId();
// 变更值为0则不改余额没有流水
if (aiOrder.getAmount() != null && !aiOrder.getAmount().equals(new BigDecimal(0))) {
aiUserService.addUserBalance(aiOrder.getOrderNum(), userId, amount, BalanceChangerConstants.REFUND, remark); aiUserService.addUserBalance(aiOrder.getOrderNum(), userId, amount, BalanceChangerConstants.REFUND, remark);
}
} }
@Override @Override
@ -308,6 +310,7 @@ public class AiOrderServiceImpl implements IAiOrderService {
order.setAmount(realAmount); order.setAmount(realAmount);
// 订单状态 // 订单状态
order.setStatus(AiOrderStatusType.FINISH.ordinal()); order.setStatus(AiOrderStatusType.FINISH.ordinal());
// 已回补
order.setIsBackfilled(1); order.setIsBackfilled(1);
orderSuccess(order); orderSuccess(order);
@ -322,6 +325,11 @@ public class AiOrderServiceImpl implements IAiOrderService {
BalanceChangerConstants.REFUND, TASK_SUCCESS_BALANCE_REMARK); BalanceChangerConstants.REFUND, TASK_SUCCESS_BALANCE_REMARK);
} }
} }
// 按实际用量扣减
// BigDecimal reduceAmount = NumberUtil.mul(-1, realAmount);
// aiUserService.addUserBalance(order.getOrderNum(), order.getUserId(), reduceAmount,
// BalanceChangerConstants.QUICK_VIDEO_GENERATION, TASK_SUCCESS_BALANCE_REMARK);
return AjaxResult.success("callback success"); return AjaxResult.success("callback success");
} }
} }