package com.mossle.user.component; import java.util.Date; import javax.annotation.Resource; import com.mossle.core.auth.LoginEvent; import com.mossle.core.auth.LogoutEvent; import com.mossle.user.persistence.domain.AccountOnline; import com.mossle.user.persistence.manager.AccountOnlineManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; @Component public class AccountOnlineListener implements ApplicationListener { private static Logger logger = LoggerFactory .getLogger(AccountOnlineListener.class); private AccountOnlineManager accountOnlineManager; public void onApplicationEvent(ApplicationEvent event) { try { if (event instanceof LoginEvent) { LoginEvent loginEvent = (LoginEvent) event; logger.debug("login : {}", loginEvent); AccountOnline accountOnline = new AccountOnline(); accountOnline.setAccount(loginEvent.getUserId()); accountOnline.setSessionId(loginEvent.getSessionId()); accountOnline.setLoginTime(new Date()); accountOnline.setTenantId(loginEvent.getTenantId()); accountOnlineManager.save(accountOnline); } if (event instanceof LogoutEvent) { LogoutEvent logoutEvent = (LogoutEvent) event; logger.debug("logout : {}", logoutEvent); AccountOnline accountOnline = accountOnlineManager .findUniqueBy("sessionId", logoutEvent.getSessionId()); if (accountOnline == null) { accountOnline = accountOnlineManager.findUniqueBy( "account", logoutEvent.getUserId()); } logger.debug("sessionId : {}", logoutEvent.getSessionId()); logger.debug("accountOnline : {}", accountOnline); if (accountOnline != null) { accountOnlineManager.remove(accountOnline); } } } catch (Exception ex) { logger.error(ex.getMessage(), ex); } } @Resource public void setAccountOnlineManager( AccountOnlineManager accountOnlineManager) { this.accountOnlineManager = accountOnlineManager; } }