From cb96c5493ebbb0767cf4d5b83544e131294225cb Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期四, 14 三月 2024 09:02:11 +0800
Subject: [PATCH] 111

---
 server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java |   93 ++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 89 insertions(+), 4 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..dc6cc10 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());
@@ -99,7 +178,7 @@
         // 鏍¢獙楠岃瘉鐮�
         if(type!= Constants.TWO){
             try {
-                if(!debugModel){
+                if(!debugModel&& checkSmsCode){
                     SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,dto.getPhone(), dto.getCode());
                 }
             } catch (Exception e) {
@@ -127,4 +206,10 @@
             throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), Objects.isNull(e.getCause())?ResponseStatus.ACCOUNT_INCORRECT.getMessage():e.getCause().getMessage());
         }
     }
+
+
+
+
+
+
 }

--
Gitblit v1.9.3