Beispiel #1
0
        /// <summary>
        ///  Депо – вкладка с информацией о плановом назначении поезда на места постановки
        /// </summary>
        private static async Task <ReportResponse> GetDepoEventsTable(ReportRequest input, int planedRouteTrainId, ILogger logger)
        {
            var sqlRTrains            = new TrainRepository(logger);
            var sqlRTask              = new TaskRepository(logger);
            var sqlRPlanedRouteTrains = new PlanedRouteTrainsRepository(logger);
            var sqlRRoute             = new RoutesRepository(logger);
            var sqlRInspections       = new InspectionRepository(logger);
            var sqlRTaskAttributes    = new TrainTaskAttributesRepository(logger);
            var sqlREquipmentModel    = new EquipmentModelsRepository(logger);
            var sqlREquipment         = new EquipmentRepository(logger);
            var sqlRCarriage          = new CarriageRepository(logger);
            var sqlR          = new PrimitiveRepository(logger, "Parkings");
            var sqlRDepoEvent = new DepoEventsRepository(logger);



            var result = new ReportResponse {
                Rows = new List <Row>()
            };

            result.Columns = new List <Column>
            {
                new Column("col0", "Место постановки", "string"),
                new Column("col1", "Время захода на место постановки", "date"),
                new Column("col2", "Время выхода с места постановки", "date"),
            };

            var planedRouteTrain = await sqlRPlanedRouteTrains.ById(planedRouteTrainId);

            var events = await sqlRDepoEvent.ByTrainId(planedRouteTrain.TrainId);

            foreach (var item in events)
            {
                var parking = await sqlR.ById <Parking>(item.ParkingId);

                string testStopTime = null;
                if (item.TestStopTime != null)
                {
                    testStopTime = ((DateTime)item.TestStopTime).ToStringDateTime();
                }

                var row = new Row
                {
                    Id       = new RowId(item.Id, 1),
                    HasItems = false.ToString(),
                    ParentId = null,
                    //Место постановки
                    Col0 = parking.Name,
                    //Время захода на место постановки
                    Col1 = item.InTime.ToStringDateTime(),
                    //Время выхода с места постановки
                    Col2 = testStopTime
                };

                result.Rows.Add(row);
            }

            return(result);
        }
        public async Task <JsonResult> GetByEquipmentModelId(int id)
        {
            var sqlREquipmentModel = new EquipmentModelsRepository(_logger);
            var equipmentModel     = await sqlREquipmentModel.ById(id);

            if (equipmentModel == null)
            {
                return(Json(new Fault[0]));
            }
            await CheckPermission();

            var cer    = new FaultsRepository(_logger);
            var result = await cer.GetByEquipmentId(equipmentModel.EquipmentId);

            return(Json(result));
        }
Beispiel #3
0
        /// <summary>
        ///  Инциденты – вкладка с перечнем открытых инцидентов на составе, с возможностью перехода в форму инцидента при клике по нему. Информация будет выводится в табличном виде, со следующим набором полей:
        /// </summary>
        private static async Task <ReportResponse> GetNotClosedTrainTaskTable(ReportRequest input, int planedRouteTrainId, ILogger logger)
        {
            var sqlRTrains            = new TrainRepository(logger);
            var sqlRTask              = new TaskRepository(logger);
            var sqlRPlanedRouteTrains = new PlanedRouteTrainsRepository(logger);
            var sqlRRoute             = new RoutesRepository(logger);
            var sqlRInspections       = new InspectionRepository(logger);
            var sqlRTaskAttributes    = new TrainTaskAttributesRepository(logger);
            var sqlREquipmentModel    = new EquipmentModelsRepository(logger);
            var sqlREquipment         = new EquipmentRepository(logger);
            var sqlRCarriage          = new CarriageRepository(logger);
            var sqlRTaskStatus        = new TaskStatusRepository(logger);

            var result = new ReportResponse {
                Rows = new List <Row>()
            };

            result.Columns = new List <Column>
            {
                new Column("col0", "Номер", "number"),
                new Column("col1", "Статус", "string"),
                new Column("col2", "Тип", "string"),
                new Column("col3", "Вагон", "string"),
                new Column("col4", "Оборудование", "string"),
                new Column("col5", "Дата", "date"),
            };

            var planedRouteTrain = await sqlRPlanedRouteTrains.ById(planedRouteTrainId);

            //var route = await sqlRRoute.ById(planedRouteTrain.RouteId);

            var trainTasks = await sqlRTask.ByTrainId(planedRouteTrain.TrainId);

            var notClosedTasks = new List <TrainTask>();

            foreach (var trainTask in trainTasks)
            {
                var status = await sqlRTaskStatus.ByTaskId(trainTask.Id);

                if (status.Length == 0)
                {
                    continue;
                }
                if (status.Last().Status != TaskStatus.Closed)
                {
                    notClosedTasks.Add(trainTask);
                }
            }

            foreach (var notClosedTask in notClosedTasks)
            {
                var taskAtributes = await sqlRTaskAttributes.ByTaskId(notClosedTask.Id);

                var lastStatus = await sqlRTaskStatus.ByTaskId(notClosedTask.Id);

                var carriage = await sqlRCarriage.GetById(notClosedTask.CarriageId);

                var equipmentModel = await sqlREquipmentModel.ById(notClosedTask.EquipmentModelId);

                var equpment = await sqlREquipment.ById(equipmentModel.EquipmentId);


                foreach (var taskAtribute in taskAtributes)
                {
                    var row = new Row
                    {
                        Id       = new RowId(notClosedTask.Id, 1),
                        HasItems = false.ToString(),
                        ParentId = null,
                        //Номер
                        Col0 = $"И{notClosedTask.Id}",
                        //Статус
                        Col1 = GetStringTaskStatus(lastStatus.Last().Status),
                        //Тип
                        Col2 = GetStringTaskType(notClosedTask.TaskType),
                        //Вагон
                        Col3 = $"{carriage.Number} - {carriage.Serial}",
                        //Оборудование
                        Col4 = equpment.Name,
                        //Дата
                        Col5 = notClosedTask.CreateDate.ToStringDateTime(),
                    };

                    result.Rows.Add(row);
                }
            }
            return(result);
        }
        /// <summary>
        /// Клонирует модель с эквипментмоделями и с чеклистами в новую.
        /// </summary>
        /// <param name="model"></param>
        /// <returns>Тупо данные новой модели без доп сущнастей</returns>
        public async Task <Model.Model> CloneModelWithChild(Model.Model model)
        {
            using (var transaction = new TransactionScope(asyncFlowOption: TransactionScopeAsyncFlowOption.Enabled))
            {
                //Создаем ебучую модельку;
                var sqlRModel              = new ModelRepository(_logger);
                var sqlREquipmentModel     = new EquipmentModelsRepository(_logger);
                var sqlRCheckListEquipment = new CheckListEquipmentsRepository(_logger);
                var oldModelId             = model.Id;
                var newModel = await sqlRModel.Add(model);

                //Получим все эквипментымордели для этой хуйни.
                var equipmentsModels = await sqlREquipmentModel.ByModelId(oldModelId);

                var oldEquipmentsModel = new List <EquipmentModelsWithOldIds>();
                foreach (var equipmentsModel in equipmentsModels)
                {
                    var toAdd       = new EquipmentModelsWithOldIds();
                    var oldId       = equipmentsModel.Id;
                    var oldParentId = equipmentsModel.ParentId;
                    equipmentsModel.ParentId = null;
                    equipmentsModel.ModelId  = newModel.Id;
                    var cloned = await sqlREquipmentModel.Add(equipmentsModel);

                    //Мапим эту хуету
                    toAdd             = _mapper.Map <EquipmentModel, EquipmentModelsWithOldIds>(cloned);
                    toAdd.OldId       = oldId;
                    toAdd.OldParentId = oldParentId;
                    oldEquipmentsModel.Add(toAdd);
                }


                foreach (var oldEquipmentModel in oldEquipmentsModel)
                {
                    if (oldEquipmentModel.OldParentId != null)
                    {
                        var oldParentElement =
                            oldEquipmentsModel.FirstOrDefault(e => e.OldId == oldEquipmentModel.OldParentId);

                        var toUpdate = new EquipmentModel
                        {
                            Id          = oldEquipmentModel.Id,
                            EquipmentId = oldEquipmentModel.EquipmentId,
                            ModelId     = newModel.Id,
                            ParentId    = oldParentElement?.Id,
                            IsMark      = oldEquipmentModel.IsMark
                        };

                        await sqlREquipmentModel.Update(toUpdate);
                    }
                }

                //Терь клонируем нахуй чеклисты.


                var checkListsToClone = await sqlRCheckListEquipment.ByEquipmentModelId(oldModelId);

                foreach (var checkListToClone in checkListsToClone)
                {
                    checkListToClone.EquipmentModelId = model.Id;
                    await sqlRCheckListEquipment.Add(checkListToClone);
                }

                transaction.Complete();

                return(newModel);
            }
        }
Beispiel #5
0
        private static async Task <List <Row> > GetTaskData(List <TrainTask> tasks, ILogger logger)
        {
            var sqlRUsers               = new UserRepository(logger);
            var sqlRTaskStatus          = new TaskStatusRepository(logger);
            var sqlRTaskExecutors       = new ExecutorRepository(logger);
            var sqlRTaskComment         = new CommentRepository(logger);
            var sqlRCarriages           = new CarriageRepository(logger);
            var sqlREquipmentModel      = new EquipmentModelsRepository(logger);
            var sqlREquipment           = new EquipmentRepository(logger);
            var sqlRTrains              = new TrainRepository(logger);
            var sqlRTrainTaskAttributes = new TrainTaskAttributesRepository(logger);
            var sqlRFault               = new FaultsRepository(logger);

            var rows = new List <Row>();

            foreach (var task in tasks)
            {
                var currentTaskStatus = (await sqlRTaskStatus.ByTaskId(task.Id)).Last();
                var carriage          = await sqlRCarriages.ById(task.CarriageId);

                var user = GetUserById(sqlRUsers, task.UserId);

                var taskExecutor   = (await sqlRTaskExecutors.GetByTaskId(task.Id)).Last();
                var equipmentModel = await sqlREquipmentModel.ById(task.EquipmentModelId);

                var equipment = await sqlREquipment.ById(equipmentModel.EquipmentId);

                var taskAttributes = await sqlRTrainTaskAttributes.ByTaskId(task.Id);

                var lastComment = (await sqlRTaskComment.GetByTaskId(task.Id)).LastOrDefault();
                var fault       = new Fault();
                if (taskAttributes.Count == 1 && taskAttributes.First().FaultId.HasValue)
                {
                    fault = await sqlRFault.ById(taskAttributes.First().FaultId.Value);
                }


                var updateData = GetTaskLastUpdate(lastComment, taskExecutor, currentTaskStatus);

                var toadd = new Row
                {
                    Id       = new RowId(task.Id, 2),
                    HasItems = false.ToString(),
                    ParentId = null,
                    //Ид
                    Col0 = "И" + task.Id,
                    //Статус
                    Col1 = GetStringTaskStatus(currentTaskStatus.Status),
                    //Тип
                    Col2 = GetStringTaskType(task.TaskType),
                    //Состав
                    Col3 = GetTrainById(sqlRTrains, carriage.TrainId).Name,
                    //Инициатор
                    Col4 = user.Name,
                    //Исполнитель
                    Col5 = GetStringBrigadeType(taskExecutor.BrigadeType),
                    //Дата
                    Col6 = task.CreateDate.ToStringDateTime(),
                    ////Вагон
                    Col7 = carriage.Number.ToString(),
                    //Оборудование
                    Col8 = equipment.Name,
                    ////Типовая Неисправность
                    Col9 = fault?.Name,
                    //Обновлено
                    Col10 = updateData?.Date.ToStringDateTime(),
                    //Обновил
                    Col11 = updateData?.User.Name
                };
                if (taskAttributes.Count > 1)
                {
                    toadd.HasItems = true.ToString();
                }

                rows.Add(toadd);
            }

            return(rows);
        }
        public async Task <TrainTaskWithUpdateStatusDto> TrainTaskAdd(TrainTaskaddUi input, User user)
        {
            var sqlRTask           = new TaskRepository(_logger);
            var sqlRStatus         = new TaskStatusRepository(_logger);
            var sqlREquipmentModel = new EquipmentModelsRepository(_logger);
            var sqlREquipment      = new EquipmentRepository(_logger);

            //Проверяем по [CarriageId] и [EquipmentModelId] наличие подобной незакрытой задачи (EquipmentId c UI это EquipmentModelId...)
            var allTasks = await sqlRTask.GetAllTrainTask();

            //TODO перенести логику выборки в sql
            allTasks = allTasks.Where(e => e.CarriageId == input.CarriageId && e.EquipmentModelId == input.EquipmentId)
                       .ToList();
            var trainTaskToAdd = await CheckTrainTaskExist(sqlRStatus, allTasks);

            //Начинаем транзакцию
            using (var transaction = new TransactionScope(asyncFlowOption: TransactionScopeAsyncFlowOption.Enabled))
            {
                var isUpdated = true;

                if (trainTaskToAdd == null)
                {
                    //Делаем пустую таску
                    trainTaskToAdd = await sqlRTask.AddTrainTaskWithoutAttributes(input, user);

                    isUpdated = false;
                }

                await sqlRTask.UpdateEditDate(trainTaskToAdd.Id);

                //добавляем новый атрибут к существующей или свеже созданной
                var newTaskAtribute = await sqlRTask.AddAttributesToTrainTask(trainTaskToAdd, input);

                trainTaskToAdd.TrainTaskAttributes = new List <TrainTaskAttribute> {
                    newTaskAtribute
                };

                //прихуярить статус
                var updateTaskData = new UpdateTaskData
                {
                    StatusId             = (int)input.TaskStatus,
                    TraintaskId          = trainTaskToAdd.Id,
                    FilesId              = input.FilesId,
                    CommentText          = input.Text,
                    TrainTaskExecutorsId = (int)input.Executor
                };


                await UpdateTask(updateTaskData, user, true);

                var equipmentModel = await sqlREquipmentModel.ById(trainTaskToAdd.EquipmentModelId);

                var equipment = await sqlREquipment.ById(equipmentModel.EquipmentId);

                transaction.Complete();



                var result = new TrainTaskWithUpdateStatusDto
                {
                    TrainTask     = trainTaskToAdd,
                    IsUpdated     = isUpdated,
                    EquipmentName = equipment.Name
                };

                return(result);
            }
        }