From 1e958a8b94711b4dac9602911cde16dff9ba1065 Mon Sep 17 00:00:00 2001 From: Inohara Date: Sun, 26 Mar 2023 10:40:42 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/demo/supply/models/Orders.java | 5 +-- .../demo/supply/services/OrderService.java | 31 +++++++++++-- .../src/test/java/com/example/demo/Tests.java | 43 +++++++++++++++++-- .../java/com/example/demo/TestsSupplier.java | 6 +++ 4 files changed, 76 insertions(+), 9 deletions(-) diff --git a/demo/src/main/java/com/example/demo/supply/models/Orders.java b/demo/src/main/java/com/example/demo/supply/models/Orders.java index aa826e5..6d56603 100644 --- a/demo/src/main/java/com/example/demo/supply/models/Orders.java +++ b/demo/src/main/java/com/example/demo/supply/models/Orders.java @@ -17,14 +17,14 @@ public class Orders { @Temporal(TemporalType.DATE) private Date dateOfOrder; - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE}) @JoinColumn(name = "supplier_fk") private Supplier supplier; @ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE }) - @JoinTable(joinColumns = @JoinColumn(name = "order_fk"), + @JoinTable(name = "ordersAndProducts",joinColumns = @JoinColumn(name = "order_fk"), inverseJoinColumns = @JoinColumn(name = "product_fk")) private List products; @@ -74,7 +74,6 @@ public class Orders { if(!Objects.equals(dateOfOrder.toString(), order.dateOfOrder.toString())) return false; if(!Objects.equals(supplier, order.supplier)) return false; -// if(!Objects.equals(products.size(), order.products.size())) return false; return true; } diff --git a/demo/src/main/java/com/example/demo/supply/services/OrderService.java b/demo/src/main/java/com/example/demo/supply/services/OrderService.java index 9e29cc5..d2550d6 100644 --- a/demo/src/main/java/com/example/demo/supply/services/OrderService.java +++ b/demo/src/main/java/com/example/demo/supply/services/OrderService.java @@ -6,10 +6,13 @@ import com.example.demo.supply.models.Supplier; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityNotFoundException; import jakarta.persistence.PersistenceContext; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.sql.Date; +import java.util.ArrayList; import java.util.List; @Service @@ -25,10 +28,34 @@ public class OrderService { final Orders order = new Orders(new Date(System.currentTimeMillis())); order.setSupplier(supplier); em.persist(order); - em.merge(supplier); return order; } + + //поставщики, у которых есть заказ на конкретный товар или несколько товаров + @Transactional + public List suppliers(List products){ + List result = new ArrayList<>(); + List orders = findAllOrders(); + for(Orders order : orders){ + int k = 0; + for(Product product : products){ + if(order.getProducts().contains(product)) k++; + } + if(k == products.size()) + result.add(order.getSupplier()); + } + return result; + } + +// @Transactional +// public List suppliers(List products){ +// return em.createQuery("SELECT o.supplier FROM Orders o join o.products as p WHERE p = :products ", Supplier.class) +// .setParameter("products", products).getResultList(); +// return em.createQuery("SELECT o.supplier FROM Orders o WHERE o.products = :products ", Supplier.class) +// .setParameter("products", products).getResultList(); +// } + @Transactional public Orders addProduct(Long id, Product product) { if (product == null) { @@ -36,8 +63,6 @@ public class OrderService { } final Orders currentOrder = findOrder(id); currentOrder.addProduct(product); - product.getOrders().add(currentOrder); - em.merge(product); return em.merge(currentOrder); } diff --git a/demo/src/test/java/com/example/demo/Tests.java b/demo/src/test/java/com/example/demo/Tests.java index e0763ed..6f89a34 100644 --- a/demo/src/test/java/com/example/demo/Tests.java +++ b/demo/src/test/java/com/example/demo/Tests.java @@ -11,6 +11,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import java.util.ArrayList; import java.util.List; @SpringBootTest @@ -35,10 +36,46 @@ public class Tests { Orders order = orderService.addOrder(supplierService.findSupplier(supplier.getId())); order = orderService.addProduct(order.getId(), product1); order = orderService.addProduct(order.getId(), product2); -// List products1 = order.getProducts(); - final Orders order2 = orderService.findOrder(order.getId()); -// List products2 = order2.getProducts(); Assertions.assertEquals(order, order2); + productService.deleteAll(); + orderService.deleteAll(); + supplierService.deleteAll(); + } + + @Test + public void test(){ + productService.deleteAll(); + orderService.deleteAll(); + supplierService.deleteAll(); +/ + final Product product1 = productService.addProduct("Huawei Band 3", 2000.13); + final Product product2 = productService.addProduct("Samsung A2", 22000.56); + final Product product3 = productService.addProduct("Redmond f3", 2000.13); + final Product product4 = productService.addProduct("Asus red9", 22000.56); + + final Supplier supplier1 = supplierService.addSupplier("SuperSupplier1", 325453); + final Supplier supplier2 = supplierService.addSupplier("SuperSupplier2", 545455); + final Supplier supplier3 = supplierService.addSupplier("SuperSupplier3", 122122); + + Orders order1 = orderService.addOrder(supplierService.findSupplier(supplier1.getId())); + orderService.addProduct(order1.getId(), product1); + orderService.addProduct(order1.getId(), product2); + + Orders order2 = orderService.addOrder(supplierService.findSupplier(supplier2.getId())); + orderService.addProduct(order2.getId(), product3); + + Orders order3 = orderService.addOrder(supplierService.findSupplier(supplier1.getId())); + orderService.addProduct(order3.getId(), product3); + orderService.addProduct(order3.getId(), product4); + + List products = new ArrayList<>(); + products.add(productService.findProduct(product3.getId())); + List suppliers = orderService.suppliers(products); + Assertions.assertEquals(suppliers.size(), 2); + + productService.deleteAll(); + orderService.deleteAll(); + supplierService.deleteAll(); } } diff --git a/demo/src/test/java/com/example/demo/TestsSupplier.java b/demo/src/test/java/com/example/demo/TestsSupplier.java index 186c72f..ac7a165 100644 --- a/demo/src/test/java/com/example/demo/TestsSupplier.java +++ b/demo/src/test/java/com/example/demo/TestsSupplier.java @@ -1,6 +1,8 @@ package com.example.demo; import com.example.demo.supply.models.Supplier; +import com.example.demo.supply.services.OrderService; +import com.example.demo.supply.services.ProductService; import com.example.demo.supply.services.SupplierService; import jakarta.persistence.EntityNotFoundException; import org.junit.jupiter.api.Assertions; @@ -14,6 +16,10 @@ import java.util.List; public class TestsSupplier { @Autowired private SupplierService supplierService; + @Autowired + private OrderService orderService; + @Autowired + private ProductService productService; @Test void testSupplier(){