Esempio n. 1
0
        static void Main(string[] args)
        {
            SolidEdgeFramework.Application   application = null;
            SolidEdgePart.SheetMetalDocument document    = null;

            try
            {
                // Register with OLE to handle concurrency issues on the current thread.
                SolidEdgeCommunity.OleMessageFilter.Register();

                // Connect to or start Solid Edge.
                application = SolidEdgeCommunity.SolidEdgeUtils.Connect();

                // Get a reference to the active document.
                document = application.GetActiveDocument <SolidEdgePart.SheetMetalDocument>(false);

                // Make sure we have a document.
                if (document != null)
                {
                    VariablesHelper.ReportVariables(document);
                }
                else
                {
                    throw new System.Exception("No active document.");
                }
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                SolidEdgeCommunity.OleMessageFilter.Unregister();
            }
        }
Esempio n. 2
0
        public virtual IRssItemHandler GetRssItemHandler(string handlerId, Dictionary <string, string> variables)
        {
            var service = this.ServiceProvider.GetRequiredService <T>();

            VariablesHelper.Inject(service, VariableInfos, variables);
            return(service);
        }
Esempio n. 3
0
        public ISyncSource GetSyncSource(string syncSourceId, Dictionary <string, string> variables)
        {
            var ss = new RssFetcherSyncSource(syncSourceId);

            VariablesHelper.Inject(ss, VariableInfos, variables);
            return(ss);
        }
Esempio n. 4
0
        public ActionResult Index(string projectGuid, string paymentDay)
        {
            var projectLogicModel = new ProjectLogicModel(CurrentUserName, projectGuid);
            var project           = projectLogicModel.Instance;

            var datasetSchedule = projectLogicModel.DealSchedule.GetByPaymentDay(DateUtils.ParseDigitDate(paymentDay));

            CommUtils.AssertNotNull(datasetSchedule.Dataset.Instance,
                                    "Dataset数据加载失败,projectGuid=[" + projectGuid + "] paymentDay=[" + paymentDay + "]");
            var dataset = datasetSchedule.Dataset.Instance;

            var notes      = m_dbAdapter.Dataset.GetNotes(project.ProjectId);
            var cnabsNotes = projectLogicModel.Notes;
            var noteDict   = Toolkit.GetNoteDictionary(project, notes, cnabsNotes);

            var dealSchedule     = NancyUtils.GetDealSchedule(project.ProjectId);
            var noteDatas        = m_dbAdapter.Dataset.GetNoteDatas(dataset.DatasetId);
            var datasetViewModel = Toolkit.GetDatasetViewModel(dataset, dealSchedule.PaymentDates, noteDict, noteDatas);


            var             datasetFolder    = m_dbAdapter.Dataset.GetDatasetFolder(project, dataset.AsOfDate);
            VariablesHelper helper           = new VariablesHelper(datasetFolder);
            var             variables        = helper.GetVariablesByDate(dataset.PaymentDate.Value);
            var             rateResetRecords = InterestRateUtils.RateResetRecords(variables);

            //计算当期浮动利率
            datasetViewModel.NoteDatas.ForEach(x => x.CurrentCouponRate = InterestRateUtils.CalculateCurrentCouponRate(x.NoteInfo.CouponString, rateResetRecords));

            var viewModel = new CashflowDatasetViewModel();

            viewModel.Dataset     = datasetViewModel;
            viewModel.ProjectGuid = projectGuid;

            //添加今天之前所有已上传模型的支付日
            var nowDate = DateTime.Today;

            viewModel.ValidPaymentDays = datasetSchedule.SelectPaymentDates(
                x => x.PaymentDate <= nowDate &&
                x.Dataset != null && x.Dataset.Instance != null);

            if (project.CnabsDealId.HasValue)
            {
                viewModel.AllPaymentDays = m_dbAdapter.Model.GetPaymentDates(project.CnabsDealId.Value);
            }
            else
            {
                if (projectLogicModel.DealSchedule.Instanse != null)
                {
                    viewModel.AllPaymentDays = projectLogicModel.DealSchedule.Instanse.PaymentDates.ToList();
                }
                else
                {
                    viewModel.AllPaymentDays = new List <DateTime>();
                }
            }

            return(View(viewModel));
        }
Esempio n. 5
0
        protected override object MakeObjectInstance()
        {
            var logicModel = new ProjectLogicModel(m_userName, m_project);

            var schedule = logicModel.DealSchedule.Instanse;

            var firstNoteAccrualDates = schedule.NoteAccrualDates.First().Value;
            var firstNoteName         = schedule.NoteAccrualDates.First().Key;

            foreach (var key in schedule.NoteAccrualDates.Keys)
            {
                var noteAccrualDates = schedule.NoteAccrualDates[key];
                CommUtils.AssertEquals(firstNoteAccrualDates.Length, noteAccrualDates.Length,
                                       "检测到证券期数不一致,[{0}]={1},[{2}]={3}",
                                       firstNoteName, firstNoteAccrualDates.Length,
                                       key, noteAccrualDates.Length);

                for (int i = 0; i < firstNoteAccrualDates.Length; i++)
                {
                    CommUtils.Assert(firstNoteAccrualDates[i] == noteAccrualDates[i],
                                     "检测到第[{0}]期证券Accrual date不一致,[{1}]={2},[{3}]={4}",
                                     i + 1, firstNoteName, firstNoteAccrualDates[i].ToShortDateString(),
                                     key, noteAccrualDates[i].ToShortDateString());
                }
            }

            //从第N期开始模型数据时,getDealSchedule中不包含前几期的PaymentDate
            List <DateTime> paymentDates = schedule.PaymentDates.ToList();

            if (m_project.CnabsDealId.HasValue)
            {
                paymentDates = m_dbAdapter.Model.GetPaymentDates(m_project.CnabsDealId.Value);
            }

            var datasets    = m_dbAdapter.Dataset.GetDatasetByProjectId(m_project.ProjectId);
            var paymentDate = paymentDates.First(x => x == m_paymentDay);
            var sequence    = paymentDates.FindIndex(x => x == m_paymentDay);

            datasets = datasets.Where(x => x.PaymentDate.HasValue && x.PaymentDate.Value <= paymentDate).ToList();
            var findDatasets = datasets.Where(x => x.PaymentDate.HasValue && x.PaymentDate.Value == paymentDate).ToList();

            findDatasets.Sort((l, r) => l.AsOfDate.CompareTo(r.AsOfDate));
            CommUtils.Assert(findDatasets.Count >= 1, "找不到偿付期为 [{0}] 的数据模型", DateUtils.DateToString(paymentDate));
            var dataset   = findDatasets[0];
            var datasetId = dataset.DatasetId;

            var notes     = m_dbAdapter.Dataset.GetNotes(m_project.ProjectId);
            var noteDatas = m_dbAdapter.Dataset.GetNoteDatas(datasetId);

            //初始化note信息
            List <Note> cnabsNotes = new ProjectLogicModel(m_userName, m_project).Notes;


            var datasetFolder       = m_dbAdapter.Dataset.GetDatasetFolder(m_project, dataset.AsOfDate);
            var variablesCsv        = new VariablesHelper(datasetFolder);
            var futureVariablesPath = Path.Combine(datasetFolder, "FutureVariables.csv");
            var variables           = variablesCsv.GetVariablesByDate(dataset.PaymentDate.Value);
            var rateResetRecords    = InterestRateUtils.RateResetRecords(variables);

            var idrObj = new IncomeDistributionReport();

            idrObj.Sequence          = sequence + 1;
            idrObj.SequenceCN        = idrObj.Sequence.ToCnString();
            idrObj.Security          = new Dictionary <string, PaymentDetail>();
            idrObj.PriorSecurityList = new List <PaymentDetail>();
            idrObj.SubSecurityList   = new List <PaymentDetail>();
            idrObj.SecurityList      = new List <PaymentDetail>();
            idrObj.BeginAccrualDate  = sequence == 0 ? schedule.FirstAccrualDate : schedule.NoteAccrualDates.First().Value[sequence - 1];
            idrObj.EndAccrualDate    = schedule.NoteAccrualDates.First().Value[sequence];
            idrObj.AccrualDateSum    = (idrObj.EndAccrualDate - idrObj.BeginAccrualDate).Days;
            for (int i = 0; i < notes.Count; i++)
            {
                var note = notes[i];
                note.CouponString = InterestRateUtils.CalculateCurrentCouponRate(cnabsNotes[i].CouponString, rateResetRecords);

                var noteData = noteDatas.Single(x => x.NoteId == note.NoteId);

                CommUtils.Assert(noteData.HasValue, "兑付日为[{0}]的偿付期内,证券端现金流类型的工作未核对", paymentDate.ToShortDateString());

                idrObj.Security[note.ShortName] = GeneratePaymentDetail(note, noteData, idrObj.Security.Count + 1);

                if (note.IsEquity)
                {
                    idrObj.SubSecurityList.Add(GeneratePaymentDetail(note, noteData, idrObj.SubSecurityList.Count + 1));
                }
                else
                {
                    idrObj.PriorSecurityList.Add(GeneratePaymentDetail(note, noteData, idrObj.PriorSecurityList.Count + 1));
                }

                idrObj.SecurityList.Add(GeneratePaymentDetail(note, noteData, idrObj.SecurityList.Count(x => x.Money != 0) + 1));
            }

            Func <IEnumerable <PaymentDetail>, PaymentDetail> sum = (values) => new PaymentDetail
            {
                Residual         = values.Sum(x => x.Residual),
                Principal        = values.Sum(x => x.Principal),
                Interest         = values.Sum(x => x.Interest),
                Money            = values.Sum(x => x.Money),
                UnitCount        = values.Sum(x => x.UnitCount),
                SumPaymentAmount = values.Sum(x => x.SumPaymentAmount)
            };

            idrObj.Sum      = sum(idrObj.Security.Values);
            idrObj.SumPrior = sum(idrObj.Security.Values.Where(x => !x.IsEquity));
            idrObj.SumSub   = sum(idrObj.Security.Values.Where(x => x.IsEquity));

            GeneratePercentTable(idrObj, datasets, notes, schedule.PaymentDates);

            idrObj.RepayDetail                       = GenerateRepayDetail(idrObj.SecurityList, x => x.NameCN);
            idrObj.RepayDetailWithHyphen             = GenerateRepayDetail(idrObj.SecurityList, x => x.NameCNHyphen);
            idrObj.RepayDetailWithHyphenByJinTai     = GenerateRepayDetailByJinTai(idrObj.SecurityList, x => x.NameCNHyphen);
            idrObj.RepayPrincipalDetail              = GenerateRepayPrincipalDetail(idrObj.SecurityList);
            idrObj.DenominationDetail                = GenerateDenominationDetail(idrObj.SecurityList);
            idrObj.EquityRegisterDetail              = GenerateEquityRegisterDetail(idrObj.SecurityList, dataset.PaymentDate.Value);
            idrObj.EquityRegisterDetailByJinTai      = GenerateEquityRegisterDetailByJinTai(idrObj.SecurityList, dataset.PaymentDate.Value);
            idrObj.EquityRegisterDetailByZhongGang   = GenerateEquityRegisterDetailByZhongGang(idrObj.SecurityList, dataset.PaymentDate.Value);
            idrObj.EquityRegisterDetailByYingBinGuan = GenerateEquityRegisterDetailByYingBinGuan(idrObj.SecurityList, dataset.PaymentDate.Value);

            idrObj.T = dataset.PaymentDate.Value;

            if (paymentDates.First() == idrObj.T)
            {
                idrObj.PreviousT = schedule.ClosingDate;
            }
            else
            {
                var previousIndex = paymentDates.IndexOf(idrObj.T) - 1;
                idrObj.PreviousT = paymentDates[previousIndex];
            }

            idrObj.DurationDayCount = (idrObj.T - idrObj.PreviousT).Days;

            var t_1 = dataset.PaymentDate.Value.AddDays(-1);

            while (!CalendarCache.IsTradingDay(t_1))
            {
                t_1 = t_1.AddDays(-1);
            }
            idrObj.T_1         = t_1;
            idrObj.Date        = DateTime.Today;
            idrObj.TaskEndTime = m_timeStamp;
            return(idrObj);
        }
Esempio n. 6
0
        private void ProcessVaiables(string projectFolder, BasicAnalyticsData basicAnalyticsData)
        {
            double sumPrincipal = basicAnalyticsData.BasicAssetCashflow.BasicAssetCashflowItems
                                  .Where(x => x.PaymentDate == m_paymentDay).Sum(x => x.Principal);
            double sumInterest = basicAnalyticsData.BasicAssetCashflow.BasicAssetCashflowItems
                                 .Where(x => x.PaymentDate == m_paymentDay).Sum(x => x.Interest);
            NancyBasicCashflowItem basicCashflowItem = basicAnalyticsData.BasicCashflow.BasicCashflowItems.Where(x => x.PaymentDate == m_previousPaymentDay).Single();

            VariablesHelper helper = new VariablesHelper(Path.Combine(projectFolder, m_nextAsOfDay.Value.ToString("yyyyMMdd")));

            helper.Load();
            helper.TranferToAsofdate(m_nextAsOfDay.Value);
            helper.Save(Path.Combine(projectFolder, m_nextAsOfDay.Value.ToString("yyyyMMdd")));

            //{

            //    var nextCurrentVariablesPath = Path.Combine(nextDatasetFolder, "CurrentVariables.csv");

            //    var nextFutureVariablesPath = Path.Combine(nextDatasetFolder, "FutureVariables.csv");

            //    var nextPastVariablesPath = Path.Combine(nextDatasetFolder, "PastVariables.csv");

            //    currentVariablesCsv = new VariablesCsv();
            //    currentVariablesCsv.Load(nextCurrentVariablesPath);
            //    //current variables中的 日期指的是前一个偿付日
            //    currentVariablesCsv.UpdateColumnDate(m_previousPaymentDay, m_paymentDay);

            //    futureVariablesCsv = new VariablesCsv();
            //    futureVariablesCsv.Load(nextFutureVariablesPath);

            //    if (m_paymentDay != m_previousPaymentDay)
            //    {
            //        futureVariablesCsv.RemoveColumn(m_previousPaymentDay);
            //    }

            //    //在PastVariables.csv中填入 支付日
            //    var pastVariablesCsv = new VariablesCsv();
            //    pastVariablesCsv.Load(nextPastVariablesPath);
            //    m_dealSchedule.PaymentDates.Where(x => x < m_paymentDay).ToList().ForEach(x =>
            //    {
            //        if (!pastVariablesCsv.DateColumns.Contains(x))
            //        {
            //            pastVariablesCsv.DateColumns.Add(x);
            //        }
            //    });
            //    pastVariablesCsv.Save(nextPastVariablesPath);
            //}

            //资产覆盖现金流的情况下,资产端的本金和利息一般是0
            //这时如果将 Collateral.InterestCollection 和 Collateral.PrincipalCollection 填 0,会导致证券端偿付金额为 0,不填即可
            if (MathUtils.MoneyNE(sumInterest, 0) && MathUtils.MoneyNE(sumPrincipal, 0))
            {
                helper.UpdateVariableValue("Collateral.InterestCollection", m_asOfDay, sumInterest.ToString());
                helper.UpdateVariableValue("Collateral.PrincipalCollection", m_asOfDay, sumPrincipal.ToString());
            }

            string reserveAmount = "";

            //第一期生成第二期数据时,由于CurrentVariables.csv中支付日是第一个支付日
            //Reserve账户会重新计算,所以不需要在ReserveAmount中填值
            if (m_paymentDay != m_dealSchedule.PaymentDates.First())
            {
                reserveAmount = basicCashflowItem.ReserveAmountEndBalance.ToString();
            }
            helper.UpdateVariableValue("ReserveAmount", m_asOfDay, reserveAmount);



            //第一期要特殊处理(生成第N期PaymentDate模型时,填写参数的ColumnName从第N-1期开始)
            if (m_paymentDay != m_previousPaymentDay)
            {
                foreach (var note in basicCashflowItem.Notes)
                {
                    var principal = (note.BeginningPrincipalOutstanding - note.PrincipalReceived).ToString();
                    helper.UpdateVariableValue(note.NoteName, m_paymentDay, principal);
                }
            }

            helper.Save(Path.Combine(projectFolder, m_nextAsOfDay.Value.ToString("yyyyMMdd")));
        }