登錄成功-修改登錄相關信息-通過事件監聽方式完成-實現方式一

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));

// 代碼省略


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章