package project.item.internal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.collections.CollectionUtils; import com.mysql.cj.util.StringUtils; import kernel.web.ApplicationUtil; import project.data.DataService; import project.data.model.Realtime; import project.item.ItemRedisKeys; import project.item.ItemUserOptionalService; import project.item.model.ItemUserOptional; import project.redis.RedisHandler; public class ItemUserOptionalServiceImpl implements ItemUserOptionalService { private RedisHandler redisHandler; private DataService dataService; @Override public List cacheListByPartyId(String partyId) { Map map = (Map) redisHandler.get(ItemRedisKeys.ITEM_USER_OPTIONAL_MAP_PARTY_ID + partyId); return map == null ? null : new ArrayList(map.values()); } public List> cacheListDataByPartyId(String partyId, String symbol) { List> result = new ArrayList>(); List list = new ArrayList<>(); List lists = cacheListByPartyId(partyId); if (!StringUtils.isNullOrEmpty(symbol)) { for (ItemUserOptional op : lists) { if (op.getSymbol().equals(symbol)) { list.add(op); } } }else { list = lists; } if (CollectionUtils.isEmpty(list)) return result; List symbols = new ArrayList(); for (ItemUserOptional itemUserOptional : list) { symbols.add(itemUserOptional.getSymbol()); } if (CollectionUtils.isEmpty(symbols)) return new ArrayList>(); List realtimes = dataService.realtime(String.join(",", symbols)); for (Realtime realtime : realtimes) { Map bind = bind(realtime); result.add(bind); } return result; } public Map bind(Realtime realtime) { Map map = new HashMap(); map.put("amount", String.valueOf(realtime.getAmount())); map.put("change_ratio", realtime.getChange_ratio()); map.put("close", String.valueOf(realtime.getClose())); map.put("current_time", realtime.getCurrent_time()); map.put("high", String.valueOf(realtime.getHigh())); map.put("low", String.valueOf(realtime.getLow())); map.put("name", realtime.getName()); map.put("open", String.valueOf(realtime.getOpen())); map.put("symbol", String.valueOf(realtime.getSymbol())); map.put("ts", realtime.getTs()); map.put("volume", String.valueOf(realtime.getVolume())); return map; } @Override public void update(ItemUserOptional entity) { ApplicationUtil.executeUpdate(entity, "WHERE UUID=?", new Object[] {entity.getId()}); Map map = (Map) redisHandler.get(ItemRedisKeys.ITEM_USER_OPTIONAL_MAP_PARTY_ID + entity.getPartyId().toString()); if (map == null) map = new ConcurrentHashMap(); map.put(entity.getSymbol(), entity); redisHandler.setSync(ItemRedisKeys.ITEM_USER_OPTIONAL_MAP_PARTY_ID + entity.getPartyId().toString(), map); } @Override public void save(ItemUserOptional entity) { Map map = (Map) redisHandler.get(ItemRedisKeys.ITEM_USER_OPTIONAL_MAP_PARTY_ID + entity.getPartyId().toString()); if (map == null) { map = new ConcurrentHashMap(); } else if (map.containsKey(entity.getSymbol())) { // 已经添加的则直接返回 return; } entity.setId(ApplicationUtil.getCurrentTimeUUID()); ApplicationUtil.executeInsert(entity); map.put(entity.getSymbol(), entity); redisHandler.setSync(ItemRedisKeys.ITEM_USER_OPTIONAL_MAP_PARTY_ID + entity.getPartyId().toString(), map); } public void delete(String partyId, String symbol) { Map map = (Map) redisHandler.get(ItemRedisKeys.ITEM_USER_OPTIONAL_MAP_PARTY_ID + partyId); if (null!=map && !map.isEmpty()) { ItemUserOptional itemUserOptional = map.remove(symbol); if (itemUserOptional == null) return; ApplicationUtil.executeDelete(ItemUserOptional.class, "WHERE UUID=?", new Object[] {itemUserOptional.getId()}); redisHandler.setSync(ItemRedisKeys.ITEM_USER_OPTIONAL_MAP_PARTY_ID + partyId, map); } } public void delete(ItemUserOptional entity) { ApplicationUtil.executeDelete(ItemUserOptional.class, "WHERE UUID=?", new Object[] {entity.getId()}); Map map = (Map) redisHandler.get(ItemRedisKeys.ITEM_USER_OPTIONAL_MAP_PARTY_ID + entity.getPartyId().toString()); if (null!=map && !map.isEmpty()) { map.remove(entity.getSymbol()); redisHandler.setSync(ItemRedisKeys.ITEM_USER_OPTIONAL_MAP_PARTY_ID + entity.getPartyId().toString(), map); } } public void setRedisHandler(RedisHandler redisHandler) { this.redisHandler = redisHandler; } public void setDataService(DataService dataService) { this.dataService = dataService; } }