From 0ab185f143a8995fbddbe112552bff6aa320830a Mon Sep 17 00:00:00 2001 From: Philipp Schweizer Date: Sat, 13 Jun 2020 21:59:18 +0200 Subject: [PATCH] impl trackingID for the UserController --- .../ecommerce/api/RestServiceForDelivery.java | 12 +-- .../ecommerce/controller/UserController.java | 19 ++++- .../customers/CustomerOrderController.java | 71 +----------------- .../customers/CustomersIndexController.java | 1 + .../entities/shop/CustomerOrder.java | 5 -- .../hso/ecommerce/uiModel/DeliveryData.java | 75 +++++++++++++++++++ .../templates/user/orders/index.html | 24 +++--- 7 files changed, 115 insertions(+), 92 deletions(-) create mode 100644 prototype/src/main/java/org/hso/ecommerce/uiModel/DeliveryData.java diff --git a/prototype/src/main/java/org/hso/ecommerce/api/RestServiceForDelivery.java b/prototype/src/main/java/org/hso/ecommerce/api/RestServiceForDelivery.java index 4f118c0..7d4c813 100644 --- a/prototype/src/main/java/org/hso/ecommerce/api/RestServiceForDelivery.java +++ b/prototype/src/main/java/org/hso/ecommerce/api/RestServiceForDelivery.java @@ -1,7 +1,7 @@ package org.hso.ecommerce.api; -import org.hso.ecommerce.controller.intern.customers.CustomerOrderController; import org.hso.ecommerce.entities.shop.CustomerOrder; +import org.hso.ecommerce.uiModel.DeliveryData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.http.*; @@ -46,7 +46,7 @@ public class RestServiceForDelivery { } } - public CustomerOrderController.DeliveryData getDeliveryData(UUID trackingID) { + public DeliveryData getDeliveryData(UUID trackingID) { String url = "http://[::1]:8082/status"; @@ -59,21 +59,21 @@ public class RestServiceForDelivery { HttpEntity entity = new HttpEntity<>(headers); - ResponseEntity response; + ResponseEntity response; try { - response = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, CustomerOrderController.DeliveryData.class); + response = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, DeliveryData.class); if (response.getStatusCode() == HttpStatus.OK) { return response.getBody(); } else { - return new CustomerOrderController.DeliveryData("Postserver gerade nicht erreichbar","--:--:----"); + return new DeliveryData("DHL-Server ist gerade nicht erreichbar","--:--:----"); } } catch (ResourceAccessException e) { - return new CustomerOrderController.DeliveryData("Postserver gerade nicht erreichbar","--:--:----"); + return new DeliveryData("DHL-Server gerade nicht erreichbar","--:--:----"); } } diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/UserController.java b/prototype/src/main/java/org/hso/ecommerce/controller/UserController.java index 8a90d43..1928c1b 100644 --- a/prototype/src/main/java/org/hso/ecommerce/controller/UserController.java +++ b/prototype/src/main/java/org/hso/ecommerce/controller/UserController.java @@ -1,10 +1,12 @@ package org.hso.ecommerce.controller; import org.hso.ecommerce.action.user.UpdateUserSettingsAction; +import org.hso.ecommerce.api.RestServiceForDelivery; import org.hso.ecommerce.entities.shop.CustomerOrder; import org.hso.ecommerce.entities.user.User; import org.hso.ecommerce.repos.shop.CustomerOrderRepository; import org.hso.ecommerce.repos.user.UserRepository; +import org.hso.ecommerce.uiModel.DeliveryData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -16,6 +18,9 @@ import org.springframework.web.bind.annotation.RequestParam; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; @Controller @RequestMapping("/user") @@ -27,6 +32,9 @@ public class UserController { @Autowired private final CustomerOrderRepository customerOrderRepository = null; + @Autowired + private final RestServiceForDelivery restServiceForDelivery = null; + @GetMapping("/") public String user() { return "redirect:/user/settings"; @@ -44,11 +52,16 @@ public class UserController { } @GetMapping("/orders/") - public String userOrdeers(HttpSession session, + public String userOrders(HttpSession session, Model model ) { - List orders = customerOrderRepository.getOrdersByUserId((long) session.getAttribute("userId")); - model.addAttribute("orders", orders); + List orders = customerOrderRepository.getAllOrders(); + + Map customerOrderDeliveryDataMap = orders.stream().collect + (Collectors.toMap + (Function.identity(), c -> DeliveryData.getDeliveryDataFromCustomerOrder(c,customerOrderRepository, restServiceForDelivery))); + + model.addAttribute("orderDeliveryDataMap", customerOrderDeliveryDataMap); return "user/orders/index"; } 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 af9b692..4c25dbe 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,9 +1,9 @@ package org.hso.ecommerce.controller.intern.customers; -import com.fasterxml.jackson.annotation.JsonCreator; import org.hso.ecommerce.api.RestServiceForDelivery; import org.hso.ecommerce.entities.shop.CustomerOrder; import org.hso.ecommerce.repos.shop.CustomerOrderRepository; +import org.hso.ecommerce.uiModel.DeliveryData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -11,9 +11,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; -import java.sql.Timestamp; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -33,7 +30,7 @@ public class CustomerOrderController { Map customerOrderDeliveryDataMap = orders.stream().collect (Collectors.toMap - (Function.identity(), this::getDeliveryDataFromCustomerOrder)); + (Function.identity(), c-> DeliveryData.getDeliveryDataFromCustomerOrder(c,customerOrderRepository,restServiceForDelivery))); model.addAttribute("orderDeliveryDataMap", customerOrderDeliveryDataMap); return "intern/customerOrders/index"; @@ -44,73 +41,11 @@ public class CustomerOrderController { @PathVariable("id") String id ) { CustomerOrder order = customerOrderRepository.findById(Long.parseLong(id)).get(); - DeliveryData deliveryData = getDeliveryDataFromCustomerOrder(order); + DeliveryData deliveryData = DeliveryData.getDeliveryDataFromCustomerOrder(order, customerOrderRepository,restServiceForDelivery); 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 = restServiceForDelivery.getDeliveryData(UUID.fromString(customerOrder.trackingId)); - - if(deliveryData.isDelivered()) - { - Calendar calendar = Calendar.getInstance(); - - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy"); - - try { - calendar.setTime(simpleDateFormat.parse(deliveryData.estimatedArrival)); - } catch (ParseException e) { - e.printStackTrace(); - } - - customerOrder.deliveredAt = new Timestamp(calendar.getTimeInMillis()); - customerOrderRepository.save(customerOrder); - } - - return deliveryData; - } - - SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); - return new CustomerOrderController.DeliveryData("Lieferung erfolgreich",formatter.format(customerOrder.deliveredAt)); - } - - public static class DeliveryData - { - - private final String status; - - private final String estimatedArrival; - - private boolean isDelivered; - - @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) - public DeliveryData(String status, String estimatedArrival) { - this.status = 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/intern/customers/CustomersIndexController.java b/prototype/src/main/java/org/hso/ecommerce/controller/intern/customers/CustomersIndexController.java index 3432770..d709948 100644 --- a/prototype/src/main/java/org/hso/ecommerce/controller/intern/customers/CustomersIndexController.java +++ b/prototype/src/main/java/org/hso/ecommerce/controller/intern/customers/CustomersIndexController.java @@ -118,3 +118,4 @@ public class CustomersIndexController { return "/intern/customers/id"; } } + 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 853b885..7628908 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 @@ -56,9 +56,4 @@ public class CustomerOrder { public String formatDeliveredAt(){ return new SimpleDateFormat("dd.MM.yyyy HH:mm").format(deliveredAt); } - - public String getEstimatedArrival() { - //TODO: get estimated arrival from api - return "TODO TODO TODO"; - } } diff --git a/prototype/src/main/java/org/hso/ecommerce/uiModel/DeliveryData.java b/prototype/src/main/java/org/hso/ecommerce/uiModel/DeliveryData.java new file mode 100644 index 0000000..c90ff3b --- /dev/null +++ b/prototype/src/main/java/org/hso/ecommerce/uiModel/DeliveryData.java @@ -0,0 +1,75 @@ +package org.hso.ecommerce.uiModel; + +import com.fasterxml.jackson.annotation.JsonCreator; +import org.hso.ecommerce.api.RestServiceForDelivery; +import org.hso.ecommerce.entities.shop.CustomerOrder; +import org.hso.ecommerce.repos.shop.CustomerOrderRepository; + +import java.sql.Timestamp; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.UUID; + + +public class DeliveryData +{ + + private final String status; + + private final String estimatedArrival; + + private boolean isDelivered; + + @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) + public DeliveryData(String status, String estimatedArrival) { + this.status = status; + this.estimatedArrival = estimatedArrival; + isDelivered = status.equals("Lieferung erfolgreich"); + } + + public static DeliveryData getDeliveryDataFromCustomerOrder(CustomerOrder customerOrder, CustomerOrderRepository customerOrderRepository, RestServiceForDelivery restServiceForDelivery) + { + if(customerOrder.trackingId == null) + return new DeliveryData("Bestellung wurde elektronisch angekündigt",""); + + if(customerOrder.deliveredAt == null) + { + DeliveryData deliveryData = restServiceForDelivery.getDeliveryData(UUID.fromString(customerOrder.trackingId)); + + if(deliveryData.isDelivered()) + { + Calendar calendar = Calendar.getInstance(); + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy"); + + try { + calendar.setTime(simpleDateFormat.parse(deliveryData.getEstimatedArrival())); + } catch (ParseException e) { + e.printStackTrace(); + } + + customerOrder.deliveredAt = new Timestamp(calendar.getTimeInMillis()); + customerOrderRepository.save(customerOrder); + } + + return deliveryData; + } + + SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); + return new DeliveryData("Lieferung erfolgreich",formatter.format(customerOrder.deliveredAt)); + } + + public boolean isDelivered() { + return isDelivered; + } + + public String getStatus() { + return status; + } + + public String getEstimatedArrival() { + return estimatedArrival; + } +} + diff --git a/prototype/src/main/resources/templates/user/orders/index.html b/prototype/src/main/resources/templates/user/orders/index.html index 023910d..5083f0b 100644 --- a/prototype/src/main/resources/templates/user/orders/index.html +++ b/prototype/src/main/resources/templates/user/orders/index.html @@ -21,22 +21,26 @@
-
-

+
+

- - + + + + + + - + -
LieferstatusUnterwegs
Vorraussichtliche Ankunft:
Angekommen
Ankunft:
Vorraussichtliche Ankunft: Angekommen Ankunft:
Sendeverfolgungsnummer
+
@@ -47,7 +51,7 @@ Menge Preis (Brutto) - + @@ -63,13 +67,13 @@ Artikel (Netto) - + Umsatzsteuer - + @@ -78,7 +82,7 @@

Gesammtpreis

-

+