提交修改

This commit is contained in:
quyixiao 2020-08-21 17:24:17 +08:00
commit c0950a7282
9 changed files with 118 additions and 24 deletions

View File

@ -8,14 +8,18 @@ import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.*; import com.dingtalk.api.request.*;
import com.dingtalk.api.response.*; import com.dingtalk.api.response.*;
import com.lz.modules.app.entity.StaffEntity; 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.DepartmentInfosBo;
import com.lz.modules.job.model.responseBo.DepartmentStaffBo; 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.ThirdAppConfig;
import com.lz.modules.third.entity.ThirdMsgSendRecord; import com.lz.modules.third.entity.ThirdMsgSendRecord;
import com.lz.modules.third.service.ThirdAppConfigService; import com.lz.modules.third.service.ThirdAppConfigService;
import com.lz.modules.third.service.ThirdMsgSendRecordService; import com.lz.modules.third.service.ThirdMsgSendRecordService;
import com.lz.modules.third.service.impl.ThirdAppConfigServiceImpl; import com.lz.modules.third.service.impl.ThirdAppConfigServiceImpl;
import com.taobao.api.ApiException; import com.taobao.api.ApiException;
import net.bytebuddy.implementation.bytecode.Throw;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
@ -62,6 +66,12 @@ public class DingTalkUtil {
@Autowired @Autowired
ThirdMsgSendRecordService thirdMsgSendRecordService; ThirdMsgSendRecordService thirdMsgSendRecordService;
@Autowired
StaffService staffService;
@Autowired
private SysUserTokenService sysUserTokenService;
CloseableHttpClient getHttpClient(){ CloseableHttpClient getHttpClient(){
@ -80,6 +90,7 @@ public class DingTalkUtil {
try { try {
ThirdAppConfig thirdAppConfig = thirdAppConfigService.getByAppId(appid); ThirdAppConfig thirdAppConfig = thirdAppConfigService.getByAppId(appid);
if(thirdAppConfig != null){
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
OapiGettokenRequest req = new OapiGettokenRequest(); OapiGettokenRequest req = new OapiGettokenRequest();
req.setAppkey(thirdAppConfig.getAppKey()); req.setAppkey(thirdAppConfig.getAppKey());
@ -90,8 +101,13 @@ public class DingTalkUtil {
JSONObject dataObj = JSON.parseObject(resultStr); JSONObject dataObj = JSON.parseObject(resultStr);
String tenant_access_token = dataObj.getString("access_token"); String tenant_access_token = dataObj.getString("access_token");
return tenant_access_token; return tenant_access_token;
} catch (ApiException e) { }else{
logger.info("appid不存在数据库未配置appid");
}
} catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
logger.info("获取token异常{}", e);
} }
return null; return null;
} }
@ -142,7 +158,7 @@ public class DingTalkUtil {
logger.info("获取部门详情异常{}", rsp.getBody()); logger.info("获取部门详情异常{}", rsp.getBody());
} }
return list; return list;
} catch (ApiException e) { } catch (Exception e) {
logger.info("获取部门详情异常{}", e); logger.info("获取部门详情异常{}", e);
} }
return null; return null;
@ -209,8 +225,9 @@ public class DingTalkUtil {
} }
return list; return list;
} catch (ApiException e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
logger.info("获取部门用户详情异常{}", e);
} }
return null; return null;
} }
@ -301,4 +318,40 @@ public class DingTalkUtil {
thirdMsgSendRecordService.insert(thirdMsgSendRecord); thirdMsgSendRecordService.insert(thirdMsgSendRecord);
return msg; 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());
}
}
} }

View File

@ -62,6 +62,7 @@ public class ShiroConfig {
filterMap.put("/swagger-resources/**", "anon"); filterMap.put("/swagger-resources/**", "anon");
filterMap.put("/captcha.jpg", "anon"); filterMap.put("/captcha.jpg", "anon");
filterMap.put("/aaa.txt", "anon"); filterMap.put("/aaa.txt", "anon");
filterMap.put("/dtlg/login", "anon");
filterMap.put("/**", "oauth2"); filterMap.put("/**", "oauth2");
shiroFilter.setFilterChainDefinitionMap(filterMap); shiroFilter.setFilterChainDefinitionMap(filterMap);

View File

@ -73,4 +73,5 @@ public interface StaffDao extends BaseMapper<StaffEntity> {
StaffEntity selectByPhone(@Param("phone") String phone); StaffEntity selectByPhone(@Param("phone") String phone);
StaffEntity selectStaffByEmployeeId(@Param("employeeId") String employeeId);
} }

View File

@ -69,5 +69,7 @@ public interface StaffService extends IService<StaffEntity> {
int deleteStaffById(Long id); int deleteStaffById(Long id);
StaffEntity selectByPhone(String userName); StaffEntity selectByPhone(String userName);
StaffEntity selectStaffByEmployeeId(String employeeId);
} }

View File

@ -87,6 +87,11 @@ public class StaffServiceImpl extends ServiceImpl<StaffDao, StaffEntity> impleme
return staffDao.selectByPhone(phone); return staffDao.selectByPhone(phone);
} }
@Override
public StaffEntity selectStaffByEmployeeId(String employeeId){
return staffDao.selectStaffByEmployeeId(employeeId);
}
@Override @Override
public PageUtils queryPage(Map<String, Object> params) { public PageUtils queryPage(Map<String, Object> params) {

View File

@ -10,6 +10,7 @@ import com.google.common.collect.Lists;
import com.lz.common.emun.WorkMsgTypeEnum; import com.lz.common.emun.WorkMsgTypeEnum;
import com.lz.common.utils.DateUtils; import com.lz.common.utils.DateUtils;
import com.lz.common.utils.DingTalkUtil; import com.lz.common.utils.DingTalkUtil;
import com.lz.common.utils.R;
import com.lz.modules.app.dao.StaffDao; import com.lz.modules.app.dao.StaffDao;
import com.lz.modules.app.dto.StaffBaseInfoDto; import com.lz.modules.app.dto.StaffBaseInfoDto;
import com.lz.modules.app.entity.StaffEntity; import com.lz.modules.app.entity.StaffEntity;
@ -195,4 +196,12 @@ public class DingtalkBusiness {
return "无相关人员信息"; 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("授权失败,未授权");
}
} }

View File

@ -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);
}
}

View File

@ -39,7 +39,7 @@ public class ThirdAppConfig implements java.io.Serializable {
//程序入口如果有 //程序入口如果有
private String appUrl; private String appUrl;
//企业的钉钉corpId //企业的钉钉corpId
private Long corpId; private String corpId;
//备注说明 //备注说明
private String remark; private String remark;
/** /**
@ -207,18 +207,11 @@ public class ThirdAppConfig implements java.io.Serializable {
this.appUrl = appUrl; this.appUrl = appUrl;
} }
/** public String getCorpId() {
* 企业的钉钉corpId
* @return
*/
public Long getCorpId() {
return corpId; return corpId;
} }
/**
* 企业的钉钉corpId public void setCorpId(String corpId) {
* @param corpId
*/
public void setCorpId(Long corpId) {
this.corpId = corpId; this.corpId = corpId;
} }

View File

@ -433,4 +433,8 @@
select * from lz_staff where is_delete = 0 and ( mobile = #{phone} or mobile = concat('+86',#{phone},'')) limit 1 select * from lz_staff where is_delete = 0 and ( mobile = #{phone} or mobile = concat('+86',#{phone},'')) limit 1
</select> </select>
<select id="selectStaffByEmployeeId" resultType="com.lz.modules.app.entity.StaffEntity">
select * from lz_staff where is_delete = 0 and employee_id = #{employeeId} limit 1
</select>
</mapper> </mapper>