package de.rwth.idsg.bikeman.service; import de.rwth.idsg.bikeman.domain.CardAccount; import de.rwth.idsg.bikeman.domain.Pedelec; import de.rwth.idsg.bikeman.domain.StationSlot; import de.rwth.idsg.bikeman.domain.TransactionEvent; import de.rwth.idsg.bikeman.domain.TransactionType; import de.rwth.idsg.bikeman.psinterface.dto.request.StartTransactionDTO; import de.rwth.idsg.bikeman.psinterface.dto.request.StopTransactionDTO; import de.rwth.idsg.bikeman.repository.CardAccountRepository; import de.rwth.idsg.bikeman.repository.PedelecRepository; import de.rwth.idsg.bikeman.repository.StationSlotRepository; import de.rwth.idsg.bikeman.repository.TransactionEventRepository; import org.joda.time.LocalDateTime; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.inject.Inject; /** * Created by swam on 01/07/15. */ @Service @Transactional public class TransactionEventService { @Inject private CardAccountRepository cardAccountRepository; @Inject private PedelecRepository pedelecRepository; @Inject private StationSlotRepository stationSlotRepository; @Inject private TransactionEventRepository transactionEventRepository; @Async public void createAndSaveStartTransactionEvent(StartTransactionDTO startTransactionDTO) { CardAccount cardAccount = cardAccountRepository.findByCardId(startTransactionDTO.getCardId()); Pedelec pedelec = pedelecRepository.findByManufacturerId(startTransactionDTO.getPedelecManufacturerId()); StationSlot stationSlot = stationSlotRepository.findByManufacturerId( startTransactionDTO.getSlotManufacturerId(), startTransactionDTO.getStationManufacturerId()); LocalDateTime arrivedTimestamp = startTransactionDTO.getTimestamp().toLocalDateTime(); TransactionEvent transactionEvent = new TransactionEvent(); transactionEvent.setCardAccount(cardAccount); transactionEvent.setStationSlot(stationSlot); transactionEvent.setArrivedTimestamp(arrivedTimestamp); transactionEvent.setTimestamp(LocalDateTime.now()); transactionEvent.setPedelec(pedelec); transactionEvent.setStatus(null); transactionEvent.setType(TransactionType.START); transactionEventRepository.save(transactionEvent); } @Async public void createAndSaveStopTransactionEvent(StopTransactionDTO stopTransactionDTO) { Pedelec pedelec = pedelecRepository.findByManufacturerId(stopTransactionDTO.getPedelecManufacturerId()); StationSlot stationSlot = stationSlotRepository.findByManufacturerId( stopTransactionDTO.getSlotManufacturerId(), stopTransactionDTO.getStationManufacturerId()); LocalDateTime arrivedTimestamp = stopTransactionDTO.getTimestamp().toLocalDateTime(); TransactionEvent transactionEvent = new TransactionEvent(); transactionEvent.setPedelec(pedelec); transactionEvent.setStationSlot(stationSlot); transactionEvent.setArrivedTimestamp(arrivedTimestamp); transactionEvent.setTimestamp(LocalDateTime.now()); transactionEvent.setStatus(null); transactionEvent.setType(TransactionType.STOP); transactionEventRepository.save(transactionEvent); } }