新版仿ok交易所-后端
1
zj
2026-06-03 1004f3d16011f69894196bfd180ea539b76ba4e7
trading-order-admin/src/main/java/com/yami/trading/admin/controller/AddressController.java
@@ -1,35 +1,26 @@
package com.yami.trading.admin.controller;
import com.yami.trading.admin.model.LoginModel;
import com.yami.trading.admin.model.UpdateAddressModel;
import com.yami.trading.bean.model.ChannelBlockchain;
import com.yami.trading.common.constants.RedisKeys;
import com.yami.trading.common.domain.Result;
import com.yami.trading.common.exception.YamiShopBindException;
import com.yami.trading.common.util.GoogleAuthenticator;
import com.yami.trading.security.common.bo.UserInfoInTokenBO;
import com.yami.trading.security.common.enums.CryptoCurrencyEnum;
import com.yami.trading.security.common.enums.SysTypeEnum;
import com.yami.trading.security.common.util.LocalKeyStorageAESUtil;
import com.yami.trading.security.common.vo.TokenInfoVO;
import com.yami.trading.sys.model.SysUser;
import com.yami.trading.service.ChannelBlockchainService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
 * @program: trading-order-master
 * @description: 充值地址
 * @create: 2025-08-07 14:44
 **/
 * 管理后台 - 财务 - 充值地址(ChannelBlockchain 表)
 */
@Slf4j
@RestController
@RequestMapping("address")
@@ -39,61 +30,62 @@
    @Autowired
    RedisTemplate redisTemplate;
    /**
     * 地址列表
     * @return
     */
    @Autowired
    private ChannelBlockchainService channelBlockchainService;
    @ApiOperation("充值地址列表")
    @PostMapping("/list")
    public Result<?> list() {
        List<CryptoCurrencyEnum> currencyEnums = CryptoCurrencyEnum.getAll();
        List<ChannelBlockchain> data = new ArrayList<>();
        currencyEnums.forEach(f->{
            try {
                String address = LocalKeyStorageAESUtil.loadAndDecrypt(f.getName());
                ChannelBlockchain blockchain = new ChannelBlockchain();
                blockchain.setBlockchain_name(f.getChain());
                blockchain.setAddress(address);
                blockchain.setCoin(f.getCoin());
                blockchain.setAuto(false);
                blockchain.setImg(null);
                data.add(blockchain);
            } catch (Exception e) {
                e.getMessage();
            }
        });
        return Result.succeed(data);
    public Result<List<ChannelBlockchain>> list() {
        List<ChannelBlockchain> list = channelBlockchainService.list();
        list.forEach(this::fillBlockchainNameAlias);
        return Result.succeed(list);
    }
    @ApiOperation("修改充值地址")
    @PostMapping("/update")
    public Result<?> list(@RequestBody UpdateAddressModel model) {
        String name = model.getCoin().toLowerCase()+"_"+model.getChain().toLowerCase();
        try {
            if(model.getCoin().equals("eth") || model.getCoin().equals("btc")){
                name = model.getCoin();
    public Result<ChannelBlockchain> update(@RequestBody UpdateAddressModel model) {
        if (StringUtils.isNotBlank(model.getUuid())) {
            ChannelBlockchain existing = channelBlockchainService.getById(model.getUuid());
            if (existing == null) {
                throw new YamiShopBindException("充值地址记录不存在");
            }
            return LocalKeyStorageAESUtil.encryptAndStore(model.getPassword(),model.getAddress(),name);
        }catch (Exception e){
            e.getMessage();
            if (StringUtils.isBlank(model.getAddress())) {
                throw new YamiShopBindException("充值地址不能为空");
            }
            existing.setAddress(model.getAddress().trim());
            if (StringUtils.isNotBlank(model.getCoin())) {
                existing.setCoin(model.getCoin().trim().toLowerCase());
            }
            if (StringUtils.isNotBlank(model.getChain())) {
                existing.setBlockchainName(model.getChain().trim());
            }
            channelBlockchainService.updateById(existing);
            fillBlockchainNameAlias(existing);
            return Result.succeed(existing);
        }
        return Result.succeed();
        ChannelBlockchain saved = channelBlockchainService.saveOrUpdateByCoinAndChain(
                model.getCoin(), model.getChain(), model.getAddress());
        fillBlockchainNameAlias(saved);
        return Result.succeed(saved);
    }
    /**
     * u盾地址列表
     * @return
     * u盾地址列表(按用户维度,仍走 Redis)
     */
    @GetMapping("/getUDList")
    public Result<?> getUDList(String partyId) {
    public Result<List<ChannelBlockchain>> getUDList(String partyId) {
        if (partyId == null || partyId.isEmpty()) {
            return Result.failed("请选择用户");
        }
        List<CryptoCurrencyEnum> currencyEnums = CryptoCurrencyEnum.getAll();
        List<ChannelBlockchain> data = new ArrayList<>();
        currencyEnums.forEach(currencyEnum->{
        currencyEnums.forEach(currencyEnum -> {
            try {
                String address = (String)redisTemplate.opsForValue().get(RedisKeys.BLOCKCHAIN_ADDRESS + partyId + currencyEnum.getName());
                String address = (String) redisTemplate.opsForValue()
                        .get(RedisKeys.BLOCKCHAIN_ADDRESS + partyId + currencyEnum.getName());
                ChannelBlockchain blockchain = new ChannelBlockchain();
                blockchain.setBlockchain_name(currencyEnum.getChain());
                blockchain.setBlockchainName(currencyEnum.getChain());
                blockchain.setAddress(address);
                blockchain.setCoin(currencyEnum.getCoin());
                blockchain.setAuto(false);
@@ -106,4 +98,9 @@
        return Result.succeed(data);
    }
    private void fillBlockchainNameAlias(ChannelBlockchain item) {
        if (item != null && StringUtils.isNotBlank(item.getBlockchainName())) {
            item.setBlockchain_name(item.getBlockchainName());
        }
    }
}