delivery auto planning draft
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
@@ -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<DeliveryForecastEntity, Long> {
|
||||
|
||||
void save(DeliveryForecastEntity entity);
|
||||
|
||||
List<DeliveryForecastEntity> findRefNoFrom(String refNo, Instant instant, int daysAhead);
|
||||
|
||||
void delete(String refNo, LocalDate date);
|
||||
void deleteByRefNoAndDate(String refNo, LocalDate date);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
15
app-monolith/src/test/resources/example.delivery.schema.json
Normal file
15
app-monolith/src/test/resources/example.delivery.schema.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"refNo": "3009000",
|
||||
"definitions": {
|
||||
"AtDayStart": {
|
||||
"06:00": 1
|
||||
},
|
||||
"TillDayEnd": {
|
||||
"22:00": 1
|
||||
},
|
||||
"Twice": {
|
||||
"16:00": 0.5,
|
||||
"20:00": 0.5
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ public class Demand {
|
||||
Schema schema;
|
||||
|
||||
public enum Schema {
|
||||
AtDayStart, Every3hours, TillDayEnd
|
||||
AtDayStart, Every3hours, TillDayEnd, Twice
|
||||
}
|
||||
|
||||
public static Demand nothingDemanded() {
|
||||
|
||||
Reference in New Issue
Block a user