Переглянути джерело

修改企业微信登录逻辑

xuzuoyun 5 роки тому
батько
коміт
08fecba44b

+ 72 - 5
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CallbackController.java

@@ -13,7 +13,27 @@ import cn.com.ctop.toutiao.entity.ByteDanceAdvertiser;
 import cn.com.ctop.toutiao.service.IByteDanceAdvertiserDataService;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.val;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.api.WxCpOAuth2Service;
+import me.chanjar.weixin.cp.api.WxCpUserService;
+import me.chanjar.weixin.cp.api.impl.WxCpOAuth2ServiceImpl;
+import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
+import me.chanjar.weixin.cp.api.impl.WxCpUserServiceImpl;
+import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo;
+import me.chanjar.weixin.cp.bean.WxCpUser;
+import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
 import org.apache.commons.lang.StringUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.api.ISysBaseApi;
+import org.jeecg.common.system.util.JwtUtil;
+import org.jeecg.common.util.RedisUtil;
+import org.jeecg.modules.system.entity.SysDepart;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysDepartService;
+import org.jeecg.modules.system.service.ISysLogService;
+import org.jeecg.modules.system.service.ISysUserService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,14 +45,25 @@ import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @Controller
 public class CallbackController {
     private static final Logger logger = LoggerFactory.getLogger(CallbackController.class);
-
+    @Autowired
+    private ISysUserService sysUserService;
+    @Autowired
+    private ISysBaseApi sysBaseApi;
+    @Autowired
+    private ISysLogService logService;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private ISysDepartService sysDepartService;
     @Autowired
     private IKuaishouInterfaceService kuaishouInterfaceService;
 
@@ -47,10 +78,46 @@ public class CallbackController {
 
     @GetMapping("/qywexin")
     @ResponseBody
-    public String qywexin(HttpServletRequest request,
-                          HttpServletResponse response){
-        System.out.println(request.getQueryString());
-        return request.getQueryString();
+    public void qywexin(HttpServletRequest request,
+                          HttpServletResponse response,
+                          @RequestParam("code") String code,
+                          @RequestParam("state") String state) throws IOException {
+        response.sendRedirect(state+"?code="+code);
+    }
+
+    /**
+     * 用户信息
+     *
+     * @param sysUser
+     * @param result
+     * @return
+     */
+    private Result<JSONObject> userInfo(SysUser sysUser, Result<JSONObject> result) {
+        String syspassword = sysUser.getPassword();
+        String username = sysUser.getUsername();
+        // 生成token
+        String token = JwtUtil.sign(username, syspassword);
+        redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
+        // 设置超时时间
+        redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 1000);
+
+        // 获取用户部门信息
+        JSONObject obj = new JSONObject();
+        List<SysDepart> departs = sysDepartService.queryUserDeparts(sysUser.getId());
+        obj.put("departs", departs);
+        if (departs == null || departs.size() == 0) {
+            obj.put("multi_depart", 0);
+        } else if (departs.size() == 1) {
+            sysUserService.updateUserDepart(username, departs.get(0).getOrgCode());
+            obj.put("multi_depart", 1);
+        } else {
+            obj.put("multi_depart", 2);
+        }
+        obj.put("token", token);
+        obj.put("userInfo", sysUser);
+        result.setResult(obj);
+        result.success("登录成功");
+        return result;
     }
     /**
      * TODO 授权绑定成功/失败 需要跳转特定页面

+ 48 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/LoginController.java

@@ -8,6 +8,16 @@ import com.aliyuncs.exceptions.ClientException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import lombok.val;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.api.WxCpOAuth2Service;
+import me.chanjar.weixin.cp.api.WxCpUserService;
+import me.chanjar.weixin.cp.api.impl.WxCpOAuth2ServiceImpl;
+import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
+import me.chanjar.weixin.cp.api.impl.WxCpUserServiceImpl;
+import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo;
+import me.chanjar.weixin.cp.bean.WxCpUser;
+import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.subject.Subject;
 import org.jeecg.common.api.vo.Result;
@@ -53,6 +63,44 @@ public class LoginController {
     @Autowired
     private ISysDepartService sysDepartService;
 
+    @RequestMapping(value = "/wxlogin", method = RequestMethod.POST)
+    @ApiOperation("企业微信登录接口")
+    public Result<JSONObject> wxlogin(@RequestParam("code") String code) throws Exception {
+        Result<JSONObject> result = new Result<JSONObject>();
+        val configStorage = new WxCpDefaultConfigImpl();
+        configStorage.setCorpId("ww24b8a47826f5875f");
+        configStorage.setAgentId(1000002);
+        configStorage.setCorpSecret("MJIlySADGPlgvADnkFQPUpfZD4yV-4WN6066OgNnb0s");
+        configStorage.setToken("hcst2019");
+        configStorage.setAesKey("hcst2019");
+        val service = new WxCpServiceImpl();
+
+        service.setWxCpConfigStorage(configStorage);
+        WxCpOAuth2Service wxCpOAuth2Service = new WxCpOAuth2ServiceImpl(service);
+        try {
+            WxCpOauth2UserInfo userInfo = wxCpOAuth2Service.getUserInfo(1000002,code);
+            if (userInfo != null && userInfo.getUserId()!=null){
+                WxCpUserService wxCpUserService = new WxCpUserServiceImpl(service);
+                WxCpUser user = wxCpUserService.getById(userInfo.getUserId());
+                String email = user.getEmail();
+                SysUser sysUser = sysUserService.getUserByName(email);
+                String departId = sysDepartService.selectIdByOrdCode(sysUser.getOrgCode());
+                sysUser.setDepartId(departId);
+                result = sysUserService.checkUserIsEffective(sysUser);
+                if (!result.isSuccess()) {
+                    return result;
+                }
+                //用户登录信息
+                userInfo(sysUser, result);
+                sysBaseApi.addLog("用户名: " + email + ",登录成功!", CommonConstant.LOG_TYPE_1, null);
+                return result;
+            }
+        } catch (WxErrorException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
     @RequestMapping(value = "/login", method = RequestMethod.POST)
     @ApiOperation("登录接口")
     public Result<JSONObject> login(@RequestBody SysLoginModel sysLoginModel) throws Exception {

+ 23 - 2
module-common/src/main/java/cn/com/ctop/common/module/service/impl/CorpWeixinServiceImpl.java

@@ -1,13 +1,22 @@
 package cn.com.ctop.common.module.service.impl;
 
 import cn.com.ctop.common.module.service.ICorpWeixinService;
+import com.google.gson.Gson;
 import lombok.extern.slf4j.Slf4j;
 import lombok.val;
 import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.api.WxCpChatService;
 import me.chanjar.weixin.cp.api.WxCpOAuth2Service;
 import me.chanjar.weixin.cp.api.WxCpService;
+import me.chanjar.weixin.cp.api.WxCpUserService;
+import me.chanjar.weixin.cp.api.impl.WxCpChatServiceImpl;
 import me.chanjar.weixin.cp.api.impl.WxCpOAuth2ServiceImpl;
 import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
+import me.chanjar.weixin.cp.api.impl.WxCpUserServiceImpl;
+import me.chanjar.weixin.cp.bean.WxCpAppChatMessage;
+import me.chanjar.weixin.cp.bean.WxCpMessage;
+import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo;
+import me.chanjar.weixin.cp.bean.WxCpUser;
 import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
 import org.springframework.stereotype.Service;
 
@@ -22,11 +31,23 @@ public class CorpWeixinServiceImpl implements ICorpWeixinService {
         configStorage.setToken("hcst2019");
         configStorage.setAesKey("hcst2019");
         val service = new WxCpServiceImpl();
+
         service.setWxCpConfigStorage(configStorage);
         WxCpOAuth2Service wxCpOAuth2Service = new WxCpOAuth2ServiceImpl(service);
         try {
-            wxCpOAuth2Service.getUserInfo(1000002,"");
-        }catch (WxErrorException e){
+//            WxCpOauth2UserInfo userInfo = wxCpOAuth2Service.getUserInfo(1000002,"_Mq0Dx1dynryHsgBkoU1dAk5A3Y7lrfg8V0GDv4ocWQ");
+//            System.out.println(new Gson().toJson(userInfo));
+//            WxCpUserService wxCpUserService = new WxCpUserServiceImpl(service);
+//            WxCpUser user = wxCpUserService.getById("YiErSanSi");
+//            System.out.println(new Gson().toJson(user));
+            WxCpMessage message = new WxCpMessage();
+            message.setToUser("YiErSanSi");
+            message.setAgentId(1000002);
+            message.setContent("测试消息");
+            message.setMsgType("text");
+            service.messageSend(message);
+//            service.post("https://qyapi.weixin.qq.com/cgi-bin/message/send","touser=YiErSanSi&content=123&agentid=1000002&msgtype=text");
+        }catch (Exception e){
             e.printStackTrace();
         }