zoukankan      html  css  js  c++  java
  • 联系

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace RiskVarComputeDescription
    {
    class Program
    {
    static void Main(string[] args)
    {
    
    
    #region 第0步 (界面数据 输入)数据准备
    //Dictionary<string, int> progressList = new Dictionary<string, int>();
    //Dictionary<string, object> dic = SpringCache.Get("RiskBookComputeModel") as Dictionary<string, object>;
    //Risk_Group_Type riskGroupType = Risk_Group_Type.Risk_Group_Type;
    ////模拟天数
    //int timeHorizon = 1;
    ////计算天数
    //int periodLength = 1;
    ////时间间隔
    //int dateTimeSpan = 1;
    ////样本长度
    //int windowSize = 30;
    ////模拟次数
    //int simulationNumber = 100;
    ////直方图分隔次数
    //int tickNumber = 30;
    ////好像是调用蒙特卡罗的结果次数
    //int resultNumber = 5;
    //IList list = Dao.FindList(new QueryInfo("RskBook"));
    //int riskBookId = int.Parse((list[1] as RskBook).Id);
    ////风险模型 蒙特卡罗,方差协方差等等
    //int riskModelTypeID = (int)((Dao.FindById(typeof(RskBook), dic["riskBookId"].ToString(), null, null) as RskBook).RSKModelType);
    ////当使用蒙特卡罗模型时 模拟次数需>=1
    //if (riskModelTypeID == (int)Risk_Model_Type.Risk_Model_Type_Monte_Carlo && simulationNumber == 0)
    //{
    // Utility.JSUtil.ExecuteScript(string.Format(" $.messager.alert('操作提示', '{0}')", "蒙特卡罗模拟法至少需要模拟一次!输入参数有误!"));
    // return;
    //}
    ////当使用方差协方差模型时 模拟次数置为0 
    //if (riskModelTypeID == (int)Risk_Model_Type.Risk_Model_Type_Parametric)
    //{
    // if (dic != null && dic.Keys.Count > 0)
    // {
    // dic["simulationNumber"] = 0;
    // }
    // simulationNumber = 0;
    
    //}
    ////衰减因子
    //double decayFactor = 1.0;
    ////时间步长
    //double timeStepLength = 1;
    //DateTime computeDate = dic == null ? DateTime.Now : (DateTime)dic["computeDate"];
    //ShockInputData shockInputData = new ShockInputData();
    ////是否进行压力测试
    //shockInputData.ShockFlag = false;
    ////价格变化类型 默认值
    //shockInputData.ShockTypeID = Constants.DefaultSetting.ShockType;
    ////压力测试数值类型 绝对值/百分比
    //shockInputData.ShockValueTypeID = Constants.DefaultSetting.ShockValueType;
    ////价格变化模式 加上、减去、乘上等等
    //shockInputData.ShockModeID = Constants.DefaultSetting.ShockMode;
    ////压力测试 冲击值
    //shockInputData.ShockValue = Constants.DefaultSetting.ShockValue;
    
    ////获取计算参数 其实就是要算哪几个步骤和进度条的步骤相关
    //List<string> RskBookConfigParameterList = (List<string>)SpringCache.Get("RskBookConfigParameterList");
    #endregion
    
    #region 第1步 CashflowGenerationService.GenerateTransactionCashflowByDatesWithShock(computeDate, computeDate, computeDate, computeDate, shockInputData, Result_Use_Type.Result_Use_Type_EOD_Process);
    //1.计算当天的现金流(CashflowGenerationService)(从TranBond,TranForward,TranSwap构造新的现金流 )
    //传入条件 close_date,投资组合PortfolioIds(从BasPortfolio的全部记录来)
    
    #region 定义 ShockInputData 
    //定义 ShockInputData 
    //shockInputData = new ShockInputData();
    ////是否进行压力测试
    //shockInputData.ShockFlag = false;
    ////价格变化类型 默认值
    //shockInputData.ShockTypeID = Constants.DefaultSetting.ShockType;
    ////压力测试数值类型 绝对值/百分比
    //shockInputData.ShockValueTypeID = Constants.DefaultSetting.ShockValueType;
    ////价格变化模式 加上、减去、乘上等等
    //shockInputData.ShockModeID = Constants.DefaultSetting.ShockMode;
    ////压力测试 冲击值
    //shockInputData.ShockValue = Constants.DefaultSetting.ShockValue;
    
    #endregion
    
    #region 从TranBond,TranForward,TranSwap构造新的现金流sql
    // select
    // st.transaction_id
    // ,st.transaction_side_id
    // ,st.transaction_leg_id
    // ,st.transaction_reset_id
    // ,bondd.bond_sub_id transaction_sub_id
    // , bond.internal_legal_entity_id int_legal_entity_id
    // , bond.internal_business_unit_id int_business_unit_id
    // , bond.portfolio_id portfolio_id
    // , bond.counterparty_id
    // ,bond.instrument_type_id
    // ,bond.trader_id
    // ,bond.direction
    // ,nvl(bond.payment_currency, 'CNY') payment_currency
    // ,bondd.notional_volume trade_quantity
    // , nvl(bondd.volume_measure_unit, 0) volume_measure_unit
    // ,ipc.index_price_curve_id
    // ,ipf.index_price_factor_id
    // ,ipf.index_price_factor_id fx_rate_curve_id
    // , rf.risk_factor_id
    // ,rf.factor_type factor_type_id
    // ,1.0 index_scale_factor
    // ,1.0 conversion_factor
    // ,0 index_spread
    // ,'CNY' index_spread_currency
    // ,0 index_spread_measure_unit
    // ,0 fixed_price_rate
    // ,'CNY' fixed_price_currency
    // ,0 fixed_price_measure_unit
    // ,0 charge
    // ,'CNY' charge_currency
    // ,bond.pricing_model_id
    // ,ipc.yield_rate_curve_id
    // ,bond.transaction_date trade_date
    // , st.reset_date
    // ,st.payment_date
    // ,st.settlement_start_date settle_date
    // , st.accrual_start_date value_date
    // , st.accrual_start_date start_date
    // , st.averaging_end_date end_date
    // , nvl(ipmd.middle_price_value, 0) middle_price_value
    // --,nvl(yrcd.zero_rate_value, 0.05) zero_rate_value
    // ,0.05 zero_rate_value
    // ,1.0 fx_rate_value
    // --,nvl(yrcd.discount_factor, 1) discount_factor
    // ,1.0 discount_factor
    // from tran_structure st inner join tran_bond bond on bond.bond_id = st.transaction_id
    // inner join tran_bond_detail bondd on bondd.bond_id = bond.bond_id and bondd.bond_sub_id = st.transaction_sub_id
    // inner join bas_product_group bpg on bpg.source_product_id = bondd.rate_curve_id
    // inner join rsk_factor_product_mapping rfpm on rfpm.product_group_id = bpg.product_group_id
    // inner join mkt_index_price_factor ipf on ipf.index_price_factor_id = rfpm.index_price_factor_id
    // inner join rsk_factor rf on rf.index_price_factor_id = ipf.index_price_factor_id and rfpm.risk_factor_id = rf.risk_factor_id
    // inner join mkt_index_price_curve ipc on ipc.index_price_curve_id = ipf.index_price_curve_id
    // inner join mkt_yield_rate_curve yrc on yrc.yield_rate_curve_id = ipc.yield_rate_curve_id
    // inner join mkt_price_market_data ipmd on ipmd.index_price_factor_id = ipf.index_price_factor_id
    // and bond.portfolio_id in(2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,4418,7000084) and ipmd.close_date = to_date('2016/4/29', 'yyyy/mm/dd') union all
    // select
    // st.transaction_id
    // ,st.transaction_side_id
    // ,st.transaction_leg_id
    // ,st.transaction_reset_id
    // ,swapd.swap_sub_id transaction_sub_id
    // , swap.internal_legal_entity_id int_legal_entity_id
    // , swap.internal_business_unit_id int_business_unit_id
    // , swap.portfolio_id portfolio_id
    // , swap.counterparty_id
    // ,swap.instrument_type_id
    // ,swap.trader_id
    // ,swap.direction
    // ,nvl(swap.payment_currency, 'CNY') payment_currency
    // ,swapd.trade_quantity
    // ,nvl(swapd.volume_measure_unit, 0) volume_measure_unit
    // ,ipc.index_price_curve_id
    // ,ipf.index_price_factor_id
    // ,ipf.index_price_factor_id fx_rate_curve_id
    // , rf.risk_factor_id
    // ,rf.factor_type factor_type_id
    // , nvl(swapd.index_scale_factor, 1.0) index_scale_factor
    // ,nvl(swapd.conversion_factor, 1.0) conversion_factor
    // ,nvl(swapd.index_spread, 0) index_spread
    // , nvl(swapd.index_spread_currency, 'CNY') index_spread_currency
    // , nvl(swapd.index_spread_measure_unit, 0) index_spread_measure_unit
    // , swapd.fixed_price_rate
    // , nvl(swapd.fixed_price_currency, 'CNY') fixed_price_currency
    // , nvl(swapd.fixed_price_measure_unit, 0) fixed_price_measure_unit
    // , nvl(swap.charge, 0) charge
    // , nvl(swap.charge_currency, 'CNY') charge_currency
    // , swap.pricing_model_id
    // , ipc.yield_rate_curve_id
    // , swap.transaction_date trade_date
    // , st.reset_date
    // , st.payment_date
    // , st.settlement_start_date settle_date
    // , st.accrual_start_date value_date
    // , st.accrual_start_date start_date
    // , st.averaging_end_date end_date
    // , nvl(ipmd.middle_price_value, 0) middle_price_value
    // --, nvl(yrcd.zero_rate_value, 0.05) zero_rate_value
    // , 0.05 zero_rate_value
    // , 1.0 fx_rate_value
    // --, nvl(yrcd.discount_factor, 1) discount_factor
    // , 1.0 discount_factor
    // from tran_structure st inner
    // join tran_swap swap on swap.swap_id = st.transaction_id
    
    //inner
    // join tran_swap_detail swapd on swapd.swap_id = swap.swap_id and swapd.swap_sub_id = st.transaction_sub_id
    // inner join mkt_index_price_factor ipf on ipf.index_price_factor_id = swapd.index_price_curve_id
    // inner join mkt_index_price_curve ipc on ipc.index_price_curve_id = ipf.index_price_curve_id
    // inner join mkt_yield_rate_curve yrc on yrc.yield_rate_curve_id = ipc.yield_rate_curve_id
    // inner join rsk_factor rf on ipf.index_price_factor_id = rf.index_price_factor_id
    // inner join mkt_price_market_data ipmd on ipmd.index_price_factor_id = ipf.index_price_factor_id
    
    // and swap.portfolio_id in(2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 4418, 7000084) and ipmd.close_date = to_date('2016/4/29', 'yyyy/mm/dd') union all
    // select
    // st.transaction_id
    // ,st.transaction_side_id
    // ,st.transaction_leg_id
    // ,st.transaction_reset_id
    // ,fwdd.forward_sub_id transaction_sub_id
    // , fwd.internal_legal_entity_id int_legal_entity_id
    // , fwd.internal_business_unit_id int_business_unit_id
    // , fwd.portfolio_id portfolio_id
    // , fwd.counterparty_id
    // ,fwd.instrument_type_id
    // ,fwd.trader_id
    // ,fwd.direction
    // ,nvl(fwd.payment_currency, 'CNY') payment_currency
    // ,fwdd.trade_quantity
    // ,nvl(fwdd.volume_measure_unit, 0) volume_measure_unit
    // ,ipc.index_price_curve_id
    // ,ipf.index_price_factor_id
    // ,ipf.index_price_factor_id fx_rate_curve_id
    // , rf.risk_factor_id
    // ,rf.factor_type factor_type_id
    // , nvl(fwdd.index_scale_factor, 1.0) index_scale_factor
    // ,nvl(fwdd.conversion_factor, 1.0) conversion_factor
    // ,nvl(fwdd.index_spread, 0) index_spread
    // ,nvl(fwdd.index_spread_currency, 'CNY') index_spread_currency
    // ,nvl(fwdd.index_spread_measure_unit, 0) index_spread_measure_unit
    // ,fwdd.fixed_price_rate
    // ,nvl(fwdd.fixed_price_currency, 'CNY') fixed_price_currency
    // ,nvl(fwdd.fixed_price_measure_unit, 0) fixed_price_measure_unit
    // ,nvl(fwd.charge, 0) charge
    // ,nvl(fwd.charge_currency, 'CNY') charge_currency
    // ,fwd.pricing_model_id
    // ,ipc.yield_rate_curve_id
    // ,fwd.transaction_date trade_date
    // , st.reset_date
    // ,st.payment_date
    // ,st.settlement_start_date settle_date
    // , st.accrual_start_date value_date
    // , st.accrual_start_date start_date
    // , st.averaging_end_date end_date
    // , nvl(ipmd.middle_price_value, 0) middle_price_value
    // --,nvl(yrcd.zero_rate_value, 0.05) zero_rate_value
    // ,0.05 zero_rate_value
    // ,1.0 fx_rate_value
    // --,nvl(yrcd.discount_factor, 1) discount_factor
    // ,1.0 discount_factor
    // from tran_structure st inner join tran_forward fwd on fwd.forward_id = st.transaction_id
    // inner join tran_forward_detail fwdd on fwdd.forward_id = fwd.forward_id and fwdd.forward_sub_id = st.transaction_sub_id
    // inner join mkt_index_price_factor ipf on ipf.index_price_factor_id = fwdd.index_price_curve_id
    // inner join mkt_index_price_curve ipc on ipc.index_price_curve_id = ipf.index_price_curve_id
    // inner join mkt_yield_rate_curve yrc on yrc.yield_rate_curve_id = ipc.yield_rate_curve_id
    // inner join rsk_factor rf on ipf.index_price_factor_id = rf.index_price_factor_id
    // inner join mkt_price_market_data ipmd on ipmd.index_price_factor_id = ipf.index_price_factor_id
    
    // and fwd.portfolio_id in(2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,4418,7000084) and ipmd.close_date = to_date('2016/4/29', 'yyyy/mm/dd') 
    #endregion
    
    #region 上面sql结果映射到下面的list中去
    //上面sql结果映射到下面的list中去
    // IList<TransactionBaseCashflowView> cashFlowVwList = tranCashFlowService.GetBaseListByDatesPortfolioIDsWithSpringDao(asOfDate1, asOfDate2, asOfDate3, portfolioIDs); 
    #endregion
    
    #region 然后按照投资组合PortfolioIds进行分组
    // 然后按照投资组合PortfolioIds进行分组
    // var transBaseVws = from tv in transactionBaseCashflowViewList
    // group tv by tv.PortfolioID into g
    // select new { portfolioID = g.Key, transBaseViewList = g }; 
    #endregion
    
    
    #region 定义 trancashflowHashtable, transensitivehastable, riskdletapositionHashtable
    // var trancashflowHashtable = new hashtable();
    // var transensitivehastable = new hastable();
    // var riskdletapositionHashtable = new hashtable(); 
    //}
    #endregion
    
    
    #region 每种投资组合的现金数据分配到 trancashflowHashtable, transensitivehastable, riskdletapositionHashtable
    // foreach (var transBaseVw in transBaseVws)
    // {
    // //transBaseVwList代表每一个投资组合的市场数据情况
    // List<TransactionBaseCashflowView> transBaseVwList = = transBaseVw.transBaseViewList.ToList<TransactionBaseCashflowView>();
    // 循环中调用下面这个方法的(GenerateTransactionCashflowFromBaseByDateWithShock1((computeDate, transBaseVwList, shockInputData, resultUseType, ref dics))),
    // 产生每个投资组合的tranCashflowList, tranSensitivityList, riskDeltaPositionList 进行返回放到三个hashtable 中
    // Trancashflowhashtable.add(trancahsflowlist);
    // Transensitivehashtable.add(transensitivelist);
    // Riskdeltapostionhastable.add(riskdeltapositionlist);
    //
    
    #region GenerateTransactionCashflowFromBaseByDateWithShock1方法
    //public void GenerateTransactionCashflowFromBaseByDateWithShock1(DateTime computeDate,
    // List<TransactionBaseCashflowView> tranBaseCashflowViewList,
    // ShockInputData shockInputData,
    // Result_Use_Type resultUseType,
    // ref Dictionary<string, IList> dics)
    // {
    // IList<TranCashFlow> tranCashflowList = new List<TranCashFlow>();
    // IList<TranSensitivity> tranSensitivityList = new List<TranSensitivity>();
    // TranCashFlow tranCashflow = new TranCashFlow();
    // IList<RskDeltaPosition> riskDeltaPositionList = new List<RskDeltaPosition>();
    // //RskDeltaPosition riskDeltaPosition = new RskDeltaPosition();
    // //寻找离到期日最近的交易日日期 (其实就是上一次的交易日期)
    // 方法的定义如下
    #region GetBestPriorBusinessDate 方法
    // public DateTime GetBestPriorBusinessDate(DateTime asOfDate, int periodLength)
    // {
    // DateTime bestPriorBusinessDate = DateTime.Today;
    
    // for (int i = 1; i < periodLength + 1; i++)
    // {
    // if (IsBusinessDate(asOfDate.AddDays(-i)))
    // {
    // bestPriorBusinessDate = asOfDate.AddDays(-i);
    
    // break;
    // }
    // }
    
    // return bestPriorBusinessDate;
    // } 
    #endregion
    
    // DateTime bestPriorBusinessDate = businessDateService.GetBestPriorBusinessDate(computeDate, Constants.DAYS_BACK_FOR_BUSINESS_DATE);
    
    
    // DateTime startDate = computeDate;
    // if (resultUseType == Result_Use_Type.Result_Use_Type_Price_Impact_Analysis
    // || resultUseType == Result_Use_Type.Result_Use_Type_IR_Rate_Impact_Analysis
    // || resultUseType == Result_Use_Type.Result_Use_Type_FX_Rate_Impact_Analysis)
    // {
    // startDate = bestPriorBusinessDate;
    // }
    
    // decimal numberOfYear = 0.0m;
    // decimal sumOfCashflowPeriod = 0.0m;
    // decimal bondPrice = 0.0m;
    // decimal duration = 0.0m;
    
    // decimal deltaVolume = 0.0m;
    // decimal deltaPosition = 0.0m;
    // decimal deltaPositionForIR = 0.0m;
    // decimal deltaPositionForFX = 0.0m;
    // decimal deltaPositionForEQ = 0.0m;
    // decimal deltaPositionForCOM = 0.0m;
    // int k = 0;
    // foreach (TransactionBaseCashflowView tranBaseCashflowView in tranBaseCashflowViewList)
    // {
    // RskDeltaPosition riskDeltaPosition = new RskDeltaPosition();
    
    // CashflowDataInputDO cashflowInputData = new CashflowDataInputDO();
    
    
    // cashflowInputData.TransactionSideID = tranBaseCashflowView.TransactionSideID;
    // cashflowInputData.Derivative_Type = tranBaseCashflowView.Derivative_Type;
    // cashflowInputData.InstrumentTypeID = (int)tranBaseCashflowView.InstrumentTypeID;
    // cashflowInputData.DirectionID = tranBaseCashflowView.DirectionID;
    // cashflowInputData.TradeQuantity = (double)tranBaseCashflowView.TradeQuantity;
    // cashflowInputData.IndexPriceRate = (double)tranBaseCashflowView.IndexPriceRate;
    // cashflowInputData.ZeroRateValue = (double)tranBaseCashflowView.ZeroRateValue;
    // cashflowInputData.FXRateValue = (double)tranBaseCashflowView.FXRateValue;
    // cashflowInputData.IndexSpread = (double)tranBaseCashflowView.IndexSpread;
    // cashflowInputData.IndexScaleFactor = (double)tranBaseCashflowView.IndexScaleFactor;
    // cashflowInputData.ConversionFactor = (double)tranBaseCashflowView.ConversionFactor;
    // cashflowInputData.FixedPriceRate = (double)tranBaseCashflowView.FixedPriceRate;
    // // 从现在到支付日的天数
    // cashflowInputData.DaysToPayment = (int)tranBaseCashflowView.PaymentDate.Subtract(startDate).Days;
    
    // //如果daystopayment<0说明已经到期,不进行计算
    // if (cashflowInputData.DaysToPayment <= 0)
    // {
    // continue;
    // }
    
    //tranCashflow = ComputeCashflowBySideIDWithShock(cashflowInputData, shockInputData, resultUseType);
    #region ComputCashflowBySideIDWithShock方法的定义 产生trancashflow
    ////ComputCashflowBySideIDWithShock方法的定义 start
    //private TranCashFlow ComputeCashflowBySideIDWithShock(CashflowDataInputDO cashflowInputData,
    // //int transactionSideID, 
    // //int directionLookupID,
    // //double tradeQuantity,
    // //double indexPriceRate,
    // //double zeroRateValue,
    // //double fxRateValue,
    // //double indexSpread,
    // //double indexScaleFactor,
    // //double conversionFactor,
    // //double fixedPriceRate,
    // //int daysToPayment,
    
    
    // ShockInputData shockInputData,
    // Result_Use_Type resultUseType)
    //{
    
    // //LOG.Warn(string.Format("In ComputeCashflowBySideIDWithShock() , {0}", DateTime.Now));
    
    
    // TranCashFlow tranCashflow = new TranCashFlow();
    
    
    // ;
    
    // string BUY = ConstEnum.BuyOrSell.买.ToString();
    // string SELL = ConstEnum.BuyOrSell.卖.ToString();
    // string FLOAT = ConstEnum.fixedOrfloat.浮动.ToString();
    // string FIXED = ConstEnum.fixedOrfloat.固定.ToString();
    // string RECEIVE = ConstEnum.PayOrReceive.收款.ToString();
    // string PAY = ConstEnum.PayOrReceive.付款.ToString();
    // string LONG = ConstEnum.LongOrShort.多头.ToString();
    // string SHORT = ConstEnum.LongOrShort.空头.ToString();
    
    // int directionSign = 1;
    // //int buyOrSellLookupID = BUY;
    // //int fixedOrFloatLookupID = FLOAT;
    // //int payOrReceiveLookupID = RECEIVE;
    // //int longOrShortLookupID = LONG;
    
    // string buyOrSell = BUY;
    // string fixedOrFloat = FLOAT;
    // string payOrReceive = RECEIVE;
    // string longOrShort = LONG;
    
    // double discountFactor = Constants.DefaultSetting.BaseDiscountFactorValue;
    // double unsettledVolume = 0;
    // double resetPriceRate = 0;
    // double cashflowValue = 0;
    // double discountedCashflow = 0;
    // double riskPosition = 0;
    // double interestRateRiskPosition = 0;
    // double fxRateRiskPosition = 0;
    
    
    // int transactionSideID = cashflowInputData.TransactionSideID;
    // int directionID = cashflowInputData.DirectionID;
    // double tradeQuantity = cashflowInputData.TradeQuantity;
    // double indexPriceRate = cashflowInputData.IndexPriceRate;
    // double zeroRateValue = cashflowInputData.ZeroRateValue;
    // double fxRateValue = cashflowInputData.FXRateValue;
    // double indexSpread = cashflowInputData.IndexSpread;
    // double indexScaleFactor = cashflowInputData.IndexScaleFactor;
    // double conversionFactor = cashflowInputData.ConversionFactor;
    // double fixedPriceRate = cashflowInputData.FixedPriceRate;
    // int daysToPayment = cashflowInputData.DaysToPayment;
    
    // double shockValue = shockInputData.ShockValue;
    
    // resetPriceRate = (indexPriceRate * indexScaleFactor + indexSpread) * conversionFactor;
    
    // if (transactionSideID == 0)
    // {
    // fixedOrFloat = FLOAT;
    
    // if (directionID == (int)Direction.Direction_Buy)
    // {
    // directionSign = 1;
    // buyOrSell = Direction.Direction_Buy.GetEnumDefaultName();
    // payOrReceive = Pay_Or_Receive.Pay_Or_Receive_Receive.GetEnumDefaultName();
    // longOrShort = Long_Or_Short.Long_Or_Short_Long.GetEnumDefaultName();
    // }
    // else if (directionID == (int)Direction.Direction_Sale)
    // {
    // directionSign = -1;
    // buyOrSell = Direction.Direction_Sale.GetEnumDefaultName();
    // payOrReceive = Pay_Or_Receive.Pay_Or_Receive_Pay.GetEnumDefaultName(); ;
    // longOrShort = Long_Or_Short.Long_Or_Short_Short.GetEnumDefaultName();
    // }
    // }
    // else if (transactionSideID == 1)
    // {
    // fixedOrFloat = FIXED; //To be updated, e.g., for float/float swap, it could by float;
    
    // discountFactor = 1.0;
    
    // if (directionID == (int)Direction.Direction_Buy)
    // {
    // directionSign = -1;
    // buyOrSell = Direction.Direction_Sale.GetEnumDefaultName();
    // payOrReceive = Pay_Or_Receive.Pay_Or_Receive_Pay.GetEnumDefaultName(); ;
    // longOrShort = Long_Or_Short.Long_Or_Short_Short.GetEnumDefaultName();
    // }
    // else if (directionID == (int)Direction.Direction_Sale)
    // {
    // directionSign = 1;
    // buyOrSell = Direction.Direction_Buy.GetEnumDefaultName();
    // payOrReceive = Pay_Or_Receive.Pay_Or_Receive_Receive.GetEnumDefaultName();
    // longOrShort = Long_Or_Short.Long_Or_Short_Long.GetEnumDefaultName();
    // }
    
    // if (fixedOrFloat == FIXED)
    // {
    // resetPriceRate = fixedPriceRate;
    // }
    
    // }
    
    // if (shockInputData.ShockFlag)
    // {
    // if (fixedOrFloat == FLOAT)
    // {
    // if (shockInputData.ShockValueType == Shock_Value_Type.Shock_Value_Type_Absolute)
    // {
    // if (shockInputData.ShockMode == Shock_Mode.Shock_Mode_Add)
    // {
    // indexPriceRate = indexPriceRate + shockValue;
    // }
    // else if (shockInputData.ShockMode == Shock_Mode.Shock_Mode_Subtract)
    // {
    // indexPriceRate = indexPriceRate - shockValue;
    // }
    // else if (shockInputData.ShockMode == Shock_Mode.Shock_Mode_Multiply)
    // {
    // indexPriceRate = indexPriceRate * shockValue;
    // }
    // }
    // else if (shockInputData.ShockValueType == Shock_Value_Type.Shock_Value_Type_Per)
    // {
    // if (shockInputData.ShockMode == Shock_Mode.Shock_Mode_Add)
    // {
    // indexPriceRate = indexPriceRate * (1.0 + shockValue / 100.0);
    // }
    // else if (shockInputData.ShockMode == Shock_Mode.Shock_Mode_Subtract)
    // {
    // indexPriceRate = indexPriceRate * (1.0 - shockValue / 100.0);
    
    // if (shockValue / 100.0 >= 1.0)
    // {
    // indexPriceRate = 0.0;
    
    // //Throw Warning Here !!
    // }
    // }
    // }
    
    // resetPriceRate = (indexScaleFactor * indexPriceRate + indexSpread) * conversionFactor;
    // }
    // }
    
    // //if (resultUseTypeID != (int)SysEnum.Result_Use_Type_Time_Impact_Analysis)
    // //{
    // // daysToPayment = daysToPayment + 1;
    // //}
    
    // discountFactor = Math.Exp(-zeroRateValue * daysToPayment / Constants.DefaultSetting.YearDays); // need to consider time to pay at payment date
    
    // unsettledVolume = directionSign * Math.Abs(tradeQuantity);
    // cashflowValue = unsettledVolume * resetPriceRate * fxRateValue;
    // discountedCashflow = cashflowValue * discountFactor;
    
    // riskPosition = unsettledVolume * resetPriceRate;
    // interestRateRiskPosition = unsettledVolume * resetPriceRate * fxRateValue;
    // fxRateRiskPosition = unsettledVolume * resetPriceRate * discountFactor;
    // //volatilityRiskPosition = unsettledVolume * discountFactor * indexScaleFactor * conversionFactor;
    
    // tranCashflow.TransactionSideId = transactionSideID;
    // tranCashflow.BuyOrSell = buyOrSell;
    // tranCashflow.PayOrReceive = payOrReceive;
    // tranCashflow.LongOrShort = longOrShort;
    // tranCashflow.FixedOrFloat = fixedOrFloat;
    // tranCashflow.UnsettledVolume = (decimal)unsettledVolume;
    // if (fixedOrFloat == FLOAT)
    // {
    // tranCashflow.IndexPriceRate = (decimal)indexPriceRate;
    // }
    // else
    // {
    // tranCashflow.IndexPriceRate = 0.0m;
    // }
    
    // tranCashflow.ResetPriceRate = (decimal)resetPriceRate;
    
    // if (fixedOrFloat == FIXED)
    // {
    // tranCashflow.FixedPriceRate = (decimal)fixedPriceRate;
    // }
    // else
    // {
    // tranCashflow.FixedPriceRate = 0.0m;
    // }
    // tranCashflow.ZeroRateValue = (decimal)zeroRateValue;
    // tranCashflow.DiscountFactor = (decimal)discountFactor;
    // tranCashflow.CashflowValue = (decimal)cashflowValue;
    // tranCashflow.DiscountedCashflow = (decimal)discountedCashflow;
    // tranCashflow.PriceRiskPosition = (decimal)riskPosition;
    // tranCashflow.IRRiskPosition = (decimal)interestRateRiskPosition;
    // tranCashflow.FXRiskPosition = (decimal)fxRateRiskPosition;
    
    // //LOG.Warn(string.Format("Finish ComputeCashflowBySideIDWithShock() , {0}", DateTime.Now));
    
    // return tranCashflow;
    //}
    
    ////ComputeCashflowBySideIDWithShock 方法的定义 end 
    #endregion
    
    // if (shockInputData.ShockFlag)
    // {
    // tranCashflow.ScenarioId = shockInputData.ScenarioId;
    // tranCashflow.IsWithShock = "YES";
    // }
    // else
    // {
    // tranCashflow.IsWithShock = "NO";
    // }
    // tranCashflow.AsOfDate = computeDate;
    // tranCashflow.TransactionId = tranBaseCashflowView.TransactionID;
    // tranCashflow.TransactionSubId = tranBaseCashflowView.TransactionSubID;
    // tranCashflow.TransactionLegId = tranBaseCashflowView.TransactionLegID;
    // tranCashflow.TransactionResetId = tranBaseCashflowView.TransactionResetID;
    // tranCashflow.IntLegalEntityId = tranBaseCashflowView.IntLegalEntityID;
    // tranCashflow.IntBusUnitId = tranBaseCashflowView.IntBusinessUnitID;
    // tranCashflow.PortfolioId = tranBaseCashflowView.PortfolioID;
    // //tranCashflow.Portfolio = tranBaseCashflowView.Portfolio;
    // tranCashflow.InstTypeId = tranBaseCashflowView.InstrumentTypeID;
    // tranCashflow.CounterpartyId = tranBaseCashflowView.CounterpartyID;
    // tranCashflow.TraderId = tranBaseCashflowView.TraderID;
    // //tranCashflow.BuyOrSell = tranBaseCashflowView.Direction;
    // tranCashflow.VolumeMeasureUnit = tranBaseCashflowView.VolumeMeasureUnit;
    // tranCashflow.SettledVolume = 0;
    // tranCashflow.SettledAvgPrice = 0;
    // tranCashflow.IndexPriceFactorId = tranBaseCashflowView.IndexPriceFactorID;
    // tranCashflow.ValueCurrency = tranBaseCashflowView.PaymentCurrency;
    // tranCashflow.IndexScaleFactor = tranBaseCashflowView.IndexScaleFactor;
    // tranCashflow.IndexSpread = tranBaseCashflowView.IndexSpread;
    // tranCashflow.ConversionFactor = tranBaseCashflowView.ConversionFactor;
    // tranCashflow.YieldRateCurveId = tranBaseCashflowView.YieldRateCurveID;
    // tranCashflow.FXRateCurveId = tranBaseCashflowView.FXRateCurveID;
    // tranCashflow.PricingModelId = tranBaseCashflowView.PricingModelID;
    // tranCashflow.TradeDate = tranBaseCashflowView.TradeDate;
    // tranCashflow.ResetDate = tranBaseCashflowView.ResetDate;
    // tranCashflow.PaymentDate = tranBaseCashflowView.PaymentDate;
    // tranCashflow.SettleDate = tranBaseCashflowView.SettleDate;
    // tranCashflow.ValueDate = tranBaseCashflowView.ValueDate;
    // tranCashflow.StartDate = tranBaseCashflowView.StartDate;
    // tranCashflow.EndDate = tranBaseCashflowView.EndDate;
    // tranCashflow.RiskFactorId = tranBaseCashflowView.RiskFactorID; 
    // tranCashflow.RiskSourceType = Risk_Type.Risk_Type_Total; 
    // tranCashflow.RiskType = Risk_Type.Risk_Type_Total;// tranCashflow.ResultUseType = resultUseType;
    // tranCashflow.CreateUid = CurrentUser.UserId;
    // tranCashflow.CreateDate = DateTime.Now;
    // tranCashflowList.Add(tranCashflow);
    
    
    // if (tranCashflow.ResultUseType == Result_Use_Type.Result_Use_Type_EOD_Process)
    // {
    // deltaVolume = tranCashflow.UnsettledVolume* tranBaseCashflowView.DiscountFactor;
    //deltaPosition = tranCashflow.DiscountedCashflow;
    
     
    
    // if (tranCashflow.InstTypeId == Inst_Type.Inst_Type_IR_FRA
    // || tranCashflow.InstTypeId == Inst_Type.Inst_Type_IR_Swap
    // || tranCashflow.InstTypeId == Inst_Type.Inst_Type_IR_Basis_Swap
    // || tranCashflow.InstTypeId == Inst_Type.Inst_Type_IR_Futures
    // || tranCashflow.InstTypeId == Inst_Type.Inst_Type_Bond_Coupon
    // || tranCashflow.InstTypeId == Inst_Type.Inst_Type_Bond_FRN
    // || tranCashflow.InstTypeId == Inst_Type.Inst_Type_Bond_Callable
    // || tranCashflow.InstTypeId == Inst_Type.Inst_Type_Bond_Putable
    // || tranCashflow.InstTypeId == Inst_Type.Inst_Type_Bond_Convertible
    // || tranCashflow.InstTypeId == Inst_Type.Inst_Type_FX_Currency_Swap
    // )
    // {
    // deltaPosition = tranCashflow.DiscountedCashflow;
    // deltaPositionForIR = tranCashflow.DiscountedCashflow;
    // deltaPositionForFX = 0.0m;
    // deltaPositionForEQ = 0.0m;
    // deltaPositionForCOM = 0.0m;
    
    // }
    // else if (tranCashflow.InstTypeId == Inst_Type.Inst_Type_FX_Spot
    // || tranCashflow.InstTypeId == Inst_Type.Inst_Type_FX_Forward
    // || tranCashflow.InstTypeId == Inst_Type.Inst_Type_FX_Swap
    // || tranCashflow.InstTypeId == Inst_Type.Inst_Type_FX_Currency_Futures
    // || tranCashflow.InstTypeId == Inst_Type.Inst_Type_FX_Currency_Swap
    // || tranCashflow.InstTypeId == Inst_Type.Inst_Type_FX_CIR_Swap)
    // {
    // deltaPosition = tranCashflow.DiscountedCashflow;
    // deltaPositionForIR = 0.0m;
    // deltaPositionForFX = tranCashflow.DiscountedCashflow;
    // deltaPositionForEQ = 0.0m;
    // deltaPositionForCOM = 0.0m;
    
    // }
    
    // riskDeltaPosition.AsOfDate = computeDate;
    // riskDeltaPosition.PortfolioId = tranBaseCashflowView.PortfolioID;
    // riskDeltaPosition.TransactionId = tranBaseCashflowView.TransactionID;
    // riskDeltaPosition.TransactionSubId = tranBaseCashflowView.TransactionSubID;
    // riskDeltaPosition.TransactionLegId = tranBaseCashflowView.TransactionLegID;
    // riskDeltaPosition.TransactionResetId = tranBaseCashflowView.TransactionResetID;
    // riskDeltaPosition.IntLegalEntityId = tranBaseCashflowView.IntLegalEntityID;
    // //riskDeltaPosition.IntLegalEntity = tranBaseCashflowView.IntLegalEntity;
    // riskDeltaPosition.IntBusUnitId = tranBaseCashflowView.IntBusinessUnitID;
    // //riskDeltaPosition.IntBusUnit = tranBaseCashflowView.IntBusinessUnit;
    // riskDeltaPosition.PortfolioId = tranBaseCashflowView.PortfolioID;
    // //riskDeltaPosition.Portfolio = tranBaseCashflowView.Portfolio;
    // riskDeltaPosition.InstTypeId = tranBaseCashflowView.InstrumentTypeID;
    // //riskDeltaPosition.InstType = tranBaseCashflowView.InstrumentType;
    // riskDeltaPosition.CounterpartyId = tranBaseCashflowView.CounterpartyID;
    // //riskDeltaPosition.Counterparty = tranBaseCashflowView.Counterparty;
    // riskDeltaPosition.IndexPriceRate = tranBaseCashflowView.IndexPriceRate;//原本是trancashflow.IndexPriceRate
    // riskDeltaPosition.TraderId = tranBaseCashflowView.TraderID;
    // //riskDeltaPosition.Trader = tranBaseCashflowView.Trader;
    // riskDeltaPosition.IndexPriceFactorId = tranBaseCashflowView.IndexPriceFactorID;
    // riskDeltaPosition.Currency = tranBaseCashflowView.PaymentCurrency;
    // riskDeltaPosition.DeltaVolume = deltaVolume;
    // riskDeltaPosition.DeltaPosition = deltaPosition;
    // riskDeltaPosition.DeltaPositionForIR = deltaPositionForIR;
    // riskDeltaPosition.DeltaPositionForFX = deltaPositionForFX;
    // riskDeltaPosition.DeltaPositionForEQ = deltaPositionForEQ;
    // riskDeltaPosition.DeltaPositionForCOM = deltaPositionForCOM;
    // riskDeltaPosition.RiskFactorId = tranBaseCashflowView.RiskFactorID;
    // riskDeltaPosition.RiskType = Risk_Type.Risk_Type_Total;// Risk_Type.Risk_Type.GetEnumName();
    // riskDeltaPosition.CreateUid = CurrentUser.UserId;
    // riskDeltaPosition.CreateDate = DateTime.Now;
    // riskDeltaPositionList.Add(riskDeltaPosition);
    // }
    
     
    
    
    // numberOfYear = tranBaseCashflowView.DaysInUntilPeriod / Constants.DefaultSetting.YearDays;
    // sumOfCashflowPeriod += tranCashflow.DiscountedCashflow* numberOfYear;
    //bondPrice += tranCashflow.DiscountedCashflow;
    // if (k == tranBaseCashflowViewList.Count - 1)
    // {
    // duration = sumOfCashflowPeriod / bondPrice;
    // }
    // TranSensitivity tranSensitivity = new TranSensitivity();
    //tranSensitivity.ComputeDate = tranCashflow.AsOfDate;
    // tranSensitivity.ComputeMethod = "Test Method";
    // tranSensitivity.TransactionId = (int)tranCashflow.TransactionId;
    // tranSensitivity.TransactionSubId = (int)tranCashflow.TransactionSubId;
    // tranSensitivity.TransactionSideId = (int)tranCashflow.TransactionSideId;
    // tranSensitivity.TransactionLegId = (int)tranCashflow.TransactionLegId;
    // tranSensitivity.IndexPriceFactorId = (int)tranCashflow.IndexPriceFactorId;
    // tranSensitivity.UnitDeltaValue = tranBaseCashflowView.DiscountFactor;
    // tranSensitivity.UnitGammaValue = 0.0m;
    // tranSensitivity.UnitVegaValue = 0.0m;
    // tranSensitivity.UnitThetaValue = 0.0m;
    // tranSensitivity.UnitRhoValue = 0.0m;
    // tranSensitivity.UnitEtaValue = 0.0m;
    // tranSensitivity.DeltaPosition = tranCashflow.DiscountedCashflow;
    // tranSensitivity.GammaPosition = 0.0m;
    // tranSensitivity.VegaPosition = 0.0m;
    // tranSensitivity.ThetaPosition = 0.0m;
    // tranSensitivity.RhoPosition = 0.0m;
    // tranSensitivity.EtaPosition = 0.0m;
    // tranSensitivity.CreateUid = CurrentUser.UserId;
    // tranSensitivity.CreateDate = DateTime.Now;
    // tranSensitivityList.Add(tranSensitivity);
    // }
    // dics["TranCashFlow"] = (IList)tranCashflowList;
    // dics["TranSensitivity"] = (IList)tranSensitivityList;
    // dics["RiskDeltaPosition"] = (IList)riskDeltaPositionList;
    
    // } 
    #endregion
    
    #endregion
    
     
    
    //SaveTransactionCashflow(computeDate, resultUseType, tranCashflowTable);
    #region SaveTransactionCashflow具体实现
    // SaveTransactionCashflow具体实现
    // private void SaveTransactionCashflow(DateTime computeDate, Result_Use_Type resultUseType, Hashtable tranCashflowTable)
    // {
    // //LOG.Warn(string.Format("In SaveTransactionCashflow() , {0}", DateTime.Now));
    
    // if (tranCashflowTable != null && tranCashflowTable.Count > 0)
    // {
    // ICollection portfoliIDKeys = tranCashflowTable.Keys;
    // int[] portfolioIDs = new int[portfoliIDKeys.Count];
    // int i = 0;
    // foreach (int portfolioID in portfoliIDKeys)
    // {
    // //portfolioIDs[i] = int.Parse(s);
    // portfolioIDs[i] = portfolioID;
    // i++;
    // }
    // portfoliIDKeys.CopyTo(portfolioIDs, 0);
    // 要保存新的,先删除旧的数据
    // int result = tranCashFlowService.DeleteByDatePortfolioIDsUseTypeID(computeDate, portfolioIDs, resultUseType);
    #region DeleteByDatePortfolioIDsUseTypeID(computeDate, portfolioIDs, resultUseType);实现sql
    // DeleteByDatePortfolioIDsUseTypeID start
    // string deleteByDatePortfolioIDsUseTypeIDSQL = "Delete from TranCashFlow " +
    // " WHERE AsOfDate = :AsOfDate " +
    // " AND PortfolioId in (:PortfolioIDs ) " +
    // " AND ResultUseType = :ResultUseType ";
    // QueryInfo info = new QueryInfo();
    // info.CustomSQL = deleteByDatePortfolioIDsUseTypeIDSQL;
    // info.Parameters.Add("AsOfDate", asOfDate);
    // info.Parameters.Add("ResultUseType", (int)resultUseType);
    // info.Parameters.Add("PortfolioIDs", portfolioIDs);
    // return Dao.ExecuteUpdate(info); 
    #endregion
    // IList<TranCashFlow> list = new List<TranCashFlow>();
    // foreach (int portfolioID in portfoliIDKeys)
    // {
    // IList<TranCashFlow> tranCashflowList = (IList<TranCashFlow>)tranCashflowTable[portfolioID];
    // foreach (TranCashFlow tranCashflow in tranCashflowList)
    // {
    // tranCashflow.Id = string.Empty;
    // tranCashflow.State.MarkNew();
    // list.Add(tranCashflow);
    // //保存需要更改
    // //result = tranCashFlowService.SaveBySpringDAO(tranCashflow);
    // }
    // }
    // Dao.SaveOrUpdateAll<TranCashFlow>(list);
    
    // } 
    #endregion
    
    //SaveTranSensitivity(computeDate, resultUseType, tranSensitivityTable);
    #region SaveTranSensitivity(computeDate, resultUseType, tranSensitivityTable);实现代码
    //private void SaveTranSensitivity(DateTime computeDate, Result_Use_Type resultUseType, Hashtable tranSensitivityTable)
    //{
    
    // if (tranSensitivityTable != null && tranSensitivityTable.Count > 0)
    // {
    // ICollection portfoliIDKeys = tranSensitivityTable.Keys;
    // int[] portfolioIDs = new int[portfoliIDKeys.Count];
    // int i = 0;
    // foreach (int portfolioID in portfoliIDKeys)
    // {
    // //portfolioIDs[i] = int.Parse(s);
    // portfolioIDs[i] = portfolioID;
    // i++;
    // }
    
    // // portfoliIDKeys.CopyTo(portfolioIDs, 0);
    // 要保存先删除
    // int result = tranSensitivityService.DeleteByDate(computeDate);
    // 删除的实现代码sql
    #region tranSensitivityService.DeleteByDate(computeDate) 删除sql
    //public int DeleteByDate(DateTime computeDate)
    //{
    // // new RskDeltaPosition().PortfolioId.AsOfDate
    // string deleteByDatePortfolioIDsUseTypeIDSQL = "Delete from TranSensitivity " +
    // " WHERE ComputeDate = :ComputeDate ";
    // //" AND PortfolioId in (:PortfolioIDs ) ";
    
    // QueryInfo info = new QueryInfo();
    // info.CustomSQL = deleteByDatePortfolioIDsUseTypeIDSQL;
    // info.Parameters.Add("ComputeDate", computeDate);
    // //info.Parameters.Add("PortfolioIDs", portfolioIDs);
    // return Dao.ExecuteUpdate(info);
    //}
    #endregion
    // IList<TranSensitivity> list = new List<TranSensitivity>();
    // foreach (int portfolioID in portfoliIDKeys)
    // {
    // IList<TranSensitivity> tranSensitivityList = (IList<TranSensitivity>)tranSensitivityTable[portfolioID];
    // foreach (TranSensitivity tranSensitivity in tranSensitivityList)
    // {
    // tranSensitivity.Id = string.Empty;
    // tranSensitivity.State.MarkNew();
    // list.Add(tranSensitivity);
    
    // }
    // }
    // Dao.SaveOrUpdateAll<TranSensitivity>(list);
    
    // }
    
    
    //}
    #endregion
    
    //SaveRiskDeltaPosition(computeDate, resultUseType, riskPositionTable);
    #region SaveRiskDeltaPosition(computeDate, resultUseType, riskPositionTable);实现代码
    
    //private void SaveRiskDeltaPosition(DateTime computeDate, Result_Use_Type resultUseType, Hashtable riskPositionTable)
    //{
    
    // if (riskPositionTable != null && riskPositionTable.Count > 0)
    // {
    // ICollection portfoliIDKeys = riskPositionTable.Keys;
    // int[] portfolioIDs = new int[portfoliIDKeys.Count];
    // int i = 0;
    // foreach (int portfolioID in portfoliIDKeys)
    // {
    // //portfolioIDs[i] = int.Parse(s);
    // portfolioIDs[i] = portfolioID;
    // i++;
    // }
    
    // // portfoliIDKeys.CopyTo(portfolioIDs, 0);
    
    // int result = riskDeltaPositionService.DeleteByDatePortfolioIDsUseTypeID(computeDate, portfolioIDs);
    #region 删除sql实现
    //public int DeleteByDatePortfolioIDsUseTypeID(DateTime asOfDate, int[] portfolioIDs)
    //{
    // // new RskDeltaPosition().PortfolioId.AsOfDate
    // string deleteByDatePortfolioIDsUseTypeIDSQL = "Delete from RskDeltaPosition " +
    // " WHERE AsOfDate = :AsOfDate " +
    // " AND PortfolioId in (:PortfolioIDs ) ";
    
    // QueryInfo info = new QueryInfo();
    // info.CustomSQL = deleteByDatePortfolioIDsUseTypeIDSQL;
    // info.Parameters.Add("AsOfDate", asOfDate);
    // info.Parameters.Add("PortfolioIDs", portfolioIDs);
    // return Dao.ExecuteUpdate(info);
    //}
    #endregion
    // IList<RskDeltaPosition> list = new List<RskDeltaPosition>();
    // foreach (int portfolioID in portfoliIDKeys)
    // {
    // IList<RskDeltaPosition> riskDeltaPositionList = (IList<RskDeltaPosition>)riskPositionTable[portfolioID];
    // foreach (RskDeltaPosition riskDeltaPosition in riskDeltaPositionList)
    // {
    // riskDeltaPosition.Id = string.Empty;
    // riskDeltaPosition.State.MarkNew();
    // list.Add(riskDeltaPosition);
    // //保存需要更改
    // //result = tranCashFlowService.SaveBySpringDAO(tranCashflow);
    // }
    // }
    // Dao.SaveOrUpdateAll<RskDeltaPosition>(list);
    
    // }
    
    #endregion
    #endregion
    
    #region 第2步 PayoffComputationService.ComputeTransactionPayoffByDate(computeDate, Result_Use_Type.Result_Use_Type_EOD_Process);
    //public void ComputeTransactionPayoffByDate(DateTime computeDate, Result_Use_Type resultUseType)
    //{
    
    // IList<TranBasePayoffView> transactionBasePayoffViews = GetAllTransactionBasePayoffView(computeDate, resultUseType);
    #region GetAllTransactionBasePayOffView 实现
    //private IList<TranBasePayoffView> GetAllTransactionBasePayoffView(DateTime computeDate, Result_Use_Type resultUseType)
    //{
    
    // //LOG.Warn(string.Format("In GetAllTransactionBasePayoffView() , {0}", DateTime.Now));
    
    // string[] portfolioIDs = GetAllPortfolioIDsByDate(computeDate);
    #region GetAllPortfolioIDsByDate 实现
    //private string[] GetAllPortfolioIDsByDate(DateTime asOfDate)
    //{
    // IList<BasPortfolio> portfolioList = tranCashFlowService.GetAllPortfilioFromCashflow(asOfDate);
    #region tranCashFlowService.GetAllPortfilioFromCashflow(asOfDate)实现
    //public IList<BasPortfolio> GetAllPortfilioFromCashflow(System.DateTime asOfDate)
    //{
    
    
    // Framework.QueryInfo info = new QueryInfo();
    // info.QueryObject = "BasPortfolio p";
    // info.Where.Add("kk", " and exists(select 1 from TranCashFlow t where p.Id=t.PortfolioId and t.AsOfDate=:AsOfDate )");
    // info.Parameters.Add("AsOfDate", asOfDate);
    // IList resultList = Dao.FindList(info);
    // IList<BasPortfolio> BasPortfolioList = new List<BasPortfolio>();
    // foreach (var basPortfolio in resultList)
    // {
    // BasPortfolioList.Add(basPortfolio as BasPortfolio);
    // }
    // return BasPortfolioList;
    // //return Holworth.Utility.Utility.ListToT<BasPortfolio>(resultList);
    //}
    #endregion
    
    // if (portfolioList == null || portfolioList.Count == 0)
    // {
    // return null;
    // }
    
    // IEnumerable<BasPortfolio> portList = portfolioList.Cast<BasPortfolio>();
    
    // var portfIDs = from p in portList
    // select p.Id;
    // return portfIDs.ToArray<string>();
    //}
    #endregion
    
    // if (portfolioIDs == null || portfolioIDs.Length == 0)
    // {
    // //LOG.Error("ERROR: - PortfolioID array is empty in ValuationEODProcessService.GetAllTransactionBasePayoffView() ");
    // //throw new Exception("ERROR: - PortfolioID array is empty in ValuationEODProcessService.GetAllTransactionBasePayoffView() ");
    // }
    // int result = tranPayoffService.DeleteByDatePortfolioIDsUseTypeID(computeDate, portfolioIDs, resultUseType);
    #region tranPayoffService.DeleteByDatePortfolioIDsUseTypeID(computeDate, portfolioIDs, resultUseType) 实现
    //public int DeleteByDatePortfolioIDsUseTypeID(DateTime computeDate, string[] portfolioIDs, Result_Use_Type resultUseType)
    //{
    // if (portfolioIDs != null && portfolioIDs.Length > 0)
    // {
    // StringBuilder buf = new StringBuilder();
    // string allIDsParam = "";
    
    // foreach (string id in portfolioIDs)
    // {
    // buf.Append(id).Append(", ");
    // }
    
    // if (buf.Length > 0)
    // {
    // allIDsParam = buf.ToString();
    // int lastCamma = allIDsParam.LastIndexOf(",");
    // allIDsParam = allIDsParam.Substring(0, lastCamma);
    // }
    // QueryInfo info = new QueryInfo();
    // info.CustomSQL = "delete from " + typeof(TranPayoff).Name + "";
    // info.AddParam("AsOfDate", computeDate);
    // info.AddParam("ResultUseType", (int)resultUseType);
    // info.Where.Add(":PortfolioID", " and PortfolioId in(" + allIDsParam + ")");
    // int query = Dao.ExecuteUpdate(info);
    // return query;
    // }
    // else
    // {
    // //LOG.Warn("Error - IndexPriceFactorID array is empty in TransactionPayoffSpringDao.DeleteByDatePortfolioIDs()");
    // return 0;
    // }
    //}
    
    #endregion
    // IList<TranBasePayoffView> payoffVwList = tranPayoffService.GetBaseListByDatePortfolioIDsUseTypeIDWithSpringDao(computeDate, portfolioIDs, resultUseType);
    #region tranPayoffService.GetBaseListByDatePortfolioIDsUseTypeIDWithSpringDao(computeDate, portfolioIDs, resultUseType) 实现
    //public IList<TranBasePayoffView> GetBaseListByDatePortfolioIDsUseTypeIDWithSpringDao(DateTime asOfdate, string[] portfolioIDs, Result_Use_Type resultUseType)
    //{
    // StringBuilder buf = new StringBuilder();
    // string allIDsParam = "";
    // IList<TranBasePayoffView> returnList = new List<TranBasePayoffView>();
    // if (portfolioIDs != null)
    // {
    // foreach (string id in portfolioIDs)
    // {
    // buf.Append(id).Append(", ");
    // }
    
    // if (buf.Length > 0)
    // {
    // allIDsParam = buf.ToString();
    // int lastCamma = allIDsParam.LastIndexOf(",");
    // allIDsParam = allIDsParam.Substring(0, lastCamma);
    // }
    // string[] PortfolioIds = allIDsParam.Split(',');
    // QueryInfo info = new QueryInfo();
    // info.CustomSQL = @"
    // SELECT As_Of_Date AsOfDate
    //, Transaction_ID TransactionId
    //, Transaction_Sub_Id TransactionSubId
    //, TransactionLegID TransactionLegId
    //, Portfolio_Id PortfolioId
    //, ValueCurrency ValueCurrency
    //, SUM(SettledPayoffValue)SettledPayoffValue
    //, SUM(UnsettledPayoffValue) UnsettledPayoffValue
    //, SUM(UnitPayoffValue) UnitPayoffValue
    //, SUM(SettledPayoffValue + UnsettledPayoffValue) TotalPayoffValue
    //, VolumeMeasureUnitID VolumeMeasureUnit
    //, SUM(SETTLEDVOLUME) SettledVolume
    //, SUM(UNSETTLEDVOLUME) UnsettledVolume
    //, SUM(CostValue) CostValue
    //, SUM(SettledPayoffValue + UnsettledPayoffValue - CostValue) MarkToMarketValue
    //, Result_Use_Type ResultUseType
    //FROM(
    //SELECT TCF.As_Of_Date
    //, TCF.Transaction_Id
    //, TCF.Transaction_Sub_Id
    //, TCF.Transaction_Side_Id
    //, 0 TransactionLegID
    //, TCF.Portfolio_Id
    //, TCF.Value_Currency ValueCurrency
    //, (TCF.SETTLED_VOLUME * TCf.Settled_Avg_Price) SettledPayoffValue--SettledAvgPrice
    //, tcf.discounted_cashflow UnsettledPayoffValue--DiscountedCashflow UnsettledPayoffValue
    //, 0.0 UnitPayoffValue
    //, 0.0 TotalPayoffValue
    //, TCF.Volume_Measure_Unit VolumeMeasureUnitID
    //, TCF.SETTLED_VOLUME SETTLEDVOLUME
    //, TCF.UNSETTLED_VOLUME UNSETTLEDVOLUME
    //, 0.0 CostValue
    //, 0.0 MarkToMarketValue
    //, TCF.Result_Use_Type
    //FROM tran_cash_flow TCF
    //WHERE TCF.As_Of_Date =:AsOfDate
    //AND TCF.Portfolio_Id in (:PortfolioIds)
    //AND TCF.Result_Use_Type =:ResultUseType
    //) COMBO
    //GROUP BY as_of_date
    //, Transaction_ID
    //, Transaction_Sub_Id
    //, TransactionLegID
    //, Portfolio_Id
    //, ValueCurrency
    //, VolumeMeasureUnitID
    //, Result_Use_Type
    //ORDER BY as_of_date
    //, Transaction_ID
    //, Transaction_Sub_Id
    //, TransactionLegID
    //, Portfolio_Id
    //, ValueCurrency
    //, VolumeMeasureUnitID
    //, Result_Use_Type
    
    
    // "
    // info.CustomSQL = info.CustomSQL.Replace(":AsOfDate", string.Format("to_date('{0}','yyyy/mm/dd')", asOfdate.ToString("yyyy/MM/dd"))).Replace(":ResultUseType", "'" + (int)resultUseType + "'").Replace(":PortfolioIds",
    // allIDsParam);
    
    // // info.Parameters.Add("AsOfDate", asOfdate);
    // //info.Parameters.Add("ResultUseType", resultUseTypeID);
    // //info.Parameters.Add("PortfolioIds", allIDsParam);
    // DataSet ds = Dao.ExecuteDataSet(info); //Holworth.Utility.Utility.EntityRowMapper.ExcuteDataSet("selectBaseforTranPayoffSQL", info);
    // // IList<TranBasePayoffView> returnList = Holworth.Utility.Utility.EntityRowMapper.ExcuteRowMapperT<TranBasePayoffView>("selectBaseforTranPayoffSQL", info, System.Web.HttpContext.Current.Server.MapPath("~/Config/Sql.xml"));
    // //info.Where.Add("PortfolioID", " and PortfolioId in(" + allIDsParam + ")");
    
    // //IList resultList = Dao.FindList(info);
    // //IList<TranBasePayoffView> returnList = new List<TranBasePayoffView>();
    // if (ds != null && ds.Tables[0].Rows.Count > 0)
    // {
    // returnList = DataSet2List(ds);
    // //foreach (TranCashFlow tranBasePayoffView in resultList)
    // //{
    // // returnList.Add(new TranBasePayoffView()
    // // {
    // // Id = tranBasePayoffView.Id,
    // // AsOfDate = (DateTime) tranBasePayoffView.AsOfDate,
    // // TransactionId = tranBasePayoffView.TransactionId,
    // // TransactionSubId = tranBasePayoffView.TransactionSubId,
    // // TransactionLegId = tranBasePayoffView.TransactionLegId,
    // // PortfolioId = tranBasePayoffView.PortfolioId,
    // // ValueCurrency =tranBasePayoffView.ValueCurrency,
    // // SettledPayoffValue =0,
    // // UnsettledPayoffValue = 0,
    // // UnitPayoffValue = 0,
    // // TotalPayoffValue =0,
    // // VolumeMeasureUnit = tranBasePayoffView.VolumeMeasureUnit,
    // // SettledVolume = (decimal) (tranBasePayoffView.SettledVolume==null?0:tranBasePayoffView.SettledVolume),
    // // UnsettledVolume = (decimal)(tranBasePayoffView.UnsettledVolume == null ? 0 : tranBasePayoffView.UnsettledVolume),
    // // CostValue = 0,
    // // MarkToMarketValue = 0,
    // // ResultUseType = tranBasePayoffView.ResultUseType
    
    // // });
    
    // //}
    // //foreach (TranBasePayoffView indexPrice in resultList)
    // //{
    
    // // returnList.Add(indexPrice);
    // //}
    // }
    // }
    
    // return returnList;
    //}
    
    #endregion
    
    // //LOG.Warn(string.Format("Finish GetAllTransactionBasePayoffView() , {0}", DateTime.Now));
    
    // return payoffVwList;
    //}
    #endregion
    // Hashtable tranPayoffTable = new Hashtable();
    
    
    // var transBaseVws = from tv in transactionBasePayoffViews
    // group tv by tv.PortfolioId into g
    // select new { portfolioID = g.Key, transBaseViewList = g };
    
    // if (transBaseVws != null)
    // {
    // DateTime now = DateTime.Now;
    // //被我暂时改了
    // string userName = CurrentUser.UserName;
    // foreach (var transBaseVw in transBaseVws)
    // {
    // //Hashtable tranPayoffTable = new Hashtable();
    // //TranPayoff tranPayoff = new TranPayoff();
    
    // // at each portfolo level
    // IList<TranPayoff> tranPayoffPortfolioList = new List<TranPayoff>();
    // IList<TranPayoff> tranPayoffTransactionList = new List<TranPayoff>();
    // List<TranBasePayoffView> transBaseVwList = transBaseVw.transBaseViewList.ToList<TranBasePayoffView>();
    
    // //if (transBaseVw.portfolioID > 10001)
    // //{
    
    // int total = transBaseVwList.Count();
    // for (var i = 0; i < total; i++)
    // {
    // TranBasePayoffView tranBasePayoff = transBaseVwList[i];
    // TranPayoff tranPayoff = new TranPayoff();
    // tranPayoff.AsOfDate = computeDate;
    // tranPayoff.TransactionId = tranBasePayoff.TransactionId;
    // tranPayoff.TransactionSubId = tranBasePayoff.TransactionSubId;
    // tranPayoff.TransactionLegId = tranBasePayoff.TransactionLegId;
    // tranPayoff.PortfolioId = tranBasePayoff.PortfolioId;
    // tranPayoff.ValueCurrency = tranBasePayoff.ValueCurrency;
    // tranPayoff.SettledPayoffValue = tranBasePayoff.SettledPayoffValue;
    // tranPayoff.UnsettledPayoffValue = tranBasePayoff.UnsettledPayoffValue;
    // tranPayoff.UnitPayoffValue = tranBasePayoff.UnitPayoffValue;
    // tranPayoff.TotalPayoffValue = tranBasePayoff.TotalPayoffValue;
    // tranPayoff.VolumeMeasureUnit = tranBasePayoff.VolumeMeasureUnit;
    // tranPayoff.SettledVolume = tranBasePayoff.SettledVolume;
    // tranPayoff.UnsettledVolume = tranBasePayoff.UnsettledVolume;
    // tranPayoff.CostValue = tranBasePayoff.CostValue;
    // tranPayoff.MarkToMarketValue = tranBasePayoff.MarkToMarketValue;
    // tranPayoff.ResultUseType = tranBasePayoff.ResultUseType;
    // tranPayoff.CreateUid = CurrentUser.UserId;
    // tranPayoff.CreateUname = CurrentUser.UserName;
    // tranPayoff.CreateDate = DateTime.Now;
    // tranPayoffPortfolioList.Add(tranPayoff);
    // }
    // tranPayoffTable.Add(transBaseVw.portfolioID, tranPayoffPortfolioList);
    // }
    
    // SaveTransactionPayOffsByTemp(computeDate, resultUseType, tranPayoffTable);
    
    // }
    //}
    
    #endregion
    
    #region 第3步 ProfitLossComputationService.ComputeTransactionProfitLossByDate(computeDate, Result_Use_Type.Result_Use_Type_EOD_Process);
    // public void ComputeTransactionProfitLossByDate(DateTime computeDate, Result_Use_Type resultUseType)
    //{
    // //LOG.Warn(string.Format("In ComputeTransactionProfitLossByDate() , {0}", DateTime.Now));
    
    // Hashtable transactionProfitLossTable = new Hashtable();
    
    
    // IList<BasPortfolio> portfolioList = tranCasfhlowService.GetAllPortfilioFromCashflow(computeDate);
    #region tranCasfhlowService.GetAllPortfilioFromCashflow(computeDate)实现这里存在重复调用(上面第2步的时候去数据库查过一次了) 可以优化为一次
    // public IList<BasPortfolio> GetAllPortfilioFromCashflow(System.DateTime asOfDate)
    //{
    
    
    // Framework.QueryInfo info = new QueryInfo();
    // info.QueryObject = "BasPortfolio p";
    // info.Where.Add("kk", " and exists(select 1 from TranCashFlow t where p.Id=t.PortfolioId and t.AsOfDate=:AsOfDate )");
    // info.Parameters.Add("AsOfDate", asOfDate);
    // IList resultList = Dao.FindList(info);
    // IList<BasPortfolio> BasPortfolioList = new List<BasPortfolio>();
    // foreach (var basPortfolio in resultList)
    // {
    // BasPortfolioList.Add(basPortfolio as BasPortfolio);
    // }
    // return BasPortfolioList;
    // //return Holworth.Utility.Utility.ListToT<BasPortfolio>(resultList);
    //}
    #endregion
    
     
    
    // DateTime currentDate = computeDate;
    // DateTime bestPriorBusinessDate = businessDateService.GetBestPriorBusinessDate(computeDate, Constants.DAYS_BACK_FOR_BUSINESS_DATE);
    
    
    // foreach (BasPortfolio portfolio in portfolioList)
    // {
    // IList<TranProfitloss> tranProfitLossList = ComputeTransactionProfitLossByPortfolioID(currentDate, bestPriorBusinessDate, int.Parse(portfolio.Id), resultUseType);
    #region ComputeTransactionProfitLossByPortfolioID(currentDate, bestPriorBusinessDate, int.Parse(portfolio.Id), resultUseType)实现
    // private IList<TranProfitloss> ComputeTransactionProfitLossByPortfolioID(DateTime currentDate, DateTime priorDate, int portfolioID, Result_Use_Type resultUseType)
    //{
    
    // IList<TranProfitloss> tranProfitLossList = new List<TranProfitloss>();
    
    // IList<TransactionBaseProfitLossView> tranBaseProfitLossList = tranProfitLossService.GetBaseListByDatePortfolioIDUseTypeID(currentDate, priorDate, portfolioID, resultUseType);
    #region tranProfitLossService.GetBaseListByDatePortfolioIDUseTypeID(currentDate, priorDate, portfolioID, resultUseType)实现
    // public IList<TransactionBaseProfitLossView> GetBaseListByDatePortfolioIDUseTypeID(DateTime currentDate, DateTime priorDate, int portfolioID, Result_Use_Type resultUseType)
    //{
    
    // //Convert.ToString((int)LookupItems.USE_TYPE_EOD_PROCESS)
    // QueryInfo info = new QueryInfo();//typeof(TranProfitloss).Name
    // info.Parameters.Add("AsOfDate1", priorDate);
    // info.Parameters.Add("AsOfDate2", currentDate);
    // info.Parameters.Add("PortfolioID", portfolioID);
    // info.Parameters.Add("ResultUseType1", (int)resultUseType);
    // info.Parameters.Add("ResultUseType2", (int)resultUseType);
    // //底层优化过rowmapper
    // IList<TransactionBaseProfitLossView> returnList = Holworth.Utility.HraUtility.EntityRowMapper.ExcuteRowMapperT<TransactionBaseProfitLossView>("selectBaseforTranProfitLossSQL", info); 
    #region 执行的sql其实就是 (传入参数 priordate ,currentdate,result_use_type ,portfolid)
    string sql = @"SELECT As_Of_Date AsOfDate
    ,Transaction_Id TransactionID
    ,Transaction_Sub_Id TransactionSubID
    ,Volume_Measure_Unit VolumeMeasureUnitID
    ,SUM(RealizedVolume) RealizedVolume
    ,SUM(UnrealizedVolume) UnrealizedVolume
    ,SUM(TotalVolume) TotalVolume
    ,Value_Currency ValueCurrency
    ,SUM(PriorMarkToMarketValue) PriorMarkToMarketValue
    ,SUM(Mark_To_Market_Value) MarkToMarketValue
    ,SUM(PayoffValue) PayoffValue
    ,SUM(cost_value) CostValue
    ,SUM(RealizedProfitLossValue) RealizedProfitLossValue
    ,SUM(UnrealizedProfitLossValue) UnrealizedProfitLossValue
    ,SUM(ProfitLossValue) ProfitLossValue
    , Result_Use_Type ResultUseType
    FROM (
    SELECT TP2.As_Of_Date
    ,TP2.Transaction_Id
    ,TP2.Transaction_Sub_Id
    ,TP2.Transaction_Leg_Id
    ,TP2.Value_Currency
    ,TP2.Settled_Payoff_Value
    ,TP2.Total_Payoff_Value PayoffValue
    ,TP2.Volume_Measure_Unit
    ,TP2.Settled_Volume RealizedVolume
    ,TP2.Unsettled_Volume UnrealizedVolume
    ,(TP2.Settled_Volume + TP2.Unsettled_Volume) TotalVolume
    ,TP2.Cost_Value
    ,TP1.Mark_To_Market_Value PriorMarkToMarketValue
    ,TP2.Mark_To_Market_Value
    ,(TP2.Settled_Payoff_Value - TP1.Settled_Payoff_Value) RealizedProfitLossValue
    ,(TP2.Unsettled_Payoff_Value - TP1.Unsettled_Payoff_Value) UnrealizedProfitLossValue
    ,(TP2.Mark_To_Market_Value - TP1.Mark_To_Market_Value) ProfitLossValue
    , TP2.Result_Use_Type
    FROM tran_payoff TP1, tran_payoff TP2
    WHERE TP1.As_Of_Date =:AsOfDate1
    AND TP2.As_Of_Date =:AsOfDate2
    AND TP2.Transaction_Id = TP1.Transaction_Id
    AND TP2.Transaction_Sub_Id = TP1.Transaction_Sub_Id
    AND TP2.Transaction_Leg_Id = TP1.Transaction_Leg_Id
    AND TP2.Portfolio_Id = TP1.Portfolio_Id
    
    AND TP2.Portfolio_Id =:PortfolioID
    AND TP1.Result_Use_Type =:ResultUseType1
    AND TP2.Result_Use_Type =:ResultUseType2
    ) COMBO
    GROUP BY As_Of_Date
    ,Transaction_Id
    ,Transaction_Sub_Id
    ,value_currency
    ,volume_measure_unit
    , Result_Use_Type
    ORDER BY As_Of_Date
    ,Transaction_Id
    ,Transaction_Sub_Id
    ,value_currency
    ,volume_measure_unit
    , Result_Use_Type
    ";
    #endregion
    // return returnList;
    //}
    
    #endregion
    // foreach (TransactionBaseProfitLossView tranBaseProfitLoss in tranBaseProfitLossList)
    // {
    
    // TranProfitloss tranProfitLoss = new TranProfitloss();
    
    // tranProfitLoss.AsOfDate = currentDate;
    // tranProfitLoss.TransactionId = Convert.ToInt32(tranBaseProfitLoss.TransactionID);
    // tranProfitLoss.TransactionSubId = Convert.ToInt32(tranBaseProfitLoss.TransactionSubID);
    // tranProfitLoss.PortfolioId = portfolioID;
    // tranProfitLoss.VolumeMeasureUnit = tranBaseProfitLoss.VolumeMeasureUnitID;
    // tranProfitLoss.RealizedVolume = tranBaseProfitLoss.RealizedVolume;
    // tranProfitLoss.UnrealizedVolume = tranBaseProfitLoss.UnrealizedVolume;
    // tranProfitLoss.TotalVolume = tranBaseProfitLoss.TotalVolume;
    // tranProfitLoss.ValueCurrency = tranBaseProfitLoss.ValueCurrency;
    // tranProfitLoss.PriorMarkToMarketValue = tranBaseProfitLoss.PriorMarkToMarketValue;
    // tranProfitLoss.MarkToMarketValue = tranBaseProfitLoss.MarkToMarketValue;
    // tranProfitLoss.PayoffValue = tranBaseProfitLoss.PayoffValue;
    // tranProfitLoss.CostValue = tranBaseProfitLoss.CostValue;
    // tranProfitLoss.RealizedProfitlossValue = tranBaseProfitLoss.RealizedProfitLossValue;
    // tranProfitLoss.UnrealizedProfitlossValue = tranBaseProfitLoss.UnrealizedProfitLossValue;
    // tranProfitLoss.ProfitlossValue = tranBaseProfitLoss.ProfitLossValue;
    // tranProfitLoss.ResultUseType = tranBaseProfitLoss.ResultUseType;
    // tranProfitLoss.CreateUid = CurrentUser.UserId;
    // tranProfitLoss.CreateDate = DateTime.Now;
    // tranProfitLossList.Add(tranProfitLoss);
    
    // }
    
    // //LOG.Warn(string.Format("Finish ComputeTransactionProfitLossByPortfolioID() , {0}", DateTime.Now));
    
    // return tranProfitLossList;
    //}
    #endregion
    // transactionProfitLossTable.Add(portfolio.Id, tranProfitLossList);
    // }
    
    // SaveTransactionProfitLossesByTemp(computeDate, resultUseType, transactionProfitLossTable);
    #region SaveTransactionProfitLossesByTemp(computeDate, resultUseType, transactionProfitLossTable);
    //private void SaveTransactionProfitLosses(DateTime computeDate, Result_Use_Type resultUseType, Hashtable transactionProfitLossTable)
    //{
    // //LOG.Warn(string.Format("In SaveComputedTransactionProfitLosses() , {0}", DateTime.Now));
    
    // if (transactionProfitLossTable != null && transactionProfitLossTable.Count > 0)
    // {
    // ICollection portfoliIDKeys = transactionProfitLossTable.Keys;
    // //int[] portfolioIDs = new int[portfoliIDKeys.Count];
    // //portfoliIDKeys.CopyTo(portfolioIDs, 0);
    
    // //int result = transactionPayoffSpringDao.DeleteByDatePortfolioIDsUseTypeID(computeDate, portfolioIDs, resultUseTypeID);
    // string dateFormat = computeDate.ToString("yyyy-MM-dd");
    // string sql = string.Format("DELETE FROM TransactionProfitLosses WHERE AsOfDate='{0}'", dateFormat);
    // Framework.QueryInfo info = new Framework.QueryInfo();
    // info.CustomSQL = sql;
    // Dao.ExecuteNonQuery(info);
    
    
    // string column = "AsOfDate "
    // + ", TransactionID "
    // + ", TransactionSubID "
    // + ", PortfolioID"
    // + ", VolumeMeasureUnitID"
    // + ", RealizedVolume"
    // + ", UnrealizedVolume"
    // + ", TotalVolume"
    // + ", ValueCurrencyID"
    // + ", PriorMarkToMarketValue"
    // + ", MarkToMarketValue"
    // + ", PayoffValue"
    // + ", CostValue"
    // + ", RealizedProfitLossValue"
    // + ", UnrealizedProfitLossValue"
    // + ", ProfitLossValue"
    // + ", ResultUseTypeLookupID"
    // + ",CreatedBy"
    // + ",CreateDate";
    
    
    // int iCount = 0;
    
    // foreach (int portfolioID in portfoliIDKeys)
    // {
    // System.Text.StringBuilder sb = new StringBuilder();
    
    // IList<TranProfitloss> transactionProfitLossList = (IList<TranProfitloss>)transactionProfitLossTable[portfolioID];
    
    // iCount = 0;
    
    // if (transactionProfitLossList != null && transactionProfitLossList.Count > 0)
    // {
    // for (int i = 0; i < transactionProfitLossList.Count; i++)
    // {
    // TranProfitloss transactionProfitLoss = transactionProfitLossList[i];
    // sb.Append("INSERT INTO TransactionProfitLosses(" + column + ")");
    // sb.Append("VALUES('" + transactionProfitLoss.AsOfDate + "'");
    // sb.Append(",'" + transactionProfitLoss.TransactionId + "'");
    // sb.Append(",'" + transactionProfitLoss.TransactionSubId + "'");
    // sb.Append(",'" + transactionProfitLoss.PortfolioId + "'");
    // sb.Append(",'" + transactionProfitLoss.VolumeMeasureUnit + "'");
    // sb.Append(",'" + transactionProfitLoss.RealizedVolume + "'");
    // sb.Append(",'" + transactionProfitLoss.UnrealizedVolume + "'");
    // sb.Append(",'" + transactionProfitLoss.TotalVolume + "'");
    // sb.Append(",'" + transactionProfitLoss.ValueCurrency + "'");
    // sb.Append(",'" + transactionProfitLoss.PriorMarkToMarketValue + "'");
    // sb.Append(",'" + transactionProfitLoss.MarkToMarketValue + "'");
    // sb.Append(",'" + transactionProfitLoss.PayoffValue + "'");
    // sb.Append(",'" + transactionProfitLoss.CostValue + "'");
    // sb.Append(",'" + transactionProfitLoss.RealizedProfitlossValue + "'");
    // sb.Append(",'" + transactionProfitLoss.UnrealizedProfitlossValue + "'");
    // sb.Append(",'" + transactionProfitLoss.ProfitlossValue + "'");
    // sb.Append(",'" + (int)transactionProfitLoss.ResultUseType + "'");
    // sb.Append(",'" + transactionProfitLoss.CreateUid + "'");
    // sb.Append(",'" + transactionProfitLoss.CreateDate + "')");
    // sb.Append("
    ");
    
    // iCount++;
    
    // if (iCount > 2000)
    // {
    
    // try
    // {
    // info.CustomSQL = sb.ToString();
    // Dao.ExecuteNonQuery(info);
    
    // }
    // catch (Exception ex)
    // {
    // //LOG.Error(string.Format("ERROR - Error no Insert 1. Error message: {0}", ex.Message));
    // throw;
    // }
    
    // iCount = 0;
    // sb.Clear();
    // }
    
    // }
    
    // try
    // {
    // info.CustomSQL = sb.ToString();
    // Dao.ExecuteNonQuery(info);
    
    // }
    // catch (Exception ex)
    // {
    // //LOG.Error(string.Format("ERROR - Error no Insert 2. Error message: {0}", ex.Message));
    // throw;
    // }
    // }
    // }
    
    // transactionProfitLossTable.Clear();
    // transactionProfitLossTable = null;
    
    // GC.Collect();
    // GC.WaitForPendingFinalizers();
    // }
    // //LOG.Warn(string.Format("Finish SaveComputedTransactionPayOffs() , {0}", DateTime.Now));
    //}
    #endregion
    
    // //LOG.Warn(string.Format("Finish ComputeTransactionProfitLossByDate() , {0}", DateTime.Now));
    //}
    
    #endregion
    
    #region 第4步 riskReturnComputationService.ProcessPriceReturn(CurrentUser2.UserId, CurrentUser2.UserName, computeDate,dic == null ? periodLength : (int)dic["periodLength"],dic == null ? windowSize : (int)dic["windowSize"], dic == null ? dateTimeSpan : (int)dic["dateTimeSpan"]);
    #region riskReturnComputationService.ProcessPriceReturn具体实现
    //public void ProcessPriceReturn(string SessionId, string SessionName, DateTime computeDate, int periodLength, int windowSize, int dateTimeSpan)
    //{
    // int totalPeriodLength = periodLength + windowSize + dateTimeSpan;
    // DateTime startCloseDate = computeDate.AddDays(-totalPeriodLength);
    // DateTime endCloseDate = computeDate;
    
    // Hashtable calculatedPriceReturnTable = ComputePriceReturn(SessionId, SessionName, computeDate, periodLength, windowSize, dateTimeSpan);
    #region ComputePriceReturn实现
    //private Hashtable ComputePriceReturn(string SessionId, string SessionName, DateTime computeDate, int periodLength, int windowSize, int dateTimeSpan)
    //{
    
    // Hashtable marketDataRiskViewTable = GetActiveMarketDataRiskViewList(computeDate, periodLength, windowSize, dateTimeSpan);
    #region GetActiveMarketDataRiskViewList实现
    //private Hashtable GetActiveMarketDataRiskViewList(DateTime computeDate, int periodLength, int windowSize, int dateTimeSpan)
    //{
    // //LOG.Warn(string.Format("In GetActiveMarketDataRiskViewList(), {0}", DateTime.Now));
    
    // int totalPeriodLength = 0;
    // DateTime startCloseDate = new DateTime();
    // DateTime endCloseDate = new DateTime();
    
    // totalPeriodLength = periodLength + windowSize + dateTimeSpan;
    // startCloseDate = computeDate.AddDays(-totalPeriodLength);
    // endCloseDate = computeDate;
    // IList<MktPriceMarketData> indexPriceMarketDataViewList = indexPriceMarketDataViewService.GetActiveListByDates(startCloseDate, endCloseDate);
    #region indexPriceMarketDataViewService.GetActiveListByDates(startCloseDate, endCloseDate)实现
    //public IList<MktPriceMarketData> GetActiveListByDates(DateTime start, DateTime endtime)
    //{
    // Framework.QueryInfo info = new QueryInfo();
    // info.Parameters.Add("StartDate", start);
    // info.Parameters.Add("EndDate", endtime);
    
    // var ds = Holworth.Utility.HraUtility.EntityRowMapper.ExcuteDataSet("GetPriceMarketDataSql", info);
    #region 执行的sql
    string sql2 = @" SELECT IPMD.Index_Price_Factor_ID,
    ipmd.index_price_factor_name
    ,IPMD.Close_Date
    ,RF.Risk_Factor_ID
    ,IPMD.PRICE_MARKET_DATA_ID
    ,IPMD.Data_Type
    ,ipmd.DATA_TYPE_NAME
    ,IPMD.Upload_Date
    ,IPMD.Contract_Type
    ,ipmd.CONTRACT_TYPE_NAME
    ,IPMD.Reset_Date
    ,IPMD.Bid_Price_Value
    ,IPMD.Middle_Price_Value
    ,IPMD.Offer_Price_Value
    ,IPMD. Create_Uid
    ,ipmd.CREATE_UNAME
    ,IPMD.Create_Date
    ,IPMD.Last_Mod_Uname
    ,IPMD.Last_Mod_Uid
    ,IPMD.Last_Mod_Datetime
    FROM RSK_FACTOR RF inner join MKT_INDEX_PRICE_FACTOR ipf on rf.index_price_factor_id=ipf.index_price_factor_id
    join mkt_price_market_data IPMD on ipmd.index_price_factor_id=ipf.index_price_factor_id
    WHERE RF.Active_Flag = 1
    AND RF.Index_Price_Factor_Id IS NOT NULL
    and ipmd.close_date between :StartDate and :EndDate";
    #endregion
    // IList<MktPriceMarketData> list = new System.Collections.Generic.List<MktPriceMarketData>();
    #region 把上面的表格数据转化 IList<MktPriceMarketData>
    
    // for (var i = 0; i < ds.Tables[0].Rows.Count; i++)
    // {
    // string s = "";
    // var row = ds.Tables[0].Rows[i];
    // MktPriceMarketData m = new MktPriceMarketData();
    // m.IndexPriceFactorId = int.Parse(row["Index_Price_Factor_ID"].ToString());
    // m.IndexPriceFactorName = row["index_price_factor_name"].ToString();
    // s = row["Close_Date"].ToString();
    // if (!string.IsNullOrEmpty(s))
    // {
    // m.CloseDate = DateTime.Parse(s);
    // }
    // m.RiskFactorId = int.Parse(row["Risk_Factor_ID"].ToString());
    // m.Id = row["PRICE_MARKET_DATA_ID"].ToString();
    // m.DataType = row["Data_Type"].ToString();
    // m.DataTypeName = row["DATA_TYPE_NAME"].ToString();
    // if (!string.IsNullOrEmpty(row["Upload_Date"].ToString()))
    // {
    // m.UploadDate = DateTime.Parse(row["Upload_Date"].ToString());
    // }
    // m.ContractType = row["Contract_Type"].ToString();
    // m.ContractTypeName = row["CONTRACT_TYPE_NAME"].ToString();
    // if (!string.IsNullOrEmpty(row["Reset_Date"].ToString()))
    // {
    // m.ResetDate = DateTime.Parse(row["Reset_Date"].ToString());
    // }
    // decimal a = 0;
    // decimal.TryParse(row["Bid_Price_Value"].ToString(), out a);
    // m.BidPriceValue = a;
    // a = 0;
    // decimal.TryParse(row["Bid_Price_Value"].ToString(), out a);
    // m.MiddlePriceValue = a;
    // a = 0;
    // decimal.TryParse(row["Offer_Price_Value"].ToString(), out a);
    // m.OfferPriceValue = a;
    // a = 0;
    // decimal.TryParse(row["Bid_Price_Value"].ToString(), out a);
    // m.BidPriceValue = a;
    // m.CreateUid = row["Create_Uid"].ToString();
    // m.CreateUname = row["CREATE_UNAME"].ToString();
    // if (!string.IsNullOrEmpty(row["Last_Mod_Datetime"].ToString()))
    // {
    // m.LastModDatetime = DateTime.Parse(row["Last_Mod_Datetime"].ToString());
    // }
    // if (!string.IsNullOrEmpty(row["Create_Date"].ToString()))
    // {
    // m.CreateDate = DateTime.Parse(row["Create_Date"].ToString());
    // }
    // m.LastModUid = row["Last_Mod_Uid"].ToString();
    // m.LastModUname = row["Last_Mod_Uname"].ToString();
    // list.Add(m);
    // }
    // return list;
    //} 
    #endregion
    #endregion
    // Hashtable indexPriceDataViewTable = new Hashtable();
    // //kxb怀疑此处有问题
    // var indexPriceDataViews = from indexP in indexPriceMarketDataViewList
    // group indexP by indexP.RiskFactorId into g
    // select new
    // {
    // RiskFactorId = g.Key,
    // dataViews = g
    // };
    
    // if (indexPriceDataViews != null)
    // {
    // foreach (var indexPriceDataView in indexPriceDataViews)
    // {
    // //kxb怀疑此处有问题
    // List<MktPriceMarketData> indexPriceMarketDataRiskVwList = indexPriceDataView.dataViews.ToList<MktPriceMarketData>();
    // indexPriceDataViewTable.Add(indexPriceDataView.RiskFactorId, indexPriceMarketDataRiskVwList);
    // }
    // }
    
    // // LOG.Warn(string.Format("Finish GetActiveMarketDataRiskViewList(), {0}", DateTime.Now));
    // return indexPriceDataViewTable;
    //}
    
    #endregion
    // Hashtable computedPriceReturnTable = new Hashtable();
    
    // ICollection riskFactorIDKeys = marketDataRiskViewTable.Keys;
    
    // foreach (int riskFactorID in riskFactorIDKeys)
    // {
    // IList<MktPriceMarketData> marketDataRiskViewList = (IList<MktPriceMarketData>)marketDataRiskViewTable[riskFactorID];
    // IList<RskFactorReturnData> riskReturnDataList = ComputeRiskReturnDataByDateID(SessionId, SessionName, marketDataRiskViewList, dateTimeSpan);
    #region ComputeRiskReturnDataByDateID(SessionId, SessionName, marketDataRiskViewList, dateTimeSpan)实现
    //public IList<RskFactorReturnData> ComputeRiskReturnDataByDateID(string SessionId1, string SessionName1, IList<MktPriceMarketData> indexPriceMarketDataRiskViewList, int dateTimeSpan)
    //{
    
    
    // //RiskFactorReturnData riskReturn = new RiskFactorReturnData();
    // IList<RskFactorReturnData> riskReturnDataList = new List<RskFactorReturnData>();
    
    // int riskFactorID;
    // DateTime currentCloseDate = new DateTime();
    // DateTime priorCloseDate = new DateTime();
    // double currentPrice = new double();
    // double priorPrice = new double();
    // double priceReturn = new double();
    
    // bool isFirstCloseDate = true;
    
    
    // if (indexPriceMarketDataRiskViewList.Count > 1)
    // {
    // foreach (MktPriceMarketData indexPriceData in indexPriceMarketDataRiskViewList)
    // {
    // RskFactorReturnData riskReturn = new RskFactorReturnData();
    
    // riskFactorID = indexPriceData.RiskFactorId;
    // currentCloseDate = indexPriceData.CloseDate.Value;
    
    // if (!businessDateService.IsBusinessDate(currentCloseDate))
    // {
    // continue;
    // }
    
    // currentPrice = (double)indexPriceData.MiddlePriceValue;
    
    // priorCloseDate = currentCloseDate.AddDays(-dateTimeSpan);
    
    // if (!isFirstCloseDate)
    // {
    // if (currentPrice > 0 && priorPrice > 0)
    // {
    // priceReturn = Math.Log(currentPrice) - Math.Log(priorPrice);
    // }
    // else
    // {
    // // LOG.Warn("There are no price return data for " + riskFactorID.ToString());
    // priceReturn = -0.9999;
    // }
    
    // riskReturn.DataType = "1000";
    // riskReturn.ComputeDate = currentCloseDate;
    // riskReturn.PriorCloseDate = priorCloseDate;
    // riskReturn.RiskReturnValue = (decimal)priceReturn;
    // riskReturn.RiskFactorId = riskFactorID;
    // riskReturn.ReturnType = HRAModel.Sys.Enum.Return_Data_Type.Return_Data_Type_Log_Differential;
    // riskReturn.PeriodType = HRAModel.Sys.Enum.Volume_Period_Type.Volume_Period_Type_Daily;
    // riskReturn.DateTimeSpan = dateTimeSpan;
    // riskReturn.CreateUname = SessionName1;
    // riskReturn.CreateDate = DateTime.Now;
    // riskReturn.LastModUname = SessionName1;
    // riskReturn.LastModDatetime = DateTime.Now;
    // riskReturnDataList.Add(riskReturn);
    // }
    // else
    // {
    // isFirstCloseDate = false;
    // }
    
    // priorPrice = currentPrice;
    // }
    // }
    
    // //LOG.Warn(string.Format("Finish ComputeRiskReturnDataByDateID(), {0}", DateTime.Now));
    // return riskReturnDataList;
    //}
    #endregion
    // computedPriceReturnTable.Add(riskFactorID, riskReturnDataList);
    // }
    
    // return computedPriceReturnTable;
    //}
    
    #endregion
    // //改成文件导入形式
    // Computed2PriceReturn(calculatedPriceReturnTable, startCloseDate, endCloseDate);
    #region Computed2PriceReturn(calculatedPriceReturnTable, startCloseDate, endCloseDate);
    //private void Computed2PriceReturn(Hashtable ComputedPriceReturnTable, DateTime startCloseDate, DateTime endCloseDate)
    //{
    // //LOG.Warn(string.Format("In SaveCalculatedPriceReturn(), {0}", DateTime.Now));
    
    // ICollection riskFactorIdKeys = ComputedPriceReturnTable.Keys;
    
    // int[] riskFactorIDArray = riskFactorIdKeys.Cast<int>().ToArray();
    // // RiskFactorReturnDataSpringDao riskFactorReturnDataSpringDao = (RiskFactorReturnDataSpringDao)DaoFactory.CreateDao("RiskFactorReturnData");
    
    // Framework.QueryInfo info = new Framework.QueryInfo();
    // if (riskFactorIDArray.Length > 0)
    // {
    // info.Parameters.Add("RiskFactorID", riskFactorIDArray);
    // }
    // else
    // {
    // int[] a = { 0 };
    // info.Parameters.Add("RiskFactorID", a);
    // }
    // info.Parameters.Add("StartDate", startCloseDate);
    // info.Parameters.Add("EndDate", endCloseDate);
    // info.CustomSQL = Holworth.Utility.HraUtility.EntityRowMapper.getSql("//data//GetRiskReturnDataSql//deleteByStartDateIDsSQL");
    // int result = Dao.ExecuteUpdate(info);
    // // 1. delete all existing risk factor return data for these riskFactorIDs within the date range
    // // int result = riskFactorReturnDataSpringDao.DeleteListByStartDateIDs(riskFactorIDArray, startCloseDate, endCloseDate);
    
    // // 2. save all the riskfactor return data
    // System.Collections.ArrayList list = new ArrayList();
    
    // foreach (int indexPriceFactorID in riskFactorIdKeys)
    // {
    // IList<RskFactorReturnData> riskReturnDataList = (IList<RskFactorReturnData>)ComputedPriceReturnTable[indexPriceFactorID];
    // for (var i = 0; i < riskReturnDataList.Count; i++)
    // {
    // RskFactorReturnData riskFactorReturnData = riskReturnDataList[i];
    // riskFactorReturnData.Id = "";
    // riskFactorReturnData.CreateUname = CurrentUser.UserName;
    // riskFactorReturnData.CreateUid = CurrentUser.UserId;
    // riskFactorReturnData.CreateOid = CurrentUser.OfficeId;
    // riskFactorReturnData.CreateDate = DateTime.Now;
    // riskFactorReturnData.CreatePid = CurrentUser.PositionId;
    // riskFactorReturnData.LastModDatetime = DateTime.Now;
    // riskFactorReturnData.LastModOid = CurrentUser.OfficeId;
    // riskFactorReturnData.LastModUname = CurrentUser.UserName;
    // riskFactorReturnData.LastModUid = CurrentUser.UserId;
    // riskFactorReturnData.LastModOid = CurrentUser.OfficeId;
    // //riskFactorReturnData.RiskReturnValue = decimal.Round((decimal) riskFactorReturnData.RiskReturnValue, 2);
    // riskFactorReturnData.State.MarkNew();
    // list.Add(riskFactorReturnData);
    // }
    // }
    // if (list.Count > 0)
    // {
    // Dao.SaveOrUpdateAll(list);
    // }
    //}
    #endregion
    //}
    #endregion
    
    
    #endregion
    
    }
    }
    }
  • 相关阅读:
    复杂模拟 | 1017 模拟N个顾客M个柜台进行排队
    徒手实现lower_bound和upper_bound
    树状数组 | 1057
    动态规划 | 最长回文子串 1040
    动态规划 | 背包问题 1068
    动态规划 | 对输入进行hash处理的LIS 1045
    总结那些有默认margin,padding值的html标签
    javascript 的七种基本数据类型
    牛客网笔试题整理
    JavaScript 的数据结构与算法
  • 原文地址:https://www.cnblogs.com/kexb/p/5447142.html
Copyright © 2011-2022 走看看