SendProjrctUtils.java 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. package com.ydtech.utils.sendProjectUtils;
  2. import com.alibaba.fastjson.JSON;
  3. import com.ydtech.modules.order.entity.vo.sendProject.SendProjectInfo;
  4. import com.ydtech.modules.sendProject.dao.SendProjectMapper;
  5. import com.ydtech.modules.sendProject.entity.SendProjectEntity;
  6. import com.ydtech.utils.StringUtils;
  7. import com.ydtech.utils.scheduledFutureUtil.ScheduledFutureUtil;
  8. import com.ydtech.utils.sendCollectUtils.SendCollectUtils;
  9. import lombok.extern.slf4j.Slf4j;
  10. import org.apache.http.HttpEntity;
  11. import org.apache.http.ParseException;
  12. import org.apache.http.client.ClientProtocolException;
  13. import org.apache.http.client.methods.CloseableHttpResponse;
  14. import org.apache.http.client.methods.HttpPost;
  15. import org.apache.http.entity.StringEntity;
  16. import org.apache.http.impl.client.CloseableHttpClient;
  17. import org.apache.http.impl.client.HttpClientBuilder;
  18. import org.apache.http.util.EntityUtils;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.beans.factory.annotation.Value;
  21. import org.springframework.stereotype.Component;
  22. import java.io.IOException;
  23. import java.text.SimpleDateFormat;
  24. import java.util.*;
  25. @Slf4j
  26. @Component
  27. public class SendProjrctUtils{
  28. @Autowired
  29. private SendProjectMapper sendProjectMapper;
  30. @Autowired
  31. private ScheduledFutureUtil scheduledFutureUtil;
  32. @Value("${sendMessage-zg-yggl-IP}")
  33. private String sendMessageIP;
  34. private Integer num = 0;
  35. private static final String CORN = "0 */1 * * * ?";
  36. private static final String STRING_0 = "0";
  37. private static final String STRING_1 = "1";
  38. private static final String STRING_9 = "9";
  39. private static final String RESPONSE_SUCCESS = "200";
  40. public Map<String, String> sendProject(SendProjectInfo sendProjectInfo) {
  41. // 获得Http客户端(可以理解为:你得先有一个浏览器;注意:实际上HttpClient与浏览器是不一样的)
  42. CloseableHttpClient httpClient = HttpClientBuilder.create().build();
  43. // 创建Post请求
  44. HttpPost httpPost = new HttpPost(sendMessageIP + "system/record/receiveDistributeServices");
  45. // 我这里利用阿里的fastjson,将Object转换为json字符串;
  46. // (需要导入com.alibaba.fastjson.JSON包)
  47. String jsonString = JSON.toJSONString(sendProjectInfo);
  48. StringEntity entity = new StringEntity(jsonString, "UTF-8");
  49. // post请求是将参数放在请求体里面传过去的;这里将entity放入post请求体中
  50. httpPost.setEntity(entity);
  51. httpPost.setHeader("Content-Type", "application/json;charset=utf8");
  52. sendProjectInfo.setHttpPost(httpPost.toString());
  53. // 响应模型
  54. CloseableHttpResponse response = null;
  55. String responseCode = new String();
  56. try {
  57. // 由客户端执行(发送)Post请求
  58. response = httpClient.execute(httpPost);
  59. // 从响应模型中获取响应实体
  60. HttpEntity responseEntity = response.getEntity();
  61. //从响应实体中截取状态码
  62. String string = EntityUtils.toString(responseEntity);
  63. sendProjectInfo.setHttpResponse(string);
  64. String responseString = string.substring(string.lastIndexOf(":") + 1);
  65. responseCode = responseString.substring(0, responseString.length() - 1);
  66. log.info("响应状态为:{}", response.getStatusLine());
  67. } catch (Exception e) {
  68. sendProjectInfo.setHttpResponse(e.getMessage());
  69. sendProjectInfo.setSendState(STRING_9);
  70. updateSendProjectInfo(sendProjectInfo);
  71. // SendProjrctUtils sendProjrctUtils = new SendProjrctUtils();
  72. // scheduledFutureUtil.startJob(sendProjrctUtils, CORN);
  73. e.printStackTrace();
  74. } finally {
  75. try {
  76. // 释放资源
  77. if (httpClient != null) {
  78. httpClient.close();
  79. }
  80. if (response != null) {
  81. response.close();
  82. }
  83. } catch (IOException e) {
  84. e.printStackTrace();
  85. }
  86. }
  87. final String code = responseCode;
  88. return new HashMap<String, String>() {{
  89. put("responseCode", code);
  90. }};
  91. }
  92. public void firstSendProject(SendProjectInfo sendProjectInfo) {
  93. log.info("首次推送服务接口入参:{}", sendProjectInfo);
  94. Map<String, String> responseMap = new HashMap<>();
  95. responseMap = sendProject(sendProjectInfo);
  96. if (RESPONSE_SUCCESS.equals(responseMap.get("responseCode"))) {
  97. sendProjectInfo.setSendState(STRING_1);
  98. updateSendProjectInfo(sendProjectInfo);
  99. } else {
  100. sendProjectInfo.setSendState(STRING_0);
  101. updateSendProjectInfo(sendProjectInfo);
  102. }
  103. }
  104. public void sendProjectRetry(SendProjectInfo sendProjectInfo) {
  105. Map<String, String> responseMap = new HashMap<>();
  106. responseMap = sendProject(sendProjectInfo);
  107. if (RESPONSE_SUCCESS.equals(responseMap.get("responseCode"))) {
  108. sendProjectInfo.setSendState(STRING_1);
  109. updateSendProjectInfo(sendProjectInfo);
  110. } else {
  111. Integer failNum = sendProjectInfo.getFailNum();
  112. failNum = ++failNum;
  113. sendProjectInfo.setFailNum(failNum);
  114. sendProjectInfo.setSendState(STRING_0);
  115. updateSendProjectInfo(sendProjectInfo);
  116. }
  117. }
  118. private void updateSendProjectInfo(SendProjectInfo sendProjectInfo) {
  119. SendProjectEntity updateSendProject = new SendProjectEntity();
  120. if (sendProjectInfo.getFailNum() != null) {
  121. Integer failNum = sendProjectInfo.getFailNum();
  122. failNum = ++failNum;
  123. updateSendProject.setFailNum(failNum);
  124. }
  125. updateSendProject.setSendUuid(sendProjectInfo.getUuid());
  126. updateSendProject.setSendState(sendProjectInfo.getSendState());
  127. updateSendProject.setHttpPost(sendProjectInfo.getHttpPost());
  128. updateSendProject.setHttpResponse(sendProjectInfo.getHttpResponse());
  129. updateSendProject.setUpdateTime(new Date());
  130. try {
  131. log.info("修改推送服务数据库入参:{}", JSON.toJSON(updateSendProject));
  132. sendProjectMapper.updateSendProjectInfo(updateSendProject);
  133. } catch (Exception e) {
  134. e.printStackTrace();
  135. log.error("修改推送服务数据库报错:{}", e.getMessage());
  136. }
  137. }
  138. public void sendProjectRetry() {
  139. log.info("推送服务补偿启动,启动时间:{}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
  140. List<SendProjectEntity> sendFailInfo = new ArrayList<SendProjectEntity>();
  141. try {
  142. sendFailInfo = sendProjectMapper.getSendFailInfo();
  143. log.info("查询send_project_history数据库出参:{}", JSON.toJSON(sendFailInfo));
  144. } catch (Exception e) {
  145. e.printStackTrace();
  146. log.error("查询send_project_history数据库报错:{}", e.getMessage());
  147. }
  148. if (sendFailInfo != null && !sendFailInfo.isEmpty()) {
  149. for (SendProjectEntity sendProjectEntity : sendFailInfo) {
  150. if (sendProjectEntity == null && StringUtils.isNullOrEmpty(sendProjectEntity)) {
  151. continue;
  152. }
  153. if (sendProjectEntity.getFailNum() != null && sendProjectEntity.getFailNum() < 3) {
  154. SendProjectInfo sendProjectInfo = new SendProjectInfo();
  155. sendProjectInfo.setGiveBudget(sendProjectEntity.getTotalAmount());
  156. sendProjectInfo.setUserName(sendProjectEntity.getUserName());
  157. sendProjectInfo.setUserPhone(sendProjectEntity.getUserPhone());
  158. sendProjectInfo.setUserCarNum(sendProjectEntity.getUserCarNum());
  159. sendProjectInfo.setUuid(sendProjectEntity.getSendUuid());
  160. sendProjectInfo.setFailNum(sendProjectEntity.getFailNum());
  161. this.sendProjectRetry(sendProjectInfo);
  162. }
  163. }
  164. }
  165. }
  166. // @Override
  167. // public void run() {
  168. // num++;
  169. // log.info("第{}次重新推送服务消息", num);
  170. // this.sendProjectRetry();
  171. // if (num == 3) {
  172. // //停止定时任务
  173. // scheduledFutureUtil.endJob("com.ydtech.utils.sendProjectUtils");
  174. // }
  175. // }
  176. }