package kundedb.service; import kundedb.models.Produkt; import models.CustomerModel; import models.OrderModel; import models.OrderStatus; import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import service.CustomerService; import service.OrderService; import service.PoseidonPropertyService; import service.PoseidonService; import java.util.List; public class KundedbService extends PoseidonService { private final static Logger logger = LoggerFactory.getLogger(KundedbService.class); private final OrderService orderService = new OrderService("akka"); private final CustomerService customerService = new CustomerService("akka"); private final KundedbSyncer syncer = new KundedbSyncer(); public KundedbService(String user) { super(user); } public KundedbSyncSummary syncKundedb() { logger.info("Starter kundedb.service.KundedbService.syncKundedb"); DateTime today = new DateTime(getToday(), getTimeZone()).withTimeAtStartOfDay(); //DateTime tomorrow = today.plusDays(1); DateTime yesterday = today.minusDays(1); KundedbSyncSummary summary = new KundedbSyncSummary(); // Sync customers List<CustomerModel> customers = customerService.findNewOrUpdatedCustomersSince(yesterday); if (customers != null && customers.size() > 0) { for (CustomerModel customer : customers) { logger.info("syncer kunde {}", customer.name); syncer.syncCustomer(customer); } summary.syncedCustomers = customers.size(); } // Delete inactive orders List<OrderModel> inactiveOrders = orderService.getInactiveOrdersForKundedb(); summary.deletedOrders = 0; if (inactiveOrders != null && inactiveOrders.size() > 0) { for (OrderModel order : inactiveOrders) { summary.deletedOrders += syncer.deleteKundefiler(order.id); syncer.deleteDatafil(order.id); } } // Sync orders List<OrderModel> orders = orderService.getActiveOrdersForKundedb(); if (orders != null && orders.size() > 0) { String produktnavn = PoseidonPropertyService.getProperty("kundedb.produkt"); Produkt produkt = Produkt.findByName(produktnavn); if (produkt != null) { for (OrderModel order : orders) { syncer.syncOrder(order, produkt); } summary.syncedOrders = orders.size(); } else { logger.warn("Kundedb produkt med navn {} ikke funnet i kundedb. Synking av ordre ikke utført", produktnavn); } } logger.info("kundedb.service.KundedbService.syncKundedb er ferdig: {}", summary); return summary; } public void syncKundeImmediately(CustomerModel customerModel) { logger.info("Starter kundedb.service.KundedbService.syncKundeImmediately"); syncer.syncCustomer(customerModel); } public void syncOrderImmediately(OrderModel orderModel) { logger.info("Starter kundedb.service.KundedbService.syncOrderImmediately for ordre med namn: {}", orderModel.position_name); String produktnavn = PoseidonPropertyService.getProperty("kundedb.produkt"); Produkt produkt = Produkt.findByName(produktnavn); if (produkt == null) { logger.error("Kundedb produkt med navn {} ikke funnet i kundedb. Synking av ordre ikke utført", produktnavn); //throw new PoseidonException(Http.Status.INTERNAL_SERVER_ERROR,"Fant ikke KundeDB produkt " + produktnavn); return; } DateTime now = new DateTime(PoseidonService.getTimeZone()); DateTime today = now.withTimeAtStartOfDay(); DateTime tomorrow = today.plusDays(1); DateTime start1 = new DateTime(orderModel.start_date1, PoseidonService.getTimeZone()).withTimeAtStartOfDay(); DateTime start2 = null; if (orderModel.start_date2 != null) { start2 = new DateTime(orderModel.start_date2, PoseidonService.getTimeZone()).withTimeAtStartOfDay(); } DateTime start3 = null; if (orderModel.start_date3 != null) { start3 = new DateTime(orderModel.start_date3, PoseidonService.getTimeZone()).withTimeAtStartOfDay(); } if (orderModel.orderStatus == OrderStatus.ACTIVE) { syncer.syncOrder(orderModel, produkt); } else if (start2 != null && start2.isEqual(today)) { syncer.syncOrder(orderModel, produkt); } else if (start1.isEqual(today)) { syncer.syncOrder(orderModel, produkt); } else { String startHourProp = PoseidonPropertyService.getProperty("kundedbsync.start_hour"); int startHour = Integer.valueOf(startHourProp); if (now.getHourOfDay() >= startHour) { if (start3 != null && start3.isEqual(tomorrow)) { syncer.syncOrder(orderModel, produkt); } else if (start2 != null && start2.isEqual(tomorrow)) { syncer.syncOrder(orderModel, produkt); } else if (start1.isEqual(tomorrow)) { syncer.syncOrder(orderModel, produkt); } } } } }