コード例 #1
0
        /// <summary>
        /// Добавить обслуживание
        /// </summary>
        /// <param name="maintenanceType"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <param name="unplannedReason"></param>
        public void AddMaintenance(
            MaintenanceType maintenanceType,
            DateTime start,
            DateTime?end = null,
            MaintenanceReason unplannedReason = null
            )
        {
            var targetInterval = Intervals.SingleOrDefault(x => x.MaintenanceType == maintenanceType);

            if (targetInterval == null)
            {
                throw new Exception("Не найден интервал для данного вида обслуживания");
            }

            //Добавить запись в журнал обслуживания
            var newMaintenance = new MaintenanceActual(this)
            {
                MaintenanceType  = maintenanceType,
                StartMaintenance = start,
                UnplannedReason  = unplannedReason
            };

            maintenance.Add(newMaintenance);

            //Изменить состояние объекта ремонта
            ChangeOperatingState(OperatingState.Maintenance, start);
            CurrentMaintenance = newMaintenance;

            //Если обслуживание окончено (известна дата окончания) то производим процедуру завершения обслуживания
            if (end != null)
            {
                FinalizeMaintenance(end.Value);
            }
        }
コード例 #2
0
        /// <summary>
        /// Удалить обслуживание
        /// </summary>
        /// <param name="entity"></param>
        public void RemoveMaintenance(MaintenanceActual entity)
        {
            var lastMaintenanceMap = LastMaintenance.ToDictionary(x => x.MaintenanceType.Id);

            //восстанавливаем данные из снимка
            entity.Snapshot.ToList().ForEach(x =>
            {
                var last = lastMaintenanceMap[x.MaintenanceType.Id];

                last.UsageFromLastMaintenance = x.UsageFromLastMaintenance;
                last.LastMaintenanceDate      = x.LastMaintenanceDate;
            });

            //если это текущее обслуживание, то сбрасываем его
            if (!entity.IsFinalized() && CurrentMaintenance == entity)
            {
                CurrentMaintenance = null;
            }

            maintenance.Remove(entity);
        }
コード例 #3
0
ファイル: CommandFactory.cs プロジェクト: DKlenye/Naftan.CMMS
        public void FinalizeMaintenance(MaintenanceActual maintenance, DateTime end)
        {
            //Сохраняем дату завершения обслуживания
            maintenance.End = end;
            repository.Save(maintenance);

            var objectId = maintenance.Object.Id;

            //Найти интервалы объекта
            var intervals = query.FindMaintenanceIntervalsByObjectId(objectId);

            //Взять интересующий интервал по типу обслуживания
            var targetInterval = intervals.SingleOrDefault(x => x.MaintenanceType == maintenance.Type);

            if (targetInterval == null)
            {
                throw new Exception("Не найден интервал для данного вида обслуживания");
            }

            /* Выбрать интервалы для сброса. Сюда попадает интересующий нас интервал и более мелкие.
             * Т.е. Если проводится Средний ремонт, то сбрасываются Средний, Текущий и Обслуживание.
             */
            var intervalsForReset =
                intervals.Where(x => x.Quantity <= targetInterval.Quantity).ToDictionary(i => i.MaintenanceType, i => i);

            var last = query.FindLastMaintenanceByObjectId(objectId);

            last.ToList().ForEach(lm =>
            {
                if (intervalsForReset.ContainsKey(lm.MaintenanceType))
                {
                    lm.Reset(end);
                    repository.Save(lm);
                }
            });
        }
コード例 #4
0
ファイル: CommandFactory.cs プロジェクト: DKlenye/Naftan.CMMS
        public void AddMaintenance(
            RepairObject repairObject,
            MaintenanceType maintenanceType,
            DateTime start,
            DateTime?end,
            MaintenanceReason unplannedReason
            )
        {
            //Добавить запись в журнал обслуживания
            var maintenance = new MaintenanceActual()
            {
                Type            = maintenanceType,
                Start           = start,
                Object          = repairObject,
                UnplannedReason = unplannedReason
            };

            repository.Save(maintenance);

            if (end != null)
            {
                FinalizeMaintenance(maintenance, end.Value);
            }
        }