935090232@qq.com
2021-04-14 95f9ea7eb339c36cade6c67d0385c49ec2d81477
zq-erp/src/main/java/com/matrix/system/common/authority/strategy/ScanQrCodeLogin.java
New file
@@ -0,0 +1,82 @@
package com.matrix.system.common.authority.strategy;
import com.matrix.component.websoket.WebSoketScanQrCodeLoginObserver;
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.common.bean.SysUserLoginRecord;
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.common.constance.AppConstance;
import com.matrix.system.common.constance.AppMessageCode;
import com.matrix.system.common.service.SysUsersService;
import java.util.Date;
/**
 * 账号密码登录策略
 *
 * @author JIANGYOUYAO
 * @email 935090232@qq.com
 * @date 2017年12月9日
 */
public class ScanQrCodeLogin implements LoginStrategy {
    private SysUsersService sysUsersService;
    private String loginQrCodeKey;
    public ScanQrCodeLogin(SysUsersService sysUsersService, String loginQrCodeKey) {
        this.sysUsersService = sysUsersService;
        this.loginQrCodeKey = loginQrCodeKey;
    }
    @Override
    public Object login() {
        Long loginUserId = WebSoketScanQrCodeLoginObserver.getScanCashValue(loginQrCodeKey);
        if (loginUserId != null) {
            SysUsers loginUser = sysUsersService.findById(loginUserId);
            if (loginUser != null) {
                addErrorLoginRecord(loginUser,AppConstance.LOGIN_SUCCESS);
                return loginUser;
            } else {
                LogUtil.error("登录失败");
                throw new GlobleException(AppMessageCode.User.ACCOUNT_NOT_EXIST);
            }
        }
        LogUtil.error("登录失败");
        throw new GlobleException(AppMessageCode.User.ACCOUNT_NOT_EXIST);
    }
    /**
     * 添加登录记录
     *
     * @param loginUser
     * @param loginResult
     * @author JIANGYOUYAO
     * @email 935090232@qq.com
     * @date 2017年12月12日
     */
    private void addErrorLoginRecord(SysUsers loginUser, int loginResult) {
        if (AppConstance.LOGIN_SUCCESS.equals(loginResult)) {
            sysUsersService.cleanUserTodayErrorLoginTime(loginUser.getSuAccount());
        }
        SysUserLoginRecord loginRecord = new SysUserLoginRecord();
        loginRecord.setCreateBy(MatrixConstance.SYSTEM_USER);
        loginRecord.setUpdateBy(MatrixConstance.SYSTEM_USER);
        loginRecord.setLrLoginTime(new Date());
        loginRecord.setLrId(null);
        loginRecord.setUserAccount(loginUser.getSuAccount());
        loginRecord.setLrResult(loginResult);
        loginRecord.setLrIp(WebUtil.getCustomerIp());
        loginRecord.setLrValid(AppConstance.RECORD_VALID);
        sysUsersService.addUserLoginRecord(loginRecord);
    }
}