Esempio n. 1
0
 /// <summary>
 ///     创建序号件装机历史。
 /// </summary>
 /// <param name="snReg">序号件</param>
 /// <param name="pnReg">附件</param>
 /// <param name="csn">CSN,自装机以来使用循环</param>
 /// <param name="tsn">TSN,自装机以来使用小时数</param>
 /// <param name="actionType">操作类型</param>
 /// <param name="aircraft">装机所在飞机</param>
 /// <param name="actionDate">操作日期</param>
 /// <param name="remInstRecord">拆换记录</param>
 /// <param name="csn2">的基础上再累加在库时间折算的使用循环数</param>
 /// <param name="tsn2">的基础上再累加在库时间折算的使用小时数</param>
 /// <param name="status">序号件在历史节点上的状态</param>
 /// <param name="position">位置信息</param>
 /// <returns></returns>
 public static SnHistory CreateSnHistory(SnReg snReg, PnReg pnReg, int csn, decimal tsn, int csn2, decimal tsn2,
     int actionType, Aircraft aircraft, DateTime actionDate, SnRemInstRecord remInstRecord, int status,
     int position)
 {
     var snHistory = new SnHistory {CreateDate = DateTime.Now};
     snHistory.GenerateNewIdentity();
     snHistory.SetAircraft(aircraft);
     snHistory.SetActionDate(actionDate);
     snHistory.SetActionType((ActionType) actionType);
     snHistory.SetSn(snReg);
     snHistory.SetPn(pnReg);
     snHistory.SetCSN(csn);
     snHistory.SetTSN(tsn);
     snHistory.SetCSN2(csn2);
     snHistory.SetTSN2(tsn2);
     snHistory.SetSnStatus((SnStatus) status);
     snHistory.SetRemInstRecord(remInstRecord);
     snHistory.SetPosition((Position) position);
     return snHistory;
 }
Esempio n. 2
0
 /// <summary>
 ///     创建序号件装机历史。
 /// </summary>
 /// <returns>SnHistory</returns>
 public static SnHistory CreateSnHistory()
 {
     var snHistory = new SnHistory();
     snHistory.GenerateNewIdentity();
     return snHistory;
 }
Esempio n. 3
0
 /// <summary>
 ///     获取开始计算日期
 /// </summary>
 /// <param name="lastTSR">最近一次装上记录</param>
 /// <param name="flights">最近一次装上以来的飞行日志集合</param>
 /// <returns>开始计算日期</returns>
 private DateTime GetStartDate(SnHistory lastTSR, IReadOnlyList<FlightLog> flights)
 {
     var lastOilMonitor =
         _unitOfWork.CreateSet<OilMonitor>()
             .Where(om => om.SnRegID == lastTSR.SnRegId)
             .OrderByDescending(o => o.Date)
             .FirstOrDefault();
     // 最近滑油监控记录日期
     var lastDate = lastOilMonitor == null || DateTime.Today.AddDays(-30) < flights[0].FlightDate
         ? flights[0].FlightDate
         : DateTime.Today.AddDays(-30);
     var calDate = lastDate.AddDays(1);
     return calDate;
 }
Esempio n. 4
0
 /// <summary>
 ///     创建发动机滑油监控记录。
 /// </summary>
 /// <remarks>
 ///     对每一台发动机,自滑油监控最后一条记录至当天,每天计算一条监控记录。
 ///     初始的时候,从最近一次装上开始计算。
 /// </remarks>
 /// <param name="lastTSR">最近一次装上记录</param>
 /// <param name="engineReg">发动机</param>
 /// <param name="flights">最近一次装上以来的飞行日志集合</param>
 private List<OilMonitor> CreateEngineOils(SnHistory lastTSR, EngineReg engineReg,
     IReadOnlyList<FlightLog> flights)
 {
     if (lastTSR == null) throw new ArgumentNullException("lastTSR");
     var oilMonitors = new List<OilMonitor>();
     // 开始计算日期
     var startDate = GetStartDate(lastTSR, flights);
     if (!flights.Any()) return oilMonitors;
     // 计算截止日期,飞行日志最后一天的次日,最后一天为当天的则为当天。
     var endDate = flights.Last().FlightDate.Date == DateTime.Today
         ? DateTime.Today
         : flights.Last().FlightDate.Date.AddDays(1);
     while (endDate.Subtract(startDate).TotalDays > 0)
     {
         decimal qsr, interval, deltaInterval, lastInterval;
         var tsr = flights.TakeWhile(f => f.FlightDate < startDate.AddDays(1)).Sum(f => f.FlightHours);
         switch (lastTSR.Position)
         {
             case Position.发动机1:
                 qsr =
                     flights.TakeWhile(f => f.FlightDate < startDate.AddDays(1))
                         .Sum(f => f.ENG1OilDep + f.ENG1OilArr);
                 lastInterval =
                     _unitOfWork.CreateSet<OilMonitor>()
                         .Where(o => o.IntervalRate > 0)
                         .Select(o => o.IntervalRate)
                         .FirstOrDefault();
                 CalIntervalOil(
                     flights.Select(
                         f => Tuple.Create(f.FlightDate, f.TakeOff, f.ENG1OilDep, f.ENG1OilArr, f.FlightHours))
                         .ToList(), startDate, out interval);
                 deltaInterval = lastInterval > 0 ? interval - lastInterval : 0;
                 oilMonitors.Add(CreateEngineOil(lastTSR, engineReg, startDate, tsr, qsr, interval, deltaInterval));
                 break;
             case Position.发动机2:
                 qsr =
                     flights.TakeWhile(f => f.FlightDate < startDate.AddDays(1))
                         .Sum(f => f.ENG2OilDep + f.ENG2OilArr);
                 lastInterval =
                     _unitOfWork.CreateSet<OilMonitor>()
                         .Where(o => o.IntervalRate > 0)
                         .Select(o => o.IntervalRate)
                         .FirstOrDefault();
                 CalIntervalOil(
                     flights.Select(
                         f => Tuple.Create(f.FlightDate, f.TakeOff, f.ENG2OilDep, f.ENG2OilArr, f.FlightHours))
                         .ToList(), startDate, out interval);
                 deltaInterval = lastInterval > 0 ? interval - lastInterval : 0;
                 oilMonitors.Add(CreateEngineOil(lastTSR, engineReg, startDate, tsr, qsr, interval, deltaInterval));
                 break;
             case Position.发动机3:
                 qsr =
                     flights.TakeWhile(f => f.FlightDate < startDate.AddDays(1))
                         .Sum(f => f.ENG3OilDep + f.ENG3OilArr);
                 lastInterval =
                     _unitOfWork.CreateSet<OilMonitor>()
                         .Where(o => o.IntervalRate > 0)
                         .Select(o => o.IntervalRate)
                         .FirstOrDefault();
                 CalIntervalOil(
                     flights.Select(
                         f => Tuple.Create(f.FlightDate, f.TakeOff, f.ENG3OilDep, f.ENG3OilArr, f.FlightHours))
                         .ToList(), startDate, out interval);
                 deltaInterval = lastInterval > 0 ? interval - lastInterval : 0;
                 oilMonitors.Add(CreateEngineOil(lastTSR, engineReg, startDate, tsr, qsr, interval, deltaInterval));
                 break;
             case Position.发动机4:
                 qsr =
                     flights.TakeWhile(f => f.FlightDate < startDate.AddDays(1))
                         .Sum(f => f.ENG4OilDep + f.ENG4OilArr);
                 lastInterval =
                     _unitOfWork.CreateSet<OilMonitor>()
                         .Where(o => o.IntervalRate > 0)
                         .Select(o => o.IntervalRate)
                         .FirstOrDefault();
                 CalIntervalOil(
                     flights.Select(
                         f => Tuple.Create(f.FlightDate, f.TakeOff, f.ENG4OilDep, f.ENG4OilArr, f.FlightHours))
                         .ToList(), startDate, out interval);
                 deltaInterval = lastInterval > 0 ? interval - lastInterval : 0;
                 oilMonitors.Add(CreateEngineOil(lastTSR, engineReg, startDate, tsr, qsr, interval, deltaInterval));
                 break;
             default:
                 throw new ArgumentOutOfRangeException();
         }
         startDate = startDate.AddDays(1);
     }
     return oilMonitors;
 }
Esempio n. 5
0
 /// <summary>
 ///     创建APU滑油监控记录。
 /// </summary>
 /// <remarks>
 ///     对每一台APU,自滑油监控最后一条记录至当天,每天计算一条监控记录。
 ///     初始的时候,从最近一次装上开始计算。
 /// </remarks>
 /// <param name="lastTSR">最近一次装上记录</param>
 /// <param name="apuReg">APU</param>
 /// <param name="flights">最近一次装上以来的飞行日志集合</param>
 /// <returns>滑油监控记录集合。</returns>
 private List<OilMonitor> CreateAPUOils(SnHistory lastTSR, APUReg apuReg, IReadOnlyList<FlightLog> flights)
 {
     var oilMonitors = new List<OilMonitor>();
     // 开始计算日期
     var startDate = GetStartDate(lastTSR, flights);
     if (!flights.Any()) return oilMonitors;
     // 计算截止日期,飞行日志最后一天的次日,最后一天为当天的则为当天。
     var endDate = flights.Last().FlightDate.Date == DateTime.Today
         ? DateTime.Today
         : flights.Last().FlightDate.Date.AddDays(1);
     while (endDate.Subtract(startDate).TotalDays > 0)
     {
         decimal interval;
         var tsr = flights.TakeWhile(f => f.FlightDate < startDate.AddDays(1)).Sum(f => f.FlightHours);
         var qsr = flights.TakeWhile(f => f.FlightDate < startDate.AddDays(1))
             .Sum(f => f.ApuOilDep + f.ApuOilArr);
         var lastInterval =
             _unitOfWork.CreateSet<OilMonitor>()
                 .Where(o => o.IntervalRate > 0)
                 .Select(o => o.IntervalRate)
                 .FirstOrDefault();
         CalIntervalOil(
             flights.Select(f => Tuple.Create(f.FlightDate, f.TakeOff, f.ApuOilDep, f.ApuOilArr, f.FlightHours))
                 .ToList(), startDate, out interval);
         var deltaInterval = lastInterval > 0 ? interval - lastInterval : 0;
         oilMonitors.Add(CreateAPUOil(lastTSR, apuReg, startDate, tsr, qsr, interval, deltaInterval));
         startDate = startDate.AddDays(1);
     }
     return oilMonitors;
 }
Esempio n. 6
0
 /// <summary>
 ///     计算滑油耗率7日均线
 /// </summary>
 /// <param name="lastTSR">最近一次装上记录</param>
 /// <param name="currents">新增的滑油监控记录</param>
 private void CalAverageRate7(SnHistory lastTSR, ref List<OilMonitor> currents)
 {
     if (currents.Count == 0) return;
     var endDate = currents.First().Date;
     var startDate = currents.First().Date.AddDays(-7);
     var oilMonitors =
         _unitOfWork.CreateSet<OilMonitor>()
             .Where(o => o.SnRegID == lastTSR.SnRegId && o.Date > startDate && o.Date < endDate)
             .OrderBy(o => o.Date)
             .ToList();
     var count = oilMonitors.Count;
     oilMonitors.AddRange(currents);
     for (var i = count; i < oilMonitors.Count; i++)
     {
         if (i < 6) continue;
         var average = oilMonitors.Skip(i - 6).Take(7).Average(o => o.TotalRate);
         oilMonitors[i].SetAverageRate7(average);
     }
 }
Esempio n. 7
0
 /// <summary>
 ///     创建发动机滑油监控记录。
 /// </summary>
 /// <param name="lastTSR">最近一次装上记录</param>
 /// <param name="engineReg">发动机</param>
 /// <param name="calDate">计算日期</param>
 /// <param name="tsr">自上一次装上以来飞行时间</param>
 /// <param name="qsr">自上一次装上以来滑油添加总量</param>
 /// <param name="interval">区间滑油消耗率</param>
 /// <param name="deltaInterval">区间滑油消耗率变化量</param>
 /// <returns>滑油监控记录</returns>
 private static OilMonitor CreateEngineOil(SnHistory lastTSR, EngineReg engineReg, DateTime calDate, decimal tsr,
     decimal qsr, decimal interval, decimal deltaInterval)
 {
     var tsn = lastTSR.TSN + tsr;
     var toc = tsr == 0 ? 0 : Math.Round(qsr/tsr, 4);
     var oilMonitor = OilMonitorFactory.CreateEngineOil(engineReg, calDate, tsn, tsr, toc, interval,
         deltaInterval);
     return oilMonitor;
 }