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;
        }
        public string AddOrUpdateFlyParameter(FlightParameter[] flightParameter)
        {
            MongoServer mongoServer = this.GetMongoServer();
            if (mongoServer != null)
            {
                MongoDatabase database = mongoServer.GetDatabase(AircraftMongoDb.DATABASE_COMMON);
                if (database != null)
                {
                    MongoCollection<FlightParameter> modelCollection
                        = database.GetCollection<FlightParameter>(
                        AircraftMongoDb.COLLECTION_FLIGHT_PARAMETER);

                    foreach (var fp in flightParameter)
                    {
                        MongoCursor<FlightParameter> pms =
                         modelCollection.Find(Query.And(Query.EQ("ParameterID", fp.ParameterID),
                            Query.EQ("ModelName", fp.ModelName)));
                        if (pms != null && pms.Count() > 0)
                        {
                            foreach (var pm in pms)
                            {
                                pm.IsConcerned = fp.IsConcerned;
                                pm.Caption = fp.Caption;
                                pm.Frequence = fp.Frequence;
                                pm.Index = fp.Index;
                                pm.SubIndex = fp.SubIndex;
                                pm.Unit = fp.Unit;
                            }
                        }
                        else
                        {
                            modelCollection.Insert(fp);
                        }
                    }

                    return string.Empty;
                }
            }

            return string.Format(
                "No MongoServer {0} finded, or no MongoCollection {1} finded.",
                AircraftMongoDb.DATABASE_COMMON, AircraftMongoDb.COLLECTION_FLIGHT_PARAMETER);
        }
        public FlightParameters GetAllFlightParameters(AircraftModel model)
        {
            string basePath = this.CombineFromBasePath("FlightParameters.xml");

            if (!string.IsNullOrEmpty(basePath) && File.Exists(basePath))
                using (StreamReader reader = new StreamReader(basePath))
                {
                    XElement element = XElement.Load(reader);
                    if (element != null)
                    {
                        FlightParameters root = new FlightParameters();
                        var bc = element.Attribute("BytesCount");
                        if (bc != null)
                        {
                            root.BytesCount = Convert.ToInt32(bc.Value);
                        }

                        var parameters = element.Descendants("Parameter");
                        if (parameters != null && parameters.Count() > 0)
                        {
                            try
                            {
                                List<FlightParameter> fps = new List<FlightParameter>();

                                foreach (var one in parameters)
                                {
                                    FlightParameter ps = new FlightParameter()
                                    {
                                        ParameterID = one.Attribute("ParameterID").Value,
                                        Caption = one.Attribute("Caption").Value,
                                        Index = Convert.ToInt32(one.Attribute("Index").Value),
                                        SubIndex = Convert.ToInt32(one.Attribute("SubIndex").Value),
                                        ParameterDataType = one.Attribute("ParameterDataType").Value
                                    };
                                    var eles = one.Elements("Byte");
                                    if (eles != null && eles.Count() > 0)
                                    {
                                        List<ByteIndex> bis = new List<ByteIndex>();
                                        foreach (var ele in eles)
                                        {
                                            ByteIndex bi = new ByteIndex() { Index = Convert.ToInt32(ele.Attribute("Index").Value) };

                                            var eles2 = ele.Elements("Bit");
                                            if (eles2 != null && eles2.Count() > 0)
                                            {
                                                List<BitIndex> bitIndex = new List<BitIndex>();
                                                foreach (var ele2 in eles2)
                                                {
                                                    bitIndex.Add(
                                                        new BitIndex() { SubIndex = Convert.ToInt32(ele2.Attribute("Index").Value) });
                                                }
                                                bi.SubIndexes = bitIndex.ToArray();
                                            }

                                            bis.Add(bi);
                                        }

                                        ps.ByteIndexes = bis.ToArray();
                                    }

                                    fps.Add(ps);
                                }

                                root.Parameters = fps.ToArray();
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine(e.Message);
                            }
                        }

                        return root;
                    }
                }

            return null;

            //MongoServer mongoServer = this.GetMongoServer();
            //if (mongoServer != null)
            //{
            //    MongoDatabase database = mongoServer.GetDatabase(AircraftMongoDb.DATABASE_COMMON);
            //    if (database != null)
            //    {
            //        MongoCollection<FlightParameter> modelCollection
            //            = database.GetCollection<FlightParameter>(
            //            AircraftMongoDb.COLLECTION_AIRCRAFT_PARAMETER);

            //        IQueryable<FlightParameter> models = modelCollection.AsQueryable<FlightParameter>();

            //        var results = from one in models
            //                      where one.ModelName == modelName
            //                      orderby one.Index, one.SubIndex
            //                      select one;

            //        if (results != null && results.Count() > 0)
            //            return results.ToArray();

            //        return new FlightParameter[] { };
            //    }
            //}

            //throw new Exception(string.Format(
            //    "No MongoServer {0} finded, or no MongoCollection {1} finded.",
            //    AircraftMongoDb.DATABASE_COMMON, AircraftMongoDb.COLLECTION_AIRCRAFT_PARAMETER));
        }
 public string AddOrUpdateFlyParameter(FlightParameter flightParameter)
 {
     return this.AddOrUpdateFlyParameter(new FlightParameter[] { flightParameter });
 }