Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| product:linq:exaples [11.11.2020 07:39] – создано mayn | product:linq:exaples [15.09.2025 13:14] (текущий) – ekaterina.menkhuzina | ||
|---|---|---|---|
| Строка 3: | Строка 3: | ||
| <code csharp> | <code csharp> | ||
| var deals = dataContext.Kontragent_9e5de8_List | var deals = dataContext.Kontragent_9e5de8_List | ||
| - | | + | |
| | | ||
| | | ||
| Строка 10: | Строка 10: | ||
| </ | </ | ||
| - | =====Просроченные задачи пользователей===== | + | ===== Просроченные задачи пользователей ===== |
| <code csharp> | <code csharp> | ||
| var dToday = DateTime.Today; | var dToday = DateTime.Today; | ||
| Строка 37: | Строка 37: | ||
| .OrderBy(z => z.Name) | .OrderBy(z => z.Name) | ||
| .Select(z => new { z.Name, | .Select(z => new { z.Name, | ||
| - | // | ||
| boss = String.Concat(z.Owner.LastName, | boss = String.Concat(z.Owner.LastName, | ||
| | | ||
| Строка 52: | Строка 51: | ||
| ) | ) | ||
| | | ||
| - | | + | |
| return deals; | return deals; | ||
| </ | </ | ||
| Строка 94: | Строка 93: | ||
| </ | </ | ||
| - | ===== Прошлогодние задачи, конкретного пользователя===== | + | ===== Прошлогодние задачи конкретного пользователя===== |
| <code csharp> | <code csharp> | ||
| var personId = parameters.GetValueOrDefault< | var personId = parameters.GetValueOrDefault< | ||
| Строка 115: | Строка 114: | ||
| .OrderBy(z => z.Name) | .OrderBy(z => z.Name) | ||
| .Select(z => new { Sdelka = z.Name, | .Select(z => new { Sdelka = z.Name, | ||
| - | // | ||
| | | ||
| boss = String.Concat(z.Owner.LastName, | boss = String.Concat(z.Owner.LastName, | ||
| Строка 131: | Строка 129: | ||
| ) | ) | ||
| | | ||
| - | | ||
| | | ||
| - | | + | |
| | | ||
| - | | + | |
| return deals; | return deals; | ||
| + | </ | ||
| + | |||
| + | ===== Получение ID родителя ===== | ||
| + | |||
| + | у объекта есть метод '' | ||
| + | |||
| + | если надо выше, то - '' | ||
| + | |||
| + | ==== Поиск родителя ==== | ||
| + | <code C#> | ||
| + | var nodeGUID = parameters.GetValueOrDefault< | ||
| + | |||
| + | var projects = dataContext.Projects | ||
| + | .Where(p => p.GetParentHierarchy< | ||
| + | .OrderBy(p => p.Parent.Id) | ||
| + | .OrderBy(p => p.CreationDate) | ||
| + | .Select(p => new{ | ||
| + | p.Name, | ||
| + | object_id = p.Id, | ||
| + | ParentId = p.Parent.Id | ||
| + | }); | ||
| + | return projects; | ||
| + | </ | ||
| + | |||
| + | ===== Запрос по проекту (с выводом количества разного рода объектов) для анализа состояния проекта ===== | ||
| + | Запрос по проекту, | ||
| + | - Все объекты. | ||
| + | - Все конечные объекты. | ||
| + | - Количество работ без зависимостей. | ||
| + | - Количество работ с фиксированными сроками. | ||
| + | - Всего объектов просрочено. | ||
| + | - Количество конечных работ с несвоевременным началом. | ||
| + | - Количество приоритетных задач. | ||
| + | - Конечных работе без отчета о ходе работ и т.п. | ||
| + | |||
| + | <code csharp> | ||
| + | var id = parameters.GetValueOrDefault< | ||
| + | var idProject = id; | ||
| + | var сегодня = DateTime.Now; | ||
| + | var сегодня_7дн = сегодня.AddDays (-7); | ||
| + | var сегодня_14дн = сегодня.AddDays (-14); | ||
| + | var сегодня_плюс_12 = сегодня.AddMonths(12); | ||
| + | var сегодня_плюс_3 = сегодня.AddMonths(3); | ||
| + | var сегодня_мин_3_мес = сегодня.AddMonths(-3); | ||
| + | // var currentYear = new DateTime(сегодня.Year.Month, | ||
| + | var defaultCalendar = workCalendars.GetDefaultCalendar(); | ||
| + | |||
| + | var dToday = DateTime.Now; | ||
| + | var child = dataContext.Projects | ||
| + | .Where(p => p.GetParentHierarchy< | ||
| + | .Where(a => a.GetChildren< | ||
| + | .Where(a => a.BaselinePlanEndDate != null && (a.Status == ProjectStatus.NotStarted | ||
| + | .Select(p => new { | ||
| + | p.Id, | ||
| + | ParentId = p.Parent.Id, | ||
| + | Calendar = p.CalendarId, | ||
| + | Start = p.SystemStartDate, | ||
| + | End = p.SystemEndDate, | ||
| + | UDN = p.BaselinePlanStartDate, | ||
| + | UDO = p.BaselinePlanEndDate, | ||
| + | Status1 = p.Status, | ||
| + | // HasChild = p.GetChildren< | ||
| + | }) | ||
| + | .ToList() | ||
| + | .Where(a => (Math.Round(workCalendars.GetWorkCalendar(a.Calendar).GetWorktimeDays(a.Start.Value.Date, | ||
| + | .Select(p => new | ||
| + | { | ||
| + | p.ParentId, | ||
| + | p.Calendar, | ||
| + | p.Start, | ||
| + | p.End, | ||
| + | p.UDN, | ||
| + | p.UDO, | ||
| + | p.Status1, | ||
| + | План_длительность = Math.Round(workCalendars.GetWorkCalendar(p.Calendar).GetWorktimeDays(p.Start.Value.Date, | ||
| + | Утв_длительность = p.UDO != null ? Math.Round(workCalendars.GetWorkCalendar(p.Calendar).GetWorktimeDays(p.UDN.Value.Date, | ||
| + | }); | ||
| + | |||
| + | var projects = dataContext.Projects | ||
| + | .Where(p => p.GetParentHierarchy< | ||
| + | .Where(p => p is Proekt_tipovoj_b9f9ae || p is Proekt_tipovoj_2_82b061 || p is Proekt_Lean_a65539) | ||
| + | .Where(p => p.Name != null) | ||
| + | |||
| + | .Select(p => new { | ||
| + | ID_проекта = p.Id, | ||
| + | Название_проекта = p.Name, | ||
| + | Руководитель = String.Concat(p.Owner.LastName, | ||
| + | План_завершения = DbFunctions.TruncateTime(p.SystemEndDate), | ||
| + | SystemStartDate = DbFunctions.TruncateTime(p.SystemStartDate), | ||
| + | SystemEndDate = DbFunctions.TruncateTime(p.SystemEndDate), | ||
| + | Утвержд_завершение = DbFunctions.TruncateTime(p.BaselinePlanEndDate), | ||
| + | Утвержд_начало = DbFunctions.TruncateTime(p.BaselinePlanStartDate), | ||
| + | Процент_завершения | ||
| + | Всего_объектов = p.GetChildrenHierarchy< | ||
| + | Всего_конечных_объектов = p.GetChildrenHierarchy< | ||
| + | Конечных_год_вперед_1 = p.GetChildrenHierarchy< | ||
| + | Конечных_более1мес_1 = p.GetChildrenHierarchy< | ||
| + | Колво_работ_без_связей_2 = p.GetChildrenHierarchy< | ||
| + | Колво_работ_с_фиксом_3 = p.GetChildrenHierarchy< | ||
| + | Всего_объектов_просрочено_5 = p.GetChildrenHierarchy< | ||
| + | Всего_объектов_критич_6 = p.GetChildrenHierarchy< | ||
| + | | ||
| + | /*В ПОСТОБРАБОТКЕ СЧИТАЕТ РАБ.ДНИ*/ | ||
| + | | ||
| + | | ||
| + | Длительность_проекта = DbFunctions.DiffDays(p.SystemStartDate, | ||
| + | Длительность_проекта_9 = (100 - ((DbFunctions.DiffDays(p.BaselinePlanEndDate, | ||
| + | Конечных_несвоевр_начало_12 = p.GetChildrenHierarchy< | ||
| + | / | ||
| + | Конечных_несвоевр_начало_критич_12 = p.GetChildrenHierarchy< | ||
| + | | ||
| + | Конечных_без_отчета_13 = p.GetChildrenHierarchy< | ||
| + | | ||
| + | Конечных_крит_без_отчета_13 = p.GetChildrenHierarchy< | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | Конечных_критич_без_отчета_14 = p.GetChildrenHierarchy< | ||
| + | | ||
| + | | ||
| + | Конечных_критич_14_со_статусом = p.GetChildrenHierarchy< | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | new_колво_мес_КТ_4 = p.GetChildrenHierarchy< | ||
| + | new_колво_мес_проект_4 = DbFunctions.DiffMonths(сегодня, | ||
| + | Сегодня = DbFunctions.TruncateTime(сегодня), | ||
| + | Плюс_12_мес_= сегодня_плюс_12, | ||
| + | Тек_мес_14дн = сегодня_14дн, | ||
| + | }) | ||
| + | | ||
| + | | ||
| + | .Select(p => new{ | ||
| + | p.ID_проекта, | ||
| + | p.Название_проекта, | ||
| + | p.Руководитель, | ||
| + | p.SystemStartDate, | ||
| + | p.SystemEndDate, | ||
| + | p.Утвержд_завершение, | ||
| + | p.Утвержд_начало, | ||
| + | p.Процент_завершения, | ||
| + | p.Всего_объектов, | ||
| + | p.Всего_конечных_объектов, | ||
| + | p.Конечных_год_вперед_1, | ||
| + | p.Конечных_более1мес_1, | ||
| + | Колво_работ_без_связей_2 = p.Колво_работ_без_связей_2 == 0 ? 0 : p.Колво_работ_без_связей_2 - 1, | ||
| + | p.Колво_работ_с_фиксом_3, | ||
| + | p.Всего_объектов_просрочено_5, | ||
| + | p.Всего_объектов_критич_6, | ||
| + | Конечных_длит_7 = child.Count(), | ||
| + | p.Длительность_проекта, | ||
| + | p.Длительность_проекта_9, | ||
| + | p.Конечных_несвоевр_начало_12, | ||
| + | p.Конечных_несвоевр_начало_критич_12, | ||
| + | p.Конечных_без_отчета_13, | ||
| + | p.Конечных_крит_без_отчета_13, | ||
| + | Конечных_просроченных_без_отчета_14 = p.Конечных_просроченных_без_отчета_14 - p.Конечных_просроченных_14_со_статусом, | ||
| + | Конечных_критич_без_отчета_14 = p.Конечных_критич_без_отчета_14 - p.Конечных_критич_14_со_статусом, | ||
| + | p.new_колво_мес_КТ_4, | ||
| + | p.new_колво_мес_проект_4, | ||
| + | p.Сегодня, | ||
| + | |||
| + | | ||
| + | |||
| + | .ToList(); | ||
| + | return projects; | ||
| + | </ | ||
| + | |||
| + | ===== Объединение плановых и фактических трудозатрат ===== | ||
| + | <code csharp> | ||
| + | var Portfel = parameters.GetValueOrDefault< | ||
| + | var Текущие_проекты = new Guid(" | ||
| + | |||
| + | var plan = dataContext.ProjectCosts | ||
| + | .Where(p => p.Project.GetParentHierarchy< | ||
| + | .Select(c => new | ||
| + | { | ||
| + | ProjectUID = (Guid? | ||
| + | TaskUID = c.ProjectId, | ||
| + | // | ||
| + | // | ||
| + | // | ||
| + | Date = (DateTime? | ||
| + | Plan = (double? | ||
| + | Fact = (double? | ||
| + | }) | ||
| + | .ToList(); | ||
| + | |||
| + | var faсt = dataContext.Fakticheskie_trudozatrati_977ff0_List | ||
| + | .Where(p => p.Project.GetParentHierarchy< | ||
| + | .Select(f => new | ||
| + | { | ||
| + | ProjectUID = (Guid? | ||
| + | TaskUID = f.Project.Id, | ||
| + | // | ||
| + | // | ||
| + | // | ||
| + | f.Date, | ||
| + | Plan = (double? | ||
| + | Fact = (double? | ||
| + | }) | ||
| + | .ToList(); | ||
| + | |||
| + | var costs = plan.Union(faсt) | ||
| + | .GroupBy(c => (c.Date, c.TaskUID), | ||
| + | (keys, values) => new | ||
| + | { | ||
| + | | ||
| + | | ||
| + | // | ||
| + | | ||
| + | Plan = values.Sum(s => s.Plan), | ||
| + | Fact = values.Sum(s => s.Fact) | ||
| + | }) | ||
| + | .ToList(); | ||
| + | |||
| + | return costs; | ||
| + | </ | ||
| + | |||
| + | ===== Запрос с параметром, | ||
| + | Cам параметр отдельно: | ||
| + | <code csharp> | ||
| + | var classifier1 = parameters.GetValueOrDefault< | ||
| + | </ | ||
| + | |||
| + | Фильтр по параметру в основном запросе: | ||
| + | <code csharp> | ||
| + | .Where(ps => classifier1 != Guid.Empty ? (ps.Proizvodstvo___peredel_93e62e.Id == classifier1) : true) | ||
| + | </ | ||
| + | |||
| + | В самом предфильтре значение параметра: | ||
| + | <code csharp> | ||
| + | Proizvodstvo___peredel | ||
| + | </ | ||
| + | |||
| + | <code csharp> | ||
| + | var id = parameters.GetValueOrDefault< | ||
| + | var startDatePTR = parameters.GetValueOrDefault< | ||
| + | var idPTR = id; // parameters.GetValueOrDefault< | ||
| + | var endDatePTR = parameters.GetValueOrDefault< | ||
| + | var endDate = endDatePTR.Value.AddDays (1); | ||
| + | var currentYear = new DateTime(endDatePTR.Value.Year, | ||
| + | var currentYearend = currentYear.AddMonths(12); | ||
| + | var k1 = currentYear.AddMonths(3); | ||
| + | var k2 = k1.AddMonths(3); | ||
| + | var k3 = k2.AddMonths(3); | ||
| + | var k4 = k3.AddMonths(3); | ||
| + | var y2 = currentYear.AddYears(1); | ||
| + | var y3 = currentYear.AddYears(2); | ||
| + | var y4 = currentYear.AddYears(3); | ||
| + | // | ||
| + | // | ||
| + | var classifier1 = parameters.GetValueOrDefault< | ||
| + | // | ||
| + | var kt_3 = dataContext.KT_3_f1cf19_List | ||
| + | .Where(kt3 => kt3.GetParentHierarchy< | ||
| + | .Where(kt3 => kt3.GetParentHierarchy< | ||
| + | .Where(kt3 => kt3.Status != ProjectStatus.Cancelled ) | ||
| + | .OrderBy(kt3 => kt3.CreationDate) | ||
| + | .Select(kt3 => new { | ||
| + | kt3.Name, | ||
| + | MeropriyatieId = kt3.GetParentHierarchy< | ||
| + | EtapPtrId = (Guid? | ||
| + | PsId = (Guid? | ||
| + | | ||
| + | Служебный_тип_для_оборудования = (Guid? | ||
| + | kt3.BaselinePlanEndDate, | ||
| + | kt3.ActualEndDate, | ||
| + | }) | ||
| + | .ToList(); | ||
| + | |||
| + | var report22 = dataContext.Poziciya_specifikacii_437efa_List | ||
| + | .Where(ps => ps.Otnoshenie_k_chasti_PTR_c2c87f.Id == Classifier_Otnoshenie_k_chasti_PTR_0d5548.Osnovnaya_chastj_890632c4_Id || ps.Otnoshenie_k_chasti_PTR_c2c87f.Id == null) | ||
| + | .Where(ps => ps.Data_vklyucheniya_v_PTR_73d436 >= startDatePTR.Value) | ||
| + | .Where(ps => ps.GetParentHierarchy< | ||
| + | .Where(ps => ps.GetParentHierarchy< | ||
| + | .Where(ps => ps.Status == ProjectStatus.InWork || | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | ) | ||
| + | .Where(ps => ps.Gruppa_oborudovaniya_fdcaf9.Id == Classifier_Gruppa_oborudovaniya_94eb92.Osnovnoe_0dfc21cd_Id || | ||
| + | | ||
| + | .Where(ps => ps.Kategoriya_rashodov_d87c7c.Id == Classifier_Kategoriya_rashodov_df2928.Kapitaliziruemie_bcc3e43c_Id) | ||
| + | .Where(ps => ps.Razdel_PTR_730d6c.Id == Classifier_Razdel_PTR_27f85e._22_6200148b_Id) | ||
| + | .Where(ps => classifier1 != Guid.Empty ? (ps.Proizvodstvo___peredel_93e62e.Id == classifier1) : true) | ||
| + | .OrderBy(ps => ps.CreationDate) | ||
| + | .Select(ps => new { | ||
| + | ID_проекта = ps.Id, | ||
| + | Название_проекта = ps.Name, | ||
| + | Производство_передел = ps.Proizvodstvo___peredel_93e62e.Name, | ||
| + | Группа_оборудования = ps.Gruppa_oborudovaniya_fdcaf9.Name, | ||
| + | Отношение_к_части_ПТР = ps.Otnoshenie_k_chasti_PTR_c2c87f.Name, | ||
| + | Код_МПОФ = ps.GetParentHierarchy< | ||
| + | ID_МПОФ = ps.GetParentHierarchy< | ||
| + | Марка_оборудования = ps.GetChildren< | ||
| + | Фирма_страна_производитель = ps.GetChildren< | ||
| + | Фирма_страна_поставщик = ps.GetChildren< | ||
| + | ID_узкого_места = (Guid? | ||
| + | Код_узкого_места = ps.Svyazan_s__uzkim_mestom_459c92_08ee48.FirstOrDefault().Kod_uzkogo_mesta_6f8714, | ||
| + | Кол_во = ps.Kol__vo_6a6a43, | ||
| + | Бюджет_ПОФ = ps.GetChildren< | ||
| + | Дата_включения_в_ПТР = ps.Data_vklyucheniya_v_PTR_73d436, | ||
| + | ФАКТ_платежи = ps.GetChildren< | ||
| + | ФАКТ_платежи_с_предыдущих_лет = ps.GetChildren< | ||
| + | Причины_отклонений = ps.GetChildren< | ||
| + | Предприятия_холдинга = ps.GetParentHierarchy< | ||
| + | Кол_во_Факт = ps.Kol__vo_FAKT_747cbf, | ||
| + | | ||
| + | План_сумма_1_кв = ps.GetChildren< | ||
| + | План_сумма_2_кв = ps.GetChildren< | ||
| + | План_сумма_3_кв = ps.GetChildren< | ||
| + | План_сумма_4_кв = ps.GetChildren< | ||
| + | | ||
| + | Факт_сумма_1_кв = ps.GetChildren< | ||
| + | Факт_сумма_2_кв = ps.GetChildren< | ||
| + | Факт_сумма_3_кв = ps.GetChildren< | ||
| + | Факт_сумма_4_кв = ps.GetChildren< | ||
| + | | ||
| + | Номер_договора = ps.GetParentHierarchy< | ||
| + | | ||
| + | MeropriyatieId = (Guid? | ||
| + | EtapPtrId = (Guid? | ||
| + | }) | ||
| + | .ToList() | ||
| + | .Select(p => new{ | ||
| + | p.ID_проекта, | ||
| + | p.Название_проекта, | ||
| + | p.Производство_передел, | ||
| + | p.Группа_оборудования, | ||
| + | p.Отношение_к_части_ПТР, | ||
| + | p.Код_МПОФ, | ||
| + | p.ID_МПОФ, | ||
| + | p.Марка_оборудования, | ||
| + | p.Фирма_страна_производитель, | ||
| + | p.Фирма_страна_поставщик, | ||
| + | p.ID_узкого_места, | ||
| + | p.Код_узкого_места, | ||
| + | p.Кол_во, | ||
| + | p.Бюджет_ПОФ, | ||
| + | p.Дата_включения_в_ПТР, | ||
| + | p.ФАКТ_платежи, | ||
| + | p.ФАКТ_платежи_с_предыдущих_лет, | ||
| + | p.Причины_отклонений, | ||
| + | p.Предприятия_холдинга, | ||
| + | p.Кол_во_Факт, | ||
| + | | ||
| + | p.План_сумма_1_кв, | ||
| + | p.План_сумма_2_кв, | ||
| + | p.План_сумма_3_кв, | ||
| + | p.План_сумма_4_кв, | ||
| + | | ||
| + | p.Факт_сумма_1_кв, | ||
| + | p.Факт_сумма_2_кв, | ||
| + | p.Факт_сумма_3_кв, | ||
| + | p.Факт_сумма_4_кв, | ||
| + | | ||
| + | КТ_ТЗ_план = | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.TZ_i_konkursnaya_dokumentaciya_utverzhdeni_79c8892e_Id) | ||
| + | .FirstOrDefault(k => k.EtapPtrId == p.EtapPtrId && k.EtapPtrId != null)? | ||
| + | .BaselinePlanEndDate ?? | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.TZ_i_konkursnaya_dokumentaciya_utverzhdeni_79c8892e_Id) | ||
| + | .FirstOrDefault(k => k.MeropriyatieId == p.MeropriyatieId && k.EtapPtrId == null)? | ||
| + | .BaselinePlanEndDate, | ||
| + | | ||
| + | КТ_ТЗ_факт = | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.TZ_i_konkursnaya_dokumentaciya_utverzhdeni_79c8892e_Id) | ||
| + | .FirstOrDefault(k => k.EtapPtrId == p.EtapPtrId && k.EtapPtrId != null)? | ||
| + | .ActualEndDate ?? | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.TZ_i_konkursnaya_dokumentaciya_utverzhdeni_79c8892e_Id) | ||
| + | .FirstOrDefault(k => k.MeropriyatieId == p.MeropriyatieId && k.EtapPtrId == null)? | ||
| + | .ActualEndDate, | ||
| + | | ||
| + | КТ_Конкурс_план = | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Konkurs_zavershen_9b06d84d_Id) | ||
| + | .FirstOrDefault(k => k.EtapPtrId == p.EtapPtrId && k.EtapPtrId != null)? | ||
| + | .BaselinePlanEndDate ?? | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Konkurs_zavershen_9b06d84d_Id) | ||
| + | .FirstOrDefault(k => k.MeropriyatieId == p.MeropriyatieId && k.EtapPtrId == null)? | ||
| + | .BaselinePlanEndDate, | ||
| + | | ||
| + | КТ_Конкурс_факт = | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Konkurs_zavershen_9b06d84d_Id) | ||
| + | .FirstOrDefault(k => k.EtapPtrId == p.EtapPtrId && k.EtapPtrId != null)? | ||
| + | .ActualEndDate ?? | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Konkurs_zavershen_9b06d84d_Id) | ||
| + | .FirstOrDefault(k => k.MeropriyatieId == p.MeropriyatieId && k.EtapPtrId == null)? | ||
| + | .ActualEndDate, | ||
| + | | ||
| + | КТ_Договор_план = | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Dogovor_zaklyuchen_3a8ff8d9_Id) | ||
| + | .FirstOrDefault(k => k.EtapPtrId == p.EtapPtrId && k.EtapPtrId != null)? | ||
| + | .BaselinePlanEndDate ?? | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Dogovor_zaklyuchen_3a8ff8d9_Id) | ||
| + | .FirstOrDefault(k => k.MeropriyatieId == p.MeropriyatieId && k.EtapPtrId == null)? | ||
| + | .BaselinePlanEndDate, | ||
| + | | ||
| + | КТ_Договор_факт = | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Dogovor_zaklyuchen_3a8ff8d9_Id) | ||
| + | .FirstOrDefault(k => k.EtapPtrId == p.EtapPtrId && k.EtapPtrId != null)? | ||
| + | .ActualEndDate ?? | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Dogovor_zaklyuchen_3a8ff8d9_Id) | ||
| + | .FirstOrDefault(k => k.MeropriyatieId == p.MeropriyatieId && k.EtapPtrId == null)? | ||
| + | .ActualEndDate, | ||
| + | | ||
| + | КТ_Поставка_план = | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Postavka_osuschestvlena_d8967234_Id) | ||
| + | .FirstOrDefault(k => k.PsId == p.ID_проекта && k.PsId != null)? | ||
| + | .BaselinePlanEndDate, | ||
| + | КТ_Поставка_факт = | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Postavka_osuschestvlena_d8967234_Id) | ||
| + | .FirstOrDefault(k => k.PsId == p.ID_проекта && k.PsId != null)? | ||
| + | .ActualEndDate, | ||
| + | | ||
| + | КТ_Монтаж_план = | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Montazh_osuschestvlen_73254f39_Id) | ||
| + | .FirstOrDefault(k => k.PsId == p.ID_проекта && k.PsId != null)? | ||
| + | .BaselinePlanEndDate, | ||
| + | КТ_Монтаж_факт = | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Montazh_osuschestvlen_73254f39_Id) | ||
| + | .FirstOrDefault(k => k.PsId == p.ID_проекта && k.PsId != null)? | ||
| + | .ActualEndDate, | ||
| + | | ||
| + | КТ_Ввод_в_Э_план = | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Oborudovanie_vvedeno_v_ekspluataciyu_c2bc6e62_Id) | ||
| + | .FirstOrDefault(k => k.PsId == p.ID_проекта && k.PsId != null)? | ||
| + | .BaselinePlanEndDate, | ||
| + | КТ_Ввод_в_Э_факт = | ||
| + | kt_3 | ||
| + | .Where(k => k.Служебный_тип_для_оборудования == Classifier_Sluzhebnij_Tip_KT_dlya_oborudovaniya_SMR_611543.Oborudovanie_vvedeno_v_ekspluataciyu_c2bc6e62_Id) | ||
| + | .FirstOrDefault(k => k.PsId == p.ID_проекта && k.PsId != null)? | ||
| + | .ActualEndDate, | ||
| + | | ||
| + | p.Номер_договора, | ||
| + | }) | ||
| + | .Select(p => new{ | ||
| + | p.ID_проекта, | ||
| + | p.Название_проекта, | ||
| + | p.Производство_передел, | ||
| + | p.Группа_оборудования, | ||
| + | p.Отношение_к_части_ПТР, | ||
| + | p.Код_МПОФ, | ||
| + | p.ID_МПОФ, | ||
| + | p.Марка_оборудования, | ||
| + | p.Фирма_страна_производитель, | ||
| + | p.Фирма_страна_поставщик, | ||
| + | p.ID_узкого_места, | ||
| + | p.Код_узкого_места, | ||
| + | p.Кол_во, | ||
| + | p.Бюджет_ПОФ, | ||
| + | p.Дата_включения_в_ПТР, | ||
| + | p.ФАКТ_платежи, | ||
| + | p.ФАКТ_платежи_с_предыдущих_лет, | ||
| + | p.Причины_отклонений, | ||
| + | p.Предприятия_холдинга, | ||
| + | | ||
| + | p.План_сумма_1_кв, | ||
| + | p.План_сумма_2_кв, | ||
| + | p.План_сумма_3_кв, | ||
| + | p.План_сумма_4_кв, | ||
| + | | ||
| + | p.Факт_сумма_1_кв, | ||
| + | p.Факт_сумма_2_кв, | ||
| + | p.Факт_сумма_3_кв, | ||
| + | p.Факт_сумма_4_кв, | ||
| + | | ||
| + | p.КТ_ТЗ_план, | ||
| + | КТ_ТЗ_факт = p.КТ_ТЗ_факт < endDate ? p.КТ_ТЗ_факт : null, | ||
| + | p.КТ_Конкурс_план, | ||
| + | КТ_Конкурс_факт = p.КТ_Конкурс_факт < endDate ? p.КТ_Конкурс_факт : null, | ||
| + | p.КТ_Договор_план, | ||
| + | КТ_Договор_факт = p.КТ_Договор_факт < endDate ? p.КТ_Договор_факт : null, | ||
| + | p.КТ_Поставка_план, | ||
| + | КТ_Поставка_факт = p.КТ_Поставка_факт < endDate ? p.КТ_Поставка_факт : null, | ||
| + | p.КТ_Монтаж_план, | ||
| + | КТ_Монтаж_факт = p.КТ_Монтаж_факт < endDate ? p.КТ_Монтаж_факт : null, | ||
| + | p.КТ_Ввод_в_Э_план, | ||
| + | КТ_Ввод_в_Э_факт = p.КТ_Ввод_в_Э_факт < endDate ? p.КТ_Ввод_в_Э_факт : null, | ||
| + | p.Номер_договора, | ||
| + | p.Кол_во_Факт, | ||
| + | | ||
| + | }) | ||
| + | .ToList() | ||
| + | .OrderBy(o => o.Производство_передел) | ||
| + | .ThenByDescending(o => o.Группа_оборудования) | ||
| + | .ThenBy(o => o.Код_МПОФ); | ||
| + | |||
| + | return report22; | ||
| + | </ | ||
| + | |||
| + | ===== Объединение трудозатрат по ресурсам, | ||
| + | <code csharp> | ||
| + | var Today = DateTime.Today; | ||
| + | var ThisMonth = new DateTime (Today.Year, | ||
| + | //var EndMonth = ThisMonth.AddYears(2).AddMonths(-1); | ||
| + | var IDprj = parameters.GetValueOrDefault< | ||
| + | var Person = dataContext.Persons.Select(a => new {a.Id, a.LastName}).ToList(); | ||
| + | |||
| + | var Costs = dataContext.ProjectCosts | ||
| + | .Where( p => p.Project.Name != null && p.Value != 0 && p.Project.GetParentHierarchy< | ||
| + | .Select( p => new { | ||
| + | Договор = p.Project.GetParentHierarchy< | ||
| + | Ресурс = p.Person.LastName, | ||
| + | ID_Ресурса = p.Person.Id, | ||
| + | Трудозатраты = p.Value, | ||
| + | }).ToList().GroupBy(u=> | ||
| + | Договор = key.Договор, | ||
| + | Ресурс = key.Ресурс, | ||
| + | ID_Ресурса = group.FirstOrDefault().ID_Ресурса.ToString(), | ||
| + | Трудозатраты = Math.Round(group.Sum(a => a.Трудозатраты))}).OrderBy(x => x.Договор).ToList(); | ||
| + | |||
| + | var FactCost = dataContext.Uchet_vremeni_977ff0_List | ||
| + | .Where (p => p.Project.Name != null && p.Summa_06ff93 != null && p.Project.GetParentHierarchy< | ||
| + | .Select(p => new{ | ||
| + | Договор = p.Project.GetParentHierarchy< | ||
| + | ID_Ресурса = p.Resurs_caaaaa, | ||
| + | Факт = p.Summa_06ff93, | ||
| + | }) | ||
| + | .ToList() | ||
| + | .Select(p => new { | ||
| + | p.Договор, | ||
| + | Ресурс = Person.Where(a => a.Id.ToString() == p.ID_Ресурса).FirstOrDefault().LastName, | ||
| + | p.ID_Ресурса, | ||
| + | p.Факт | ||
| + | }) | ||
| + | .ToList() | ||
| + | .GroupBy(u=> | ||
| + | Договор = key.Договор, | ||
| + | Ресурс = group.FirstOrDefault().Ресурс, | ||
| + | ID_Ресурса = key.ID_Ресурса.ToString(), | ||
| + | Факт = Math.Round((double)group.Sum(a => a.Факт))}).OrderBy(x => x.Договор).ToList(); | ||
| + | |||
| + | var CorrCost = dataContext.Korrektirovka_videlennih_chasov_421cbf_List | ||
| + | .Where (p => p.Project.Name != null && p.Summa_06ff93 != null && p.Project.GetParentHierarchy< | ||
| + | .Select(p => new{ | ||
| + | Договор = p.Project.GetParentHierarchy< | ||
| + | ID_Ресурса = p.Resurs_caaaaa, | ||
| + | Корректировка = p.Summa_06ff93, | ||
| + | Дата = p.Date | ||
| + | }) | ||
| + | .ToList() | ||
| + | .Select(p => new { | ||
| + | p.Договор, | ||
| + | Ресурс = Person.Where(a => a.Id.ToString() == p.ID_Ресурса).FirstOrDefault().LastName, | ||
| + | p.ID_Ресурса, | ||
| + | p.Корректировка, | ||
| + | Месяц_Корректировки = new DateTime (p.Дата.Value.Year, | ||
| + | }) | ||
| + | .ToList() | ||
| + | .GroupBy(u=> | ||
| + | Договор = key.Договор, | ||
| + | Ресурс = group.FirstOrDefault().Ресурс, | ||
| + | ID_Ресурса = key.ID_Ресурса.ToString(), | ||
| + | Корректировка = Math.Round((double)group.Sum(a => a.Корректировка)), | ||
| + | }).OrderBy(x => x.Договор).ToList(); | ||
| + | |||
| + | var JoinCost1 = FactCost.GroupJoin(Costs, | ||
| + | Договор = x.Договор, | ||
| + | Ресурс = x.Ресурс, | ||
| + | ID_Ресурса = x.ID_Ресурса, | ||
| + | Трудозатраты = u.Sum(a => | ||
| + | Факт = x.Факт | ||
| + | }).ToList(); | ||
| + | var JoinCost2 = Costs.GroupJoin(FactCost, | ||
| + | Договор = x.Договор, | ||
| + | Ресурс = x.Ресурс, | ||
| + | ID_Ресурса = x.ID_Ресурса, | ||
| + | Трудозатраты = x.Трудозатраты, | ||
| + | Факт = u.Sum(a=> | ||
| + | }).ToList(); | ||
| + | |||
| + | var UnionCost1 = JoinCost1.Union(JoinCost2).ToList(); | ||
| + | |||
| + | var JoinCost3 = UnionCost1.GroupJoin(CorrCost, | ||
| + | Договор = x.Договор, | ||
| + | Ресурс = x.Ресурс, | ||
| + | ID_Ресурса = x.ID_Ресурса, | ||
| + | Трудозатраты = x.Трудозатраты, | ||
| + | Факт = x.Факт, | ||
| + | Корректировка = u.Sum(a=> | ||
| + | }).ToList(); | ||
| + | var JoinCost4 = CorrCost.GroupJoin(UnionCost1, | ||
| + | Договор = x.Договор, | ||
| + | Ресурс = x.Ресурс, | ||
| + | ID_Ресурса = x.ID_Ресурса, | ||
| + | Трудозатраты = u.Sum(a => | ||
| + | Факт = u.Sum(a => a.Факт), | ||
| + | Корректировка = x.Корректировка, | ||
| + | }).ToList(); | ||
| + | |||
| + | var UnionCost2 = JoinCost3.Union(JoinCost4).ToList(); | ||
| + | |||
| + | var CostSum = UnionCost2 | ||
| + | |||
| + | .Select( p => new { | ||
| + | Договор = p.Договор, | ||
| + | Ресурс = "", | ||
| + | ID_Ресурса = "", | ||
| + | Трудозатраты = p.Трудозатраты, | ||
| + | Факт = p.Факт, | ||
| + | Корректировка = p.Корректировка, | ||
| + | }).ToList().GroupBy(u=> | ||
| + | Договор = key.Договор, | ||
| + | Ресурс = key.Договор, | ||
| + | ID_Ресурса = "", | ||
| + | Трудозатраты = Math.Round(group.Sum(a => a.Трудозатраты)), | ||
| + | Факт = Math.Round(group.Sum(a => a.Факт)), | ||
| + | }).OrderBy(x => x.Договор).ToList(); | ||
| + | |||
| + | var Result = UnionCost2.Concat(CostSum).OrderBy(x => x.Ресурс).OrderBy(x => x.Договор).ToList(); | ||
| + | |||
| + | return Result; | ||
| + | </ | ||
| + | |||
| + | ===== Поиск задач в проекте с максимальным отклонением ===== | ||
| + | <code csharp> | ||
| + | var сегодня = DateTime.Now; | ||
| + | |||
| + | var zadacha = dataContext.Zadacha_2b33fa_List | ||
| + | .Where(p => p.TimeReserve == 0 && p.Status == ProjectStatus.InWork) | ||
| + | .Where(p => p.GetParentHierarchy< | ||
| + | .Select(p => new { | ||
| + | Проект_ID = | ||
| + | Проект_name = p.GetParentHierarchy< | ||
| + | Задача_КП = p.Name, | ||
| + | Задача_КП_ID = p.Id, | ||
| + | УДО = p.BaselinePlanEndDate, | ||
| + | ПДО = p.SystemEndDate, | ||
| + | ФДО = p.ActualEndDate, | ||
| + | p.CalendarId, | ||
| + | .ToList(); | ||
| + | var allzadacha = zadacha | ||
| + | .Select(r => new { | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | r.УДО, | ||
| + | r.ПДО, | ||
| + | r.ФДО, | ||
| + | r.CalendarId, | ||
| + | Отклонение_Задач = r.УДО != null ? Math.Round(workCalendars.GetWorkCalendar(r.CalendarId).GetWorktimeDays(r.УДО.Value.Date, | ||
| + | //return allzadacha; | ||
| + | |||
| + | var id = parameters.GetValueOrDefault< | ||
| + | var idproject = id; | ||
| + | var Katalog = parameters.GetValueOrDefault< | ||
| + | var projects = dataContext.Projects | ||
| + | .Where(p => p is IT__proekt_ff08df || p is Proekt_a3e2fb || p is Proekt_stroiteljstva_OKS_f001b5) | ||
| + | .Where(d => (Guid? | ||
| + | .Select(p => new { | ||
| + | p.Id, | ||
| + | p.Name, | ||
| + | |||
| + | УДН = p.BaselinePlanStartDate, | ||
| + | УДО = p.BaselinePlanEndDate, | ||
| + | ПДН = p.SystemStartDate, | ||
| + | ПДО = p.SystemEndDate, | ||
| + | ФДН = p.ActualStartDate, | ||
| + | ФДО = p.ActualEndDate, | ||
| + | p.CalendarId, | ||
| + | // Длительность = DbFunctions.DiffDays(p.SystemStartDate, | ||
| + | ПДО_Задача_на_КП = p.GetChildrenHierarchy< | ||
| + | УДО_Задача_на_КП = p.GetChildrenHierarchy< | ||
| + | |||
| + | Задача_КП = p.GetChildrenHierarchy< | ||
| + | Задача_КП_ID = (Guid? | ||
| + | Процент_вып_проекта = p.PercentComplete, | ||
| + | }) | ||
| + | |||
| + | .ToList() | ||
| + | .Select(r => new{ | ||
| + | | ||
| + | r.Id, | ||
| + | r.Name, | ||
| + | | ||
| + | r.УДН, | ||
| + | r.УДО, | ||
| + | r.ПДН, | ||
| + | r.ПДО, | ||
| + | r.ФДН, | ||
| + | r.ФДО, | ||
| + | r.CalendarId, | ||
| + | // | ||
| + | |||
| + | r.Задача_КП_ID, | ||
| + | r.Задача_КП, | ||
| + | r.ПДО_Задача_на_КП, | ||
| + | r.УДО_Задача_на_КП, | ||
| + | Отклонение_Задача_на_КП = r.Задача_КП_ID != null && r.УДО_Задача_на_КП != null ? Math.Round(workCalendars.GetWorkCalendar(r.CalendarId).GetWorktimeDays(r.УДО_Задача_на_КП.Value.Date, | ||
| + | r.Процент_вып_проекта, | ||
| + | |||
| + | Отклонение_Список_Задач = allzadacha.Where(d => d.Проект_ID == r.Id ).Select (h => h.Задача_КП) , | ||
| + | Отклонение_Задача_на_КП2 = allzadacha.Where(d => d.Проект_ID == r.Id ).Any() ? allzadacha.Where(d => d.Проект_ID == r.Id).OrderByDescending(k => k.Отклонение_Задач).FirstOrDefault().Отклонение_Задач : 0, | ||
| + | Отклонение_Задача_на_КП_max = allzadacha.Where(d => d.Проект_ID == r.Id ).Any() ? allzadacha.Where(d => d.Проект_ID == r.Id ).Max(g => g.Отклонение_Задач) : 0, | ||
| + | }) | ||
| + | .ToList(); | ||
| + | return projects; | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Последняя по времени запись в протоколе ===== | ||
| + | <code csharp> | ||
| + | // Пример linq-запроса на событие последнего изменения объекта: | ||
| + | var projectId = parameters.GetValueOrDefault< | ||
| + | var lastEvent = dataContext.Events // получаем события | ||
| + | .Where(p => p.ObjectId == projectId) // фильтруем по id объекта | ||
| + | .OrderByDescending(p => p.Time) // сортировка по полю Time | ||
| + | .Select(p => new | ||
| + | { | ||
| + | Время = p.Time, | ||
| + | UID_пользователя = p.PersonId, | ||
| + | Текст = p.MessageHtml, | ||
| + | ИД_проекта = p.ObjectId, | ||
| + | Данные_события = p.MessageData, | ||
| + | Тип_события = p.Type, | ||
| + | }) | ||
| + | .Take(1) // берем только одну запись | ||
| + | .ToList(); // преобразуем в список | ||
| + | |||
| + | return lastEvent; // Возвращаем список, | ||
| </ | </ | ||