소스 검색

钉钉登录对接

zhangshuling 1 년 전
부모
커밋
617861d4c2

+ 96 - 105
xzl-admin/src/main/java/com/xzl/web/controller/system/SysLoginController.java

@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Set;
 
 import com.xzl.web.service.UserPortraitService;
+
 import java.util.*;
 
 import com.dingtalk.api.response.OapiSnsGetuserinfoBycodeResponse;
@@ -26,123 +27,113 @@ import com.xzl.system.service.ISysMenuService;
 
 /**
  * 登录验证
- * 
+ *
  * @author xzl
  */
 @RestController
-public class SysLoginController
-{
-    @Autowired
-    private SysLoginService loginService;
-
-    @Autowired
-    private ISysMenuService menuService;
+public class SysLoginController {
+  @Autowired
+  private SysLoginService loginService;
 
-    @Autowired
-    private SysPermissionService permissionService;
+  @Autowired
+  private ISysMenuService menuService;
 
-    @Autowired
-    private UserPortraitMapper userPortraitMapper;
+  @Autowired
+  private SysPermissionService permissionService;
 
-    @Autowired
-    private UserPortraitService userPortraitService;
+  @Autowired
+  private UserPortraitMapper userPortraitMapper;
 
-    /**
-     * 登录方法
-     * 
-     * @param loginBody 登录信息
-     * @return 结果
-     */
-    @PostMapping("/login")
-    public AjaxResult login(@RequestBody LoginBody loginBody)
-    {
-        AjaxResult ajax = AjaxResult.success();
-        // 生成令牌
-        String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
-                loginBody.getUuid());
-        ajax.put(Constants.TOKEN, token);
-        // 登录NLP系统, 能执行到这一步,表示登录成功
-        ajax.put("NLPAuthData", userPortraitService.loginNLP(loginBody));
-        return ajax;
-    }
+  @Autowired
+  private UserPortraitService userPortraitService;
 
+  /**
+   * 登录方法
+   *
+   * @param loginBody 登录信息
+   * @return 结果
+   */
+  @PostMapping("/login")
+  public AjaxResult login(@RequestBody LoginBody loginBody) {
+    AjaxResult ajax = AjaxResult.success();
+    // 生成令牌
+    String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
+      loginBody.getUuid());
+    ajax.put(Constants.TOKEN, token);
+    // 登录NLP系统, 能执行到这一步,表示登录成功
+    ajax.put("NLPAuthData", userPortraitService.loginNLP(loginBody.getUsername()));
+    return ajax;
+  }
 
-    /**
-     * 钉钉登录
-     *
-     * @param code 钉钉id
-     * @return 结果
-     */
-    @PostMapping("/ddLogin")
-    public Map<String, String> ddLogin(String code) {
-        Map<String, String> result = new HashMap<>();
-        Map<String, String> map = new HashMap<>();
-        try {
-            OapiSnsGetuserinfoBycodeResponse ddlogin = DingTalkUtils.ddLogin(code);
-            if (ddlogin == null) {
-                result.put("status","error");
-                result.put("msg","扫码异常,请重新扫码");
-                return result;
-            }
-            if (ddlogin.getUserInfo() == null) {
-                result.put("status","error");
-                result.put("msg","不是内部员工");
-                return result;
-            }
-            String unionId = ddlogin.getUserInfo().getUnionid();
-            SysUser user=userPortraitMapper.getUserByDingUnionId(unionId);
-            if(user==null||user.getUserName().isEmpty()){
-                //获取ddID
-                String ID = DingTalkUtils.getUserInfo(unionId).getUserid();
-                user=userPortraitMapper.getUserByDingUsername(ID);
-                if(user==null||user.getUserName().isEmpty()){
-                    result.put("status","error");
-                    result.put("msg","用户不存在");
-                    return result;
-                }
 
-            }
-            // 证明取到user信息了, 调用模拟登录
-            // 生成令牌
-            String token = loginService.login(user);
-            result.put("status","success");
-            result.put("msg",token);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
+  /**
+   * 钉钉登录
+   *
+   * @param code 钉钉id
+   * @return 结果
+   */
+  @PostMapping("/ddLogin")
+  public AjaxResult ddLogin(String code) {
+    AjaxResult ajax = AjaxResult.success();
+    try {
+      OapiSnsGetuserinfoBycodeResponse ddlogin = DingTalkUtils.ddLogin(code);
+      if (ddlogin == null) {
+        return AjaxResult.success("扫码异常,请重新扫码");
+      }
+      if (ddlogin.getUserInfo() == null) {
+        return AjaxResult.success("不是内部员工");
+      }
+      String unionId = ddlogin.getUserInfo().getUnionid();
+      SysUser user = userPortraitMapper.getUserByDingUnionId(unionId);
+      if (user == null || user.getUserName().isEmpty()) {
+        //获取ddID
+        String ID = DingTalkUtils.getUserInfo(unionId).getUserid();
+        user = userPortraitMapper.getUserByDingUsername(ID);
+        if (user == null || user.getUserName().isEmpty()) {
+          return AjaxResult.success("用户不存在");
         }
-        return result;
+      }
+      // 证明取到user信息了, 调用模拟登录
+      // 生成令牌
+      String token = loginService.login(user);
+      ajax.put(Constants.TOKEN, token);
+      // 登录NLP系统, 能执行到这一步,表示登录成功
+      ajax.put("NLPAuthData", userPortraitService.loginNLP(user.getUserName()));
+      ajax.put("success",1);
+    } catch (Exception e) {
+      return AjaxResult.success(e.getMessage());
     }
+    return ajax;
+  }
 
-    /**
-     * 获取用户信息
-     * 
-     * @return 用户信息
-     */
-    @GetMapping("getInfo")
-    public AjaxResult getInfo()
-    {
-        SysUser user = SecurityUtils.getLoginUser().getUser();
-        // 角色集合
-        Set<String> roles = permissionService.getRolePermission(user);
-        // 权限集合
-        Set<String> permissions = permissionService.getMenuPermission(user);
-        AjaxResult ajax = AjaxResult.success();
-        ajax.put("user", user);
-        ajax.put("roles", roles);
-        ajax.put("permissions", permissions);
-        return ajax;
-    }
+  /**
+   * 获取用户信息
+   *
+   * @return 用户信息
+   */
+  @GetMapping("getInfo")
+  public AjaxResult getInfo() {
+    SysUser user = SecurityUtils.getLoginUser().getUser();
+    // 角色集合
+    Set<String> roles = permissionService.getRolePermission(user);
+    // 权限集合
+    Set<String> permissions = permissionService.getMenuPermission(user);
+    AjaxResult ajax = AjaxResult.success();
+    ajax.put("user", user);
+    ajax.put("roles", roles);
+    ajax.put("permissions", permissions);
+    return ajax;
+  }
 
-    /**
-     * 获取路由信息
-     * 
-     * @return 路由信息
-     */
-    @GetMapping("getRouters")
-    public AjaxResult getRouters()
-    {
-        Long userId = SecurityUtils.getUserId();
-        List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
-        return AjaxResult.success(menuService.buildMenus(menus));
-    }
+  /**
+   * 获取路由信息
+   *
+   * @return 路由信息
+   */
+  @GetMapping("getRouters")
+  public AjaxResult getRouters() {
+    Long userId = SecurityUtils.getUserId();
+    List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
+    return AjaxResult.success(menuService.buildMenus(menus));
+  }
 }

+ 1 - 1
xzl-admin/src/main/java/com/xzl/web/service/UserPortraitService.java

@@ -8,7 +8,7 @@ import java.util.Map;
 public interface UserPortraitService {
   List<String> getWordCloudInfo();
 
-  String loginNLP(LoginBody loginBody);
+  String loginNLP(String username);
 
   Map initByDingtalk() throws Exception;
 

+ 6 - 6
xzl-admin/src/main/java/com/xzl/web/service/impl/UserPortraitServiceImpl.java

@@ -55,14 +55,14 @@ public class UserPortraitServiceImpl implements UserPortraitService {
   }
 
 
-  public String loginNLP(LoginBody loginBody) {
-    SysUser sysUser = userService.selectUserByUserName(loginBody.getUsername());
-    String username = sysUser.getNlpName();
-    String password = sysUser.getNlpPwd();
+  public String loginNLP(String username) {
+    SysUser sysUser = userService.selectUserByUserName(username);
+    String nlpName = sysUser.getNlpName();
+    String nlpPwd = sysUser.getNlpPwd();
     // 调用登录
     Map loginForm = new HashMap();
-    loginForm.put("username", username);
-    loginForm.put("password", password);
+    loginForm.put("username", nlpName);
+    loginForm.put("password", nlpPwd);
     loginForm.put("userAgent", 1);
     loginForm.put("client", "zdwxxtyc");
     loginForm.put("saveUsername", true);

+ 7 - 4
xzl-ui/src/store/modules/user.js

@@ -59,11 +59,14 @@ const user = {
     },
 
     // 登录
-    DingTalkLogin({ commit }, token) {
+    DingTalkLogin({ commit }, res) {
       return new Promise((resolve, reject) => {
-        setToken(token)
-        commit('SET_TOKEN',token)
-        resolve()
+        setToken(res.token)
+        commit('SET_TOKEN', res.token)
+        if(res.NLPAuthData) {
+          setNLPAuthData(res.NLPAuthData)
+          commit('SET_NLPAUTHDATA', res.NLPAuthData)
+        }
       })
     },
 

+ 7 - 15
xzl-ui/src/views/dingtalk.vue

@@ -1,7 +1,3 @@
-<script setup>
-
-</script>
-
 <template>
 
 </template>
@@ -24,18 +20,14 @@ export default {
         url:"/ddLogin",
         method: "post",
         data: formData
-      }).then(rs=>{
-        if(rs.status=="success") {
-          this.$store.dispatch("DingTalkLogin", rs.token).then(() => {
-            this.$router.push({path: this.redirect || "/"}).catch(() => {
-            });
-          }).catch(() => {
-          });
-        }else if (rs.status=="error"){
-          this.$message({message:rs.msg,type:rs.status})
-          this.$router.push({path: this.redirect || "/"}).catch(() => {
-          });
+      }).then(res=>{
+        if(res.success) {
+          this.$store.dispatch("DingTalkLogin", res).then(() => {
+          }).catch(() => { });
+        } else {
+          this.$message.error(res.msg);
         }
+        this.$router.push({path: this.redirect || "/"}).catch(() => { });
       })
     }
   },