public Level1FlightRecord[] ReduceFlightRawDataPoints(string parameterID,
            ParameterRawData[] points, int secondGap)
        {
            //1. 每秒钟取一个点
            var wrapped = from one in points
                          select new ParameterRawDataWrap(one);

            //2. 每secondGap取一个值
            List<Level1FlightRecord> records = new List<Level1FlightRecord>();
            List<ParameterRawDataWrap> tempList = new List<ParameterRawDataWrap>();

            int startSec = 0;
            int endSec = Math.Min(startSec + secondGap, points[points.Length - 1].Second);
            foreach (var one in wrapped)
            {
                if (one.m_RawData.Second >= startSec
                    && one.m_RawData.Second < endSec)
                {
                    tempList.Add(one);
                }
                else
                {
                    Level1FlightRecord rec = new Level1FlightRecord()
                    {
                        ParameterID = parameterID,
                        StartSecond = startSec,
                        EndSecond = endSec,
                        Values = (from o in tempList
                                  select o.SummaryValue).ToArray()
                    };
                    records.Add(rec);
                    tempList.Clear();

                    startSec = endSec;
                    endSec = Math.Min(endSec + secondGap, points[points.Length - 1].Second);
                }
            }

            Level1FlightRecord rec2 = new Level1FlightRecord()
            {
                ParameterID = parameterID,
                StartSecond = startSec,
                EndSecond = endSec,
                Values = (from o in tempList
                          select o.SummaryValue).ToArray()
            };
            records.Add(rec2);
            tempList.Clear();

            return records.ToArray();
        }
        public Level1FlightRecord[] ReduceFlightRawDataPoints(string parameterID, string flightID,
            List<ParameterRawData> points, int startSecond, int endSecond, int secondGap)
        {
            if (points == null || points.Count == 0)
                return new Level1FlightRecord[] { };

            //1. 每秒钟取一个点
            var wrapped = from one in points
                          select new ParameterRawDataWrap(one);

            //2. 每secondGap取一个值
            List<Level1FlightRecord> records = new List<Level1FlightRecord>();
            List<ParameterRawDataWrap> tempList = new List<ParameterRawDataWrap>();

            int startSec = startSecond;
            int endSec = Math.Min(startSec + secondGap, points[points.Count - 1].Second);
            if (startSec + secondGap >= endSecond)
                endSec = endSecond;
            foreach (var one in wrapped)
            {
                if (one.m_RawData.Second >= startSec
                    && one.m_RawData.Second < endSec)
                {
                    tempList.Add(one);
                }
                else
                {
                    Level1FlightRecord rec = new Level1FlightRecord()
                    {
                        FlightID = flightID,
                        ParameterID = parameterID,
                        StartSecond = startSec,
                        EndSecond = endSec,
                        Values = (from o in tempList
                                  select o.SummaryValue).ToArray()
                    };
                    records.Add(rec);
                    tempList.Clear();

                    startSec = endSec;
                    endSec = Math.Min(endSec + secondGap, points[points.Count - 1].Second);
                    if (startSec + secondGap >= endSecond)
                        endSec = endSecond;
                    tempList.Add(one);
                }
            }

            if (tempList.Count > 0)
            {
                Level1FlightRecord rec2 = new Level1FlightRecord()
                {
                    FlightID = flightID,
                    ParameterID = parameterID,
                    StartSecond = startSec,
                    EndSecond = endSec,
                    Values = (from o in tempList
                              select o.SummaryValue).ToArray()
                };
                records.Add(rec2);
                tempList.Clear();
            }

            return records.ToArray();
        }
        public Level2FlightRecord GenerateLevel2FlightRecord(string parameterID,
            Level1FlightRecord[] level1Points)
        {
            Level2FlightRecord level2Records = new Level2FlightRecord()
            {
                StartSecond = 0,
                EndSecond = level1Points[level1Points.Length - 1].EndSecond,
                ParameterID = parameterID,
                Values = level1Points,
                ExtremumPointInfo = new ExtremumPointInfo()
                {
                    MaxValue =
                        (from one in level1Points
                         select one.Values.Max()).Max(),
                    MinValue = (from one in level1Points
                                select one.Values.Min()).Min()
                }
            };

            float maxValue = float.MinValue;
            float minValue = float.MaxValue;

            Level1FlightRecord minRec = null;
            Level1FlightRecord maxRec = null;

            foreach (Level1FlightRecord rec in level1Points)
            {
                if (rec.Values.Max() > maxValue)
                {
                    maxValue = rec.Values.Max();
                    maxRec = rec;
                }
                if (rec.Values.Min() < minValue)
                {
                    minValue = rec.Values.Min();
                    minRec = rec;
                }
            }

            if (maxRec != null)
            {
                for (int i = 0; i < maxRec.Values.Length; i++)
                {
                    if (maxRec.Values[i] == maxValue)
                    {
                        level2Records.ExtremumPointInfo.MaxValueSecond
                            = maxRec.StartSecond + (i / Convert.ToSingle(maxRec.EndSecond - maxRec.StartSecond));
                        break;
                    }
                }

                level2Records.ExtremumPointInfo.MaxValue = maxRec.Values.Max();
            }
            if (minRec != null)
            {
                for (int i = 0; i < minRec.Values.Length; i++)
                {
                    if (minRec.Values[i] == minValue)
                    {
                        level2Records.ExtremumPointInfo.MinValueSecond
                            = minRec.StartSecond + (i / Convert.ToSingle(minRec.EndSecond - minRec.StartSecond));
                        break;
                    }
                }

                level2Records.ExtremumPointInfo.MinValue = minRec.Values.Min();
            }

            return level2Records;
        }
        public Level2FlightRecord[] GenerateLevel2FlightRecord(string flightID, string parameterID,
            Level1FlightRecord[] level1Points)
        {
            Level2FlightRecord level2Records = GenerateLevel2FlightRecordByOnlyOneResult(flightID, parameterID, level1Points);

            if (level2Records == null)
                return null;
            return new Level2FlightRecord[] { level2Records };
        }