delivery auto planning draft

This commit is contained in:
Michał Michaluk
2017-12-05 09:43:00 +01:00
parent 39a810e4b3
commit a10180609c
8 changed files with 89 additions and 26 deletions

View File

@@ -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

View File

@@ -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) {
}
}

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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())
)
);
}
}

View 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
}
}
}

View File

@@ -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;
}
}

View File

@@ -8,7 +8,7 @@ public class Demand {
Schema schema;
public enum Schema {
AtDayStart, Every3hours, TillDayEnd
AtDayStart, Every3hours, TillDayEnd, Twice
}
public static Demand nothingDemanded() {