test.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package com.malk.tuosi.test;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.fasterxml.jackson.core.JsonProcessingException;
  6. import com.fasterxml.jackson.databind.JsonNode;
  7. import com.fasterxml.jackson.databind.ObjectMapper;
  8. import com.malk.server.common.McException;
  9. import com.malk.server.common.McR;
  10. import com.malk.server.dingtalk.DDConf;
  11. import com.malk.server.dingtalk.DDR_New;
  12. import com.malk.service.aliwork.YDClient;
  13. import com.malk.service.dingtalk.DDClient;
  14. import com.malk.service.dingtalk.DDClient_Extension;
  15. import com.malk.tuosi.service.impl.TbServiceImpl;
  16. import com.malk.utils.UtilHttp;
  17. import com.malk.utils.UtilMap;
  18. import lombok.SneakyThrows;
  19. import lombok.extern.slf4j.Slf4j;
  20. import org.checkerframework.checker.units.qual.A;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.web.bind.annotation.PostMapping;
  23. import org.springframework.web.bind.annotation.RequestBody;
  24. import org.springframework.web.bind.annotation.RequestMapping;
  25. import org.springframework.web.bind.annotation.RestController;
  26. import java.io.File;
  27. import java.io.FileOutputStream;
  28. import java.io.InputStream;
  29. import java.net.URL;
  30. import java.net.URLConnection;
  31. import java.util.*;
  32. import java.util.stream.Collectors;
  33. @RestController
  34. @Slf4j
  35. @RequestMapping("/test")
  36. public class test {
  37. @Autowired
  38. private YDClient ydClient;
  39. @Autowired
  40. private DDClient ddClient;
  41. @Autowired
  42. private DDConf ddConf;
  43. @PostMapping("/test01")
  44. McR test01(){
  45. return McR.success("接口畅通");
  46. }
  47. @PostMapping("/test02")
  48. McR test02(){
  49. String basedir = "C:/downloads";
  50. String downloadUrl = "https://teambition-file.oss-cn-zhangjiakou.aliyuncs.com/attachment/2025/11/22/622ee3450cf3bb5e1a486f1f/980131a2-d227-4029-9973-66507caa9c1a/1763781410334.png?OSSAccessKeyId=LTAI5tDBLZMyFnXCXQiYZMcj&Expires=1763783213&Signature=%2BaySoA9YMyI4OdzTixSKD6ZGUXA%3D&response-content-disposition=attachment%3BfileName*%3DUTF-8%27%27e824b899a9014c08ed1ab1039e4959077bf4f431.png&tb-file-token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvYmplY3ROYW1lIjoiYXR0YWNobWVudC8yMDI1LzExLzIyLzYyMmVlMzQ1MGNmM2JiNWUxYTQ4NmYxZi85ODAxMzFhMi1kMjI3LTQwMjktOTk3My02NjUwN2NhYTljMWEvMTc2Mzc4MTQxMDMzNC5wbmciLCJzY29wZSI6IioiLCJmaWxlTmFtZSI6ImU4MjRiODk5YTkwMTRjMDhlZDFhYjEwMzllNDk1OTA3N2JmNGY0MzEucG5nIiwiZmlsZVNpemUiOjAsImZpbGVUeXBlIjoiIiwidGltZXN0YW1wIjoxNzYzNzgxNDEzMTQxLCJpYXQiOjE3NjM3ODE0MTMsImV4cCI6MTc2Mzg2NzgxM30.-XxANowki1RyJilGK4tcZ_300hQIuwxsQCFbhJ9jQLE";
  51. String fileName = "11.22图片";
  52. String savePath = downloadFile(downloadUrl, basedir, fileName);
  53. return McR.success(savePath);
  54. }
  55. @PostMapping("/test03")
  56. McR test03() throws JsonProcessingException {
  57. List<String> involveMembers = new ArrayList<>();
  58. involveMembers.add("61a8c27b5b791c30cc540ce5");
  59. return McR.success(tbService.TBtoDinguserId(involveMembers));
  60. }
  61. @SneakyThrows
  62. public static String downloadFile(String fileUrl, String baseDir, String customFileName){
  63. // 创建基础目录
  64. File baseDirectory = new File(baseDir);
  65. if (!baseDirectory.exists()) {
  66. baseDirectory.mkdirs();
  67. }
  68. // 完整的保存路径
  69. String savePath = new File(baseDir, customFileName).getAbsolutePath();
  70. // 下载文件
  71. URL url = new URL(fileUrl);
  72. URLConnection connection = url.openConnection();
  73. // 添加必要的请求头
  74. connection.setRequestProperty("User-Agent", "Mozilla/5.0");
  75. connection.setConnectTimeout(30000);
  76. connection.setReadTimeout(30000);
  77. try (InputStream in = connection.getInputStream();
  78. FileOutputStream out = new FileOutputStream(savePath)) {
  79. byte[] buffer = new byte[4096];
  80. int bytesRead;
  81. while ((bytesRead = in.read(buffer)) != -1) {
  82. out.write(buffer, 0, bytesRead);
  83. }
  84. }
  85. return savePath;
  86. }
  87. /*群消息卡片投放*/
  88. @PostMapping("/card/createAndDeliver")
  89. public McR createAndDeliverCard(@RequestBody JSONObject param){
  90. log.info("推送消息:{}",param);
  91. McException.assertParamException_Null(param,"cardData","outTrackId","openSpaceId","robotCode","cardTemplateId");
  92. Map<String,Object> data = new HashMap();
  93. data.put("imGroupOpenDeliverModel", UtilMap.map("robotCode",param.getString("robotCode")));
  94. data.put("imGroupOpenSpaceModel",UtilMap.map("supportForward",true));
  95. if(param.containsKey("extInfo")){
  96. data.putAll(param.getJSONObject("extInfo"));
  97. }
  98. Map map = ddClientExtension.createAndDeliverCards(ddClient.getAccessToken(),param.getString("cardTemplateId"),param.getString("outTrackId"),
  99. UtilMap.map("cardParamMap",param.getJSONObject("cardData")),param.getString("openSpaceId"),data);
  100. return McR.success(map);
  101. }
  102. @Autowired
  103. private DDClient_Extension ddClientExtension;
  104. /*获取群会话id*/
  105. @PostMapping("/card/test")
  106. McR cardtest(@RequestBody String body){
  107. System.out.println("回调参数:" + body);
  108. return McR.success();
  109. }
  110. @Autowired
  111. private TbServiceImpl tbService;
  112. /*查询任务详情*/
  113. @SneakyThrows
  114. @PostMapping("/searchtask")
  115. McR searchtask(){
  116. List<String> allResourceIds = new ArrayList<>();//存储文件的ids
  117. List<String> downloadUrls= new ArrayList<>();//存储文件下载地址
  118. /*所有的字段信息定义*/
  119. String content = "";//任务名称
  120. List<String> involveMembers = new ArrayList<>();//负责人
  121. String businessManager = "";//业务经理
  122. String businessPerson = "";//业务人员
  123. String customerName = "";//客户名称
  124. String downloadUrl = "";
  125. String valueAsString = "";//文件下载地址(jsonString)
  126. String taskId = "69367cd39ae5405b05dc40bf";
  127. HashMap head = new HashMap();
  128. McR accessToken = tbService.AppAccessToken();
  129. Object tokenData = accessToken.getData();
  130. head.put("Authorization","Bearer " + tokenData);
  131. head.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
  132. head.put("X-Tenant-Type","organization");
  133. HashMap param = new HashMap();
  134. param.put("taskId",taskId);
  135. String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", head, param);//查询任务详情
  136. ObjectMapper objectMapper = new ObjectMapper();
  137. JsonNode rootNode = objectMapper.readTree(doGet);
  138. JsonNode result = rootNode.path("result");
  139. for(JsonNode resultNode : rootNode.path("result")){
  140. content = resultNode.path("content").asText();//todo:任务名称
  141. /*JsonNode membersNode = resultNode.path("involveMembers");
  142. if (membersNode.isArray()) {
  143. for (JsonNode member : membersNode) {
  144. involveMembers.add(member.asText());
  145. }
  146. }*/
  147. JsonNode customFields = resultNode.path("customfields");
  148. if (customFields.isArray()) {
  149. for (JsonNode field : customFields) {
  150. String cfId = field.path("cfId").asText();
  151. // 检查是否有 value 数组
  152. JsonNode valueArray = field.path("value");
  153. if (!valueArray.isArray() || valueArray.size() == 0) {
  154. continue;
  155. }
  156. // 获取第一个 value 对象
  157. JsonNode firstValue = valueArray.get(0);
  158. switch (cfId) {
  159. case "687df458b9c2f9f90865c13b": // todo:业务经理
  160. businessManager = firstValue.path("title").asText();
  161. System.out.println("业务经理: " + businessManager);
  162. break;
  163. case "688191972ab6c4f412ea2bb9": // todo:业务人员
  164. businessPerson = firstValue.path("title").asText();
  165. System.out.println("业务人员: " + businessPerson);
  166. break;
  167. case "687df3b60ae1530fa2704499": // todo:客户名称
  168. customerName = firstValue.path("title").asText();
  169. System.out.println("客户名称: " + customerName);
  170. break;
  171. case "689d9834591915184b095e5f": // todo:附件 metaString
  172. JsonNode valueArray1 = field.path("value");
  173. if (valueArray1.isArray()) {
  174. for (JsonNode attachment : valueArray) {
  175. String metaString = attachment.path("metaString").asText();
  176. /*新增*/
  177. String title = attachment.path("title").asText();
  178. String director = title.substring(title.lastIndexOf("-") + 1, title.lastIndexOf("."));
  179. involveMembers.add(director);
  180. /*新增*/
  181. if (!metaString.isEmpty()) {
  182. ObjectMapper mapper = new ObjectMapper();
  183. JsonNode metaJson = mapper.readTree(metaString);
  184. String resourceId = metaJson.path("resourceId").asText();
  185. allResourceIds.add(resourceId);
  186. }
  187. }
  188. }
  189. HashMap haader = new HashMap();
  190. haader.put("Content-Type", "application/json");
  191. haader.put("Authorization", "Bearer " + tokenData);
  192. haader.put("x-operator-id", "622ee3450cf3bb5e1a486f1f");
  193. haader.put("X-Tenant-Id", "61a8c26719c3b5ffe9c4cffb");
  194. haader.put("X-Tenant-Type", "organization");
  195. HashMap boody = new HashMap();
  196. boody.put("resourceIds",allResourceIds);
  197. boody.put("needSign",true);
  198. String fileDownloadResponse = UtilHttp.doPost("https://open.teambition.com/api/v3/file/query/by-resource-ids", haader, null, boody);
  199. JSONObject response = JSON.parseObject(fileDownloadResponse);
  200. JSONArray resultArray = response.getJSONArray("result");
  201. for (int i=0;i< resultArray.size();i++) {
  202. JSONObject fileObject = resultArray.getJSONObject(i);
  203. downloadUrl = fileObject.getString("downloadUrl");
  204. downloadUrls.add(downloadUrl);
  205. }
  206. System.out.println("下载地址" + downloadUrls);
  207. ObjectMapper mapper = new ObjectMapper();
  208. // 使用Stream API创建List<Map<String, String>>
  209. List<Map<String, String>> res = downloadUrls.stream()
  210. .map(url -> {
  211. Map<String, String> map = new LinkedHashMap<>(); // 保持顺序
  212. map.put("arr", url);
  213. return map;
  214. })
  215. .collect(Collectors.toList());
  216. valueAsString = mapper.writeValueAsString(res);
  217. System.out.println("格式化后的下载地址:" + valueAsString);
  218. break;
  219. }
  220. }
  221. }
  222. System.out.println(); // 空行分隔
  223. System.out.println("负责人:" + involveMembers);
  224. String aaa = String.join(",", involveMembers);
  225. System.out.println("负责人:" + aaa);
  226. }
  227. return McR.success();
  228. }
  229. }