package com.yami.trading.service.miner.loadcache; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import com.alibaba.fastjson2.JSON; import com.fasterxml.jackson.databind.ObjectMapper; import com.yami.trading.bean.miner.Miner; import com.yami.trading.bean.miner.MinerOrder; import com.yami.trading.common.util.Arith; import lombok.extern.slf4j.Slf4j; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.yami.trading.service.miner.service.MinerRedisKeys; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @Component @Slf4j public class MinerLoadCacheService { private static final Log logger = LogFactory.getLog(MinerLoadCacheService.class); // protected RedisHandler redisHandler; @Autowired protected JdbcTemplate jdbcTemplate; @Autowired private RedisTemplate redisTemplate; @Autowired protected NamedParameterJdbcOperations namedParameterJdbcTemplate; @PostConstruct public void loadcache() { load(); logger.info("完成Miner数据加载redis"); loadMinerOrder(); logger.info("完成MinerOrder数据加载redis"); } public void load() { redisTemplate.delete(MinerRedisKeys.MINER_MAP); List> list = jdbcTemplate.queryForList("SELECT * FROM T_MINER ORDER BY INVESTMENT_MIN ASC"); Map cacheMap = new ConcurrentHashMap(); for (Map map : list) { // 创建ObjectMapper对象 ObjectMapper objectMapper = new ObjectMapper(); // 将Map转换为对象 Miner miner = objectMapper.convertValue(map, Miner.class); cacheMap.put(miner.getUuid(), miner); redisTemplate.opsForValue().set(MinerRedisKeys.MINER_ID + miner.getUuid(), miner); } redisTemplate.opsForValue().set(MinerRedisKeys.MINER_MAP, cacheMap); } public void loadMinerOrder() { List> list = jdbcTemplate.queryForList("SELECT * FROM T_MINER_ORDER "); Map> cacheMap = new ConcurrentHashMap>(); // 矿机总资产 Map minerAssetsMap = new ConcurrentHashMap(); for (Map map1 : list) { // 创建ObjectMapper对象 ObjectMapper objectMapper = new ObjectMapper(); MinerOrder minerOrder = JSON.parseObject(JSON.toJSONString(map1), MinerOrder.class); // 将Map转换为对象 //MinerOrder minerOrder = objectMapper.convertValue(map1, MinerOrder.class); Miner miner = (Miner) this.redisTemplate.opsForValue().get(MinerRedisKeys.MINER_ID + minerOrder.getMiner_id().toString()); if (miner.getTest().equals("N")) { if (cacheMap.containsKey(minerOrder.getPartyId())) { Map map = cacheMap.get(minerOrder.getPartyId().toString()); map.put(minerOrder.getOrder_no(), minerOrder); cacheMap.put(minerOrder.getPartyId().toString(), map); } else { Map map = new ConcurrentHashMap(); map.put(minerOrder.getOrder_no(), minerOrder); cacheMap.put(minerOrder.getPartyId().toString(), map); } } this.redisTemplate.opsForValue().set(MinerRedisKeys.MINER_ORDER_ORDERNO + minerOrder.getOrder_no(), minerOrder); // 获取 单个订单 矿机总资产 Double minerAssetsOrder = 0.000D; // 状态:0/正常赎回; 1/ 托管中 ;2/提前赎回 (违约);3/取消; if ("1".equals(minerOrder.getState())) { minerAssetsOrder = minerOrder.getAmount(); } if (minerAssetsMap.containsKey(minerOrder.getPartyId())) { Double minerAssetsOld = minerAssetsMap.get(minerOrder.getPartyId().toString()); if (null == minerAssetsOld) { minerAssetsOld = 0.000D; } minerAssetsOld = Arith.add(minerAssetsOld, minerAssetsOrder); minerAssetsMap.put(minerOrder.getPartyId().toString(), minerAssetsOld); } else { minerAssetsMap.put(minerOrder.getPartyId().toString(), minerAssetsOrder); } } for (Entry> entry : cacheMap.entrySet()) { this.redisTemplate.opsForValue().set(MinerRedisKeys.MINER_ORDER_PARTY_ID + entry.getKey(), entry.getValue()); } for (Entry entry : minerAssetsMap.entrySet()) { this.redisTemplate.opsForValue().set(MinerRedisKeys.MINER_ASSETS_PARTY_ID + entry.getKey(), entry.getValue()); } } // public void setRedisHandler(RedisHandler redisHandler) { // this.redisHandler = redisHandler; // } }