Commit e0f251f0 authored by 周亚武's avatar 周亚武

钉钉相关接口

parent 18785865
...@@ -145,7 +145,14 @@ ...@@ -145,7 +145,14 @@
<dependency> <dependency>
<groupId>com.aliyun</groupId> <groupId>com.aliyun</groupId>
<artifactId>dingtalk</artifactId> <artifactId>dingtalk</artifactId>
<version>2.0.19</version> <version>2.0.22</version>
</dependency>
<!--dingdingtalk service sdk-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibaba-dingtalk-service-sdk</artifactId>
<version>2.0.0</version>
</dependency> </dependency>
<dependency> <dependency>
......
...@@ -2,20 +2,29 @@ package com.mortals.xhx.busiz.dingtalk.api; ...@@ -2,20 +2,29 @@ package com.mortals.xhx.busiz.dingtalk.api;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.*;
import com.dingtalk.api.response.*;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.service.ICacheService; import com.mortals.framework.exception.AppException;
import com.mortals.xhx.busiz.dingtalk.config.TalkConfiguration; import com.mortals.xhx.busiz.dingtalk.config.TalkConfiguration;
import com.mortals.xhx.busiz.dingtalk.req.DingTalkBaseReq; import com.mortals.xhx.busiz.dingtalk.req.DingTalkBaseReq;
import com.mortals.xhx.busiz.dingtalk.req.UserPageReq;
import com.mortals.xhx.busiz.req.MobileReq;
import com.mortals.xhx.busiz.req.ReviewSaveReq;
import com.mortals.xhx.common.code.YesNoEnum; import com.mortals.xhx.common.code.YesNoEnum;
import com.mortals.xhx.common.pdu.ApiRespPdu; import com.mortals.xhx.common.pdu.ApiRespPdu;
import lombok.extern.apachecommons.CommonsLog; import lombok.extern.apachecommons.CommonsLog;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody; import sun.security.krb5.internal.APOptions;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import java.util.List;
/** /**
* 钉钉相关外部接口 * 钉钉相关外部接口
...@@ -29,7 +38,7 @@ public class TalkApiController { ...@@ -29,7 +38,7 @@ public class TalkApiController {
@Autowired @Autowired
private TalkConfiguration talkConfiguration; private TalkConfiguration talkConfiguration;
private String dingToken;
/** /**
* 获取token * 获取token
...@@ -37,33 +46,194 @@ public class TalkApiController { ...@@ -37,33 +46,194 @@ public class TalkApiController {
* @return * @return
*/ */
@PostMapping("/dingtalk/gettoken") @PostMapping("/dingtalk/gettoken")
public Rest<String> getToken(@RequestBody DingTalkBaseReq dingTalkBaseReq) { @UnAuth
log.info("收到【getToken】请求【请求体】--> {}", JSON.toJSONString(dingTalkBaseReq)); public ApiRespPdu<String> getToken() {
ApiRespPdu<String> apiRespPdu = new ApiRespPdu<>();
try { try {
DingTalkClient client = new DefaultDingTalkClient(talkConfiguration.getGetTokneUrl());
// DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
// OapiGettokenRequest req = new OapiGettokenRequest();
// req.setHttpMethod("GET");
// OapiGettokenResponse rsp = client.execute(req);
/* DingTalkClient client = new DefaultDingTalkClient(talkConfiguration.getGetTokneUrl());
OapiGettokenRequest req = new OapiGettokenRequest(); OapiGettokenRequest req = new OapiGettokenRequest();
req.setAppkey(apiKey); req.setAppkey(talkConfiguration.getAppKey());
req.setAppsecret(appsecret); req.setAppsecret(talkConfiguration.getAppSecret());
req.setHttpMethod("GET"); req.setHttpMethod("GET");
OapiGettokenResponse rsp = client.execute(req); OapiGettokenResponse rsp = client.execute(req);
log.info("gettoken rsp:" + rsp.getBody()); log.info("gettoken rsp:" + rsp.getBody());
if (rsp.getErrcode() == 0) { if (rsp.getErrcode() == 0) {
dingToken = rsp.getAccessToken();
apiRespPdu.setCode(0);
apiRespPdu.setData(rsp.getAccessToken()); apiRespPdu.setData(rsp.getAccessToken());
apiRespPdu.setMsg(rsp.getMsg());
} else { } else {
throw new AppException(String.format("errorCode:%s,errorMsg:%s", rsp.getErrcode(), rsp.getErrmsg())); apiRespPdu.setCode(-1);
apiRespPdu.setData("");
apiRespPdu.setMsg(rsp.getMsg());
} }
*/
} catch (Exception e) { } catch (Exception e) {
log.error("异常", e); log.error("异常", e);
return Rest.fail(e.getMessage()); apiRespPdu.setCode(-1);
apiRespPdu.setData("");
apiRespPdu.setMsg(e.toString());
}
return apiRespPdu;
}
/**
* 获取部门列表
* @return
*/
@PostMapping("/dingtalk/getSubList")
@UnAuth
public ApiRespPdu<List<OapiV2DepartmentListsubResponse.DeptBaseResponse>> getSubList(){
ApiRespPdu<List<OapiV2DepartmentListsubResponse.DeptBaseResponse>> apiRespPdu = new ApiRespPdu<>();
try {
DingTalkClient client = new DefaultDingTalkClient(talkConfiguration.getGetSubList());
OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest();
if(dingToken == null){
dingToken = getToken().getData();
}
OapiV2DepartmentListsubResponse rsp = client.execute(req, dingToken);
if(rsp.getErrcode() == 0){
apiRespPdu.setCode(0);
apiRespPdu.setData(rsp.getResult());
apiRespPdu.setMsg(rsp.getMsg());
}else {
if(getToken().getCode() == 0){
getSubList();
}else {
apiRespPdu.setCode(-1);
apiRespPdu.setData(null);
apiRespPdu.setMsg("获取token失败");
}
}
} catch (Exception e) {
e.printStackTrace();
apiRespPdu.setCode(-1);
apiRespPdu.setData(null);
apiRespPdu.setMsg(e.toString());
}
return apiRespPdu;
}
/**
* 根据部门id查询该部门下所有用户完整信息
* @return
*/
@PostMapping("/dingtalk/getUserList")
@UnAuth
public ApiRespPdu<OapiV2UserListResponse.PageResult> getUserList(@RequestBody UserPageReq res){
ApiRespPdu<OapiV2UserListResponse.PageResult> apiRespPdu = new ApiRespPdu<>();
try {
DingTalkClient client = new DefaultDingTalkClient(talkConfiguration.getGetuserlist());
OapiV2UserListRequest req = new OapiV2UserListRequest();
if(dingToken == null){
dingToken = getToken().getData();
}
req.setDeptId(res.getDeptid());
req.setCursor(res.getCursor());
req.setSize(res.getSize());
OapiV2UserListResponse rsp = client.execute(req, dingToken);
if(rsp.getErrcode() == 0){
apiRespPdu.setCode(0);
apiRespPdu.setData(rsp.getResult());
apiRespPdu.setMsg(rsp.getMsg());
}else {
if(getToken().getCode() == 0){
getUserList(res);
}else {
apiRespPdu.setCode(-1);
apiRespPdu.setData(null);
apiRespPdu.setMsg("获取token失败");
}
}
} catch (Exception e) {
e.printStackTrace();
apiRespPdu.setCode(-1);
apiRespPdu.setData(null);
apiRespPdu.setMsg(e.toString());
} }
return Rest.ok();
return apiRespPdu;
} }
/**
* 根据手机号查询用户
* @return
*/
@GetMapping("/dingtalk/getByMobile")
@UnAuth
public ApiRespPdu<OapiV2UserGetResponse.UserGetResponse> getByMobile(@RequestBody MobileReq mobile){
ApiRespPdu<OapiV2UserGetResponse.UserGetResponse> apiRespPdu = new ApiRespPdu<>();
try {
DingTalkClient client = new DefaultDingTalkClient(talkConfiguration.getGetbymobile());
OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest();
if(dingToken == null){
dingToken = getToken().getData();
}
req.setMobile(mobile.getMobile());
OapiV2UserGetbymobileResponse rsp = client.execute(req, dingToken);
if(rsp.getErrcode() == 0){
//根据获取到的userid去获取用户详情
ApiRespPdu<OapiV2UserGetResponse.UserGetResponse> userRsp = getUserInfo(rsp.getResult().getUserid());
if(userRsp.getCode() == 0){
apiRespPdu.setCode(userRsp.getCode());
apiRespPdu.setData(userRsp.getData());
apiRespPdu.setMsg(userRsp.getMsg());
}else {
apiRespPdu.setCode(-1);
apiRespPdu.setData(null);
apiRespPdu.setMsg(userRsp.getMsg());
}
}else {
if(getToken().getCode() == 0){
getByMobile(mobile);
}else {
apiRespPdu.setCode(-1);
apiRespPdu.setData(null);
apiRespPdu.setMsg("获取token失败");
}
}
} catch (Exception e) {
e.printStackTrace();
apiRespPdu.setCode(-1);
apiRespPdu.setData(null);
apiRespPdu.setMsg(e.toString());
}
return apiRespPdu;
}
/**
* 根据userid查询用户详情
* @return
*/
@GetMapping("/dingtalk/getUserInfo")
@UnAuth
public ApiRespPdu<OapiV2UserGetResponse.UserGetResponse> getUserInfo(@RequestBody String userid){
ApiRespPdu<OapiV2UserGetResponse.UserGetResponse> apiRespPdu = new ApiRespPdu<>();
try {
DingTalkClient client = new DefaultDingTalkClient(talkConfiguration.getGetuserinfo());
OapiV2UserGetRequest req = new OapiV2UserGetRequest();
if(dingToken == null){
dingToken = getToken().getData();
}
req.setUserid(userid);
OapiV2UserGetResponse rsp = client.execute(req, dingToken);
apiRespPdu.setCode(0);
apiRespPdu.setData(rsp.getResult());
apiRespPdu.setMsg(rsp.getMsg());
} catch (Exception e) {
e.printStackTrace();
apiRespPdu.setCode(-1);
apiRespPdu.setData(null);
apiRespPdu.setMsg(e.toString());
}
return apiRespPdu;
}
} }
...@@ -19,19 +19,47 @@ public class TalkConfiguration { ...@@ -19,19 +19,47 @@ public class TalkConfiguration {
@Value("${dingtalk.agentId:''}") @Value("${dingtalk.agentId:''}")
private String getAgentId; private String getAgentId;
/**
* appKey
*/
@Value("${dingtalk.AppKey:''}")
private String AppKey;
/**
* AppSecret
*/
@Value("${dingtalk.AppSecret:''}")
private String AppSecret;
/** /**
* getToken * getToken
*/ */
@Value("${dingtalk.gettoken:''}") @Value("${dingtalk.gettoken:https://oapi.dingtalk.com/gettoken}")
private String getTokneUrl; private String getTokneUrl;
/** /**
* getbymobile * 获取部门列表
*/ */
@Value("${dingtalk.getbymobile:''}") @Value("${dingtalk.listsub:https://oapi.dingtalk.com/topapi/v2/department/listsub}")
private String getbymobile; private String getSubList;
/**
* 根据部门id获取用户详情列表
*/
@Value("${dingtalk.getUserList:https://oapi.dingtalk.com/topapi/v2/user/list}")
private String getuserlist;
/**
* 根据电话查询用户信息
*/
@Value("${dingtalk.getbymobile:https://oapi.dingtalk.com/topapi/v2/user/getbymobile}")
private String getbymobile;
/**
* 根据userid查询用户信息
*/
@Value("${dingtalk.getuserinfo:https://oapi.dingtalk.com/topapi/v2/user/get}")
private String getuserinfo;
/** /**
* getDeptbyUser * getDeptbyUser
*/ */
......
package com.mortals.xhx.busiz.dingtalk.req;
/**
* @author ZYW
* @date 2023-07-12 11:38
*/
public class UserPageReq {
//部门id
private Long deptid;
//起始页码
private Long cursor;
//每页条数
private Long size;
public Long getDeptid() {
return deptid;
}
public void setDeptid(Long deptid) {
this.deptid = deptid;
}
public Long getCursor() {
return cursor;
}
public void setCursor(Long cursor) {
this.cursor = cursor;
}
public Long getSize() {
return size;
}
public void setSize(Long size) {
this.size = size;
}
}
package com.mortals.xhx.busiz.req;
/**
* @author ZYW
* @date 2023-07-12 13:47
*/
public class MobileReq {
String mobile;
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment