您好,登錄后才能下訂單哦!
1.自定義事件
a.創建包event
b.創建類LoginSuccessEvent
c.編寫類的內容
package com.huinongtx.power.consumer.event;
import com.huinongtx.power.consumer.request.account.LoginForm;
import com.huinongtx.power.consumer.vo.result.ResultVO;
import com.huinongtx.power.provider.dto.account.AccountDTO;
import lombok.Data;
import org.springframework.context.ApplicationEvent;
/**
?* @ClassName LoginSuccessEvent
?* @Description 登錄成功事件
?* @Author yunshuodeng
?* @Date 2019-04-25 10:43
?* @Version 1.0
?**/
@Data
public class LoginSuccessEvent extends ApplicationEvent {
? ? private ResultVO resultVO;
? ? private AccountDTO accountDTO;
? ? private LoginForm loginForm;
? ? public LoginSuccessEvent(Object source) {
? ? ? ? super(source);
? ? }
? ? public LoginSuccessEvent(Object source,ResultVO resultVO,AccountDTO accountDTO,LoginForm loginForm) {
? ? ? ? super(source);
? ? ? ? this.resultVO = resultVO;
? ? ? ? this.accountDTO = accountDTO;
? ? ? ? this.loginForm = loginForm;
? ? }
}
2.自定義監聽
a.創建包listener
b.創建類LoginSuccessListener
c.編寫類的實現
package com.huinongtx.power.consumer.listener;
import com.huinongtx.power.consumer.event.LoginSuccessEvent;
import com.huinongtx.power.consumer.repository.AccountRepository;
import com.huinongtx.power.consumer.request.account.LoginForm;
import com.huinongtx.power.consumer.util.IpUtil;
import com.huinongtx.power.provider.dto.account.AccountDTO;
import com.huinongtx.power.provider.dto.account.ModifyAccountLoginInfoDTO;
import com.huinongtx.power.provider.dto.result.ResultDTO;
import com.huinongtx.power.provider.util.TimeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
/**
?* @ClassName LoginSuccessListener
?* @Description TODO
?* @Author yunshuodeng
?* @Date 2019-04-25 10:49
?* @Version 1.0
?**/
@Async
@Component
public class LoginSuccessListener implements ApplicationListener<LoginSuccessEvent> {
? ? @Autowired
? ? private HttpServletRequest request;
? ? // 注入賬戶持久層
? ? @Autowired
? ? private AccountRepository accountRepository;
? ? public void onApplicationEvent(LoginSuccessEvent loginSuccessEvent) {
? ? ? ? if (loginSuccessEvent.getResultVO().getCode() == 0){
//? ? ? ? ? ? System.out.println("執行修改登錄信息操作");
? ? ? ? ? ? // 修改登錄相關信息
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? modifyLoginInfo(request,loginSuccessEvent.getAccountDTO(),loginSuccessEvent.getLoginForm());
? ? ? ? ? ? } catch (Exception e) {
? ? ? ? ? ? ? ? System.out.println(e.getMessage());
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? /**
? ? ?* 修改登錄信息
? ? ?* @param request
? ? ?* @param accountDTO
? ? ?* @param loginForm
? ? ?* @throws Exception
? ? ?*/
? ? private void modifyLoginInfo(HttpServletRequest request, AccountDTO accountDTO, LoginForm loginForm) throws Exception {
? ? ? ? // 獲取客戶端登錄IP
? ? ? ? String ip = IpUtil.getIpAddr(request);
? ? ? ? // 修改登錄相關信息
? ? ? ? ModifyAccountLoginInfoDTO modifyAccountLoginInfoDTO = new ModifyAccountLoginInfoDTO();
? ? ? ? modifyAccountLoginInfoDTO.setId(accountDTO.getId());
? ? ? ? modifyAccountLoginInfoDTO.setDeviceNo(loginForm.getDeviceNo());
? ? ? ? modifyAccountLoginInfoDTO.setPlatform(loginForm.getPlatform());
? ? ? ? modifyAccountLoginInfoDTO.setDevicePlatform(loginForm.getDevicePlatform());
? ? ? ? modifyAccountLoginInfoDTO.setLoginTime(TimeUtil.getCurrentTimeMillis());
? ? ? ? modifyAccountLoginInfoDTO.setLastLoginTime(TimeUtil.getCurrentTimeMillis());
? ? ? ? modifyAccountLoginInfoDTO.setIp(ip);
? ? ? ? Long count = StringUtils.isEmpty(accountDTO.getCount()) ? 0 : accountDTO.getCount();
? ? ? ? modifyAccountLoginInfoDTO.setCount(count+1);
? ? ? ? ResultDTO resultDTO = accountRepository.modifyAccountInfoByCondition(modifyAccountLoginInfoDTO);
? ? ? ? System.out.println(resultDTO.getState());
? ? }
}
3.發布事件
a.在service中注入spring 上下文
@Autowired
private ApplicationContext applicationContext;
b.在相應的業務方法中發布事件
// 代碼省略
// 發布事件
applicationContext.publishEvent(new LoginSuccessEvent(this,resultVO,accountDTO,loginForm));
// 代碼省略
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。