Ver código fonte

AttornDataControl 移

huangyan 4 anos atrás
pai
commit
0e8290f0ab

+ 490 - 0
RMA/chart/src/main/java/com/desfate/chart/ui/old/OTC/controls/AttornDataControl.java

@@ -0,0 +1,490 @@
+package com.desfate.chart.ui.old.OTC.controls;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import com.desfate.chart.R;
+import com.desfate.chart.data.ChartMarketGoodsDatas;
+import com.desfate.chart.ui.old.OTC.datas.BidQuoteDay;
+import com.desfate.chart.ui.old.OTC.listener.MessageEvent;
+import com.desfate.chart.ui.old.OTC.listener.MessageingManager;
+import com.desfate.chart.ui.old.OTC.listener.OnMessageListener;
+import com.desfate.chart.ui.old.ParamConfigData;
+
+import java.util.ArrayList;
+
+/**
+ * 挂牌转让
+ * 独自维护生命周期
+ *
+ * @author Administrator
+ */
+public class AttornDataControl implements OnMessageListener {
+    private Context mContext;
+    private View view;
+//    private GoodsInfoAndQuotes goodsInfoAndQuotes;
+    private TextView nh_sale;
+    private TextView nh_buy;
+    // 买卖五档
+    private TextView mtp_value_sale_five;
+    private TextView mtp_sum_sale_five;
+    private TextView mtp_value_sale_four;
+    private TextView mtp_sum_sale_four;
+    private TextView mtp_value_sale_three;
+    private TextView mtp_sum_sale_three;
+    private TextView mtp_value_sale_two;
+    private TextView mtp_sum_sale_two;
+    private TextView mtp_value_sale_one;
+    private TextView mtp_sum_sale_one;
+
+    private TextView mtp_value_buy_one;
+    private TextView mtp_sum_buy_one;
+    private TextView mtp_value_buy_two;
+    private TextView mtp_sum_buy_two;
+    private TextView mtp_value_buy_three;
+    private TextView mtp_sum_buy_three;
+    private TextView mtp_value_buy_four;
+    private TextView mtp_sum_buy_four;
+    private TextView mtp_value_buy_five;
+    private TextView mtp_sum_buy_five;
+    private TextView loading_view_text;
+
+    private AttornDataControl() {
+    }
+
+    private void initViews() {
+        view = LayoutInflater.from(mContext).inflate(R.layout.chart_attorn, null);
+
+        nh_sale = view.findViewById(R.id.nh_sale);
+        nh_buy = view.findViewById(R.id.nh_buy);
+
+        mtp_value_sale_five = view.findViewById(R.id.mtp_value_sale_five);
+        mtp_sum_sale_five = view.findViewById(R.id.mtp_sum_sale_five);
+
+        mtp_value_sale_four = view.findViewById(R.id.mtp_value_sale_four);
+        mtp_sum_sale_four = view.findViewById(R.id.mtp_sum_sale_four);
+
+        mtp_value_sale_three = view.findViewById(R.id.mtp_value_sale_three);
+        mtp_sum_sale_three = view.findViewById(R.id.mtp_sum_sale_three);
+
+        mtp_value_sale_two = view.findViewById(R.id.mtp_value_sale_two);
+        mtp_sum_sale_two = view.findViewById(R.id.mtp_sum_sale_two);
+
+        mtp_value_sale_one = view.findViewById(R.id.mtp_value_sale_one);
+        mtp_sum_sale_one = view.findViewById(R.id.mtp_sum_sale_one);
+
+        mtp_value_buy_one = view.findViewById(R.id.mtp_value_buy_one);
+        mtp_sum_buy_one = view.findViewById(R.id.mtp_sum_buy_one);
+
+        mtp_value_buy_two = view.findViewById(R.id.mtp_value_buy_two);
+        mtp_sum_buy_two = view.findViewById(R.id.mtp_sum_buy_two);
+
+        mtp_value_buy_three = view.findViewById(R.id.mtp_value_buy_three);
+        mtp_sum_buy_three = view.findViewById(R.id.mtp_sum_buy_three);
+
+        mtp_value_buy_four = view.findViewById(R.id.mtp_value_buy_four);
+        mtp_sum_buy_four = view.findViewById(R.id.mtp_sum_buy_four);
+
+        mtp_value_buy_five = view.findViewById(R.id.mtp_value_buy_five);
+        mtp_sum_buy_five = view.findViewById(R.id.mtp_sum_buy_five);
+    }
+
+    public View getView() {
+        return view;
+    }
+
+    /**
+     * 实例化
+     *
+     * @param context
+     * @param goodsid
+     */
+    public AttornDataControl(Context context, String goodsid) {
+        MessageingManager.getInstance().regiter(this);
+        this.mContext = context;
+        initViews();
+        fetchForRefresh(goodsid);
+    }
+
+    /**
+     * 实例化
+     *
+     * @param context
+     * @param goodsInfoAndQuotes
+     */
+    public AttornDataControl(Context context, ChartMarketGoodsDatas goodsInfoAndQuotes) {
+        MessageingManager.getInstance().regiter(this);
+        this.mContext = context;
+        initViews();
+//        this.goodsInfoAndQuotes = goodsInfoAndQuotes;
+        if (supportAttorn()) {
+//            fetchForRefresh(goodsInfoAndQuotes.getGoodsInfo().getGoodsId() + "");
+        }
+    }
+
+
+    /**
+     * 是否支持挂牌转让
+     *
+     * @return
+     */
+    public boolean supportAttorn() {
+        return ParamConfigData.QUOTED_TRANSFER;
+//		if (goodsInfoAndQuotes == null) {
+//			return false;
+//		}
+//		return goodsInfoAndQuotes.getTradeMode() == MTPEnums.BIDDING &&
+//				goodsInfoAndQuotes.getGoodsInfo().getMoneyMode() == MTPEnums.MONEYMODE_PAY &&
+//				MTPApplication.getInstance().isBidAttornMode(goodsInfoAndQuotes.getGoodsInfo().getGoodsId());
+    }
+
+    public void destory() {
+        MessageingManager.getInstance().unRegiter(this);
+    }
+
+    public void clearAndGone() {
+        mtp_value_sale_five.setText("");
+        mtp_sum_sale_five.setText("");
+        mtp_value_sale_four.setText("");
+        mtp_sum_sale_four.setText("");
+        mtp_value_sale_three.setText("");
+        mtp_sum_sale_three.setText("");
+        mtp_value_sale_two.setText("");
+        mtp_sum_sale_two.setText("");
+        mtp_value_sale_one.setText("");
+        mtp_sum_sale_one.setText("");
+
+        mtp_value_buy_one.setText("");
+        mtp_sum_buy_one.setText("");
+        mtp_value_buy_two.setText("");
+        mtp_sum_buy_two.setText("");
+        mtp_value_buy_three.setText("");
+        mtp_sum_buy_three.setText("");
+        mtp_value_buy_four.setText("");
+        mtp_sum_buy_four.setText("");
+        mtp_value_buy_five.setText("");
+        mtp_sum_buy_five.setText("");
+
+        mtp_value_sale_five.setVisibility(View.GONE);
+        mtp_sum_sale_five.setVisibility(View.GONE);
+        mtp_value_sale_four.setVisibility(View.GONE);
+        mtp_sum_sale_four.setVisibility(View.GONE);
+        mtp_value_sale_three.setVisibility(View.GONE);
+        mtp_sum_sale_three.setVisibility(View.GONE);
+        mtp_value_sale_two.setVisibility(View.GONE);
+        mtp_sum_sale_two.setVisibility(View.GONE);
+        mtp_value_sale_one.setVisibility(View.GONE);
+        mtp_sum_sale_one.setVisibility(View.GONE);
+
+        mtp_value_buy_one.setVisibility(View.GONE);
+        mtp_sum_buy_one.setVisibility(View.GONE);
+        mtp_value_buy_two.setVisibility(View.GONE);
+        mtp_sum_buy_two.setVisibility(View.GONE);
+        mtp_value_buy_three.setVisibility(View.GONE);
+        mtp_sum_buy_three.setVisibility(View.GONE);
+        mtp_value_buy_four.setVisibility(View.GONE);
+        mtp_sum_buy_four.setVisibility(View.GONE);
+        mtp_value_buy_five.setVisibility(View.GONE);
+        mtp_sum_buy_five.setVisibility(View.GONE);
+    }
+
+    /**
+     * 重新获取数据
+     */
+    public void fetchForRefresh(String goodsid) {
+//		try {
+//			SendMessageController.getCommonMode().queryAskStoreOrder(goodsid, MTPApplication.getInstance().getTransferHubCenter());
+//		} catch (Exception e) {
+//			e.printStackTrace();
+//		}
+//		try {
+//			SendMessageController.getCommonMode().queryBidStoreOrder(goodsid, MTPApplication.getInstance().getTransferHubCenter());
+//		} catch (Exception e) {
+//			e.printStackTrace();
+//		}
+        clearAndGone();
+        dealBidQueue();
+        dealAskQueue();
+
+    }
+
+    private synchronized void dealBidQueue() {
+
+        BidQuoteDay quoteTik =/* (BidQuoteDay) goodsInfoAndQuotes.getQuoteDay()*/null;
+        if (quoteTik == null) {
+            return;
+        }
+        String bidQueueInfo = quoteTik.getBidQueueInfo();
+
+//		String bidQueueInfo = "万俊甫,55023,12182038123810238,10,25.22;";
+        if (bidQueueInfo != null && !bidQueueInfo.equals("")) {// 买委托列队
+//            boolean ret = QuoteCollention.getInstance().addBidStoreOrderDatas(bidQueueInfo);// 添加到本地列队中...
+            boolean ret = false;// 添加到本地列队中...
+            if (ret) {
+                // 请求
+                try {
+//					SendMessageController.getCommonMode().queryBidStoreOrder(String.valueOf(goodsInfoAndQuotes.getGoodsInfo().getGoodsId()),
+//							MTPApplication.getInstance().getTransferHubCenter());
+//					Toast.makeText(mContext, "AttornDataControl.行情中有该账号的数据,重新请求", Toast.LENGTH_SHORT).show();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            } else {
+                clearDown();
+                reFreshBidData();
+            }
+        } else {
+            clearDown();
+//            QuoteCollention.getInstance().getBidStoreOrderDatas().clear();
+            reFreshBidData();
+        }
+    }
+
+    private synchronized void dealAskQueue() {
+//        BidQuoteDay quoteTik = (BidQuoteDay) goodsInfoAndQuotes.getQuoteDay();
+        BidQuoteDay quoteTik = null;
+        if (quoteTik == null) {
+            return;
+        }
+        String askQueueInfo = quoteTik.getAskQueueInfo();
+//		String askQueueInfo = "万俊甫1,55022,12182038123810233,11,25.11;";
+        if (askQueueInfo != null && !askQueueInfo.equals("")) {// 卖委托列队
+            boolean ret = /*QuoteCollention.getInstance().addAskStoreOrderDatas(askQueueInfo)*/false;
+            if (ret) {
+                // 请求
+                try {
+//					SendMessageController.getCommonMode().queryAskStoreOrder(String.valueOf(goodsInfoAndQuotes.getGoodsInfo().getGoodsId()),
+//							MTPApplication.getInstance().getTransferHubCenter());
+//					Toast.makeText(mContext, "Attorn ask.行情中有该账号的数据,重新请求", Toast.LENGTH_SHORT).show();
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            } else {
+                clearUp();
+                reFreshAskData();
+            }
+        } else {
+//            QuoteCollention.getInstance().getAskStoreOrderDatas().clear();
+            clearUp();
+            reFreshAskData();
+        }
+    }
+
+    @Override
+    public void onMessageEventThread(MessageEvent messageEvent) {
+        if (0x41 == messageEvent.getFunCode()) {
+            boolean canGo = false;
+            if (messageEvent.getMessageInfo() instanceof ArrayList) {
+                ArrayList<String> arrayList = (ArrayList) messageEvent.getMessageInfo();
+                for (int a = 0; a < arrayList.size(); a++) {
+                    String goodsCode = "";
+                    if (arrayList.get(a).contains("_")) {
+                        goodsCode = arrayList.get(a).split("_")[1];
+//                        if (goodsInfoAndQuotes.getGoodsInfo().getGoodsCode().equals(goodsCode)) {
+//                            canGo = true;
+//                            break;
+//                        }
+                    }
+                }
+            }
+            if (canGo) {
+                dealBidQueue();
+                dealAskQueue();
+            }
+
+        } else if ("QueryAskStoreOrder".equals(messageEvent.getQueryCommonId())) {// 市场上全部的竞价卖持仓
+            clearUp();
+            reFreshAskData();
+        } else if ("QueryBidStoreOrder".equals(messageEvent.getQueryCommonId())) {// 市场上全部的竞价买持仓
+            clearDown();
+            reFreshBidData();
+        }
+    }
+
+    private void reFreshBidData() {
+//        ArrayList<ListingBidStoreOrderData> arrayList = QuoteCollention.getInstance().getBidStoreOrderDatas();
+//        ListingBidStoreOrderData askStoreOrderData = null;
+        String name = "";
+        String price = "";
+        String count = "";
+        int decimalPlace = 0;
+
+//			if (arrayList.size() == 0) {
+//				nh_buy.setVisibility(View.GONE);
+//			}
+//        for (int i = 0; i < arrayList.size(); i++) {
+//            if (i >= 5) {
+//                return;
+//            }
+//            askStoreOrderData = arrayList.get(i);
+//            decimalPlace = goodsInfoAndQuotes.getGoodsInfo().getDecimalPlace();
+//            name = askStoreOrderData.getAccountname();
+//            if (name != null && name.length() > 1) {
+//                name = MyUtils.makeNameSecret(name);
+//            }
+//
+//            price = MathUtil.roundNum(askStoreOrderData.getOrderprice(), decimalPlace);
+//
+//            count = askStoreOrderData.getEnableqty();
+//            switch (i + 5) {
+//                case 0:
+//                    showItem(mtp_value_sale_five, mtp_sum_sale_five, name, price, count);
+//                    break;
+//                case 1:
+//                    showItem(mtp_value_sale_four, mtp_sum_sale_four, name, price, count);
+//                    break;
+//                case 2:
+//                    showItem(mtp_value_sale_three, mtp_sum_sale_three, name, price, count);
+//                    break;
+//                case 3:
+//                    showItem(mtp_value_sale_two, mtp_sum_sale_two, name, price, count);
+//                    break;
+//                case 4:
+//                    showItem(mtp_value_sale_one, mtp_sum_sale_one, name, price, count);
+//                    break;
+//                case 5:
+//                    showItem(mtp_value_buy_one, mtp_sum_buy_one, name, price, count);
+//                    break;
+//                case 6:
+//                    showItem(mtp_value_buy_two, mtp_sum_buy_two, name, price, count);
+//                    break;
+//                case 7:
+//                    showItem(mtp_value_buy_three, mtp_sum_buy_three, name, price, count);
+//                    break;
+//                case 8:
+//                    showItem(mtp_value_buy_four, mtp_sum_buy_four, name, price, count);
+//                    break;
+//                case 9:
+//                    showItem(mtp_value_buy_five, mtp_sum_buy_five, name, price, count);
+//                    break;
+//                default:
+//                    break;
+//            }
+//        }
+    }
+
+    /**
+     * 隐藏名字后面的文字
+     *
+     * @return 哇哈哈->哇**
+     */
+    public static String makeNameSecret(String name) {
+        if (name == null || "".equals(name)) {
+            return "";
+        }
+        if (name.length() == 1) {
+            return name;
+        }
+        char tem = '*';
+        char[] value = name.toCharArray();
+        for (int a = 0; a < value.length; a++) {
+            if (a != 0) {
+                value[a] = tem;
+            }
+        }
+        name = new String(value);
+        return name;
+    }
+
+
+    private void clearUp() {
+        mtp_value_sale_five.setVisibility(View.GONE);
+        mtp_sum_sale_five.setVisibility(View.GONE);
+        mtp_value_sale_four.setVisibility(View.GONE);
+        mtp_sum_sale_four.setVisibility(View.GONE);
+        mtp_value_sale_three.setVisibility(View.GONE);
+        mtp_sum_sale_three.setVisibility(View.GONE);
+        mtp_value_sale_two.setVisibility(View.GONE);
+        mtp_sum_sale_two.setVisibility(View.GONE);
+        mtp_value_sale_one.setVisibility(View.GONE);
+        mtp_sum_sale_one.setVisibility(View.GONE);
+
+    }
+
+    private void clearDown() {
+        mtp_value_buy_one.setVisibility(View.GONE);
+        mtp_sum_buy_one.setVisibility(View.GONE);
+        mtp_value_buy_two.setVisibility(View.GONE);
+        mtp_sum_buy_two.setVisibility(View.GONE);
+        mtp_value_buy_three.setVisibility(View.GONE);
+        mtp_sum_buy_three.setVisibility(View.GONE);
+        mtp_value_buy_four.setVisibility(View.GONE);
+        mtp_sum_buy_four.setVisibility(View.GONE);
+        mtp_value_buy_five.setVisibility(View.GONE);
+        mtp_sum_buy_five.setVisibility(View.GONE);
+    }
+
+
+    private void reFreshAskData() {
+//        ArrayList<ListingAskStoreOrderData> arrayList = QuoteCollention.getInstance().getAskStoreOrderDatas();
+//        ListingAskStoreOrderData askStoreOrderData = null;
+        String name = "";
+        String price = "";
+        String count = "";
+        int decimalPlace = 0;
+//			if (arrayList.size() == 0) {
+//				nh_sale.setVisibility(View.GONE);
+//			}
+//        for (int i = 0; i < arrayList.size(); i++) {
+//            if (i >= 5) {// 最多就只显示10个持仓
+//                return;
+//            }
+//            askStoreOrderData = arrayList.get(i);
+//            decimalPlace = goodsInfoAndQuotes.getGoodsInfo().getDecimalPlace();
+//            name = askStoreOrderData.getAccountname();
+//            if (name != null && name.length() > 1) {
+//                name = MyUtils.makeNameSecret(name);
+//            }
+//
+//            price = MathUtil.roundNum(askStoreOrderData.getOrderprice(), decimalPlace);
+//
+//            count = askStoreOrderData.getEnableqty();
+//            switch (i) {
+//                case 0:
+//                    showItem(mtp_value_sale_five, mtp_sum_sale_five, name, price, count);
+//                    break;
+//                case 1:
+//                    showItem(mtp_value_sale_four, mtp_sum_sale_four, name, price, count);
+//                    break;
+//                case 2:
+//                    showItem(mtp_value_sale_three, mtp_sum_sale_three, name, price, count);
+//                    break;
+//                case 3:
+//                    showItem(mtp_value_sale_two, mtp_sum_sale_two, name, price, count);
+//                    break;
+//                case 4:
+//                    showItem(mtp_value_sale_one, mtp_sum_sale_one, name, price, count);
+//                    break;
+//                case 5:
+//                    showItem(mtp_value_buy_one, mtp_sum_buy_one, name, price, count);
+//                    break;
+//                case 6:
+//                    showItem(mtp_value_buy_two, mtp_sum_buy_two, name, price, count);
+//                    break;
+//                case 7:
+//                    showItem(mtp_value_buy_three, mtp_sum_buy_three, name, price, count);
+//                    break;
+//                case 8:
+//                    showItem(mtp_value_buy_four, mtp_sum_buy_four, name, price, count);
+//                    break;
+//                case 9:
+//                    showItem(mtp_value_buy_five, mtp_sum_buy_five, name, price, count);
+//                    break;
+//                default:
+//                    break;
+//            }
+//        }
+    }
+
+    private void showItem(TextView namePrice, TextView count, String name, String price, String countValue) {
+        namePrice.setVisibility(View.VISIBLE);
+        count.setVisibility(View.VISIBLE);
+
+        namePrice.setText(name + "  " + price);
+//        count.setText(MathUtil.roundNoNum(countValue, 0));
+    }
+
+}

+ 2739 - 0
RMA/chart/src/main/java/com/desfate/chart/ui/old/OTC/datas/BidQuoteDay.java

@@ -0,0 +1,2739 @@
+package com.desfate.chart.ui.old.OTC.datas;
+
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+
+/**
+ * 竞价和混合的盘面数据,最开始设计说是一模一样,所以弄成了一个,
+ * 结果后来有些不一样了,最好是拆开为2个
+ * 特点: 1.有量2.竞价有涨跌停,混合没有
+ *
+ * @author yongzq
+ */
+public class BidQuoteDay extends QuoteDayBase {
+
+    private BidQuoteDay() {
+        init();
+    }
+
+    public BidQuoteDay(int exchangeCode, String goodsCode) {
+        this.setExchangeCode(exchangeCode);
+        this.setGoodsCode(goodsCode);
+        init();
+    }
+
+    // 现量
+    private String lastVolume;
+
+    // 保存前一笔价格
+    private String prePrice;
+
+    // 卖2
+    private String ask2;
+
+    // 卖3
+    private String ask3;
+
+    // 卖4
+    private String ask4;
+
+    // 卖5
+    private String ask5;
+    private String ask6;
+    private String ask7;
+    private String ask8;
+    private String ask9;
+    private String ask10;
+
+    // 卖量1
+    private String askVolume;
+
+    // 卖量2
+    private String askVolume2;
+
+    // 卖量3
+    private String askVolume3;
+
+    // 卖量4
+    private String askVolume4;
+
+    // 卖量5
+    private String askVolume5;
+    // 卖量5
+    private String askVolume6;
+    // 卖量5
+    private String askVolume7;
+    // 卖量5
+    private String askVolume8;
+    // 卖量5
+    private String askVolume9;
+    // 卖量5
+    private String askVolume10;
+
+    // 买2
+    private String bid2;
+
+    // 买3
+    private String bid3;
+
+    // 买4
+    private String bid4;
+
+    // 买5
+    private String bid5;
+    private String bid6;
+    private String bid7;
+    private String bid8;
+    private String bid9;
+    private String bid10;
+
+    // 买量1
+    private String bidVolume;
+
+    // 买量2
+    private String bidVolume2;
+
+    // 买量3
+    private String bidVolume3;
+
+    // 买量4
+    private String bidVolume4;
+
+    // 买量5
+    private String bidVolume5;
+    private String bidVolume6;
+    private String bidVolume7;
+    private String bidVolume8;
+    private String bidVolume9;
+    private String bidVolume10;
+
+    // 总量
+    private String totalVolume;
+
+    // 总成交额
+    private String totalTurnover;
+
+    // 总买盘
+    private String totalBidVolume;
+
+    // 总卖盘
+    private String totalAskVolume;
+
+    // 委比
+    private String committee;
+
+    // 持仓
+    private String holdVolume;
+
+    // 涨停
+    private String limitHigh;
+
+    // 跌停
+    private String limitLow;
+
+    // 换手率
+    private String changeVolumeRange;
+
+    // 昨持仓
+    private String preHoldVolume;
+
+    // 行权价
+    private String strikePrice;
+
+    // 交易日
+    private String exchangeTime;
+
+    // 权力金 就是last
+
+    // 认购期权权利金1
+    private String callOptionPremiums;
+    // 认购期权权利金2
+    private String callOptionPremiums2;
+    // 认购期权权利金3
+    private String callOptionPremiums3;
+    // 认购期权权利金4
+    private String callOptionPremiums4;
+    // 认购期权权利金5
+    private String callOptionPremiums5;
+
+    //认沽期权权利金1
+    private String putOptionPremiums;
+    //认沽期权权利金2
+    private String putOptionPremiums2;
+    //认沽期权权利金3
+    private String putOptionPremiums3;
+    //认沽期权权利金4
+    private String putOptionPremiums4;
+    //认沽期权权利金5
+    private String putOptionPremiums5;
+
+    //买订单号1
+    public String strBidOrder;
+    //买订单号2
+    public String strBidOrder2;
+    //买订单号3
+    public String strBidOrder3;
+    //买订单号4
+    public String strBidOrder4;
+    //买订单号5
+    public String strBidOrder5;
+    public String strBidOrder6;
+    public String strBidOrder7;
+    public String strBidOrder8;
+    public String strBidOrder9;
+    public String strBidOrder10;
+
+    //卖订单号1
+    public String strAskOrder;
+    //卖订单号2
+    public String strAskOrder2;
+    //卖订单号3
+    public String strAskOrder3;
+    //卖订单号4
+    public String strAskOrder4;
+    //卖订单号5
+    public String strAskOrder5;
+    public String strAskOrder6;
+    public String strAskOrder7;
+    public String strAskOrder8;
+    public String strAskOrder9;
+    public String strAskOrder10;
+
+    // 买单量
+    public String bidOrderVolume;
+    public String bidOrderVolume2;
+    public String bidOrderVolume3;
+    public String bidOrderVolume4;
+    public String bidOrderVolume5;
+    public String bidOrderVolume6;
+    public String bidOrderVolume7;
+    public String bidOrderVolume8;
+    public String bidOrderVolume9;
+    public String bidOrderVolume10;
+
+    // 卖单量
+    public String askOrderVolume;
+    public String askOrderVolume2;
+    public String askOrderVolume3;
+    public String askOrderVolume4;
+    public String askOrderVolume5;
+    public String askOrderVolume6;
+    public String askOrderVolume7;
+    public String askOrderVolume8;
+    public String askOrderVolume9;
+    public String askOrderVolume10;
+
+    public String nonTotalVolume;//非交易成交总量
+    public String nonTotalHolderVolume;//非交易总持仓量
+    public String nonTotalTurnover;//非交易成交总金额
+    public String nonTotallot;//非交易成交总数
+    public String markPrice;//MARKPRICE
+    public String fundsRate;//FUNDSRATE
+
+    /**
+     * 库存量
+     */
+    private String Inventory = "";
+
+
+    // 价格变动标志1涨 2跌 ,0表示没变,和上一口价格比
+    private int raisedFlag = -1;
+
+    // 涨跌,1涨 2跌,0表示没变 和昨收比
+    private int upDown = -1;
+
+    public String getPrePrice() {
+        if (prePrice == null || "".equals(prePrice)) {
+            prePrice = "0";
+        }
+        return prePrice;
+    }
+
+    public void setPrePrice(String prePrice) {
+        this.prePrice = prePrice;
+    }
+
+    public String getAsk2() {
+        if (ask2 == null || ask2.equals("") || ask2.equals("null")) {
+            ask2 = "0";
+        }
+        return ask2;
+    }
+
+    public String getInventory() {
+        if (!isEmpty(Inventory)) {
+            Inventory = "0";
+        }
+        return Inventory;
+    }
+
+    public static boolean isEmpty(String str) {
+        return !(str == null || str.equals("") || str.equals("null"));
+    }
+
+    public void setInventory(String inventory) {
+        Inventory = inventory;
+    }
+
+    public void setAsk2(String ask2) {
+        this.ask2 = ask2;
+    }
+
+    public String getAsk3() {
+        if (ask3 == null || ask3.equals("") || ask3.equals("null")) {
+            ask3 = "0";
+        }
+        return ask3;
+    }
+
+    public void setAsk3(String ask3) {
+        this.ask3 = ask3;
+    }
+
+    public String getAsk4() {
+        if (ask4 == null || ask4.equals("") || ask4.equals("null")) {
+            ask4 = "0";
+        }
+        return ask4;
+    }
+
+    public void setAsk4(String ask4) {
+        this.ask4 = ask4;
+    }
+
+    public String getAsk5() {
+        if (ask5 == null || ask5.equals("") || ask5.equals("null")) {
+            ask5 = "0";
+        }
+        return ask5;
+    }
+
+    public void setAsk5(String ask5) {
+        this.ask5 = ask5;
+    }
+
+    public String getLastVolume() {
+        if (lastVolume == null || lastVolume.equals("") || lastVolume.equals("null")) {
+            lastVolume = "0";
+        }
+        return lastVolume;
+    }
+
+    public void setLastVolume(String lastVolume) {
+        this.lastVolume = lastVolume;
+    }
+
+    public String getAskVolume() {
+        if (askVolume == null || askVolume.equals("") || askVolume.equals("null")) {
+            askVolume = "0";
+        }
+        return askVolume;
+    }
+
+    public void setAskVolume(String askVolume) {
+        this.askVolume = askVolume;
+    }
+
+    public String getAskVolume2() {
+        if (askVolume2 == null || askVolume2.equals("") || askVolume2.equals("null")) {
+            askVolume2 = "0";
+        }
+        return askVolume2;
+    }
+
+    public void setAskVolume2(String askVolume2) {
+        this.askVolume2 = askVolume2;
+    }
+
+    public String getAskVolume3() {
+        if (askVolume3 == null || askVolume3.equals("") || askVolume3.equals("null")) {
+            askVolume3 = "0";
+        }
+        return askVolume3;
+    }
+
+    public void setAskVolume3(String askVolume3) {
+        this.askVolume3 = askVolume3;
+    }
+
+    public String getAskVolume4() {
+        if (askVolume4 == null || askVolume4.equals("") || askVolume4.equals("null")) {
+            askVolume4 = "0";
+        }
+        return askVolume4;
+    }
+
+    public void setAskVolume4(String askVolume4) {
+        this.askVolume4 = askVolume4;
+    }
+
+    public String getAskVolume5() {
+        if (askVolume5 == null || askVolume5.equals("") || askVolume5.equals("null")) {
+            askVolume5 = "0";
+        }
+        return askVolume5;
+    }
+
+    public void setAskVolume5(String askVolume5) {
+        this.askVolume5 = askVolume5;
+    }
+
+    public String getBid2() {
+        if (bid2 == null || bid2.equals("") || bid2.equals("null")) {
+            bid2 = "0";
+        }
+        return bid2;
+    }
+
+    public void setBid2(String bid2) {
+        this.bid2 = bid2;
+    }
+
+    public String getBid3() {
+        if (bid3 == null || bid3.equals("") || bid3.equals("null")) {
+            bid3 = "0";
+        }
+        return bid3;
+    }
+
+    public void setBid3(String bid3) {
+        this.bid3 = bid3;
+    }
+
+    public String getBid4() {
+        if (bid4 == null || bid4.equals("") || bid4.equals("null")) {
+            bid4 = "0";
+        }
+        return bid4;
+    }
+
+    public void setBid4(String bid4) {
+        this.bid4 = bid4;
+    }
+
+    public String getBid5() {
+        if (bid5 == null || bid5.equals("") || bid5.equals("null")) {
+            bid5 = "0";
+        }
+        return bid5;
+    }
+
+    public void setBid5(String bid5) {
+        this.bid5 = bid5;
+    }
+
+    public String getBidVolume() {
+        if (bidVolume == null || bidVolume.equals("") || bidVolume.equals("null")) {
+            bidVolume = "0";
+        }
+        return bidVolume;
+    }
+
+    public void setBidVolume(String bidVolume) {
+        this.bidVolume = bidVolume;
+    }
+
+    public String getBidVolume2() {
+        if (bidVolume2 == null || bidVolume2.equals("") || bidVolume2.equals("null")) {
+            bidVolume2 = "0";
+        }
+        return bidVolume2;
+    }
+
+    public void setBidVolume2(String bidVolume2) {
+        this.bidVolume2 = bidVolume2;
+    }
+
+    public String getBidVolume3() {
+        if (bidVolume3 == null || bidVolume3.equals("") || bidVolume3.equals("null")) {
+            bidVolume3 = "0";
+        }
+        return bidVolume3;
+    }
+
+    public void setBidVolume3(String bidVolume3) {
+        this.bidVolume3 = bidVolume3;
+    }
+
+    public String getBidVolume4() {
+        if (bidVolume4 == null || bidVolume4.equals("") || bidVolume4.equals("null")) {
+            bidVolume4 = "0";
+        }
+        return bidVolume4;
+    }
+
+    public void setBidVolume4(String bidVolume4) {
+        this.bidVolume4 = bidVolume4;
+    }
+
+    public String getBidVolume5() {
+        if (bidVolume5 == null || bidVolume5.equals("") || bidVolume5.equals("null")) {
+            bidVolume5 = "0";
+        }
+        return bidVolume5;
+    }
+
+    public String getStrikePrice() {
+        if (strikePrice == null || strikePrice.equals("") || strikePrice.equals("null")) {
+            strikePrice = "0";
+        }
+        return strikePrice;
+//        double v = Double.parseDouble(strikePrice) / Math.pow(10, getDecimalPlace());
+//        return String.valueOf(v);
+    }
+
+    public String getExchangeTime() {
+        return exchangeTime;
+    }
+
+    public void setExchangeTime(String exchangeTime) {
+        this.exchangeTime = exchangeTime;
+    }
+
+    public void setStrikePrice(String strikePrice) {
+        this.strikePrice = strikePrice;
+    }
+
+    public void setBidVolume5(String bidVolume5) {
+        this.bidVolume5 = bidVolume5;
+    }
+
+    @Override
+    public int getRaisedFlag() {
+        return raisedFlag;
+    }
+
+    @Override
+    public int getUpDown() {
+        return upDown;
+    }
+
+    public void setRaisedFlag(int raisedFlag) {
+        this.raisedFlag = raisedFlag;
+    }
+
+    public String getCommittee() {
+        return committee;
+    }
+
+    public void setCommittee(String committee) {
+        this.committee = committee;
+    }
+
+    /**
+     * 根据实时行情去更新盘面
+     */
+    @Override
+    public void inputQuote(QuoteTik quote) {
+//		if (!quote.getSymbol().equals(this.getSymbol())) {
+//			LogUtils.e("Quote", "input quote error!");
+//			return;
+//		}
+
+        boolean settlementPlanValid = true;
+        if (!settlementPlanValid) {
+            return;
+        }
+
+        if (getLastTime() == null) {
+            setLastTime(quote.getAtTime());
+        }
+
+        // 仅处理比当前行情更新的数据
+        String price = quote.getValue(QuoteTikPart.Last);// fixme 如果是限价下单\或者是撤单触发的行情,不会带最新价
+        if (price == null || !quote.getAtTime().before(getLastTime())) {
+            updateFromTik(quote);
+            updateTime(quote.getAtTime());
+            updateByLast();
+            updateOne();
+        }
+    }
+
+    /**
+     * 更新一些不用计算的字段 无脑直接赋值
+     *
+     * @param tik
+     */
+    private void updateFromTik(QuoteTik tik) {
+        HashMap<Byte, Object> fields = tik.getFields();
+        Iterator<Byte> item = fields.keySet().iterator();
+        String bidQueueInfo = "";
+        String askQueueInfo = "";
+        String ask1 = "0", ask2 = "0", ask3 = "0", ask4 = "0", ask5 = "0";
+        String ask6 = "0", ask7 = "0", ask8 = "0", ask9 = "0", ask10 = "0";
+        String bid1 = "0", bid2 = "0", bid3 = "0", bid4 = "0", bid5 = "0";
+        String bid6 = "0", bid7 = "0", bid8 = "0", bid9 = "0", bid10 = "0";
+        String askVol1 = "0", askVol2 = "0", askVol3 = "0", askVol4 = "0", askVol5 = "0";
+        String askVol6 = "0", askVol7 = "0", askVol8 = "0", askVol9 = "0", askVol10 = "0";
+        String bidVol1 = "0", bidVol2 = "0", bidVol3 = "0", bidVol4 = "0", bidVol5 = "0";
+        String bidVol6 = "0", bidVol7 = "0", bidVol8 = "0", bidVol9 = "0", bidVol10 = "0";
+        while (item.hasNext()) {
+            String value;
+            Byte keyB = item.next();
+            byte key = keyB.byteValue();
+
+            switch (key) {
+                case QuoteTikPart.LastVolume: // 现量,最新一笔的成交量
+                    value = fields.get(keyB).toString();
+                    setLastVolume(value);
+                    break;
+
+                case QuoteTikPart.Ask: // 卖1
+                    ask1 = fields.get(keyB).toString();
+                    setAsk(ask1);
+                    break;
+
+                case QuoteTikPart.Ask2: // 卖2
+                    ask2 = fields.get(keyB).toString();
+                    setAsk2(ask2);
+                    break;
+
+                case QuoteTikPart.Ask3: // 卖3
+                    ask3 = fields.get(keyB).toString();
+                    setAsk3(ask3);
+                    break;
+
+                case QuoteTikPart.Ask4: // 卖4
+                    ask4 = fields.get(keyB).toString();
+                    setAsk4(ask4);
+                    break;
+
+                case QuoteTikPart.Ask5: // 卖5
+                    ask5 = fields.get(keyB).toString();
+                    setAsk5(ask5);
+                    break;
+
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK6: // 卖5
+                    ask6 = fields.get(keyB).toString();
+                    setAsk6(ask6);
+                    break;
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK7: // 卖5
+                    ask7 = fields.get(keyB).toString();
+                    setAsk7(ask7);
+                    break;
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK8: // 卖5
+                    ask8 = fields.get(keyB).toString();
+                    setAsk8(ask8);
+                    break;
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK9: // 卖5
+                    ask9 = fields.get(keyB).toString();
+                    setAsk9(ask9);
+                    break;
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK10: // 卖5
+                    ask10 = fields.get(keyB).toString();
+                    setAsk10(ask10);
+                    break;
+                case QuoteTikPart.AskVolume: // 卖量1
+                    askVol1 = fields.get(keyB).toString();
+                    setAskVolume(askVol1);
+                    break;
+
+                case QuoteTikPart.AskVolume2: // 卖量2
+                    askVol2 = fields.get(keyB).toString();
+                    setAskVolume2(askVol2);
+                    break;
+
+                case QuoteTikPart.AskVolume3: // 卖量3
+                    askVol3 = fields.get(keyB).toString();
+                    setAskVolume3(askVol3);
+                    break;
+
+                case QuoteTikPart.AskVolume4: // 卖量4
+                    askVol4 = fields.get(keyB).toString();
+                    setAskVolume4(askVol4);
+                    break;
+
+                case QuoteTikPart.AskVolume5: // 卖量5
+                    askVol5 = fields.get(keyB).toString();
+                    setAskVolume5(askVol5);
+                    break;
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_VOLUME6: // 卖量5
+                    askVol6 = fields.get(keyB).toString();
+                    setAskVolume6(askVol6);
+                    break;
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_VOLUME7: // 卖量5
+                    askVol7 = fields.get(keyB).toString();
+                    setAskVolume7(askVol7);
+                    break;
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_VOLUME8: // 卖量5
+                    askVol8 = fields.get(keyB).toString();
+                    setAskVolume8(askVol8);
+                    break;
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_VOLUME9: // 卖量5
+                    askVol9 = fields.get(keyB).toString();
+                    setAskVolume9(askVol9);
+                    break;
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_VOLUME10: // 卖量5
+                    askVol10 = fields.get(keyB).toString();
+                    setAskVolume10(askVol10);
+                    break;
+
+                case QuoteTikPart.Bid: // 买1
+                    bid1 = fields.get(keyB).toString();
+                    setBid(bid1);
+                    break;
+
+                case QuoteTikPart.Bid2: // 买2
+                    bid2 = fields.get(keyB).toString();
+                    setBid2(bid2);
+                    break;
+
+                case QuoteTikPart.Bid3: // 买3
+                    bid3 = fields.get(keyB).toString();
+                    setBid3(bid3);
+                    break;
+
+                case QuoteTikPart.Bid4: // 买4
+                    bid4 = fields.get(keyB).toString();
+                    setBid4(bid4);
+                    break;
+
+                case QuoteTikPart.Bid5: // 买5
+                    bid5 = fields.get(keyB).toString();
+                    setBid5(bid5);
+                    break;
+
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID6: // 买5
+                    bid6 = fields.get(keyB).toString();
+                    setBid6(bid6);
+                    break;
+
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID7: // 买5
+                    bid7 = fields.get(keyB).toString();
+                    setBid7(bid7);
+                    break;
+
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID8: // 买5
+                    bid8 = fields.get(keyB).toString();
+                    setBid8(bid8);
+                    break;
+
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID9: // 买5
+                    bid9 = fields.get(keyB).toString();
+                    setBid9(bid9);
+                    break;
+
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID10: // 买5
+                    bid10 = fields.get(keyB).toString();
+                    setBid10(bid10);
+                    break;
+
+                case QuoteTikPart.BidVolume: // 买量1
+                    bidVol1 = fields.get(keyB).toString();
+                    setBidVolume(bidVol1);
+                    break;
+
+                case QuoteTikPart.BidVolume2: // 买量2
+                    bidVol2 = fields.get(keyB).toString();
+                    setBidVolume2(bidVol2);
+                    break;
+
+                case QuoteTikPart.BidVolume3: // 买量3
+                    bidVol3 = fields.get(keyB).toString();
+                    setBidVolume3(bidVol3);
+                    break;
+
+                case QuoteTikPart.BidVolume4: // 买量4
+                    bidVol4 = fields.get(keyB).toString();
+                    setBidVolume4(bidVol4);
+                    break;
+
+                case QuoteTikPart.BidVolume5: // 买量5
+                    bidVol5 = fields.get(keyB).toString();
+                    setBidVolume5(bidVol5);
+                    break;
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_VOLUME6: // 买量5
+                    bidVol6 = fields.get(keyB).toString();
+                    setBidVolume6(bidVol6);
+                    break;
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_VOLUME7: // 买量5
+                    bidVol7 = fields.get(keyB).toString();
+                    setBidVolume7(bidVol7);
+                    break;
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_VOLUME8: // 买量5
+                    bidVol8 = fields.get(keyB).toString();
+                    setBidVolume8(bidVol8);
+                    break;
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_VOLUME9: // 买量5
+                    bidVol9 = fields.get(keyB).toString();
+                    setBidVolume9(bidVol9);
+                    break;
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_VOLUME10: // 买量5
+                    bidVol10 = fields.get(keyB).toString();
+                    setBidVolume10
+                            (bidVol10);
+                    break;
+
+                case QuoteTikPart.Last: // 现价
+                    value = fields.get(keyB).toString();
+                    if (value != null && !value.equals("") && Double.parseDouble(value) > 0) {
+                        setPrice(value);
+                    }
+                    break;
+
+                case QuoteTikPart.TotalTurnover: // 总成交额
+                    value = fields.get(keyB).toString();
+                    setTotalTurnover(value);
+                    break;
+
+                case QuoteTikPart.TotalVolume: // 总成交量
+                    value = fields.get(keyB).toString();
+                    setTotalVolume(value);
+                    break;
+
+                case QuoteTikPart.ChangePercent:
+                    value = fields.get(keyB).toString();
+                    setStrPctChange(value);
+                    break;
+
+                case QuoteTikPart.ChangeFromOpen:
+                    value = fields.get(keyB).toString();
+                    setStrChangeSinceOpen(value);
+                    break;
+
+                case QuoteTikPart.Change:
+                    value = fields.get(keyB).toString();
+                    setStrChange(value);
+                    break;
+                case QuoteTikPart.DecimalPlace: // 小数位
+                    int decimalPlace = 0;
+                    try {
+                        decimalPlace = Integer.parseInt(String.valueOf(fields.get(keyB)));
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                    setDecimalPlace(decimalPlace);
+                    break;
+
+                case QuoteTikPart.BidQueueInfo:// 买委托
+                    bidQueueInfo = (String) fields.get(keyB);
+                    setBidQueueInfo(bidQueueInfo);
+                    break;
+                case QuoteTikPart.AskQueueInfo:// 卖委托
+                    askQueueInfo = (String) fields.get(keyB);
+                    setAskQueueInfo(askQueueInfo);
+                    break;
+                case QuoteTikPart.Inventory: {// 库存量
+                    String inventory = (String) fields.get(keyB);
+                    setInventory(inventory);
+                    break;
+                }
+                case QuoteTikPart.HoldVolume: {// 持仓量
+                    Double holdVolume = (Double) fields.get(keyB);
+                    setHoldVolume(String.valueOf(holdVolume));
+                    break;
+                }
+                case QuoteTikPart.GoodsCode://商品代码
+                    String goodsCode = (String) fields.get(keyB);
+                    setGoodsCode(goodsCode);
+                    break;
+                case QuoteTikPart.Strike: {
+                    String strikePrice = (String) fields.get(keyB);
+                    System.out.println(strikePrice);
+                    setStrikePrice(strikePrice);
+                    break;
+                }
+                case QuoteTikPart.ExchangeTime: {
+                    String time = (String) fields.get(keyB);
+                    setExchangeTime(time);
+                    break;
+                }
+                case QuoteTikPart.CallOptionPremiums: {//认购期权权利金1
+                    String premiums = String.valueOf(fields.get(keyB));
+                    setCallOptionPremiums(premiums);
+                    break;
+                }
+                case QuoteTikPart.CallOptionPremiums2: {//认购期权权利金2
+                    String premiums = String.valueOf(fields.get(keyB));
+                    setCallOptionPremiums2(premiums);
+                    break;
+                }
+                case QuoteTikPart.CallOptionPremiums3: {//认购期权权利金3
+                    String premiums = String.valueOf(fields.get(keyB));
+                    setCallOptionPremiums3(premiums);
+                    break;
+                }
+                case QuoteTikPart.CallOptionPremiums4: {//认购期权权利金4
+                    String premiums = String.valueOf(fields.get(keyB));
+                    setCallOptionPremiums4(premiums);
+                    break;
+                }
+                case QuoteTikPart.CallOptionPremiums5: {//认购期权权利金5
+                    String premiums = String.valueOf(fields.get(keyB));
+                    setCallOptionPremiums5(premiums);
+                    break;
+                }
+                case QuoteTikPart.PutOptionPremiums: {//认沽期权权利金1
+                    String putPreminus = String.valueOf(fields.get(keyB));
+                    setPutOptionPremiums(putPreminus);
+                    break;
+                }
+                case QuoteTikPart.PutOptionPremiums2: {//认沽期权权利金2
+                    String putPreminus = String.valueOf(fields.get(keyB));
+                    setPutOptionPremiums2(putPreminus);
+                    break;
+                }
+                case QuoteTikPart.PutOptionPremiums3: {//认沽期权权利金3
+                    String putPreminus = String.valueOf(fields.get(keyB));
+                    setPutOptionPremiums3(putPreminus);
+                    break;
+                }
+                case QuoteTikPart.PutOptionPremiums4: {//认沽期权权利金4
+                    String putPreminus = String.valueOf(fields.get(keyB));
+                    setPutOptionPremiums4(putPreminus);
+                    break;
+                }
+                case QuoteTikPart.PutOptionPremiums5: {//认沽期权权利金5
+                    String putPreminus = String.valueOf(fields.get(keyB));
+                    setPutOptionPremiums5(putPreminus);
+                    break;
+                }
+                case QuoteTikPart.strAskOrder: {// 卖订单号1
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrAskOrder(order);
+                    break;
+                }
+                case QuoteTikPart.strAskOrder2: {// 卖订单号2
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrAskOrder2(order);
+                    break;
+                }
+                case QuoteTikPart.strAskOrder3: {// 卖订单号3
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrAskOrder3(order);
+                    break;
+                }
+                case QuoteTikPart.strAskOrder4: {// 卖订单号4
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrAskOrder4(order);
+                    break;
+                }
+                case QuoteTikPart.strAskOrder5: {// 卖订单号5
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrAskOrder5(order);
+                    break;
+                }
+                case QuoteTikPart.strBidOrder: {// 买订单号1
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrBidOrder(order);
+                    break;
+                }
+                case QuoteTikPart.strBidOrder2: {// 买订单号2
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrBidOrder2(order);
+                    break;
+                }
+                case QuoteTikPart.strBidOrder3: {// 买订单号3
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrBidOrder3(order);
+                    break;
+                }
+                case QuoteTikPart.strBidOrder4: {// 买订单号4
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrBidOrder4(order);
+                    break;
+                }
+                case QuoteTikPart.strBidOrder5: {// 买订单号5
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrBidOrder5(order);
+                    break;
+                }
+
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER6: {// 买订单号5
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrBidOrder6(order);
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER7: {// 买订单号5
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrBidOrder7(order);
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER8: {// 买订单号5
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrBidOrder8(order);
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER9: {// 买订单号5
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrBidOrder9(order);
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER10: {// 买订单号5
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrBidOrder10(order);
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER6: {// 买订单号5
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrAskOrder6(order);
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER7: {// 买订单号5
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrAskOrder7(order);
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER8: {// 买订单号5
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrAskOrder8(order);
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER9: {// 买订单号5
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrAskOrder9(order);
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER10: {// 买订单号5
+                    String order = String.valueOf(fields.get(keyB));
+                    setStrAskOrder10(order);
+                    break;
+                }
+
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL: {// 买订单量
+                    setBidOrderVolume(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL2: {// 买订单量
+                    setBidOrderVolume2(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL3: {// 买订单量
+                    setBidOrderVolume3(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL4: {// 买订单量
+                    setBidOrderVolume4(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL5: {// 买订单量
+                    setBidOrderVolume5(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL6: {// 买订单量
+                    setBidOrderVolume6(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL7: {// 买订单量
+                    setBidOrderVolume7(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL8: {// 买订单量
+                    setBidOrderVolume8(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL9: {// 买订单量
+                    setBidOrderVolume9(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL10: {// 买订单量
+                    setBidOrderVolume10(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL: {// 买订单量
+                    setAskOrderVolume(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL2: {// 买订单量
+                    setAskOrderVolume2(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL3: {// 买订单量
+                    setAskOrderVolume3(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL4: {// 买订单量
+                    setAskOrderVolume4(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL5: {// 买订单量
+                    setAskOrderVolume5(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL6: {// 买订单量
+                    setAskOrderVolume6(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL7: {// 买订单量
+                    setAskOrderVolume7(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL8: {// 买订单量
+                    setAskOrderVolume8(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL9: {// 买订单量
+                    setAskOrderVolume9(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL10: {// 买订单量
+                    setAskOrderVolume10(fields.get(keyB).toString());
+                    break;
+                }
+                case QuoteTikPart.Highest: {//  如果行情里有这个数据,直接赋值给本地盘面 没有这个数据就不会下发
+                    if (!"".equals(fields.get(keyB).toString()) && Double.parseDouble(fields.get(keyB).toString()) != 0) {
+                        setHighest(fields.get(keyB).toString());
+                    }
+                }
+                    break;
+                case QuoteTikPart.Lowest: {// 如果行情里有这个数据,直接赋值给本地盘面,没有这个数据就不会下发
+                    if (!"".equals(fields.get(keyB).toString()) && Double.parseDouble(fields.get(keyB).toString()) != 0) {
+                        setLowest(fields.get(keyB).toString());
+                    }
+                    break;
+                }
+                case QuoteTikPart.Opened: {
+                    if (!"".equals(fields.get(keyB).toString()) && Double.parseDouble(fields.get(keyB).toString()) != 0) {
+                        setOpened(fields.get(keyB).toString());
+                    }
+                    break;
+                }
+            }
+        }
+        // 买卖五档、买卖委托队列,不数据固定推送范围,jiang.taibai 口述
+//        if ("0".equals(ask1)) {
+//            setAsk(ask1);
+//        }
+//        if ("0".equals(ask2)) {
+//            setAsk2(ask2);
+//        }
+//        if ("0".equals(ask3)) {
+//            setAsk3(ask3);
+//        }
+//        if ("0".equals(ask4)) {
+//            setAsk4(ask4);
+//        }
+//        if ("0".equals(ask5)) {
+//            setAsk5(ask5);
+//        }
+//
+//        if ("0".equals(bid1)) {
+//            setBid(bid1);
+//        }
+//        if ("0".equals(bid2)) {
+//            setBid2(bid2);
+//        }
+//        if ("0".equals(bid3)) {
+//            setBid3(bid3);
+//        }
+//        if ("0".equals(bid4)) {T
+//            setBid4(bid4);
+//        }
+//        if ("0".equals(bid5)) {
+//            setBid5(bid5);
+//        }
+
+//        if ("0".equals(askVol1)) {
+//            setAskVolume(askVol1);
+//        }
+//        if ("0".equals(askVol2)) {
+//            setAskVolume2(askVol2);
+//        }
+//        if ("0".equals(askVol3)) {
+//            setAskVolume3(askVol3);
+//        }
+//        if ("0".equals(askVol4)) {
+//            setAskVolume4(askVol4);
+//        }
+//        if ("0".equals(askVol5)) {
+//            setAskVolume5(askVol5);
+//        }
+//
+//        if ("0".equals(bidVol1)) {
+//            setBidVolume(bidVol1);
+//        }
+//        if ("0".equals(bidVol2)) {
+//            setBidVolume2(bidVol2);
+//        }
+//        if ("0".equals(bidVol3)) {
+//            setBidVolume3(bidVol3);
+//        }
+//        if ("0".equals(bidVol4)) {
+//            setBidVolume4(bidVol4);
+//        }
+//        if ("0".equals(bidVol5)) {
+//            setBidVolume5(bidVol5);
+//        }
+
+
+//        if ("".equals(askQueueInfo)) {
+//            setAskQueueInfo(askQueueInfo);
+//        }
+//        if ("".equals(bidQueueInfo)) {
+//            setBidQueueInfo(bidQueueInfo);
+//        }
+    }
+
+    /**
+     * 更新某些计算字段
+     */
+    private void updateOne() {
+        double totalBuy = 0;
+        double totalSell = 0;
+        // 计算总委买卖量以计算委比
+        if (!getBidVolume().equals("0")) {
+            totalBuy += Double.parseDouble(getBidVolume());
+        }
+        if (!getBidVolume2().equals("0")) {
+            totalBuy += Double.parseDouble(getBidVolume2());
+        }
+        if (!getBidVolume3().equals("0")) {
+            totalBuy += Double.parseDouble(getBidVolume3());
+        }
+        if (!getBidVolume4().equals("0")) {
+            totalBuy += Double.parseDouble(getBidVolume4());
+        }
+        if (!getBidVolume5().equals("0")) {
+            totalBuy += Double.parseDouble(getBidVolume5());
+        }
+
+        if (!getAskVolume().equals("0")) {
+            totalSell += Double.parseDouble(getAskVolume());
+        }
+        if (!getAskVolume2().equals("0")) {
+            totalSell += Double.parseDouble(getAskVolume2());
+        }
+        if (!getAskVolume3().equals("0")) {
+            totalSell += Double.parseDouble(getAskVolume3());
+        }
+        if (!getAskVolume4().equals("0")) {
+            totalSell += Double.parseDouble(getAskVolume4());
+        }
+        if (!getAskVolume5().equals("0")) {
+            totalSell += Double.parseDouble(getAskVolume5());
+        }
+
+        if (totalBuy + totalSell != 0) {
+            committee = ((totalBuy - totalSell) / (totalBuy + totalSell)) * 100 + "";
+        } else {
+            committee = "0";
+        }
+
+        // 计算振幅
+        if (getHighest() != null && !getHighest().isEmpty() &&
+                getLowest() != null && !getLowest().isEmpty() &&
+                getPreClose() != null && !getPreClose().isEmpty()
+                && Double.parseDouble(getPreClose()) > 0) {
+            double highest = Double.parseDouble(getHighest());
+            double lowest = Double.parseDouble(getLowest());
+            double preClose = Double.parseDouble(getPreClose());
+            if (preClose == 0) {
+                setAmplitude("--");
+            } else {
+                setAmplitude(((highest - lowest) * 100) / preClose + "");
+            }
+        } else {
+            setAmplitude("--");
+        }
+
+        double totalVolume = 0;
+        double preHoldVolume = 0;
+        try {
+            totalVolume = Double.parseDouble(this.totalVolume);
+            preHoldVolume = Double.parseDouble(this.preHoldVolume);
+        } catch (Exception ex) {
+
+        }
+        if (preHoldVolume > 0) {
+            this.changeVolumeRange = (totalVolume / preHoldVolume) * 100 + "";
+        } else {
+            this.changeVolumeRange = "0";
+        }
+    }
+
+    /**
+     * 更新一些根据现价变化而变化的字段
+     */
+    private void updateByLast() {
+        if (getPrice().equals("0")) {
+            return;
+        }
+
+        if (this.prePrice == null) {
+            this.prePrice = getPrice();
+        } else {
+            // 更新价格变化方向标志
+            if (Double.parseDouble(getPrice()) != 0) {//// FIXME: 2018/3/2 收到0 ,可以是因为委托单出发了行情
+
+                if (Double.parseDouble(this.prePrice) < Double.parseDouble(getPrice())) {
+                    this.raisedFlag = 1;
+                } else if (Double.parseDouble(this.prePrice) > Double.parseDouble(getPrice())) {
+                    this.raisedFlag = 2;
+                } else {
+                    this.raisedFlag = 0;
+                }
+            }
+            this.prePrice = getPrice();
+        }
+
+        if (getPreClose() != null) {
+            // 更新涨跌标志
+            if (Double.parseDouble(getPrice()) > Double.parseDouble(getPreClose())) {
+                this.upDown = 1;
+            } else if (Double.parseDouble(getPrice()) < Double.parseDouble(getPreClose())) {
+                this.upDown = 2;
+            } else {
+                this.upDown = 0;
+            }
+        }
+
+        /**
+         * 如果交易类型输入tradeTypes里面的,就不更新高低
+         */
+        double price = Double.parseDouble(getPrice());
+        if (canUseQuote()) {
+            if (getOpened() == null || getOpened().isEmpty() || Double.parseDouble(getOpened()) == 0) {
+                setOpened(this.getPrice());
+            }
+
+            if (getHighest() == null || getHighest().isEmpty() || Double.parseDouble(getHighest()) == 0) {
+                setHighest(this.getPrice());
+            }
+            if (getLowest() == null || getLowest().isEmpty() || Double.parseDouble(getLowest()) == 0) {
+                setLowest(this.getPrice());
+            }
+            if (price > 0) {
+                // 仅有限价大于0才更新高低价
+                setHighest(price > Double.parseDouble(getHighest()) ? getPrice() : getHighest());
+                setLowest(price < Double.parseDouble(getLowest()) ? getPrice() : getLowest());
+            }
+        }
+
+        // 计算涨跌和涨幅
+        if (getPrice() != null && !getPrice().isEmpty() && getPreClose() != null && !getPreClose().isEmpty()) {
+            double preClose = Double.parseDouble(getPreClose());// 涨跌幅用昨结计算
+            if (price == 0 || preClose == 0) {
+                setUpDownValue("--");
+                setUpDownRange("--");
+            } else {
+                setUpDownValue(price - preClose + "");
+                setUpDownRange(((price - preClose) * 100) / preClose + "");
+            }
+        }
+    }
+
+    public String getTotalVolume() {
+        if (totalVolume == null || totalVolume.isEmpty() || Double.parseDouble(totalVolume) <= 0) {
+            return "0";
+        }
+        return totalVolume;
+    }
+
+    public void setTotalVolume(String totalVolume) {
+        this.totalVolume = totalVolume;
+    }
+
+    public String getTotalTurnover() {
+        if (totalTurnover == null || totalTurnover.equals("") || totalTurnover.equals("null")) {
+            totalTurnover = "0";
+        }
+        return totalTurnover;
+    }
+
+    public void setTotalTurnover(String totalTurnover) {
+        this.totalTurnover = totalTurnover;
+    }
+
+    public String getTotalBidVolume() {
+        if (totalBidVolume == null || totalBidVolume.equals("") || totalBidVolume.equals("null")) {
+            totalBidVolume = "0";
+        }
+        return totalBidVolume;
+    }
+
+    public void setTotalBidVolume(String totalBidVolume) {
+        this.totalBidVolume = totalBidVolume;
+    }
+
+    public String getTotalAskVolume() {
+        if (totalAskVolume == null || totalAskVolume.equals("") || totalAskVolume.equals("null")) {
+            totalAskVolume = "0";
+        }
+        return totalAskVolume;
+    }
+
+    public void setTotalAskVolume(String totalAskVolume) {
+        this.totalAskVolume = totalAskVolume;
+    }
+
+
+    public void setUpDown(int upDown) {
+        this.upDown = upDown;
+    }
+
+    private void updateTime(Date atTime) {
+        if (getLastTime().before(atTime)) {
+            setLastTime(atTime);
+        }
+
+        if (getOpenTime() == null) {
+            setOpenTime(atTime);
+        }
+    }
+
+    public String getHoldVolume() {
+        if (!isEmpty(holdVolume)) {
+            holdVolume = "0";
+        }
+        return holdVolume;
+    }
+
+    public void setHoldVolume(String holdVolume) {
+        this.holdVolume = holdVolume;
+    }
+
+    public String getLimitHigh() {
+        if (limitHigh == null || limitHigh.equals("") || limitHigh.equals("null")) {
+            limitHigh = "0";
+        }
+        return limitHigh;
+    }
+
+    public void setLimitHigh(String limitHigh) {
+        this.limitHigh = limitHigh;
+    }
+
+    public String getLimitLow() {
+        if (limitLow == null || limitLow.equals("") || limitLow.equals("null")) {
+            limitLow = "0";
+        }
+        return limitLow;
+    }
+
+    public void setLimitLow(String limitLow) {
+        this.limitLow = limitLow;
+    }
+
+    public String getChangeVolumeRange() {
+        if (changeVolumeRange == null) {
+            changeVolumeRange = "0";
+        }
+        return changeVolumeRange;
+    }
+
+    public void setChangeVolumeRange(String changeVolumeRange) {
+        this.changeVolumeRange = changeVolumeRange;
+    }
+
+    public String getPreHoldVolume() {
+        return preHoldVolume;
+    }
+
+    public void setPreHoldVolume(String preHoldVolume) {
+        this.preHoldVolume = preHoldVolume;
+    }
+
+    /**
+     * 将盘面数据直接存储
+     *
+     * @param tik
+     * @return
+     */
+    public static BidQuoteDay toDayQuote(QuoteTik tik) {
+//		if(tik.getAtTime() == null){
+//			return null;
+//		}
+        BidQuoteDay quoteDay = new BidQuoteDay();
+        quoteDay.setStrikePrice(tik.getStickPrice());
+
+        quoteDay.setAsk(tik.getAsk());
+        quoteDay.setAsk2(tik.getValue(QuoteTikPart.Ask2));
+        quoteDay.setAsk3(tik.getValue(QuoteTikPart.Ask3));
+        quoteDay.setAsk4(tik.getValue(QuoteTikPart.Ask4));
+        quoteDay.setAsk5(tik.getValue(QuoteTikPart.Ask5));
+        quoteDay.setAsk6(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK6));
+        quoteDay.setAsk7(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK7));
+        quoteDay.setAsk8(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK8));
+        quoteDay.setAsk9(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK9));
+        quoteDay.setAsk10(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK10));
+        quoteDay.setBid(tik.getBid());
+        quoteDay.setBid2(tik.getValue(QuoteTikPart.Bid2));
+        quoteDay.setBid3(tik.getValue(QuoteTikPart.Bid3));
+        quoteDay.setBid4(tik.getValue(QuoteTikPart.Bid4));
+        quoteDay.setBid5(tik.getValue(QuoteTikPart.Bid5));
+        quoteDay.setBid6(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID6));
+        quoteDay.setBid7(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID7));
+        quoteDay.setBid8(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID8));
+        quoteDay.setBid9(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID9));
+        quoteDay.setBid10(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID10));
+        quoteDay.setAskVolume(tik.getValue(QuoteTikPart.AskVolume));
+        quoteDay.setAskVolume2(tik.getValue(QuoteTikPart.AskVolume2));
+        quoteDay.setAskVolume3(tik.getValue(QuoteTikPart.AskVolume3));
+        quoteDay.setAskVolume4(tik.getValue(QuoteTikPart.AskVolume4));
+        quoteDay.setAskVolume5(tik.getValue(QuoteTikPart.AskVolume5));
+        quoteDay.setAskVolume6(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_VOLUME6));
+        quoteDay.setAskVolume7(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_VOLUME7));
+        quoteDay.setAskVolume8(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_VOLUME8));
+        quoteDay.setAskVolume9(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_VOLUME9));
+        quoteDay.setAskVolume10(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_VOLUME10));
+        quoteDay.setBidVolume(tik.getValue(QuoteTikPart.BidVolume));
+        quoteDay.setBidVolume2(tik.getValue(QuoteTikPart.BidVolume2));
+        quoteDay.setBidVolume3(tik.getValue(QuoteTikPart.BidVolume3));
+        quoteDay.setBidVolume4(tik.getValue(QuoteTikPart.BidVolume4));
+        quoteDay.setBidVolume5(tik.getValue(QuoteTikPart.BidVolume5));
+        quoteDay.setBidVolume6(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_VOLUME6));
+        quoteDay.setBidVolume7(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_VOLUME7));
+        quoteDay.setBidVolume8(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_VOLUME8));
+        quoteDay.setBidVolume9(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_VOLUME9));
+        quoteDay.setBidVolume10(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_VOLUME10));
+
+        quoteDay.setStrAskOrder(tik.getValue(QuoteTikPart.strAskOrder));
+        quoteDay.setStrAskOrder2(tik.getValue(QuoteTikPart.strAskOrder2));
+        quoteDay.setStrAskOrder3(tik.getValue(QuoteTikPart.strAskOrder3));
+        quoteDay.setStrAskOrder4(tik.getValue(QuoteTikPart.strAskOrder4));
+        quoteDay.setStrAskOrder5(tik.getValue(QuoteTikPart.strAskOrder5));
+        quoteDay.setStrAskOrder6(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER6));
+        quoteDay.setStrAskOrder7(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER7));
+        quoteDay.setStrAskOrder8(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER8));
+        quoteDay.setStrAskOrder9(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER9));
+        quoteDay.setStrAskOrder10(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER10));
+
+        quoteDay.setStrBidOrder(tik.getValue(QuoteTikPart.strBidOrder));
+        quoteDay.setStrBidOrder2(tik.getValue(QuoteTikPart.strBidOrder2));
+        quoteDay.setStrBidOrder3(tik.getValue(QuoteTikPart.strBidOrder3));
+        quoteDay.setStrBidOrder4(tik.getValue(QuoteTikPart.strBidOrder4));
+        quoteDay.setStrBidOrder5(tik.getValue(QuoteTikPart.strBidOrder5));
+        quoteDay.setStrBidOrder6(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER6));
+        quoteDay.setStrBidOrder7(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER7));
+        quoteDay.setStrBidOrder8(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER8));
+        quoteDay.setStrBidOrder9(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER9));
+        quoteDay.setStrBidOrder10(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER10));
+
+        quoteDay.setBidOrderVolume(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL));
+        quoteDay.setBidOrderVolume2(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL2));
+        quoteDay.setBidOrderVolume3(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL3));
+        quoteDay.setBidOrderVolume4(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL4));
+        quoteDay.setBidOrderVolume5(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL5));
+        quoteDay.setBidOrderVolume6(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL6));
+        quoteDay.setBidOrderVolume7(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL7));
+        quoteDay.setBidOrderVolume8(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL8));
+        quoteDay.setBidOrderVolume9(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL9));
+        quoteDay.setBidOrderVolume10(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDERVOL10));
+
+        quoteDay.setAskOrderVolume(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL));
+        quoteDay.setAskOrderVolume2(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL2));
+        quoteDay.setAskOrderVolume3(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL3));
+        quoteDay.setAskOrderVolume4(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL4));
+        quoteDay.setAskOrderVolume5(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL5));
+        quoteDay.setAskOrderVolume6(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL6));
+        quoteDay.setAskOrderVolume7(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL7));
+        quoteDay.setAskOrderVolume8(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL8));
+        quoteDay.setAskOrderVolume9(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL9));
+        quoteDay.setAskOrderVolume10(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDERVOL10));
+
+        quoteDay.setNonTotalVolume(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_NONTOTALVOLUME));
+        quoteDay.setNonTotalHolderVolume(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_NONTOTALHOLDERVOLUME));
+        quoteDay.setNonTotallot(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_NONTOTALLOT));
+        quoteDay.setNonTotalTurnover(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_NONTOTALTURNOVER));
+        quoteDay.setMarkPrice(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_MARKPRICE));
+        quoteDay.setFundsRate(tik.getValue(QuoteTikPart.MI_QUOTE_FIELD_CODE_FUNDSRATE));
+
+        quoteDay.setStrChange(tik.getValue(QuoteTikPart.Change));
+        quoteDay.setStrPctChange(tik.getValue(QuoteTikPart.ChangePercent));
+        quoteDay.setStrChangeSinceOpen(tik.getValue(QuoteTikPart.ChangeFromOpen));
+
+        quoteDay.setBidQueueInfo(tik.getValue(QuoteTikPart.BidQueueInfo));
+        quoteDay.setAskQueueInfo(tik.getValue(QuoteTikPart.AskQueueInfo));
+
+        quoteDay.setExchangeTime(tik.getValue(QuoteTikPart.ExchangeTime));
+
+//		quoteDay.setDecimalPlace(Byte.parseByte(tik.getValue(QuoteTikPart.DecimalPlace)));
+        quoteDay.setOpened(tik.getValue((byte) QuoteTikPart.Opened));
+        quoteDay.setHighest(tik.getValue((byte) QuoteTikPart.Highest));
+        quoteDay.setLowest(tik.getValue((byte) QuoteTikPart.Lowest));
+        String last = tik.getValue(QuoteTikPart.Last);
+        if (!(last == null || last.equals("") || last.equals("null") || Double.parseDouble(last) == 0)) {// 新行情,最新价没有变化的话,不会再下发。只要是下发了的,才算。
+            quoteDay.setPrice(tik.getValue(QuoteTikPart.Last));
+        }
+        quoteDay.setPreClose(tik.getValue((byte) QuoteTikPart.PreClose));
+        try {
+            if (tik.getValue(QuoteTikPart.DecimalPlace) == null) {
+                quoteDay.setDecimalPlace(0);
+            } else {
+                quoteDay.setDecimalPlace(Integer.parseInt(tik.getValue(QuoteTikPart.DecimalPlace)));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        quoteDay.setOpenTime(tik.getAtTime());
+        quoteDay.setPreHoldVolume(tik.getValue(QuoteTikPart.PreHoldVolume));
+        quoteDay.setHoldVolume(tik.getValue(QuoteTikPart.HoldVolume));
+        quoteDay.setInventory(tik.getValue(QuoteTikPart.Inventory));
+        quoteDay.setGoodsCode(tik.getGoodsCode());
+        double preSettle = 0;
+        try {
+            preSettle = Double.parseDouble(quoteDay.getPreSettle());
+        } catch (Exception e) {
+            // TODO: handle exception
+        }
+
+//        if (preSettle > 0) {
+//            quoteDay.setPreClose(preSettle + "");
+//        } else {
+            quoteDay.setPreClose(tik.getValue((byte) QuoteTikPart.PreClose));
+//        }
+
+        quoteDay.setLastTime(tik.getAtTime());
+        quoteDay.setTotalTurnover(tik.getValue(QuoteTikPart.TotalTurnover));
+        quoteDay.setTotalVolume(tik.getValue(QuoteTikPart.TotalVolume));
+        quoteDay.setLastVolume(tik.getValue(QuoteTikPart.LastVolume));
+        quoteDay.setSettle(tik.getValue(QuoteTikPart.Settle));
+        quoteDay.setPreSettle(tik.getValue(QuoteTikPart.PreSettle));
+        quoteDay.setStrPctChange(tik.getValue(QuoteTikPart.ChangePercent));
+        quoteDay.setStrChange(tik.getValue(QuoteTikPart.Change));
+        quoteDay.setStrChangeSinceOpen(tik.getValue(QuoteTikPart.ChangeFromOpen));
+        quoteDay.setHoldVolume(tik.getValue(QuoteTikPart.HoldVolume));
+        quoteDay.setLimitLow(tik.getValue(QuoteTikPart.LimitLow));
+        quoteDay.setLimitHigh(tik.getValue(QuoteTikPart.LimitHigh));
+        if (quoteDay.getPreClose() != null && quoteDay.getPrice() != null) {
+            if (Double.parseDouble(quoteDay.getPrePrice()) == 0) {
+                // 没有最新价
+                quoteDay.setUpDown(0);
+            } else {
+                // 跌
+                if (Double.parseDouble(quoteDay.getPreClose()) > Double.parseDouble(quoteDay.getPrice())) {
+                    quoteDay.setUpDown(2);
+                }
+                // 涨
+                if (Double.parseDouble(quoteDay.getPreClose()) < Double.parseDouble(quoteDay.getPrice())) {
+                    quoteDay.setUpDown(1);
+                }
+            }
+        }
+
+        double price = Double.parseDouble(quoteDay.getPrice());
+        if (quoteDay.getPrice() != null && !quoteDay.getPrice().isEmpty() && quoteDay.getPreClose() != null && !quoteDay.getPreClose().isEmpty()) {
+            double preClose = Double.parseDouble(quoteDay.getPreClose());// 涨跌幅用昨结计算
+            if (price == 0 || preClose == 0) {
+                quoteDay.setUpDownValue("--");
+                quoteDay.setUpDownRange("--");
+            } else {
+                quoteDay.setUpDownValue(price - preClose + "");
+                quoteDay.setUpDownRange(((price - preClose) * 100) / preClose + "");
+            }
+        }
+
+        // 计算振幅
+        if (quoteDay.getHighest() != null && !quoteDay.getHighest().isEmpty() &&
+                quoteDay.getLowest() != null && !quoteDay.getLowest().isEmpty() &&
+                quoteDay.getPreClose() != null && !quoteDay.getPreClose().isEmpty()
+                && Double.parseDouble(quoteDay.getPreClose()) > 0) {
+            double highest = Double.parseDouble(quoteDay.getHighest());
+            double lowest = Double.parseDouble(quoteDay.getLowest());
+            double preClose = Double.parseDouble(quoteDay.getPreClose());
+            if (preClose == 0) {
+                quoteDay.setAmplitude("--");
+            } else {
+                quoteDay.setAmplitude(((highest - lowest) * 100) / preClose + "");
+            }
+        } else {
+            quoteDay.setAmplitude("--");
+        }
+
+        // 计算委比
+        quoteDay.updateOne();
+        return quoteDay;
+    }
+
+    /**
+     * 合并盘面
+     */
+    @Override
+    public void inputDayQuote(QuoteTik tik) {
+        BidQuoteDay quoteDay = toDayQuote(tik);
+
+        if (quoteDay.getLastTime() == null) {
+            // 如果盘面时间为空,一般为刚结算,未开市那段时间,这时候,只有涨跌停昨收,昨结等有值
+            setLimitHigh(quoteDay.getLimitHigh());
+            setLimitLow(quoteDay.getLimitLow());
+            setSettle(quoteDay.getSettle());
+            setPreSettle(quoteDay.getPreSettle());
+            setStrPctChange(quoteDay.getStrPctChange());
+            setPreHoldVolume(quoteDay.getPreHoldVolume());
+            setChangeVolumeRange(quoteDay.getChangeVolumeRange());
+            double preSettle = 0;
+            try {
+                preSettle = Double.parseDouble(quoteDay.getPreSettle());
+            } catch (Exception e) {
+                // TODO: handle exception
+            }
+
+//            if (preSettle > 0) {
+//                setPreClose(quoteDay.getPreSettle());
+//            } else {
+                setPreClose(quoteDay.getPreClose());
+//            }
+            return;
+        }
+
+        double price = Double.parseDouble(getPrice());
+        if (quoteDay.getLastTime() != null && getLastTime() != null && quoteDay.getLastTime().before(getLastTime())) {
+            // 如果请求回来的盘面时间,比本地的实时行情时间还早,赋值以下几个字段然后返回
+            if (quoteDay.getOpened() != null) {
+                setOpened(quoteDay.getOpened());
+            }
+
+            if (quoteDay.getHighest() != null) {
+                double preHighest = Double.parseDouble(quoteDay.getHighest());
+                double cruHighest = Double.parseDouble(getHighest());
+                setHighest((cruHighest > preHighest ? cruHighest : preHighest) + "");
+            }
+            if (quoteDay.getLowest() != null) {
+                double preLowest = Double.parseDouble(quoteDay.getLowest());
+                double cruLowest = Double.parseDouble(quoteDay.getLowest());
+                setLowest((cruLowest < preLowest ? cruLowest : preLowest) + "");
+            }
+
+            if (quoteDay.getOpenTime() != null) {
+                setOpenTime(quoteDay.getOpenTime());
+            }
+            setPreSettle(quoteDay.getPreSettle());
+            setStrPctChange(quoteDay.getStrPctChange());
+            double preSettle = 0;
+            try {
+                preSettle = Double.parseDouble(quoteDay.getPreSettle());
+            } catch (Exception e) {
+                // TODO: handle exception
+            }
+            // 有可能在这里才得到昨持仓,所以要计算一次换手率
+            setPreHoldVolume(quoteDay.getPreHoldVolume());
+            double totalVolume = 0;
+            double preHoldVolume = 0;
+            try {
+                totalVolume = Double.parseDouble(this.totalVolume);
+                preHoldVolume = Double.parseDouble(this.preHoldVolume);
+            } catch (Exception ex) {
+
+            }
+            if (preHoldVolume > 0) {
+                this.changeVolumeRange = (totalVolume / preHoldVolume) * 100 + "";
+            } else {
+                this.changeVolumeRange = "0";
+            }
+
+//            if (preSettle == 0) {
+//                setPreClose(quoteDay.getPreSettle());
+//            } else {
+                setPreClose(quoteDay.getPreClose());
+//            }
+
+            setSettle(quoteDay.getSettle());
+
+            // 计算涨跌和涨幅  要在昨收赋值后做
+            if (getPrice() != null && !getPrice().isEmpty() && getPreClose() != null && !getPreClose().isEmpty()) {
+                double preClose = Double.parseDouble(getPreClose()); // 涨跌幅用昨结计算
+                if (price == 0 || preClose == 0) {
+                    setUpDownValue("--");
+                    setUpDownRange("--");
+                } else {
+                    setUpDownValue(price - preClose + "");
+                    setUpDownRange(((price - preClose) * 100) / preClose + "");
+                }
+            }
+
+            // 计算振幅
+            if (getHighest() != null && !getHighest().isEmpty() &&
+                    getLowest() != null && !getLowest().isEmpty() &&
+                    getPreClose() != null && !getPreClose().isEmpty()) {
+                double highest = Double.parseDouble(getHighest());
+                double lowest = Double.parseDouble(getLowest());
+                double preClose = Double.parseDouble(getPreClose());
+                if (preClose == 0) {
+                    setAmplitude("--");
+                } else {
+                    setAmplitude(((highest - lowest) * 100) / preClose + "");
+                }
+            } else {
+                setAmplitude("--");
+            }
+            return;
+        }
+
+        if (quoteDay.getOpened() != null) {
+            setOpened(quoteDay.getOpened());
+        }
+
+        if (quoteDay.getOpenTime() != null) {
+            setOpenTime(quoteDay.getOpenTime());
+        }
+        if (quoteDay.getAsk() != null) {
+            setAsk(quoteDay.getAsk());
+        }
+        if (quoteDay.getAsk2() != null) {
+            setAsk2(quoteDay.getAsk2());
+        }
+        if (quoteDay.getAsk3() != null) {
+            setAsk3(quoteDay.getAsk3());
+        }
+        if (quoteDay.getBidQueueInfo() != null) {
+            setBidQueueInfo(quoteDay.getBidQueueInfo());
+        }
+        if (quoteDay.getAskQueueInfo() != null) {
+            setAskQueueInfo(quoteDay.getAskQueueInfo());
+        }
+//		quoteDay.setBidQueueInfo(tik.getValue(QuoteTikPart.BidQueueInfo));
+//		quoteDay.setAskQueueInfo(tik.getValue(QuoteTikPart.AskQueueInfo));
+        if (quoteDay.getAsk4() != null) {
+            setAsk4(quoteDay.getAsk4());
+        }
+        if (quoteDay.getAsk5() != null) {
+            setAsk5(quoteDay.getAsk5());
+        }
+
+        if (quoteDay.getAsk6() != null) {
+            setAsk6(quoteDay.getAsk6());
+        }
+
+        if (quoteDay.getAsk7() != null) {
+            setAsk7(quoteDay.getAsk7());
+        }
+
+        if (quoteDay.getAsk8() != null) {
+            setAsk8(quoteDay.getAsk8());
+        }
+
+        if (quoteDay.getAsk9() != null) {
+            setAsk9(quoteDay.getAsk9());
+        }
+        if (quoteDay.getAsk10() != null) {
+            setAsk10(quoteDay.getAsk10());
+        }
+        if (quoteDay.getAskVolume() != null) {
+            setAskVolume(quoteDay.getAskVolume());
+        }
+        if (quoteDay.getAskVolume2() != null) {
+            setAskVolume2(quoteDay.getAskVolume2());
+        }
+        if (quoteDay.getAskVolume3() != null) {
+            setAskVolume3(quoteDay.getAskVolume3());
+        }
+        if (quoteDay.getAskVolume4() != null) {
+            setAskVolume4(quoteDay.getAskVolume4());
+        }
+        if (quoteDay.getAskVolume5() != null) {
+            setAskVolume5(quoteDay.getAskVolume5());
+        }
+        if (quoteDay.getAskVolume6() != null) {
+            setAskVolume6(quoteDay.getAskVolume6());
+        }
+        if (quoteDay.getAskVolume7() != null) {
+            setAskVolume7(quoteDay.getAskVolume7());
+        }
+        if (quoteDay.getAskVolume8() != null) {
+            setAskVolume8(quoteDay.getAskVolume8());
+        }
+        if (quoteDay.getAskVolume9() != null) {
+            setAskVolume9(quoteDay.getAskVolume9());
+        }
+        if (quoteDay.getAskVolume10() != null) {
+            setAskVolume10(quoteDay.getAskVolume10());
+        }
+        if (quoteDay.getBid() != null) {
+            setBid(quoteDay.getBid());
+        }
+        if (quoteDay.getBid2() != null) {
+            setBid2(quoteDay.getBid2());
+        }
+        if (quoteDay.getBid3() != null) {
+            setBid3(quoteDay.getBid3());
+        }
+        if (quoteDay.getBid4() != null) {
+            setBid4(quoteDay.getBid4());
+        }
+        if (quoteDay.getBid5() != null) {
+            setBid5(quoteDay.getBid5());
+        }
+        if (quoteDay.getBid6() != null) {
+            setBid6(quoteDay.getBid6());
+        }
+        if (quoteDay.getBid7() != null) {
+            setBid7(quoteDay.getBid7());
+        }
+        if (quoteDay.getBid8() != null) {
+            setBid8(quoteDay.getBid8());
+        }
+        if (quoteDay.getBid9() != null) {
+            setBid9(quoteDay.getBid9());
+        }
+        if (quoteDay.getBid10() != null) {
+            setBid10(quoteDay.getBid10());
+        }
+        if (quoteDay.getBidVolume() != null) {
+            setBidVolume(quoteDay.getBidVolume());
+        }
+        if (quoteDay.getBidVolume2() != null) {
+            setBidVolume2(quoteDay.getBidVolume2());
+        }
+        if (quoteDay.getBidVolume3() != null) {
+            setBidVolume3(quoteDay.getBidVolume3());
+        }
+        if (quoteDay.getBidVolume4() != null) {
+            setBidVolume4(quoteDay.getBidVolume4());
+        }
+        if (quoteDay.getBidVolume5() != null) {
+            setBidVolume5(quoteDay.getBidVolume5());
+        }
+        if (quoteDay.getBidVolume6() != null) {
+            setBidVolume6(quoteDay.getBidVolume6());
+        }
+        if (quoteDay.getBidVolume7() != null) {
+            setBidVolume7(quoteDay.getBidVolume7());
+        }
+        if (quoteDay.getBidVolume8() != null) {
+            setBidVolume8(quoteDay.getBidVolume8());
+        }
+        if (quoteDay.getBidVolume9() != null) {
+            setBidVolume9(quoteDay.getBidVolume9());
+        }
+        if (quoteDay.getBidVolume10() != null) {
+            setBidVolume10(quoteDay.getBidVolume10());
+        }
+        if (quoteDay.getOpened() != null) {
+            setOpened(quoteDay.getOpened());
+        }
+        if (quoteDay.getHighest() != null) {
+            double preHighest = Double.parseDouble(quoteDay.getHighest());
+            double cruHighest = Double.parseDouble(getHighest());
+            setHighest((cruHighest > preHighest ? cruHighest : preHighest) + "");
+        }
+        if (quoteDay.getLowest() != null) {
+            double preLowest = Double.parseDouble(quoteDay.getLowest());
+            double cruLowest = Double.parseDouble(quoteDay.getLowest());
+            setLowest((cruLowest < preLowest ? cruLowest : preLowest) + "");
+        }
+        if (quoteDay.getPrice() != null && Double.parseDouble(quoteDay.getPrice()) != 0) {
+            setPrice(quoteDay.getPrice());
+        }
+
+        if (quoteDay.getLastVolume() != null && Double.parseDouble(quoteDay.getLastVolume()) != 0) {
+            setLastVolume(quoteDay.getLastVolume());
+        }
+
+        if (quoteDay.getLastTime() != null) {
+            if (getLastTime() == null || quoteDay.getLastTime().after(getLastTime())) {
+                setLastTime(quoteDay.getLastTime());
+            }
+        }
+        setPreSettle(quoteDay.getPreSettle());
+        setStrPctChange(quoteDay.getStrPctChange());
+        double preSettle = 0;
+        try {
+            preSettle = Double.parseDouble(quoteDay.getPreSettle());
+        } catch (Exception e) {
+            // TODO: handle exception
+        }
+
+//        if (preSettle > 0) {
+//            setPreClose(quoteDay.getPreSettle());
+//        } else {
+            setPreClose(quoteDay.getPreClose());
+//        }
+
+        setSettle(quoteDay.getSettle());
+
+        if (quoteDay.getTotalVolume() != null) {
+            setTotalVolume(quoteDay.getTotalVolume());
+        }
+
+        if (quoteDay.getTotalTurnover() != null) {
+            setTotalTurnover(quoteDay.getTotalTurnover());
+        }
+
+        if (quoteDay.getTotalAskVolume() != null) {
+            setTotalAskVolume(quoteDay.getTotalAskVolume());
+        }
+
+        if (quoteDay.getTotalBidVolume() != null) {
+            setTotalBidVolume(quoteDay.getTotalBidVolume());
+        }
+
+        if (!quoteDay.getLimitHigh().equals("0")) {
+            setLimitHigh(limitHigh);
+        }
+
+        if (!quoteDay.getLimitLow().equals("0")) {
+            setLimitLow(limitLow);
+        }
+
+        if (quoteDay.getPreHoldVolume() != null) {
+            setPreHoldVolume(quoteDay.getPreHoldVolume());
+        }
+
+        setChangeVolumeRange(quoteDay.getChangeVolumeRange());
+
+        // 计算涨跌和涨幅
+        if (getPrice() != null && !getPrice().isEmpty() && getPreClose() != null && !getPreClose().isEmpty()) {
+            double preClose = Double.parseDouble(getPreClose());// 涨跌幅用昨结计算
+            if (price == 0 || preClose == 0) {
+                setUpDownValue("--");
+                setUpDownRange("--");
+            } else {
+                setUpDownValue(price - preClose + "");
+                setUpDownRange(((price - preClose) * 100) / preClose + "");
+            }
+        }
+
+        updateOne();
+    }
+
+    public String getCallOptionPremiums() {
+        if (callOptionPremiums == null || callOptionPremiums.equals("") || callOptionPremiums.equals("null")) {
+            callOptionPremiums = "0";
+        }
+        return callOptionPremiums;
+    }
+
+    public void setCallOptionPremiums(String callOptionPremiums) {
+        this.callOptionPremiums = callOptionPremiums;
+    }
+
+    public String getCallOptionPremiums2() {
+        if (callOptionPremiums2 == null || callOptionPremiums2.equals("") || callOptionPremiums2.equals("null")) {
+            callOptionPremiums2 = "0";
+        }
+        return callOptionPremiums2;
+    }
+
+    public void setCallOptionPremiums2(String callOptionPremiums2) {
+        this.callOptionPremiums2 = callOptionPremiums2;
+    }
+
+    public String getCallOptionPremiums3() {
+        if (callOptionPremiums3 == null || callOptionPremiums3.equals("") || callOptionPremiums3.equals("null")) {
+            callOptionPremiums3 = "0";
+        }
+        return callOptionPremiums3;
+    }
+
+    public void setCallOptionPremiums3(String callOptionPremiums3) {
+        this.callOptionPremiums3 = callOptionPremiums3;
+    }
+
+    public String getCallOptionPremiums4() {
+        if (callOptionPremiums4 == null || callOptionPremiums4.equals("") || callOptionPremiums4.equals("null")) {
+            callOptionPremiums4 = "0";
+        }
+        return callOptionPremiums4;
+    }
+
+    public void setCallOptionPremiums4(String callOptionPremiums4) {
+        this.callOptionPremiums4 = callOptionPremiums4;
+    }
+
+    public String getCallOptionPremiums5() {
+        if (callOptionPremiums5 == null || callOptionPremiums5.equals("") || callOptionPremiums5.equals("null")) {
+            callOptionPremiums5 = "0";
+        }
+        return callOptionPremiums5;
+    }
+
+    public void setCallOptionPremiums5(String callOptionPremiums5) {
+        this.callOptionPremiums5 = callOptionPremiums5;
+    }
+
+    public String getPutOptionPremiums() {
+        if (putOptionPremiums == null || putOptionPremiums.equals("") || putOptionPremiums.equals("null")) {
+            putOptionPremiums = "0";
+        }
+        return putOptionPremiums;
+    }
+
+    public void setPutOptionPremiums(String putOptionPremiums) {
+        this.putOptionPremiums = putOptionPremiums;
+    }
+
+    public String getPutOptionPremiums2() {
+        if (putOptionPremiums2 == null || putOptionPremiums2.equals("") || putOptionPremiums2.equals("null")) {
+            putOptionPremiums2 = "0";
+        }
+        return putOptionPremiums2;
+    }
+
+    public void setPutOptionPremiums2(String putOptionPremiums2) {
+        this.putOptionPremiums2 = putOptionPremiums2;
+    }
+
+    public String getPutOptionPremiums3() {
+        if (putOptionPremiums3 == null || putOptionPremiums3.equals("") || putOptionPremiums3.equals("null")) {
+            putOptionPremiums3 = "0";
+        }
+        return putOptionPremiums3;
+    }
+
+    public void setPutOptionPremiums3(String putOptionPremiums3) {
+        this.putOptionPremiums3 = putOptionPremiums3;
+    }
+
+    public String getPutOptionPremiums4() {
+        if (putOptionPremiums4 == null || putOptionPremiums4.equals("") || putOptionPremiums4.equals("null")) {
+            putOptionPremiums4 = "0";
+        }
+        return putOptionPremiums4;
+    }
+
+    public void setPutOptionPremiums4(String putOptionPremiums4) {
+        this.putOptionPremiums4 = putOptionPremiums4;
+    }
+
+    public String getPutOptionPremiums5() {
+        if (putOptionPremiums5 == null || putOptionPremiums5.equals("") || putOptionPremiums5.equals("null")) {
+            putOptionPremiums5 = "0";
+        }
+        return putOptionPremiums5;
+    }
+
+    public void setPutOptionPremiums5(String putOptionPremiums5) {
+        this.putOptionPremiums5 = putOptionPremiums5;
+    }
+
+    public String getStrBidOrder() {
+        return strBidOrder;
+    }
+
+    public void setStrBidOrder(String strBidOrder) {
+        this.strBidOrder = strBidOrder;
+    }
+
+    public String getStrBidOrder2() {
+        return strBidOrder2;
+    }
+
+    public void setStrBidOrder2(String strBidOrder2) {
+        this.strBidOrder2 = strBidOrder2;
+    }
+
+    public String getStrBidOrder3() {
+        return strBidOrder3;
+    }
+
+    public void setStrBidOrder3(String strBidOrder3) {
+        this.strBidOrder3 = strBidOrder3;
+    }
+
+    public String getStrBidOrder4() {
+        return strBidOrder4;
+    }
+
+    public void setStrBidOrder4(String strBidOrder4) {
+        this.strBidOrder4 = strBidOrder4;
+    }
+
+    public String getStrBidOrder5() {
+        return strBidOrder5;
+    }
+
+    public void setStrBidOrder5(String strBidOrder5) {
+        this.strBidOrder5 = strBidOrder5;
+    }
+
+    public String getStrAskOrder() {
+        return strAskOrder;
+    }
+
+    public void setStrAskOrder(String strAskOrder) {
+        this.strAskOrder = strAskOrder;
+    }
+
+    public String getStrAskOrder2() {
+        return strAskOrder2;
+    }
+
+    public void setStrAskOrder2(String strAskOrder2) {
+        this.strAskOrder2 = strAskOrder2;
+    }
+
+    public String getStrAskOrder3() {
+        return strAskOrder3;
+    }
+
+    public void setStrAskOrder3(String strAskOrder3) {
+        this.strAskOrder3 = strAskOrder3;
+    }
+
+    public String getStrAskOrder4() {
+        return strAskOrder4;
+    }
+
+    public void setStrAskOrder4(String strAskOrder4) {
+        this.strAskOrder4 = strAskOrder4;
+    }
+
+    public String getStrAskOrder5() {
+        return strAskOrder5;
+    }
+
+    public void setStrAskOrder5(String strAskOrder5) {
+        this.strAskOrder5 = strAskOrder5;
+    }
+
+
+    public String getAsk6() {
+        if (!isEmpty(ask6)) {
+            ask6 = "0";
+        }
+        return ask6;
+    }
+
+    public void setAsk6(String ask6) {
+        this.ask6 = ask6;
+    }
+
+    public String getAsk7() {
+        if (!isEmpty(ask7)) {
+            ask7 = "0";
+        }
+        return ask7;
+    }
+
+    public void setAsk7(String ask7) {
+        this.ask7 = ask7;
+    }
+
+    public String getAsk8() {
+        if (!isEmpty(ask8)) {
+            ask8 = "0";
+        }
+        return ask8;
+    }
+
+    public void setAsk8(String ask8) {
+        this.ask8 = ask8;
+    }
+
+    public String getAsk9() {
+        if (!isEmpty(ask9)) {
+            ask9 = "0";
+        }
+        return ask9;
+    }
+
+    public void setAsk9(String ask9) {
+        this.ask9 = ask9;
+    }
+
+    public String getAsk10() {
+        if (!isEmpty(ask10)) {
+            ask10 = "0";
+        }
+        return ask10;
+    }
+
+    public void setAsk10(String ask10) {
+        this.ask10 = ask10;
+    }
+
+    public String getAskVolume6() {
+        if (!isEmpty(askVolume6)) {
+            askVolume6 = "0";
+        }
+        return askVolume6;
+    }
+
+    public void setAskVolume6(String askVolume6) {
+        this.askVolume6 = askVolume6;
+    }
+
+    public String getAskVolume7() {
+        if (!isEmpty(askVolume7)) {
+            askVolume7 = "0";
+        }
+        return askVolume7;
+    }
+
+    public void setAskVolume7(String askVolume7) {
+        this.askVolume7 = askVolume7;
+    }
+
+    public String getAskVolume8() {
+        if (!isEmpty(askVolume8)) {
+            askVolume8 = "0";
+        }
+        return askVolume8;
+    }
+
+    public void setAskVolume8(String askVolume8) {
+        this.askVolume8 = askVolume8;
+    }
+
+    public String getAskVolume9() {
+        if (!isEmpty(askVolume9)) {
+            askVolume9 = "0";
+        }
+        return askVolume9;
+    }
+
+    public void setAskVolume9(String askVolume9) {
+        this.askVolume9 = askVolume9;
+    }
+
+    public String getAskVolume10() {
+        if (!isEmpty(askVolume10)) {
+            askVolume10 = "0";
+        }
+        return askVolume10;
+    }
+
+    public void setAskVolume10(String askVolume10) {
+        this.askVolume10 = askVolume10;
+    }
+
+    public String getBid6() {
+        if (!isEmpty(bid6)) {
+            bid6 = "0";
+        }
+        return bid6;
+    }
+
+    public void setBid6(String bid6) {
+        this.bid6 = bid6;
+    }
+
+    public String getBid7() {
+        if (!isEmpty(bid7)) {
+            bid7 = "0";
+        }
+        return bid7;
+    }
+
+    public void setBid7(String bid7) {
+        this.bid7 = bid7;
+    }
+
+    public String getBid8() {
+        if (!isEmpty(bid8)) {
+            bid8 = "0";
+        }
+        return bid8;
+    }
+
+    public void setBid8(String bid8) {
+        this.bid8 = bid8;
+    }
+
+    public String getBid9() {
+        if (!isEmpty(bid9)) {
+            bid9 = "0";
+        }
+        return bid9;
+    }
+
+    public void setBid9(String bid9) {
+        this.bid9 = bid9;
+    }
+
+    public String getBid10() {
+        if (!isEmpty(bid10)) {
+            bid10 = "0";
+        }
+        return bid10;
+    }
+
+    public void setBid10(String bid10) {
+        this.bid10 = bid10;
+    }
+
+    public String getBidVolume6() {
+        if (!isEmpty(bidVolume6)) {
+            bidVolume6 = "0";
+        }
+        return bidVolume6;
+    }
+
+    public void setBidVolume6(String bidVolume6) {
+        this.bidVolume6 = bidVolume6;
+    }
+
+    public String getBidVolume7() {
+        if (!isEmpty(bidVolume7)) {
+            bidVolume7 = "0";
+        }
+        return bidVolume7;
+    }
+
+    public void setBidVolume7(String bidVolume7) {
+        this.bidVolume7 = bidVolume7;
+    }
+
+    public String getBidVolume8() {
+        if (!isEmpty(bidVolume8)) {
+            bidVolume8 = "0";
+        }
+        return bidVolume8;
+    }
+
+    public void setBidVolume8(String bidVolume8) {
+        this.bidVolume8 = bidVolume8;
+    }
+
+    public String getBidVolume9() {
+        if (!isEmpty(bidVolume9)) {
+            bidVolume9 = "0";
+        }
+        return bidVolume9;
+    }
+
+    public void setBidVolume9(String bidVolume9) {
+        this.bidVolume9 = bidVolume9;
+    }
+
+    public String getBidVolume10() {
+        if (!isEmpty(bidVolume10)) {
+            bidVolume10 = "0";
+        }
+        return bidVolume10;
+    }
+
+    public void setBidVolume10(String bidVolume10) {
+        this.bidVolume10 = bidVolume10;
+    }
+
+    public String getBidOrderVolume() {
+        if (!isEmpty(bidOrderVolume)) {
+            bidOrderVolume = "0";
+        }
+        return bidOrderVolume;
+    }
+
+    public void setBidOrderVolume(String bidOrderVolume) {
+        this.bidOrderVolume = bidOrderVolume;
+    }
+
+    public String getBidOrderVolume2() {
+        if (!isEmpty(bidOrderVolume2)) {
+            bidOrderVolume2 = "0";
+        }
+        return bidOrderVolume2;
+    }
+
+    public void setBidOrderVolume2(String bidOrderVolume2) {
+        this.bidOrderVolume2 = bidOrderVolume2;
+    }
+
+    public String getBidOrderVolume3() {
+        if (!isEmpty(bidOrderVolume3)) {
+            bidOrderVolume3 = "0";
+        }
+        return bidOrderVolume3;
+    }
+
+    public void setBidOrderVolume3(String bidOrderVolume3) {
+        this.bidOrderVolume3 = bidOrderVolume3;
+    }
+
+    public String getBidOrderVolume4() {
+        if (!isEmpty(bidOrderVolume4)) {
+            bidOrderVolume4 = "0";
+        }
+        return bidOrderVolume4;
+    }
+
+    public void setBidOrderVolume4(String bidOrderVolume4) {
+        this.bidOrderVolume4 = bidOrderVolume4;
+    }
+
+    public String getBidOrderVolume5() {
+        if (!isEmpty(bidOrderVolume5)) {
+            bidOrderVolume5 = "0";
+        }
+        return bidOrderVolume5;
+    }
+
+    public void setBidOrderVolume5(String bidOrderVolume5) {
+        this.bidOrderVolume5 = bidOrderVolume5;
+    }
+
+    public String getBidOrderVolume6() {
+        if (!isEmpty(bidOrderVolume6)) {
+            bidOrderVolume6 = "0";
+        }
+        return bidOrderVolume6;
+    }
+
+    public void setBidOrderVolume6(String bidOrderVolume6) {
+        this.bidOrderVolume6 = bidOrderVolume6;
+    }
+
+    public String getBidOrderVolume7() {
+        if (!isEmpty(bidOrderVolume7)) {
+            bidOrderVolume7 = "0";
+        }
+        return bidOrderVolume7;
+    }
+
+    public void setBidOrderVolume7(String bidOrderVolume7) {
+        this.bidOrderVolume7 = bidOrderVolume7;
+    }
+
+    public String getBidOrderVolume8() {
+        if (!isEmpty(bidOrderVolume8)) {
+            bidOrderVolume8 = "0";
+        }
+        return bidOrderVolume8;
+    }
+
+    public void setBidOrderVolume8(String bidOrderVolume8) {
+        this.bidOrderVolume8 = bidOrderVolume8;
+    }
+
+    public String getBidOrderVolume9() {
+        if (!isEmpty(bidOrderVolume9)) {
+            bidOrderVolume9 = "0";
+        }
+        return bidOrderVolume9;
+    }
+
+    public void setBidOrderVolume9(String bidOrderVolume9) {
+        this.bidOrderVolume9 = bidOrderVolume9;
+    }
+
+    public String getBidOrderVolume10() {
+        if (!isEmpty(bidOrderVolume10)) {
+            bidOrderVolume10 = "0";
+        }
+        return bidOrderVolume10;
+    }
+
+    public void setBidOrderVolume10(String bidOrderVolume10) {
+        this.bidOrderVolume10 = bidOrderVolume10;
+    }
+
+    public String getAskOrderVolume() {
+        if (!isEmpty(askOrderVolume)) {
+            askOrderVolume = "0";
+        }
+        return askOrderVolume;
+    }
+
+    public void setAskOrderVolume(String askOrderVolume) {
+        this.askOrderVolume = askOrderVolume;
+    }
+
+    public String getAskOrderVolume2() {
+        if (!isEmpty(askOrderVolume2)) {
+            askOrderVolume2 = "0";
+        }
+        return askOrderVolume2;
+    }
+
+    public void setAskOrderVolume2(String askOrderVolume2) {
+        this.askOrderVolume2 = askOrderVolume2;
+    }
+
+    public String getAskOrderVolume3() {
+        if (!isEmpty(askOrderVolume3)) {
+            askOrderVolume3 = "0";
+        }
+        return askOrderVolume3;
+    }
+
+    public void setAskOrderVolume3(String askOrderVolume3) {
+        this.askOrderVolume3 = askOrderVolume3;
+    }
+
+    public String getAskOrderVolume4() {
+        if (!isEmpty(askOrderVolume4)) {
+            askOrderVolume4 = "0";
+        }
+        return askOrderVolume4;
+    }
+
+    public void setAskOrderVolume4(String askOrderVolume4) {
+        this.askOrderVolume4 = askOrderVolume4;
+    }
+
+    public String getAskOrderVolume5() {
+        if (!isEmpty(askOrderVolume5)) {
+            askOrderVolume5 = "0";
+        }
+        return askOrderVolume5;
+    }
+
+    public void setAskOrderVolume5(String askOrderVolume5) {
+        this.askOrderVolume5 = askOrderVolume5;
+    }
+
+    public String getAskOrderVolume6() {
+        if (!isEmpty(askOrderVolume6)) {
+            askOrderVolume6 = "0";
+        }
+        return askOrderVolume6;
+    }
+
+    public void setAskOrderVolume6(String askOrderVolume6) {
+        this.askOrderVolume6 = askOrderVolume6;
+    }
+
+    public String getAskOrderVolume7() {
+        if (!isEmpty(askOrderVolume7)) {
+            askOrderVolume7 = "0";
+        }
+        return askOrderVolume7;
+    }
+
+    public void setAskOrderVolume7(String askOrderVolume7) {
+        this.askOrderVolume7 = askOrderVolume7;
+    }
+
+    public String getAskOrderVolume8() {
+        if (!isEmpty(askOrderVolume8)) {
+            askOrderVolume8 = "0";
+        }
+        return askOrderVolume8;
+    }
+
+    public void setAskOrderVolume8(String askOrderVolume8) {
+        this.askOrderVolume8 = askOrderVolume8;
+    }
+
+    public String getAskOrderVolume9() {
+        if (!isEmpty(askOrderVolume9)) {
+            askOrderVolume9 = "0";
+        }
+        return askOrderVolume9;
+    }
+
+    public void setAskOrderVolume9(String askOrderVolume9) {
+        this.askOrderVolume9 = askOrderVolume9;
+    }
+
+    public String getAskOrderVolume10() {
+        if (!isEmpty(askOrderVolume10)) {
+            askOrderVolume10 = "0";
+        }
+        return askOrderVolume10;
+    }
+
+    public void setAskOrderVolume10(String askOrderVolume10) {
+        this.askOrderVolume10 = askOrderVolume10;
+    }
+
+    public String getNonTotalVolume() {
+        return nonTotalVolume;
+    }
+
+    public void setNonTotalVolume(String nonTotalVolume) {
+        this.nonTotalVolume = nonTotalVolume;
+    }
+
+    public String getNonTotalHolderVolume() {
+        return nonTotalHolderVolume;
+    }
+
+    public void setNonTotalHolderVolume(String nonTotalHolderVolume) {
+        this.nonTotalHolderVolume = nonTotalHolderVolume;
+    }
+
+    public String getNonTotalTurnover() {
+        return nonTotalTurnover;
+    }
+
+    public void setNonTotalTurnover(String nonTotalTurnover) {
+        this.nonTotalTurnover = nonTotalTurnover;
+    }
+
+    public String getNonTotallot() {
+        return nonTotallot;
+    }
+
+    public void setNonTotallot(String nonTotallot) {
+        this.nonTotallot = nonTotallot;
+    }
+
+    public String getMarkPrice() {
+        return markPrice;
+    }
+
+    public void setMarkPrice(String markPrice) {
+        this.markPrice = markPrice;
+    }
+
+    public String getFundsRate() {
+        return fundsRate;
+    }
+
+    public void setFundsRate(String fundsRate) {
+        this.fundsRate = fundsRate;
+    }
+
+    public String getStrBidOrder6() {
+        return strBidOrder6;
+    }
+
+    public void setStrBidOrder6(String strBidOrder6) {
+        this.strBidOrder6 = strBidOrder6;
+    }
+
+    public String getStrBidOrder7() {
+        return strBidOrder7;
+    }
+
+    public void setStrBidOrder7(String strBidOrder7) {
+        this.strBidOrder7 = strBidOrder7;
+    }
+
+    public String getStrBidOrder8() {
+        return strBidOrder8;
+    }
+
+    public void setStrBidOrder8(String strBidOrder8) {
+        this.strBidOrder8 = strBidOrder8;
+    }
+
+    public String getStrBidOrder9() {
+        return strBidOrder9;
+    }
+
+    public void setStrBidOrder9(String strBidOrder9) {
+        this.strBidOrder9 = strBidOrder9;
+    }
+
+    public String getStrBidOrder10() {
+        return strBidOrder10;
+    }
+
+    public void setStrBidOrder10(String strBidOrder10) {
+        this.strBidOrder10 = strBidOrder10;
+    }
+
+    public String getStrAskOrder6() {
+        return strAskOrder6;
+    }
+
+    public void setStrAskOrder6(String strAskOrder6) {
+        this.strAskOrder6 = strAskOrder6;
+    }
+
+    public String getStrAskOrder7() {
+        return strAskOrder7;
+    }
+
+    public void setStrAskOrder7(String strAskOrder7) {
+        this.strAskOrder7 = strAskOrder7;
+    }
+
+    public String getStrAskOrder8() {
+        return strAskOrder8;
+    }
+
+    public void setStrAskOrder8(String strAskOrder8) {
+        this.strAskOrder8 = strAskOrder8;
+    }
+
+    public String getStrAskOrder9() {
+        return strAskOrder9;
+    }
+
+    public void setStrAskOrder9(String strAskOrder9) {
+        this.strAskOrder9 = strAskOrder9;
+    }
+
+    public String getStrAskOrder10() {
+        return strAskOrder10;
+    }
+
+    public void setStrAskOrder10(String strAskOrder10) {
+        this.strAskOrder10 = strAskOrder10;
+    }
+}

+ 518 - 0
RMA/chart/src/main/java/com/desfate/chart/ui/old/OTC/datas/MMQuoteDay.java

@@ -0,0 +1,518 @@
+package com.desfate.chart.ui.old.OTC.datas;
+
+
+import com.mtp2.tcplibs.tools.LogUtils;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import mtp.polymer.com.businesslayer.resolver.data.QuoteTik;
+import mtp.polymer.com.businesslayer.resolver.data.QuoteTikPart;
+
+/**
+ * 做市行情盘面,做市的商品盘面数据
+ * 主要特点:1.没有量,换手率
+ *
+ * @author yongzq
+ */
+public class MMQuoteDay extends QuoteDayBase {
+
+    private MMQuoteDay() {
+
+    }
+
+    // 前一口价,用来判断涨跌的方向和数值
+    private String prePrice;
+
+    // 价格升降标志,和上一口比较
+    private int raisedFlag = -1;
+
+    // 涨跌标志,和昨收比
+    private int upDown = -1;
+
+    // 交易日
+    private String exchangeTime;
+
+    /**
+     * 构造方法
+     *
+     * @param exchangeCode 交易所代码
+     * @param goodsCode    商品goodsdcode
+     */
+    public MMQuoteDay(int exchangeCode, String goodsCode) {
+        this.setExchangeCode(exchangeCode);
+        this.setGoodsCode(goodsCode);
+    }
+
+
+    @Override
+    public int getRaisedFlag() {
+        return this.raisedFlag;
+    }
+
+    @Override
+    public int getUpDown() {
+        return this.upDown;
+    }
+
+    public void setUpDown(int upDown) {
+        this.upDown = upDown;
+    }
+
+    public String getExchangeTime() {
+        return exchangeTime;
+    }
+
+    public void setExchangeTime(String exchangeTime) {
+        this.exchangeTime = exchangeTime;
+    }
+
+    /**
+     * 从quotetik更新一些字段
+     *
+     * @param tik
+     */
+    private void updateFromTik(QuoteTik tik) {
+        HashMap<Byte, Object> fields = tik.getFields();
+        Iterator<Byte> item = fields.keySet().iterator();
+        while (item.hasNext()) {
+            String value;
+            Byte keyB = item.next();
+            byte key = keyB.byteValue();
+            switch (key) {
+                case QuoteTikPart.Ask:// 卖价
+                    value = fields.get(keyB).toString();
+                    setAsk(value);
+                    break;
+
+                case QuoteTikPart.Bid:// 买价
+                    value = fields.get(keyB).toString();
+                    setBid(value);
+                    break;
+
+                case QuoteTikPart.Last:// 现价
+                    value = fields.get(keyB).toString();
+                    if (value != null && !value.equals("") && Double.parseDouble(value) > 0) {
+                        setPrice(value);
+                    }
+                    break;
+
+                case QuoteTikPart.DecimalPlace:// 小数位
+                    int decimalPlace = Integer.parseInt(fields.get(keyB).toString());
+                    if (decimalPlace >= 0) {
+                        setDecimalPlace(decimalPlace);
+                    }
+                    break;
+                case QuoteTikPart.ExchangeTime: {
+                    String time = (String) fields.get(keyB);
+                    setExchangeTime(time);
+                    break;
+                }
+                default:
+                    break;
+            }
+        }
+    }
+
+    /**
+     * 使用现价更新一系列数据
+     */
+    private void updateByLast() {
+        try {
+            if (getPrice().equals("0")) {
+                return;
+            }
+
+            if (this.prePrice == null) {
+                this.prePrice = getPrice();
+            } else {
+                // 设置价格变动方向
+                if (Double.parseDouble(this.prePrice) < Double.parseDouble(getPrice())) {
+                    this.raisedFlag = 1;
+                } else if (Double.parseDouble(this.prePrice) > Double.parseDouble(getPrice())) {
+                    this.raisedFlag = 2;
+                } else {
+                    this.raisedFlag = 0;
+                }
+
+                this.prePrice = getPrice();
+            }
+
+            // 设置涨跌
+            if (getPreClose() != null) {
+                if (Double.parseDouble(getPrice()) > Double.parseDouble(getPreClose())) {
+                    this.upDown = 1;
+                } else if (Double.parseDouble(getPrice()) < Double.parseDouble(getPreClose())) {
+                    this.upDown = 2;
+                } else {
+                    this.upDown = 0;
+                }
+            }
+            double price = Double.parseDouble(getPrice());
+            if (canUseQuote()) {
+                if (getOpened() == null || getOpened().isEmpty() || Double.parseDouble(getOpened()) == 0) {
+                    setOpened(this.getPrice());
+                }
+
+                if (getHighest() == null || getHighest().isEmpty() || Double.parseDouble(getHighest()) == 0) {
+                    setHighest(this.getPrice());
+                }
+                if (getLowest() == null || getLowest().isEmpty() || Double.parseDouble(getLowest()) == 0) {
+                    setLowest(this.getPrice());
+                }
+                if (price > 0) {
+                    setHighest(price > Double.parseDouble(getHighest()) ? getPrice() : getHighest());
+                    setLowest(price < Double.parseDouble(getLowest()) ? getPrice() : getLowest());
+                }
+
+            }
+
+            // 计算涨跌和涨幅
+            if (getPrice() != null && !getPrice().isEmpty() && getPreClose() != null && !getPreClose().isEmpty()) {
+                double preClose = Double.parseDouble(getPreClose());// 涨跌幅用昨结计算);
+                if (price == 0 || preClose == 0) {
+                    setUpDownValue("--");
+                    setUpDownRange("--");
+                } else {
+                    setUpDownValue(price - preClose + "");
+                    setUpDownRange(((price - preClose) * 100) / preClose + "");
+                }
+            }
+
+            // 计算振幅
+            if (getHighest() != null && !getHighest().isEmpty() &&
+                    getLowest() != null && !getLowest().isEmpty() &&
+                    getPreClose() != null && !getPreClose().isEmpty()
+                    && Double.parseDouble(getPreClose()) > 0) {
+                double highest = Double.parseDouble(getHighest());
+                double lowest = Double.parseDouble(getLowest());
+                double preClose = Double.parseDouble(getPreClose());
+                if (preClose == 0) {
+                    setAmplitude("--");
+                } else {
+                    setAmplitude(((highest - lowest) * 100) / preClose + "");
+                }
+            } else {
+                setAmplitude("--");
+            }
+        } catch (NumberFormatException e) {
+            LogUtils.e("quote", "MMQuoteDay updateByLast error");
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 更新时间等数据
+     *
+     * @param atTime
+     */
+    private void updateTime(Date atTime) {
+        if (getLastTime().before(atTime)) {
+            setLastTime(atTime);
+        }
+
+        if (getOpenTime() == null) {
+            setOpenTime(atTime);
+        }
+    }
+
+    /**
+     * 暂时不用,直接返回true
+     *
+     * @param atTime
+     * @return
+     */
+    private boolean inRang(Date atTime) {
+        return true;
+    }
+
+
+    /**
+     * 合并盘面,当查询到盘面数据后,和现有的数据进行合并
+     */
+    @Override
+    public void inputDayQuote(QuoteTik tik) {
+        mtp.polymer.com.businesslayer.resolver.data.market.MMQuoteDay quoteDay = toDayQuote(tik);
+        double price = Double.parseDouble(getPrice());
+        if (quoteDay.getLastTime() != null && getLastTime() != null && quoteDay.getLastTime().before(getLastTime())) {
+            // 如果刚登陆并且行情很快的情况下,这时候请求盘面回来,盘面时间可能比行情时间早,要赋值最高最低等价格
+            if (quoteDay.getHighest() != null) {
+                double preHighest = Double.parseDouble(quoteDay.getHighest());
+                double cruHighest = Double.parseDouble(getHighest());
+                setHighest((cruHighest > preHighest ? cruHighest : preHighest) + "");
+            }
+            if (quoteDay.getLowest() != null) {
+                double preLowest = Double.parseDouble(quoteDay.getLowest());
+                double cruLowest = Double.parseDouble(quoteDay.getLowest());
+                setLowest((cruLowest < preLowest ? cruLowest : preLowest) + "");
+            }
+
+            if (quoteDay.getOpened() != null) {
+                setOpened(quoteDay.getOpened());
+            }
+
+            if (quoteDay.getOpenTime() != null) {
+                setOpenTime(quoteDay.getOpenTime());
+            }
+
+            setPreSettle(quoteDay.getPreSettle());
+            setStrPctChange(quoteDay.getStrPctChange());
+            double preSettle = 0;
+            try {
+                preSettle = Double.parseDouble(quoteDay.getPreSettle());
+            } catch (Exception e) {
+                // TODO: handle exception
+            }
+
+            if (preSettle > 0) {
+                setPreClose(quoteDay.getPreSettle());
+            } else {
+                setPreClose(quoteDay.
+
+                        getPreClose());
+            }
+
+            setSettle(quoteDay.getSettle());
+
+            // 计算涨跌和涨幅  要在昨收赋值后做
+            if (getPrice() != null && !getPrice().isEmpty() && getPreClose() != null && !getPreClose().isEmpty()) {
+                double preClose = Double.parseDouble(getPreClose());// 涨跌幅用昨结计算
+                if (price == 0 || preClose == 0) {
+                    setUpDownValue("--");
+                    setUpDownRange("--");
+                } else {
+                    setUpDownValue(price - preClose + "");
+                    setUpDownRange(((price - preClose) * 100) / preClose + "");
+                }
+            }
+
+            // 计算振幅
+            if (getHighest() != null && !getHighest().isEmpty() &&
+                    getLowest() != null && !getLowest().isEmpty() &&
+                    getPreClose() != null && !getPreClose().isEmpty()) {
+                double highest = Double.parseDouble(getHighest());
+                double lowest = Double.parseDouble(getLowest());
+                double preClose = Double.parseDouble(getPreClose());
+                if (preClose == 0) {
+                    setAmplitude("--");
+                } else {
+                    setAmplitude(((highest - lowest) * 100) / preClose + "");
+                }
+            } else {
+                setAmplitude("--");
+            }
+            return;
+        }
+        // 正常情况下,更新以下字段
+        if (quoteDay.getOpened() != null) {
+            setOpened(quoteDay.getOpened());
+        }
+
+        if (quoteDay.getOpenTime() != null) {
+            setOpenTime(quoteDay.getOpenTime());
+        }
+
+        if (quoteDay.getPrice() != null) {
+            setPrice(quoteDay.getPrice());
+        }
+
+        if (quoteDay.getAsk() != null) {
+            setAsk(quoteDay.getAsk());
+        }
+
+        if (quoteDay.getBid() != null) {
+            setBid(quoteDay.getBid());
+        }
+
+        if (quoteDay.getHighest() != null) {
+            double preHighest = Double.parseDouble(quoteDay.getHighest());
+            double cruHighest = Double.parseDouble(getHighest());
+            setHighest((cruHighest > preHighest ? cruHighest : preHighest) + "");
+        }
+        if (quoteDay.getLowest() != null) {
+            double preLowest = Double.parseDouble(quoteDay.getLowest());
+            double cruLowest = Double.parseDouble(quoteDay.getLowest());
+            setLowest((cruLowest < preLowest ? cruLowest : preLowest) + "");
+        }
+
+        if (quoteDay.getLastTime() != null) {
+            if (getLastTime() == null || quoteDay.getLastTime().after(getLastTime())) {
+                setLastTime(quoteDay.getLastTime());
+            }
+        }
+
+        // 计算涨跌和涨幅
+        if (getPrice() != null && !getPrice().isEmpty() && getPreClose() != null && !getPreClose().isEmpty()) {
+            double preClose = Double.parseDouble(getPreClose());// 涨跌幅用昨结计算
+            if (price == 0 || preClose == 0) {
+                setUpDownValue("--");
+                setUpDownRange("--");
+            } else {
+                setUpDownValue(price - preClose + "");
+                setUpDownRange(((price - preClose) * 100) / preClose + "");
+            }
+        }
+
+        // 计算振幅
+        if (getHighest() != null && !getHighest().isEmpty() &&
+                getLowest() != null && !getLowest().isEmpty() &&
+                getPreClose() != null && !getPreClose().isEmpty()
+                && Double.parseDouble(getPreClose()) > 0) {
+            double highest = Double.parseDouble(getHighest());
+            double lowest = Double.parseDouble(getLowest());
+            double preClose = Double.parseDouble(getPreClose());
+            if (preClose == 0) {
+                setAmplitude("--");
+            } else {
+                setAmplitude(((highest - lowest) * 100) / preClose + "");
+            }
+        } else {
+            setAmplitude("--");
+        }
+        setPreSettle(quoteDay.getPreSettle());
+        setStrPctChange(quoteDay.getStrPctChange());
+        double preSettle = 0;
+        try {
+            preSettle = Double.parseDouble(quoteDay.getPreSettle());
+        } catch (Exception e) {
+            // TODO: handle exception
+        }
+
+        if (preSettle > 0) {
+            setPreClose(quoteDay.getPreSettle());
+        } else {
+            setPreClose(quoteDay.getPreClose());
+        }
+
+
+        setSettle(quoteDay.getSettle());
+    }
+
+    /**
+     * 将tik数据转换为盘面对象
+     *
+     * @param tik
+     * @return
+     */
+    public static mtp.polymer.com.businesslayer.resolver.data.market.MMQuoteDay toDayQuote(QuoteTik tik) {
+//		if(tik.getAtTime() == null){// FIXME: 2018/1/11 只要是服务端下发的,值都有效
+//			return null;
+//		}
+
+        mtp.polymer.com.businesslayer.resolver.data.market.MMQuoteDay quoteDay = new mtp.polymer.com.businesslayer.resolver.data.market.MMQuoteDay();
+        quoteDay.setAsk(tik.getAsk());
+        quoteDay.setBid(tik.getBid());
+        quoteDay.setLastTime(tik.getAtTime());
+        quoteDay.setOpenTime(tik.getAtTime());
+        quoteDay.setDecimalPlace(tik.getDecimalPlace());
+        quoteDay.setExchangeCode(tik.getExchangeCode());
+        quoteDay.setGoodsCode(tik.getGoodsCode());
+        quoteDay.setHighest(tik.getValue((byte) QuoteTikPart.Highest));
+        quoteDay.setGoodsCode(tik.getGoodsCode());
+        quoteDay.setLowest(tik.getValue((byte) QuoteTikPart.Lowest));
+        quoteDay.setOpened(tik.getValue((byte) QuoteTikPart.Opened));
+        quoteDay.setPrice(tik.getValue(QuoteTikPart.Last));
+        quoteDay.setExchangeTime(tik.getValue(QuoteTikPart.ExchangeTime));
+        // 昨收用昨结算赋值
+        double preSettle = 0;
+        try {
+            preSettle = Double.parseDouble(quoteDay.getPreSettle());
+        } catch (Exception e) {
+            // TODO: handle exception
+        }
+
+        if (preSettle > 0) {
+            quoteDay.setPreClose(preSettle + "");
+        } else {
+            quoteDay.setPreClose(tik.getValue((byte) QuoteTikPart.PreClose));
+        }
+        quoteDay.setPreSettle(tik.getValue(QuoteTikPart.PreSettle));
+        quoteDay.setStrPctChange(tik.getValue(QuoteTikPart.ChangePercent));
+        quoteDay.setSettle(tik.getValue(QuoteTikPart.Settle));
+        if (quoteDay.getPreClose() != null && quoteDay.getPrice() != null) {
+            // 跌
+            if (Double.parseDouble(quoteDay.getPreClose()) > Double.parseDouble(quoteDay.getPrice())) {
+                quoteDay.setUpDown(2);
+            }
+            // 涨
+            if (Double.parseDouble(quoteDay.getPreClose()) < Double.parseDouble(quoteDay.getPrice())) {
+                quoteDay.setUpDown(1);
+            }
+        }
+        double price = Double.parseDouble(quoteDay.getPrice());
+        if (quoteDay.getPrice() != null && !quoteDay.getPrice().isEmpty() && quoteDay.getPreClose() != null && !quoteDay.getPreClose().isEmpty()) {
+            double preClose = Double.parseDouble(quoteDay.getPreSettle()); // 涨跌幅用昨结计算
+            if (price == 0 || preClose == 0) {
+                quoteDay.setUpDownValue("--");
+                quoteDay.setUpDownRange("--");
+            } else {
+                quoteDay.setUpDownValue(price - preClose + "");
+                quoteDay.setUpDownRange(((price - preClose) * 100) / preClose + "");
+            }
+        }
+
+        // 计算振幅
+        if (quoteDay.getHighest() != null && !quoteDay.getHighest().isEmpty() &&
+                quoteDay.getLowest() != null && !quoteDay.getLowest().isEmpty() &&
+                quoteDay.getPreClose() != null && !quoteDay.getPreClose().isEmpty()
+                && Double.parseDouble(quoteDay.getPreClose()) > 0) {
+            double highest = Double.parseDouble(quoteDay.getHighest());
+            double lowest = Double.parseDouble(quoteDay.getLowest());
+            double preClose = Double.parseDouble(quoteDay.getPreClose());
+            if (preClose == 0) {
+                quoteDay.setAmplitude("--");
+            } else {
+                quoteDay.setAmplitude(((highest - lowest) * 100) / preClose + "");
+            }
+        } else {
+            quoteDay.setAmplitude("--");
+        }
+        return quoteDay;
+    }
+
+    /**
+     * 使用实时行情更新盘面数据
+     */
+    @Override
+    public void inputQuote(QuoteTik quote) {
+//		if (!quote.getSymbol().equals(this.getSymbol())) {
+//			LogUtils.e("Quote", "input quote error!");
+//			return;
+//		}
+
+        boolean settlementPlanValid = true;
+
+        // 这里需不需要根据结算计划判断是否累积盘面有待考虑
+        // 如果依赖结算计划时间,可能存在结算计划取不到的情况
+        // 如果不依赖结算计划,不能完全保证当前的行情是在正确的时间范围内
+        if (!settlementPlanValid) {
+            return;
+        }
+
+        if (inRang(quote.getAtTime())) {
+            if (getLastTime() == null) {
+                setLastTime(quote.getAtTime());
+            }
+            if (!getLastTime().after(quote.getAtTime())) {
+                // 如果实时行情数据比当前盘面要早,不处理
+                updateFromTik(quote);
+                updateTime(quote.getAtTime());
+                updateByLast();
+            }
+        } else {
+            // to do
+        }
+//		LogUtils.e("DayQuote", this.toString());
+    }
+
+
+    @Override
+    public String toString() {
+        return "MMQuoteDay [getExchangeCode()=" + getExchangeCode() + ", getGoodsCode()=" + getGoodsCode()
+                + ", getSymbol()=" + getSymbol() + ", getLastTime()=" + getLastTime() + ", getPrice()=" + getPrice()
+                + ", getBid()=" + getBid() + ", getAsk()=" + getAsk() + ", getOpened()=" + getOpened()
+                + ", getHighest()=" + getHighest() + ", getLowest()=" + getLowest() + ", getDecimalPlace()="
+                + getDecimalPlace() + ", getOpenTime()=" + getOpenTime() + ", toString()=" + super.toString() + "]";
+    }
+}

+ 353 - 0
RMA/chart/src/main/java/com/desfate/chart/ui/old/OTC/datas/QuoteDayBase.java

@@ -0,0 +1,353 @@
+package com.desfate.chart.ui.old.OTC.datas;
+
+import java.util.ArrayList;
+import java.util.Date;
+
+
+public abstract class QuoteDayBase {
+
+    private int exchangeCode;
+    private String goodsCode;
+    private String symbol;
+    private Date openTime;
+    private Date lastTime;
+    private String price;
+    private String bid;
+    private String ask;
+    private String opened;
+    private String highest;
+    private String lowest = "";
+    private String preClose;
+    private String preSettle; // 昨结算
+    private String settle; // 结算价
+    private int decimalPlace;
+    private String upDownValue; // 涨跌额
+    private String upDownRange; // 涨跌幅
+    private String amplitude; // 振幅
+
+    // 这个字段下发的时候,可能不存在 特殊字段
+
+    protected String tradeType = "";
+
+    //涨跌值,与昨结算、昨收比较
+    private String strChange = "0";
+
+    // 涨跌百分比,和昨收或昨结算比较
+    private String strPctChange = "0";
+
+    //涨跌值 ,与开盘时的价格比较
+    private String strChangeSinceOpen;
+
+    public String getStrChange() {
+        return strChange;
+    }
+
+    public void setStrChange(String strChange) {
+        this.strChange = strChange;
+    }
+
+    public String getStrPctChange() {
+        return strPctChange;
+    }
+
+    public void setStrPctChange(String strPctChange) {
+        this.strPctChange = strPctChange;
+    }
+
+    public String getStrChangeSinceOpen() {
+        return strChangeSinceOpen;
+    }
+
+    public void setStrChangeSinceOpen(String strChangeSinceOpen) {
+        this.strChangeSinceOpen = strChangeSinceOpen;
+    }
+
+    public String getTradeType() {
+        return tradeType;
+    }
+
+    public void setTradeType(String tradeType) {
+        this.tradeType = tradeType;
+    }
+    protected ArrayList<String> tradeTypes = new ArrayList<>();
+
+    protected void init() {
+        tradeTypes.clear();
+        tradeTypes.add("P");
+        tradeTypes.add("U");
+        tradeTypes.add("D");
+        tradeTypes.add("M");
+        tradeTypes.add("X");
+        tradeTypes.add("Y");
+        tradeTypes.add("C");
+    }
+
+    /**
+     * 是否可以用行情组新加累积分时和k
+     * @return
+     */
+    public boolean canUseQuote() {
+        return !tradeTypes.contains(tradeType);
+    }
+
+    /**
+     * 顺序 买委托列队 accountname, accountId, orderId, qty,price
+     */
+    private String bidQueueInfo = "";
+    /**
+     * 顺序 卖委托列队 accountname, accountId, orderId, qty,price
+     */
+    private String askQueueInfo = "";
+
+
+    public String getBidQueueInfo() {
+        return bidQueueInfo;
+    }
+
+    public void setBidQueueInfo(String bidQueueInfo) {
+        this.bidQueueInfo = bidQueueInfo;
+    }
+
+    public String getAskQueueInfo() {
+        return askQueueInfo;
+    }
+
+    public void setAskQueueInfo(String askQueueInfo) {
+        this.askQueueInfo = askQueueInfo;
+    }
+
+
+    public String getUpDownRange() {
+        return upDownRange;
+    }
+
+    public String getAmplitude() {
+        return amplitude;
+    }
+
+    public String getUpDownValue() {
+        return upDownValue;
+    }
+
+    public void setAmplitude(String amplitude) {
+        this.amplitude = amplitude;
+    }
+
+    public void setUpDownRange(String upDownRange) {
+        this.upDownRange = upDownRange;
+    }
+
+    public void setUpDownValue(String upDownValue) {
+        this.upDownValue = upDownValue;
+    }
+
+    public int getExchangeCode() {
+        return exchangeCode;
+    }
+
+    public void setExchangeCode(int exchangeCode) {
+        this.exchangeCode = exchangeCode;
+    }
+
+    public String getGoodsCode() {
+        return goodsCode;
+    }
+
+    public void setGoodsCode(String goodsCode) {
+        this.goodsCode = goodsCode;
+    }
+
+    public String getSymbol() {
+        if (symbol == null || symbol.isEmpty()) {
+            symbol = exchangeCode + goodsCode;
+        }
+        return symbol;
+    }
+
+    private void setSymbol(String symbol) {
+        this.symbol = symbol;
+    }
+
+    public Date getLastTime() {
+        return lastTime;
+    }
+
+    public void setLastTime(Date lastTime) {
+        this.lastTime = lastTime;
+    }
+
+    public String getPrice() {
+        if (price == null || "".equals(price) || "null".equals(price)) {
+            return "0";
+        }
+        return price;
+    }
+
+    public void setPrice(String price) {
+        this.price = price;
+    }
+
+    public String getBid() {
+        if (bid == null || bid.equals("") || bid.equals("null")) {
+            bid = "0";
+        }
+        return bid;
+    }
+
+    public void setBid(String bid) {
+        this.bid = bid;
+    }
+
+    public String getAsk() {
+        if (ask == null || ask.equals("") || ask.equals("null")) {
+            ask = "0";
+        }
+        return ask;
+    }
+
+    public void setAsk(String ask) {
+        this.ask = ask;
+    }
+
+    public String getOpened() {
+        if (!isEmpty(opened)) {
+            opened = "0";
+        }
+        return opened;
+    }
+
+    public void setOpened(String opened) {
+        this.opened = opened;
+    }
+
+    public String getHighest() {
+        if (!isEmpty(highest)) {
+            highest = "0";
+        }
+        return highest;
+    }
+
+    // 判断字符串是否为空 // FIXME: 2018/1/12 反人类啊。
+    public static boolean isEmpty(String str) {
+        return !(str == null || str.equals("") || str.equals("null"));// "" || null || "null" == false
+    }
+
+    public void setHighest(String highest) {
+        this.highest = highest;
+    }
+
+    public String getLowest() {
+        return lowest;
+    }
+
+    public void setLowest(String lowest) {
+        this.lowest = lowest;
+    }
+
+    public int getDecimalPlace() {
+        return decimalPlace;
+    }
+
+    public void setDecimalPlace(int decimalPlace) {
+        this.decimalPlace = decimalPlace;
+    }
+
+    public void setPreClose(String param) {
+        this.preClose = param;
+    }
+
+    /**
+     * @return
+     */
+    public String getPreClose() {
+        if (Double.parseDouble(getPreSettle()) != 0) {
+            return getPreSettle();
+        } else {
+            if (preClose == null || preClose.equals("") || preClose.equals("null")) {
+                preClose = "0";
+            }
+            if (Double.parseDouble(preClose) == 0) { // 如果做昨收价还是
+                if (isEmpty(opened)) {
+                    return opened;
+                }
+            }
+        }
+        return preClose;
+    }
+
+    /**
+     * 取真正的昨收
+     *
+     * @return
+     */
+    public String getRealPreClose() {
+        if (preClose == null || preClose.equals("") || preClose.equals("null")) {
+            preClose = "0";
+        }
+        return preClose;
+    }
+
+
+    public void setPreSettle(String preSettle) {
+        this.preSettle = preSettle;
+    }
+
+    public String getPreSettle() {
+        if (preSettle == null || preSettle.equals("") || preSettle.equals("null")) {
+            preSettle = "0";
+        }
+        return preSettle;
+    }
+
+    public void setSettle(String settle) {
+        this.settle = settle;
+    }
+
+    public String getSettle() {
+        if (settle == null || settle.equals("") || settle.equals("null")) {
+            settle = "0";
+        }
+        return settle;
+    }
+
+    public abstract void inputQuote(QuoteTik quotes);
+
+    public abstract void inputDayQuote(QuoteTik tik);
+
+    // 和上一口价涨跌 上下箭头
+    public abstract int getRaisedFlag();
+
+    // 和昨收涨跌 买卖价变色
+    public abstract int getUpDown();
+
+    public Date getOpenTime() {
+        return openTime;
+    }
+
+    public void setOpenTime(Date openTime) {
+        this.openTime = openTime;
+    }
+
+
+    public void clearData() {
+        exchangeCode = 0;
+        goodsCode = "";
+        symbol = "";
+        Date openTime = null;
+        Date lastTime = null;
+        price = "";
+        bid = "";
+        ask = "";
+        opened = "";
+        highest = "";
+        lowest = "";
+        preClose = "";
+        preSettle = ""; // 昨结算
+        settle = ""; // 结算价
+        decimalPlace = 0;
+        upDownValue = ""; // 涨跌额
+        upDownRange = ""; // 涨跌幅
+        amplitude = ""; // 振幅
+    }
+
+}

+ 887 - 0
RMA/chart/src/main/java/com/desfate/chart/ui/old/OTC/datas/QuoteTik.java

@@ -0,0 +1,887 @@
+package com.desfate.chart.ui.old.OTC.datas;
+
+
+import com.desfate.chart.ui.old.adapter.HistoryTik;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+
+
+/**
+ * 实时行情对象
+ *
+ * @author yongzq
+ */
+public class QuoteTik {
+    // 交易所代码
+    private int exchangeCode;
+
+    // 商品代码
+    private String goodsCode;
+
+    // 行情时间
+    private Date atTime;
+
+    // 商品组
+    private int sort;
+
+    // 字段字典
+    private HashMap<Byte, Object> fields = new HashMap<Byte, Object>();
+
+    // 标识符
+    private String symbol;
+
+    // 小数位
+    private byte decimalPlace;
+
+    // 日期
+    private String date;
+
+    // 时间
+    private String time;
+
+    //权力金
+    private String stickPrice;
+
+    //涨跌值,与昨结算、昨收比较
+    private String strChange;
+
+    // 涨跌百分比,和昨收或昨结算比较
+    private String strPctChange;
+
+    //涨跌值 ,与开盘时的价格比较
+    private String strChangeSinceOpen;
+
+
+    public String getStrChange() {
+        return strChange;
+    }
+
+    public void setStrChange(String strChange) {
+        this.strChange = strChange;
+    }
+
+    public String getStrPctChange() {
+        return strPctChange;
+    }
+
+    public void setStrPctChange(String strPctChange) {
+        this.strPctChange = strPctChange;
+    }
+
+    public String getStrChangeSinceOpen() {
+        return strChangeSinceOpen;
+    }
+
+    public void setStrChangeSinceOpen(String strChangeSinceOpen) {
+        this.strChangeSinceOpen = strChangeSinceOpen;
+    }
+
+    public String getDate() {
+        return date;
+    }
+
+    public void setDate(String date) {
+        this.date = date;
+        setAtTime();
+    }
+
+    public String getTime() {
+        return time;
+    }
+
+    public void setTime(String time) {
+        this.time = time;
+        setAtTime();
+    }
+
+    public int getExchangeCode() {
+        return this.exchangeCode;
+    }
+
+    public void setExchangeCode(int param) {
+        this.exchangeCode = param;
+    }
+
+    public String getGoodsCode() {
+        return this.goodsCode;
+    }
+
+    public void setGoodsCode(String param) {
+        this.goodsCode = param;
+    }
+
+    public Date getAtTime() {
+        return this.atTime;
+    }
+
+    public void setAtTime(Date param) {
+        this.atTime = param;
+    }
+
+    public String getSymbol() {
+        if (symbol == null) {
+            symbol = exchangeCode + "_" + goodsCode;
+        }
+        return this.symbol;
+    }
+
+    private void setSymbol(String param) {
+        this.symbol = param;
+    }
+
+    public int getSort() {
+        return this.sort;
+    }
+
+    public void setSort(int param) {
+        this.sort = param;
+    }
+
+    public HashMap<Byte, Object> getFields() {
+        return this.fields;
+    }
+
+    public void addField(Byte key, Object value) {
+        fields.put(key, value);
+    }
+
+    public byte getDecimalPlace() {
+        return this.decimalPlace;
+    }
+
+    public void setDecimalPlace(byte param) {
+        this.decimalPlace = param;
+    }
+
+    public String getStickPrice() {
+        return stickPrice;
+    }
+
+    public void setStickPrice(String stickPrice) {
+        this.stickPrice = stickPrice;
+    }
+
+    public String getAsk() {
+        if (fields.containsKey(QuoteTikPart.Ask)) {
+            return fields.get(new Byte(QuoteTikPart.Ask)).toString();
+        }
+
+        return null;
+    }
+
+    public String getBid() {
+        if (fields.containsKey(QuoteTikPart.Bid)) {
+            return fields.get(new Byte(QuoteTikPart.Bid)).toString();
+        }
+
+        return null;
+    }
+
+    public String getValue(byte key) {
+        if (fields.containsKey(key)) {
+            return fields.get(new Byte(key)).toString();
+        }
+
+        return null;
+    }
+
+    private void setAtTime() {
+        if (date != null && !date.isEmpty() && date.length() == 8 && time != null && !time.isEmpty()
+                && time.length() == 6) {
+            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd HHmmss");
+            try {
+                setAtTime(dateFormat.parse(date + " " + time));
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Override
+    public String toString() {
+        return "QuoteTik [exchangeCode=" + exchangeCode + ", goodsCode=" + goodsCode + ", atTime=" + atTime + ", sort="
+                + sort + ", fields=" + fields + ", symbol=" + symbol + ", decimalPlace=" + decimalPlace + ", date="
+                + date + ", time=" + time + "]";
+    }
+
+
+    private static int subsecond = 60 * 60 * 8;
+
+    private static String getGoodsCode(String[] fields) {
+        String goodsCode = "";
+        for (int i = 0; i < fields.length; i++) {
+            if (fields[i].contains(String.copyValueOf(new char[]{(char) QuoteTikPart.GoodsCode}))) {
+                int index = fields[i].indexOf(String.copyValueOf(new char[]{(char) QuoteTikPart.ValueStart}));
+                if (index > 0) {
+                    String value = fields[i].substring(index + 1).trim();
+                    return value;
+                }
+            }
+        }
+
+        return goodsCode;
+    }
+
+    public static ArrayList<byte[]> breakupArray(byte[] message) {
+        // 单行 0x10 ...0x01 key 0x02 value ... 0x11
+        ArrayList<byte[]> content = new ArrayList<>();
+        // 按每行拆分
+        for (int i = 0; i < message.length; i++) {
+
+            if (message[i] == 0x11) {
+                int length = 0;
+                if (content.size() > 0) {
+                    for (int j = 0; j < content.size(); j++) {
+                        length += content.get(j).length;
+                    }
+                }
+                byte[] line = new byte[i + 1 - length];
+
+                // 目标数组 从0到数组长度
+                System.arraycopy(message, length, line, 0, line.length);
+                content.add(line);
+            }
+        }
+        return content;
+    }
+
+    /**
+     * 解析盘面报文
+     */
+    public static QuoteTik[] analysis(byte[] message) throws Exception {
+        if (message == null || message.length == 0) {
+            return null;
+        }
+
+        ArrayList<QuoteTik> quoteList = new ArrayList<QuoteTik>();
+
+        // 遍历key ,value
+        for (byte[] bytes : breakupArray(message)) {
+            try {
+                QuoteTik tik = new QuoteTik();
+                for (int j = 0; j < bytes.length; j++) { // 每一行数据解析
+                    if (bytes[j] == 0x01) {
+                        // 找到0x01后面的第一个2就是key值
+                        for (int k = j + 1; k < bytes.length; k++) {
+                            if (bytes[k] == 0x02) {
+                                byte[] key = new byte[k - j - 1];
+                                System.arraycopy(bytes, j + 1, key, 0, key.length);
+                                // 找到key之后继续查找value
+                                byte[] value = null;
+                                for (int l = k + 1; l < bytes.length; l++) {
+                                    if (bytes[l] == 0x01 || bytes[l] == 0x11) {
+                                        value = new byte[l - k - 1];
+                                        System.arraycopy(bytes, k + 1, value, 0, value.length);
+                                        j = l - 1;
+                                        break;
+                                    }
+                                }
+                                // 根据key赋值
+                                if (value != null) {
+                                    String _value = new String(value);
+                                    switch (key[0]) {
+                                        case QuoteTikPart.GoodsCode:// 商品代码
+                                            tik.setGoodsCode(_value);
+                                            tik.addField(key[0], _value);
+                                            break;
+                                        case QuoteTikPart.ExchangeCode:
+                                            tik.setExchangeCode(Integer.parseInt(_value.trim()));
+                                            tik.addField(key[0], _value);
+                                            break;
+                                        case QuoteTikPart.Opened:
+                                        case QuoteTikPart.PreSettle:
+                                        case QuoteTikPart.Settle:
+                                        case QuoteTikPart.Last:
+                                        case QuoteTikPart.PreClose:
+                                        case QuoteTikPart.Lowest:
+                                        case QuoteTikPart.Highest:
+                                        case QuoteTikPart.Bid:
+                                        case QuoteTikPart.Bid2:
+                                        case QuoteTikPart.Bid3:
+                                        case QuoteTikPart.Bid4:
+                                        case QuoteTikPart.Bid5:
+                                        case QuoteTikPart.Ask:
+                                        case QuoteTikPart.Ask2:
+                                        case QuoteTikPart.Ask3:
+                                        case QuoteTikPart.Ask4:
+                                        case QuoteTikPart.Ask5:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID6:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID7:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID8:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID9:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID10:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK6:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK7:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK8:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK9:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK10:
+                                        case QuoteTikPart.LimitHigh:
+                                        case QuoteTikPart.LimitLow:
+                                            tik.addField(key[0], Math.abs(Double.parseDouble(toTruePrice(_value, tik.getGoodsCode()))));
+                                            break;
+
+                                        case QuoteTikPart.TotalTurnover:
+                                            tik.addField(key[0], _value);
+
+                                            break;
+
+                                        case QuoteTikPart.BidVolume:
+                                        case QuoteTikPart.BidVolume2:
+                                        case QuoteTikPart.BidVolume3:
+                                        case QuoteTikPart.BidVolume4:
+                                        case QuoteTikPart.BidVolume5:
+                                        case QuoteTikPart.AskVolume:
+                                        case QuoteTikPart.AskVolume2:
+                                        case QuoteTikPart.AskVolume3:
+                                        case QuoteTikPart.AskVolume4:
+                                        case QuoteTikPart.AskVolume5:
+                                        case QuoteTikPart.LastVolume:
+                                            tik.addField(key[0], Math.abs((int) Double.parseDouble(_value)));
+                                            break;
+                                        case QuoteTikPart.BidQueueInfo: // 买委托
+                                        case QuoteTikPart.AskQueueInfo: // 卖委托
+                                            tik.addField(key[0], _value);
+                                            break;
+                                        case QuoteTikPart.TotalVolume:
+                                            tik.addField(key[0], Math.abs((int) Double.parseDouble(_value)));
+                                            break;
+                                        case QuoteTikPart.HoldIncrement:
+                                            tik.addField(key[0], Integer.parseInt(_value));
+                                            break;
+                                        case QuoteTikPart.OrderId:
+                                            try {
+                                                tik.addField(QuoteTikPart.OrderId, Integer.parseInt(_value));
+                                            } catch (Exception e) {
+                                                tik.addField(QuoteTikPart.OrderId, Double.parseDouble(_value));
+                                            }
+                                            break;
+                                        case QuoteTikPart.PreHoldVolume:
+                                        case QuoteTikPart.HoldVolume:// 持仓量
+                                            tik.addField(key[0], Double.parseDouble(_value));
+                                            break;
+                                        case QuoteTikPart.Strike:
+                                            tik.setStickPrice(toTruePrice(_value, tik.getGoodsCode()));
+                                            tik.addField(key[0], Double.parseDouble(_value));
+                                            System.out.println("addField = " + _value);
+                                            break;
+                                        case QuoteTikPart.Time:
+                                            tik.setTime(_value.substring(0, 6));
+                                            tik.addField(key[0], _value);
+                                            break;
+                                        case QuoteTikPart.Date:
+                                            tik.setDate(_value.substring(0, 8));
+                                            tik.addField(key[0], _value);
+                                            break;
+                                        case QuoteTikPart.DecimalPlace:
+                                            int decimalplace = Math.abs(Integer.parseInt(_value.toString()));
+                                            if (decimalplace > 4) {
+                                                decimalplace = 4;
+                                            }
+
+                                            tik.setDecimalPlace((byte) decimalplace);
+                                            tik.addField(key[0], _value);
+                                            break;
+                                        case QuoteTikPart.Inventory:
+                                            tik.addField(key[0], Double.parseDouble(_value));
+                                            break;
+                                        // 挂牌期权增加
+                                        case QuoteTikPart.PutOptionPremiums:
+                                        case QuoteTikPart.PutOptionPremiums2:
+                                        case QuoteTikPart.PutOptionPremiums3:
+                                        case QuoteTikPart.PutOptionPremiums4:
+                                        case QuoteTikPart.PutOptionPremiums5:
+                                        case QuoteTikPart.CallOptionPremiums:
+                                        case QuoteTikPart.CallOptionPremiums2:
+                                        case QuoteTikPart.CallOptionPremiums3:
+                                        case QuoteTikPart.CallOptionPremiums4:
+                                        case QuoteTikPart.CallOptionPremiums5:
+                                            // 强制两位小数
+                                            tik.addField(key[0], Math.abs(Double.parseDouble(String.valueOf(Double.parseDouble(_value) / Math.pow(10, 2)))));
+                                            //tik.addField(key[0],Double.parseDouble(_value));
+                                            break;
+                                        case QuoteTikPart.strAskOrder:
+                                        case QuoteTikPart.strAskOrder2:
+                                        case QuoteTikPart.strAskOrder3:
+                                        case QuoteTikPart.strAskOrder4:
+                                        case QuoteTikPart.strAskOrder5:
+                                        case QuoteTikPart.strBidOrder:
+                                        case QuoteTikPart.strBidOrder2:
+                                        case QuoteTikPart.strBidOrder3:
+                                        case QuoteTikPart.strBidOrder4:
+                                        case QuoteTikPart.strBidOrder5:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER6:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER7:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER8:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER9:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID_ORDER10:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER6:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER7:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER8:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER9:
+                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK_ORDER10:
+                                            tik.addField(key[0], _value);
+                                            break;
+                                        case QuoteTikPart.ExchangeTime: //当前交易日
+                                            tik.addField(key[0], _value);
+                                            break;
+                                        case QuoteTikPart.ChangeFromOpen:
+                                            tik.addField(key[0],_value);
+                                            tik.setStrChangeSinceOpen(_value);
+                                            break;
+                                        case QuoteTikPart.ChangePercent:
+                                            tik.addField(key[0],_value);
+                                            tik.setStrPctChange(_value);
+                                            break;
+                                        case QuoteTikPart.Change:
+                                            tik.addField(key[0],_value);
+                                            tik.setStrChange(_value);
+                                            break;
+                                        default: // 新加的字段都不需要在添加解析了,除非比较特殊的,需要转化或者计算的。直接在BidQuoteDay或者MMQuoteDay类中的toDayQuote解析出来就行了
+                                            tik.addField(key[0], _value);
+                                            break;
+                                    }
+                                }
+                                break;
+                            }
+                        }
+                    }
+                }
+                quoteList.add(tik);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return quoteList.toArray(new QuoteTik[quoteList.size()]);
+    }
+
+    // 保存原有解析方法
+    public static QuoteTik[] analysis(byte[] message, int _value) throws Exception {
+        if (message == null || message.length == 0) {
+            return null;
+        }
+
+        ArrayList<QuoteTik> quoteList = new ArrayList<QuoteTik>();
+        String quoteStrings = new String(message, "utf-8");
+        quoteStrings = quoteStrings.replace("\0", "");
+        String[] quoteStringArray = quoteStrings
+                .split(String.copyValueOf(new char[]{(char) QuoteTikPart.PriceSplit}));
+        for (String item : quoteStringArray) {
+            if (item.length() < 2) {
+                continue;
+            }
+            try {
+                QuoteTik tik = new QuoteTik();
+                String[] fields = item.split(String.copyValueOf(new char[]{(char) QuoteTikPart.FieldStart}));
+                String goodsCode = getGoodsCode(fields);
+                for (String tagValue : fields) {
+                    try {
+                        int index = tagValue.indexOf(String.copyValueOf(new char[]{(char) QuoteTikPart.ValueStart}));
+                        if (index > 0) {
+                            String fieldName = tagValue.substring(0, index);
+                            String value = tagValue.substring(index + 1).trim();
+                            byte partic = (byte) (fieldName.toCharArray()[0]);
+                            Byte particB = new Byte(partic);
+                            switch (partic) {
+                                case QuoteTikPart.GoodsCode:
+                                    tik.setGoodsCode(value.trim());
+                                    tik.addField(new Byte(partic), value);
+                                    break;
+                                case QuoteTikPart.ExchangeCode:
+                                    tik.setExchangeCode(Integer.parseInt(value.trim()));
+                                    tik.addField(new Byte(partic), value);
+                                    break;
+                                case QuoteTikPart.Opened:
+                                case QuoteTikPart.PreSettle:
+                                case QuoteTikPart.Settle:
+                                case QuoteTikPart.Last:
+                                case QuoteTikPart.PreClose:
+                                case QuoteTikPart.Lowest:
+                                case QuoteTikPart.Highest:
+                                case QuoteTikPart.Bid:
+                                case QuoteTikPart.Bid2:
+                                case QuoteTikPart.Bid3:
+                                case QuoteTikPart.Bid4:
+                                case QuoteTikPart.Bid5:
+                                case QuoteTikPart.Ask:
+                                case QuoteTikPart.Ask2:
+                                case QuoteTikPart.Ask3:
+                                case QuoteTikPart.Ask4:
+                                case QuoteTikPart.Ask5:
+                                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID6:
+                                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID7:
+                                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID8:
+                                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID9:
+                                case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID10:
+                                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK6:
+                                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK7:
+                                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK8:
+                                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK9:
+                                case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK10:
+                                case QuoteTikPart.LimitHigh:
+                                case QuoteTikPart.LimitLow:
+                                    tik.addField(particB, Math.abs(Double.parseDouble(toTruePrice(value, goodsCode))));
+                                    break;
+
+                                case QuoteTikPart.TotalTurnover:
+                                    tik.addField(particB, value);
+                                    break;
+                                case QuoteTikPart.BidVolume:
+                                case QuoteTikPart.BidVolume2:
+                                case QuoteTikPart.BidVolume3:
+                                case QuoteTikPart.BidVolume4:
+                                case QuoteTikPart.BidVolume5:
+                                case QuoteTikPart.AskVolume:
+                                case QuoteTikPart.AskVolume2:
+                                case QuoteTikPart.AskVolume3:
+                                case QuoteTikPart.AskVolume4:
+                                case QuoteTikPart.AskVolume5:
+                                case QuoteTikPart.LastVolume:
+                                    tik.addField(particB, Math.abs((int) Double.parseDouble(value)));
+                                    break;
+                                case QuoteTikPart.BidQueueInfo:// 买委托
+                                case QuoteTikPart.AskQueueInfo:// 卖委托
+                                    tik.addField(particB, value);
+                                    break;
+                                case QuoteTikPart.TotalVolume:
+                                    tik.addField(particB, Math.abs((int) Double.parseDouble(value)));
+                                    break;
+                                case QuoteTikPart.HoldIncrement:
+                                    tik.addField(particB, Integer.parseInt(value));
+                                    break;
+                                case QuoteTikPart.OrderId:
+                                    try {
+                                        tik.addField(QuoteTikPart.OrderId, Integer.parseInt(value));
+                                    } catch (Exception e) {
+                                        tik.addField(QuoteTikPart.OrderId, Double.parseDouble(value));
+                                    }
+                                    break;
+                                case QuoteTikPart.PreHoldVolume:
+                                case QuoteTikPart.HoldVolume:// 持仓量
+                                    tik.addField(particB, Double.parseDouble(value));
+                                    break;
+                                case QuoteTikPart.Strike:
+                                    value = toTruePrice(value, goodsCode);
+                                    tik.setStickPrice(value);
+                                    tik.addField(particB, value);
+                                    break;
+                                case QuoteTikPart.Time:
+                                    tik.setTime(value.substring(0, 6));
+                                    tik.addField(particB, value);
+                                    break;
+                                case QuoteTikPart.Date:
+                                    tik.setDate(value.substring(0, 8));
+                                    tik.addField(particB, value);
+                                    break;
+                                case QuoteTikPart.DecimalPlace:
+                                    int decimalplace = Math.abs(Integer.parseInt(value.toString()));
+                                    if (decimalplace > 4) {
+                                        decimalplace = 4;
+                                    }
+
+                                    tik.setDecimalPlace((byte) decimalplace);
+                                    tik.addField(partic, value);
+                                    break;
+                                case QuoteTikPart.Inventory://库存量
+                                    tik.addField(particB, Double.parseDouble(value));
+                                    break;
+                                case QuoteTikPart.ExchangeTime: //当前交易日
+                                    tik.addField(particB, value);
+                                    break;
+                                /// 定货期权添加字段
+                                case QuoteTikPart.PutOptionPremiums:
+                                case QuoteTikPart.PutOptionPremiums2:
+                                    tik.addField(particB, Double.parseDouble(value));
+                                    break;
+                                default:
+                                    tik.addField(partic, value);
+                                    break;
+                            }
+
+
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+                quoteList.add(tik);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        return quoteList.toArray(new QuoteTik[quoteList.size()]);
+    }
+
+    /**
+     * 解析实时行情报文
+     */
+//    public synchronized static QuoteTik[] analysis(byte[] message, QuotesCommandData commandData) throws Exception {
+//
+//        if (commandData.getSmallPackage() == null || commandData.getSmallPackage().length == 0) {
+//            LogUtils.e("QuoteResolver", commandData.toString());
+//            throw new Exception("smallPackeg is null!");
+//        }
+//        int exchangeCode = commandData.getSmallPackage()[0];
+//        int sort = commandData.getSmallPackage()[1];
+//        int second = ByteUtils.bytesToInt(message, 8, ByteOrder.BIG_ENDIAN);
+//        Date date = new Date();
+//
+//        ArrayList<QuoteTik> quoteList = new ArrayList<QuoteTik>();
+//        // date的settime是将时间设置为1970-1-1 0:00:00加上秒数
+//        date.setTime((subsecond + second) * 1000);
+//        byte[] quoteBytes = new byte[message.length - 15];
+//        System.arraycopy(message, 15, quoteBytes, 0, quoteBytes.length);
+//
+//
+////		//------------------------------
+////		String quoteStrings = new String(quoteBytes, "utf-8");
+////		quoteStrings = quoteStrings.replace("\0", "");
+////		String[] quoteStringArray = quoteStrings
+////				.split(String.copyValueOf(new char[] { (char) QuoteTikPart.PriceSplit }));
+//
+//        // 遍历key ,value
+//        for (byte[] bytes : breakupArray(quoteBytes)) {
+//            try {
+//                QuoteTik tik = new QuoteTik();
+//                tik.setAtTime(date);
+//                tik.setSort(sort);
+//                tik.setExchangeCode(exchangeCode);
+//                for (int j = 0; j < bytes.length; j++) { // 每一行数据解析
+//                    if (bytes[j] == 0x01) {
+//                        // 找到0x01后面的第一个2就是key值
+//                        for (int k = j + 1; k < bytes.length; k++) {
+//                            if (bytes[k] == 0x02) {
+//                                byte[] key = new byte[k - j - 1];
+//                                System.arraycopy(bytes, j + 1, key, 0, key.length);
+//                                // 找到key之后继续查找value
+//                                byte[] value = null;
+//                                for (int l = k + 1; l < bytes.length; l++) {
+//                                    if (bytes[l] == 0x01 || bytes[l] == 0x11) {
+//                                        value = new byte[l - k - 1];
+//                                        System.arraycopy(bytes, k + 1, value, 0, value.length);
+//                                        j = l - 1;
+//                                        break;
+//                                    }
+//                                }
+//                                // 根据key赋值
+//                                if (value != null) {
+//                                    String _value = new String(value);
+//                                    switch (key[0]) {
+//                                        case QuoteTikPart.GoodsCode:// 商品代码
+//                                            tik.setGoodsCode(_value);
+//                                            tik.addField(key[0], _value);
+//                                            break;
+//                                        case QuoteTikPart.ExchangeCode:
+//                                            tik.setExchangeCode(Integer.parseInt(_value.trim()));
+//                                            tik.addField(key[0], _value);
+//                                            break;
+//                                        case QuoteTikPart.Opened:
+//                                        case QuoteTikPart.PreSettle:
+//                                        case QuoteTikPart.Settle:
+//                                        case QuoteTikPart.Last:
+//                                        case QuoteTikPart.PreClose:
+//                                        case QuoteTikPart.Lowest:
+//                                        case QuoteTikPart.Highest:
+//                                        case QuoteTikPart.Bid:
+//                                        case QuoteTikPart.Bid2:
+//                                        case QuoteTikPart.Bid3:
+//                                        case QuoteTikPart.Bid4:
+//                                        case QuoteTikPart.Bid5:
+//                                        case QuoteTikPart.Ask:
+//                                        case QuoteTikPart.Ask2:
+//                                        case QuoteTikPart.Ask3:
+//                                        case QuoteTikPart.Ask4:
+//                                        case QuoteTikPart.Ask5:
+//                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID6:
+//                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID7:
+//                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID8:
+//                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID9:
+//                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_BID10:
+//                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK6:
+//                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK7:
+//                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK8:
+//                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK9:
+//                                        case QuoteTikPart.MI_QUOTE_FIELD_CODE_ASK10:
+//                                        case QuoteTikPart.LimitHigh:
+//                                        case QuoteTikPart.LimitLow:
+//                                            tik.addField(key[0], Math.abs(Double.parseDouble(toTruePrice(_value, tik.getGoodsCode()))));
+//                                            break;
+//                                        case QuoteTikPart.TotalTurnover:
+//                                            tik.addField(key[0], _value);
+//                                            break;
+//                                        case QuoteTikPart.BidVolume:
+//                                        case QuoteTikPart.BidVolume2:
+//                                        case QuoteTikPart.BidVolume3:
+//                                        case QuoteTikPart.BidVolume4:
+//                                        case QuoteTikPart.BidVolume5:
+//                                        case QuoteTikPart.AskVolume:
+//                                        case QuoteTikPart.AskVolume2:
+//                                        case QuoteTikPart.AskVolume3:
+//                                        case QuoteTikPart.AskVolume4:
+//                                        case QuoteTikPart.AskVolume5:
+//                                            tik.addField(key[0], Math.abs((int) Double.parseDouble(_value)));
+//                                            break;
+//                                        case QuoteTikPart.LastVolume:
+//                                            tik.addField(QuoteTikPart.LastVolume, Math.abs((int) Double.parseDouble(_value)));
+//                                            break;
+//                                        case QuoteTikPart.BidQueueInfo: // 买委托
+//                                        case QuoteTikPart.AskQueueInfo: // 卖委托
+//                                            tik.addField(key[0], _value);
+//                                            break;
+//                                        case QuoteTikPart.TotalVolume:
+//                                            tik.addField(key[0], Math.abs((int) Double.parseDouble(_value)));
+//                                            break;
+//                                        case QuoteTikPart.HoldIncrement:
+//                                            tik.addField(key[0], Integer.parseInt(_value));
+//                                            break;
+//                                        case QuoteTikPart.OrderId:
+//                                            try {
+//                                                tik.addField(QuoteTikPart.OrderId, Integer.parseInt(_value));
+//                                            } catch (Exception e) {
+//                                                tik.addField(QuoteTikPart.OrderId, Double.parseDouble(_value));
+//                                            }
+//                                            break;
+//                                        case QuoteTikPart.PreHoldVolume:
+//                                        case QuoteTikPart.HoldVolume:// 持仓量
+//                                            tik.addField(key[0], Double.parseDouble(_value));
+//                                            break;
+//                                        case QuoteTikPart.Strike:
+//                                            tik.setStickPrice(toTruePrice(_value, tik.getGoodsCode()));
+//                                            tik.addField(key[0], toTruePrice(_value, tik.getGoodsCode()));
+//                                            System.out.println("particB = " + toTruePrice(_value, tik.getGoodsCode()));
+//                                            break;
+//                                        case QuoteTikPart.Time:
+//                                            tik.setTime(_value.substring(0, 6));
+//                                            tik.addField(key[0], _value);
+//                                            break;
+//                                        case QuoteTikPart.Date:
+//                                            tik.setDate(_value.substring(0, 8));
+//                                            tik.addField(key[0], _value);
+//                                            break;
+//                                        case QuoteTikPart.DecimalPlace:
+//                                            int decimalplace = Math.abs(Integer.parseInt(_value.toString()));
+//                                            if (decimalplace > 4) {
+//                                                decimalplace = 4;
+//                                            }
+//
+//                                            tik.setDecimalPlace((byte) decimalplace);
+//                                            tik.addField(key[0], _value);
+//                                            break;
+//                                        // 挂牌期权增加
+//                                        case QuoteTikPart.PutOptionPremiums:
+//                                        case QuoteTikPart.PutOptionPremiums2:
+//                                        case QuoteTikPart.PutOptionPremiums3:
+//                                        case QuoteTikPart.PutOptionPremiums4:
+//                                        case QuoteTikPart.PutOptionPremiums5:
+//                                        case QuoteTikPart.CallOptionPremiums:
+//                                        case QuoteTikPart.CallOptionPremiums2:
+//                                        case QuoteTikPart.CallOptionPremiums3:
+//                                        case QuoteTikPart.CallOptionPremiums4:
+//                                        case QuoteTikPart.CallOptionPremiums5:
+//                                            // 定金值强制两位小数
+//                                            tik.addField(key[0], Math.abs(Double.parseDouble(String.valueOf(Double.parseDouble(_value) / Math.pow(10, 2)))));
+//                                            //tik.addField(key[0],Double.parseDouble(_value));
+//                                            break;
+//                                        case QuoteTikPart.strAskOrder:
+//                                        case QuoteTikPart.strAskOrder2:
+//                                        case QuoteTikPart.strAskOrder3:
+//                                        case QuoteTikPart.strAskOrder4:
+//                                        case QuoteTikPart.strAskOrder5:
+//                                        case QuoteTikPart.strBidOrder:
+//                                        case QuoteTikPart.strBidOrder2:
+//                                        case QuoteTikPart.strBidOrder3:
+//                                        case QuoteTikPart.strBidOrder4:
+//                                        case QuoteTikPart.strBidOrder5:
+//                                            tik.addField(key[0], _value);
+//                                            break;
+//                                        case QuoteTikPart.ExchangeTime: //当前交易日
+//                                            tik.addField(key[0], _value);
+//                                            break;
+//                                        case QuoteTikPart.ChangeFromOpen:
+//                                            tik.addField(key[0],_value);
+//                                            tik.setStrChangeSinceOpen(_value);
+//                                            break;
+//                                        case QuoteTikPart.ChangePercent:
+//                                            tik.addField(key[0],_value);
+//                                            tik.setStrPctChange(_value);
+//                                            break;
+//                                        case QuoteTikPart.Change:
+//                                            tik.addField(key[0],_value);
+//                                            tik.setStrChange(_value);
+//                                            break;
+//                                        default:
+//                                            tik.addField(key[0], _value);
+//                                            break;
+//                                    }
+//                                }
+//                                break;
+//                            }
+//                        }
+//                    }
+//                }
+//                quoteList.add(tik);
+//            } catch (Exception e) {
+//                e.printStackTrace();
+//            }
+//        }
+//        return quoteList.toArray(new QuoteTik[quoteList.size()]);
+//    }
+
+    /**
+     * 将实时行情转换为一笔tik数据
+     *
+     * @return
+     */
+    public HistoryTik toHistoryTik() {
+        HistoryTik tik = new HistoryTik();
+        if (getValue(QuoteTikPart.Last) == null || Double.parseDouble(getValue(QuoteTikPart.Last)) <= 0) {
+            return null;
+        } else {
+            tik.setLast(Double.parseDouble(getValue(QuoteTikPart.Last)));
+        }
+
+        tik.setAtTime(getAtTime());
+
+        if (getAsk() != null) {
+            tik.setAsk(Double.parseDouble(getAsk()));
+        }
+
+        if (getBid() != null) {
+            tik.setBid(Double.parseDouble(getBid()));
+        }
+
+        if (getValue(QuoteTikPart.AskVolume) != null) {
+            tik.setAskVolume(Double.parseDouble(getValue(QuoteTikPart.AskVolume)));
+        }
+
+        if (getValue(QuoteTikPart.LastVolume) != null) {
+            tik.setVolume(Double.parseDouble(getValue(QuoteTikPart.LastVolume)));
+        }
+
+        if (getValue(QuoteTikPart.BidVolume) != null) {
+            tik.setBidVolueme(Double.parseDouble(getValue(QuoteTikPart.BidVolume)));
+        }
+        return tik;
+    }
+
+    /**
+     * @param price
+     * @return
+     */
+    public static String toTruePrice(String price, String goodsCode) {
+        if (price == null || "".equals(price) || Double.parseDouble(price) == 0) {
+            return price;
+        }
+//		String goodsCode = getGoodsCode();
+        if (goodsCode.contains("@")) {// 期权就是坑
+            goodsCode = goodsCode.split("@")[0];
+        }
+        int decimalPlace = /*GlobalDataCollention.getInstance().getDecimalPlace(goodsCode)*/2;
+//		decimalPlace = decimalPlace == -1 ? getDecimalPlace() : decimalPlace;
+        return String.valueOf(Double.parseDouble(price) / Math.pow(10, decimalPlace));
+    }
+}

+ 533 - 0
RMA/chart/src/main/java/com/desfate/chart/ui/old/OTC/datas/QuoteTikPart.java

@@ -0,0 +1,533 @@
+package com.desfate.chart.ui.old.OTC.datas;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class QuoteTikPart implements Parcelable {
+
+	/// <summary>
+	/// 无法识别
+	/// </summary>
+	public final static int None = 0;
+	/// <summary>
+	/// 单笔行情的分隔符
+	/// </summary>
+	public final static byte PriceSplit = '';
+	/// <summary>
+	/// 字段分隔符
+	/// </summary>
+	public final static byte FieldStart = '';
+	/// <summary>
+	/// 字段值分隔符
+	/// </summary>
+	public final static byte ValueStart = '';
+
+	/// <summary>
+	/// 名称
+	/// </summary>
+	public final static byte Name = 0x20;
+	/// <summary>
+	/// 商品代码字段
+	/// </summary>
+	public final static byte GoodsCode = 0x21;
+	/// <summary>
+	/// 结算商品组
+	/// </summary>
+	public final static byte SettlementGroup = 0x22;
+	/// <summary>
+	/// 结算Id
+	/// </summary>
+	public final static byte SettlementId = 0x23;
+	/// <summary>
+	/// 现价
+	/// </summary>
+	public final static byte Last = 0x24;
+	/// <summary>
+	/// 现量
+	/// </summary>
+	public final static byte LastVolume = 0x25;
+	/// <summary>
+	/// 现额
+	/// </summary>
+	public final static byte LastTurnover = 0x26;
+	/// <summary>
+	/// 现手
+	/// </summary>
+	public final static byte LastLot = 0x27;
+	/// <summary>
+	/// 总量
+	/// </summary>
+	public final static byte TotalVolume = 0x28;
+	/// <summary>
+	/// 总额
+	/// </summary>
+	public final static byte TotalTurnover = 0x29;
+	/// <summary>
+	/// 总手
+	/// </summary>
+	public final static byte TotalLot = 0x2A;
+
+	/// <summary>
+	/// 昨收
+	/// </summary>
+	public final static char PreClose = '+';
+	/// <summary>
+	/// 最高
+	/// </summary>
+	public final static char Highest = ',';
+	/// <summary>
+	/// 最低
+	/// </summary>
+	public final static char Lowest = '-';
+	/// <summary>
+	/// 开盘价
+	/// </summary>
+	public final static char Opened = '.';
+	/// <summary>
+	/// 收盘价
+	/// </summary>
+	public final static byte Closed = 0x2F;
+	/// <summary>
+	/// 历史最高
+	/// </summary>
+	public final static byte LifeHigh = 0x30;
+	/// <summary>
+	/// 历史最低
+	/// </summary>
+	public final static byte LifeLow = 0x31;
+	/// <summary>
+	/// 昨结算
+	/// </summary>
+	public final static byte PreSettle = 0x32;
+	/// <summary>
+	/// 结算价
+	/// </summary>
+	public final static byte Settle = 0x33;
+	/// <summary>
+	/// 均价
+	/// </summary>
+	public final static byte Average = 0x34;
+	/// <summary>
+	/// 涨停价
+	/// </summary>
+	public final static byte LimitHigh = 0x35;
+	/// <summary>
+	/// 跌停价
+	/// </summary>
+	public final static byte LimitLow = 0x36;
+
+	/// <summary>
+	/// 市盈率2
+	/// </summary>
+	public final static byte PE1 = 0x37;
+	/// <summary>
+	/// 市盈率2
+	/// </summary>
+	public final static byte PE2 = 0x38;
+	/// <summary>
+	/// 涨跌值(离上一笔)
+	/// </summary>
+	public final static byte Change = 0x39;
+	/// <summary>
+	/// 涨跌值(离开盘)
+	/// </summary>
+	public final static byte ChangeFromOpen = 0x3A;
+	/// <summary>
+	/// 涨跌幅
+	/// </summary>
+	public final static byte ChangePercent = 0x3B;
+	/// <summary>
+	/// 昨持仓
+	/// </summary>
+	public final static byte PreHoldVolume = 0x3C;
+	/// <summary>
+	/// 增仓
+	/// </summary>
+	public final static byte HoldIncrement = 0x3D;
+	/// <summary>
+	/// 昨日虚实
+	/// </summary>
+	public final static byte PreDelta = 0x3E;
+	/// <summary>
+	/// 虚实
+	/// </summary>
+	public final static byte Delta = 0x3F;
+
+	/// <summary>
+	/// 日期
+	/// </summary>
+	public final static byte Date = '@';
+	/// <summary>
+	/// 时间
+	/// </summary>
+	public final static byte Time = 'A';
+	/// <summary>
+	/// 买价
+	/// </summary>
+	public final static byte Bid = 'B';
+	/// <summary>
+	/// 买价2
+	/// </summary>
+	public final static byte Bid2 = 'C';
+	/// <summary>
+	/// 买价3
+	/// </summary>
+	public final static byte Bid3 = 'D';
+	/// <summary>
+	/// 买价4
+	/// </summary>
+	public final static byte Bid4 = 'E';
+	/// <summary>
+	/// 买价5
+	/// </summary>
+	public final static byte Bid5 = 'F';
+	/// <summary>
+	/// 买量
+	/// </summary>
+	public final static byte BidVolume = 'G';
+	/// <summary>
+	/// 买量2
+	/// </summary>
+	public final static byte BidVolume2 = 'H';
+	/// <summary>
+	/// 买量3
+	/// </summary>
+	public final static byte BidVolume3 = 'I';
+	/// <summary>
+	/// 买量4
+	/// </summary>
+	public final static byte BidVolume4 = 'J';
+	/// <summary>
+	/// 买量5
+	/// </summary>
+	public final static byte BidVolume5 = 'K';
+	/// <summary>
+	/// 卖价
+	/// </summary>
+	public final static byte Ask = 'L';
+	/// <summary>
+	/// 卖价2
+	/// </summary>
+	public final static byte Ask2 = 'M';
+	/// <summary>
+	/// 卖价3
+	/// </summary>
+	public final static byte Ask3 = 'N';
+	/// <summary>
+	/// 卖价4
+	/// </summary>
+	public final static byte Ask4 = 'O';
+	/// <summary>
+	/// 卖价5
+	/// </summary>
+	public final static byte Ask5 = 'P';
+	/// <summary>
+	/// 卖量
+	/// </summary>
+	public final static byte AskVolume = 'Q';
+	/// <summary>
+	/// 卖量2
+	/// </summary>
+	public final static byte AskVolume2 = 'R';
+	/// <summary>
+	/// 卖量3
+	/// </summary>
+	public final static byte AskVolume3 = 'S';
+	/// <summary>
+	/// 卖量4
+	/// </summary>
+	public final static byte AskVolume4 = 'T';
+	/// <summary>
+	/// 卖量5
+	/// </summary>
+	public final static byte AskVolume5 = 'U';
+	/// <summary>
+	/// 交易所代码
+	/// </summary>
+	public final static byte ExchangeCode = 0x56;
+	/// <summary>
+	/// 商品组
+	/// </summary>
+	public final static byte GoodsGroupCode = 0x57;
+	/// <summary>
+	/// 小数位
+	/// </summary>
+	public final static byte DecimalPlace = 0x58;
+	/// <summary>
+	/// 买委托队列
+	/// </summary>
+	public final static byte BidQueueInfo = 0x59;
+	/// <summary>
+	/// 卖委托队列
+	/// </summary>
+	///
+	public final static byte AskQueueInfo = 0x5A;
+	/// <summary>
+	/// 持仓
+	/// </summary>
+	public final static byte HoldVolume = 0x5B;
+	/// <summary>
+	/// 行使价  行权价
+	/// </summary>
+	public final static byte Strike = 0x5C;
+	/// <summary>
+	/// 拟开盘价
+	/// </summary>
+	public final static byte CalcOpen = 0x5D;
+
+	/// <summary>
+	/// 开盘买入价
+	/// </summary>
+	public final static byte BidOpen = 0x60;
+	/// <summary>
+	/// 收盘买入价
+	/// </summary>
+	public final static byte BidClose = 0x61;
+	/// <summary>
+	/// 昨日总成交额
+	/// </summary>
+	public final static byte PreTotalTurnover = 0x62;
+	/// <summary>
+	/// 交易撤出价
+	/// </summary>
+	public final static byte TradeCancel = 0x63;
+	/// <summary>
+	/// 交易撤出量
+	/// </summary>
+	public final static byte TradeCancelVolume = 0x64;
+	/// <summary>
+	/// 预计平均结算价
+	/// </summary>
+	public final static byte EAS = 0x65;
+	/// <summary>
+	/// 收盘卖出价
+	/// </summary>
+	public final static byte AskClose = 0x66;
+	/// <summary>
+	/// 最高卖出价
+	/// </summary>
+	public final static byte AskHigh = 0x67;
+	/// <summary>
+	/// 最低卖出价
+	/// </summary>
+	public final static byte AskLow = 0x68;
+	/// <summary>
+	/// 昨收卖出价
+	/// </summary>
+	public final static byte AskPreClose = 0x69;
+	/// <summary>
+	/// 开盘卖出价
+	/// </summary>
+	public final static byte AskOpen = 0x6A;
+	/// <summary>
+	/// 交易类型
+	/// </summary>
+	public final static byte TradeKind = 0x6B;
+	/// <summary>
+	/// 参考平衡价
+	/// </summary>
+	public final static byte IEP = 0x6C;
+	/// <summary>
+	/// 参考平衡量
+	/// </summary>
+	public final static byte IEV = 0x6D;
+	/// <summary>
+	/// 暗盘价
+	/// </summary>
+	public final static byte Grey = 0x6E;
+
+	/// <summary>
+	/// 买委单数
+	/// </summary>
+	public final static byte BidOrder = 0x70;
+	/// <summary>
+	/// 买委单数2
+	/// </summary>
+	public final static byte BidOrder2 = 0x71;
+	/// <summary>
+	/// 买委单数3
+	/// </summary>
+	public final static byte BidOrder3 = 0x72;
+	/// <summary>
+	/// 买委单数4
+	/// </summary>
+	public final static byte BidOrder4 = 0x73;
+	/// <summary>
+	/// 买委单数5
+	/// </summary>
+	public final static byte BidOrder5 = 0x74;
+	/// <summary>
+	/// 卖委单数
+	/// </summary>
+	public final static byte AskOrder = 0x75;
+	/// <summary>
+	/// 卖委单数2
+	/// </summary>
+	public final static byte AskOrder2 = 0x76;
+	/// <summary>
+	/// 卖委单数3
+	/// </summary>
+	public final static byte AskOrder3 = 0x77;
+	/// <summary>
+	/// 卖委单数4
+	/// </summary>
+	public final static byte AskOrder4 = 0x78;
+	/// <summary>
+	/// 卖委单数5
+	/// </summary>
+	public final static byte AskOrder5 = 0x79;
+	/// <summary>
+	/// 库存量
+	/// </summary>
+	public final static byte Inventory = 0x7a;
+	/// <summary>
+	/// 行情序号
+	/// </summary>
+	public final static byte OrderId = 0x7B;
+	//当前交易日
+	public final static byte ExchangeTime = 0x7c;
+
+    /// 为了实现挂牌期权的业务,实时行情和盘面需要增加权利金字段
+    // 认购期权权利金1
+    public final static byte CallOptionPremiums = (byte) 0x83; // 0x83
+    // 认购期权权利金2
+    public final static byte CallOptionPremiums2 = (byte) 0x84; // 0x84
+    // 认购期权权利金3
+    public final static byte CallOptionPremiums3 = (byte) 0x85; // 0x85
+    // 认购期权权利金4
+    public final static byte CallOptionPremiums4 = (byte) 0x86; // 0x86
+    // 认购期权权利金5
+    public final static byte CallOptionPremiums5 = (byte) 0x87; // 0x87
+
+    //认沽期权权利金1
+    public final static byte PutOptionPremiums = 0x7D;
+    //认沽期权权利金2
+    public final static byte PutOptionPremiums2 = 0x7E;
+    //认沽期权权利金3
+    public final static byte PutOptionPremiums3 = (byte) 0x80; // 0x80
+    //认沽期权权利金4
+    public final static byte PutOptionPremiums4 = (byte) 0x81; // 0x81
+    //认沽期权权利金5
+    public final static byte PutOptionPremiums5 = (byte) 0x82; // 0x82
+
+    //买订单号1
+    public final static byte strBidOrder = 0x70;
+    //买订单号2
+    public final static byte strBidOrder2 = 0x71;
+    //买订单号3
+    public final static byte strBidOrder3 = 0x72;
+    //买订单号4
+    public final static byte strBidOrder4 = 0x73;
+    //买订单号5
+    public final static byte strBidOrder5 = 0x74;
+
+    //卖订单号1
+    public final static byte strAskOrder = 0x75;
+    //卖订单号2
+    public final static byte strAskOrder2 = 0x76;
+    //卖订单号3
+    public final static byte strAskOrder3 = 0x77;
+    //卖订单号4
+    public final static byte strAskOrder4 = 0x78;
+    //卖订单号5
+    public final static byte strAskOrder5 = 0x79;
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDER6      =   (byte) 0xA2;                    //买卖单号
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDER7      =   (byte) 0xA3;                    //买卖单号
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDER8      =   (byte) 0xA4;                    //买卖单号
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDER9      =   (byte) 0xA5;                    //买卖单号
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDER10     =   (byte) 0xA6;                    //买卖单号
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDER6      =   (byte) 0xA7;                    //买卖单号
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDER7      =   (byte) 0xA8;                    //买卖单号
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDER8      =   (byte) 0xA9;                    //买卖单号
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDER9      =   (byte) 0xAA;                    //买卖单号
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDER10     =   (byte) 0xAB;                    //买卖单号
+
+    public final static byte MI_QUOTE_FIELD_CODE_INVENTORY             = 0x7A;                    //�ܿ����
+	public final static byte MI_QUOTE_FIELD_CODE_ORDERID               = 0x7B;
+	public final static byte MI_QUOTE_FIELD_CODE_TRADEDATE             = 0x7C;
+	public final static byte MI_QUOTE_FIELD_CODE_PUTOPTIONPREMIUMS     = 0x7D;                    //认沽期权权利金1
+	public final static byte MI_QUOTE_FIELD_CODE_PUTOPTIONPREMIUMS2    = 0x7E;                    //认沽期权权利金2
+	public final static byte MI_QUOTE_FIELD_CODE_PUTOPTIONPREMIUMS3    = (byte) 0x80;                    //认沽期权权利金3
+	public final static byte MI_QUOTE_FIELD_CODE_PUTOPTIONPREMIUMS4    = (byte) 0x81;                    //认沽期权权利金4
+	public final static byte MI_QUOTE_FIELD_CODE_PUTOPTIONPREMIUMS5    = (byte) 0x82;                    //认沽期权权利金5
+	public final static byte MI_QUOTE_FIELD_CODE_CALLOPTIONPREMIUMS    = (byte) 0x83;                    //认购期权权利金1
+	public final static byte MI_QUOTE_FIELD_CODE_CALLOPTIONPREMIUMS2   = (byte) 0x84;                    //认购期权权利金2
+	public final static byte MI_QUOTE_FIELD_CODE_CALLOPTIONPREMIUMS3   = (byte) 0x85;                    //认购期权权利金3
+	public final static byte MI_QUOTE_FIELD_CODE_CALLOPTIONPREMIUMS4   = (byte) 0x86;                    //认购期权权利金4
+	public final static byte MI_QUOTE_FIELD_CODE_CALLOPTIONPREMIUMS5   = (byte) 0x87;                    //认购期权权利金5
+	public final static byte MI_QUOTE_FIELD_CODE_NONTOTALVOLUME        = (byte) 0x88;                    //非交易成交总量
+	public final static byte MI_QUOTE_FIELD_CODE_NONTOTALHOLDERVOLUME  = (byte) 0x89;                    //非交易总持仓量
+	public final static byte MI_QUOTE_FIELD_CODE_NONTOTALTURNOVER      = (byte) 0x8A;                    //非交易成交总金额
+	public final static byte MI_QUOTE_FIELD_CODE_NONTOTALLOT           = (byte) 0x8B;                    //非交易成交总数
+	public final static byte MI_QUOTE_FIELD_CODE_MARKPRICE             = (byte) 0x8C;                    //MARKPRICE
+	public final static byte MI_QUOTE_FIELD_CODE_FUNDSRATE             = (byte) 0x8D;                    //FUNDSRATE
+
+	public final static byte MI_QUOTE_FIELD_CODE_BID6            =   (byte) 0xAC;                    //买档6
+	public final static byte MI_QUOTE_FIELD_CODE_BID7            =   (byte) 0xAD;                    //买档7
+	public final static byte MI_QUOTE_FIELD_CODE_BID8            =   (byte) 0x8E;                    //买档8
+	public final static byte MI_QUOTE_FIELD_CODE_BID9            =   (byte) 0x90;                    //买档9
+	public final static byte MI_QUOTE_FIELD_CODE_BID10           =   (byte) 0x91;                    //买档10
+	public final static byte MI_QUOTE_FIELD_CODE_BID_VOLUME6     =   (byte) 0x92;                    //买档量6
+	public final static byte MI_QUOTE_FIELD_CODE_BID_VOLUME7     =   (byte) 0x93;                    //买档量7
+	public final static byte MI_QUOTE_FIELD_CODE_BID_VOLUME8     =   (byte) 0x94;                    //买档量8
+	public final static byte MI_QUOTE_FIELD_CODE_BID_VOLUME9     =   (byte) 0x95;                    //买档量9
+	public final static byte MI_QUOTE_FIELD_CODE_BID_VOLUME10    =   (byte) 0x96;                    //买档量10
+	public final static byte MI_QUOTE_FIELD_CODE_ASK6            =   (byte) 0x97;                    //卖档6
+	public final static byte MI_QUOTE_FIELD_CODE_ASK7            =   (byte) 0x98;                    //卖档7
+	public final static byte MI_QUOTE_FIELD_CODE_ASK8            =   (byte) 0x99;                    //卖档8
+	public final static byte MI_QUOTE_FIELD_CODE_ASK9            =   (byte) 0x9A;                    //卖档9
+	public final static byte MI_QUOTE_FIELD_CODE_ASK10           =   (byte) 0x9B;                    //卖档10
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_VOLUME6     =   (byte) 0x9C;                    //卖档量6
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_VOLUME7     =   (byte) 0x9D;                    //卖档量7
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_VOLUME8     =   (byte) 0x9E;                    //卖档量8
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_VOLUME9     =   (byte) 0xA0;                    //卖档量9
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_VOLUME10    =   (byte) 0xA1;                    //卖档量10
+
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDERVOL	 = (byte) 0xAE;				//买1的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDERVOL2	 = (byte) 0xAF;				//买2的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDERVOL3	 = (byte) 0xB0;				//买3的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDERVOL4	 = (byte) 0xB1;				//买4的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDERVOL5	 = (byte) 0xB2;				//买5的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDERVOL6   =   (byte) 0xB3;                    //买6的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDERVOL7   =   (byte) 0xB4;                    //买7的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDERVOL8   =   (byte) 0xB5;                    //买8的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDERVOL9   =   (byte) 0xB6;                    //买9的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_BID_ORDERVOL10  =   (byte) 0xB7;                    //买10的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDERVOL	 = (byte) 0xB8;				//卖1的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDERVOL2	 = (byte) 0xB9;				//卖2的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDERVOL3	 = (byte) 0xBA;				//卖3的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDERVOL4	 = (byte) 0xBB;				//卖4的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDERVOL5	 = (byte) 0xBC;				//卖5的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDERVOL6   =   (byte) 0xBD;                    //卖6的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDERVOL7   =   (byte) 0xBE;                    //卖7的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDERVOL8   =   (byte) 0xBF;                    //卖8的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDERVOL9   =   (byte) 0xC0;                    //卖9的订单数量
+	public final static byte MI_QUOTE_FIELD_CODE_ASK_ORDERVOL10  =   (byte) 0xC1;                    //卖10的订单数量
+
+    protected QuoteTikPart(Parcel in) {
+    }
+
+    public static final Creator<QuoteTikPart> CREATOR = new Creator<QuoteTikPart>() {
+        @Override
+        public QuoteTikPart createFromParcel(Parcel in) {
+            return new QuoteTikPart(in);
+        }
+
+        @Override
+        public QuoteTikPart[] newArray(int size) {
+            return new QuoteTikPart[size];
+        }
+    };
+
+	@Override
+	public int describeContents() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	@Override
+	public void writeToParcel(Parcel arg0, int arg1) {
+		// TODO Auto-generated method stub
+
+	}
+}

+ 50 - 0
RMA/chart/src/main/java/com/desfate/chart/ui/old/OTC/listener/MessageingManager.java

@@ -0,0 +1,50 @@
+package com.desfate.chart.ui.old.OTC.listener;
+
+import java.util.ArrayList;
+
+/**
+ * 单利模式
+ * @author Administrator
+ */
+public class MessageingManager {
+	
+	private static MessageingManager instance = null;
+	private ArrayList<OnMessageListener> messageListeners = new ArrayList<OnMessageListener>();
+	
+	public ArrayList<OnMessageListener> getMessageListeners() {
+		return messageListeners;
+	}
+
+	public static MessageingManager getInstance() {
+		if (instance == null) {
+			instance = new MessageingManager();
+		}
+		return instance;
+	}
+	
+	private MessageingManager() {
+	}
+	
+	/**
+	 * 注册监听消息
+	 * @param messageListener
+	 */
+	public void regiter(OnMessageListener messageListener) {
+		if (messageListeners == null) {
+			messageListeners = new ArrayList<OnMessageListener>();
+		}
+		messageListeners.add(messageListener);
+	}
+	
+	/**
+	 * 反注册监听消息
+	 * @param messageListener
+	 */
+	public void unRegiter(OnMessageListener messageListener) {
+		if (messageListeners == null) {
+			messageListeners = new ArrayList<OnMessageListener>();
+		}
+		messageListeners.remove(messageListener);
+	}
+	
+}

+ 3 - 0
RMA/chart/src/main/java/com/desfate/chart/ui/old/ParamConfigData.java

@@ -46,4 +46,7 @@ public class ParamConfigData {
     //配置持仓单右键菜单是否显示全部平仓,配置0:不显示,1:显示,默认为0 292
     public static int allClose = 0;
 
+    // 是否支持挂牌转让
+    public static boolean QUOTED_TRANSFER = false;// 不用
+
 }