From 277f2d65a70bddbf9c571e2023315faad26e12d0 Mon Sep 17 00:00:00 2001 From: k94314517 <8417338+k94314517@user.noreply.gitee.com> Date: 星期一, 18 三月 2024 14:11:44 +0800 Subject: [PATCH] Merge branch 'master' into 1.0.1 --- server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java | 111 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 97 insertions(+), 14 deletions(-) diff --git a/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java b/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java index 2f0c381..0a9ff2d 100644 --- a/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java +++ b/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java @@ -1,5 +1,8 @@ package com.doumee.service.system.impl; +import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.api.R; import com.doumee.config.shiro.ShiroToken; import com.doumee.core.constants.ResponseStatus; @@ -7,15 +10,21 @@ import com.doumee.core.model.LoginUserInfo; import com.doumee.core.utils.Constants; import com.doumee.core.utils.Utils; +import com.doumee.core.wx.WxMiniConfig; import com.doumee.dao.business.SmsEmailMapper; +import com.doumee.dao.system.SystemUserMapper; import com.doumee.dao.system.dto.LoginDTO; import com.doumee.dao.system.dto.LoginPhoneDTO; +import com.doumee.dao.system.dto.WxMiniLoginDTO; import com.doumee.dao.system.model.SystemLoginLog; +import com.doumee.dao.system.model.SystemUser; import com.doumee.service.business.impl.SmsEmailServiceImpl; import com.doumee.service.common.CaptchaService; import com.doumee.service.system.SystemLoginLogService; import com.doumee.service.system.SystemLoginService; import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.subject.Subject; @@ -43,8 +52,77 @@ @Autowired private SystemLoginLogService systemLoginLogService; + @Autowired + private SystemUserMapper systemUserMapper; + + + /** + * 寰俊鎺堟潈锛堢櫥褰曞悗锛� + * @param code + */ @Override - public String loginByPassword(LoginDTO dto, int type,HttpServletRequest request) { + 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(),"寰俊鐧诲綍寮傚父锛佽鑱旂郴绠$悊鍛�"); + } + } + + + @Override + public String loginByWxMini (WxMiniLoginDTO wxMiniLoginDTO, HttpServletRequest request){ + if(StringUtils.isNotBlank(wxMiniLoginDTO.getCode())){ + try{ + WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(wxMiniLoginDTO.getCode()); + String openId = session.getOpenid(); + if (StringUtils.isNotBlank(openId)&&StringUtils.isBlank(wxMiniLoginDTO.getUsername())) { + SystemUser systemUser = systemUserMapper.selectOne(new QueryWrapper<SystemUser>() + .lambda().eq(SystemUser::getOpenid,openId) + .eq(SystemUser::getDeleted,Constants.ZERO) + .eq(SystemUser::getType,Constants.UserType.COMPANY.getKey()) + .orderByDesc(SystemUser::getCreateTime) + .last(" limit 1") + ); + if(Objects.nonNull(systemUser)){ + LoginPhoneDTO dto = new LoginPhoneDTO(); + dto.setPhone(systemUser.getMobile()); + return this.loginByPhone(dto,Constants.ZERO,false,request); + } + } + } catch (WxErrorException e) { + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"寰俊鐧诲綍寮傚父锛佽鑱旂郴绠$悊鍛�"); + } + } + if(StringUtils.isBlank(wxMiniLoginDTO.getUsername()) + || 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); + } + + @Override + public String loginByPassword(LoginDTO dto, int type,Boolean checkCaptcha,HttpServletRequest request) { SystemLoginLog loginLog = new SystemLoginLog(); loginLog.setLoginUsername(dto.getUsername()); loginLog.setLoginTime(new Date()); @@ -57,7 +135,7 @@ loginLog.setServerIp(Utils.Server.getIP()); // 鏍¢獙楠岃瘉鐮� try { - if(!debugModel){ + if(!debugModel&&checkCaptcha){ captchaService.check(dto.getUuid(), dto.getCode()); } } catch (Exception e) { @@ -84,8 +162,9 @@ throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), Objects.isNull(e.getCause())?ResponseStatus.ACCOUNT_INCORRECT.getMessage():e.getCause().getMessage()); } } + @Override - public String loginByPhone (LoginPhoneDTO dto, int type, HttpServletRequest request) { + public String loginByPhone (LoginPhoneDTO dto, int type,Boolean checkSmsCode, HttpServletRequest request) { SystemLoginLog loginLog = new SystemLoginLog(); loginLog.setLoginUsername(dto.getPhone()); loginLog.setLoginTime(new Date()); @@ -97,18 +176,16 @@ loginLog.setOsInfo(Utils.User_Client.getOS(request)); loginLog.setServerIp(Utils.Server.getIP()); // 鏍¢獙楠岃瘉鐮� - if(type!= Constants.TWO){ - try { - if(!debugModel){ - SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,dto.getPhone(), dto.getCode()); - } - } catch (Exception e) { - log.error(e.getMessage(), e); - loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage()); - loginLog.setSuccess(Boolean.FALSE); - systemLoginLogService.create(loginLog); - throw e; + try { + if(!debugModel&& checkSmsCode){ + SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,dto.getPhone(), dto.getCode()); } + } catch (Exception e) { + log.error(e.getMessage(), e); + loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage()); + loginLog.setSuccess(Boolean.FALSE); + systemLoginLogService.create(loginLog); + throw e; } // 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜 Subject subject = SecurityUtils.getSubject(); @@ -127,4 +204,10 @@ throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), Objects.isNull(e.getCause())?ResponseStatus.ACCOUNT_INCORRECT.getMessage():e.getCause().getMessage()); } } + + + + + + } -- Gitblit v1.9.3