TradeInterval.java 2.16 KB
package com.cjs.cms.biz.trade;

import java.util.Calendar;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.cjs.cms.model.pub.ConstInfo;
import com.cjs.cms.util.lang.JsonUtil;
import com.cjs.cms.util.redis.JedisTemplate;

/**
 * 定时获取行情
 * 
 * @author tongyufu
 *
 */
@Service
public class TradeInterval {

    @Autowired
    private TradeBiz      tradeBiz;
    @Autowired
    private JedisTemplate jedis;
    Logger                log = LogManager.getLogger();

    /**定时获取行情*/
    @SuppressWarnings("unchecked")
    public void tradeInfo() {
        //非交易时间不更新行情
        Calendar calendar = Calendar.getInstance();
        int day = calendar.get(Calendar.DAY_OF_WEEK);
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        if (day == Calendar.SATURDAY || day == Calendar.SUNDAY || hour < 9 || hour > 16) {
            return;
        }

        Map<String, Object> trades = tradeBiz.exchaneInfoWebSocket();
        String beforeTradeInfo = jedis.get(ConstInfo.Trade.TRADE_INFO);
        String businessAmount = getBusinessAmount(JsonUtil.fromJson(beforeTradeInfo, Map.class));

        if (StringUtils.equals(getBusinessAmount(trades), businessAmount)) {
            return;
        }
        final String tradeInfo = JsonUtil.toJson(trades);
        //log.debug("发布行情:" + tradeInfo);
        jedis.set(ConstInfo.Trade.TRADE_INFO, tradeInfo);

        //发布到订阅通道
        jedis.publish(ConstInfo.Trade.TRADE_TOPIC, tradeInfo);
    }

    @SuppressWarnings("unchecked")
    private String getBusinessAmount(Map<String, Object> current) {
        if (current != null && current.get("data") != null) {
            for (Map<String, Object> info : (List<Map<String, Object>>) current.get("data")) {
                if ("399001".equals(info.get("mch_code"))) {
                    return info.get("business_amount").toString();
                }
            }
        }
        return "";
    }

}