80 lines
3.2 KiB
Java
80 lines
3.2 KiB
Java
|
package org.hso.ecommerce.controller.cronjob;
|
||
|
|
||
|
|
||
|
import org.hso.ecommerce.action.warehouse.CalculateWarehouseStatsAction;
|
||
|
import org.hso.ecommerce.entities.dashboard.DashboardSummary;
|
||
|
import org.hso.ecommerce.entities.warehouse.WarehouseBookingPositionSlotEntry;
|
||
|
import org.springframework.stereotype.Component;
|
||
|
|
||
|
import java.sql.Timestamp;
|
||
|
import java.util.Calendar;
|
||
|
import java.util.List;
|
||
|
import java.util.stream.Collectors;
|
||
|
|
||
|
@Component
|
||
|
public class DashboardCronjob implements ICronjob {
|
||
|
|
||
|
@Override
|
||
|
public Calendar nextExecution(Calendar reference) {
|
||
|
reference.add(Calendar.DAY_OF_MONTH, 1);
|
||
|
reference.set(Calendar.HOUR_OF_DAY, 0);
|
||
|
reference.set(Calendar.MINUTE, 0);
|
||
|
reference.set(Calendar.SECOND, 0);
|
||
|
reference.set(Calendar.MILLISECOND, 0);
|
||
|
return reference;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public Calendar previousExecution(Calendar reference) {
|
||
|
reference.set(Calendar.HOUR_OF_DAY, 0);
|
||
|
reference.set(Calendar.MINUTE, 0);
|
||
|
reference.set(Calendar.SECOND, 0);
|
||
|
reference.set(Calendar.MILLISECOND, 0);
|
||
|
return reference;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void executeAt(Calendar time, CronjobController controller) {
|
||
|
|
||
|
Calendar oneDayBefore = (Calendar) time.clone();
|
||
|
oneDayBefore.add(Calendar.DAY_OF_MONTH, -1);
|
||
|
|
||
|
DashboardSummary dashboardSummary = new DashboardSummary();
|
||
|
|
||
|
List<WarehouseBookingPositionSlotEntry> entries = controller.slotRepository.findAll().stream().map(
|
||
|
s -> controller.warehouseBookingPositionSlotEntryRepository
|
||
|
.getBySlotNum(s.slotNum)
|
||
|
.orElseGet(() -> WarehouseBookingPositionSlotEntry.empty(null, s))
|
||
|
).collect(Collectors.toList());
|
||
|
CalculateWarehouseStatsAction.WarehouseStats warehouseStats = new CalculateWarehouseStatsAction(entries).finish();
|
||
|
|
||
|
dashboardSummary.created = new java.sql.Date(time.getTimeInMillis());
|
||
|
dashboardSummary.todaysCustomersOrders = getSales(oneDayBefore, time, controller);
|
||
|
|
||
|
dashboardSummary.todaysNewCustomers = getNewUsers(oneDayBefore, time, controller);
|
||
|
dashboardSummary.todaysWarehouseCapacity = warehouseStats.efficiency;
|
||
|
dashboardSummary.currentWarehouseCapacity = warehouseStats.ratioUsedSlots;
|
||
|
dashboardSummary.todaysSalesCent = getTurnover(oneDayBefore, time, controller);
|
||
|
|
||
|
controller.dashboardSummaryRepository.save(dashboardSummary);
|
||
|
}
|
||
|
|
||
|
private Integer getSales (Calendar begin, Calendar end, CronjobController controller)
|
||
|
{
|
||
|
return controller.customerOrderRepository.countOrdersInTimespan(
|
||
|
new Timestamp(begin.getTimeInMillis()), new Timestamp(end.getTimeInMillis()));
|
||
|
}
|
||
|
|
||
|
private Integer getTurnover (Calendar begin, Calendar end, CronjobController controller)
|
||
|
{
|
||
|
return controller.customerOrderRepository.countTurnoverInTimespan(
|
||
|
new Timestamp(begin.getTimeInMillis()), new Timestamp(end.getTimeInMillis()));
|
||
|
}
|
||
|
|
||
|
private Integer getNewUsers (Calendar begin, Calendar end, CronjobController controller)
|
||
|
{
|
||
|
return controller.userRepository.countUsersInTimespan(
|
||
|
new Timestamp(begin.getTimeInMillis()), new Timestamp(end.getTimeInMillis()));
|
||
|
}
|
||
|
}
|