/// <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();
        }
        internal string AddFlightRawDataRelationPoints(Flight flight, List<FlightRawDataRelationPoint> flightRawDataRelationPoints)
        {
            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.FlightRawDataRelationPoint> modelCollection1
                            = dal.GetFlightRawDataRelationPointMongoCollectionByFlight(database, flight);

                        //IMongoQuery q1 = Query.EQ("FlightID", new MongoDB.Bson.BsonString(flight.FlightID));
                        //modelCollection1.Remove(q1);

                        modelCollection1.InsertBatch(flightRawDataRelationPoints);
                    }
                }
                catch (Exception e)
                {
                    LogHelper.Error("AddOrReplaceFlightRawDataRelationPoints", e);
                    return e.Message;
                }
            }
            return string.Empty;
        }
        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 AddFlightConditionDecisionRecordsBatch(Flight flight, FlightDataEntities.Decisions.DecisionRecord[] records)
 {
     try
     {
         LogHelper.Info("DataInputService.AddFlightConditionDecisionRecordsBatch Requested.", null);
         DataInputServiceBll bll = new DataInputServiceBll();
         return bll.AddFlightConditionDecisionRecordsBatch(flight, records);
     }
     catch (Exception ex)
     {
         LogHelper.Error("AddFlightConditionDecisionRecordsBatch", ex);
         return ex.Message;
     }
 }
 public string AddFlightRawDataRelationPoints(Flight flight, List<FlightRawDataRelationPoint> flightRawDataRelationPoints)
 {
     try
     {
         LogHelper.Info("DataInputService.AddOrReplaceFlightRawDataRelationPoints Requested.", null);
         DataInputServiceBll bll = new DataInputServiceBll();
         return bll.AddFlightRawDataRelationPoints(flight, flightRawDataRelationPoints);
     }
     catch (Exception ex)
     {
         LogHelper.Error("AddOrReplaceFlightRawDataRelationPoints", ex);
         return ex.Message;
     }
 }
 public KeyValuePair<string, FlightDataEntities.FlightRawData[]>[] GetFlightData(Flight flight,
     string[] parameterIds, int startSecond, int endSecond)
 {
     try
     {
         LogHelper.Info("AircraftService.GetFlightData Requested.", null);
         AircraftServiceBll bll = new AircraftServiceBll();
         return bll.GetFlightData(flight, parameterIds, startSecond, endSecond);
     }
     catch (Exception e)
     {
         LogHelper.Error("AircraftService.GetFlightData", e);
         return null;
     }
 }
        /// <summary>
        /// 根据FlightID插入或更新一个架次信息,插入的是实体,使用Common库
        /// </summary>
        /// <param name="flight"></param>
        /// <param name="flightResult">flightResult才是真正要返回的结果,因为flight如果是需要新增的,则不会有MongoDB需要的ObjectId</param>
        /// <param name="modelCollection"></param>
        /// <returns></returns>
        private static Flight InsertOrUpdateByFlightID(
            FlightDataEntities.Flight flight, Flight flightResult, MongoCollection<Flight> modelCollection)
        {
            try
            {
                IMongoQuery q1 = Query.EQ("FlightID", new MongoDB.Bson.BsonString(flight.FlightID));

                var cursor = modelCollection.Find(q1);
                //第一次查询,是判断是否需要UPDATE
                if (cursor != null && cursor.Count() > 0)
                {
                    foreach (var value in cursor.AsEnumerable())
                    {
                        value.FlightName = flight.FlightName;
                        value.Aircraft = flight.Aircraft;
                        value.EndSecond = flight.EndSecond;
                        value.StartSecond = flight.StartSecond;
                        value.FlightDate = flight.FlightDate;

                        modelCollection.Save(value);

                        flightResult = value;
                    }
                }
                else
                {//如果INSERT,就必须插入之后才有ObjectId,需要返回带有ObjectId的对象(不单单只考虑WCF返回没带有ObjectId的情况)
                    modelCollection.Insert(flight);

                    var cursor2 = modelCollection.Find(q1);
                    if (cursor2 != null && cursor2.Count() > 0)
                    {
                        flightResult = cursor2.First();
                    }
                    else flightResult = null;
                }
            }
            catch (Exception e)
            {
                LogHelper.Error("InsertOrUpdateByFlightID", e);
                flightResult = null;
            }

            return flightResult;
        }
Esempio n. 8
0
        internal KeyValuePair<string, FlightRawData[]>[] GetFlightData(
            Flight flight, string[] parameterIds, int startSecond, int endSecond)
        {
            if (flight == null || string.IsNullOrEmpty(flight.FlightID)
                || flight.Aircraft == null || flight.Aircraft.AircraftModel == null
                || string.IsNullOrEmpty(flight.Aircraft.AircraftModel.ModelName))
            {
                LogHelper.Warn("Flight或Aircraft信息不正确(GetFlightData)。", null);
                return null;
            }

            if (startSecond == flight.StartSecond && endSecond == flight.EndSecond)
            {//应该取最顶层数据,暂时未实现此Return

            }

            using (AircraftMongoDbDal dal = new AircraftMongoDbDal())
            {
                MongoServer mongoServer = dal.GetMongoServer();
                //不用判断是否为空,必须不能为空才能继续,否则内部要抛异常
                try
                {//此方法操作的记录为跟架次密切相关,需要拆分存储的记录,最好在DAL里面去处理表名构建逻辑
                    MongoDatabase database = dal.GetMongoDatabaseByAircraftModel(mongoServer, flight.Aircraft.AircraftModel);
                    if (database != null)
                    {
                        var cursor = FindMongoDBCursor(flight, parameterIds, startSecond, endSecond, dal, database);
                        //var queryable = cursor.AsQueryable();
                        //转换成RawData记录
                        var result = TransformToFlightRawData(parameterIds, cursor);
                        return result.ToArray();
                    }
                }
                catch (Exception e)
                {
                    LogHelper.Error("GetFlightData", e);
                }
            }
            return null;
        }
        /// <summary>
        /// 删除一个架次相关记录,这是记录,需要重新定位数据库和Collection
        /// </summary>
        /// <param name="mongoServer"></param>
        /// <param name="flight"></param>
        private void RemoveRelatedRecords(MongoServer mongoServer, Flight flight, AircraftMongoDbDal dal,
            IMongoQuery flightIdQuery)
        {//TODO: 
            try
            {//此方法操作的记录为跟架次密切相关,需要拆分存储的记录,最好在DAL里面去处理表名构建逻辑
                MongoDatabase database = dal.GetMongoDatabaseByAircraftModel(mongoServer, flight.Aircraft.AircraftModel);
                if (database != null)
                {
                    //删除判据记录
                    MongoCollection<FlightDataEntities.Decisions.DecisionRecord> modelCollection
                        = dal.GetDecisionRecordMongoCollectionByFlight(database, flight);
                    modelCollection.Remove(flightIdQuery);

                    //删除Level1记录
                    MongoCollection<FlightDataEntities.Level1FlightRecord> modelCollection1
                        = dal.GetLevel1FlightRecordMongoCollectionByFlight(database, flight);
                    modelCollection1.Remove(flightIdQuery);

                    //删除LevelTop记录
                    MongoCollection<FlightDataEntities.LevelTopFlightRecord> modelCollection2
                        = dal.GetLevelTopFlightRecordMongoCollectionByFlight(database, flight);
                    modelCollection2.Remove(flightIdQuery);

                    //删除FlightRawDataRelationPoint记录
                    MongoCollection<FlightDataEntities.FlightRawDataRelationPoint> modelCollection3
                        = dal.GetFlightRawDataRelationPointMongoCollectionByFlight(database, flight);
                    modelCollection3.Remove(flightIdQuery);

                    //删除FlightConditionDecisionRecord记录
                    MongoCollection<FlightDataEntities.Decisions.DecisionRecord> modelCollection4
                        = dal.GetFlightConditionDecisionRecordMongoCollectionByFlight(database, flight);
                    modelCollection4.Remove(flightIdQuery);

                    //删除FlightRawDataRelationPoint记录
                    MongoCollection<FlightDataEntities.ExtremumPointInfo> modelCollection5
                        = dal.GetFlightExtremeMongoCollectionByFlight(database, flight);
                    modelCollection5.Remove(flightIdQuery);

                    //删除FlightExtreme记录
                    MongoCollection<FlightDataEntities.ExtremumPointInfo> modelCollection6
                        = dal.GetFlightExtremeMongoCollectionByFlight(database, flight);
                    modelCollection6.Remove(flightIdQuery);
                }
            }
            catch (Exception e)
            {
                LogHelper.Error("RemoveRelatedRecords", e);
            }
        }
        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;
        }
 internal MongoCollection<Level2FlightRecord> GetLevel2FlightRecordMongoCollectionByFlight(MongoDatabase database, Flight flight)
 {
     return database.GetCollection<Level2FlightRecord>(
         AircraftMongoDb.COLLECTION_FLIGHT_RECORD_LEVELTOP + "_" + flight.FlightID);
 }
        internal string DeleteFlight(Flight flight)
        {
            using (AircraftMongoDbDal dal = new AircraftMongoDbDal())
            {
                MongoServer mongoServer = dal.GetMongoServer();
                //不用判断是否为空,必须不能为空才能继续,否则内部要抛异常
                try
                {
                    MongoDatabase database = mongoServer.GetDatabase(AircraftMongoDb.DATABASE_COMMON);
                    if (database != null)
                    {
                        MongoCollection<Flight> modelCollection
                            = database.GetCollection<Flight>(AircraftMongoDb.COLLECTION_FLIGHT);
                        ////删除架次
                        IMongoQuery q1 = Query.EQ("FlightID", new MongoDB.Bson.BsonString(flight.FlightID));
                        var writeResult = modelCollection.Remove(q1);
                    }
                }
                catch (Exception e)
                {
                    LogHelper.Error("DeleteFlight", e);
                    return e.Message;
                }
            }

            return string.Empty;
        }
     GetFlightConditionDecisionRecordMongoCollectionByFlight(MongoDatabase database, Flight flight)
 {
     return database.GetCollection<FlightDataEntities.Decisions.DecisionRecord>(
         AircraftMongoDb.COLLECTION_FLIGHT_CONDITION_DECISION);// + "_" + flight.FlightID);
 }
 internal MongoCollection<FlightDataEntities.Decisions.DecisionRecord> GetDecisionRecordMongoCollectionByFlight(
     MongoDatabase database, Flight flight)
 {
     return database.GetCollection<FlightDataEntities.Decisions.DecisionRecord>(
         AircraftMongoDb.COLLECTION_FLIGHT_DECISIONS + "_" + flight.FlightID);
 }
 internal MongoCollection<FlightRawDataRelationPoint> GetFlightRawDataRelationPointMongoCollectionByFlight(MongoDatabase database, Flight flight)
 {
     return database.GetCollection<FlightRawDataRelationPoint>(
         AircraftMongoDb.COLLECTION_FLIGHT_RAWDATA_RELATION);// + "_" + flight.FlightID);
 }
 internal MongoCollection<ExtremumPointInfo> GetFlightExtremeMongoCollectionByFlight(MongoDatabase database, Flight flight)
 {
     return database.GetCollection<ExtremumPointInfo>(
         AircraftMongoDb.COLLECTION_FLIGHT_EXTREME);// + "_" + flight.FlightID);
 }
 public FlightDataEntities.Decisions.DecisionRecord[] GetDecisionRecords(Flight flight)
 {
     try
     {
         LogHelper.Info("AircraftService.GetDecisionRecords Requested.", null);
         AircraftServiceBll bll = new AircraftServiceBll();
         return bll.GetDecisionRecords(flight);
     }
     catch (Exception e)
     {
         LogHelper.Error("AircraftService.GetDecisionRecords", e);
         return null;
     }
 }
Esempio n. 18
0
        private MongoCursor<Level1FlightRecord> FindMongoDBCursor(Flight flight, string[] parameterIds,
            int startSecond, int endSecond, AircraftMongoDbDal dal, MongoDatabase database)
        {
            MongoCollection<FlightDataEntities.Level1FlightRecord> modelCollection1
                = dal.GetLevel1FlightRecordMongoCollectionByFlight(database, flight);
            List<IMongoQuery> qs = new List<IMongoQuery>();
            qs.Add(Query.EQ("FlightID", flight.FlightID));
            qs.Add(Query.Or(Query.And(
                            Query.GTE("StartSecond", startSecond),
                            Query.LT("StartSecond", endSecond)),
                    Query.And(
                        Query.GT("EndSecond", startSecond),
                        Query.LTE("EndSecond", endSecond))));
            //最后这个条件是如果一个Level1Record的起始秒、结束秒
            //介于参数起始值和结束值之间,都可以Select,
            //因为区间段基本上是定长的,所以可以这样认定
            if (parameterIds != null && parameterIds.Length > 0)
            {
                var bsonParamID = from id in parameterIds
                                  select new BsonString(id);
                qs.Add(Query.In("ParameterID", bsonParamID));//前两个条件必须:架次、时间
            }

            IMongoQuery q1 = Query.And(qs);

            //var bsonParamID = from id in parameterIds
            //                  select new BsonString(id);

            ////先取出Level1记录
            //IMongoQuery q1 = Query.And(
            //    Query.EQ("FlightID", flight.FlightID),
            //    Query.Or(Query.And(
            //                Query.GTE("StartSecond", startSecond),
            //                Query.LT("StartSecond", endSecond)),
            //        Query.And(
            //            Query.GT("EndSecond", startSecond),
            //            Query.LTE("EndSecond", endSecond))),
            //    //最后这个条件是如果一个Level1Record的起始秒、结束秒
            //    //介于参数起始值和结束值之间,都可以Select,
            //    //因为区间段基本上是定长的,所以可以这样认定
            //    Query.In("ParameterID", bsonParamID) //前两个条件必须:架次、时间
            //            );

            var cursor = modelCollection1.Find(q1);
            return cursor;
        }
 public FlightDataEntities.LevelTopFlightRecord[] GetLevelTopFlightRecords(
     Flight flight, string[] parameterIds)
 {
     try
     {
         LogHelper.Info("AircraftService.GetLevelTopFlightRecords Requested.", null);
         AircraftServiceBll bll = new AircraftServiceBll();
         return bll.GetLevelTopFlightRecords(flight, parameterIds);
     }
     catch (Exception e)
     {
         LogHelper.Error("AircraftService.GetLevelTopFlightRecords", e);
         return null;
     }
 }
Esempio n. 20
0
        public bool IsValidAircraftInfo(Flight flight)
        {
            if (flight == null)
                return false;

            if (flight == null || string.IsNullOrEmpty(flight.FlightID)
                || flight.Aircraft == null || flight.Aircraft.AircraftModel == null ||
                string.IsNullOrEmpty(flight.Aircraft.AircraftModel.ModelName))
                return false;

            return true;
        }
Esempio n. 21
0
        internal FlightDataEntities.Decisions.DecisionRecord[] GetDecisionRecords(Flight flight)
        {
            if (flight == null || string.IsNullOrEmpty(flight.FlightID))
            {
                LogHelper.Warn("flight为空或FlightID为空(GetDecisionRecords)。", null);
                return null;
            }

            using (AircraftMongoDbDal dal = new AircraftMongoDbDal())
            {
                MongoServer mongoServer = dal.GetMongoServer();
                //不用判断是否为空,必须不能为空才能继续,否则内部要抛异常
                try
                {//此方法操作的记录为跟架次密切相关,需要拆分存储的记录,最好在DAL里面去处理表名构建逻辑
                    MongoDatabase database =
                        dal.GetMongoDatabaseByAircraftModel(mongoServer,
                        flight.Aircraft.AircraftModel);
                    if (database != null)
                    {
                        MongoCollection<FlightDataEntities.Decisions.DecisionRecord> modelCollection
                            = dal.GetDecisionRecordMongoCollectionByFlight(database, flight);

                        IMongoQuery q1 = Query.EQ("FlightID", flight.FlightID);
                        var cursor = modelCollection.Find(q1);
                        var result = cursor.AsQueryable();
                        return result.ToArray();
                    }
                }
                catch (Exception e)
                {
                    LogHelper.Error("AddDecisionRecordsBatch", e);
                }
            }
            return null;
        }
 /// <summary>
 /// 精简数据,返回最顶一层的数据
 /// </summary>
 /// <param name="flight"></param>
 /// <param name="collection"></param>
 /// <returns></returns>
 public static LevelTopFlightRecord[] FromLevel1RecordCollectionToLevelTopRecords(
     Flight flight, MongoCollection<Level1FlightRecord> collection)
 {
     return null;//DEBUG
 }
        public string OptimizeForLevel2Data(Flight flight)
        {
            if (!this.IsValidAircraftInfo(flight))
                return "缺少机型或架次信息。";

            //产生汇总数据
            MongoServer mongoServer = this.GetMongoServer();
            if (mongoServer != null)
            {
                MongoDatabase database = mongoServer.GetDatabase(flight.Aircraft.AircraftModel.ModelName);
                if (database != null)
                {
                    MongoCollection<Level1FlightRecord> modelCollection
                        = database.GetCollection<Level1FlightRecord>(
                        AircraftMongoDb.COLLECTION_FLIGHT_RECORD_LEVEL1 +
                        flight.FlightID);

                    Level2FlightRecord[] records =
                        null;//DEBUG
                    //  FlightDataEntityTransform.FromLevel1RecordCollectionToLevel2Record(flight, modelCollection);
                }
            }

            return string.Empty;
        }
Esempio n. 24
0
        /// <summary>
        /// 不急着做,TopLevel还
        /// </summary>
        /// <param name="flight"></param>
        /// <param name="parameterIds"></param>
        /// <param name="withLevel1Data"></param>
        /// <returns></returns>
        internal LevelTopFlightRecord[] GetLevelTopFlightRecords(Flight flight, string[] parameterIds)
        {
            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);

                        IMongoQuery q1 = null;

                        if (parameterIds == null || parameterIds.Length == 0)
                            q1 = Query.EQ("FlightID", new BsonString(flight.FlightID));
                        else
                            q1 = Query.And(Query.EQ("FlightID", new BsonString(flight.FlightID)),
                                Query.In("ParameterID", (from pm in parameterIds select new BsonString(pm))));

                        var cursor = modelCollection1.Find(q1);

                        return cursor.ToArray();
                    }
                }
                catch (Exception e)
                {
                    LogHelper.Error("GetLevelTopFlightRecords", e);
                    return new LevelTopFlightRecord[] { };
                }
            }
            return new LevelTopFlightRecord[] { };
        }
Esempio n. 25
0
 public string AddOrReplaceFlightExtreme(Flight flight, ExtremumPointInfo[] extremumPointInfo)
 {
     try
     {
         LogHelper.Info("DataInputService.AddOrReplaceFlightExtreme Requested.", null);
         DataInputServiceBll bll = new DataInputServiceBll();
         return bll.AddOrReplaceFlightExtreme(flight, extremumPointInfo);
     }
     catch (Exception ex)
     {
         LogHelper.Error("AddOrReplaceFlightExtreme", ex);
         return ex.Message;
     }
 }