TradeBiz.java 5.29 KB
package com.cjs.cms.biz.trade;

import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
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 org.springframework.util.Assert;

import com.cjs.cms.biz.pub.CommonBiz;
import com.cjs.cms.dao.quota.OtcHolderDao;
import com.cjs.cms.model.pub.ConstInfo;
import com.cjs.cms.util.lang.DateUtil;
import com.cjs.cms.util.lang.JsonUtil;
import com.cjs.cms.util.redis.JedisTemplate;
import com.cjs.cms.util.t2.T2Result;
import com.cjs.cms.util.t2.T2Util;

/**
 * 交易
 * 
 * @author tongyufu
 *
 */
@Service
public class TradeBiz {

    Logger                log = LogManager.getLogger();
    @Autowired
    private CommonBiz     commonBiz;
    @Autowired
    private OtcHolderDao  otcHolderDao;
    @Autowired
    private JedisTemplate jedisTemplate;

    /**
     * 非交易权益过户
     * 
     * @param otcCode 藏品编号
     * @param sellFundAccount 出让方会员号
     * @param buyFundAccount 认购方会员号
     * @param occurAmount 过户数量
     * @param remark 备注
     * @return
     */
    public T2Result transfer(String otcCode, String sellFundAccount, String buyFundAccount,
                             Integer occurAmount, String remark) {
        Assert.state(StringUtils.isNotBlank(otcCode), "藏品编号不能为空");
        Assert.state(StringUtils.isNotBlank(sellFundAccount), "出让方会员号不能为空");
        Assert.state(StringUtils.isNotBlank(buyFundAccount), "认购方会员号不能为空");
        String sellSdcAccount = otcHolderDao.queryOtcAccount(sellFundAccount);
        String buySdcAccount = otcHolderDao.queryOtcAccount(buyFundAccount);
        Assert.notNull(sellSdcAccount, "出让方权益账号不存在");
        Assert.notNull(buySdcAccount, "认购方权益账号不存在");
        Map<String, Object> params = new HashMap<String, Object>();

        params.put("op_branch_no", "11"); //操作分支机构
        params.put("operator_no", "2001"); //操作员
        params.put("user_type", "1");
        params.put("op_password", "*FP.@e%-/&quot;");
        params.put("op_station", "cms"); //站点地址
        params.put("op_entrust_way", "7"); //申请方式(7:网络)
        params.put("menu_id", "350502");
        params.put("function_id", "651004");
        params.put("branch_no", "11"); //分支机构
        params.put("audit_action", "0");
        params.put("otc_code", otcCode);
        params.put("otc_account", sellSdcAccount);
        params.put("opp_otcaccount", buySdcAccount);
        params.put("gh_type", "0"); //过户类别(0:流通股)
        params.put("occur_amount", occurAmount);
        params.put("remark", remark);
        params.put("otcexch_type", "O1");

        T2Result result = T2Util.request(params, "651004");
        log.info("非交易权益过户:" + result);
        return result;
    }

    /**
     * 获取交易行情(WebSocket)
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public Map exchaneInfoWebSocket() {
        Map trade = new HashMap();
        try {
            //非交易时间
            if (!commonBiz.checkOpenTime()) {
                return JsonUtil.fromJson(jedisTemplate.get(ConstInfo.Trade.TRADE_INFO), Map.class);
            }

            int marketStatus = commonBiz.checkMarketStatus();
            // 1:初始化;
            if (marketStatus == 1) {
                trade.put("code", "0");
                trade.put("datetime", DateUtil.getNow());
                trade.put("data", null);
                return trade;
            }
            // 3:闭市;
            if (marketStatus == 3) {
                return JsonUtil.fromJson(jedisTemplate.get(ConstInfo.Trade.TRADE_INFO), Map.class);
            }
            // 2:连续竞价;
            if (marketStatus == 2) {
                T2Result result = requestTradeData();
                trade.put("code", result.getCode());
                trade.put("datetime", DateUtil.getNow());
                if (result.getCode() == 0) {
                    List<Map<String, Object>> data = result.getData();
                    this.sort(data);
                    trade.put("data", data);
                }
            }
        } catch (Exception e) {
            log.error("", e);
        }
        return trade;
    }

    /** 从恒生获取行情 */
    public T2Result requestTradeData() {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("mchexch_type", "O1");
        params.put("mch_code", ""); // 交易撮合代码
        params.put("check_str", "0");
        return T2Util.request(params, "649015");
    }

    // 藏品代码排序
    private void sort(List<Map<String, Object>> list) {
        Collections.sort(list, new Comparator<Map<String, Object>>() {

            @Override
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                Integer code1 = Integer.parseInt(o1.get("mch_code").toString());
                Integer code2 = Integer.parseInt(o2.get("mch_code").toString());
                return code1.compareTo(code2);
            }

        });
    }
}