对比新文件 |
| | |
| | | package com.iailab.module.shasteel.job.task; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.iailab.framework.common.util.http.HttpUtils; |
| | | import com.iailab.module.model.api.mcs.McsApi; |
| | | import com.iailab.module.model.api.mcs.dto.ElectricityPriceSegmentedDTO; |
| | | import com.iailab.module.shasteel.job.vo.RequestAccessTokenVO; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.amqp.rabbit.core.RabbitTemplate; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.crypto.Cipher; |
| | | import java.security.KeyFactory; |
| | | import java.security.PublicKey; |
| | | import java.security.spec.X509EncodedKeySpec; |
| | | import java.time.Instant; |
| | | import java.time.LocalDate; |
| | | import java.time.ZoneId; |
| | | import java.time.ZonedDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * 同步分段数据定时任务 |
| | | * @author Jay |
| | | */ |
| | | @Component("syncSegmentedDataTask") |
| | | public class SyncSegmentedDataTask implements ITask { |
| | | private Logger logger = LoggerFactory.getLogger(getClass()); |
| | | |
| | | @Autowired |
| | | private McsApi mcsApi; |
| | | |
| | | @Autowired |
| | | private RabbitTemplate rabbitTemplate; |
| | | |
| | | private static final String PUBLIC_KEY_URL = "http://10.88.7.107:8081/api/api/services/Runtime/Authentication/GetLoginRSAPublicKeyAsync"; |
| | | |
| | | private static final String ACCESS_TOKEN_URL = "http://10.88.7.107:8081/EP.Web/account/ajaxLogin"; |
| | | |
| | | private static final String QUERY_SEGMENTED_DATA_URL = "http://10.88.7.107:8081/SG.Web/api/services/nYJK/DiagnosticsSg/QuerySegmentedDataAsync"; |
| | | |
| | | private static final String USERNAME = "MX001@sgis"; |
| | | |
| | | private static final String PASSWORD = "123456"; |
| | | |
| | | @Override |
| | | public void run(String params) { |
| | | logger.info("runPredictModuleTask定时任务正在执行,参数为:{}", params); |
| | | try { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.set(Calendar.SECOND, 0); |
| | | calendar.set(Calendar.MILLISECOND, 0); |
| | | //获取 公钥 |
| | | String publicKeyKey = getPublicKey(); |
| | | // 组合密码 |
| | | Instant instant = Instant.now(); // 获取当前时间的UTC时间 |
| | | ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, ZoneId.of("Z")); |
| | | DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME; |
| | | String isoString = zonedDateTime.format(formatter); |
| | | String password = isoString + "|" + PASSWORD; |
| | | RequestAccessTokenVO requestAccessToken = new RequestAccessTokenVO(); |
| | | requestAccessToken.setUserName(USERNAME); |
| | | // 使用公钥和组合后的密码进行密码加密 |
| | | requestAccessToken.setReaPassword(encryptWithPublicKey(publicKeyKey, password)); |
| | | //获取 token |
| | | String accessToken = "Bearer " + getAccessToken(requestAccessToken); |
| | | //获取保存后的数据 |
| | | List<ElectricityPriceSegmentedDTO> list = getElectricityPriceSegmentedList(accessToken); |
| | | list.forEach(item -> { |
| | | mcsApi.createElectricityPrice(item); |
| | | }); |
| | | } catch (Exception ex) { |
| | | logger.error("runPredictModuleTask运行异常"); |
| | | ex.printStackTrace(); |
| | | } |
| | | logger.info("runPredictModuleTask运行完成"); |
| | | } |
| | | |
| | | public String getPublicKey() { |
| | | String publicKeyString = ""; |
| | | String resp = HttpUtils.sendGet(PUBLIC_KEY_URL,null,""); |
| | | logger.info("获取公钥的返回值:" + resp); |
| | | JSONObject jsonObject = JSON.parseObject(resp); |
| | | if (jsonObject.get("status").equals(200)) { |
| | | publicKeyString = jsonObject.getJSONObject("data").getString("pemPublicKey"); |
| | | } |
| | | return publicKeyString.replace("-----BEGIN PUBLIC KEY-----", "") |
| | | .replace("-----END PUBLIC KEY-----", "") |
| | | .replaceAll("\\s", ""); |
| | | } |
| | | |
| | | public String getAccessToken(RequestAccessTokenVO requestAccessToken) { |
| | | String accessToken = ""; |
| | | String resp = HttpUtils.sendPost(ACCESS_TOKEN_URL, JSON.toJSONString(requestAccessToken)); |
| | | logger.info("获取token的返回值:" + resp); |
| | | JSONObject jsonObject = JSON.parseObject(resp); |
| | | if (jsonObject.get("status").equals(200)) { |
| | | String token = jsonObject.getJSONObject("data").getString("token"); |
| | | JSONObject tokenObject = JSON.parseObject(token); |
| | | accessToken = tokenObject.getString("accessToken"); |
| | | logger.info("获取到accessToken:" + accessToken); |
| | | } |
| | | return accessToken; |
| | | } |
| | | |
| | | public List<ElectricityPriceSegmentedDTO> getElectricityPriceSegmentedList(String accessToken){ |
| | | Map<String, String> paramsMap = new HashMap<>(); |
| | | LocalDate date = LocalDate.now(); // 获取当前日期的LocalDate实例 |
| | | int year = date.getYear(); |
| | | paramsMap.put("clock", String.valueOf(year)); |
| | | String resp = HttpUtils.sendPost(QUERY_SEGMENTED_DATA_URL, JSON.toJSONString(paramsMap), accessToken); |
| | | JSONObject jsonObject = JSON.parseObject(resp); |
| | | return jsonObject.getJSONArray("data").toJavaList(ElectricityPriceSegmentedDTO.class); |
| | | } |
| | | |
| | | public static String encryptWithPublicKey(String publicKeyString, String data) throws Exception { |
| | | PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(Base64.getDecoder().decode(publicKeyString))); |
| | | Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); |
| | | cipher.init(Cipher.ENCRYPT_MODE, publicKey); |
| | | return Base64.getEncoder().encodeToString(cipher.doFinal(data.getBytes())); |
| | | } |
| | | } |