готовая 4
This commit is contained in:
parent
1e98e1a719
commit
03f05c7dc2
@ -1,10 +1,15 @@
|
|||||||
using ProjectPassengerTransfers.Entities.Enums;
|
using ProjectPassengerTransfers.Entities.Enums;
|
||||||
|
using System.ComponentModel;
|
||||||
namespace ProjectPassengerTransfers.Entities;
|
namespace ProjectPassengerTransfers.Entities;
|
||||||
|
|
||||||
public class Bus
|
public class Bus
|
||||||
{
|
{
|
||||||
public int Id { get; private set; }
|
public int Id { get; private set; }
|
||||||
|
|
||||||
|
[DisplayName("Модель")]
|
||||||
public BusModel BusModel { get; private set; }
|
public BusModel BusModel { get; private set; }
|
||||||
|
|
||||||
|
[DisplayName("Количество мест")]
|
||||||
public int SeatCount { get; private set; }
|
public int SeatCount { get; private set; }
|
||||||
public static Bus CreateEntity(int id, BusModel busModel, int
|
public static Bus CreateEntity(int id, BusModel busModel, int
|
||||||
seatCount)
|
seatCount)
|
||||||
|
@ -1,13 +1,23 @@
|
|||||||
|
|
||||||
using ProjectPassengerTransfers.Entities.Enums;
|
using ProjectPassengerTransfers.Entities.Enums;
|
||||||
|
using System.ComponentModel;
|
||||||
namespace ProjectPassengerTransfers.Entities;
|
namespace ProjectPassengerTransfers.Entities;
|
||||||
|
|
||||||
public class Passenger
|
public class Passenger
|
||||||
{
|
{
|
||||||
public int Id { get; private set; }
|
public int Id { get; private set; }
|
||||||
|
|
||||||
|
[DisplayName("Тип")]
|
||||||
public PassengerType PassengerType { get; private set; }
|
public PassengerType PassengerType { get; private set; }
|
||||||
|
|
||||||
|
[DisplayName("Имя")]
|
||||||
public string Name { get; private set; } = string.Empty;
|
public string Name { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
[DisplayName("Фамилия")]
|
||||||
public string Surname { get; private set; } = string.Empty;
|
public string Surname { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
public string FullName => $"{Surname} {Name}";
|
||||||
|
|
||||||
public static Passenger CreateEntity(int id, PassengerType passengerType, string name, string surname)
|
public static Passenger CreateEntity(int id, PassengerType passengerType, string name, string surname)
|
||||||
{
|
{
|
||||||
return new Passenger
|
return new Passenger
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
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,9 +10,17 @@ namespace ProjectPassengerTransfers.Entities;
|
|||||||
public class Route
|
public class Route
|
||||||
{
|
{
|
||||||
public int Id { get; private set; }
|
public int Id { get; private set; }
|
||||||
|
|
||||||
|
[DisplayName("Название")]
|
||||||
public string Name { get; private set; } = string.Empty;
|
public string Name { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
[DisplayName("Город отправки")]
|
||||||
public string DepartureCity { get; private set; } = string.Empty;
|
public string DepartureCity { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
[DisplayName("Город назначения")]
|
||||||
public string ArrivalCity { get; private set; } = string.Empty;
|
public string ArrivalCity { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
[DisplayName("Расстояние")]
|
||||||
public int Distance { get; private set; }
|
public int Distance { get; private set; }
|
||||||
public static Route CreateEntity(int id, string Name, string departureCity,
|
public static Route CreateEntity(int id, string Name, string departureCity,
|
||||||
string arrivalCity, int distance)
|
string arrivalCity, int distance)
|
||||||
|
@ -1,10 +1,23 @@
|
|||||||
namespace ProjectPassengerTransfers.Entities;
|
using System.ComponentModel;
|
||||||
|
|
||||||
|
namespace ProjectPassengerTransfers.Entities;
|
||||||
|
|
||||||
public class Ticket
|
public class Ticket
|
||||||
{
|
{
|
||||||
public int Id { get; private set; }
|
public int Id { get; private set; }
|
||||||
|
|
||||||
|
[DisplayName("Дата продажи")]
|
||||||
public DateTime SaleDate { get; private set; }
|
public DateTime SaleDate { get; private set; }
|
||||||
|
|
||||||
|
[DisplayName("Пассажир")]
|
||||||
public int Passenger_Id { get; private set; }
|
public int Passenger_Id { get; private set; }
|
||||||
|
|
||||||
|
[DisplayName("Билеты")]
|
||||||
|
public string Tickets => TripTickets != null ?
|
||||||
|
string.Join(", ", TripTickets.Select(x => $"{x.TripName}: {x.Count}шт")) :
|
||||||
|
string.Empty;
|
||||||
|
|
||||||
|
[Browsable(false)]
|
||||||
public IEnumerable<TripTicket> TripTickets { get; private set; } = [];
|
public IEnumerable<TripTicket> TripTickets { get; private set; } = [];
|
||||||
public static Ticket CreateOperation(int id, int passenger_Id, IEnumerable<TripTicket> tripTickets)
|
public static Ticket CreateOperation(int id, int passenger_Id, IEnumerable<TripTicket> tripTickets)
|
||||||
{
|
{
|
||||||
@ -16,14 +29,11 @@ public class Ticket
|
|||||||
TripTickets = tripTickets
|
TripTickets = tripTickets
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
public static Ticket CreateOperation(TempTripTickets tempTripTickets, IEnumerable<TripTicket> tripTickets)
|
public void SetTripTickets(IEnumerable<TripTicket> tripTickets)
|
||||||
{
|
{
|
||||||
return new Ticket
|
if (tripTickets != null && tripTickets.Any())
|
||||||
{
|
{
|
||||||
Id = tempTripTickets.Id,
|
TripTickets = tripTickets;
|
||||||
SaleDate = tempTripTickets.SaleDate,
|
}
|
||||||
Passenger_Id = tempTripTickets.Passenger_Id,
|
|
||||||
TripTickets = tripTickets
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
using System;
|
using ProjectPassengerTransfers.Entities.Enums;
|
||||||
|
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,9 +11,29 @@ namespace ProjectPassengerTransfers.Entities;
|
|||||||
public class Trip
|
public class Trip
|
||||||
{
|
{
|
||||||
public int Id { get; private set; }
|
public int Id { get; private set; }
|
||||||
public DateTime Departure { get; private set; }
|
|
||||||
|
[DisplayName("Дата отправки")]
|
||||||
|
public DateTime Departure { get; private set; }
|
||||||
|
|
||||||
|
[DisplayName("Дата прибытия")]
|
||||||
public DateTime Arrival { get; private set; }
|
public DateTime Arrival { get; private set; }
|
||||||
|
|
||||||
|
[Browsable(false)]
|
||||||
|
public int BusModel { get; private set; }
|
||||||
|
|
||||||
|
[Browsable(false)]
|
||||||
|
public string BusCount { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
[DisplayName("Маршрут")]
|
||||||
|
public string RouteName { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
[DisplayName("Автобус")]
|
||||||
|
public string BusName => $"{(BusModel)BusModel} {BusCount}";
|
||||||
|
|
||||||
|
[Browsable(false)]
|
||||||
public int Route_Id { get; private set; }
|
public int Route_Id { get; private set; }
|
||||||
|
|
||||||
|
[Browsable(false)]
|
||||||
public int Bus_Id { get; private set; }
|
public int Bus_Id { get; private set; }
|
||||||
|
|
||||||
public static Trip CreateOperation(int id, int route_Id, int bus_Id, DateTime departure, DateTime arrival)
|
public static Trip CreateOperation(int id, int route_Id, int bus_Id, DateTime departure, DateTime arrival)
|
||||||
|
@ -10,7 +10,7 @@ public class TripTicket
|
|||||||
{
|
{
|
||||||
public int Id { get; private set; }
|
public int Id { get; private set; }
|
||||||
public int Trip_Id { get; private set; }
|
public int Trip_Id { get; private set; }
|
||||||
|
public string TripName { get; private set; } = string.Empty;
|
||||||
public int Count { get; private set; }
|
public int Count { get; private set; }
|
||||||
public static TripTicket CreateElement(int id, int trip_Id, int count)
|
public static TripTicket CreateElement(int id, int trip_Id, int count)
|
||||||
{
|
{
|
||||||
|
@ -1,15 +1,7 @@
|
|||||||
using System;
|
using ProjectPassengerTransfers.Entities;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Data;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Linq;
|
|
||||||
using ProjectPassengerTransfers.Entities;
|
|
||||||
using ProjectPassengerTransfers.Entities.Enums;
|
using ProjectPassengerTransfers.Entities.Enums;
|
||||||
using ProjectPassengerTransfers.Repositories;
|
using ProjectPassengerTransfers.Repositories;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
|
|
||||||
namespace ProjectPassengerTransfers.Forms
|
namespace ProjectPassengerTransfers.Forms
|
||||||
{
|
{
|
||||||
|
@ -87,7 +87,11 @@ namespace ProjectPassengerTransfers.Forms
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadList() => dataGridView.DataSource = _busRepository.ReadBuses();
|
private void LoadList()
|
||||||
|
{
|
||||||
|
dataGridView.DataSource = _busRepository.ReadBuses();
|
||||||
|
dataGridView.Columns["Id"].Visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
private bool TryGetIdentifierFromSelectedRow(out int id)
|
private bool TryGetIdentifierFromSelectedRow(out int id)
|
||||||
{
|
{
|
||||||
|
@ -90,7 +90,11 @@ namespace ProjectPassengerTransfers.Forms
|
|||||||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void LoadList() => dataGridView.DataSource = _passengerRepository.ReadPassengers();
|
private void LoadList()
|
||||||
|
{
|
||||||
|
dataGridView.DataSource = _passengerRepository.ReadPassengers();
|
||||||
|
dataGridView.Columns["Id"].Visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
private bool TryGetIdentifierFromSelectedRow(out int id)
|
private bool TryGetIdentifierFromSelectedRow(out int id)
|
||||||
{
|
{
|
||||||
|
@ -80,7 +80,12 @@ namespace ProjectPassengerTransfers.Forms
|
|||||||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void LoadList() => dataGridView.DataSource = _routeRepository.ReadRoutes();
|
private void LoadList()
|
||||||
|
{
|
||||||
|
dataGridView.DataSource = _routeRepository.ReadRoutes();
|
||||||
|
dataGridView.Columns["Id"].Visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
private bool TryGetIdentifierFromSelectedRow(out int id)
|
private bool TryGetIdentifierFromSelectedRow(out int id)
|
||||||
{
|
{
|
||||||
id = 0;
|
id = 0;
|
||||||
|
@ -20,7 +20,7 @@ namespace ProjectPassengerTransfers.Forms
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
_ticketRepository = ticketRepository ?? throw new ArgumentNullException(nameof(ticketRepository));
|
_ticketRepository = ticketRepository ?? throw new ArgumentNullException(nameof(ticketRepository));
|
||||||
comboBoxPassenger.DataSource = passengerRepository.ReadPassengers();
|
comboBoxPassenger.DataSource = passengerRepository.ReadPassengers();
|
||||||
comboBoxPassenger.DisplayMember = "Name";
|
comboBoxPassenger.DisplayMember = "FullName";
|
||||||
comboBoxPassenger.ValueMember = "Id";
|
comboBoxPassenger.ValueMember = "Id";
|
||||||
ColumnTrip.DataSource = routeRepository.ReadRoutes();
|
ColumnTrip.DataSource = routeRepository.ReadRoutes();
|
||||||
ColumnTrip.DisplayMember = "Name";
|
ColumnTrip.DisplayMember = "Name";
|
||||||
|
@ -75,7 +75,12 @@ namespace ProjectPassengerTransfers.Forms
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadList() => dataGridView.DataSource = _ticketRepository.ReadTickets();
|
private void LoadList()
|
||||||
|
{
|
||||||
|
dataGridView.DataSource = _ticketRepository.ReadTickets();
|
||||||
|
dataGridView.Columns["Id"].Visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
private bool TryGetIdentifierFromSelectedRow(out int id)
|
private bool TryGetIdentifierFromSelectedRow(out int id)
|
||||||
{
|
{
|
||||||
id = 0;
|
id = 0;
|
||||||
|
@ -47,6 +47,10 @@ namespace ProjectPassengerTransfers.Forms
|
|||||||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void LoadList() => dataGridView.DataSource = _tripRepository.ReadTrips();
|
private void LoadList()
|
||||||
|
{
|
||||||
|
dataGridView.DataSource = _tripRepository.ReadTrips();
|
||||||
|
dataGridView.Columns["Id"].Visible = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,7 @@ namespace ProjectPassengerTransfers.Repositories;
|
|||||||
|
|
||||||
public interface ITicketRepository
|
public interface ITicketRepository
|
||||||
{
|
{
|
||||||
IEnumerable<Ticket> ReadTickets(DateTime? dateForm =
|
IEnumerable<Ticket> ReadTickets(DateTime? dateFrom = null, DateTime? dateTo = null);
|
||||||
null,int? trip_Id = null, int? passenger_Id = null);
|
|
||||||
void CreateTicket(Ticket ticket);
|
void CreateTicket(Ticket ticket);
|
||||||
void DeleteTicket(int id);
|
void DeleteTicket(int id);
|
||||||
|
|
||||||
|
@ -0,0 +1,30 @@
|
|||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ProjectPassengerTransfers.Repositories.Implementations;
|
||||||
|
|
||||||
|
internal class QueryBuilder
|
||||||
|
{
|
||||||
|
private readonly StringBuilder _builder;
|
||||||
|
public QueryBuilder()
|
||||||
|
{
|
||||||
|
_builder = new();
|
||||||
|
}
|
||||||
|
public QueryBuilder AddCondition(string condition)
|
||||||
|
{
|
||||||
|
if (_builder.Length > 0)
|
||||||
|
{
|
||||||
|
_builder.Append(" AND ");
|
||||||
|
}
|
||||||
|
_builder.Append(condition);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public string Build()
|
||||||
|
{
|
||||||
|
if (_builder.Length == 0)
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
return $"WHERE {_builder}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,6 +3,7 @@ using Microsoft.Extensions.Logging;
|
|||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Npgsql;
|
using Npgsql;
|
||||||
using ProjectPassengerTransfers.Entities;
|
using ProjectPassengerTransfers.Entities;
|
||||||
|
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||||
|
|
||||||
namespace ProjectPassengerTransfers.Repositories.Implementations;
|
namespace ProjectPassengerTransfers.Repositories.Implementations;
|
||||||
|
|
||||||
@ -80,18 +81,55 @@ internal class TicketRepository : ITicketRepository
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<Ticket> ReadTickets(DateTime? dateForm = null, int? ticketId = null, int? passengerId = null)
|
public IEnumerable<Ticket> ReadTickets(DateTime? dateFrom = null, DateTime? dateTo = null)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Получение всех объектов");
|
|
||||||
_logger.LogInformation("Получение всех объектов");
|
_logger.LogInformation("Получение всех объектов");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
var builder = new QueryBuilder();
|
||||||
|
if (dateFrom.HasValue)
|
||||||
|
{
|
||||||
|
builder.AddCondition("ti.SaleDate >= @dateFrom");
|
||||||
|
}
|
||||||
|
if (dateTo.HasValue)
|
||||||
|
{
|
||||||
|
builder.AddCondition("ti.SaleDate <= @dateTo");
|
||||||
|
}
|
||||||
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
|
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
|
||||||
var querySelect = @"SELECT ti.*, trt.Trip_Id, trt.Count FROM Ticket ti
|
var querySelect = $@"SELECT
|
||||||
INNER JOIN Trip_Tickets trt on trt.TicketID = ti.Id";
|
ti.*,
|
||||||
var ticket = connection.Query<TempTripTickets>(querySelect);
|
CONCAT(ps.Name, ' ', ps.Surname) as PassengerName,
|
||||||
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(ticket));
|
trt.Trip_Id,
|
||||||
return ticket.GroupBy(x => x.Id, y => y, (key, value) => Ticket.CreateOperation(value.First(), value.Select(z => TripTicket.CreateElement(0, z.Trip_Id, z.Count)))).ToList();
|
trt.Count,
|
||||||
|
CONCAT(tr.Departure, ' - ', tr.Arrival) as TripName
|
||||||
|
FROM Ticket ti
|
||||||
|
LEFT JOIN Passenger ps on ps.Id = ti.Passenger_ID
|
||||||
|
INNER JOIN Trip_Tickets trt on trt.TicketID = ti.Id
|
||||||
|
LEFT JOIN Trip tr on tr.ID = trt.Trip_Id
|
||||||
|
{builder.Build()}";
|
||||||
|
var ticketsDict = new Dictionary<int, List<TripTicket>>();
|
||||||
|
|
||||||
|
var tripTickets = connection.Query<Ticket, TripTicket, Ticket>(querySelect,
|
||||||
|
(ticket, tripTicket) =>
|
||||||
|
{
|
||||||
|
if (!ticketsDict.TryGetValue(ticket.Id, out var trt))
|
||||||
|
{
|
||||||
|
trt = [];
|
||||||
|
ticketsDict.Add(ticket.Id, trt);
|
||||||
|
}
|
||||||
|
|
||||||
|
trt.Add(tripTicket);
|
||||||
|
return ticket;
|
||||||
|
}, splitOn: "Trip_Id", param: new { dateFrom, dateTo });
|
||||||
|
_logger.LogDebug("Полученные объекты: {json}",
|
||||||
|
JsonConvert.SerializeObject(tripTickets));
|
||||||
|
|
||||||
|
return ticketsDict.Select(x =>
|
||||||
|
{
|
||||||
|
var cf = tripTickets.First(y => y.Id == x.Key);
|
||||||
|
cf.SetTripTickets(x.Value);
|
||||||
|
return cf;
|
||||||
|
}).ToArray();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -47,7 +47,10 @@ int? tripId = null, int? routeId = null, int? busId = null)
|
|||||||
{
|
{
|
||||||
using var connection = new
|
using var connection = new
|
||||||
NpgsqlConnection(_connectionString.ConnectionString);
|
NpgsqlConnection(_connectionString.ConnectionString);
|
||||||
var querySelect = "SELECT * FROM Trip";
|
var querySelect = @"SELECT tr.*, ro.Name as RouteName, bu.SeatCount as BusCount, bu.BusModel as BusModel
|
||||||
|
FROM Trip tr
|
||||||
|
LEFT JOIN Route ro on ro.Id = tr.Route_ID
|
||||||
|
LEFT JOIN Bus bu on bu.Id = tr.Bus_ID";
|
||||||
var trips =
|
var trips =
|
||||||
connection.Query<Trip>(querySelect);
|
connection.Query<Trip>(querySelect);
|
||||||
_logger.LogDebug("Полученные объекты: {json}",
|
_logger.LogDebug("Полученные объекты: {json}",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user