SolarUtils.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package cn.com.qmth.print.manage.utils;
  2. import cn.com.qmth.print.manage.config.DictionaryConfig;
  3. import com.qmth.boot.tools.signature.SignatureEntity;
  4. import com.qmth.boot.tools.signature.SignatureType;
  5. import net.sf.json.JSONObject;
  6. import org.apache.commons.lang3.StringUtils;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Component;
  11. import java.util.ArrayList;
  12. import java.util.HashMap;
  13. import java.util.List;
  14. import java.util.Map;
  15. import java.util.concurrent.atomic.AtomicInteger;
  16. /**
  17. * 同步云阅卷接口工具类
  18. * <p>
  19. * Date: 2021/10/29.
  20. */
  21. @Component
  22. public class SolarUtils {
  23. private final static Logger log = LoggerFactory.getLogger(SolarUtils.class);
  24. // 所有请求方法默认为"POST"
  25. private static final String POST_METHOD = "POST";
  26. private static final String HEADER_AUTHORIZATION = "Authorization";
  27. private static final String HEADER_TIME = "time";
  28. private final int DEFAULT_PAGE_NUMBER = 1;
  29. private final int DEFAULT_PAGE_SIZE = 100;
  30. @Autowired
  31. private DictionaryConfig dictionaryConfig;
  32. /**
  33. * 同步学校
  34. *
  35. * @return
  36. */
  37. public List<Map> pullSchool() {
  38. String host = dictionaryConfig.solarDomain().getHost();
  39. String uri = dictionaryConfig.solarDomain().getUri();
  40. validUrl(host, uri);
  41. String postUrl = host.concat(uri);
  42. List<Map> finalList = new ArrayList<>();
  43. try {
  44. AtomicInteger integer = new AtomicInteger(DEFAULT_PAGE_NUMBER);
  45. while (true) {
  46. //参数
  47. Map<String, String> map = new HashMap<>();
  48. map.put("pageNumber", String.valueOf(integer.getAndIncrement()));
  49. map.put("pageSize", String.valueOf(DEFAULT_PAGE_SIZE));
  50. String result = HttpUtils.sendPost(postUrl, map, getHeaders(uri));
  51. JSONObject jsonObject = new JSONObject();
  52. List<Map> mapList = jsonObject.getJSONArray(result);
  53. if (mapList.size() == 0) {
  54. break;
  55. }
  56. finalList.addAll(mapList);
  57. }
  58. } catch (Exception e) {
  59. throw new RuntimeException("请求异常:" + e.getMessage());
  60. }
  61. return finalList;
  62. }
  63. /**
  64. * http请求头
  65. *
  66. * @param url 请求URL
  67. */
  68. private Map<String, String> getHeaders(String url) {
  69. long time = System.currentTimeMillis();
  70. Map<String, String> header = new HashMap<>();
  71. header.put(HEADER_AUTHORIZATION, createSign(time, url));
  72. header.put(HEADER_TIME, String.valueOf(time));
  73. return header;
  74. }
  75. /**
  76. * 签名
  77. *
  78. * @param time 时间戳
  79. * @param url 请求URL
  80. */
  81. private String createSign(long time, String url) {
  82. String accessKey = dictionaryConfig.solarDomain().getAccessKey();
  83. String accessSecret = dictionaryConfig.solarDomain().getAccessSecret();
  84. if (StringUtils.isAnyBlank(accessKey, accessSecret)) {
  85. throw new RuntimeException("accessKey或者accessSecret未配置");
  86. }
  87. return SignatureEntity.build(SignatureType.SECRET, POST_METHOD, url, time, accessKey, accessSecret);
  88. }
  89. /**
  90. * 校验url是否配置
  91. *
  92. * @param urls URL数组
  93. */
  94. private void validUrl(String... urls) {
  95. if (StringUtils.isAnyBlank(urls)) {
  96. throw new RuntimeException("请求URL未配置");
  97. }
  98. }
  99. }