DingdingOpenInterface.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. package net.chenlin.dp.modules.api.controller;
  2. import com.dingtalk.api.DefaultDingTalkClient;
  3. import com.dingtalk.api.DingTalkClient;
  4. import com.dingtalk.api.request.*;
  5. import com.dingtalk.api.response.*;
  6. import com.taobao.api.ApiException;
  7. import net.chenlin.dp.common.openapi4j.util.PropUtil;
  8. import net.chenlin.dp.common.utils.DateUtils;
  9. import net.chenlin.dp.common.utils.JSONUtils;
  10. import org.springframework.boot.configurationprocessor.json.JSONException;
  11. import org.springframework.boot.configurationprocessor.json.JSONObject;
  12. import java.util.*;
  13. /**
  14. * 此类用于钉钉公开接口方法调用
  15. */
  16. public class DingdingOpenInterface {
  17. /**
  18. * 企业内部应用的access_token,每20分钟改变一次
  19. */
  20. public static String gettoken = "";
  21. /**
  22. * 获取钉钉企业内部应用的access_token
  23. */
  24. public static void getToken(){
  25. try {
  26. Properties prop = PropUtil.getProperties("/config.properties");
  27. String appkey = prop.getProperty("ding_appkey");
  28. String appsecret = prop.getProperty("ding_appsecret");
  29. DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
  30. OapiGettokenRequest req = new OapiGettokenRequest();
  31. req.setHttpMethod("GET");
  32. req.setAppkey(appkey);
  33. req.setAppsecret(appsecret);
  34. OapiGettokenResponse rsp = client.execute(req);
  35. Map<String,String> map;
  36. map = toMap(rsp.getBody());
  37. if(map.get("errcode").equals("0")){
  38. gettoken = map.get("access_token");
  39. }else{
  40. gettoken = "error";
  41. }
  42. } catch (ApiException | JSONException e) {
  43. e.printStackTrace();
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. }
  47. }
  48. /**
  49. * 获取审批实例ID列表
  50. * 备用金process_code:PROC-9331671D-265D-4A79-A6F2-93326D727673(备用金列表获取)
  51. * 销售订单process_code:PROC-40356B7F-6825-4DC3-83B9-8AD6D0D2CA49(销售订单列表获取)
  52. * 钉钉接口仅支持120天内数据
  53. */
  54. public List<String> getOrderIdList(String processCode){
  55. getToken();//获取token
  56. Map<String,Object> map = new HashMap<>();
  57. List<String> list = new ArrayList<>();
  58. try {
  59. DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/processinstance/listids");
  60. OapiProcessinstanceListidsRequest req = new OapiProcessinstanceListidsRequest();
  61. req.setProcessCode(processCode);
  62. Calendar nowTime = Calendar.getInstance();
  63. nowTime.add(Calendar.DAY_OF_YEAR, -1);
  64. Date date = nowTime.getTime();
  65. req.setStartTime(Long.valueOf(date.getTime()));//时间戳:例1586448000000
  66. OapiProcessinstanceListidsResponse rsp = client.execute(req, gettoken);//access_token
  67. map = JSONUtils.jsonToMap(rsp.getBody());
  68. if(map.get("errcode").equals(0)){
  69. Map<String,Object> mapList = (Map<String, Object>) map.get("result");
  70. list = (List<String>) mapList.get("list");
  71. }
  72. } catch (ApiException e) {
  73. e.printStackTrace();
  74. } catch (Exception e) {
  75. e.printStackTrace();
  76. }
  77. return list;
  78. }
  79. /**
  80. * 获取审批实例详
  81. */
  82. public Map<String,Object> getOrderDetails(String processInstanceId){
  83. Map<String,Object> map = new HashMap<>();
  84. try {
  85. DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/processinstance/get");
  86. OapiProcessinstanceGetRequest req = new OapiProcessinstanceGetRequest();
  87. req.setProcessInstanceId(processInstanceId);//实例id
  88. OapiProcessinstanceGetResponse rsp = client.execute(req, gettoken);//access_token
  89. map = JSONUtils.jsonToMap(rsp.getBody());
  90. if(map.get("errcode").equals(0)){
  91. Map<String,Object> map1 = (Map<String, Object>) map.get("process_instance");
  92. return map1;
  93. }
  94. } catch (ApiException e) {
  95. e.printStackTrace();
  96. } catch (Exception e) {
  97. e.printStackTrace();
  98. }
  99. return map;
  100. }
  101. /**
  102. * 接口表格数据转换成可使用的map数据
  103. * @param map1
  104. * @return
  105. */
  106. public static Map<String,Object> tableToMap(Map<String,Object> map1){
  107. List<Map<String,Object>> listMap = (List<Map<String, Object>>) map1.get("form_component_values");
  108. Map<String,Object> newMap = new HashMap<>();
  109. for(Map<String, Object> o:listMap){
  110. newMap.put((String) o.get("name"),o.get("value"));
  111. }
  112. return newMap;
  113. }
  114. public static void main(String[] args) {
  115. // for (Map.Entry<String, Object> entry : JSONUtils.jsonToMap(rsp.getBody()).entrySet()) {
  116. // System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
  117. // }
  118. Calendar nowTime = Calendar.getInstance();
  119. // nowTime.add(Calendar.MINUTE, 5);
  120. nowTime.add(Calendar.DAY_OF_YEAR, -1);
  121. Date date = nowTime.getTime();
  122. System.out.println(date.getTime());
  123. System.out.println(nowTime.getTime());
  124. }
  125. public static Map toMap(String jsonString) throws JSONException {
  126. JSONObject jsonObject = new JSONObject(jsonString);
  127. Map result = new HashMap();
  128. Iterator iterator = jsonObject.keys();
  129. String key = null;
  130. String value = null;
  131. while (iterator.hasNext()) {
  132. key = (String) iterator.next();
  133. value = jsonObject.getString(key);
  134. result.put(key, value);
  135. }
  136. return result;
  137. }
  138. }