package carpool.cleanRoutineTask; import java.util.ArrayList; import java.util.Calendar; import carpool.carpoolDAO.CarpoolDaoBasic; import carpool.carpoolDAO.CarpoolDaoMessage; import carpool.carpoolDAO.CarpoolDaoTransaction; import carpool.common.DateUtility; import carpool.common.DebugLog; import carpool.configurations.EnumConfig; import carpool.configurations.EnumConfig.TransactionState; import carpool.dbservice.NotificationDaoService; import carpool.exception.location.LocationNotFoundException; import carpool.exception.message.MessageNotFoundException; import carpool.exception.transaction.TransactionNotFoundException; import carpool.exception.user.UserNotFoundException; import carpool.model.Message; import carpool.model.Notification; import carpool.model.Transaction; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class TransactionCleaner extends CarpoolDaoTransaction { public static void Clean() throws LocationNotFoundException{ ArrayList<Notification> notificationQueue = new ArrayList<Notification>(); Calendar currentDate = DateUtility.getCurTimeInstance(); String ct=DateUtility.toSQLDateTime(currentDate); //System.out.println("currentTime: "+ct); Calendar DayLate = DateUtility.getCurTimeInstance(); DayLate.set(Calendar.HOUR_OF_DAY, 23); DayLate.set(Calendar.MINUTE,59); DayLate.set(Calendar.SECOND,59); String late = DateUtility.toSQLDateTime(DayLate); //System.out.println("lateTime: "+late); Calendar Yesterday = DateUtility.getCurTimeInstance(); Yesterday.add(Calendar.DAY_OF_YEAR, -1); String yesterday = DateUtility.toSQLDateTime(Yesterday); //System.out.println("yesterday: "+yesterday); ArrayList<Transaction> tlist = new ArrayList<Transaction>(); ArrayList<Integer> ilist = new ArrayList<Integer>(); ArrayList<Integer> milist = new ArrayList<Integer>(); Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; String query = "SELECT * FROM carpoolDAOTransaction where (transactionState = ? AND departure_Time > ? AND departure_Time <= ?) OR(transactionState = ? AND departure_Time >= ?);"; try{ conn = CarpoolDaoBasic.getSQLConnection(); stmt = conn.prepareStatement(query); stmt.setInt(1, EnumConfig.TransactionState.init.code); stmt.setString(2, ct); stmt.setString(3, late); stmt.setInt(4, EnumConfig.TransactionState.aboutToStart.code); stmt.setString(5, yesterday); rs = stmt.executeQuery(); while(rs.next()){ Transaction transaction = CarpoolDaoTransaction.createTransactionByResultSet(rs,conn); if(transaction.getState() == EnumConfig.TransactionState.init){ transaction.setState(TransactionState.aboutToStart); }else if(transaction.getState() == EnumConfig.TransactionState.aboutToStart){ transaction.setState(TransactionState.finished); } tlist.add(transaction); ilist = CarpoolDaoTransaction.addIds(ilist, transaction.getProviderId()); ilist = CarpoolDaoTransaction.addIds(ilist, transaction.getCustomerId()); milist = CarpoolDaoTransaction.addIds(milist, transaction.getMessageId()); } tlist = CarpoolDaoTransaction.fillTransactions(ilist, milist, tlist,conn); Transaction transaction = null; for(int i=0;i<tlist.size();i++){ transaction = tlist.get(i); CarpoolDaoTransaction.updateTransactionInDatabase(transaction,conn); //use the queue from notification service here notificationQueue.add(new Notification(EnumConfig.NotificationEvent.transactionAboutToStart, transaction.getProviderId(), transaction.getCustomerId(), transaction.getMessageId(), transaction.getTransactionId())); notificationQueue.add(new Notification(EnumConfig.NotificationEvent.transactionAboutToStart, transaction.getCustomerId(), transaction.getProviderId(), transaction.getMessageId(), transaction.getTransactionId())); } NotificationDaoService.sendNotification(notificationQueue,conn); } catch (SQLException e) { e.printStackTrace(); DebugLog.d(e); } catch (UserNotFoundException e) { e.printStackTrace(); } catch (MessageNotFoundException e) { e.printStackTrace(); } catch (TransactionNotFoundException e) { e.printStackTrace(); } finally{ CarpoolDaoBasic.closeResources(conn, stmt, rs, true); } } }