This commit is contained in:
Lazypr0ger 2024-12-13 19:02:50 +03:00
parent 7758c9be8c
commit 6f6b08f5cf
5 changed files with 62 additions and 60 deletions

View File

@ -14,14 +14,17 @@ public class Material
[DisplayName("Номеер поставки")] [DisplayName("Номеер поставки")]
public int ArrivalMaterialID { get; private set; } public int ArrivalMaterialID { get; private set; }
[DisplayName("Количество переданного")]
public string CountToProduct => MaterialForProducts != null ?
string.Join(", ", MaterialForProducts.Select(x => $"{x.Name}{x.Count}")) :
string.Empty;
[Browsable(false)] [Browsable(false)]
public IEnumerable<MaterialForProduct> MaterialForProducts { get; private set; } public IEnumerable<MaterialForProduct> MaterialForProducts { get; set; } = [];
[DisplayName("Количество переданного")]
public string CountToProduct => MaterialForProducts != null ?
string.Join(", ", MaterialForProducts.Select(x => $"{x.ProductID}{x.Count}")) :
string.Empty;
[DisplayName("Дата передачи в производство")] [DisplayName("Дата передачи в производство")]
public DateTime DateArrivalToProduct { get; private set; } public DateTime DateArrivalToProduct { get; private set; }

View File

@ -1,20 +1,12 @@
using System; namespace ProductionInCehOTP.Entities;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProductionInCehOTP.Entities;
public class MaterialForProduct public class MaterialForProduct
{ {
public int ProductID { get; private set; } public int ProductID { get; private set; }
public int MaterialID { get; private set; } public int MaterialID { get; private set; }
public string Name { get; private set; }
public int Count { get; private set; } public int Count { get; private set; }
public static MaterialForProduct CreateDependenceMaterialsToProduct(int productID, int materialsId, int count) public static MaterialForProduct CreateDependenceMaterialsToProduct( int materialsId, int productID, int count)
{ {
return new MaterialForProduct { ProductID = productID, MaterialID = materialsId, Count = count}; return new MaterialForProduct { ProductID = productID, MaterialID = materialsId, Count = count};
} }

View File

@ -62,11 +62,10 @@ namespace ProductionInCehOTP.Forms.Material_Forms
{ {
continue; continue;
} }
list.Add(MaterialForProduct.CreateDependenceMaterialsToProduct(0, list.Add(MaterialForProduct.CreateDependenceMaterialsToProduct(0, Convert.ToInt32(row.Cells["ColumnProduct"].Value)
Convert.ToInt32(row.Cells["ColumnProduct"].Value), Convert. , Convert.ToInt32(row.Cells["ColumnCountMaterial"].Value)));
ToInt32(row.Cells["ColumnCountMaterial"].Value)));
} }
return list.GroupBy(x => x.MaterialID, x => x.Count, (id,countes) => return list.GroupBy(x => x.ProductID, x => x.Count, (id,countes) =>
MaterialForProduct.CreateDependenceMaterialsToProduct(0,id,countes.Sum())).ToList(); MaterialForProduct.CreateDependenceMaterialsToProduct(0,id,countes.Sum())).ToList();
} }

View File

@ -31,6 +31,7 @@ namespace ProductionInCehOTP.Forms.Material_Forms
private void LoadList() private void LoadList()
{ {
var gh = _materialRepository.GetMaterials();
dataGridViewData.DataSource = _materialRepository.GetMaterials(); dataGridViewData.DataSource = _materialRepository.GetMaterials();
dataGridViewData.Columns["Id"].Visible = false; dataGridViewData.Columns["Id"].Visible = false;
dataGridViewData.Columns["DateArrivalToProduct"].DefaultCellStyle.Format = "dd MMMM yyyy hh:mm"; dataGridViewData.Columns["DateArrivalToProduct"].DefaultCellStyle.Format = "dd MMMM yyyy hh:mm";

View File

@ -22,11 +22,14 @@ public class MaterialRepository : IMaterialReposirory
throw new NotImplementedException(); throw new NotImplementedException();
} }
public IEnumerable<Material> GetMaterials(DateTime? StartDate = null, DateTime? EndDate = null) public IEnumerable<Material> GetMaterials(DateTime? StartDate = null, DateTime? EndDate = null)
{ {
_logger.LogInformation("Получение всех объектов"); _logger.LogInformation("Получение всех объектов материалов");
try try
{ {
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var builder = new QueryBuilder(); var builder = new QueryBuilder();
if (StartDate.HasValue) if (StartDate.HasValue)
{ {
@ -36,43 +39,45 @@ public class MaterialRepository : IMaterialReposirory
{ {
builder.AddCondition("mat.Datearrivaltoproduct <= @EndDate"); builder.AddCondition("mat.Datearrivaltoproduct <= @EndDate");
} }
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = $@"
SELECT
mat.*,
mfp.Count,
pr.Name as ""MatForproduct""
from material mat
inner join material_product mfp on mfp.MaterialId = mat.id
left join product pr on pr.productiontypeid = mfp.productid
{ builder.Build()}";
var materialDict = new Dictionary<int, List<MaterialForProduct>>();
var material = connection.Query<Material, MaterialForProduct, Material>(querySelect, var query = @$"
(matat, material) => SELECT
mat.Id AS Id,
mat.Name AS Name,
mat.ArrivalMaterialiD AS ArrivalMaterialID,
mat.DateArrivalToProduct AS DateArrivalToProduct,
mfp.ProductID AS ProductId,
mfp.MaterialID AS MaterialIdDependency,
mfp.Count AS CountToProduct
FROM material mat
LEFT JOIN material_product mfp ON mat.Id = mfp.MaterialID
{builder.Build()}";
var MaterialForProductCountDict = new Dictionary<int, List<MaterialForProduct>>();
var materials = connection.Query<Material, MaterialForProduct, Material>(
query,
(material, materialForProduct) =>
{ {
if (!materialDict.TryGetValue(matat.Id, out var frr)) if (!MaterialForProductCountDict.TryGetValue(material.Id, out var forProduct))
{ {
frr = []; forProduct = [];
materialDict.Add(matat.Id, frr); MaterialForProductCountDict.Add(material.Id, forProduct);
} }
frr.Add(material); forProduct.Add(materialForProduct);
return matat; return material;
}, splitOn: "MatForproduct", param: new {StartDate, EndDate}); },
_logger.LogDebug("Полученные объекты {json}", JsonConvert.SerializeObject(material)); splitOn: "MaterialIdDependency"
return materialDict.Select(x => ).Distinct().ToList();
{
var fr = material.First(y => y.Id == x.Key); _logger.LogDebug("Полученные объекты материалов: {json}", JsonConvert.SerializeObject(materials));
fr.SetMaterialForProduct(x.Value); return materials;
return fr;
}).ToArray();
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex, "Ошибка при чтении объектов"); _logger.LogError(ex, "Ошибка при получении объектов материалов");
throw; throw;
} }
} }
public void TransferMaterial(Material material) public void TransferMaterial(Material material)
@ -85,12 +90,14 @@ left join product pr on pr.productiontypeid = mfp.productid
using var connection = new NpgsqlConnection(_connectionString.ConnectionString); using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
connection.Open(); connection.Open();
using var transaction = connection.BeginTransaction(); using var transaction = connection.BeginTransaction();
var queryInsert = @" var queryInsert = @"
INSERT INTO MATERIAL (NAME, ARRIVALMATERIALID, DateArrivalToProduct) INSERT INTO MATERIAL (NAME, ARRIVALMATERIALID, DateArrivalToProduct)
VALUES (@NAME, @ARRIVALMATERIALID, @DateArrivalToProduct); VALUES (@NAME, @ARRIVALMATERIALID, @DateArrivalToProduct);
SELECT MAX(Id) FROM MATERIAL"; SELECT MAX(Id) FROM MATERIAL";
var materialID = var materialID = connection.QueryFirst<int>(queryInsert, material, transaction);
connection.QueryFirst<int>(queryInsert, material, transaction);
var querySubInsert = @" var querySubInsert = @"
INSERT INTO MATERIAL_PRODUCT (PRODUCTID, MATERIALID, COUNT) INSERT INTO MATERIAL_PRODUCT (PRODUCTID, MATERIALID, COUNT)
VALUES (@PRODUCTID,@MATERIALID, @COUNT)"; VALUES (@PRODUCTID,@MATERIALID, @COUNT)";
@ -98,8 +105,8 @@ VALUES (@PRODUCTID,@MATERIALID, @COUNT)";
{ {
connection.Execute(querySubInsert, new connection.Execute(querySubInsert, new
{ {
elem.ProductID,
materialID, materialID,
elem.ProductID,
elem.Count elem.Count
}, transaction); }, transaction);
} }