コード例 #1
0
        public async Task <JsonResult> Add([FromBody] Carriage carriage)
        {
            await CheckPermission();

            if (string.IsNullOrEmpty(carriage.Serial) || (carriage.TrainId == null))
            {
                throw new Exception("Some input parameters NULL");
            }

            var sqlr = new CarriageRepository(_logger);

            try
            {
                if (carriage.Id != 0)
                {
                    await sqlr.Update(carriage);

                    return(Json(new { message = "Update OK" }));
                }
                else
                {
                    var res = await sqlr.Add(carriage);

                    return(Json(res));
                }
            }
            catch (Exception e)
            {
                throw new Exception($"Can't add or update {GetType()} ex = {e}");
            }
        }
コード例 #2
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);
        }
コード例 #3
0
        //прицепить вагон обратно
        public async Task <JsonResult> RestoreLink([FromQuery] int carriageId)
        {
            await CheckPermission();

            var cer = new CarriageRepository(_logger);
            await cer.RestoreLink(carriageId);

            return(Json(new { message = "RestoreLink OK" }));
        }
コード例 #4
0
        public async Task <JsonResult> Delete([FromBody] Carriage carriage)
        {
            await CheckPermission();

            var cer = new CarriageRepository(_logger);
            await cer.Delete(carriage.Id);

            return(Json(new { message = "Delete OK" }));
        }
コード例 #5
0
        public async Task <JsonResult> GetMigrationHistoryTable([FromBody] CarriageRepository.CarriageMigrationHistoryRequest input)
        {
            await CheckPermission();

            var cer = new CarriageRepository(_logger);

            var result = await cer.GetMigrationHistoryTable(input);

            return(Json(result));
        }
コード例 #6
0
        public async Task <JsonResult> GetByIdWithEquipment(int id)
        {
            await CheckPermission();

            var cr = new CarriageRepository(_logger);

            var ceq = await cr.GetByIdWithEquipment(id);

            ceq.Equipment = ceq.Equipment.OrderBy(e => e.Location).ThenBy(q => q.Equipment).ToArray();
            return(Json(ceq));
        }
コード例 #7
0
        public async Task <JsonResult> GetEquipmentsByCarriage(int carriage_id, bool isMark = false, bool sortToTaskList = false)
        {
            await CheckPermission();

            var cr = new CarriageRepository(_logger);
            var mr = new ModelRepository(_logger);

            var carriage = await cr.GetById(carriage_id);

            if (carriage == null)
            {
                throw new Exception("carriage not found");
            }

            var eq = await mr.GetEquipmentByModel(carriage.Model);

            var result = eq.Select(row => new ModelRepository.EquipmentTmp
            {
                EquipmentId      = row.Equipment.Id,
                EquipmentModelId = row.Id,
                EquipmentName    = row.Equipment.Name,
                IsMark           = row.IsMark,
                ParentId         = row.ParentId,
                Id = row.Id
            }).ToArray();

            if (isMark)
            {
                result = result.Where(e => e.IsMark).ToArray();
            }

            if (sortToTaskList)
            {
                var main       = result.Where(e => e.ParentId == 0).ToArray();
                var sortResult = new List <ModelRepository.EquipmentTmp>();
                foreach (var item in main)
                {
                    sortResult.Add(item);
                    sortResult.AddRange(result.Where(e => e.ParentId == item.Id).OrderBy(q => q.EquipmentName));
                }
                foreach (var item in sortResult)
                {
                    if (item.ParentId != 0)
                    {
                        item.EquipmentName = $"  {item.EquipmentName}";
                    }
                }

                result = sortResult.ToArray();
            }

            return(Json(result));
        }
コード例 #8
0
        public async Task <JsonResult> GetByTrainId(int train_id)
        {
            await CheckPermission();

            var tr = new TrainRepository(_logger);
            var cr = new CarriageRepository(_logger);


            var train = await tr.ByIdWithStations(train_id);

            if (train == null)
            {
                throw new Exception("train not found");
            }

            var result = await cr.GetByTrain(train);

            tr.Dispose();
            return(Json(result));
        }
コード例 #9
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);
        }
コード例 #10
0
        public async Task <IActionResult> GetActPdf([FromBody] int trainId)
        {
            await CheckPermission();

            if (trainId == 0)
            {
                throw new ValidationException($"Необходимо выбрать Номер состава.");
            }

            var sqlRAct = new ActCategoriesRepository();
            var html    = @"<html><head>
<style type='text/css'>
.task {
    border-collapse: collapse;
    border: 1px solid black;
}
.task td {
    padding: 5px;
    border: 1px solid black;
}
.task th {
    padding: 5px;
    border: 1px solid black;
    font-size: 80%;
}
.rotate {
    text-align: center;
    white-space: nowrap;
    vertical-align: middle;
    width: 1.5em;
}
.rotate div {
    -webkit-transform: rotate(-90.0deg);
    margin-left: -10em;
    margin-right: -10em;
}
 .break {
    page-break-after: always;
 }
</style></head><body>";

            var sqlRTrain = new TrainRepository(_logger);
            var train     = await sqlRTrain.ByIdWithStations(trainId);

            var sqlRCarriage = new CarriageRepository(_logger);
            var carriages    = await sqlRCarriage.GetByTrain(train);

            string carriagesString = null;

            carriages = carriages.OrderBy(e => e.Number).ToArray();
            foreach (var carriage in carriages)
            {
                if (carriage.Number == 9)
                {
                    continue;
                }
                carriagesString += $"{CreateCarriageNameWithOutTrain(carriage.Number)} ";
            }
            carriagesString += $"{CreateCarriageNameWithOutTrain(9)} ";

            //html += "<p align=\"center\"><font size=\"5\"><b>Акт сдачи - приемки транспорта</b></p>";
            html += "<p align=\"center\"><font size=\"4\"><b>Акт сдачи - приемки Транспорта</b></font></p>";
            html += "<p align=\"center\"><font size=\"4\"><b> в депо </b> Нахабино</font></p>";
            html += "<p><b> N </b>1</p>" +
                    $"<p> Дата {DateTime.Now.ToShortDateString()} Время {DateTime.Now.ToShortTimeString()} Номер эл/ п {train.Name}; Составность {carriages.Length} Причина проведения осмотра ТО-_____ </p>" +
                    $"<p> Нумерация вагонов в подвижном составе {carriagesString} </ p >";

            //шапка
            html += "<table class='task break'><tr><th colspan=\"3\" rowspan=\"2\"></th><th colspan=\"3\">Раздел I</th><th colspan=\"3\">Раздел II</th><th colspan=\"3\">Раздел III</th></tr>";
            html += "<tr><th>Испр</th><th>Неиспр</th><th>№ вагона</th><th>Испр</th><th>Неиспр</th><th>№ вагона</th><th>Испр</th><th>Неиспр</th><th>№ вагона</th></tr>";

            //1. Санитарное состояние
            //надо получить число записей и вставить в <th rowspan = 4>

            var         sqlrTask = new TaskRepository(_logger);
            CultureInfo us       = new CultureInfo("en-US");
            var         currentDateForFuckingSql = DateTime.Now.ToString(@"yyyy-MM-dd", us);

            //var filter =
            //$"[{{\"filter\":\"DateFrom\",\"value\":\"{currentDateForFuckingSql}\"}},{{\"filter\":\"DateTo\",\"value\":\"{currentDateForFuckingSql}\"}}]";
            var tasks = await sqlrTask.GetAllForPdf(0, Int32.MaxValue, trainId);

            var contentWithValues        = new List <ActCategoriesRepository.EquipmentActsPdf>();
            var summaryContentWithValues = new List <ActCategoriesRepository.EquipmentActsPdf>();
            //var sqlRAct = new ActCategoriesRepository();

            var badR1  = 0;
            var goodR2 = 0;
            var badR3  = 0;

            var paragraphs = new List <string>
            {
                "Санитарное состояние",
                "Электрооборудование",
                "Кузовное оборудование",
                "Прочее"
            };

            var count = 1;

            List <ActCategoriesRepository.EquipmentActsPdf> content;

            foreach (var paragraph in paragraphs)
            {
                content = await sqlRAct.GetAllForPdf(paragraph, count);

                var rowspanPlus = 2;
                if (count == 3)
                {
                    rowspanPlus = 3;
                }

                html += $@"<tr><th class='rotate' rowspan='{content.Count + rowspanPlus}'>" +
                        "<div>" +
                        $"{count}. {paragraph}" +
                        $"" +
                        "</div>" +
                        "</th></tr>";

                var countInternal = 1;
                foreach (var item in content)
                {
                    item.CarriageNumR1 = new List <int>();
                    item.CarriageNumR2 = new List <int>();
                    item.CarriageNumR3 = new List <int>();

                    if (countInternal == 12 && count == 3)
                    {
                        html += "</table><table class='task'>";
                        html += "<tr><th colspan=\"3\" rowspan=\"2\"></th><th colspan=\"3\">Раздел I</th><th colspan=\"3\">Раздел II</th><th colspan=\"3\">Раздел III</th></tr>";
                        html += "<tr><th>Испр</th><th>Неиспр</th><th>№ вагона</th><th>Испр</th><th>Неиспр</th><th>№ вагона</th><th>Испр</th><th>Неиспр</th><th>№ вагона</th></tr>";
                        html += $@"<tr><th class='rotate' rowspan='{content.Count - countInternal + rowspanPlus}'>" +
                                "<div>" +
                                $"{count}. {paragraph}" +
                                $"" +
                                "</div>" +
                                "</th></tr>";
                    }

                    await TaskFucker(sqlRAct, tasks, item);

                    contentWithValues.Add(item);
                    html += $"<tr><th>{item.Number}</th>" +
                            $"<th>{item.ActName}</th>" +
                            $"<th>{item.GoodR1}</th>" +
                            $"<th>{item.BadR1}</th>" +
                            $"<th>{sqlRAct.CreateCarriageStrintToPdf(item.CarriageNumR1)}</th>" +

                            $"<th>{item.GoodR2}</th>" +
                            $"<th>{item.BadR2}</th>" +
                            $"<th>{sqlRAct.CreateCarriageStrintToPdf(item.CarriageNumR2)}</th>" +

                            $"<th>{item.GoodR3}</th>" +
                            $"<th>{item.BadR3}</th>" +
                            $"<th>{sqlRAct.CreateCarriageStrintToPdf(item.CarriageNumR3)}</th>" +
                            $"</tr>";

                    countInternal++;
                }
                //както надо посчитать колво замечаний в каждом столбце блядь
                badR1  = 0;
                goodR2 = 0;
                badR3  = 0;
                foreach (var item in contentWithValues)
                {
                    if (item.BadR1 != null)
                    {
                        badR1 = badR1 + item.BadR1.Value;
                    }
                    if (item.GoodR2 != null)
                    {
                        goodR2 = goodR2 + item.GoodR2.Value;
                    }
                    if (item.BadR3 != null)
                    {
                        badR3 = badR3 + item.BadR3.Value;
                    }
                }

                string s1 = null;
                string s2 = null;
                string s3 = null;
                if (badR1 != 0)
                {
                    s1 = badR1.ToString();
                }
                if (goodR2 != 0)
                {
                    s2 = goodR2.ToString();
                }
                if (badR3 != 0)
                {
                    s3 = badR3.ToString();
                }


                html +=
                    $"<tr><th colspan=\"2\"><b>Всего замечаний</b></th><th></th><th>{s1}</th><th></th><th>{s2}</th><th></th><th></th><th></th><th>{s3}</th><th></th></tr>";
                summaryContentWithValues.AddRange(contentWithValues);
                contentWithValues.Clear();
                count++;

                if (count == 4)
                {
                    html +=
                        "<tr><th></th><th>4.</th><th><b>Составность не соответствует заявке</b></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th></tr>";
                    count++;
                }
            }

            //ИТОГО

            badR1  = 0;
            goodR2 = 0;
            badR3  = 0;
            foreach (var item in summaryContentWithValues)
            {
                if (item.BadR1 != null)
                {
                    badR1 = badR1 + item.BadR1.Value;
                }
                if (item.GoodR2 != null)
                {
                    goodR2 = goodR2 + item.GoodR2.Value;
                }
                if (item.BadR3 != null)
                {
                    badR3 = badR3 + item.BadR3.Value;
                }
            }

            string ss1 = null;
            string ss2 = null;
            string ss3 = null;

            if (badR1 != 0)
            {
                ss1 = badR1.ToString();
            }
            if (goodR2 != 0)
            {
                ss2 = goodR2.ToString();
            }
            if (badR3 != 0)
            {
                ss3 = badR3.ToString();
            }

            html += $"<tr><th></th><th colspan=\"2\"><b>ИТОГО по санитарно - техническому состоянию</b></th><th></th><th>{ss1}</th><th></th><th>{ss2}</th><th></th><th>" +
                    $"</th><th></th><th>{ss3}</th><th></th></tr>";

            html += "</table><br /><br />";

            //надписи под таблицей

            var checkBoxHtml = "<input maxlength = \"1\" size = \"1\" type = \"text\">";
            var probel       = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
            var probel2      = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
            var probel3      = "&nbsp;";


            html += $"<p><font size=\"2\">{probel}Эл.поезд эксплуатационным нормам безопасности движения {checkBoxHtml}соответствует {checkBoxHtml}не соответсвует</font></p>";

            html += $"<p><font size=\"2\">На основании дейтв. нормативных документов эксплуатации поезда {checkBoxHtml}разрешена{probel3}{checkBoxHtml}запрещена</font></p>";

            html += $"<p><font size=\"2\">Поезд к первоочередн. устранению {checkBoxHtml}      Повторная проверка проведена: _______________      Время Выхода из депо________</font></p>";
            html += $"<p><font size=\"2\">по результатам повторной проверки эксплуатация поезда {checkBoxHtml}разрешена   {checkBoxHtml}запрещена       <b>Выдан на линию воопреки запрета в</b>________</font></p>";

            html += $"<p align=\"right\"><font size=\"2\"><b>Приёмку подвижного состава до постановки на ТО(ТР) произвели</b></font>{probel2}{probel2}</p>";

            html += $"<p align=\"center\"><font size=\"2\"><b>Представитель ПАО \"ЦППК\" - приёмщик ООО \"Профлайн\"_________________{probel2}{probel2}/_______________/</b></font></p>";
            html += $"<p align=\"center\"><font size=\"2\"><b>Представитель депо <u>{probel2}{probel2}Нахабино{probel2}{probel2}бригадир{probel2}{probel2}{probel2}</u>{probel2}{probel2}/_______________/</b></font></p>";

            html += $"<p align=\"right\"><font size=\"2\"><b>Приёмку подвижного состава после проведения ТО(ТР) произвели</b></font>{probel2}{probel2}</p>";
            html += $"<p align=\"center\"><font size=\"2\"><b>Представитель ПАО \"ЦППК\" - приёмщик ООО \"Профлайн\"_________________{probel2}{probel2}/_______________/</b></font></p>";
            html += $"<p align=\"center\"><font size=\"2\"><b>Представитель депо <u>{probel2}{probel2}Нахабино{probel2}{probel2}бригадир{probel2}{probel2}{probel2}</u>{probel2}{probel2}/_______________/</b></font></p>";

            html += "<br /><br /><body></html>";
            //
            var output = _pdfConverter.Convert(new HtmlToPdfDocument
            {
                GlobalSettings =
                {
                    ColorMode   = ColorMode.Color,
                    Orientation = Orientation.Portrait,
                    PaperSize   = PaperKind.A4,
                },
                Objects =
                {
                    new ObjectSettings
                    {
                        HtmlContent = html,
                        WebSettings ={ DefaultEncoding                   = "utf-8" }
                    }
                }
            });

            //


            return(File(output, "application/pdf", "1111" + "_" + "2222" + "_" + "3333" + ".pdf"));
        }
コード例 #11
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);
        }