From b1c311a21d652fc315ca32e8dd10dbd7d7921c9a Mon Sep 17 00:00:00 2001 From: wulin Date: Fri, 21 Aug 2020 15:48:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=92=89=E9=92=89=E5=85=8D?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/lz/common/utils/DingTalkUtil.java | 79 ++++++++++++++++--- src/main/java/com/lz/config/ShiroConfig.java | 1 + .../java/com/lz/modules/app/dao/StaffDao.java | 1 + .../lz/modules/app/service/StaffService.java | 2 + .../app/service/impl/StaffServiceImpl.java | 5 ++ .../job/business/DingtalkBusiness.java | 9 +++ .../controller/DingTalkLoginController.java | 26 ++++++ .../modules/third/entity/ThirdAppConfig.java | 15 +--- .../resources/mapper/generator/StaffDao.xml | 4 + 9 files changed, 118 insertions(+), 24 deletions(-) create mode 100644 src/main/java/com/lz/modules/third/controller/DingTalkLoginController.java diff --git a/src/main/java/com/lz/common/utils/DingTalkUtil.java b/src/main/java/com/lz/common/utils/DingTalkUtil.java index 2825d0ae..9e8e32df 100644 --- a/src/main/java/com/lz/common/utils/DingTalkUtil.java +++ b/src/main/java/com/lz/common/utils/DingTalkUtil.java @@ -8,14 +8,18 @@ import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.request.*; import com.dingtalk.api.response.*; import com.lz.modules.app.entity.StaffEntity; +import com.lz.modules.app.service.StaffService; import com.lz.modules.job.model.responseBo.DepartmentInfosBo; import com.lz.modules.job.model.responseBo.DepartmentStaffBo; +import com.lz.modules.sys.entity.SysUserEntity; +import com.lz.modules.sys.service.SysUserTokenService; import com.lz.modules.third.entity.ThirdAppConfig; import com.lz.modules.third.entity.ThirdMsgSendRecord; import com.lz.modules.third.service.ThirdAppConfigService; import com.lz.modules.third.service.ThirdMsgSendRecordService; import com.lz.modules.third.service.impl.ThirdAppConfigServiceImpl; import com.taobao.api.ApiException; +import net.bytebuddy.implementation.bytecode.Throw; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; @@ -62,6 +66,12 @@ public class DingTalkUtil { @Autowired ThirdMsgSendRecordService thirdMsgSendRecordService; + @Autowired + StaffService staffService; + + @Autowired + private SysUserTokenService sysUserTokenService; + CloseableHttpClient getHttpClient(){ @@ -80,18 +90,24 @@ public class DingTalkUtil { try { ThirdAppConfig thirdAppConfig = thirdAppConfigService.getByAppId(appid); - DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); - OapiGettokenRequest req = new OapiGettokenRequest(); - req.setAppkey(thirdAppConfig.getAppKey()); - req.setAppsecret(thirdAppConfig.getAppSecret()); - req.setHttpMethod("GET"); - OapiGettokenResponse rsp = client.execute(req); - String resultStr = rsp.getBody(); - JSONObject dataObj = JSON.parseObject(resultStr); - String tenant_access_token = dataObj.getString("access_token"); - return tenant_access_token; - } catch (ApiException e) { + if(thirdAppConfig != null){ + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); + OapiGettokenRequest req = new OapiGettokenRequest(); + req.setAppkey(thirdAppConfig.getAppKey()); + req.setAppsecret(thirdAppConfig.getAppSecret()); + req.setHttpMethod("GET"); + OapiGettokenResponse rsp = client.execute(req); + String resultStr = rsp.getBody(); + JSONObject dataObj = JSON.parseObject(resultStr); + String tenant_access_token = dataObj.getString("access_token"); + return tenant_access_token; + }else{ + logger.info("appid不存在,数据库未配置appid"); + } + + } catch (Exception e) { e.printStackTrace(); + logger.info("获取token异常{}", e); } return null; } @@ -142,7 +158,7 @@ public class DingTalkUtil { logger.info("获取部门详情异常{}", rsp.getBody()); } return list; - } catch (ApiException e) { + } catch (Exception e) { logger.info("获取部门详情异常{}", e); } return null; @@ -209,8 +225,9 @@ public class DingTalkUtil { } return list; - } catch (ApiException e) { + } catch (Exception e) { e.printStackTrace(); + logger.info("获取部门用户详情异常{}", e); } return null; } @@ -301,4 +318,40 @@ public class DingTalkUtil { thirdMsgSendRecordService.insert(thirdMsgSendRecord); return msg; } + + public R getUserIdByCode(String code, String token) { + try { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getuserinfo"); + OapiUserGetuserinfoRequest req = new OapiUserGetuserinfoRequest(); + req.setCode(code); + req.setHttpMethod("GET"); + OapiUserGetuserinfoResponse rsp = client.execute(req, token); + JSONObject json = JSONObject.parseObject(rsp.getBody()); + if(json.getIntValue("errcode") == 0){ + String employeeId = json.getString("userid"); + StaffEntity staffEntity = staffService.selectStaffByEmployeeId(employeeId); + if(staffEntity != null){ + //登录操作 + SysUserEntity user = new SysUserEntity(); + user.setPassword(staffEntity.getPassword()); + user.setMobile(staffEntity.getMobile()); + user.setUserId(staffEntity.getId()); + user.setEmail(staffEntity.getEmail()); + user.setSalt(staffEntity.getSalt()); + user.setStatus(1); + user.setType(1); + user.setRealName(staffEntity.getName()); + user.setUserNo(staffEntity.getMobile()); + return sysUserTokenService.createToken(user); + } + return R.error("用户不存在"); + } + return R.error("请求钉钉异常:" + json.getString("errmsg")); + + } catch (ApiException e) { + e.printStackTrace(); + return R.error(e.getErrMsg()); + } + + } } diff --git a/src/main/java/com/lz/config/ShiroConfig.java b/src/main/java/com/lz/config/ShiroConfig.java index 555583ef..0216c28c 100644 --- a/src/main/java/com/lz/config/ShiroConfig.java +++ b/src/main/java/com/lz/config/ShiroConfig.java @@ -62,6 +62,7 @@ public class ShiroConfig { filterMap.put("/swagger-resources/**", "anon"); filterMap.put("/captcha.jpg", "anon"); filterMap.put("/aaa.txt", "anon"); + filterMap.put("/dtlg/login", "anon"); filterMap.put("/**", "oauth2"); shiroFilter.setFilterChainDefinitionMap(filterMap); diff --git a/src/main/java/com/lz/modules/app/dao/StaffDao.java b/src/main/java/com/lz/modules/app/dao/StaffDao.java index 13b83451..8a27ceac 100644 --- a/src/main/java/com/lz/modules/app/dao/StaffDao.java +++ b/src/main/java/com/lz/modules/app/dao/StaffDao.java @@ -73,4 +73,5 @@ public interface StaffDao extends BaseMapper { StaffEntity selectByPhone(@Param("phone") String phone); + StaffEntity selectStaffByEmployeeId(@Param("employeeId") String employeeId); } diff --git a/src/main/java/com/lz/modules/app/service/StaffService.java b/src/main/java/com/lz/modules/app/service/StaffService.java index 13fe5b4b..eab5315d 100644 --- a/src/main/java/com/lz/modules/app/service/StaffService.java +++ b/src/main/java/com/lz/modules/app/service/StaffService.java @@ -69,5 +69,7 @@ public interface StaffService extends IService { int deleteStaffById(Long id); StaffEntity selectByPhone(String userName); + + StaffEntity selectStaffByEmployeeId(String employeeId); } diff --git a/src/main/java/com/lz/modules/app/service/impl/StaffServiceImpl.java b/src/main/java/com/lz/modules/app/service/impl/StaffServiceImpl.java index 35f6d05c..b60a1d9f 100644 --- a/src/main/java/com/lz/modules/app/service/impl/StaffServiceImpl.java +++ b/src/main/java/com/lz/modules/app/service/impl/StaffServiceImpl.java @@ -87,6 +87,11 @@ public class StaffServiceImpl extends ServiceImpl impleme return staffDao.selectByPhone(phone); } + @Override + public StaffEntity selectStaffByEmployeeId(String employeeId){ + return staffDao.selectStaffByEmployeeId(employeeId); + } + @Override public PageUtils queryPage(Map params) { diff --git a/src/main/java/com/lz/modules/job/business/DingtalkBusiness.java b/src/main/java/com/lz/modules/job/business/DingtalkBusiness.java index 68c3016a..ad00a43d 100644 --- a/src/main/java/com/lz/modules/job/business/DingtalkBusiness.java +++ b/src/main/java/com/lz/modules/job/business/DingtalkBusiness.java @@ -10,6 +10,7 @@ import com.google.common.collect.Lists; import com.lz.common.emun.WorkMsgTypeEnum; import com.lz.common.utils.DateUtils; import com.lz.common.utils.DingTalkUtil; +import com.lz.common.utils.R; import com.lz.modules.app.dao.StaffDao; import com.lz.modules.app.dto.StaffBaseInfoDto; import com.lz.modules.app.entity.StaffEntity; @@ -195,4 +196,12 @@ public class DingtalkBusiness { return "无相关人员信息"; } + + public R login(String code, String appid) { + String token = dingTalkUtil.getAccessToken(appid); + if(token != null && token.length() > 0){ + return dingTalkUtil.getUserIdByCode(code, token); + } + return R.error("授权失败,未授权"); + } } diff --git a/src/main/java/com/lz/modules/third/controller/DingTalkLoginController.java b/src/main/java/com/lz/modules/third/controller/DingTalkLoginController.java new file mode 100644 index 00000000..1e5ebbab --- /dev/null +++ b/src/main/java/com/lz/modules/third/controller/DingTalkLoginController.java @@ -0,0 +1,26 @@ +package com.lz.modules.third.controller; + +import com.alibaba.fastjson.JSONObject; +import com.lz.common.utils.DingTalkUtil; +import com.lz.common.utils.R; +import com.lz.modules.job.business.DingtalkBusiness; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/dtlg") +public class DingTalkLoginController { + @Autowired + DingtalkBusiness dingtalkBusiness; + static String appid = "855818566"; + @PostMapping("/login") + public R login(@RequestBody String body){ + JSONObject json = JSONObject.parseObject(body); + return dingtalkBusiness.login(json.getString("code"), appid); + + } +} diff --git a/src/main/java/com/lz/modules/third/entity/ThirdAppConfig.java b/src/main/java/com/lz/modules/third/entity/ThirdAppConfig.java index 1f5bb4dd..43420e82 100644 --- a/src/main/java/com/lz/modules/third/entity/ThirdAppConfig.java +++ b/src/main/java/com/lz/modules/third/entity/ThirdAppConfig.java @@ -39,7 +39,7 @@ public class ThirdAppConfig implements java.io.Serializable { //程序入口,如果有 private String appUrl; //企业的钉钉corpId - private Long corpId; + private String corpId; //备注说明 private String remark; /** @@ -207,18 +207,11 @@ public class ThirdAppConfig implements java.io.Serializable { this.appUrl = appUrl; } - /** - * 企业的钉钉corpId - * @return - */ - public Long getCorpId() { + public String getCorpId() { return corpId; } - /** - * 企业的钉钉corpId - * @param corpId - */ - public void setCorpId(Long corpId) { + + public void setCorpId(String corpId) { this.corpId = corpId; } diff --git a/src/main/resources/mapper/generator/StaffDao.xml b/src/main/resources/mapper/generator/StaffDao.xml index f33e04e8..f97ff1df 100644 --- a/src/main/resources/mapper/generator/StaffDao.xml +++ b/src/main/resources/mapper/generator/StaffDao.xml @@ -433,4 +433,8 @@ select * from lz_staff where is_delete = 0 and ( mobile = #{phone} or mobile = concat('+86',#{phone},'')) limit 1 + +