| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- using mysql.Model;
- using MySql.Data.MySqlClient;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- namespace mysql.Classes
- {
- class MySQLDataProvider: IDataProvider
- {
- private MySqlConnection Connection;
- private List<ProductType> ProductTypes = null;
- public MySQLDataProvider()
- {
- try
- {
- Connection = new MySqlConnection("Server=kolei.ru;Database=i31;port=3306;UserId=i31;password=qzesc;");
- }
- catch (Exception)
- {
- }
- }
- public IEnumerable<Product> GetProducts()
- {
- List<Product> ProductList = new List<Product>();
- string Query = @"SELECT
- p.*,
- pt.Title AS ProductTypeTitle,
- pp.MaterialList, pp.Total,Sales.DaysFromLastSale
- FROM
- Product p
- LEFT JOIN
- ProductType pt ON p.ProductTypeID = pt.ID
- LEFT JOIN
- (
- SELECT
- pm.ProductID,
- GROUP_CONCAT(m.Title SEPARATOR ', ') as MaterialList,
- SUM(pm.Count * m.Cost / m.CountInPack) as Total
- FROM
- Material m,
- ProductMaterial pm
- WHERE m.ID = pm.MaterialID
- GROUP BY ProductID
- ) pp ON pp.ProductID = p.ID
- LEFT JOIN
- (
- select
- ProductID,
- DATEDIFF(NOW(), max(SaleDate)) as DaysFromLastSale
- from
- ProductSale
- group by ProductID
- ) Sales on Sales.ProductID = p.ID";
- try
- {
- Connection.Open();
- try
- {
- MySqlCommand Command = new MySqlCommand(Query, Connection);
- MySqlDataReader Reader = Command.ExecuteReader();
- while (Reader.Read())
- {
- Product NewProduct = new Product();
- NewProduct.ID = Reader.GetInt32("ID");
- NewProduct.Title = Reader.GetString("Title");
- NewProduct.ArticleNumber = Reader.GetString("ArticleNumber");
- NewProduct.ProductionPersonCount = Reader.GetInt32("ProductionPersonCount");
- NewProduct.ProductionWorkshopNumber = Reader.GetInt32("ProductionWorkshopNumber");
- NewProduct.MinCostForAgent = Reader.GetInt32("MinCostForAgent");
- // Методы Get<T> не поддерживают работу с NULL
- // для полей, в которых может встретиться NULL (а лучше для всех)
- // используйте следующий синтаксис
- NewProduct.Description = Reader["Description"].ToString();
- NewProduct.Image = Reader["Image"].ToString();
- // NewProduct.ProductTypeID = Reader.GetInt32("ProductTypeID");
- // NewProduct.ProductTypeTitle = Reader["ProductTypeTitle"].ToString();
- NewProduct.CurrentProductType = GetProductType(Reader.GetInt32("ProductTypeID"));
- NewProduct.MaterialString = Reader["MaterialList"].ToString();
- NewProduct.Total = Reader["Total"].ToString();
- NewProduct.DaysFromLastSale = (Reader["DaysFromLastSale"] as int?) ?? 999;
- ProductList.Add(NewProduct);
- }
- }
- finally
- {
- Connection.Close();
- }
- }
- catch (Exception)
- {
- }
- return ProductList;
- }
- private ProductType GetProductType(int Id)
- {
- GetProductTypes();
- return ProductTypes.Find(pt => pt.ID == Id);
- }
- public IEnumerable<ProductType> GetProductTypes()
- {
- if (ProductTypes == null)
- {
- ProductTypes = new List<ProductType>();
- string Query = "SELECT * FROM ProductType";
- try
- {
- Connection.Open();
- try
- {
- MySqlCommand Command = new MySqlCommand(Query, Connection);
- MySqlDataReader Reader = Command.ExecuteReader();
- while (Reader.Read())
- {
- ProductType NewProductType = new ProductType();
- NewProductType.ID = Reader.GetInt32("ID");
- NewProductType.Title = Reader.GetString("Title");
- ProductTypes.Add(NewProductType);
- }
- }
- finally
- {
- Connection.Close();
- }
- }
- catch (Exception)
- {
- }
- }
- return ProductTypes;
- }
- public void SetAverageCostForAgent(List<int> ProductIds, decimal NewCost)
- {
- try
- {
- Connection.Open();
- try
- {
- string Query = "UPDATE Product SET MinCostForAgent=@MinCostForAgent WHERE ID=@ID";
- foreach (int item in ProductIds)
- {
- MySqlCommand Command = new MySqlCommand(Query, Connection);
- Command.Parameters.AddWithValue("@MinCostForAgent", NewCost);
- Command.Parameters.AddWithValue("@ID", item);
- Command.ExecuteNonQuery();
- }
- }
- finally
- {
- Connection.Close();
- }
- }
- catch (Exception)
- {
- }
- }
- public void SaveProduct(Product ChangedProduct)
- {
- Connection.Open();
- try
- {
- if (ChangedProduct.MinCostForAgent < 0)
- throw new Exception("Цена продукта не может быть отрицательной");
- if (ChangedProduct.ID == 0)
- {
- // новый продукт - добавляем запись
- string Query = @"INSERT INTO Product
- (Title,
- ProductTypeID,
- ArticleNumber,
- Description,
- Image,
- ProductionPersonCount,
- ProductionWorkshopNumber,
- MinCostForAgent)
- VALUES
- (@Title,
- @ProductTypeID,
- @ArticleNumber,
- @Description,
- @Image,
- @ProductionPersonCount,
- @ProductionWorkshopNumber,
- @MinCostForAgent)";
- MySqlCommand Command = new MySqlCommand(Query, Connection);
- Command.Parameters.AddWithValue("@Title", ChangedProduct.Title);
- Command.Parameters.AddWithValue("@ProductTypeID", ChangedProduct.CurrentProductType.ID);
- Command.Parameters.AddWithValue("@ArticleNumber", ChangedProduct.ArticleNumber);
- Command.Parameters.AddWithValue("@Description", ChangedProduct.Description);
- Command.Parameters.AddWithValue("@Image", ChangedProduct.Image);
- Command.Parameters.AddWithValue("@ProductionPersonCount", ChangedProduct.ProductionPersonCount);
- Command.Parameters.AddWithValue("@ProductionWorkshopNumber", ChangedProduct.ProductionWorkshopNumber);
- Command.Parameters.AddWithValue("@MinCostForAgent", ChangedProduct.MinCostForAgent);
- Command.ExecuteNonQuery();
- }
- else
- {
- // существующий продукт - изменяем запись
- string Query = @"UPDATE Product
- SET
- Title = @Title,
- ProductTypeID = @ProductTypeID,
- ArticleNumber = @ArticleNumber,
- Description = @Description,
- Image = @Image,
- ProductionPersonCount = @ProductionPersonCount,
- ProductionWorkshopNumber = @ProductionWorkshopNumber,
- MinCostForAgent = @MinCostForAgent
- WHERE ID = @ID";
- MySqlCommand Command = new MySqlCommand(Query, Connection);
- Command.Parameters.AddWithValue("@Title", ChangedProduct.Title);
- Command.Parameters.AddWithValue("@ProductTypeID", ChangedProduct.CurrentProductType.ID);
- Command.Parameters.AddWithValue("@ArticleNumber", ChangedProduct.ArticleNumber);
- Command.Parameters.AddWithValue("@Description", ChangedProduct.Description);
- Command.Parameters.AddWithValue("@Image", ChangedProduct.Image);
- Command.Parameters.AddWithValue("@ProductionPersonCount", ChangedProduct.ProductionPersonCount);
- Command.Parameters.AddWithValue("@ProductionWorkshopNumber", ChangedProduct.ProductionWorkshopNumber);
- Command.Parameters.AddWithValue("@MinCostForAgent", ChangedProduct.MinCostForAgent);
- Command.Parameters.AddWithValue("@ID", ChangedProduct.ID);
- Command.ExecuteNonQuery();
- }
- }
- finally
- {
- Connection.Close();
- }
- }
- }
- }
|