From cdd6551b190b981b807a3b95e9635c559ccc769d Mon Sep 17 00:00:00 2001 From: k94314517 <8417338+k94314517@user.noreply.gitee.com> Date: 星期一, 19 五月 2025 09:45:07 +0800 Subject: [PATCH] git ch --- server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java | 141 ++++++++++++++++++++++++++++++++-------------- 1 files changed, 97 insertions(+), 44 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 dc6cc10..056421e 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 @@ -3,7 +3,6 @@ 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; import com.doumee.core.exception.BusinessException; @@ -56,39 +55,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 +113,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 +130,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); @@ -147,12 +161,23 @@ } // 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜 Subject subject = SecurityUtils.getSubject(); - ShiroToken token = new ShiroToken(dto.getUsername(), dto.getPassword(),true,type); + ShiroToken token = new ShiroToken(dto.getUsername(), dto.getPassword(),true,type,null); try { subject.login(token); 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); @@ -176,22 +201,20 @@ loginLog.setOsInfo(Utils.User_Client.getOS(request)); loginLog.setServerIp(Utils.Server.getIP()); // 鏍¢獙楠岃瘉鐮� - if(type!= Constants.TWO){ - 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; + 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(); - ShiroToken token = new ShiroToken(dto.getPhone(), null,false,type); + ShiroToken token = new ShiroToken(dto.getPhone(), null,false,type,null); try { subject.login(token); loginLog.setUserId(((LoginUserInfo)subject.getPrincipal()).getId()); @@ -210,6 +233,36 @@ + @Override + public String switchCompany (LoginUserInfo loginUserInfo,Integer companyId, HttpServletRequest request) { + SystemLoginLog loginLog = new SystemLoginLog(); + loginLog.setLoginUsername(loginUserInfo.getMobile()); + loginLog.setLoginTime(new Date()); + loginLog.setSystemVersion(systemVersion); + loginLog.setIp(Utils.User_Client.getIP(request)); + loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp())); + loginLog.setPlatform(Utils.User_Client.getPlatform(request)); + loginLog.setClientInfo(Utils.User_Client.getBrowser(request)); + loginLog.setOsInfo(Utils.User_Client.getOS(request)); + loginLog.setServerIp(Utils.Server.getIP()); + + // 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜 + Subject subject = SecurityUtils.getSubject(); + ShiroToken token = new ShiroToken(loginUserInfo.getMobile(), null,false,loginUserInfo.getType(),companyId); + try { + subject.login(token); + loginLog.setUserId(((LoginUserInfo)subject.getPrincipal()).getId()); + loginLog.setSuccess(Boolean.TRUE); + systemLoginLogService.create(loginLog); + return (String)subject.getSession().getId(); + } catch (AuthenticationException e) { + log.error(ResponseStatus.ACCOUNT_INCORRECT.getMessage(), e); + loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage()); + loginLog.setSuccess(Boolean.FALSE); + systemLoginLogService.create(loginLog); + throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), Objects.isNull(e.getCause())?ResponseStatus.ACCOUNT_INCORRECT.getMessage():e.getCause().getMessage()); + } + } } -- Gitblit v1.9.3