Сделал CLientTour вывод, все работает. На -13 минуте видео
This commit is contained in:
parent
e697397462
commit
c2b44d351c
@ -11,6 +11,8 @@ public class ClientTour
|
|||||||
{
|
{
|
||||||
public int Id { get; private set; }
|
public int Id { get; private set; }
|
||||||
public int ClientId { get; private set; }
|
public int ClientId { get; private set; }
|
||||||
|
|
||||||
|
public string CLientName { get; private set; } = String.Empty;
|
||||||
public int TourId { get; private set; }
|
public int TourId { get; private set; }
|
||||||
|
|
||||||
public int Cost { get; private set; }
|
public int Cost { get; private set; }
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using ProjectTourAgency.Enities.Enums;
|
using ProjectTourAgency.Enities.Enums;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -9,11 +10,34 @@ namespace ProjectTourAgency.Enities;
|
|||||||
|
|
||||||
public class Tour
|
public class Tour
|
||||||
{
|
{
|
||||||
|
|
||||||
|
[DisplayName("Id Тура")]
|
||||||
public int Id { get; private set; }
|
public int Id { get; private set; }
|
||||||
|
|
||||||
|
[Browsable(false)]
|
||||||
public int EmployeeId { get; private set; }
|
public int EmployeeId { get; private set; }
|
||||||
|
|
||||||
|
[Browsable(false)]
|
||||||
public int RouteId { get; private set; }
|
public int RouteId { get; private set; }
|
||||||
|
|
||||||
|
[DisplayName("Сотрудник")]
|
||||||
|
|
||||||
|
public string EmployeeName { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
[DisplayName("Маршрут")]
|
||||||
|
|
||||||
|
public string RouteName { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
[DisplayName("Дата начала тура")]
|
||||||
public DateTime DepartureDate { get; private set; }
|
public DateTime DepartureDate { get; private set; }
|
||||||
|
|
||||||
|
[Browsable(false)]
|
||||||
public IEnumerable<ClientTour> ClientTours { get; private set; } = [];
|
public IEnumerable<ClientTour> ClientTours { get; private set; } = [];
|
||||||
|
|
||||||
|
[DisplayName("Клиенты")]
|
||||||
|
public string Clients => ClientTours != null ?
|
||||||
|
string.Join(",", ClientTours.Select(x => $"{x.CLientName} {x.Cost}")) : string.Empty;
|
||||||
|
|
||||||
public static Tour CreateEntity(int id, int employeeId, int routeId,
|
public static Tour CreateEntity(int id, int employeeId, int routeId,
|
||||||
DateTime date,IEnumerable<ClientTour> clientTours)
|
DateTime date,IEnumerable<ClientTour> clientTours)
|
||||||
{
|
{
|
||||||
@ -38,4 +62,12 @@ public class Tour
|
|||||||
ClientTours = clientTours
|
ClientTours = clientTours
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetClientTours(IEnumerable<ClientTour> clientTours)
|
||||||
|
{
|
||||||
|
if(clientTours != null && clientTours.Any())
|
||||||
|
{
|
||||||
|
ClientTours = clientTours;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,22 +76,53 @@ WHERE Id = @id";
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public IEnumerable<Tour> ReadTours()
|
public IEnumerable<Tour> ReadTours(DateTime? dateFrom = null, DateTime? dateTo = null, int? tourId = null, int? clientId = null)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Получение всех объектов");
|
_logger.LogInformation("Получение всех объектов");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
|
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
|
||||||
var querySelect = @"
|
var querySelect = @"
|
||||||
SELECT t.*, ct.TourId, ct.Cost, ct.ClientId FROM Tour t
|
SELECT
|
||||||
INNER JOIN ClientTour ct ON ct.TourId = t.Id";
|
t.*,
|
||||||
var tour = connection.Query<TempClientTour>(querySelect);
|
CONCAT(r.Departure,'-', r.Destination) AS RouteName,
|
||||||
_logger.LogDebug("Получение объектов {json}", JsonConvert.SerializeObject(tour));
|
e.FullName AS EmployeeName,
|
||||||
return tour.GroupBy(
|
ct.ClientId,
|
||||||
x => x.Id, y => y,
|
ct.Cost,
|
||||||
(key, value) => Tour.CreateEntity(value.First(),
|
c.FullName AS ClientName
|
||||||
value.Select(z => ClientTour.CreateEntity(0,z.ClientId, z.Id,z.Cost))
|
FROM
|
||||||
)).ToList();
|
Tour t
|
||||||
|
LEFT JOIN
|
||||||
|
Routes r ON r.Id = t.RouteId
|
||||||
|
LEFT JOIN
|
||||||
|
Employees e ON e.Id = t.EmployeeId -- соединяем с таблицей Employees
|
||||||
|
LEFT JOIN
|
||||||
|
ClientTour ct ON ct.TourId = t.Id -- соединяем с таблицей ClientTour
|
||||||
|
LEFT JOIN
|
||||||
|
Clients c ON c.Id = ct.ClientId;
|
||||||
|
";
|
||||||
|
|
||||||
|
var clientTourDict = new Dictionary<int, List<ClientTour>>();
|
||||||
|
|
||||||
|
var tours = connection.Query<Tour, ClientTour, Tour>(querySelect,
|
||||||
|
(clientTour, tours) =>
|
||||||
|
{
|
||||||
|
if (!clientTourDict.TryGetValue(clientTour.Id, out var ct))
|
||||||
|
{
|
||||||
|
ct = [];
|
||||||
|
clientTourDict.Add(clientTour.Id, ct);
|
||||||
|
}
|
||||||
|
ct.Add(tours);
|
||||||
|
return clientTour;
|
||||||
|
}, splitOn: "ClientId", param: new { dateFrom, dateTo, tourId, clientId });
|
||||||
|
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(tours));
|
||||||
|
|
||||||
|
return clientTourDict.Select(x =>
|
||||||
|
{
|
||||||
|
var t = tours.First(y => y.Id == x.Key);
|
||||||
|
t.SetClientTours(x.Value);
|
||||||
|
return t;
|
||||||
|
}).ToArray();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -9,7 +9,7 @@ namespace ProjectTourAgency.Repositories;
|
|||||||
|
|
||||||
public interface ITourRepository
|
public interface ITourRepository
|
||||||
{
|
{
|
||||||
IEnumerable<Tour> ReadTours();
|
IEnumerable<Tour> ReadTours(DateTime? dateFrom = null, DateTime? dateTo = null, int? tourId = null, int? clientId = null);
|
||||||
|
|
||||||
|
|
||||||
void CreateTour(Tour tour);
|
void CreateTour(Tour tour);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user