diff --git a/src/main/java/com/yuyou/openapi/openapi/model/pojo/token/TuBoShuTokenResponse.java b/src/main/java/com/yuyou/openapi/openapi/model/pojo/token/TuBoShuTokenResponse.java new file mode 100644 index 0000000..f0be434 --- /dev/null +++ b/src/main/java/com/yuyou/openapi/openapi/model/pojo/token/TuBoShuTokenResponse.java @@ -0,0 +1,35 @@ +package com.yuyou.openapi.openapi.model.pojo.token; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TuBoShuTokenResponse { + + @JSONField(name = "akey") + private Integer error_code; + + @JSONField(name = "status") + private String status; + + @JSONField(name = "token") + private String token; + + @JSONField(name = "data") + private TOKEN data; + + @Data + public static class TOKEN{ + + + @JSONField(name = "expires_in") + private Integer expiresIn; + + @JSONField(name = "expires_time") + private Long expiresTime; + } +} diff --git a/src/main/java/com/yuyou/openapi/openapi/task/ABDownTask.java b/src/main/java/com/yuyou/openapi/openapi/task/ABDownTask.java index 90f3b3d..9ebb725 100644 --- a/src/main/java/com/yuyou/openapi/openapi/task/ABDownTask.java +++ b/src/main/java/com/yuyou/openapi/openapi/task/ABDownTask.java @@ -19,6 +19,7 @@ import com.yuyou.openapi.openapi.dao.PhonesRepository; import com.yuyou.openapi.openapi.model.dto.*; import com.yuyou.openapi.openapi.model.pojo.QiZhuangDTO; import com.yuyou.openapi.openapi.model.pojo.token.QiZhuangTokenResponse; +import com.yuyou.openapi.openapi.model.pojo.token.TuBoShuTokenResponse; import com.yuyou.openapi.openapi.model.vo.ABClientXMJMessageVO; import com.yuyou.openapi.openapi.model.vo.data.DetailInfo; import com.yuyou.openapi.openapi.service.ABMessageService; @@ -271,24 +272,36 @@ public class ABDownTask { */ private boolean runTaskTuboShu(List messageDTOList){ - Map formMap = new HashMap<>(); Map formMapT = new HashMap<>(); - formMap.put("password", passWord); - formMap.put("coopname", coopname); int countToken = 0; String tokenT = ""; //获取token while (countToken < 3) { // 调用HTTP请求发送数据 - String result = sendPostReqTuBoShu(formMap, tuBoShuTokenUrl); - JSONObject jsonObject = JSON.parseObject(result); - tokenT = jsonObject.get("msg").toString(); - if ("0".equals(jsonObject.getString("status"))) { - log.info("========== [ABDownTask|runTaskTuboShu request success, response is {} ] ==========", jsonObject.toJSONString()); - tokenT = jsonObject.get("msg").toString(); - break; - } else { + + TuBoShuTokenResponse tuBoShuTokenResponse = abScheduleTask.getTuBoShuTokenResponse(); + // 检查如果第一次不存在就手动调用一次 + if (null == tuBoShuTokenResponse){ + abScheduleTask.executeGetTokenTuboshu(); + tuBoShuTokenResponse = abScheduleTask.getTuBoShuTokenResponse(); + } + if (tuBoShuTokenResponse != null){ + if ("0".equals(tuBoShuTokenResponse.getStatus())) { + log.info("========== [ABDownTask|runTaskTuboShu request success, response is {} ] ==========", tuBoShuTokenResponse.toString()); + tokenT = tuBoShuTokenResponse.getToken(); + break; + } else { + countToken++; + try { + // 重新发送前休眠3秒 + Thread.sleep(3_0000); + } catch (InterruptedException e) { + log.error("ABDownTask|runTaskTuboShu sleep ERROR. message is {} , {}", e.getMessage(), e); + } + log.error("========== [ABDownTask|runTaskTuboShu request fail, response is {} ] ==========", tuBoShuTokenResponse.toString()); + } + }else { countToken++; try { // 重新发送前休眠3秒 @@ -296,8 +309,9 @@ public class ABDownTask { } catch (InterruptedException e) { log.error("ABDownTask|runTaskTuboShu sleep ERROR. message is {} , {}", e.getMessage(), e); } - log.error("========== [ABDownTask|runTaskTuboShu request fail, response is {} ] ==========", jsonObject.toJSONString()); + log.error("========== [ABDownTask|runTaskTuboShu request fail, response is {} ] ==========", tuBoShuTokenResponse.toString()); } + } if (countToken >= 3 || "".equals(tokenT)) { log.error("========== [ABDownTask|runTaskTuboShu update send status fail, url is {} ] ==========", tuBoShuTokenUrl); diff --git a/src/main/java/com/yuyou/openapi/openapi/task/ABScheduleTask.java b/src/main/java/com/yuyou/openapi/openapi/task/ABScheduleTask.java index ab9c8b4..1897e62 100644 --- a/src/main/java/com/yuyou/openapi/openapi/task/ABScheduleTask.java +++ b/src/main/java/com/yuyou/openapi/openapi/task/ABScheduleTask.java @@ -6,14 +6,25 @@ import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.yuyou.openapi.openapi.model.pojo.token.QiZhuangTokeRequest; import com.yuyou.openapi.openapi.model.pojo.token.QiZhuangTokenResponse; +import com.yuyou.openapi.openapi.model.pojo.token.TuBoShuTokenResponse; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + @Component @Slf4j @Getter @@ -28,8 +39,19 @@ public class ABScheduleTask { @Value("${ab.qj.ckey}") private String qiJiaCKey; + @Value("${ab.tbs.password}") + private String passWord; + + @Value("${ab.tbs.coopname}") + private String coopname; + + @Value("${ab.tbs.tokenurl}") + private String tuBoShuTokenUrl; + private QiZhuangTokenResponse qiZhuangTokenResponse; + private TuBoShuTokenResponse tuBoShuTokenResponse; + /** @@ -47,6 +69,25 @@ public class ABScheduleTask { qiZhuangTokenResponse = JSONUtil.toBean(body, QiZhuangTokenResponse.class); } + /** + * 设置定时任务每二小时执行一次 + */ + @Scheduled(cron = "0 0 0/2 * * ? ") + public void executeGetTokenTuboshu() { + log.info("ABScheduleTask|executeGetTokenTuboshu is run , run Time is {}", DateUtil.date()); + // 先去拿Token + Map formMap = new HashMap<>(); + formMap.put("password", passWord); + formMap.put("coopname", coopname); + String body = sendPostReqTuBoShuToken(formMap,tuBoShuTokenUrl); + log.info("ABScheduleTask|executeGetTokenTuboshu , sendPostReqTuBoShuToken is {}", body); + TuBoShuTokenResponse tuBoShuTokenResponse1 = new TuBoShuTokenResponse(); + JSONObject jsonObject = JSON.parseObject(body); + tuBoShuTokenResponse1.setToken(jsonObject.getString("msg")); + tuBoShuTokenResponse1.setStatus(jsonObject.getString("status")); + tuBoShuTokenResponse = tuBoShuTokenResponse1; + } + /** * 测试定时任务 @@ -75,5 +116,66 @@ public class ABScheduleTask { return httpResponse; } + /** + * 调用HTTP请求发送数据 获取土拨鼠的token + * + * @param formMap 请求的body内容 + * @param urlT 请求的url + * @return + */ + private String sendPostReqTuBoShuToken(Map formMap , String urlT){ + String result = ""; + HttpURLConnection connection = null; + String boundary = "--------------------------132183525382215881770481"; + try { + URL url = new URL(urlT); + connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setRequestProperty("Connection", "Keep-Alive"); + // 不使用缓存 + connection.setUseCaches(false); + + StringBuffer formSB = new StringBuffer(); + if (formMap != null) { + if (formMap.size() > 0) { + for (Map.Entry entry : formMap.entrySet()) { + String inputName = entry.getKey(); + formSB.append("\r\n").append("--").append(boundary).append("\r\n"); + formSB.append("Content-Disposition: form-data; name=\"" + inputName + "\"\r\n\r\n"); + formSB.append(entry.getValue()); + } + formSB.append("\r\n").append("--").append(boundary).append("--"); + } + } + connection.connect(); + //OutputStream out = new DataOutputStream(connection.getOutputStream()); + PrintWriter out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8")); + out.print(formSB.toString()); + out.flush(); + //获得响应状态 + int resultCode = connection.getResponseCode(); + if (HttpURLConnection.HTTP_OK == resultCode) { + formSB = new StringBuffer(); + String readLine; + BufferedReader responseReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); + while ((readLine = responseReader.readLine()) != null) { + formSB.append(readLine).append("\n"); + } + responseReader.close(); + result = formSB.toString(); + } + out.close(); + } catch (Exception e) { + + + } finally { + connection.disconnect(); + } + return result; + } + }