diff --git a/prototype/src/main/java/org/hso/ecommerce/action/cronjob/ReorderAction.java b/prototype/src/main/java/org/hso/ecommerce/action/cronjob/ReorderAction.java
index 23599d8..7a329d5 100644
--- a/prototype/src/main/java/org/hso/ecommerce/action/cronjob/ReorderAction.java
+++ b/prototype/src/main/java/org/hso/ecommerce/action/cronjob/ReorderAction.java
@@ -1,8 +1,5 @@
package org.hso.ecommerce.action.cronjob;
-import java.sql.Timestamp;
-import java.util.HashMap;
-
import org.hso.ecommerce.action.cronjob.ReadSupplierDataAction.ArticleIdentifier;
import org.hso.ecommerce.action.cronjob.ReadSupplierDataAction.Offer;
import org.hso.ecommerce.api.SupplierService;
@@ -14,6 +11,9 @@ import org.hso.ecommerce.entities.supplier.SupplierOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.sql.Timestamp;
+import java.util.HashMap;
+
public class ReorderAction {
private static final Logger log = LoggerFactory.getLogger(ReorderAction.class);
@@ -102,6 +102,10 @@ public class ReorderAction {
createdOrder.numberOfUnits = confirm.quantity;
createdOrder.pricePerUnitNetCent = confirm.pricePerUnitNetCent;
createdOrder.totalPriceNet = confirm.totalPriceNetCharged;
+ createdOrder.carrier = confirm.carrier;
+ createdOrder.trackingId = confirm.trackingId;
+ createdOrder.estimatedArrival = Timestamp.valueOf(confirm.estimatedArrival);
+
return createdOrder;
}
}
diff --git a/prototype/src/main/java/org/hso/ecommerce/api/data/OrderConfirmation.java b/prototype/src/main/java/org/hso/ecommerce/api/data/OrderConfirmation.java
index 78c8285..f52fbf4 100644
--- a/prototype/src/main/java/org/hso/ecommerce/api/data/OrderConfirmation.java
+++ b/prototype/src/main/java/org/hso/ecommerce/api/data/OrderConfirmation.java
@@ -1,5 +1,7 @@
package org.hso.ecommerce.api.data;
+import java.time.LocalDateTime;
+
public class OrderConfirmation {
public String manufacturer;
public String articleNumber;
@@ -9,4 +11,8 @@ public class OrderConfirmation {
public int pricePerUnitNetCent;
public int discountNetCent;
public int totalPriceNetCharged;
+
+ public String carrier;
+ public String trackingId;
+ public LocalDateTime estimatedArrival;
}
diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierOrderController.java b/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierOrderController.java
index 3259a17..b50006e 100644
--- a/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierOrderController.java
+++ b/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierOrderController.java
@@ -20,7 +20,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
-import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -115,6 +114,10 @@ public class SupplierOrderController {
public String quantity;
public String priceTotal;
public boolean arrived;
+ public String carrier;
+ public String trackingId;
+ public String estimatedArrival;
+
public UImodelSupplierOrder(SupplierOrder order, Article article) {
this.id = order.id;
@@ -125,9 +128,13 @@ public class SupplierOrderController {
this.quantity = String.valueOf(order.numberOfUnits);
this.priceTotal = String.format("%.2f", ((float) order.totalPriceNet / 100));
- Date date = new Date();
- date.setTime(order.created.getTime());
- this.dateOrder = new SimpleDateFormat("dd.MM.yyyy").format(date);
+ this.carrier = order.carrier != null ? order.carrier : " - ";
+ this.trackingId = order.trackingId != null ? order.trackingId : " - ";
+ this.estimatedArrival = order.estimatedArrival != null
+ ? new SimpleDateFormat("yyyy.MM.dd HH:00").format(order.estimatedArrival) + " Uhr"
+ : " - ";
+
+ this.dateOrder = new SimpleDateFormat("yyyy.MM.dd").format(order.created);
arrived = order.delivered != null;
}
diff --git a/prototype/src/main/java/org/hso/ecommerce/entities/supplier/SupplierOrder.java b/prototype/src/main/java/org/hso/ecommerce/entities/supplier/SupplierOrder.java
index e92339c..af59500 100644
--- a/prototype/src/main/java/org/hso/ecommerce/entities/supplier/SupplierOrder.java
+++ b/prototype/src/main/java/org/hso/ecommerce/entities/supplier/SupplierOrder.java
@@ -28,6 +28,15 @@ public class SupplierOrder {
// Includes discounts
public int totalPriceNet;
+ @Column(nullable = true)
+ public String carrier;
+
+ @Column(nullable = true)
+ public String trackingId;
+
+ @Column(nullable = true)
+ public Timestamp estimatedArrival;
+
@Column(nullable = true)
public Timestamp delivered;
diff --git a/prototype/src/main/resources/templates/intern/supplierOrders/index.html b/prototype/src/main/resources/templates/intern/supplierOrders/index.html
index 84b58ec..27aa28e 100644
--- a/prototype/src/main/resources/templates/intern/supplierOrders/index.html
+++ b/prototype/src/main/resources/templates/intern/supplierOrders/index.html
@@ -47,7 +47,8 @@
|
|
|
- |
+ |
€ |
|
€ |
@@ -57,10 +58,13 @@
- Unterwegs
-
+ Geschätzte Ankunft: .
diff --git a/supplier/src/main/java/org/hso/ecommerce/supplier/RequestController.java b/supplier/src/main/java/org/hso/ecommerce/supplier/RequestController.java
index 013daaa..7c50401 100644
--- a/supplier/src/main/java/org/hso/ecommerce/supplier/RequestController.java
+++ b/supplier/src/main/java/org/hso/ecommerce/supplier/RequestController.java
@@ -1,5 +1,9 @@
package org.hso.ecommerce.supplier;
+import org.hso.ecommerce.supplier.carrier.Avian;
+import org.hso.ecommerce.supplier.carrier.Carrier;
+import org.hso.ecommerce.supplier.carrier.Posaidon;
+import org.hso.ecommerce.supplier.carrier.Shredder;
import org.hso.ecommerce.supplier.data.Article;
import org.hso.ecommerce.supplier.data.Order;
import org.hso.ecommerce.supplier.data.OrderConfirmation;
@@ -19,9 +23,13 @@ import java.util.List;
public class RequestController {
private final HashMap dailySalesVolumeCent = new HashMap<>();
- private final HashMap knownSuppliers = new HashMap<>();
+ private final HashMap knownSuppliers = new HashMap<>();
private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ private final Carrier[] carriers = new Carrier[]{
+ new Avian(), new Posaidon(), new Shredder()
+ };
+
@PostConstruct
public void init() throws IOException {
for (Supplier s : ConfigurationReader.read()) {
@@ -38,7 +46,7 @@ public class RequestController {
@GetMapping("/{supplier}/")
public Supplier supplier(HttpServletResponse res, @PathVariable("supplier") String supplierName) {
Supplier s = knownSuppliers.get(supplierName);
- if(s == null) {
+ if (s == null) {
res.setStatus(HttpServletResponse.SC_NOT_FOUND);
}
return s;
@@ -47,16 +55,16 @@ public class RequestController {
@PostMapping("/{supplier}/order")
public OrderConfirmation order(HttpServletResponse res, @PathVariable("supplier") String supplierName, @RequestBody Order order) {
Supplier s = knownSuppliers.get(supplierName);
- if(s == null) {
+ if (s == null) {
res.setStatus(HttpServletResponse.SC_NOT_FOUND);
return null;
}
String dateKey = simpleDateFormat.format(new Date());
- int dailyVolume = dailySalesVolumeCent.getOrDefault(dateKey,0);
+ int dailyVolume = dailySalesVolumeCent.getOrDefault(dateKey, 0);
Article a = s.findArticle(order.manufacturer, order.articleNumber);
- if(a == null) {
+ if (a == null) {
res.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return null;
}
@@ -72,6 +80,8 @@ public class RequestController {
}
int discount = (discountableNetAmount * s.discount.percentDiscount) / 100;
+ Carrier selectedCarrier = carriers[Math.abs((supplierName + java.time.LocalDate.now()).hashCode()) % carriers.length];
+
OrderConfirmation confirmation = new OrderConfirmation();
confirmation.articleNumber = order.articleNumber;
confirmation.discountNetCent = discount;
@@ -79,6 +89,9 @@ public class RequestController {
confirmation.manufacturer = a.manufacturer;
confirmation.quantity = order.quantity;
confirmation.totalPriceNetCharged = priceNet - discount;
+ confirmation.carrier = selectedCarrier.getName();
+ confirmation.trackingId = selectedCarrier.generateTrackingId();
+ confirmation.estimatedArrival = selectedCarrier.arrivalEstimate();
if (confirmation.totalPriceNetCharged > order.maxTotalPriceCentNet) {
res.setStatus(HttpServletResponse.SC_EXPECTATION_FAILED);
diff --git a/supplier/src/main/java/org/hso/ecommerce/supplier/carrier/Avian.java b/supplier/src/main/java/org/hso/ecommerce/supplier/carrier/Avian.java
new file mode 100644
index 0000000..281739d
--- /dev/null
+++ b/supplier/src/main/java/org/hso/ecommerce/supplier/carrier/Avian.java
@@ -0,0 +1,28 @@
+package org.hso.ecommerce.supplier.carrier;
+
+import java.time.LocalDateTime;
+import java.util.Random;
+
+public class Avian implements Carrier {
+ @Override
+ public String getName() {
+ return "Avian Carriers";
+ }
+
+ @Override
+ public String generateTrackingId() {
+ Random rnd = new Random();
+
+ return "2001-"
+ + Integer.toHexString(rnd.nextInt(0xFFFF))
+ + "--"
+ + Integer.toHexString(rnd.nextInt(0xFFFF))
+ + "-"
+ + Integer.toHexString(rnd.nextInt(0xFFFF));
+ }
+
+ @Override
+ public LocalDateTime arrivalEstimate() {
+ return LocalDateTime.now().plusHours(8);
+ }
+}
diff --git a/supplier/src/main/java/org/hso/ecommerce/supplier/carrier/Carrier.java b/supplier/src/main/java/org/hso/ecommerce/supplier/carrier/Carrier.java
new file mode 100644
index 0000000..1804618
--- /dev/null
+++ b/supplier/src/main/java/org/hso/ecommerce/supplier/carrier/Carrier.java
@@ -0,0 +1,12 @@
+package org.hso.ecommerce.supplier.carrier;
+
+import java.time.LocalDateTime;
+
+public interface Carrier {
+ public String getName();
+
+ public String generateTrackingId();
+
+ public LocalDateTime arrivalEstimate();
+}
+
diff --git a/supplier/src/main/java/org/hso/ecommerce/supplier/carrier/Posaidon.java b/supplier/src/main/java/org/hso/ecommerce/supplier/carrier/Posaidon.java
new file mode 100644
index 0000000..0f4caf4
--- /dev/null
+++ b/supplier/src/main/java/org/hso/ecommerce/supplier/carrier/Posaidon.java
@@ -0,0 +1,26 @@
+package org.hso.ecommerce.supplier.carrier;
+
+import java.time.LocalDateTime;
+import java.util.Random;
+
+public class Posaidon implements Carrier {
+ @Override
+ public String getName() {
+ return "Poseidon Inc.";
+ }
+
+ @Override
+ public String generateTrackingId() {
+ Random rnd = new Random();
+ return "WAT"
+ + Integer.toString(rnd.nextInt(Short.MAX_VALUE))
+ + "3"
+ + Integer.toString(rnd.nextInt(Short.MAX_VALUE))
+ + "R";
+ }
+
+ @Override
+ public LocalDateTime arrivalEstimate() {
+ return LocalDateTime.now().plusHours(50);
+ }
+}
diff --git a/supplier/src/main/java/org/hso/ecommerce/supplier/carrier/Shredder.java b/supplier/src/main/java/org/hso/ecommerce/supplier/carrier/Shredder.java
new file mode 100644
index 0000000..f91ddf3
--- /dev/null
+++ b/supplier/src/main/java/org/hso/ecommerce/supplier/carrier/Shredder.java
@@ -0,0 +1,31 @@
+package org.hso.ecommerce.supplier.carrier;
+
+import java.time.LocalDateTime;
+import java.util.Random;
+
+public class Shredder implements Carrier {
+
+ private Random rnd = new Random();
+
+ @Override
+ public String getName() {
+ return "Schree & Derr";
+ }
+
+ @Override
+ public String generateTrackingId() {
+ return "O" + d() + d() + d() + d() + d() + d() + d() + d() + d() + d() + d() + d() + d() + d() + d() + d() + d() + d() + "0";
+ }
+
+ @Override
+ public LocalDateTime arrivalEstimate() {
+ return LocalDateTime.now().plusHours(22);
+ }
+
+ /**
+ * @return a random digit followed by a dash.
+ */
+ private String d() {
+ return Integer.toString(rnd.nextInt(9)) + "-";
+ }
+}
diff --git a/supplier/src/main/java/org/hso/ecommerce/supplier/data/OrderConfirmation.java b/supplier/src/main/java/org/hso/ecommerce/supplier/data/OrderConfirmation.java
index f5e8101..5bce892 100644
--- a/supplier/src/main/java/org/hso/ecommerce/supplier/data/OrderConfirmation.java
+++ b/supplier/src/main/java/org/hso/ecommerce/supplier/data/OrderConfirmation.java
@@ -1,5 +1,7 @@
package org.hso.ecommerce.supplier.data;
+import java.time.LocalDateTime;
+
public class OrderConfirmation {
public String manufacturer;
public String articleNumber;
@@ -9,4 +11,8 @@ public class OrderConfirmation {
public int pricePerUnitNetCent;
public int discountNetCent;
public int totalPriceNetCharged;
+
+ public String carrier;
+ public String trackingId;
+ public LocalDateTime estimatedArrival;
}