123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- package cn.com.qmth.print.manage.utils;
- import cn.com.qmth.print.manage.config.DictionaryConfig;
- import com.qmth.boot.tools.signature.SignatureEntity;
- import com.qmth.boot.tools.signature.SignatureType;
- import net.sf.json.JSONObject;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.concurrent.atomic.AtomicInteger;
- /**
- * 同步云阅卷接口工具类
- * <p>
- * Date: 2021/10/29.
- */
- @Component
- public class SolarUtils {
- private final static Logger log = LoggerFactory.getLogger(SolarUtils.class);
- // 所有请求方法默认为"POST"
- private static final String POST_METHOD = "POST";
- private static final String HEADER_AUTHORIZATION = "Authorization";
- private static final String HEADER_TIME = "time";
- private final int DEFAULT_PAGE_NUMBER = 1;
- private final int DEFAULT_PAGE_SIZE = 100;
- @Autowired
- private DictionaryConfig dictionaryConfig;
- /**
- * 同步学校
- *
- * @return
- */
- public List<Map> pullSchool() {
- String host = dictionaryConfig.solarDomain().getHost();
- String uri = dictionaryConfig.solarDomain().getUri();
- validUrl(host, uri);
- String postUrl = host.concat(uri);
- List<Map> finalList = new ArrayList<>();
- try {
- AtomicInteger integer = new AtomicInteger(DEFAULT_PAGE_NUMBER);
- while (true) {
- //参数
- Map<String, String> map = new HashMap<>();
- map.put("pageNumber", String.valueOf(integer.getAndIncrement()));
- map.put("pageSize", String.valueOf(DEFAULT_PAGE_SIZE));
- String result = HttpUtils.sendPost(postUrl, map, getHeaders(uri));
- JSONObject jsonObject = new JSONObject();
- List<Map> mapList = jsonObject.getJSONArray(result);
- if (mapList.size() == 0) {
- break;
- }
- finalList.addAll(mapList);
- }
- } catch (Exception e) {
- throw new RuntimeException("请求异常:" + e.getMessage());
- }
- return finalList;
- }
- /**
- * http请求头
- *
- * @param url 请求URL
- */
- private Map<String, String> getHeaders(String url) {
- long time = System.currentTimeMillis();
- Map<String, String> header = new HashMap<>();
- header.put(HEADER_AUTHORIZATION, createSign(time, url));
- header.put(HEADER_TIME, String.valueOf(time));
- return header;
- }
- /**
- * 签名
- *
- * @param time 时间戳
- * @param url 请求URL
- */
- private String createSign(long time, String url) {
- String accessKey = dictionaryConfig.solarDomain().getAccessKey();
- String accessSecret = dictionaryConfig.solarDomain().getAccessSecret();
- if (StringUtils.isAnyBlank(accessKey, accessSecret)) {
- throw new RuntimeException("accessKey或者accessSecret未配置");
- }
- return SignatureEntity.build(SignatureType.SECRET, POST_METHOD, url, time, accessKey, accessSecret);
- }
- /**
- * 校验url是否配置
- *
- * @param urls URL数组
- */
- private void validUrl(String... urls) {
- if (StringUtils.isAnyBlank(urls)) {
- throw new RuntimeException("请求URL未配置");
- }
- }
- }
|