From f671baf7f0d1f621f75df8cadb203f66090688c4 Mon Sep 17 00:00:00 2001 From: Philipp Date: Wed, 10 Jun 2020 14:51:12 +0200 Subject: [PATCH] Error with package path --- .../ecommerce/supplier/RequestController.java | 3 +- .../ecommerce/api/RestServiceForDelivery.java | 84 +++++++++++++++++++ .../customers/CustomerOrderController.java | 75 ++++++++++++++++- .../shop/ShopCheckoutController.java | 2 +- .../entities/shop/CustomerOrder.java | 2 +- .../repos/shop/CustomerOderRepository.java | 5 ++ .../ecommerce/repos/user/UserRepository.java | 4 +- .../templates/intern/customerOrders/id.html | 7 +- .../intern/customerOrders/index.html | 15 ++-- 9 files changed, 180 insertions(+), 17 deletions(-) create mode 100644 prototype/src/main/java/org/hso/ecommerce/api/RestServiceForDelivery.java diff --git a/delivery/src/main/java/org/hso/ecommerce/supplier/RequestController.java b/delivery/src/main/java/org/hso/ecommerce/supplier/RequestController.java index ed62af7..0da6e23 100644 --- a/delivery/src/main/java/org/hso/ecommerce/supplier/RequestController.java +++ b/delivery/src/main/java/org/hso/ecommerce/supplier/RequestController.java @@ -4,6 +4,7 @@ package org.hso.ecommerce.supplier; import org.hso.ecommerce.supplier.data.Delivery; import org.hso.ecommerce.supplier.data.DeliveryManager; import org.hso.ecommerce.supplier.data.ReturnStatus; +import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; @@ -22,7 +23,7 @@ public class RequestController { return delivery.getUuid().toString(); } - @GetMapping("/status") + @GetMapping(value = "/status", produces = MediaType.APPLICATION_JSON_VALUE) public ReturnStatus searchArticles(@RequestParam(value = "trackingID") String trackingID, HttpServletRequest request, HttpServletResponse response) { Delivery delivery = DeliveryManager.getInstance().getDeliveryByeID(trackingID); diff --git a/prototype/src/main/java/org/hso/ecommerce/api/RestServiceForDelivery.java b/prototype/src/main/java/org/hso/ecommerce/api/RestServiceForDelivery.java new file mode 100644 index 0000000..2a591c7 --- /dev/null +++ b/prototype/src/main/java/org/hso/ecommerce/api/RestServiceForDelivery.java @@ -0,0 +1,84 @@ +package org.hso.ecommerce.action.shop; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.hso.ecommerce.controller.intern.customers.CustomerOrderController; +import org.hso.ecommerce.entities.shop.CustomerOrder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.*; + +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import java.util.*; + +@Service +public class RestServiceForDelivery { + + @Autowired + private RestTemplateBuilder restTemplateBuilder; + + + public String getDeliveryID(CustomerOrder customerOrder) + { + String url = "http://[::1]:8082/newDelivery"; + + RestTemplate restTemplate = restTemplateBuilder.build(); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + Map requestBody = new HashMap<>(); + + requestBody.put("name",customerOrder.destination.name); + requestBody.put("address",customerOrder.destination.addressString); + + HttpEntity> entity = new HttpEntity<>(requestBody,headers); + + ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST,entity, String.class); + + if (response.getStatusCode() == HttpStatus.OK) + { + return response.getBody(); + } else { + return null; + } + } + + public CustomerOrderController.DeliveryData getDeliveryData(UUID trackingID) { + + String url = "http://[::1]:8082/status"; + + RestTemplate restTemplate = restTemplateBuilder.build(); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url).queryParam("trackingID",trackingID.toString()); + + HttpEntity entity = new HttpEntity<>(headers); + + ResponseEntity response = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class); + + ObjectMapper mapper = new ObjectMapper(); + JsonNode node = null; + + try { + node = mapper.readTree(response.getBody()); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + + if (response.getStatusCode() == HttpStatus.OK) + { + return new CustomerOrderController.DeliveryData(node.get("status").asText(),node.get("estimatedArrival").asText()); + } else { + return null; + } + + + } +} diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/intern/customers/CustomerOrderController.java b/prototype/src/main/java/org/hso/ecommerce/controller/intern/customers/CustomerOrderController.java index 5adc9e1..da2e1f5 100644 --- a/prototype/src/main/java/org/hso/ecommerce/controller/intern/customers/CustomerOrderController.java +++ b/prototype/src/main/java/org/hso/ecommerce/controller/intern/customers/CustomerOrderController.java @@ -1,15 +1,26 @@ package org.hso.ecommerce.controller.intern.customers; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import org.hibernate.Session; +import org.hso.ecommerce.action.shop.RestServiceForDelivery; import org.hso.ecommerce.entities.shop.CustomerOrder; import org.hso.ecommerce.repos.shop.CustomerOderRepository; +import org.hso.ecommerce.repos.user.UserRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; -import java.util.List; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; @Controller @RequestMapping("intern/customerOrders") @@ -21,7 +32,12 @@ public class CustomerOrderController { @GetMapping("") public String internCustomerOrder(Model model) { List orders = customerOrderRepository.getAllOrders(); - model.addAttribute("orders", orders); + + Map customerOrderDeliveryDataMap = orders.stream().collect + (Collectors.toMap + (Function.identity(), this::getDeliveryDataFromCustomerOrder)); + + model.addAttribute("orderDeliveryDataMap", customerOrderDeliveryDataMap); return "intern/customerOrders/index"; } @@ -30,9 +46,64 @@ public class CustomerOrderController { @PathVariable("id") String id ) { CustomerOrder order = customerOrderRepository.findById(Long.parseLong(id)).get(); + DeliveryData deliveryData = getDeliveryDataFromCustomerOrder(order); model.addAttribute("order", order); + model.addAttribute("deliveryData", deliveryData); return "intern/customerOrders/id"; } + + private DeliveryData getDeliveryDataFromCustomerOrder(CustomerOrder customerOrder) + { + if(customerOrder.trackingId == null) + return new CustomerOrderController.DeliveryData("Bestellung wurde elektronisch angekündigt",""); + + if(customerOrder.deliveredAt == null) + { + DeliveryData deliveryData = new RestServiceForDelivery(new RestTemplateBuilder()).getDeliveryData(UUID.fromString(customerOrder.trackingId)); + + if(deliveryData.isDelivered()) + { + customerOrderRepository.updateUserDeliveredAt(customerOrder.id, Timestamp.valueOf(deliveryData.estimatedArrival)); + System.out.println(Timestamp.valueOf(deliveryData.estimatedArrival)); + } + + return deliveryData; + } + + SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); + return new CustomerOrderController.DeliveryData("Lieferung erfolgreich",formatter.format(customerOrder.deliveredAt)); + } + + public static class DeliveryData + { + @JsonProperty("status") + private String status; + @JsonProperty("estimatedArrival") + private String estimatedArrival; + + private boolean isDelivered; + + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) + public DeliveryData(String status, String estimatedArrival) { + this.status = status; + System.out.println(status); + this.estimatedArrival = estimatedArrival; + isDelivered = status.equals("Lieferung erfolgreich"); + } + + public boolean isDelivered() { + return isDelivered; + } + + public String getStatus() { + return status; + } + + public String getEstimatedArrival() { + return estimatedArrival; + } + } + } diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopCheckoutController.java b/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopCheckoutController.java index c2c1c3a..5481b3c 100644 --- a/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopCheckoutController.java +++ b/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopCheckoutController.java @@ -136,7 +136,7 @@ public class ShopCheckoutController { CreateOrderAction.Result result = null; try { result = action.finish(); - EnableTrackingAction.addTrackingInfo(result.customerOrder); + //EnableTrackingAction.addTrackingInfo(result.customerOrder); customerOderRepository.save(result.customerOrder); bookingRepository.saveAll(result.bookings); diff --git a/prototype/src/main/java/org/hso/ecommerce/entities/shop/CustomerOrder.java b/prototype/src/main/java/org/hso/ecommerce/entities/shop/CustomerOrder.java index 7321ed9..0272599 100644 --- a/prototype/src/main/java/org/hso/ecommerce/entities/shop/CustomerOrder.java +++ b/prototype/src/main/java/org/hso/ecommerce/entities/shop/CustomerOrder.java @@ -31,7 +31,7 @@ public class CustomerOrder { @NotNull public java.sql.Timestamp created; - @NotNull + @Column(nullable = true) public String trackingId; @Column(nullable = true) diff --git a/prototype/src/main/java/org/hso/ecommerce/repos/shop/CustomerOderRepository.java b/prototype/src/main/java/org/hso/ecommerce/repos/shop/CustomerOderRepository.java index 2bebc41..88f715b 100644 --- a/prototype/src/main/java/org/hso/ecommerce/repos/shop/CustomerOderRepository.java +++ b/prototype/src/main/java/org/hso/ecommerce/repos/shop/CustomerOderRepository.java @@ -2,6 +2,7 @@ package org.hso.ecommerce.repos.shop; import org.hso.ecommerce.entities.shop.CustomerOrder; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @@ -17,5 +18,9 @@ public interface CustomerOderRepository extends JpaRepository getAllOrders(); + + @Modifying(clearAutomatically = true) + @Query("UPDATE CustomerOrder co SET co.deliveredAt = :newDeliveredAt WHERE co.id = :customerOrderID") + int updateUserDeliveredAt(long customerOrderID, java.sql.Timestamp newDeliveredAt); } diff --git a/prototype/src/main/java/org/hso/ecommerce/repos/user/UserRepository.java b/prototype/src/main/java/org/hso/ecommerce/repos/user/UserRepository.java index 9477763..7c99c71 100644 --- a/prototype/src/main/java/org/hso/ecommerce/repos/user/UserRepository.java +++ b/prototype/src/main/java/org/hso/ecommerce/repos/user/UserRepository.java @@ -2,17 +2,19 @@ package org.hso.ecommerce.repos.user; import org.hso.ecommerce.entities.user.User; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import java.util.Optional; +import static jdk.nashorn.internal.runtime.regexp.joni.Syntax.Java; + @Repository public interface UserRepository extends JpaRepository { @Query("SELECT c FROM User c WHERE c.email = :email") Optional findByEmail(String email); - } diff --git a/prototype/src/main/resources/templates/intern/customerOrders/id.html b/prototype/src/main/resources/templates/intern/customerOrders/id.html index c31c2de..ea180b6 100644 --- a/prototype/src/main/resources/templates/intern/customerOrders/id.html +++ b/prototype/src/main/resources/templates/intern/customerOrders/id.html @@ -34,12 +34,13 @@ Lieferstatus - Unterwegs
Vorraussichtliche Ankunft: - Angekommen
Ankunft: + + Vorraussichtliche Ankunft: + Angekommen Ankunft: Sendeverfolgungsnummer - + diff --git a/prototype/src/main/resources/templates/intern/customerOrders/index.html b/prototype/src/main/resources/templates/intern/customerOrders/index.html index 16bd249..6b98741 100644 --- a/prototype/src/main/resources/templates/intern/customerOrders/index.html +++ b/prototype/src/main/resources/templates/intern/customerOrders/index.html @@ -40,14 +40,13 @@ Status - - 101 - - - - In Zustellung - Zugestellt - Details + + 101 + + + + + Details