ApprovalResult.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package com.uas.eis.utils;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.fasterxml.jackson.core.JsonProcessingException;
  4. import com.uas.eis.core.config.DingCallbackCrypto;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.beans.factory.annotation.Value;
  7. import org.springframework.web.bind.annotation.*;
  8. import com.alibaba.fastjson.JSON;
  9. import java.util.Map;
  10. @RestController
  11. @RequestMapping("approval")
  12. public class ApprovalResult {
  13. @Value("${dingTalk.appKey}")
  14. private String appKey;
  15. @Value("${dingTalk.callToken}")
  16. private String callToken;
  17. @Value("${dingTalk.callAesKey}")
  18. private String callAesKey;
  19. @Autowired
  20. private OaUtils oaUtils;
  21. @PostMapping
  22. public Map<String, String> approval(@RequestParam(value = "msg_signature", required = false) String msg_signature,
  23. @RequestParam(value = "timestamp", required = false) String timeStamp,
  24. @RequestParam(value = "nonce", required = false) String nonce,
  25. @RequestBody(required = false) JSONObject json){
  26. try {
  27. // 1. 从http请求中获取加解密参数
  28. // 2. 使用加解密类型
  29. // Constant.OWNER_KEY 说明:
  30. // 1、开发者后台配置的订阅事件为应用级事件推送,此时OWNER_KEY为应用的APP_KEY。
  31. // 2、调用订阅事件接口订阅的事件为企业级事件推送,
  32. // 此时OWNER_KEY为:企业的appkey(企业内部应用)或SUITE_KEY(三方应用)
  33. DingCallbackCrypto callbackCrypto = new DingCallbackCrypto(callToken, callAesKey, appKey);
  34. String encryptMsg = json.getString("encrypt");
  35. String decryptMsg = callbackCrypto.getDecryptMsg(msg_signature, timeStamp, nonce, encryptMsg);
  36. // 3. 反序列化回调事件json数据
  37. JSONObject eventJson = JSON.parseObject(decryptMsg);
  38. String eventType = eventJson.getString("EventType");
  39. // 4. 根据EventType分类处理
  40. if ("check_url".equals(eventType)) {
  41. // 测试回调url的正确性
  42. System.out.println("测试回调url的正确性");
  43. } else if ("bpms_instance_change".equals(eventType)) {
  44. // 处理审批事件 TODO
  45. String processInstanceId = eventJson.get("processInstanceId").toString();
  46. String aeecssToken = oaUtils.getAeecssToken();
  47. Map<String, String> processInsDetail = oaUtils.getProcessInsDetail(processInstanceId, aeecssToken);
  48. System.out.println("审批事件----------------->响应结果为----------------->");
  49. System.out.println(aeecssToken);
  50. System.out.println(processInsDetail);
  51. System.out.println("审批事件结束----------------------------------------》");
  52. } else {
  53. // 添加其他已注册的
  54. System.out.println("发生了:" + eventType + "事件");
  55. }
  56. // 5. 返回success的加密数据
  57. Map<String, String> successMap = callbackCrypto.getEncryptedMap("success");
  58. return successMap;
  59. } catch (DingCallbackCrypto.DingTalkEncryptException | JsonProcessingException e) {
  60. e.printStackTrace();
  61. } catch (Exception e) {
  62. e.printStackTrace();
  63. }
  64. return null;
  65. }
  66. }