Доделал
This commit is contained in:
parent
0046fdf9b7
commit
911e9f8393
@ -17,15 +17,16 @@ public class DrugMedicalHistory // Тоже самое что FeedFeedRepleshme
|
|||||||
|
|
||||||
public string Description { get; private set; } = string.Empty;
|
public string Description { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
public int MedicalHistoryId { get; private set; }
|
||||||
|
|
||||||
|
public static DrugMedicalHistory CreateEntity(int id, int drugId, string description, int medicalHistoryId)
|
||||||
public static DrugMedicalHistory CreateEntity(int id, int drugId, string description)
|
|
||||||
{
|
{
|
||||||
return new DrugMedicalHistory
|
return new DrugMedicalHistory
|
||||||
{
|
{
|
||||||
Id = id,
|
Id = id,
|
||||||
DrugId = drugId,
|
DrugId = drugId,
|
||||||
Description = description ?? string.Empty
|
Description = description ?? string.Empty,
|
||||||
|
MedicalHistoryId = medicalHistoryId
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,13 +28,14 @@ public class MedicalHistory // сущность пополнения, напо
|
|||||||
public DateTime VisitDate { get; private set; }
|
public DateTime VisitDate { get; private set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public string Drug => DrugMedicalHistory != null ?
|
|
||||||
string.Join(", ", DrugMedicalHistory.Select(x => $"{x.Id} {x.Description}")) :
|
|
||||||
string.Empty;
|
|
||||||
|
|
||||||
[Browsable(false)]
|
[Browsable(false)]
|
||||||
public IEnumerable<DrugMedicalHistory> DrugMedicalHistory { get; set; } = [];
|
public IEnumerable<DrugMedicalHistory> DrugMedicalHistory { get; set; } = [];
|
||||||
|
|
||||||
|
|
||||||
|
[DisplayName("Назначенные лекарства")]
|
||||||
|
public string DrugsSummary => string.Join(", ", DrugMedicalHistory
|
||||||
|
.Select(d => $" {d.DrugId}, {d.Description}"));
|
||||||
|
|
||||||
|
|
||||||
public static MedicalHistory CreateEntity(int id, int patientId, int doctorId,
|
public static MedicalHistory CreateEntity(int id, int patientId, int doctorId,
|
||||||
IEnumerable<DrugMedicalHistory> drugMedicalHistory)
|
IEnumerable<DrugMedicalHistory> drugMedicalHistory)
|
||||||
@ -61,7 +62,7 @@ public class MedicalHistory // сущность пополнения, напо
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
public void SetProductMaterial(IEnumerable<DrugMedicalHistory> drugMedicalHistory)
|
public void SetDrugMedHistory(IEnumerable<DrugMedicalHistory> drugMedicalHistory)
|
||||||
{
|
{
|
||||||
if (drugMedicalHistory != null && drugMedicalHistory.Any())
|
if (drugMedicalHistory != null && drugMedicalHistory.Any())
|
||||||
{
|
{
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
dateTimePickerStart = new DateTimePicker();
|
dateTimePickerStart = new DateTimePicker();
|
||||||
textBoxFilePath = new TextBox();
|
textBoxFilePath = new TextBox();
|
||||||
buttonSelectFilePath = new Button();
|
buttonSelectFilePath = new Button();
|
||||||
comboBoxDrug = new ComboBox();
|
comboBoxDoctor = new ComboBox();
|
||||||
dateTimePickerEnd = new DateTimePicker();
|
dateTimePickerEnd = new DateTimePicker();
|
||||||
labelFilePath = new Label();
|
labelFilePath = new Label();
|
||||||
labelDrug = new Label();
|
labelDrug = new Label();
|
||||||
@ -65,13 +65,13 @@
|
|||||||
buttonSelectFilePath.UseVisualStyleBackColor = true;
|
buttonSelectFilePath.UseVisualStyleBackColor = true;
|
||||||
buttonSelectFilePath.Click += buttonSelectFilePath_Click;
|
buttonSelectFilePath.Click += buttonSelectFilePath_Click;
|
||||||
//
|
//
|
||||||
// comboBoxDrug
|
// comboBoxDoctor
|
||||||
//
|
//
|
||||||
comboBoxDrug.FormattingEnabled = true;
|
comboBoxDoctor.FormattingEnabled = true;
|
||||||
comboBoxDrug.Location = new Point(140, 143);
|
comboBoxDoctor.Location = new Point(140, 143);
|
||||||
comboBoxDrug.Name = "comboBoxDrug";
|
comboBoxDoctor.Name = "comboBoxDoctor";
|
||||||
comboBoxDrug.Size = new Size(125, 28);
|
comboBoxDoctor.Size = new Size(125, 28);
|
||||||
comboBoxDrug.TabIndex = 3;
|
comboBoxDoctor.TabIndex = 3;
|
||||||
//
|
//
|
||||||
// dateTimePickerEnd
|
// dateTimePickerEnd
|
||||||
//
|
//
|
||||||
@ -137,7 +137,7 @@
|
|||||||
Controls.Add(labelDrug);
|
Controls.Add(labelDrug);
|
||||||
Controls.Add(labelFilePath);
|
Controls.Add(labelFilePath);
|
||||||
Controls.Add(dateTimePickerEnd);
|
Controls.Add(dateTimePickerEnd);
|
||||||
Controls.Add(comboBoxDrug);
|
Controls.Add(comboBoxDoctor);
|
||||||
Controls.Add(buttonSelectFilePath);
|
Controls.Add(buttonSelectFilePath);
|
||||||
Controls.Add(textBoxFilePath);
|
Controls.Add(textBoxFilePath);
|
||||||
Controls.Add(dateTimePickerStart);
|
Controls.Add(dateTimePickerStart);
|
||||||
@ -152,7 +152,7 @@
|
|||||||
private DateTimePicker dateTimePickerStart;
|
private DateTimePicker dateTimePickerStart;
|
||||||
private TextBox textBoxFilePath;
|
private TextBox textBoxFilePath;
|
||||||
private Button buttonSelectFilePath;
|
private Button buttonSelectFilePath;
|
||||||
private ComboBox comboBoxDrug;
|
private ComboBox comboBoxDoctor;
|
||||||
private DateTimePicker dateTimePickerEnd;
|
private DateTimePicker dateTimePickerEnd;
|
||||||
private Label labelFilePath;
|
private Label labelFilePath;
|
||||||
private Label labelDrug;
|
private Label labelDrug;
|
||||||
|
@ -17,15 +17,15 @@ namespace RegistrationPatientsPolyclinic.Forms
|
|||||||
{
|
{
|
||||||
private readonly IUnityContainer _container;
|
private readonly IUnityContainer _container;
|
||||||
|
|
||||||
public FormDrugReport(IUnityContainer container, IDrugRepository drugRepository)
|
public FormDrugReport(IUnityContainer container, IDrugRepository drugRepository, IDoctorRepository doctorRepository)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
_container = container ??
|
_container = container ??
|
||||||
throw new ArgumentNullException(nameof(container));
|
throw new ArgumentNullException(nameof(container));
|
||||||
|
|
||||||
comboBoxDrug.DataSource = drugRepository.ReadDrug();
|
comboBoxDoctor.DataSource = doctorRepository.ReadDoctors();
|
||||||
comboBoxDrug.DisplayMember = "Name";
|
comboBoxDoctor.DisplayMember = "FullName";
|
||||||
comboBoxDrug.ValueMember = "Id";
|
comboBoxDoctor.ValueMember = "Id";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,16 +50,21 @@ namespace RegistrationPatientsPolyclinic.Forms
|
|||||||
{
|
{
|
||||||
throw new Exception("Отсутствует имя файла для отчета");
|
throw new Exception("Отсутствует имя файла для отчета");
|
||||||
}
|
}
|
||||||
if (comboBoxDrug.SelectedIndex < 0)
|
if (comboBoxDoctor.SelectedIndex < 0)
|
||||||
{
|
{
|
||||||
throw new Exception("Не выбран корм");
|
throw new Exception("Не выбран врач");
|
||||||
}
|
}
|
||||||
if (dateTimePickerEnd.Value <= dateTimePickerStart.Value)
|
if (dateTimePickerEnd.Value <= dateTimePickerStart.Value)
|
||||||
{
|
{
|
||||||
throw new Exception("Дата начала должна быть раньше даты окончания");
|
throw new Exception("Дата начала должна быть раньше даты окончания");
|
||||||
}
|
}
|
||||||
if (_container.Resolve<TableReport>().CreateTable(textBoxFilePath.Text, (int)comboBoxDrug.SelectedValue!,
|
|
||||||
dateTimePickerStart.Value, dateTimePickerEnd.Value))
|
// Приведение дат к началу и концу месяца
|
||||||
|
var startDate = new DateTime(dateTimePickerStart.Value.Year, dateTimePickerStart.Value.Month, 1);
|
||||||
|
var endDate = new DateTime(dateTimePickerEnd.Value.Year, dateTimePickerEnd.Value.Month, 1).AddMonths(1).AddDays(-1);
|
||||||
|
|
||||||
|
if (_container.Resolve<TableReport>().CreateTable(textBoxFilePath.Text, (int)comboBoxDoctor.SelectedValue!,
|
||||||
|
startDate, endDate))
|
||||||
{
|
{
|
||||||
MessageBox.Show("Документ сформирован", "Формирование документа", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
MessageBox.Show("Документ сформирован", "Формирование документа", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
}
|
}
|
||||||
|
@ -91,10 +91,10 @@ _medicalHistoryRepository.ReadMedicalHistory();
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
list.Add(DrugMedicalHistory.CreateEntity(0, Convert.ToInt32(row.Cells["ColumnDrug"].Value), row.Cells["ColumnDescription"].Value?.ToString()));
|
list.Add(DrugMedicalHistory.CreateEntity(0, Convert.ToInt32(row.Cells["ColumnDrug"].Value), row.Cells["ColumnDescription"].Value?.ToString(), 0));
|
||||||
}
|
}
|
||||||
return list.GroupBy(x => x.DrugId, x => x.Description, (id, description) =>
|
return list.GroupBy(x => x.DrugId, x => x.Description, (id, description) =>
|
||||||
DrugMedicalHistory.CreateEntity(0, id, string.Join(", ", description))).ToList();
|
DrugMedicalHistory.CreateEntity(0, id, string.Join(", ", description), 0)).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using RegistrationPatientsPolyclinic.Repositories;
|
using RegistrationPatientsPolyclinic.Repositories;
|
||||||
|
using RegistrationPatientsPolyclinic.Repositories.Implementations;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -14,10 +15,12 @@ internal class ChartReport
|
|||||||
private readonly IMedicalHistoryRepository _medicalHistoryRepository;
|
private readonly IMedicalHistoryRepository _medicalHistoryRepository;
|
||||||
private readonly ILogger<ChartReport> _logger;
|
private readonly ILogger<ChartReport> _logger;
|
||||||
|
|
||||||
public ChartReport(IMedicalHistoryRepository medicalHistoryRepository, ILogger<ChartReport> logger)
|
public ChartReport(IMedicalHistoryRepository medicalHistoryRepository, IDoctorPaymentsRepository doctorPaymentsRepository, ILogger<ChartReport> logger)
|
||||||
{
|
{
|
||||||
_medicalHistoryRepository = medicalHistoryRepository ??
|
_medicalHistoryRepository = medicalHistoryRepository ??
|
||||||
throw new ArgumentNullException(nameof(medicalHistoryRepository));
|
throw new ArgumentNullException(nameof(medicalHistoryRepository));
|
||||||
|
_doctorPaymentsRepository = doctorPaymentsRepository ??
|
||||||
|
throw new ArgumentNullException(nameof(doctorPaymentsRepository));
|
||||||
_logger = logger ??
|
_logger = logger ??
|
||||||
throw new ArgumentNullException(nameof(logger));
|
throw new ArgumentNullException(nameof(logger));
|
||||||
}
|
}
|
||||||
@ -27,8 +30,8 @@ internal class ChartReport
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
new PdfBuilder(filePath)
|
new PdfBuilder(filePath)
|
||||||
.AddHeader("Пополенение лекарства")
|
.AddHeader($"Выписанные лекарства на {dateTime:dd.MM.yyyy}")
|
||||||
.AddPieChart("Виды лекарства", GetData(dateTime))
|
.AddPieChart("Соотношение выписанных лекарств по врачам", GetData(dateTime))
|
||||||
.Build();
|
.Build();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -41,12 +44,33 @@ internal class ChartReport
|
|||||||
private List<(string Caption, double Value)> GetData(DateTime dateTime)
|
private List<(string Caption, double Value)> GetData(DateTime dateTime)
|
||||||
{
|
{
|
||||||
// Получаем все медицинские истории за указанную дату
|
// Получаем все медицинские истории за указанную дату
|
||||||
var medicalHistories = _medicalHistoryRepository.ReadMedicalHistory(dateTime, dateTime);
|
var medicalHistories = _medicalHistoryRepository.ReadMedicalHistory(null, null, null, null);
|
||||||
|
|
||||||
// Группируем по идентификатору пациента и считаем количество посещений
|
// Фильтруем истории, где есть назначения лекарств
|
||||||
return medicalHistories
|
var filteredHistories = medicalHistories
|
||||||
.GroupBy(mh => mh.PatientId)
|
.Where(mh => mh.VisitDate.Date == dateTime.Date)
|
||||||
.Select(g => (Caption: $"Patient {g.Key}", Value: (double)g.Count()))
|
.Where(mh => mh.DrugMedicalHistory != null && mh.DrugMedicalHistory.Any())
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
|
// Группируем по имени врача и считаем количество назначений лекарств
|
||||||
|
var groupedData = filteredHistories
|
||||||
|
.GroupBy(
|
||||||
|
mh => mh.DoctorName,
|
||||||
|
(doctorName, group) => new
|
||||||
|
{
|
||||||
|
DoctorName = doctorName,
|
||||||
|
TotalDrugAssignments = group
|
||||||
|
.SelectMany(mh => mh.DrugMedicalHistory)
|
||||||
|
.Count() // Считаем количество назначений лекарств
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
// Преобразуем данные в формат, подходящий для диаграммы
|
||||||
|
var result = groupedData
|
||||||
|
.Select(x => (Caption: x.DoctorName, Value: (double)x.TotalDrugAssignments))
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,11 +22,13 @@ internal class TableReport
|
|||||||
|
|
||||||
private readonly IDrugRepository _drugRepository;
|
private readonly IDrugRepository _drugRepository;
|
||||||
|
|
||||||
|
private readonly IDoctorRepository _doctorRepository;
|
||||||
|
|
||||||
private readonly ILogger<TableReport> _logger;
|
private readonly ILogger<TableReport> _logger;
|
||||||
|
|
||||||
internal static readonly string[] item = ["Доктор", "Описание", "Количество пациентов"];
|
internal static readonly string[] item = ["Id врача", "Количество пациентов", "Выплаты"];
|
||||||
|
|
||||||
public TableReport(IMedicalHistoryRepository medicalHistoryRepository, IDoctorPaymentsRepository doctorPaymentsRepository, IDrugRepository drugRepository, ILogger<TableReport> logger)
|
public TableReport(IMedicalHistoryRepository medicalHistoryRepository, IDoctorPaymentsRepository doctorPaymentsRepository, IDoctorRepository doctorRepository, IDrugRepository drugRepository, ILogger<TableReport> logger)
|
||||||
{
|
{
|
||||||
_medicalHistoryRepository = medicalHistoryRepository ??
|
_medicalHistoryRepository = medicalHistoryRepository ??
|
||||||
throw new ArgumentNullException(nameof(medicalHistoryRepository)); ;
|
throw new ArgumentNullException(nameof(medicalHistoryRepository)); ;
|
||||||
@ -34,27 +36,35 @@ internal class TableReport
|
|||||||
throw new ArgumentNullException(nameof(doctorPaymentsRepository));
|
throw new ArgumentNullException(nameof(doctorPaymentsRepository));
|
||||||
_drugRepository = drugRepository ??
|
_drugRepository = drugRepository ??
|
||||||
throw new ArgumentNullException(nameof(drugRepository));
|
throw new ArgumentNullException(nameof(drugRepository));
|
||||||
|
_doctorRepository = doctorRepository ??
|
||||||
|
throw new ArgumentNullException(nameof(IMedicalHistoryRepository));
|
||||||
_logger = logger ??
|
_logger = logger ??
|
||||||
throw new ArgumentNullException(nameof(logger));
|
throw new ArgumentNullException(nameof(logger));
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CreateTable(string filePath, int drugId, DateTime startDate, DateTime endDate)
|
public bool CreateTable(string filePath, int doctorId, DateTime startDate, DateTime endDate)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var data = GetData(drugId, startDate, endDate);
|
var startOfMonth = new DateTime(startDate.Year, startDate.Month, 1);
|
||||||
var columnsWidths = new int[] {10, 15, 15 };
|
var endOfMonth = new DateTime(endDate.Year, endDate.Month, 1).AddMonths(1).AddDays(-1);
|
||||||
|
|
||||||
if (columnsWidths.Length != data.First().Length)
|
// Получаем данные для таблицы и имя врача
|
||||||
{
|
var (tableData, doctorFullName) = GetData(doctorId, startOfMonth, endOfMonth);
|
||||||
throw new InvalidOperationException("Количество ширин столбцов не соответствует количеству данных.");
|
|
||||||
}
|
|
||||||
|
|
||||||
new ExcelBuilder(filePath)
|
var excelBuilder = new ExcelBuilder(filePath)
|
||||||
.AddHeader("Сводка по движению лекарство", 0, 3)
|
.AddHeader("Сводка по оплате", 0, 3)
|
||||||
.AddParagraph("за период", 0)
|
.AddParagraph($"За период с {startOfMonth:MMMM yyyy} по {endOfMonth:MMMM yyyy}", 0)
|
||||||
.AddTable(columnsWidths, data)
|
.AddParagraph($"Врач: {doctorFullName}", 0)
|
||||||
.Build();
|
.AddTable(new[] { 25, 25, 25 }, tableData);
|
||||||
|
|
||||||
|
excelBuilder.AddParagraph("", 0);
|
||||||
|
|
||||||
|
excelBuilder
|
||||||
|
.AddHeader("Назначенные лекарства", 0, 2)
|
||||||
|
.AddTable(new[] { 25, 25 }, GetDrugData(doctorId, startOfMonth, endOfMonth));
|
||||||
|
|
||||||
|
excelBuilder.Build();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -126,6 +136,8 @@ internal class TableReport
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// ВНИЗУ САМЫЙ ПОСЛЕДНИЙ!!!
|
||||||
|
/*
|
||||||
private List<string[]> GetData(int drugId, DateTime startDate, DateTime endDate)
|
private List<string[]> GetData(int drugId, DateTime startDate, DateTime endDate)
|
||||||
{
|
{
|
||||||
var data = _medicalHistoryRepository
|
var data = _medicalHistoryRepository
|
||||||
@ -153,4 +165,82 @@ internal class TableReport
|
|||||||
new List<string[]>() { new string[] { "Всего", string.Empty, data.Sum(x => x.CountOut ?? 0).ToString() } })
|
new List<string[]>() { new string[] { "Всего", string.Empty, data.Sum(x => x.CountOut ?? 0).ToString() } })
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
private (List<string[]>, string) GetData(int doctorId, DateTime startOfMonth, DateTime endOfMonth)
|
||||||
|
{
|
||||||
|
var data = _doctorPaymentsRepository
|
||||||
|
.ReadDoctorPayments()
|
||||||
|
.Where(x =>
|
||||||
|
{
|
||||||
|
var IdDoctorss = x.IdDoctor;
|
||||||
|
return IdDoctorss == doctorId;
|
||||||
|
})
|
||||||
|
.Select(x => new
|
||||||
|
{
|
||||||
|
DoctorName = x.DoctorName, // Предполагается, что есть поле DoctorName
|
||||||
|
CountOfPatients = x.Count_Patient,
|
||||||
|
Payments = x.Payment
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var doctorName = data.FirstOrDefault()?.DoctorName ?? "Неизвестный врач";
|
||||||
|
|
||||||
|
var result = new List<string[]>()
|
||||||
|
{
|
||||||
|
new[] { "Имя Врача", "Количество пациентов", "Выплаты" }
|
||||||
|
}
|
||||||
|
.Union(
|
||||||
|
data.Select(x => new string[]
|
||||||
|
{
|
||||||
|
x.DoctorName,
|
||||||
|
x.CountOfPatients.ToString(),
|
||||||
|
x.Payments.ToString()
|
||||||
|
})
|
||||||
|
)
|
||||||
|
.Union(
|
||||||
|
new[]
|
||||||
|
{
|
||||||
|
new string[]
|
||||||
|
{
|
||||||
|
"Всего",
|
||||||
|
data.Sum(x => x.CountOfPatients).ToString(),
|
||||||
|
data.Sum(x => x.Payments).ToString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
return (result, doctorName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<string[]> GetDrugData(int doctorId, DateTime startOfMonth, DateTime endOfMonth)
|
||||||
|
{
|
||||||
|
var medicalHistories = _medicalHistoryRepository
|
||||||
|
.ReadMedicalHistory(startOfMonth, endOfMonth, doctorId, null) // Исправлено
|
||||||
|
.Where(mh => mh.DrugMedicalHistory != null && mh.DrugMedicalHistory.Any())
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
_logger.LogDebug("Полученные медицинские истории с лекарствами: {data}", JsonConvert.SerializeObject(medicalHistories));
|
||||||
|
|
||||||
|
var drugData = medicalHistories
|
||||||
|
.SelectMany(mh => mh.DrugMedicalHistory.Select(drug => new
|
||||||
|
{
|
||||||
|
Date = mh.VisitDate,
|
||||||
|
Count = drug.Description
|
||||||
|
}))
|
||||||
|
.OrderBy(x => x.Date)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var result = new List<string[]> { new[] { "Дата", "Назначенные лекарства" } };
|
||||||
|
|
||||||
|
result.AddRange(drugData.Select(item => new string[]
|
||||||
|
{
|
||||||
|
item.Date.ToString("dd MMMM yyyy"),
|
||||||
|
item.Count.ToString()
|
||||||
|
}));
|
||||||
|
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -150,26 +150,28 @@ WHERE Id=@id";
|
|||||||
var querySelect = $@"SELECT mh.*,
|
var querySelect = $@"SELECT mh.*,
|
||||||
CONCAT(p.Last_Name, ' ', p.First_Name) as PatientName,
|
CONCAT(p.Last_Name, ' ', p.First_Name) as PatientName,
|
||||||
CONCAT(d.Last_Name, ' ', d.First_Name) as DoctorName,
|
CONCAT(d.Last_Name, ' ', d.First_Name) as DoctorName,
|
||||||
dmh.Id AS Id, dmh.DrugId AS drugId, dmh.Description AS Description
|
dmh.Id AS Id, dmh.DrugId AS drugId,dmh.MedicalHistoryId AS MedicalHistoryId, dmh.Description
|
||||||
FROM MedicalHistory mh
|
FROM MedicalHistory mh
|
||||||
LEFT JOIN DrugMedicalHistory dmh ON dmh.MedicalHistoryId = mh.Id
|
LEFT JOIN DrugMedicalHistory dmh ON dmh.MedicalHistoryId = mh.Id
|
||||||
LEFT JOIN Patient p ON p.Id = mh.PatientId
|
LEFT JOIN Patient p ON p.Id = mh.PatientId
|
||||||
LEFT JOIN doctor d ON d.Id = mh.DoctorId
|
LEFT JOIN doctor d ON d.Id = mh.DoctorId
|
||||||
{builder.Build()}";
|
{builder.Build()}";
|
||||||
|
_logger.LogDebug("SQL запрос: {query}", querySelect);
|
||||||
|
_logger.LogDebug("Параметры: dateForm = {dateForm}, dateTo = {dateTo}, doctorId = {doctorId}, patientId = {patientId}",
|
||||||
|
dateForm, dateTo, DoctorId, PatientId);
|
||||||
var historyDict = new Dictionary<int, List<DrugMedicalHistory>>();
|
var historyDict = new Dictionary<int, List<DrugMedicalHistory>>();
|
||||||
var medicalHistory =
|
var medicalHistory =
|
||||||
connection.Query<MedicalHistory, DrugMedicalHistory, MedicalHistory>(querySelect,
|
connection.Query<MedicalHistory, DrugMedicalHistory, MedicalHistory>(querySelect,
|
||||||
(history, drugMedicalHistory) =>
|
(history, drug) =>
|
||||||
{
|
{
|
||||||
if (!historyDict.TryGetValue(history.Id, out var drugs))
|
if (!historyDict.TryGetValue(history.Id, out var drugs))
|
||||||
{
|
{
|
||||||
drugs = new List<DrugMedicalHistory>();
|
drugs = new List<DrugMedicalHistory>();
|
||||||
historyDict.Add(history.Id, drugs);
|
historyDict.Add(history.Id, drugs);
|
||||||
}
|
}
|
||||||
if (drugMedicalHistory != null && drugMedicalHistory.Id > 0)
|
if (drug != null && drug.Id > 0)
|
||||||
{
|
{
|
||||||
drugs.Add(DrugMedicalHistory.CreateEntity(drugMedicalHistory.Id, drugMedicalHistory.DrugId, drugMedicalHistory.Description));
|
drugs.Add(DrugMedicalHistory.CreateEntity(drug.Id, drug.DrugId, drug.Description, drug.MedicalHistoryId));
|
||||||
}
|
}
|
||||||
return history;
|
return history;
|
||||||
}, splitOn: "Id", param: new { dateForm, dateTo, DoctorId, PatientId });
|
}, splitOn: "Id", param: new { dateForm, dateTo, DoctorId, PatientId });
|
||||||
@ -179,7 +181,7 @@ WHERE Id=@id";
|
|||||||
return historyDict.Select(x =>
|
return historyDict.Select(x =>
|
||||||
{
|
{
|
||||||
var mh = medicalHistory.First(y => y.Id == x.Key);
|
var mh = medicalHistory.First(y => y.Id == x.Key);
|
||||||
mh.SetProductMaterial(x.Value);
|
mh.SetDrugMedHistory(x.Value);
|
||||||
return mh;
|
return mh;
|
||||||
}).ToArray();
|
}).ToArray();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user