From a10180609cf3742f5efa3d82e5066b197ebf5ea9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Michaluk?= Date: Tue, 5 Dec 2017 09:43:00 +0100 Subject: [PATCH] delivery auto planning draft --- .../forecasting/DemandEventsMapping.java | 4 +- .../projection/CurrentDemandsProjection.java | 12 ------ .../projection/DeliveryForecastDao.java | 14 +++---- .../projection/DeliveryForecastEntity.java | 22 +++++++++-- .../DeliveryForecastProjection.java | 37 +++++++++++++++++++ .../resources/example.delivery.schema.json | 15 ++++++++ .../DeliveryAutoPlannerRepository.java | 9 +++++ .../factory/demand/forecasting/Demand.java | 2 +- 8 files changed, 89 insertions(+), 26 deletions(-) delete mode 100644 app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/CurrentDemandsProjection.java create mode 100644 app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/DeliveryForecastProjection.java create mode 100644 app-monolith/src/test/resources/example.delivery.schema.json create mode 100644 demand-forecasting-model/src/main/java/pl/com/bottega/factory/delivery/planning/DeliveryAutoPlannerRepository.java diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEventsMapping.java b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEventsMapping.java index 7223d4e..637cdb9 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEventsMapping.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/DemandEventsMapping.java @@ -2,13 +2,13 @@ package pl.com.bottega.factory.demand.forecasting; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; -import pl.com.bottega.factory.demand.forecasting.projection.CurrentDemandsProjection; +import pl.com.bottega.factory.demand.forecasting.projection.DeliveryForecastProjection; @Lazy @Component class DemandEventsMapping implements DemandEvents { - CurrentDemandsProjection demands; + DeliveryForecastProjection demands; //ShortagePredictionMapping predictions; @Override diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/CurrentDemandsProjection.java b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/CurrentDemandsProjection.java deleted file mode 100644 index 9f73446..0000000 --- a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/CurrentDemandsProjection.java +++ /dev/null @@ -1,12 +0,0 @@ -package pl.com.bottega.factory.demand.forecasting.projection; - -import lombok.AllArgsConstructor; -import pl.com.bottega.factory.demand.forecasting.DemandEvents; - -@AllArgsConstructor -public class CurrentDemandsProjection implements DemandEvents { - - @Override - public void emit(DemandedLevelsChanged event) { - } -} diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/DeliveryForecastDao.java b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/DeliveryForecastDao.java index 1de21e3..8d33059 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/DeliveryForecastDao.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/DeliveryForecastDao.java @@ -1,14 +1,12 @@ package pl.com.bottega.factory.demand.forecasting.projection; -import java.time.Instant; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + import java.time.LocalDate; -import java.util.List; -public interface DeliveryForecastDao { +@Repository +public interface DeliveryForecastDao extends JpaRepository { - void save(DeliveryForecastEntity entity); - - List findRefNoFrom(String refNo, Instant instant, int daysAhead); - - void delete(String refNo, LocalDate date); + void deleteByRefNoAndDate(String refNo, LocalDate date); } diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/DeliveryForecastEntity.java b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/DeliveryForecastEntity.java index 441ce8e..3f90454 100644 --- a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/DeliveryForecastEntity.java +++ b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/DeliveryForecastEntity.java @@ -1,17 +1,33 @@ package pl.com.bottega.factory.demand.forecasting.projection; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import javax.persistence.*; +import java.time.LocalDate; import java.time.LocalDateTime; @Data +@Entity(name = "DeliveryForecast") +@NoArgsConstructor +@EqualsAndHashCode(of = "id") public class DeliveryForecastEntity { - private final String refNo; - private final LocalDateTime time; - private final long level; + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + @Column + private String refNo; + @Column + private LocalDate date; + @Column + private LocalDateTime time; + @Column + private long level; public DeliveryForecastEntity(String refNo, LocalDateTime time, long level) { this.refNo = refNo; + this.date = time.toLocalDate(); this.time = time; this.level = level; } diff --git a/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/DeliveryForecastProjection.java b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/DeliveryForecastProjection.java new file mode 100644 index 0000000..87ef55e --- /dev/null +++ b/app-monolith/src/main/java/pl/com/bottega/factory/demand/forecasting/projection/DeliveryForecastProjection.java @@ -0,0 +1,37 @@ +package pl.com.bottega.factory.demand.forecasting.projection; + +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; +import pl.com.bottega.factory.delivery.planning.DeliveryAutoPlanner; +import pl.com.bottega.factory.delivery.planning.DeliveryAutoPlannerRepository; +import pl.com.bottega.factory.demand.forecasting.DemandEvents; + +@Component +@AllArgsConstructor +public class DeliveryForecastProjection implements DemandEvents { + + DeliveryForecastDao forecastDao; + DeliveryAutoPlannerRepository planners; + + @Override + public void emit(DemandedLevelsChanged event) { + event.getResults().keySet() + .forEach(daily -> forecastDao.deleteByRefNoAndDate( + daily.getRefNo(), + daily.getDate()) + ); + + DeliveryAutoPlanner planner = planners.get(event.getId()); + event.getResults().entrySet().stream() + .flatMap(entry -> planner.propose( + entry.getKey().getDate(), + entry.getValue().getCurrent())) + .forEach(delivery -> + forecastDao.save(new DeliveryForecastEntity( + delivery.getRefNo(), + delivery.getTime(), + delivery.getLevel()) + ) + ); + } +} diff --git a/app-monolith/src/test/resources/example.delivery.schema.json b/app-monolith/src/test/resources/example.delivery.schema.json new file mode 100644 index 0000000..7cdbcef --- /dev/null +++ b/app-monolith/src/test/resources/example.delivery.schema.json @@ -0,0 +1,15 @@ +{ + "refNo": "3009000", + "definitions": { + "AtDayStart": { + "06:00": 1 + }, + "TillDayEnd": { + "22:00": 1 + }, + "Twice": { + "16:00": 0.5, + "20:00": 0.5 + } + } +} diff --git a/demand-forecasting-model/src/main/java/pl/com/bottega/factory/delivery/planning/DeliveryAutoPlannerRepository.java b/demand-forecasting-model/src/main/java/pl/com/bottega/factory/delivery/planning/DeliveryAutoPlannerRepository.java new file mode 100644 index 0000000..8d750d0 --- /dev/null +++ b/demand-forecasting-model/src/main/java/pl/com/bottega/factory/delivery/planning/DeliveryAutoPlannerRepository.java @@ -0,0 +1,9 @@ +package pl.com.bottega.factory.delivery.planning; + +import pl.com.bottega.factory.product.management.RefNoId; + +public class DeliveryAutoPlannerRepository { + public DeliveryAutoPlanner get(RefNoId refNo) { + return null; + } +} diff --git a/shared-kernel-model/src/main/java/pl/com/bottega/factory/demand/forecasting/Demand.java b/shared-kernel-model/src/main/java/pl/com/bottega/factory/demand/forecasting/Demand.java index 1e599bf..50030e6 100644 --- a/shared-kernel-model/src/main/java/pl/com/bottega/factory/demand/forecasting/Demand.java +++ b/shared-kernel-model/src/main/java/pl/com/bottega/factory/demand/forecasting/Demand.java @@ -8,7 +8,7 @@ public class Demand { Schema schema; public enum Schema { - AtDayStart, Every3hours, TillDayEnd + AtDayStart, Every3hours, TillDayEnd, Twice } public static Demand nothingDemanded() {