/// <summary> /// LevelTop只能有一个 /// </summary> /// <param name="flight"></param> /// <param name="collection"></param> /// <returns></returns> public LevelTopFlightRecord FromLevel1RecordCollectionToLevelTopRecords( Flight flight, MongoCollection<Level1FlightRecord> collection) { FlightParameter[] parameters = this.GetParameters(); Dictionary<string, LevelTopFlightRecord> topRecordMaps = new Dictionary<string, LevelTopFlightRecord>(); Dictionary<LevelTopFlightRecord, List<Level2FlightRecord>> level2RecordMap = new Dictionary<LevelTopFlightRecord, List<Level2FlightRecord>>(); List<LevelTopFlightRecord> topRecords = new List<LevelTopFlightRecord>(); foreach (FlightParameter para in parameters) { LevelTopFlightRecord topRecord = new LevelTopFlightRecord() { StartSecond = flight.StartSecond, EndSecond = flight.EndSecond, ParameterID = para.ParameterID, }; topRecordMaps.Add(para.ParameterID, topRecord); level2RecordMap.Add(topRecord, new List<Level2FlightRecord>()); for (int currentSecond = flight.StartSecond; currentSecond > flight.EndSecond; currentSecond += SecondGap) { int step = SecondGap; Level2FlightRecord level2 = this.HandleOneStep(currentSecond, step, para, topRecord, flight, collection); level2RecordMap[topRecord].Add(level2); } } return null;//DEBUG //return topRecords.ToArray(); }
private Level2FlightRecord HandleOneStep(int currentSecond, int step, FlightParameter para, LevelTopFlightRecord topRecord, Flight flight, MongoCollection<Level1FlightRecord> collection) { IMongoQuery query = Query.And(Query.EQ("ParameterID", new BsonString(para.ParameterID)), Query.GTE("FlightSecond", new BsonInt32(currentSecond)), Query.LT("FlightSecond", new BsonInt32(currentSecond + step))); MongoCursor<Level1FlightRecord> flightRecord = collection.Find(query); Level2FlightRecord level2 = new Level2FlightRecord() { StartSecond = currentSecond, EndSecond = Math.Min(flight.EndSecond, currentSecond + step), // Level1FlightRecords = flightRecord.ToArray(), ParameterID = para.ParameterID, }; //var sum = from one in level2.Level1FlightRecords // select one.ValueCount; //level2.Count = sum.Sum(); //var avg = from one in level2.Level1FlightRecords // select one.AvgValue; //level2.AvgValue = avg.Sum() * level2.Count; //var min = from one in level2.Level1FlightRecords // select one.MinValue; //level2.MinValue = min.Min(); //var max = from one in level2.Level1FlightRecords // select one.MaxValue; //level2.MaxValue = max.Max(); return level2; }
internal string AddLevelTopFlightRecords(Flight flight, LevelTopFlightRecord[] topRecords) { using (AircraftMongoDbDal dal = new AircraftMongoDbDal()) { MongoServer mongoServer = dal.GetMongoServer(); //不用判断是否为空,必须不能为空才能继续,否则内部要抛异常 try {//此方法操作的记录为跟架次密切相关,但肯定LevelTopRecord需要包含趋势分析等信息, //建议不要分表,存放在Common里面 MongoDatabase database = dal.GetMongoDatabaseByAircraftModel(mongoServer, flight.Aircraft.AircraftModel); if (database != null) { MongoCollection<FlightDataEntities.LevelTopFlightRecord> modelCollection1 = dal.GetLevelTopFlightRecordMongoCollectionByFlight(database, flight); modelCollection1.InsertBatch(topRecords); //MongoCollection<FlightDataEntities.Level2FlightRecord> modelCollection2 // = dal.GetLevel2FlightRecordMongoCollectionByFlight(database, flight); //modelCollection2.InsertBatch(level2Records); } } catch (Exception e) { LogHelper.Error("AddLevelTopFlightRecords", e); return e.Message; } } return string.Empty; }