private List <CashflowVariablesData> CheckAndConvertOverridableVariableList(DatasetLogicModel dataset, string varList) { var overridableVariables = new List <CashflowVariablesData>(); var dictNameDescription = new Dictionary <string, string>(); foreach (var record in dataset.Variables.FutureVariables) { dictNameDescription[record.Name] = record.Description; } Func <string, string> getDescription = x => dictNameDescription.ContainsKey(x) ? dictNameDescription[x] : null; var overridableVariablesStu = CommUtils.FromJson <CashflowVariableStu[]>(varList).ToList(); foreach (var overridableVariable in overridableVariablesStu) { double value = 0.0; var cnName = Translate(overridableVariable.Name, getDescription(overridableVariable.Name)); CommUtils.Assert(double.TryParse(overridableVariable.Value, out value) && value >= 0, "[{0}]必须是非负合法数字", cnName); overridableVariables.Add(new CashflowVariablesData { EnName = overridableVariable.Name, CnName = cnName, Value = value }); } return(overridableVariables); }
public DealLogicModel(DatasetLogicModel dataset, string ymlPath, string datasetPath) : base(dataset.ProjectLogicModel) { m_datasetLogicModel = dataset; if (!ymlPath.EndsWith("script.yml", StringComparison.CurrentCultureIgnoreCase)) { ymlPath = Path.Combine(ymlPath, "script.yml"); } m_ymlPath = ymlPath; m_datasetPath = datasetPath; m_asOfDate = datasetPath.EndsWith("\\") || datasetPath.EndsWith("/") ? Path.GetFileName(Path.GetDirectoryName(datasetPath)) : Path.GetFileName(datasetPath); CommUtils.Assert(DateUtils.IsDigitDate(m_asOfDate), "解析AsOfDate失败:datasetPath={0}", datasetPath); }
public static void CheckAmortizationSchedule(DatasetLogicModel dataset, string asOfDate) { CommUtils.Assert(dataset != null && dataset.Instance != null, "查找模型失败asOfDate={0}", asOfDate); foreach (var asset in dataset.Assets) { if (asset.AmortizationType == AmortizationType.UserDefined) { var amortizationList = asset.Amortization.AmortizationRecords; if (amortizationList.Count > 0) { CommUtils.Assert(amortizationList.Any(x => x.Date >= asset.SecurityData.AsOfDate), "在AmortizationSchedule.csv中,找不到资产[{0}({1})]在asofDate={2}之后的偿付数据。", asset.SecurityData.SecurityName, asset.AssetId, asset.SecurityData.AsOfDate.ToString("yyyy-MM-dd")); } } } }
/// <summary> /// 更新数据库中的参数到模型文件中 /// </summary> private void UpdateVariablesFromTaskDBToModel(DatasetLogicModel dataset, CashflowViewModel dbViewModel) { if (dbViewModel == null || dataset.Instance == null) { return; } var dbVarList = dbViewModel.OverridableVariables; //更新FutureVariables.csv foreach (var keyVal in dbVarList) { dataset.Variables.UpdateVariableValue(keyVal.EnName, dataset.DatasetSchedule.PaymentDate, keyVal.Value.ToString()); } //更新CurrentVariables.csv //设置 OtherIncome = 当期的OtherIncomeMax + 前一期模型的OtherIncome var otherIncomeMaxKeyVal = dbVarList.SingleOrDefault(x => x.EnName.Equals("OtherIncomeMax", StringComparison.CurrentCultureIgnoreCase)); if (otherIncomeMaxKeyVal != null) { var key = "OtherIncome"; var otherIncomeValue = otherIncomeMaxKeyVal.Value; if (dataset.Previous != null && dataset.Previous.Instance != null) { string prevOtherIncomeVal = dataset.Previous.Variables.GetVariable(key); double prevOtherIncome = 0; if (double.TryParse(prevOtherIncomeVal, out prevOtherIncome)) { otherIncomeValue += prevOtherIncome; } } dataset.Variables.UpdateVariableValue(key, dataset.Variables.Asofdate, "其他收益"); dataset.Variables.Save(); } }
/// <summary> /// 从文件中选取可修改变量 /// </summary> private List <CashflowVariablesData> SelectOverridableVariables(DatasetLogicModel dataset) { var varList = new List <CashflowVariablesData>(); var records = dataset.Variables.FutureVariables.Where(x => m_overridableVariableNames.Contains(x.Name)); foreach (var record in records) { double value; if (!double.TryParse(record.Items[dataset.DatasetSchedule.PaymentDate], out value)) { value = 0; } varList.Add(new CashflowVariablesData { EnName = record.Name, CnName = Translate(record.Name, record.Description), Value = value, }); } return(varList); }
private void UpdateVariablesFromCurrPeriodDBToModel(DatasetLogicModel dataset, List <CashflowVariable> variableDateset, int projectId, DateTime paymentDate) { if (dataset == null) { return; } if (variableDateset.Count == 0) { var tasks = m_dbAdapter.Task.GetTasksByProjectId(projectId, true); tasks = tasks.Where(x => x.TaskExtensionId.HasValue && x.TaskExtension.TaskExtensionType == TaskExtensionType.Cashflow.ToString() ).ToList(); if (tasks.Count > 0) { var projectLogicModel = dataset.ProjectLogicModel; var allPaymentDays = projectLogicModel.GetAllPaymentDates(projectLogicModel.DealSchedule.Instanse.PaymentDates); var currPaymentDateIndex = allPaymentDays.IndexOf(paymentDate); if (currPaymentDateIndex != -1) { if (currPaymentDateIndex == 0) { tasks = tasks.Where(x => x.EndTime <= paymentDate).ToList(); } else { tasks = tasks.Where(x => x.EndTime > allPaymentDays[currPaymentDateIndex + 1] && x.EndTime <= paymentDate).ToList(); } if (tasks.Count > 0) { var task = tasks.First(); var dbViewModel = Toolkit.ConvertTaskExtension(task.TaskExtension).Info as CashflowViewModel; if (dbViewModel != null) { var cashflowVariable = SaveOverridableVariable(dbViewModel.OverridableVariables, projectId, paymentDate); UpdateVariablesFromCurrPeriodDBToModel(dataset, cashflowVariable, projectId, paymentDate); } } } } } //更新FutureVariables.csv foreach (var keyVal in variableDateset) { dataset.Variables.UpdateVariableValue(keyVal.EnglishName, dataset.DatasetSchedule.PaymentDate, keyVal.Value.ToString()); } //更新CurrentVariables.csv //设置 OtherIncome = 当期的OtherIncomeMax + 前一期模型的OtherIncome var otherIncomeMaxKeyVal = variableDateset.SingleOrDefault(x => x.EnglishName.Equals("OtherIncomeMax", StringComparison.CurrentCultureIgnoreCase)); if (otherIncomeMaxKeyVal != null) { var key = "OtherIncome"; var otherIncomeValue = otherIncomeMaxKeyVal.Value; if (dataset.Previous != null && dataset.Previous.Instance != null) { //当前一期Dataset存在时,如果前一期的CurrentVariablesCsv不存在,不处理前一期表中的OtherIncome if (dataset.Previous.Variables.CurrentVariables.Count > 0) { //var prevColumnDate = dataset.Previous.Variables..DateColumns.First(); foreach (var record in dataset.Previous.Variables.CurrentVariables) { if (record.Key.Equals(key, StringComparison.OrdinalIgnoreCase)) { double prevOtherIncome = 0; if (double.TryParse(record.Value, out prevOtherIncome)) { otherIncomeValue += prevOtherIncome; break; } } } } } var currentCsv = dataset.Variables.CurrentVariables; CommUtils.Assert(currentCsv.Count > 0, $"第{DateUtils.DateToString(paymentDate)}期模型中,currentCSV不包含任何偿付期列"); var date = dataset.Variables.Asofdate; dataset.Variables.UpdateVariableValue(key, date, otherIncomeValue.ToString(), "其它收益"); dataset.Variables.Save(); } }