diff --git a/web-api/ruoyi-admin/src/main/java/com/ruoyi/api/ByteApiController.java b/web-api/ruoyi-admin/src/main/java/com/ruoyi/api/ByteApiController.java index 349606b..cadd665 100644 --- a/web-api/ruoyi-admin/src/main/java/com/ruoyi/api/ByteApiController.java +++ b/web-api/ruoyi-admin/src/main/java/com/ruoyi/api/ByteApiController.java @@ -4,7 +4,6 @@ import com.ruoyi.ai.domain.*; import com.ruoyi.ai.service.*; import com.ruoyi.api.request.ByteApiRequest; import com.ruoyi.common.annotation.Anonymous; -import com.ruoyi.common.constant.BalanceChangerConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; 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.VideoTaskStatusType; import com.ruoyi.common.utils.RandomStringUtil; -import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.TencentCosUtil; import io.swagger.annotations.Api; @@ -20,12 +18,12 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; diff --git a/web-api/ruoyi-admin/src/main/java/com/ruoyi/api/PortalVideoController.java b/web-api/ruoyi-admin/src/main/java/com/ruoyi/api/PortalVideoController.java index 57fff94..8d42093 100644 --- a/web-api/ruoyi-admin/src/main/java/com/ruoyi/api/PortalVideoController.java +++ b/web-api/ruoyi-admin/src/main/java/com/ruoyi/api/PortalVideoController.java @@ -263,7 +263,7 @@ public class PortalVideoController extends BaseController { private AjaxResult submitOrderAndCreate(PortalVideoGenRequest req, String mode, ByteBodyReq byteBodyReq) { String functionType = resolveFunctionType(req); // 判断余额是否足够,aimanager里配置了最低限额。创建订单 - AiOrder aiOrder = aiOrderService.getAiOrder(functionType, false); + AiOrder aiOrder = aiOrderService.getAiOrder(functionType); if (aiOrder == null) { return AjaxResult.error(-1, "You have a low balance, please recharge"); } @@ -285,30 +285,33 @@ public class PortalVideoController extends BaseController { aiOrder.setVideoGenRequestId(byteBodyRes.getRequestId()); // aiOrderService.orderSuccess(aiOrder); aiOrderService.updateAiOrder(aiOrder); + + // !!!!! 逻辑暂时停用,先不预扣 start !!!!! // 查询任务详情,按字节返回的预扣数量扣减 - GetVideoGenerationTaskResponse task = byteService.getVideoGenerationTasks(thirdPartyOrderNumId, key); - if (task == null || task.getUsage() == null || task.getUsage().getTotalTokens() == null) { - return AjaxResult.error(-2, "generation failed, byte task's usage is null"); - } - if (task.getUsage().getTotalTokens() <= 0) { - return AjaxResult.error(-2, "generation failed, byte task's totalTokens <= 0"); - } - BigDecimal totalTokens = new BigDecimal(task.getUsage().getTotalTokens()); - // 同步设置aiOrder,以防在抛异常时数值没变 - aiOrder.setPreDeductAmount(totalTokens); - aiOrder.setAmount(totalTokens); +// GetVideoGenerationTaskResponse task = byteService.getVideoGenerationTasks(thirdPartyOrderNumId, key); +// if (task == null || task.getUsage() == null || task.getUsage().getTotalTokens() == null) { +// return AjaxResult.error(-2, "generation failed, byte task's usage is null"); +// } +// if (task.getUsage().getTotalTokens() <= 0) { +// return AjaxResult.error(-2, "generation failed, byte task's totalTokens <= 0"); +// } +// BigDecimal totalTokens = new BigDecimal(task.getUsage().getTotalTokens()); +// // 同步设置aiOrder,以防在抛异常时数值没变 +// aiOrder.setPreDeductAmount(totalTokens); +// aiOrder.setAmount(totalTokens); // 设置订单信息 - AiOrder updAiOrder = new AiOrder(); - updAiOrder.setId(aiOrder.getId()); - updAiOrder.setOrderNum(aiOrder.getOrderNum()); - updAiOrder.setPreDeductAmount(totalTokens); +// AiOrder updAiOrder = new AiOrder(); +// updAiOrder.setId(aiOrder.getId()); +// updAiOrder.setOrderNum(aiOrder.getOrderNum()); +// updAiOrder.setPreDeductAmount(totalTokens); // 先设置成预扣数量,等收到回调再改过来,这样后续报表会比较准确 - updAiOrder.setAmount(totalTokens); - aiOrderService.updateAiOrder(updAiOrder); +// updAiOrder.setAmount(totalTokens); +// aiOrderService.updateAiOrder(updAiOrder); // 扣减余额 - aiUserService.addUserBalance(aiOrder.getOrderNum(), SecurityUtils.getAiUserId() - , NumberUtil.mul(-1, totalTokens), aiOrderService.getChangerType(functionType)); +// aiUserService.addUserBalance(aiOrder.getOrderNum(), SecurityUtils.getAiUserId() +// , NumberUtil.mul(-1, totalTokens), aiOrderService.getChangerType(functionType)); + // !!!!! 逻辑暂时停用,先不预扣 start !!!!! return AjaxResult.success(byteBodyRes); } catch (Exception e) { aiOrderService.orderFailure(aiOrder); diff --git a/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/AiOrderServiceImpl.java b/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/AiOrderServiceImpl.java index 856f279..6bbab29 100644 --- a/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/AiOrderServiceImpl.java +++ b/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/AiOrderServiceImpl.java @@ -219,8 +219,10 @@ public class AiOrderServiceImpl implements IAiOrderService { aiOrder.setRemark(remark); aiOrderMapper.updateById(aiOrder); Long userId = aiOrder.getUserId() != null ? aiOrder.getUserId() : SecurityUtils.getAiUserId(); - aiUserService.addUserBalance(aiOrder.getOrderNum(), userId, amount, BalanceChangerConstants.REFUND, remark); - + // 变更值为0则不改余额,没有流水 + if (aiOrder.getAmount() != null && !aiOrder.getAmount().equals(new BigDecimal(0))) { + aiUserService.addUserBalance(aiOrder.getOrderNum(), userId, amount, BalanceChangerConstants.REFUND, remark); + } } @Override @@ -308,6 +310,7 @@ public class AiOrderServiceImpl implements IAiOrderService { order.setAmount(realAmount); // 订单状态 order.setStatus(AiOrderStatusType.FINISH.ordinal()); + // 已回补 order.setIsBackfilled(1); orderSuccess(order); @@ -322,6 +325,11 @@ public class AiOrderServiceImpl implements IAiOrderService { 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"); } }