联系

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("\r\n");

// 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

}
}
}

 

posted on 2016-04-29 17:28  听哥哥的话  阅读(675)  评论(0编辑  收藏  举报

导航