ZxService.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. package com.technology.huahai.web.zx;
  2. import com.alibaba.fastjson2.JSONObject;
  3. import com.technology.huahai.common.constant.RedisKeyConstant;
  4. import com.technology.huahai.common.core.controller.domain.AjaxResult;
  5. import com.technology.huahai.common.core.page.TableDataInfo;
  6. import com.technology.huahai.common.exception.CsmException;
  7. import com.technology.huahai.common.utils.JsonUtils;
  8. import com.technology.huahai.common.utils.RedisUtils;
  9. import com.technology.huahai.common.utils.StringUtils;
  10. import com.technology.huahai.web.dto.ChannelDto;
  11. import com.technology.huahai.web.vo.ZxResultDto;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.beans.factory.annotation.Value;
  16. import org.springframework.http.HttpEntity;
  17. import org.springframework.http.HttpHeaders;
  18. import org.springframework.http.MediaType;
  19. import org.springframework.http.ResponseEntity;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.util.LinkedMultiValueMap;
  22. import org.springframework.util.MultiValueMap;
  23. import org.springframework.web.client.RestTemplate;
  24. @Service
  25. public class ZxService {
  26. protected final Logger logger = LoggerFactory.getLogger(this.getClass());
  27. @Autowired
  28. private RestTemplate restTemplate;
  29. @Autowired
  30. RedisUtils redisUtils;
  31. @Value("${zx.userId}")
  32. private String userId;
  33. @Value("${zx.userKey}")
  34. private String userKey;
  35. @Value("${zx.loginUrl}")
  36. private String loginUrl;
  37. @Value("${zx.csmCtMethodKey}")
  38. private String csmCtMethodKey;
  39. @Value("${zx.outinterfaceUrl}")
  40. private String outinterfaceUrl;
  41. /**
  42. * 场所码内网透传接口(操作类)
  43. * @param o
  44. * @param o
  45. * methodName
  46. * @return
  47. */
  48. public AjaxResult cmsEmsInterfaceOperation(Object o, String methodName){
  49. String token = getZxTokenByRedis();
  50. if(StringUtils.isBlank(token)){
  51. throw new CsmException("总线token获取失败");
  52. }else{
  53. ChannelDto channelDto = new ChannelDto();
  54. channelDto.setMethod(methodName);
  55. channelDto.setData(o);
  56. String jsonStr = JsonUtils.writeValueAsString(channelDto);
  57. MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
  58. formData.add("methodkey", csmCtMethodKey);
  59. formData.add("postDataJson", jsonStr);
  60. // 4. 构造请求头,指定 Content-Type 为 application/x-www-form-urlencoded
  61. HttpHeaders headers = new HttpHeaders();
  62. headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
  63. headers.set("Authorization","Bearer "+token);
  64. //headers.set("X-Service-Name",methodName);
  65. // 5. 构造请求实体(包含头和体)
  66. HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(formData, headers);
  67. // 6. 发送请求并获取响应
  68. logger.info("本次总线请求参数为:{}",jsonStr);
  69. logger.info("本次总线请求token为:{}",headers.get("Authorization"));
  70. ResponseEntity<String> zxResult = restTemplate.postForEntity(outinterfaceUrl, requestEntity, String.class);
  71. logger.info("总线响应结果 {}", zxResult.getBody());
  72. ZxResultDto zxResultDto = JsonUtils.parseJson(zxResult.getBody(),ZxResultDto.class);
  73. if(0==zxResultDto.getStatus()){
  74. String data = zxResultDto.getData();
  75. AjaxResult ajaxResult = JsonUtils.parseJson(data, AjaxResult.class);
  76. return ajaxResult;
  77. }else{
  78. throw new CsmException(zxResultDto.getMessage());
  79. }
  80. }
  81. }
  82. /**
  83. * 场所码内网透传接口(查询列表类)
  84. * @param o
  85. * @param methodName
  86. * @return
  87. */
  88. public TableDataInfo cmsEmsInterfaceQueryList(Object o, String methodName){
  89. String token = getZxTokenByRedis();
  90. if(StringUtils.isBlank(token)){
  91. throw new CsmException("总线token获取失败");
  92. }else{
  93. ChannelDto channelDto = new ChannelDto();
  94. channelDto.setMethod(methodName);
  95. channelDto.setData(o);
  96. String jsonStr = JsonUtils.writeValueAsString(channelDto);
  97. MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
  98. formData.add("methodkey", csmCtMethodKey);
  99. formData.add("postDataJson", jsonStr);
  100. // 4. 构造请求头,指定 Content-Type 为 application/x-www-form-urlencoded
  101. HttpHeaders headers = new HttpHeaders();
  102. headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
  103. headers.set("Authorization","Bearer "+token);
  104. //headers.set("X-Service-Name",methodName);
  105. // 5. 构造请求实体(包含头和体)
  106. HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(formData, headers);
  107. // 6. 发送请求并获取响应
  108. logger.info("本次总线请求参数为:{}",jsonStr);
  109. logger.info("本次总线请求token为:{}",headers.get("Authorization"));
  110. ResponseEntity<String> zxResult = restTemplate.postForEntity(outinterfaceUrl, requestEntity, String.class);
  111. logger.info("总线响应结果 {}", zxResult.getBody());
  112. ZxResultDto zxResultDto = JsonUtils.parseJson(zxResult.getBody(),ZxResultDto.class);
  113. if(0==zxResultDto.getStatus()){
  114. String data = zxResultDto.getData();
  115. TableDataInfo tableDataInfo = JsonUtils.parseJson(data, TableDataInfo.class);
  116. return tableDataInfo;
  117. }else{
  118. throw new CsmException(zxResultDto.getMessage());
  119. }
  120. }
  121. }
  122. public String getZxTokenByRedis(){
  123. Object o = redisUtils.get(RedisKeyConstant.zxtokenKey);
  124. if(null != o && StringUtils.isNotEmpty(String.valueOf(o)) && !"null".equals(String.valueOf(o))){
  125. return String.valueOf(o);
  126. }else{
  127. return getZxTokenByInterface();
  128. }
  129. }
  130. public synchronized String getZxTokenByInterface(){
  131. Object o = redisUtils.get(RedisKeyConstant.zxtokenKey);
  132. if(null != o && StringUtils.isNotEmpty(String.valueOf(o)) && !"null".equals(String.valueOf(o))){
  133. return String.valueOf(o);
  134. }else{
  135. MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
  136. formData.add("userID", userId);
  137. formData.add("userKey", userKey);
  138. // 4. 构造请求头,指定 Content-Type 为 application/x-www-form-urlencoded
  139. HttpHeaders headers = new HttpHeaders();
  140. headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
  141. // 5. 构造请求实体(包含头和体)
  142. HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(formData, headers);
  143. // 6. 发送请求并获取响应(假设返回的是 String 类型)
  144. JSONObject jsonObject = restTemplate.postForObject(loginUrl, requestEntity, JSONObject.class);
  145. logger.info("总线token获取结果 {}",jsonObject);
  146. Object access_token = jsonObject.get("access_token");
  147. if(null == access_token){
  148. throw new CsmException("获取总线token失败");
  149. }else{
  150. String token = String.valueOf(access_token);
  151. redisUtils.set(RedisKeyConstant.zxtokenKey,token,7000);
  152. return token;
  153. }
  154. }
  155. }
  156. }