/// <summary>
 /// 获取多头空头状态,0:表示多头,1:表示空头;
 /// </summary>
 private int GetSideState(TradeInfo_O32 row)
 {
     switch (row.C_ENTRUST_DIRECTION)
     {
         case 'X':   // 卖出开仓,看跌
         case 'Y':   // 买入平仓,看跌
             return 1;
         case 'V':   // 买入开仓,看涨
         case 'W':   // 卖出平仓,看涨
             return 0;
         default:
             return 0;
     }
 }
 protected int GetDirection(TradeInfo_O32 row)
 {
     switch (row.C_ENTRUST_DIRECTION)
     {
         case 'X':
         case 'V': 
             return DirectionCoding.GetDirectionCode(TradeType.TRADE_FUT_OPEN);
         case 'Y':
         case 'W':
             return DirectionCoding.GetDirectionCode(TradeType.TRADE_FUT_CLOSE);
         case 'P':   // ETF基金申购
             return DirectionCoding.GetDirectionCode(TradeType.TRADE_ETF_SUBSCRIPTION);
         case 'Q':   // ETF基金赎回
             return DirectionCoding.GetDirectionCode(TradeType.TRADE_ETF_REDUMPTION);
         case 'm':   // 基金分拆
             return DirectionCoding.GetDirectionCode(TradeType.TRADE_FUND_SPLIT);
         case 'n':   // 基金合并
             return DirectionCoding.GetDirectionCode(TradeType.TRADE_FUND_MERGE);
         case 'p':   // 开基申购
             return DirectionCoding.GetDirectionCode(TradeType.TRADE_FUND_SUBSCRIPTION);
         case 'q':   // 开基赎回
             return DirectionCoding.GetDirectionCode(TradeType.TRADE_FUND_REDUMPTION);
         default:
             {
                 if (row.VC_REPORT_DIRECTION == "B" || row.VC_REPORT_DIRECTION == "0B")
                     return DirectionCoding.GetDirectionCode(TradeType.TRADE_BUY);
                 else if (row.VC_REPORT_DIRECTION == "S" || row.VC_REPORT_DIRECTION == "0S")
                     return DirectionCoding.GetDirectionCode(TradeType.TRADE_SELL);
                 else
                     return 0;
             }
     }
 }
        protected TradeRow GetTradeRow(TradeInfo_O32 row)
        {
            TradeRow info = new TradeRow();

            // 02、成交日期:
            info.Trade_Date = row.L_DATE;
            // 03、成交ID:
            info.Trade_Id = row.VC_DEAL_NO;
            // 04、证券代码:
            info.Security_Id = this.ConvertSecurityId(row);
            // 05、方向标志位:可根据平仓类型转换;
            info.Direction = this.GetDirection(row);
            // 06、数量:
            info.Volume = this.GetDouble(row.L_DEAL_AMOUNT);
            // 07、合约乘数:
            info.Multiplier = 1.0;
            // 08、多头空头状态
            info.Side = this.GetSideState(row);
            // 09、价格:
            info.Price = row.EN_DEAL_PRICE;
            // 10、金额:
            info.Balance = row.EN_DEAL_BALANCE;
            // 11、成交类型:
            info.Trade_Type = GetTradeTypeByTradeTime(row.L_BUSINESS_TIME.ToString(), 2);
            // 12、基金公司/内部融券类型
            info.Source_Type = 0;
            // 13、基金代码/账户信息
            info.Source = "";
            // 14、成交额:
            info.Turn_Over = row.EN_DEAL_BALANCE;
            // 15、前置编号:
            info.Front_Id = 0;
            // 16、会话编号:
            info.Session_Id = 0;
            // 17、本地委托编号:
            info.Local_Order_Id = "";
            // 18、项目代码:
            info.Xmdm = 0;
            // 19、资产单元:
            info.Zcdy = "";
            // 20、组合代码:
            info.Zhdm = row.VC_COMBI_NO;
            // 21、策略号:
            info.Policy_Id = 0;
            // 22、委托日期:
            info.Order_Date = row.L_DATE;
            // 23、委托编号:
            info.Order_Id = row.L_ENTRUST_SERIAL_NO != 0 ? row.L_ENTRUST_SERIAL_NO.ToString() : string.Empty;
            // 24、交易通道:
            info.Trade_Route = "";
            // 25 、经纪商席位代码:
            info.Seat_Id = row.VC_REPORT_SEAT;
            // 26、投资者客户代码:
            info.Client_Id = row.VC_STOCKHOLDER_ID;
            // 27、系统成交日期:
            info.Sys_Trade_Date = "";
            // 28、系统成交结算编号:
            info.Sys_Trade_Settlement_Id = 0;
            // 29、系统成交编号:
            info.Sys_Trade_Id = "";
            // 30、系统委托日期:
            info.Sys_Order_Date = "";
            // 31、系统委托结算编号:
            info.Sys_Order_Settlement_Id = 0;
            // 32、系统委托编号:
            info.Sys_Order_Id = "";
            // 33、成交时间:
            info.Trade_Time = row.L_BUSINESS_TIME.ToString();

            return info;
        }
 protected string ConvertSecurityId(TradeInfo_O32 row)
 {
     if (row.C_MARKET_NO == '1')
         return string.Format("{0}.SH", row.VC_REPORT_CODE);
     else if (row.C_MARKET_NO == '2')
         return string.Format("{0}.SZ", row.VC_REPORT_CODE);
     else if (row.C_MARKET_NO == '7')
         return string.Format("{0}.CFE", row.VC_REPORT_CODE);
     else
         return row.VC_REPORT_CODE;
 }
        public TradeInfo_O32 GetTradeInfo(DbDataReader reader)
        {
            TradeInfo_O32 row = new TradeInfo_O32();

            //1-10
            row.VC_STOCK_NAME = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_STOCK_NAME)));
            row.VC_THIRD_REFF = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_THIRD_REFF)));
            row.C_BUSIN_CLASS = this.GetChar(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_C_BUSIN_CLASS)));
            row.L_ENTRUST_SERIAL_NO = this.GetLong(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_L_ENTRUST_SERIAL_NO)));
            row.VC_DEAL_NO = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_DEAL_NO)));
            row.L_DATE = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_L_DATE)));
            row.L_FUND_ID = this.GetInt(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_L_FUND_ID)));
            row.VC_COMBI_NO = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_COMBI_NO)));
            row.VC_COMBI_NAME = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_COMBI_NAME)));
            row.L_BUSINESS_TIME = this.GetInt(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_L_BUSINESS_TIME)));

            // 11-20
            row.C_ENTRUST_DIRECTION = this.GetChar(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_C_ENTRUST_DIRECTION)));
            row.VC_REPORT_DIRECTION = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_REPORT_DIRECTION)));
            row.VC_ENTRUSTDIR_NAME = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_ENTRUSTDIR_NAME)));
            row.L_DEAL_AMOUNT = this.GetInt(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_L_DEAL_AMOUNT)));
            row.EN_DEAL_PRICE = this.GetDouble(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_EN_DEAL_PRICE)));
            row.EN_DEAL_BALANCE = this.GetDouble(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_EN_DEAL_BALANCE)));
            row.VC_REPORT_CODE = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_REPORT_CODE)));
            row.VC_STOCKHOLDER_ID = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_STOCKHOLDER_ID)));
            row.VC_REPORT_SEAT = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_REPORT_SEAT)));
            row.VC_OPERATOR_NAME = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_OPERATOR_NAME)));

            // 21-30
            row.VC_CURRENCY_NAME = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_CURRENCY_NAME)));
            row.C_INVEST_TYPE = this.GetChar(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_C_INVEST_TYPE)));
            row.VC_FUND_NAME = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_FUND_NAME)));
            row.VC_CURRENCY_NO_BB = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_CURRENCY_NO_BB)));
            row.EN_DEAL_BALANCE_BB = this.GetDouble(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_EN_DEAL_BALANCE_BB)));
            row.EN_DEAL_RATIO = this.GetDouble(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_EN_DEAL_RATIO)));
            row.VC_BROKER_NO = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_BROKER_NO)));
            row.VC_BROKER_NAME = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_BROKER_NAME)));
            row.VC_GROUPTYPE_NAME = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_GROUPTYPE_NAME)));
            row.VC_GROUP_NAME = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_GROUP_NAME)));


            // 31-41
            row.VC_INTERNATIONAL_CODE = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_INTERNATIONAL_CODE)));
            row.VC_RIC_CODE = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_RIC_CODE)));
            row.VC_SEDOL_CODE = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_SEDOL_CODE)));
            row.VC_CUSIP_CODE = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_CUSIP_CODE)));
            row.VC_BLOOMBERG_CODE = this.GetString(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_VC_BLOOMBERG_CODE)));
            row.L_REPORT_SERIAL_NO = this.GetLong(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_L_REPORT_SERIAL_NO)));
            row.C_MARKET_NO = this.GetChar(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_C_MARKET_NO)));
            row.EN_FULL_BALANCE = this.GetDouble(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_EN_FULL_BALANCE)));
            row.L_DIRECT_OPERATOR = this.GetInt(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_L_DIRECT_OPERATOR)));
            row.L_DIRECT_INSTEAD_OPERATOR = this.GetInt(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_L_DIRECT_INSTEAD_OPERATOR)));
            row.C_MARGINED_OUT = this.GetChar(reader.GetValue(reader.GetOrdinal(TradeInfo_O32.C_C_MARGINED_OUT)));

            return row;
        }