/// <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); }
/// <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); } }
/// <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("总运行", "结束:生成财务指标明细"); }