From 4b3103e172fc4bb8e476643c11f2f3d3106dbacb Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Sat, 13 Jun 2026 15:45:31 +0800
Subject: [PATCH] style(frontend): 注释掉多个页面中的冗余表单元素和功能模块

---
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiChatPayServiceImpl.java |  123 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 123 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiChatPayServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiChatPayServiceImpl.java
new file mode 100644
index 0000000..cefa3bb
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiChatPayServiceImpl.java
@@ -0,0 +1,123 @@
+package cc.mrbird.febs.mall.service.impl;
+
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
+import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.mall.controller.dependentStation.constant.OrderConstants;
+import cc.mrbird.febs.mall.controller.dependentStation.enums.SalesServiceEnums;
+import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
+import cc.mrbird.febs.mall.entity.MallOrderInfo;
+import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
+import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
+import cc.mrbird.febs.mall.service.ApiChatPayService;
+import cc.mrbird.febs.mall.vo.ApiOrderPayVo;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.HashMap;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.TimeUnit;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class ApiChatPayServiceImpl implements ApiChatPayService {
+
+    @Resource
+    private RedisTemplate<String, String> redisTemplate;
+    private final MallOrderInfoMapper mallOrderInfoMapper;
+    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
+    @Override
+    public FebsResponse usPay(MallOrderInfo chatOrder) {
+
+        //判断是否redis已经缓存订单
+        BigDecimal amount = chatOrder.getAmount();
+        if (StrUtil.isEmpty(chatOrder.getTradeHash())) {
+            amount = generateUniqueNumber(chatOrder.getOrderNo(), amount);
+        }else{
+            amount = new BigDecimal(chatOrder.getTradeHash());
+        }
+        // 调用Mapper更新数据库中的订单信息
+        mallOrderInfoMapper.update(null,
+                Wrappers.lambdaUpdate(MallOrderInfo.class)
+                        .set(MallOrderInfo::getPayMethod, OrderConstants.PAY_TYPE_USDT)
+                        .set(MallOrderInfo::getTradeHash, null)
+                        .eq(MallOrderInfo::getId, chatOrder.getId())
+        );
+
+        DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                SalesServiceEnums.TRC_ADDRESS.getType(),
+                SalesServiceEnums.TRC_ADDRESS.getCode()
+        );
+        String addressSystem = dataDictionaryCustom.getValue();
+        ApiOrderPayVo apiOrderPayVo = new ApiOrderPayVo();
+        apiOrderPayVo.setOrderCode(chatOrder.getOrderNo());
+        apiOrderPayVo.setAmount(amount.toString());
+        apiOrderPayVo.setAddress(addressSystem);
+        apiOrderPayVo.setCreatedTime(chatOrder.getCreatedTime());
+        return new FebsResponse().success().data(apiOrderPayVo);
+    }
+
+    /**
+     * 生成唯一数字
+     * 通过随机数和给定的金额计算生成一个唯一数字,并确保这个数字在Redis中是唯一的
+     *
+     * @param amount 金额
+     * @param orderCode 订单编码
+     * @return 生成的唯一数字
+     * @throws RuntimeException 如果在指定次数内无法生成唯一数字
+     */
+    private BigDecimal generateUniqueNumber(String orderCode,BigDecimal amount) {
+        int maxAttempts = 50;
+        int attempts = 0;
+        int num;
+        BigDecimal bigDecimal;
+
+        do {
+            if (attempts++ >= maxAttempts) {
+                throw new FebsException("Payment exception");
+            }
+            num = ThreadLocalRandom.current().nextInt(1, 51);
+
+            bigDecimal = calculateAmount(amount, num);
+
+        } while (!setRedisValue(bigDecimal, orderCode)); // 原子操作检查并写入
+
+        return bigDecimal;
+    }
+
+    /**
+     * 计算调整后的金额
+     * 根据给定的金额和一个随机数计算新的金额,用于生成唯一数字
+     *
+     * @param amount 原始金额
+     * @param num 随机生成的数字
+     * @return 调整后的金额
+     */
+    private BigDecimal calculateAmount(BigDecimal amount, int num) {
+        BigDecimal multiplier = new BigDecimal("0.01");
+        BigDecimal increment = new BigDecimal(num).multiply(multiplier);
+        return amount.add(increment).setScale(2, RoundingMode.DOWN);
+    }
+
+    /**
+     * 将生成的数字设置到Redis中
+     * 此方法确保生成的数字是唯一的,通过在Redis中设置值并使用NX参数来实现
+     *
+     * @param amountReal 生成的唯一数字
+     * @param orderCode 订单编码
+     * @return 如果设置成功则返回true,否则返回false
+     */
+    private boolean setRedisValue(BigDecimal amountReal, String orderCode) {
+        String key = OrderConstants.TRC20_ORDER_KEY + amountReal; // 添加前缀避免键冲突
+        return redisTemplate.opsForValue().setIfAbsent(key, orderCode, 60L * Integer.parseInt("30"), TimeUnit.SECONDS);
+    }
+}

--
Gitblit v1.9.1