Пример #1
0
        /// <summary>
        /// 根据代码取财务数据的请求参数
        /// </summary>
        /// <returns></returns>
        public static ReqFinance GetReqFinance(ulong securityID, List <string> lstIndexCode, DateTime lastDate)
        {
            ReqFinance req = new ReqFinance();

            req.securityIDs.Add(securityID);
            req.fields.Add("Symbol");
            req.fields.Add("EndDate");
            req.fields.AddRange(lstIndexCode);

            //List<DateTime> listDate = TransferHelper.GetFinanceDate();
            //DateTime maxDate = listDate.Max();
            //DateTime startDate = maxDate;
            //foreach(DateTime date in listDate)
            //{
            //    if(date >= lastDate)
            //    {
            //        startDate = date;
            //        break;
            //    }
            //}
            List <DateTime> listDate = TransferHelper.GetFinanceDate();
            DateTime        maxDate  = listDate.Max();

            if (lastDate >= maxDate)
            {
                return(null);
            }

            DateTime startDate = listDate[0];

            foreach (DateTime date in listDate)
            {
                if (date > lastDate)
                {
                    startDate = date;
                    break;
                }
            }
            req.dateBegin = TransferHelper.DateTimeToString(startDate);
            req.dateEnd   = TransferHelper.DateTimeToString(maxDate);

            // 财报统计的截止日期
            req.dateType = ERptDateType.ERptDateClose;
            // 合并本期
            req.reportType = EReportType.MergeCur;
            // TTM,12个月滚动累计 或者是 季度累计
            req.trailType = ETrailType.TrailAddup;
            req.page      = new DataPage()
            {
                begin = 0, end = 0
            };

            return(req);
        }
Пример #2
0
        /// <summary>
        /// 删除过期的财务指标
        /// (就是已经不用显示的季度)
        /// </summary>
        private static void DeleteOverdueFinaceIndex(ulong securityID)
        {
            List <DateTime> lstExistDate   = MongoDBHelper.AsQueryable <FinanceIndexInfo>().Where(m => m.SecurityID == securityID).Select(m => m.EndDate).ToList();
            List <DateTime> listDate       = TransferHelper.GetFinanceDate();
            List <DateTime> lstOverdueDate = lstExistDate.Except(listDate).ToList();

            foreach (DateTime overdueDate in lstOverdueDate)
            {
                string delFilter = "EndDate:ISODate(\"" + overdueDate.ToString("yyyy-MM-dd") + "T00:00:00.000+0800\")";
                MongoDBHelper.DeleteManyAsync <FinanceIndexInfo>(delFilter);
            }
        }
Пример #3
0
        /// <summary>
        /// 缓存财务指标的明细
        /// </summary>
        public static void CacheFinanceIndex()
        {
            LogHelper.Info("总运行", "开始:生成财务指标明细");

            //取得财务指标编号、名称
            var lstIndexLite = from dto in MongoDBHelper.AsQueryable <IndexTreeDTO>()
                               where dto.TypeCode == ConstDefine.CstCode_FinancialIndex
                               select new IndexLiteDTO()
            {
                Code = dto.Code,
                Name = dto.Name
            };

            List <DateTime> listDate = TransferHelper.GetFinanceDate();

            //遍历指标编号,生成选股条件信息
            foreach (IndexLiteDTO indexLite in lstIndexLite)
            {
                //取指定指标的所有指标股票信息
                var lstFinanceIndex = MongoDBHelper.AsQueryable <FinanceIndexInfo>().Where(m => m.IndexCode == indexLite.Code && listDate.Contains(m.EndDate)).ToList();
                if (lstFinanceIndex.Count == 0)
                {
                    continue;
                }

                //按截止日期分组
                var groupByEndDateIndex = (from index in lstFinanceIndex
                                           group index by index.EndDate into g
                                           orderby g.Key descending
                                           select new
                {
                    EndDate = g.Key,
                    EndDateName = g.First().EndDateName,
                    groupList = g
                }).Take(4);
                //截止日期列表(降序)
                var lstEndDate = from groupIndex in groupByEndDateIndex
                                 orderby groupIndex.EndDate descending
                                 select new SelectOption()
                {
                    SelectItem    = TransferHelper.DateTimeToString(groupIndex.EndDate),
                    SelectDisplay = groupIndex.EndDateName
                };
                List <SelectOption> selectTermList = lstEndDate.ToList();

                //指标明细
                List <IndexDetailDTO> lstDto = new List <IndexDetailDTO>();
                //按截止日期遍历
                foreach (var groupByEndDate in groupByEndDateIndex)
                {
                    IndexDetailDTO dto = new IndexDetailDTO();
                    lstDto.Add(dto);

                    dto.Code              = indexLite.Code;
                    dto.Name              = indexLite.Name;
                    dto.SelectTerm        = TransferHelper.DateTimeToString(groupByEndDate.EndDate);
                    dto.SelectTermDisplay = groupByEndDate.EndDateName;
                    dto.SelectTermList    = selectTermList;

                    //取分布值
                    var arrayIndexValues = groupByEndDate.groupList.Select(m => m.IndexValue).OrderBy(m => m).ToArray();
                    //设置最大值、最小值、分布值
                    SetMaxMinArrValue(dto, arrayIndexValues, true);
                }

                //设置默认选项(第二个)
                if (lstDto.Count > 1)
                {
                    lstDto[1].IsDefault = true;
                }

                //删除原有的
                MongoDBHelper.DeleteMany <IndexDetailDTO>("{Code:'" + indexLite.Code + "'}");
                //插入财务指标的明细
                MongoDBHelper.InsertManyAsync <IndexDetailDTO>(lstDto);
            }

            LogHelper.Info("总运行", "结束:生成财务指标明细");
        }