From a9284a59719338a980b6aee15c833fbd0949d2ee Mon Sep 17 00:00:00 2001 From: Zyzf Date: Sun, 14 May 2023 19:07:45 +0400 Subject: [PATCH] many of done --- SUBD-back/build.gradle | 3 -- .../subd/subd/Controllers/CustomRequest.java | 30 +++++++++++++++++-- .../main/java/com/subd/subd/Models/Car.java | 4 +-- .../java/com/subd/subd/Models/Client.java | 7 +++-- .../main/java/com/subd/subd/Models/Order.java | 19 ++++++------ .../subd/Repositories/OrderRepository.java | 22 +++++++------- SUBD-front/src/components/MeasureTime.vue | 2 +- 7 files changed, 55 insertions(+), 32 deletions(-) diff --git a/SUBD-back/build.gradle b/SUBD-back/build.gradle index c8766f2..e6966f9 100644 --- a/SUBD-back/build.gradle +++ b/SUBD-back/build.gradle @@ -20,9 +20,6 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.mongodb:mongodb-driver-sync:4.9.0' - implementation 'org.mongodb:mongodb-driver-core:4.9.0' - implementation 'org.mongodb:mongodb-jdbc:2.0.1' implementation 'org.springframework.boot:spring-boot-starter-data-mongodb:3.0.4' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' diff --git a/SUBD-back/src/main/java/com/subd/subd/Controllers/CustomRequest.java b/SUBD-back/src/main/java/com/subd/subd/Controllers/CustomRequest.java index eb995c3..9984347 100644 --- a/SUBD-back/src/main/java/com/subd/subd/Controllers/CustomRequest.java +++ b/SUBD-back/src/main/java/com/subd/subd/Controllers/CustomRequest.java @@ -2,9 +2,18 @@ package com.subd.subd.Controllers; import com.subd.subd.Models.Order; import com.subd.subd.Repositories.OrderRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import org.springframework.data.mongodb.core.query.Query; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; @@ -13,16 +22,31 @@ import java.util.List; @RestController public class CustomRequest { private final OrderRepository orderRepository; - public CustomRequest(OrderRepository orderRepository) { + private final MongoTemplate mongoTemplate; + private static final Logger log = LoggerFactory.getLogger(CustomRequest.class); + public CustomRequest(OrderRepository orderRepository, MongoTemplate mongoTemplate) { this.orderRepository = orderRepository; + this.mongoTemplate = mongoTemplate; } @GetMapping("/custom") - public Long performCustomRequest(String date, Double value, String status, String orderBy) throws ParseException { + public Long performCustomRequest(@RequestParam("date") String date, + @RequestParam("value") Double value, + @RequestParam("status") String status, + @RequestParam("orderBy") String orderBy) throws ParseException { SimpleDateFormat format = new SimpleDateFormat("yyyy-M-d"); Date date1 = format.parse(date); + Query query = new Query(); + query.addCriteria(Criteria.where("date").gt(date1)) + .addCriteria(Criteria.where("value").gt(value)) + .addCriteria(Criteria.where("status").is(status)); + query.with(Sort.by(Sort.Direction.ASC, orderBy)); Long start = System.nanoTime(); - orderRepository.customAction(date1, value, status, orderBy); +// orderRepository.customAction(date1, value, status, orderBy); + List orders = mongoTemplate.find(query, Order.class); Long finish = System.nanoTime(); + for (Order order : orders) { + log.info(order.toString()); + } return finish - start; } } diff --git a/SUBD-back/src/main/java/com/subd/subd/Models/Car.java b/SUBD-back/src/main/java/com/subd/subd/Models/Car.java index 4cc3139..aa8794b 100644 --- a/SUBD-back/src/main/java/com/subd/subd/Models/Car.java +++ b/SUBD-back/src/main/java/com/subd/subd/Models/Car.java @@ -3,6 +3,7 @@ package com.subd.subd.Models; import com.subd.subd.Dtos.CarDto; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.DocumentReference; import java.util.Objects; @@ -12,8 +13,7 @@ public class Car { private String id; private String gosNumber; private String vin; - @OneToOne() - @JoinColumn(name = "Driver_id", referencedColumnName = "id") + @DocumentReference() private Driver driver; public Car() {} public Car(String gosNumber, String vin, Driver driver) { diff --git a/SUBD-back/src/main/java/com/subd/subd/Models/Client.java b/SUBD-back/src/main/java/com/subd/subd/Models/Client.java index 2856b78..309d90b 100644 --- a/SUBD-back/src/main/java/com/subd/subd/Models/Client.java +++ b/SUBD-back/src/main/java/com/subd/subd/Models/Client.java @@ -1,8 +1,10 @@ package com.subd.subd.Models; -import jakarta.annotation.Nullable; + import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.Unwrapped; +import org.springframework.lang.Nullable; import java.util.ArrayList; import java.util.List; @@ -14,9 +16,8 @@ public class Client { private String id; private String name; private String phone; - @Nullable + @Unwrapped.Nullable private String email; - @OneToMany(cascade = {CascadeType.MERGE}) private List orders; public Client() {} public Client(String name, String phone, @Nullable String email) { diff --git a/SUBD-back/src/main/java/com/subd/subd/Models/Order.java b/SUBD-back/src/main/java/com/subd/subd/Models/Order.java index 1304c48..ea08f26 100644 --- a/SUBD-back/src/main/java/com/subd/subd/Models/Order.java +++ b/SUBD-back/src/main/java/com/subd/subd/Models/Order.java @@ -1,8 +1,12 @@ package com.subd.subd.Models; -import jakarta.annotation.Nullable; + import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.DocumentReference; +import org.springframework.data.mongodb.core.mapping.Unwrapped; +import org.springframework.lang.Nullable; + import java.util.Date; import java.util.Objects; @@ -14,18 +18,13 @@ public class Order { private Double value; private String status; private Date date; - @ManyToOne( cascade = {CascadeType.MERGE}, fetch = FetchType.EAGER) - @JoinColumn(name = "Client_id", nullable = true) + @DocumentReference private Client client; - @OneToOne() - @JoinColumn(name = "sourcePickUpPoint_id", referencedColumnName = "id") + @DocumentReference private PickUpPoint sourcePickUpPoint; - @Nullable - @OneToOne() - @JoinColumn(name = "destPickUpPoint_id", referencedColumnName = "id") + @DocumentReference private PickUpPoint destPickUpPoint; - @OneToOne() - @JoinColumn(name = "Car_id", referencedColumnName = "id") + @DocumentReference private Car car; public Order() {} public Order(Double value, String status, Date date, Client client, PickUpPoint sourcePickUpPoint, @Nullable PickUpPoint destPickUpPoint, Car car) { diff --git a/SUBD-back/src/main/java/com/subd/subd/Repositories/OrderRepository.java b/SUBD-back/src/main/java/com/subd/subd/Repositories/OrderRepository.java index 8ea0cf0..63f7240 100644 --- a/SUBD-back/src/main/java/com/subd/subd/Repositories/OrderRepository.java +++ b/SUBD-back/src/main/java/com/subd/subd/Repositories/OrderRepository.java @@ -1,21 +1,23 @@ package com.subd.subd.Repositories; import com.subd.subd.Models.Order; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.Query; import org.springframework.data.repository.query.Param; import java.util.Date; import java.util.List; -public interface OrderRepository extends JpaRepository { - @Query(value = "SELECT \"order\".ID, \"order\".DATE, \"order\".STATUS, \"car\".GOS_NUMBER, \"driver\".NAME as driver_name, \"client\".NAME as client_name\n" + - "FROM \"order\"\n" + - "JOIN CAR ON CAR.ID = \"order\".CAR_ID\n" + - "JOIN DRIVER ON CAR.DRIVER_ID = DRIVER.ID\n" + - "JOIN CLIENT ON CLIENT.ID = \"order\".CLIENT_ID\n" + - "WHERE \"order\".DATE > :date AND \"order\".VALUE > :value AND \"order\".STATUS like :status\n" + - "ORDER BY :orderBy", nativeQuery = true) +public interface OrderRepository extends MongoRepository { + @Query(value = """ + db.Order.find({date: {$gt: ISODate("2000-01-01")}, value: {$gt: 1}, status: "accepted"}).sort({date: 1}).forEach(function(order){ + var client = db.Client.findOne({_id: order.client}); + var car=db.Car.findOne({_id: order.car}); + car.driver = db.Driver.findOne({_id: car.driver}); + var sourcePickUpPoint = db.PickUpPoint.findOne({_id: order.sourcePickUpPoint}); + var destPickUpPoint = db.PickUpPoint.findOne({_id: order.destPickUpPoint}); + print(order._id, order.value, order.status, order.date, client, car, sourcePickUpPoint, destPickUpPoint); + })""") List customAction(@Param("date") Date date, @Param("value") Double value, @Param("status") String status, diff --git a/SUBD-front/src/components/MeasureTime.vue b/SUBD-front/src/components/MeasureTime.vue index d471b66..6f73fb5 100644 --- a/SUBD-front/src/components/MeasureTime.vue +++ b/SUBD-front/src/components/MeasureTime.vue @@ -42,7 +42,7 @@ let count = document.getElementById('measureCount').value; this.wholeTime = 0; for (let i = 0; i < count; i++) { - const response = axios.get("http://localhost:8080/custom?date=2023-2-1&value=1000&status=delivered&orderBy=date") + const response = axios.get("http://localhost:8080/custom?date=2000-2-1&value=1000&status=delivered&orderBy=date") .then(data => { this.wholeTime += data.data; });