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; /** * 同步云阅卷接口工具类 *

* 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 pullSchool() { String host = dictionaryConfig.solarDomain().getHost(); String uri = dictionaryConfig.solarDomain().getUri(); validUrl(host, uri); String postUrl = host.concat(uri); List finalList = new ArrayList<>(); try { AtomicInteger integer = new AtomicInteger(DEFAULT_PAGE_NUMBER); while (true) { //参数 Map 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 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 getHeaders(String url) { long time = System.currentTimeMillis(); Map 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未配置"); } } }