| | |
| | | @Transactional |
| | | @Slf4j |
| | | public class ItemService extends ServiceImpl<ItemMapper, Item> { |
| | | public static final String ITEM_CACHE = "itemCache"; |
| | | public static final String ALL = "all"; |
| | | public static final String ITEM_CACHE = "mdItemCache"; |
| | | public static final String ALL = "mdAll"; |
| | | |
| | | @Autowired |
| | | private ItemLeverageService itemLeverageService; |
| | | |
| | | private Map<String, Integer> symbolDecimal = Maps.newHashMap(); |
| | | |
| | | |
| | | @Autowired |
| | | private CacheManager cacheManager; |
| | |
| | | @Cached(name = ITEM_CACHE, key = "'all'", expire = 3600) |
| | | @Override |
| | | public List<Item> list() { |
| | | List<Item> list = super.list(); |
| | | List<Item> list = super.list(new LambdaQueryWrapper<>(Item.class).eq(Item::getType,Item.cryptos)); |
| | | symbolDecimal = list.stream() |
| | | .collect(Collectors.toMap(Item::getSymbol, Item::getDecimals, (s1, s2) -> s2)); |
| | | return list; |
| | |
| | | return super.removeById(id); |
| | | } |
| | | |
| | | // 清除 list() 方法的缓存(关键:与@Cached的name和key一致) |
| | | /*@CacheEvict(cacheNames = ITEM_CACHE, key = "'all'") |
| | | public void clearListCache() { |
| | | log.info("已清除 list() 方法的缓存"); |
| | | }*/ |
| | | |
| | | public void reloadListAndCache() { |
| | | // 步骤1:清除 list() 方法的原有缓存(确保重新查询) |
| | | //clearListCache(); |
| | | |
| | | // 步骤2:重新调用 list() 方法,此时会执行数据库查询,且@Cached会自动更新缓存 |
| | | //List<Item> freshList = list(); |
| | | |
| | | // 步骤3(可选):如果需要同步更新 init() 方法中的 itemCache,重新调用 init() |
| | | init(); |
| | | log.info("初始化init()"); |
| | | } |
| | | |
| | | /** |
| | | * 获取品种精度 |
| | |
| | | } |
| | | |
| | | public List<Item> cacheGetAll() { |
| | | return ApplicationContextUtils.getApplicationContext().getBean(ItemService.class).list(); |
| | | return ApplicationContextUtils.getApplicationContext().getBean(ItemService.class).list(new LambdaQueryWrapper<>(Item.class).eq(Item::getType,Item.cryptos)); |
| | | } |
| | | |
| | | |
| | |
| | | Item bySymbol = findBySymbol(symbol); |
| | | return MarketOpenChecker.isMarketOpenByItemCloseType(bySymbol.getOpenCloseType()); |
| | | } |
| | | |
| | | /** |
| | | * 是否开放合约 |
| | | * @param item |
| | | * @return |
| | | */ |
| | | public boolean isContractTrading(Item item) { |
| | | item = findBySymbol(item.getSymbol()); |
| | | //虚拟币新币才判断 |
| | | if (item.getType().equals(Item.cryptos) && (item.getCurrencyType() != null && item.getCurrencyType() == 1)) { |
| | | if (item.getTradeType() != null && item.getTradeType().equals("0")) { |
| | | return false; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 是否停牌状态 |
| | | * @return |
| | | */ |
| | | public boolean isSuspended(String symbol) { |
| | | Item item = findBySymbol(symbol); |
| | | //虚拟币新币才判断 |
| | | if (item.getType().equals(Item.cryptos) /*&& (item.getCurrencyType() != null && item.getCurrencyType() == 1)*/) { |
| | | //item = getById(item.getUuid()); |
| | | if (item.getStatus() != null && item.getStatus() == 0) { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | } |