新版仿ok交易所-后端
zyy
2026-05-22 1210ab4b6cde9706f2de936fed3753773a1516f6
trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/impl/MinerServiceImpl.java
@@ -1,43 +1,212 @@
package com.yami.trading.admin.controller.service.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yami.trading.admin.controller.service.MinerRedisKeys;
import com.yami.trading.admin.controller.service.MinerService;
import com.yami.trading.admin.dao.MinerMapper;
import com.yami.trading.bean.model.Miner;
import com.yami.trading.bean.data.domain.Realtime;
import com.yami.trading.common.exception.BusinessException;
import com.yami.trading.common.util.Arith;
import com.yami.trading.service.data.DataService;
import com.yami.trading.service.syspara.SysparaService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * @program: trading-order-master
 * @description:
 * @create: 2025-03-10 14:27
 **/
@Service
@Transactional
public class MinerServiceImpl extends ServiceImpl<MinerMapper, Miner> implements MinerService {
    @Override
    public boolean addMiner(Miner miner) {
        return this.save(miner);
    //   protected RedisHandler redisHandler;
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    protected SysparaService sysparaService;
    @Autowired
    protected DataService dataService;
    public Miner cacheById(String id) {
        return (Miner) redisTemplate.opsForValue().get(MinerRedisKeys.MINER_ID + id);
    }
    @Override
    public boolean deleteMiner(int id) {
        return this.removeById(id);
    public boolean save(Miner entity) {
        this.save(entity);
        redisTemplate.opsForValue().set(MinerRedisKeys.MINER_ID + entity.getUuid().toString(), entity);
        Map<String, Miner> map = (Map<String, Miner>) redisTemplate.opsForValue().get(MinerRedisKeys.MINER_MAP);
        if (map == null) {
            map = new ConcurrentHashMap<String, Miner>();
        }
        map.put(entity.getUuid().toString(), entity);
        redisTemplate.opsForValue().set(MinerRedisKeys.MINER_MAP, map);
        return true;
    }
    @Override
    public boolean updateMiner(Miner miner) {
        return this.updateById(miner);
    public void updateA(Miner entity) {
        if(entity == null){
            System.out.println("entity is null");
        }
        this.updateById(entity);
        redisTemplate.opsForValue().set(MinerRedisKeys.MINER_ID + entity.getUuid().toString(), entity);
        Map<String, Miner> map = (Map<String, Miner>) redisTemplate.opsForValue().get(MinerRedisKeys.MINER_MAP);
        if (map == null) {
            map = new ConcurrentHashMap<String, Miner>();
        }
        map.put(entity.getUuid().toString(), entity);
        redisTemplate.opsForValue().set(MinerRedisKeys.MINER_MAP, map);
    }
    @Override
    public Miner getMiner(int id) {
        return this.getById(id);
    public void delete(String id) {
        Miner entity = findById(id);
        this.delete(entity.getUuid());
        redisTemplate.delete(MinerRedisKeys.MINER_ID + entity.getUuid().toString());
        Map<String, Miner> map = (Map<String, Miner>) redisTemplate.opsForValue().get(MinerRedisKeys.MINER_MAP);
        if (map != null && !map.isEmpty()) {
            map.remove(entity.getUuid().toString());
            redisTemplate.opsForValue().set(MinerRedisKeys.MINER_MAP, map);
        }
    }
    @Override
    public List<Miner> getAllMiners() {
        return this.list();
    public Miner findById(String id) {
        return (Miner) redisTemplate.opsForValue().get(MinerRedisKeys.MINER_ID + id);
    }
    public List<Miner> findAll() {
        Map<String, Miner> map = (Map<String, Miner>) redisTemplate.opsForValue().get(MinerRedisKeys.MINER_MAP);
        if (map != null) {
            List<Miner> list = new ArrayList<>(map.values());
            list.sort(new Miner());
            return list;
        }
        return new ArrayList<>();
    }
    public List<Miner> findAllState_1() {
        List<Miner> list = new ArrayList<Miner>();
        for (Miner miner : findAll()) {
            if ("1".equals(miner.getState())) {
                list.add(miner);
            }
        }
        return list;
    }
    public Map<String, Object> getBindOne(Miner miner) {
        Map<String, Object> result = new HashMap<String, Object>();
        result.put("id", miner.getUuid());
        result.put("name", miner.getName());
        result.put("name_en", miner.getName_en());
        result.put("name_cn", miner.getName_cn());
        result.put("daily_rate", miner.getDaily_rate());
        result.put("investment_min", miner.getInvestment_min());
        result.put("investment_max", miner.getInvestment_max());
        result.put("state", miner.getState());
        result.put("on_sale", miner.getOn_sale());
        result.put("test", miner.getTest());
        Double miner_test_profit = sysparaService.find("miner_test_profit").getDouble();
        if (miner.getTest().equals("Y")) {
            result.put("all_rate", Arith.mul(miner_test_profit, miner.getCycle()));
            result.put("cycle", miner.getCycle());
            result.put("daily_rate", miner_test_profit);
        } else {
            result.put("all_rate", Arith.mul(miner.getDaily_rate(), 30));
            result.put("cycle", miner.getCycle_close());
        }
        // 根据产生的收益转化成指定的币种
        String miner_profit_symbol = sysparaService.find("miner_profit_symbol").getSvalue();
        // 矿机购买时使用的币种,则产生
        String miner_buy_symbol = sysparaService.find("miner_buy_symbol").getSvalue();
        double symbol_profit = miner.getTest().equals("Y") ? miner_test_profit
                : Arith.div(Arith.mul(100, miner.getDaily_rate()), 100);// 100为单位的币种收益
        // 收益转化成U
        if (StringUtils.isNotEmpty(miner_buy_symbol) && !"usdt".equalsIgnoreCase(miner_buy_symbol)) {
            List<Realtime> realtime_list = this.dataService.realtime(miner_buy_symbol);
            Realtime realtime = null;
            if (realtime_list.size() > 0) {
                realtime = realtime_list.get(0);
            } else {
                throw new BusinessException("行情获取异常,稍后再试");
            }
            symbol_profit = Arith.mul(symbol_profit, realtime.getClose().doubleValue());
        }
        if (StringUtils.isNotEmpty(miner_profit_symbol) && !"usdt".equalsIgnoreCase(miner_profit_symbol)) {
            List<Realtime> realtime_list = this.dataService.realtime(miner_profit_symbol);
            Realtime realtime = null;
            if (realtime_list.size() > 0) {
                realtime = realtime_list.get(0);
            } else {
                throw new BusinessException("行情获取异常,稍后再试");
            }
            symbol_profit = Arith.div(symbol_profit, realtime.getClose().doubleValue());
            result.put("symbol_profit", symbol_profit);
        } else {
            result.put("symbol_profit", symbol_profit);
        }
        result.put("miner_profit_symbol",
                StringUtils.isEmpty(miner_profit_symbol) ? "USDT" : miner_profit_symbol.toUpperCase());
        result.put("img", "https://trading-order-test.s3.amazonaws.com/common/2023-09-16/783a1a14-f6ad-48e3-adb4-6623cca57480IMG_1558.PNG");
        // 基础信息
        result.put("algorithm", miner.getAlgorithm());
        result.put("computing_power", miner.getComputing_power());
        result.put("computing_power_unit", miner.getComputing_power_unit());
        result.put("power", miner.getPower());
        result.put("product_factory", miner.getProduct_factory());
        result.put("product_size", miner.getProduct_size());
        result.put("weight", miner.getWeight());
        result.put("work_temperature_min", miner.getWork_temperature_min());
        result.put("work_temperature_max", miner.getWork_temperature_max());
        result.put("work_humidity_min", miner.getWork_humidity_min());
        result.put("work_humidity_max", miner.getWork_humidity_max());
        result.put("internet", miner.getInternet());
        result.put("buy_currency", miner.getBuy_currency());
        result.put("output_currency", miner.getOutput_currency());
        return result;
    }
//   public void setRedisHandler(RedisHandler redisHandler) {
//      this.redisHandler = redisHandler;
//   }
    public void setSysparaService(SysparaService sysparaService) {
        this.sysparaService = sysparaService;
    }
    public void setDataService(DataService dataService) {
        this.dataService = dataService;
    }
//   public List<Finance> findAll_2() {
//
//      LambdaQueryWrapper<Miner> queryWrapper = new LambdaQueryWrapper<Miner>()
//            .eq(Miner::getState,state).eq(FinanceOrder::getPartyId, partyId);
//      list = this.getBaseMapper().selectList(queryWrapper);
//
//      Map<String, Finance> cacheMap = (Map<String, Finance>) redisTemplate.opsForValue().get(FinanceRedisKeys.FINANCE_MAP);
//      if (cacheMap != null && !cacheMap.isEmpty()) {
//         return new ArrayList<Finance>(cacheMap.values());
//      }
//      return new ArrayList<Finance>();
//   }
}