package project.contract.data.loadcache; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; import kernel.bo.RecordObjectMapper; import kernel.util.Arith; import project.contract.ContractOrder; import project.contract.ContractRedisKeys; import project.redis.RedisHandler; import project.wallet.AssetService; public class ContractLoadCacheService { private static final Logger logger = LoggerFactory.getLogger(ContractLoadCacheService.class); private JdbcTemplate jdbcTemplate; private RedisHandler redisHandler; private AssetService assetService; public void loadcache() { load(); logger.info("完成ContractOrder数据加载redis"); } public void load() { List list = jdbcTemplate.query("SELECT * FROM T_CONTRACT_ORDER", RecordObjectMapper.newInstance(ContractOrder.class)); Map> cacheMap = new ConcurrentHashMap>(); // 永续合约:总资产、总保证金、总未实现盈利 Map> contractAssetsMap = new ConcurrentHashMap>(); for (ContractOrder order : list) { if (ContractOrder.STATE_SUBMITTED.equals(order.getState())) { if (cacheMap.containsKey(order.getPartyId())) { Map map = cacheMap.get(order.getPartyId().toString()); map.put(order.getOrder_no(), order); cacheMap.put(order.getPartyId().toString(), map); } else { Map map = new ConcurrentHashMap(); map.put(order.getOrder_no(), order); cacheMap.put(order.getPartyId().toString(), map); } // 获取 单个订单 永续合约总资产、总保证金、总未实现盈利 Map contractAssetsOrder = this.assetService.getMoneyContractByOrder(order); if (contractAssetsMap.containsKey(order.getPartyId())) { Map contractAssetsOld = contractAssetsMap.get(order.getPartyId().toString()); if (null == contractAssetsOld) { contractAssetsOld = new HashMap(); contractAssetsOld.put("money_contract", 0.000D); contractAssetsOld.put("money_contract_deposit", 0.000D); contractAssetsOld.put("money_contract_profit", 0.000D); } contractAssetsOld.put("money_contract", Arith.add(contractAssetsOld.get("money_contract"), contractAssetsOrder.get("money_contract"))); contractAssetsOld.put("money_contract_deposit", Arith.add(contractAssetsOld.get("money_contract_deposit"), contractAssetsOrder.get("money_contract_deposit"))); contractAssetsOld.put("money_contract_profit", Arith.add(contractAssetsOld.get("money_contract_profit"), contractAssetsOrder.get("money_contract_profit"))); contractAssetsMap.put(order.getPartyId().toString(), contractAssetsOld); } else { contractAssetsMap.put(order.getPartyId().toString(), contractAssetsOrder); } } this.redisHandler.setSync(ContractRedisKeys.CONTRACT_ORDERNO + order.getOrder_no(), order); } for (Entry> entry : cacheMap.entrySet()) { this.redisHandler.setSync(ContractRedisKeys.CONTRACT_SUBMITTED_ORDER_PARTY_ID + entry.getKey(), entry.getValue()); } for (Entry> entry : contractAssetsMap.entrySet()) { this.redisHandler.setSync(ContractRedisKeys.CONTRACT_ASSETS_PARTY_ID + entry.getKey(), entry.getValue().get("money_contract")); this.redisHandler.setSync(ContractRedisKeys.CONTRACT_ASSETS_DEPOSIT_PARTY_ID + entry.getKey(), entry.getValue().get("money_contract_deposit")); this.redisHandler.setSync(ContractRedisKeys.CONTRACT_ASSETS_PROFIT_PARTY_ID + entry.getKey(), entry.getValue().get("money_contract_profit")); } } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void setRedisHandler(RedisHandler redisHandler) { this.redisHandler = redisHandler; } public void setAssetService(AssetService assetService) { this.assetService = assetService; } }