123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323 |
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Text;
- using System.Threading.Tasks;
- namespace Server
- {
- class Program
- {
- public static gr672_pgvEntities db = new gr672_pgvEntities();
- static void Main(string[] args)
- {
- Listen();
- Console.Read();
- }
- public static async void Listen()
- {
- HttpListener listener = new HttpListener();
- listener.Prefixes.Add($"http://127.0.0.1:8080/");
- listener.Start();
- Console.WriteLine("Ожидание подключений...");
- while (true)
- {
- HttpListenerContext context = await listener.GetContextAsync();
- HttpListenerRequest request = context.Request;
- //Все заправочные станции на которых есть выбранный вид топлива
- if (request.RawUrl.Contains("/stations?fuel") && request.HttpMethod == "GET")
- {
- string NameFuel = request.RawUrl.Split('=')[1];
- HttpListenerResponse response = context.Response;
- List<RootFuelInStation> rootFuelInStations = new List<RootFuelInStation>();
- var GasStation = db.FuelTypeOnGasStation.Where(x => x.FuelType.NameFuelType == NameFuel).ToList();
- foreach (var item in GasStation)
- {
- rootFuelInStations.Add(new RootFuelInStation() { GasStationID = item.IDGasStation, Address = item.GasStation.Address, Price = item.Price });
- }
- var Json = JsonConvert.SerializeObject(rootFuelInStations);
- byte[] buffer = Encoding.UTF8.GetBytes(Json);
- response.ContentLength64 = buffer.Length;
- Stream output = response.OutputStream;
- output.Write(buffer, 0, buffer.Length);
- output.Close();
- Console.WriteLine($"{Json}");
- }
- //Информация о заправочной станции
- if (request.RawUrl.Contains("/getStationInfo?id") && request.HttpMethod == "GET")
- {
- int IDGasStation = Convert.ToInt32( request.RawUrl.Split('=')[1]);
- var GasStation = db.GasStation.Find(IDGasStation);
- if (GasStation == null)
- {
- HttpListenerResponse response = context.Response;
- byte[] buffer = Encoding.UTF8.GetBytes("АЗС не найдено");
- response.ContentLength64 = buffer.Length;
- Stream output = response.OutputStream;
- output.Write(buffer, 0, buffer.Length);
- output.Close();
- Console.WriteLine("АЗС не найдено");
- }
- else
- {
- RootDataOfGasStation dataOfGasStation = new RootDataOfGasStation();
- dataOfGasStation.GasStationID = GasStation.GasStationID;
- dataOfGasStation.Address = GasStation.Address;
- List<FuelInCurrentGasStation> rootFuelTypes = new List<FuelInCurrentGasStation>();
- foreach (var item in GasStation.FuelTypeOnGasStation)
- {
- rootFuelTypes.Add(new FuelInCurrentGasStation()
- { IDFuelType = item.IDFuelType, AmountOfFuel = item.AmountOfFuel, Price = item.Price, NameFuelType = item.FuelType.NameFuelType });
- }
- dataOfGasStation.FuelInCurrentGasStation = rootFuelTypes;
- var Json = JsonConvert.SerializeObject(dataOfGasStation);
- byte[] buffer = Encoding.UTF8.GetBytes(Json);
- HttpListenerResponse response = context.Response;
- response.ContentLength64 = buffer.Length;
- Stream output = response.OutputStream;
- output.Write(buffer, 0, buffer.Length);
- output.Close();
- Console.WriteLine($"{Json}");
- }
- }
- //Добавление или редактирование данных о заправочной станции
- if (request.RawUrl.Contains("/setStation") && request.HttpMethod == "POST")
- {
- StreamReader reader = new StreamReader(request.InputStream, Encoding.UTF8);
- string Json = await reader.ReadToEndAsync();
- RootDataOfGasStation DataOfGasStation = JsonConvert.DeserializeObject<RootDataOfGasStation>(Json);
- //Поиск заправочной станции
- var FindGasStation = db.GasStation.Find(DataOfGasStation.GasStationID);
- if (FindGasStation == null)
- {
- //Добавление новой заправочной станции
- GasStation NewGasStation = new GasStation()
- {
- GasStationID = DataOfGasStation.GasStationID,
- Address = DataOfGasStation.Address
- };
- db.GasStation.Add(NewGasStation);
- foreach (var item in DataOfGasStation.FuelInCurrentGasStation)
- {
- FuelTypeOnGasStation fuelTypeOnGasStation = new FuelTypeOnGasStation()
- {
- IDGasStation = NewGasStation.GasStationID,
- IDFuelType = item.IDFuelType,
- AmountOfFuel = item.AmountOfFuel,
- Price = item.Price
- };
- db.FuelTypeOnGasStation.Add(fuelTypeOnGasStation);
- }
- db.SaveChanges();
- }
- else
- {
- //Редактирование заправочной станции
- FindGasStation.GasStationID = DataOfGasStation.GasStationID;
- FindGasStation.Address = DataOfGasStation.Address;
- foreach (var item in DataOfGasStation.FuelInCurrentGasStation)
- {
- //Поиск цены на топливо
- FuelTypeOnGasStation FindfuelTypeOnGasStation = db.FuelTypeOnGasStation.
- FirstOrDefault(x => x.IDGasStation == FindGasStation.GasStationID && x.IDFuelType == item.IDFuelType);
- if (FindfuelTypeOnGasStation == null)
- {
- //Добавление цен на топливо
- FuelTypeOnGasStation fuelTypeOnGasStation = new FuelTypeOnGasStation()
- {
- IDGasStation = FindGasStation.GasStationID,
- IDFuelType = item.IDFuelType,
- AmountOfFuel = item.AmountOfFuel,
- Price = item.Price
- };
- db.FuelTypeOnGasStation.Add(fuelTypeOnGasStation);
- }
- else
- {
- //Редактирование цен на топливо
- FindfuelTypeOnGasStation.Price = item.Price;
- FindfuelTypeOnGasStation.AmountOfFuel = item.AmountOfFuel;
- }
- db.SaveChanges();
- }
- }
- HttpListenerResponse response = context.Response;
- byte[] buffer = Encoding.UTF8.GetBytes("Выполненно");
- response.ContentLength64 = buffer.Length;
- Stream output = response.OutputStream;
- output.Write(buffer, 0, buffer.Length);
- output.Close();
- Console.WriteLine("Выполненно");
- }
- //Получение данных с камеры, поиск машины в БД и при её отсутствии создаём новую запись о машине
- if (request.RawUrl.Contains("/FindOrAddCar") && request.HttpMethod == "POST")
- {
- StreamReader reader = new StreamReader(request.InputStream, Encoding.UTF8);
- string Json = await reader.ReadToEndAsync();
- DataOfCamera dataOfCamera = JsonConvert.DeserializeObject<DataOfCamera>(Json);
- Car FindCar = db.Car.FirstOrDefault(x => x.CarNumber == dataOfCamera.CarNumber);
- RootDataOfCar rootDataOfCar = new RootDataOfCar();
- if (FindCar == null)
- {
- Car ResponseCar = new Car { CarNumber = dataOfCamera.CarNumber, VolumeTank = null, IDClient = null};
- db.Car.Add(ResponseCar);
- db.SaveChanges();
- rootDataOfCar = new RootDataOfCar
- {
- CarID = ResponseCar.CarID,
- CarNumber = ResponseCar.CarNumber,
- VolumeTank = ResponseCar.VolumeTank,
- CardOfCars = null
- };
- }
- else
- {
- List<RootDataOfCard> CardOfCars = new List<RootDataOfCard>();
- if (FindCar.IDClient != null)
- {
- foreach (var item in FindCar.Client.Card.ToList())
- {
- CardOfCars.Add(new RootDataOfCard
- {
- CardID = item.CardID,
- CardExpDate = item.CardExpDate,
- Balance = item.Balance,
- CardHolder = item.Client.LastName + " " + item.Client.Name,
- IDCardIssuer = item.IDCardIssuer,
- IDCardType = item.IDCardType,
- NumberCard = item.NumberCard
- });
- }
- }
- rootDataOfCar = new RootDataOfCar
- {
- CarID = FindCar.CarID,
- CarNumber = FindCar.CarNumber,
- VolumeTank = FindCar.VolumeTank,
- CardOfCars = CardOfCars
- };
- }
- Json = JsonConvert.SerializeObject(rootDataOfCar);
- HttpListenerResponse response = context.Response;
- byte[] buffer = Encoding.UTF8.GetBytes(Json);
- response.ContentLength64 = buffer.Length;
- Stream output = response.OutputStream;
- output.Write(buffer, 0, buffer.Length);
- output.Close();
- Console.WriteLine(Json);
- }
- //Получение данных о об оплате заправке автомобиля
- if (request.RawUrl.Contains("PostDataOfPayment") && request.HttpMethod == "POST")
- {
- StreamReader streamReader = new StreamReader(request.InputStream, Encoding.UTF8);
- string Json = await streamReader.ReadToEndAsync();
- RootDataOfPayment dataOfPayment = JsonConvert.DeserializeObject<RootDataOfPayment>(Json);
- //Запись о заправке
- var RefuelingColumn = db.RefuelingColumn.FirstOrDefault(x=> x.IDGasStation == dataOfPayment.RootDataOfRefuling.GasStationID);
- var RefuelingGun = db.RefuelingGun.FirstOrDefault(x => x.IDFuelType == dataOfPayment.RootDataOfRefuling.CurrentFuelID && x.IDRefuelingColumn == RefuelingColumn.RefuelingColumnID);
- Refueling NewRefuling = new Refueling
- {
- IDCar = dataOfPayment.RootDataOfRefuling.Car.CarID,
- VolumeFuel = dataOfPayment.RootDataOfRefuling.VolumeFuel,
- DataOfCamera = dataOfPayment.RootDataOfRefuling.DataOfCamera,
- KeySession = dataOfPayment.RootDataOfRefuling.KeySession,
- IDRefulingGun = RefuelingGun.RefuelingGunID
- };
- db.Refueling.Add(NewRefuling);
- var FindCard = db.Card.FirstOrDefault(x => x.CardID == dataOfPayment.RootDataOfCard.CardID);
- string LastName = dataOfPayment.RootDataOfCard.CardHolder.Split(' ')[0];
- string Name = dataOfPayment.RootDataOfCard.CardHolder.Split(' ')[1];
- var FindClient = db.Client.FirstOrDefault(x => x.LastName == LastName && x.Name == Name);
- //Запись об оплате
- Payment NewPayment = new Payment()
- {
- IDRefueling = NewRefuling.RefuelingID,
- PriceRefueling = dataOfPayment.PriceRefueling,
- Status = dataOfPayment.Status,
- TransactionCode = dataOfPayment.TransactionCode,
- //Создание новой карты, если с неё раньше не производилось оплаты
- Card = FindCard is null ? new Card
- {
- NumberCard = dataOfPayment.RootDataOfCard.NumberCard,
- CardExpDate = dataOfPayment.RootDataOfCard.CardExpDate,
- Balance = dataOfPayment.RootDataOfCard.Balance - dataOfPayment.PriceRefueling,
- IDCardType = dataOfPayment.RootDataOfCard.IDCardType,
- IDCardIssuer = dataOfPayment.RootDataOfCard.IDCardIssuer,
- //Добавление нового клиента, если у него раньше не было карт
- Client = FindClient is null ? new Client { LastName = LastName, Name = Name } : FindClient
- } : FindCard
- };
- db.Payment.Add(NewPayment);
- //Списание топлива
- var CurrentFuelInGasStation = db.FuelTypeOnGasStation
- .FirstOrDefault(x => x.IDGasStation == dataOfPayment.RootDataOfRefuling.GasStationID &&
- x.IDFuelType == dataOfPayment.RootDataOfRefuling.CurrentFuelID);
- CurrentFuelInGasStation.AmountOfFuel = CurrentFuelInGasStation.AmountOfFuel - dataOfPayment.RootDataOfRefuling.VolumeFuel;
- //Списание средств с карты
- if (FindCard != null)
- {
- FindCard.Balance = FindCard.Balance - dataOfPayment.PriceRefueling;
- }
- db.SaveChanges();
- FindClient = db.Client.FirstOrDefault(x => x.LastName == LastName && x.Name == Name);
- //Запись о владельце автомобиля исходя из данных карты (Если это превая оплата с банковской карты)
- var FindCar = db.Car.Find(dataOfPayment.RootDataOfRefuling.Car.CarID);
- if (FindCar.IDClient is null)
- {
- FindCar.IDClient = FindClient.ClientID;
- }
-
- //if (dataOfPayment.RootDataOfCard.IDCardType == 2)
- //{
- // var FindSavingCard = db.Card.FirstOrDefault(x => x.IDHolder == FindClient.ClientID && x.IDCardType == 3);
- // if (FindSavingCard == null)
- // {
- // Random random = new Random();
- // string NumberCard = "";
- // for (int i = 0; i < 7; i++)
- // {
- // NumberCard += random.Next(0, 9).ToString();
- // }
- // Card NewCard = new Card
- // {
- // NumberCard = NumberCard,
- // CardExpDate = null,
- // Balance = 10,
- // IDCardType = 2,
- // IDCardIssuer = null,
- // IDHolder = FindClient.ClientID
- // };
- // db.Card.Add(NewCard);
- // }
- // else
- // {
- // FindSavingCard.Balance = FindSavingCard.Balance + FindCard.Balance * 3 / 100;
- // }
- //}
- //db.SaveChanges();
- HttpListenerResponse response = context.Response;
- byte[] buffer = Encoding.UTF8.GetBytes("Оплата прошла успешно");
- response.ContentLength64 = buffer.Length;
- Stream output = response.OutputStream;
- output.Write(buffer, 0, buffer.Length);
- output.Close();
- Console.WriteLine("Оплата прошла успешно");
- }
- }
- }
- }
- }
|