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