k94314517
2024-07-30 d37bf55e27b7edb61037bccde6cabeda1ddec6b7
server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -56,39 +56,51 @@
    private SystemUserMapper systemUserMapper;
    /**
     * 微信授权(登录后)
     * @param code
     */
    @Override
    public String wxEmpower(String code,Integer userId){
        try {
            //获取微信敏感数据
            WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code);
            String openId = session.getOpenid();
            if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) {
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"获取openid失败!请联系管理员");
            }
            if(Objects.nonNull(userId)){
                systemUserMapper.update(null,new UpdateWrapper<SystemUser>()
                        .lambda().set(SystemUser::getOpenid,null)
                        .eq(SystemUser::getOpenid,openId)
                        .ne(SystemUser::getId,userId));
//    /**
//     * 微信授权(登录后)
//     * @param code
//     */
//    @Override
//    public String wxEmpower(String code,Integer userId){
//        try {
//            //获取微信敏感数据
//            WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code);
//            String openId = session.getOpenid();
//            if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) {
//                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"获取openid失败!请联系管理员");
//            }
//            if(Objects.nonNull(userId)){
//                systemUserMapper.update(null,new UpdateWrapper<SystemUser>()
//                        .lambda()
//                        .set(SystemUser::getOpenid,null)
//                        .eq(SystemUser::getOpenid,openId)
//                        .ne(SystemUser::getId,userId));
//
//                systemUserMapper.update(null,new UpdateWrapper<SystemUser>()
//                        .lambda()
//                        .set(SystemUser::getOpenid,openId)
//                        .eq(SystemUser::getId,userId));
//            }
//            return openId;
//        } catch (WxErrorException e) {
//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"微信登录异常!请联系管理员");
//        }
//    }
                systemUserMapper.update(null,new UpdateWrapper<SystemUser>()
                        .lambda()
                        .set(SystemUser::getOpenid,openId)
                        .eq(SystemUser::getId,userId));
            }
            return openId;
        } catch (WxErrorException e) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"微信登录异常!请联系管理员");
    @Override
    public void cleaOpenid(){
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(StringUtils.isNotBlank(loginUserInfo.getOpenid())){
            systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
                    .set(SystemUser::getOpenid,null)
                    .eq(SystemUser::getId,loginUserInfo.getId()));
        }
    }
    @Override
    public String loginByWxMini (WxMiniLoginDTO wxMiniLoginDTO, HttpServletRequest request){
        LoginDTO dto = new LoginDTO();
        if(StringUtils.isNotBlank(wxMiniLoginDTO.getCode())){
            try{
                WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(wxMiniLoginDTO.getCode());
@@ -102,10 +114,14 @@
                            .last(" limit 1")
                    );
                    if(Objects.nonNull(systemUser)){
                        LoginPhoneDTO dto = new LoginPhoneDTO();
                        dto.setPhone(systemUser.getMobile());
                        return this.loginByPhone(dto,Constants.ZERO,false,request);
                        LoginPhoneDTO loginPhoneDTO = new LoginPhoneDTO();
                        loginPhoneDTO.setPhone(systemUser.getMobile());
                        return  this.loginByPhone(loginPhoneDTO,Constants.ONE,false,request);
                    }else{
                        return null;
                    }
                }else{
                    dto.setOpenid(openId);
                }
            } catch (WxErrorException e) {
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"微信登录异常!请联系管理员");
@@ -115,7 +131,6 @@
                || StringUtils.isBlank(wxMiniLoginDTO.getPassword())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginDTO dto = new LoginDTO();
        dto.setUsername(wxMiniLoginDTO.getUsername());
        dto.setPassword(wxMiniLoginDTO.getPassword());
        return this.loginByPassword(dto,Constants.ONE,false,request);
@@ -153,6 +168,17 @@
            loginLog.setUserId(((LoginUserInfo)subject.getPrincipal()).getId());
            loginLog.setSuccess(Boolean.TRUE);
            systemLoginLogService.create(loginLog);
            //更新openid所属用户信息
            if(StringUtils.isNotBlank(dto.getOpenid())){
                systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
                        .set(SystemUser::getOpenid,null)
                        .eq(SystemUser::getOpenid,dto.getOpenid())
                        .ne(SystemUser::getId,loginLog.getUserId()));
                systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
                        .set(SystemUser::getOpenid,dto.getOpenid())
                        .eq(SystemUser::getId,loginLog.getUserId()));
            }
            return (String)subject.getSession().getId();
        } catch (AuthenticationException e) {
            log.error(ResponseStatus.ACCOUNT_INCORRECT.getMessage(), e);