Commit 7ce4ec3b authored by 周亚武's avatar 周亚武

钉钉相关接口

parent 249f1a96
package com.mortals.xhx.module.attendance.dingmsg;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author ZYW
* @date 2023-07-18 15:05
*/
@NoArgsConstructor
@Data
public class EventEntity {
@JsonProperty("processInstanceId")
private String processInstanceId; //审批实例id。
@JsonProperty("finishTime")
private Long finishTime; //结束审批实例时间。时间戳,单位毫秒。
@JsonProperty("corpId")
private String corpId; //审批实例对应的企业corpId。
@JsonProperty("EventType")
private String eventType; //事件类型。
@JsonProperty("businessId")
private String businessId;
@JsonProperty("title")
private String title; //实例标题。
@JsonProperty("type")
private String type; //finish:审批正常结束(同意或拒绝)terminate:审批终止(发起人撤销审批单)
@JsonProperty("url")
private String url; //审批实例url,可在钉钉内跳转到审批页面。
@JsonProperty("result")
private String result; //正常结束时result为agree,拒绝时result为refuse,审批终止时没这个值。
@JsonProperty("createTime")
private Long createTime; //创建审批实例时间。时间戳,单位毫秒。
@JsonProperty("processCode")
private String processCode; //审批模板的唯一码。
@JsonProperty("bizCategoryId")
private String bizCategoryId;
@JsonProperty("staffId")
private String staffId; //发起审批实例的员工userId。
@JsonProperty("remark")
private String remark; //remark表示操作时写的评论内容。
}
......@@ -7,13 +7,16 @@ import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiGettokenRequest;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.xhx.common.pdu.ApiRespPdu;
import com.mortals.xhx.module.attendance.dingmsg.DingCallbackCrypto;
import com.mortals.xhx.module.attendance.dingmsg.dingmsgreq.DingResponsMeassageReq;
import com.mortals.xhx.module.attendance.dingmsg.dingmsgreq.EncryptReq;
import com.mortals.xhx.module.dingding.personal.service.IDingPersonService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.logging.Log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -33,6 +36,9 @@ import java.util.Map;
@Slf4j
public class DingMessageController {
@Autowired
private IDingPersonService dingPersonService;
/**
* appKey
*/
......@@ -62,22 +68,16 @@ public class DingMessageController {
@RequestParam(value = "nonce", required = false) String nonce,
@RequestBody(required = false) JSONObject json) {
try {
// 1. 从http请求中获取加解密参数
// 2. 使用加解密类型
// Constant.OWNER_KEY 说明:
// 1、开发者后台配置的订阅事件为应用级事件推送,此时OWNER_KEY为应用的APP_KEY。
// 2、调用订阅事件接口订阅的事件为企业级事件推送,
// 此时OWNER_KEY为:企业的appkey(企业内部应用)或SUITE_KEY(三方应用)
// 从http请求中获取加解密参数
DingCallbackCrypto callbackCrypto = new DingCallbackCrypto(token, aesKey, appKey);
String encryptMsg = json.getString("encrypt");
String decryptMsg = callbackCrypto.getDecryptMsg(msg_signature, timeStamp, nonce, encryptMsg);
// 3. 反序列化回调事件json数据
// 反序列化回调事件json数据
JSONObject eventJson = JSON.parseObject(decryptMsg);
String eventType = eventJson.getString("EventType");
// 4. 根据EventType分类处理
// 根据EventType分类处理
if ("check_url".equals(eventType)) {
// 测试回调url的正确性
log.info("测试回调url的正确性");
......@@ -87,6 +87,10 @@ public class DingMessageController {
// 存入数据库
log.info("发生了:" + eventType + "事件" );
log.info("返回处理参数:" + eventJson.toJSONString() );
if(eventJson.getString("processInstanceId") != null){
Rest<String> rest = dingPersonService.getOaRecordsById(eventJson.getString("processInstanceId"));
log.info("审批详情:" + rest.toString() );
}
}
else {
// 添加其他已注册的
......
......@@ -41,5 +41,12 @@ public interface IDingPersonService extends IDingTalkService {
*/
Rest<String> sendWorkMsg(WorkMsgReq workMsgReq);
/**
* 审批详情
* @param processInstanceId 审批实例ID。
* @return
*/
Rest<String> getOaRecordsById(String processInstanceId);
}
package com.mortals.xhx.module.dingding.personal.service.impl;
import com.alibaba.fastjson.JSON;
import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponse;
import com.aliyun.tea.TeaException;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
......@@ -14,6 +16,7 @@ import com.mortals.xhx.module.dingding.personal.model.req.workmsg.WorkMsgReq;
import com.mortals.xhx.module.dingding.personal.service.IDingPersonService;
import com.taobao.api.ApiException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.logging.Log;
import org.springframework.stereotype.Service;
......@@ -98,5 +101,34 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
}
}
/**
* 使用 Token 初始化账号Client
* @return Client
* @throws Exception
*/
public static com.aliyun.dingtalkworkflow_1_0.Client createClient() throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
config.protocol = "https";
config.regionId = "central";
return new com.aliyun.dingtalkworkflow_1_0.Client(config);
}
@Override
public Rest<String> getOaRecordsById(String processInstanceId) {
try {
com.aliyun.dingtalkworkflow_1_0.Client client = createClient();
com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceHeaders getProcessInstanceHeaders = new com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceHeaders();
getProcessInstanceHeaders.xAcsDingtalkAccessToken = getToken();
com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceRequest getProcessInstanceRequest = new com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceRequest()
.setProcessInstanceId(processInstanceId);
GetProcessInstanceResponse rsp = client.getProcessInstanceWithOptions(getProcessInstanceRequest, getProcessInstanceHeaders, new com.aliyun.teautil.models.RuntimeOptions());
log.info("根据用户查询审批详情:", rsp.getBody());
return Rest.ok("成功", rsp.getBody().getResult().toString());
} catch (Exception e) {
log.info("根据用户查询审批详情失败", e);
return Rest.fail(e.getMessage());
}
}
}
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