安眼大屏公网访问获取token接口对接
This commit is contained in:
+6
@@ -104,4 +104,10 @@ public interface AnYanClient {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
IPage<MedicalAbnormalVO> medicalAbnormalList(MedicalAbnormalDTO param);
|
IPage<MedicalAbnormalVO> medicalAbnormalList(MedicalAbnormalDTO param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公网环境获取服务访问token (目前仅用于访问安眼大屏)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
String publicNetworkToken() throws Exception;
|
||||||
}
|
}
|
||||||
|
|||||||
+67
-18
@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
|
|||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.renkang.anyan.config.AnYanProperties;
|
import com.renkang.anyan.config.AnYanProperties;
|
||||||
@@ -16,10 +17,10 @@ import com.renkang.anyan.model.dto.HealthSignListParam;
|
|||||||
import com.renkang.anyan.model.dto.MedicalAbnormalDTO;
|
import com.renkang.anyan.model.dto.MedicalAbnormalDTO;
|
||||||
import com.renkang.anyan.model.vo.*;
|
import com.renkang.anyan.model.vo.*;
|
||||||
import com.renkang.anyan.utils.PageResultToBeanUtil;
|
import com.renkang.anyan.utils.PageResultToBeanUtil;
|
||||||
|
import com.renkang.anyan.utils.SM4Utils;
|
||||||
|
import com.renkang.anyan.utils.StringUtils;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.jeecg.common.api.vo.Result;
|
|
||||||
import org.jeecg.common.exception.ExceptionAssertsUtil;
|
import org.jeecg.common.exception.ExceptionAssertsUtil;
|
||||||
import org.jeecg.util.RedisClientUtil;
|
import org.jeecg.util.RedisClientUtil;
|
||||||
import org.jeecg.util.RedisKeyPrefix;
|
import org.jeecg.util.RedisKeyPrefix;
|
||||||
@@ -28,10 +29,12 @@ import org.springframework.http.HttpStatus;
|
|||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.retry.annotation.EnableRetry;
|
import org.springframework.retry.annotation.EnableRetry;
|
||||||
|
import org.springframework.retry.annotation.Retryable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,13 +47,15 @@ import java.util.stream.Collectors;
|
|||||||
@EnableRetry
|
@EnableRetry
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class AnYanClientExecutor implements AnYanClient {
|
public class AnYanClientExecutor implements AnYanClient {
|
||||||
|
//安眼获取token访问公钥
|
||||||
|
private String publicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJL0JkqsUoK6kt3JyogsgqNp9VDGDp+t3ZAGMbVoMPdHNT2nfiIVh9ZMNHF7g2XiAa8O8AQWyh2PjMR0NiUSVQMCAwEAAQ==";
|
||||||
private final RedisClientUtil redisClientUtil;
|
private final RedisClientUtil redisClientUtil;
|
||||||
private final AnYanProperties anYanProperties;
|
private final AnYanProperties anYanProperties;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getAuthToken() {
|
public String getAuthToken() {
|
||||||
String token = redisClientUtil.get(new RedisKeyPrefix(AnYanConstants.AN_YAN_API_TOKEN_PREFIX) ,"token",String.class);
|
String token = redisClientUtil.get(new RedisKeyPrefix(AnYanConstants.AN_YAN_API_TOKEN_PREFIX) ,"token",String.class);
|
||||||
if(StringUtils.isEmpty(token)){
|
if(StrUtil.isEmpty(token)){
|
||||||
AuthResult authResult = getAuthTokenExecutor();
|
AuthResult authResult = getAuthTokenExecutor();
|
||||||
if(ObjectUtil.isNotEmpty(authResult) && StrUtil.isNotEmpty(authResult.getAccess_token())){
|
if(ObjectUtil.isNotEmpty(authResult) && StrUtil.isNotEmpty(authResult.getAccess_token())){
|
||||||
token = authResult.getAccess_token();
|
token = authResult.getAccess_token();
|
||||||
@@ -92,75 +97,119 @@ public class AnYanClientExecutor implements AnYanClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Retryable(maxAttempts = 2)
|
||||||
public List<MedicalPeopleNumStatisticsVO> examinationStatistics(Integer medicalYear) {
|
public List<MedicalPeopleNumStatisticsVO> examinationStatistics(Integer medicalYear) {
|
||||||
if(null == medicalYear){ medicalYear = DateUtil.year(new Date()); }
|
if(null == medicalYear){ medicalYear = DateUtil.year(new Date()); }
|
||||||
JSONObject param = new JSONObject();
|
JSONObject param = new JSONObject();
|
||||||
param.put("medicalYear",String.valueOf(medicalYear));
|
param.put("medicalYear",String.valueOf(medicalYear));
|
||||||
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HEALTH_EXAMINATION_STATISTICS, buildTokenHeader(), param);
|
AnYanResult<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HEALTH_EXAMINATION_STATISTICS, buildTokenHeader(), param);
|
||||||
List<Object> listMaps = (List<Object>) result.getResult();
|
List<Object> listMaps = (List<Object>) result.getData();
|
||||||
return listMaps.stream().map(lMap -> BeanUtil.toBean(lMap, MedicalPeopleNumStatisticsVO.class)).collect(Collectors.toList());
|
return listMaps.stream().map(lMap -> BeanUtil.toBean(lMap, MedicalPeopleNumStatisticsVO.class)).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Retryable(maxAttempts = 2)
|
||||||
public HealthSignStatVO healthCheckStatistics(Date beginDate, Date endDate) {
|
public HealthSignStatVO healthCheckStatistics(Date beginDate, Date endDate) {
|
||||||
JSONObject param = new JSONObject();
|
JSONObject param = new JSONObject();
|
||||||
param.put("inputDateBegin",ObjectUtil.isEmpty(beginDate)? DateUtil.today() : DateUtil.formatDate(beginDate));
|
param.put("inputDateBegin",ObjectUtil.isEmpty(beginDate)? DateUtil.today() : DateUtil.formatDate(beginDate));
|
||||||
param.put("inputDateEnd",ObjectUtil.isEmpty(endDate)? DateUtil.today() : DateUtil.formatDate(endDate));
|
param.put("inputDateEnd",ObjectUtil.isEmpty(endDate)? DateUtil.today() : DateUtil.formatDate(endDate));
|
||||||
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HEALTH_CHECK_STATISTICS, buildTokenHeader(), param);
|
AnYanResult<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HEALTH_CHECK_STATISTICS, buildTokenHeader(), param);
|
||||||
return BeanUtil.toBean(result.getResult(),HealthSignStatVO.class);
|
return BeanUtil.toBean(result.getData(),HealthSignStatVO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Retryable(maxAttempts = 2)
|
||||||
public IPage<BloodPressureList> bloodPressureList(HealthSignListParam healthSignListParam) {
|
public IPage<BloodPressureList> bloodPressureList(HealthSignListParam healthSignListParam) {
|
||||||
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.BLOOD_PRESSURE_LIST, buildTokenHeader(), healthSignListParam);
|
AnYanResult<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.BLOOD_PRESSURE_LIST, buildTokenHeader(), healthSignListParam);
|
||||||
return new PageResultToBeanUtil<BloodPressureList>().transform(result,BloodPressureList.class);
|
return new PageResultToBeanUtil<BloodPressureList>().transform(result,BloodPressureList.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Retryable(maxAttempts = 2)
|
||||||
public IPage<WeightPressureList> weightPressureList(HealthSignListParam healthSignListParam) {
|
public IPage<WeightPressureList> weightPressureList(HealthSignListParam healthSignListParam) {
|
||||||
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.WEIGHT_PRESSURE_LIST, buildTokenHeader(), healthSignListParam);
|
AnYanResult<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.WEIGHT_PRESSURE_LIST, buildTokenHeader(), healthSignListParam);
|
||||||
return new PageResultToBeanUtil<WeightPressureList>().transform(result,WeightPressureList.class);
|
return new PageResultToBeanUtil<WeightPressureList>().transform(result,WeightPressureList.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Retryable(maxAttempts = 2)
|
||||||
public IPage<BloodSugarClockSList> bloodSugarClockSList(HealthSignListParam healthSignListParam) {
|
public IPage<BloodSugarClockSList> bloodSugarClockSList(HealthSignListParam healthSignListParam) {
|
||||||
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.BLOOD_SUGAR_CLOCKS_LIST, buildTokenHeader(), healthSignListParam);
|
AnYanResult<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.BLOOD_SUGAR_CLOCKS_LIST, buildTokenHeader(), healthSignListParam);
|
||||||
return new PageResultToBeanUtil<BloodSugarClockSList>().transform(result,BloodSugarClockSList.class);
|
return new PageResultToBeanUtil<BloodSugarClockSList>().transform(result,BloodSugarClockSList.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Retryable(maxAttempts = 2)
|
||||||
public List<HospitalListVO> hospitalList() {
|
public List<HospitalListVO> hospitalList() {
|
||||||
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HOSPITAL_LIST, buildTokenHeader(), null);
|
AnYanResult<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HOSPITAL_LIST, buildTokenHeader(), null);
|
||||||
List<Object> listMaps = (List<Object>) result.getResult();
|
List<Object> listMaps = (List<Object>) result.getData();
|
||||||
return listMaps.stream().map(lMap -> BeanUtil.toBean(lMap, HospitalListVO.class)).collect(Collectors.toList());
|
return listMaps.stream().map(lMap -> BeanUtil.toBean(lMap, HospitalListVO.class)).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Retryable(maxAttempts = 2)
|
||||||
public List<HealthRoomBaseVO> healthPlaceHomList() {
|
public List<HealthRoomBaseVO> healthPlaceHomList() {
|
||||||
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HEALTH_PLACE_ROOM_LIST, buildTokenHeader(),null);
|
AnYanResult<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HEALTH_PLACE_ROOM_LIST, buildTokenHeader(),null);
|
||||||
List<Object> listMaps = (List<Object>) result.getResult();
|
List<Object> listMaps = (List<Object>) result.getData();
|
||||||
return listMaps.stream().map(lMap -> BeanUtil.toBean(lMap, HealthRoomBaseVO.class)).collect(Collectors.toList());
|
return listMaps.stream().map(lMap -> BeanUtil.toBean(lMap, HealthRoomBaseVO.class)).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Retryable(maxAttempts = 2)
|
||||||
public IPage<HealthPlaceHomDetailsVO> healthPlaceHomDetailList(HealthRoomDTO healthRoomDTO) {
|
public IPage<HealthPlaceHomDetailsVO> healthPlaceHomDetailList(HealthRoomDTO healthRoomDTO) {
|
||||||
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HEALTH_PLACE_ROOM_INFO_LIST, buildTokenHeader(), healthRoomDTO);
|
AnYanResult<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.HEALTH_PLACE_ROOM_INFO_LIST, buildTokenHeader(), healthRoomDTO);
|
||||||
return new PageResultToBeanUtil<HealthPlaceHomDetailsVO>().transform(result,HealthPlaceHomDetailsVO.class);
|
return new PageResultToBeanUtil<HealthPlaceHomDetailsVO>().transform(result,HealthPlaceHomDetailsVO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Retryable(maxAttempts = 2)
|
||||||
public MedicalAbnormalStatisticsVO medicalAbnormalStatistics(Integer medicalYear) {
|
public MedicalAbnormalStatisticsVO medicalAbnormalStatistics(Integer medicalYear) {
|
||||||
if(null == medicalYear){ medicalYear = DateUtil.year(new Date()); }
|
if(null == medicalYear){ medicalYear = DateUtil.year(new Date()); }
|
||||||
JSONObject param = new JSONObject();
|
JSONObject param = new JSONObject();
|
||||||
param.put("medicalYear",medicalYear);
|
param.put("medicalYear",medicalYear);
|
||||||
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.MEDICAL_ABNORMAL_STATISTICS, buildTokenHeader(), param);
|
AnYanResult<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.MEDICAL_ABNORMAL_STATISTICS, buildTokenHeader(), param);
|
||||||
return BeanUtil.toBean(result.getResult(),MedicalAbnormalStatisticsVO.class);
|
return BeanUtil.toBean(result.getData(),MedicalAbnormalStatisticsVO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Retryable(maxAttempts = 2)
|
||||||
public IPage<MedicalAbnormalVO> medicalAbnormalList(MedicalAbnormalDTO param) {
|
public IPage<MedicalAbnormalVO> medicalAbnormalList(MedicalAbnormalDTO param) {
|
||||||
Result<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.MEDICAL_ABNORMAL_LIST, buildTokenHeader(), param);
|
AnYanResult<Object> result = RestTemplateUtil.postExchange(AnYanApiEnum.MEDICAL_ABNORMAL_LIST, buildTokenHeader(), param);
|
||||||
return new PageResultToBeanUtil<MedicalAbnormalVO>().transform(result,MedicalAbnormalVO.class);
|
return new PageResultToBeanUtil<MedicalAbnormalVO>().transform(result,MedicalAbnormalVO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String publicNetworkToken() throws Exception {
|
||||||
|
String token = redisClientUtil.get(new RedisKeyPrefix(AnYanConstants.AN_YAN_API_TOKEN_PREFIX) ,"publicToken",String.class);
|
||||||
|
if(StrUtil.isEmpty(token)){
|
||||||
|
JSONObject param = new JSONObject();
|
||||||
|
String password = anYanProperties.getPublicPassWrod();
|
||||||
|
String userName = anYanProperties.getPublicUserNmae();
|
||||||
|
String sm4Password = SM4Utils.encryptSM4(password);
|
||||||
|
String encryptPassword = StringUtils.encryptByPublicKey(publicKey, password);
|
||||||
|
param.put("password",encryptPassword);
|
||||||
|
param.put("selfPassword",sm4Password);
|
||||||
|
param.put("loginName",userName);
|
||||||
|
param.put("timeStamp", UUID.randomUUID().toString());
|
||||||
|
ResponseEntity<AnYanResult> responseEntity = RestTemplateUtil.postExchangeForGetToken(AnYanApiEnum.PUBLIC_NETWORK_AUTH_TOKEN, param,AnYanResult.class);
|
||||||
|
//安眼提供的接口包过深 ,先从AnYanResult对象中取出加密的密文,后在解密密文拿出 AuthResult对象 , 再从AuthResult对象中拿出 access_token
|
||||||
|
try {
|
||||||
|
AnYanResult anYanResult = responseEntity.getBody();
|
||||||
|
if(ObjectUtil.isNotEmpty(anYanResult) && ObjectUtil.isNotEmpty(anYanResult.getData())){
|
||||||
|
String decryptAuthResult = SM4Utils.decryptSM4((String) anYanResult.getData());
|
||||||
|
AuthResult authResult = JSON.parseObject(decryptAuthResult).toJavaObject(AuthResult.class);
|
||||||
|
if(null != authResult && null != authResult.getAccess_token()){
|
||||||
|
token = authResult.getAccess_token();
|
||||||
|
int expireSeconds = ObjectUtil.isNotEmpty(authResult.getExpires_in())? authResult.getExpires_in() : 7200;
|
||||||
|
redisClientUtil.set(new RedisKeyPrefix(expireSeconds,AnYanConstants.AN_YAN_API_TOKEN_PREFIX),"publicToken", token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
ExceptionAssertsUtil.fail("获取安眼系统token失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+12
@@ -30,6 +30,18 @@ public class AnYanProperties {
|
|||||||
*clientSecret
|
*clientSecret
|
||||||
*/
|
*/
|
||||||
private String clientSecret = "";
|
private String clientSecret = "";
|
||||||
|
/**
|
||||||
|
*公网可访问的接口地址 (目前或者大屏调转的toekn使用)
|
||||||
|
*/
|
||||||
|
private String publicHost = "";
|
||||||
|
/**
|
||||||
|
* 公网环境的鉴权账号 (目前或者大屏调转的toekn使用)
|
||||||
|
*/
|
||||||
|
private String publicUserNmae = "";
|
||||||
|
/**
|
||||||
|
*公网环境的鉴权密码 (目前或者大屏调转的toekn使用)
|
||||||
|
*/
|
||||||
|
private String publicPassWrod = "";
|
||||||
/**
|
/**
|
||||||
*链接超时时间
|
*链接超时时间
|
||||||
*/
|
*/
|
||||||
|
|||||||
+18
-6
@@ -1,9 +1,9 @@
|
|||||||
package com.renkang.anyan.config;
|
package com.renkang.anyan.config;
|
||||||
|
|
||||||
import com.renkang.anyan.enums.AnYanApiEnum;
|
import com.renkang.anyan.enums.AnYanApiEnum;
|
||||||
|
import com.renkang.anyan.model.vo.AnYanResult;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.jeecg.common.api.vo.Result;
|
|
||||||
import org.jeecg.common.util.SpringContextUtils;
|
import org.jeecg.common.util.SpringContextUtils;
|
||||||
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpEntity;
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
@@ -39,7 +39,7 @@ public class RestTemplateUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通用调用方法
|
* 请求接口访问 token
|
||||||
* @param api 接口
|
* @param api 接口
|
||||||
* @param requestBody 参数
|
* @param requestBody 参数
|
||||||
* @return ResponseEntity
|
* @return ResponseEntity
|
||||||
@@ -50,6 +50,18 @@ public class RestTemplateUtil {
|
|||||||
return getRestTemplate().exchange(url, api.getHttpMethod(), requestEntity, responseType);
|
return getRestTemplate().exchange(url, api.getHttpMethod(), requestEntity, responseType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公网请求接口访问 token
|
||||||
|
* @param api 接口
|
||||||
|
* @param requestBody 参数
|
||||||
|
* @return ResponseEntity
|
||||||
|
*/
|
||||||
|
public static <T> ResponseEntity<T> postExchangeForGetToken(AnYanApiEnum api,Object requestBody,Class<T> responseType) {
|
||||||
|
String url = getProperties().getPublicHost() + api.getMethodPath() + api.getMethodParam();
|
||||||
|
HttpEntity<Object> requestEntity = new HttpEntity<>(requestBody);
|
||||||
|
return getRestTemplate().exchange(url, api.getHttpMethod(), requestEntity, responseType);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通用调用方法
|
* 通用调用方法
|
||||||
* @param api 请求接口
|
* @param api 请求接口
|
||||||
@@ -57,10 +69,10 @@ public class RestTemplateUtil {
|
|||||||
* @param requestBody body参数
|
* @param requestBody body参数
|
||||||
* @return Result对象
|
* @return Result对象
|
||||||
*/
|
*/
|
||||||
public static Result<Object> postExchange(AnYanApiEnum api, HttpHeaders headers,Object requestBody) {
|
public static AnYanResult<Object> postExchange(AnYanApiEnum api, HttpHeaders headers, Object requestBody) {
|
||||||
String url = getProperties().getHost() + api.getMethodPath() +api.getMethodParam();
|
String url = getProperties().getHost() + api.getMethodPath() +api.getMethodParam();
|
||||||
HttpEntity<Object> requestEntity = new HttpEntity<>(requestBody,headers);
|
HttpEntity<Object> requestEntity = new HttpEntity<>(requestBody,headers);
|
||||||
return responseHandler(getRestTemplate().exchange(url, api.getHttpMethod(), requestEntity, Result.class));
|
return responseHandler(getRestTemplate().exchange(url, api.getHttpMethod(), requestEntity, AnYanResult.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -68,11 +80,11 @@ public class RestTemplateUtil {
|
|||||||
* @param entity
|
* @param entity
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private static <T extends Result<Object>> Result<Object> responseHandler(ResponseEntity<T> entity) {
|
private static <T extends AnYanResult<Object>> AnYanResult<Object> responseHandler(ResponseEntity<T> entity) {
|
||||||
if(HttpStatus.OK.equals(entity.getStatusCode()) && ObjectUtils.isNotEmpty(entity.getBody())){
|
if(HttpStatus.OK.equals(entity.getStatusCode()) && ObjectUtils.isNotEmpty(entity.getBody())){
|
||||||
return entity.getBody();
|
return entity.getBody();
|
||||||
}else{
|
}else{
|
||||||
return Result.error("天眼系统API调用失败");
|
return AnYanResult.error("天眼系统API调用失败");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-1
@@ -63,7 +63,12 @@ public enum AnYanApiEnum {
|
|||||||
/**
|
/**
|
||||||
*11.健康小屋详细数据查询
|
*11.健康小屋详细数据查询
|
||||||
*/
|
*/
|
||||||
HEALTH_PLACE_ROOM_INFO_LIST("/aygc-znhpt-sys/0/aystatistics/initEmpHealthRoomCheckinInfoPages","", HttpMethod.POST);
|
HEALTH_PLACE_ROOM_INFO_LIST("/aygc-znhpt-sys/0/aystatistics/initEmpHealthRoomCheckinInfoPages","", HttpMethod.POST),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 12.从外网地址获取安眼token接口
|
||||||
|
*/
|
||||||
|
PUBLIC_NETWORK_AUTH_TOKEN("/aygc-service-sys/0/api/xj/outside/getToken","", HttpMethod.POST);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 接口路径
|
* 接口路径
|
||||||
|
|||||||
+170
@@ -0,0 +1,170 @@
|
|||||||
|
package com.renkang.anyan.model.vo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.jeecg.common.constant.CommonConstant;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Schema(title = "安眼系统接口返回对象", description = "安眼系统接口返回对象")
|
||||||
|
public class AnYanResult<T> implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 成功标志
|
||||||
|
*/
|
||||||
|
@Schema(title = "成功标志")
|
||||||
|
private boolean success = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回处理消息
|
||||||
|
*/
|
||||||
|
@Schema(title = "返回处理消息")
|
||||||
|
private String message = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回代码
|
||||||
|
*/
|
||||||
|
@Schema(title = "返回代码")
|
||||||
|
private Integer code = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回数据对象 data
|
||||||
|
*/
|
||||||
|
@Schema(title = "返回数据对象")
|
||||||
|
private T data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 时间戳
|
||||||
|
*/
|
||||||
|
@Schema(title = "时间戳")
|
||||||
|
private long timestamp = System.currentTimeMillis();
|
||||||
|
@JsonIgnore
|
||||||
|
private String onlTable;
|
||||||
|
|
||||||
|
public AnYanResult() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 兼容VUE3版token失效不跳转登录页面
|
||||||
|
*
|
||||||
|
* @param code
|
||||||
|
* @param message
|
||||||
|
*/
|
||||||
|
public AnYanResult(Integer code, String message) {
|
||||||
|
this.code = code;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> AnYanResult<T> ok() {
|
||||||
|
AnYanResult<T> r = new AnYanResult<T>();
|
||||||
|
r.setSuccess(true);
|
||||||
|
r.setCode(CommonConstant.SC_OK_200);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> AnYanResult<T> ok(String msg) {
|
||||||
|
AnYanResult<T> r = new AnYanResult<T>();
|
||||||
|
r.setSuccess(true);
|
||||||
|
r.setCode(CommonConstant.SC_OK_200);
|
||||||
|
//Result OK(String msg)方法会造成兼容性问题 issues/I4IP3D
|
||||||
|
r.setData((T) msg);
|
||||||
|
r.setMessage(msg);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> AnYanResult<T> ok(T data) {
|
||||||
|
AnYanResult<T> r = new AnYanResult<T>();
|
||||||
|
r.setSuccess(true);
|
||||||
|
r.setCode(CommonConstant.SC_OK_200);
|
||||||
|
r.setData(data);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> AnYanResult<T> OK() {
|
||||||
|
AnYanResult<T> r = new AnYanResult<T>();
|
||||||
|
r.setSuccess(true);
|
||||||
|
r.setCode(CommonConstant.SC_OK_200);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 此方法是为了兼容升级所创建
|
||||||
|
*
|
||||||
|
* @param msg
|
||||||
|
* @param <T>
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static <T> AnYanResult<T> OK(String msg) {
|
||||||
|
AnYanResult<T> r = new AnYanResult<T>();
|
||||||
|
r.setSuccess(true);
|
||||||
|
r.setCode(CommonConstant.SC_OK_200);
|
||||||
|
r.setMessage(msg);
|
||||||
|
//Result OK(String msg)方法会造成兼容性问题 issues/I4IP3D
|
||||||
|
r.setData((T) msg);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> AnYanResult<T> OK(T data) {
|
||||||
|
AnYanResult<T> r = new AnYanResult<T>();
|
||||||
|
r.setSuccess(true);
|
||||||
|
r.setCode(CommonConstant.SC_OK_200);
|
||||||
|
r.setData(data);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> AnYanResult<T> OK(String msg, T data) {
|
||||||
|
AnYanResult<T> r = new AnYanResult<T>();
|
||||||
|
r.setSuccess(true);
|
||||||
|
r.setCode(CommonConstant.SC_OK_200);
|
||||||
|
r.setMessage(msg);
|
||||||
|
r.setData(data);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> AnYanResult<T> error(String msg, T data) {
|
||||||
|
AnYanResult<T> r = new AnYanResult<T>();
|
||||||
|
r.setSuccess(false);
|
||||||
|
r.setCode(CommonConstant.SC_INTERNAL_SERVER_ERROR_500);
|
||||||
|
r.setMessage(msg);
|
||||||
|
r.setData(data);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> AnYanResult<T> error(String msg) {
|
||||||
|
return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> AnYanResult<T> error(int code, String msg) {
|
||||||
|
AnYanResult<T> r = new AnYanResult<T>();
|
||||||
|
r.setCode(code);
|
||||||
|
r.setMessage(msg);
|
||||||
|
r.setSuccess(false);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 无权限访问返回结果
|
||||||
|
*/
|
||||||
|
public static <T> AnYanResult<T> noauth(String msg) {
|
||||||
|
return error(CommonConstant.SC_JEECG_NO_AUTHZ, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AnYanResult<T> success(String message) {
|
||||||
|
this.message = message;
|
||||||
|
this.code = CommonConstant.SC_OK_200;
|
||||||
|
this.success = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AnYanResult<T> error500(String message) {
|
||||||
|
this.message = message;
|
||||||
|
this.code = CommonConstant.SC_INTERNAL_SERVER_ERROR_500;
|
||||||
|
this.success = false;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+3
-3
@@ -3,7 +3,7 @@ package com.renkang.anyan.utils;
|
|||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import org.jeecg.common.api.vo.Result;
|
import com.renkang.anyan.model.vo.AnYanResult;
|
||||||
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -13,8 +13,8 @@ import java.util.stream.Collectors;
|
|||||||
*/
|
*/
|
||||||
public class PageResultToBeanUtil<T> {
|
public class PageResultToBeanUtil<T> {
|
||||||
|
|
||||||
public IPage<T> transform(Result<Object> result,Class<T> tClass) {
|
public IPage<T> transform(AnYanResult<Object> result, Class<T> tClass) {
|
||||||
IPage<?> page = BeanUtil.toBean(result.getResult(), Page.class);
|
IPage<?> page = BeanUtil.toBean(result.getData(), Page.class);
|
||||||
IPage<T> iPage = new Page<>();
|
IPage<T> iPage = new Page<>();
|
||||||
BeanUtil.copyProperties(page,iPage,"records");
|
BeanUtil.copyProperties(page,iPage,"records");
|
||||||
if(page.getTotal() > 0){
|
if(page.getTotal() > 0){
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package com.renkang.anyan.utils;
|
||||||
|
|
||||||
|
import cn.hutool.crypto.Mode;
|
||||||
|
import cn.hutool.crypto.Padding;
|
||||||
|
import cn.hutool.crypto.symmetric.SM4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* XJ安眼平台提供的数据加密工具类 仅用于安眼系统外部登录接口的对接
|
||||||
|
*/
|
||||||
|
public class SM4Utils {
|
||||||
|
|
||||||
|
private static final String privateKey = "5tgb6yhn7ujm8ik,";
|
||||||
|
// private static final String privateKey = "123456789qwertyu";
|
||||||
|
|
||||||
|
private static final String iv = "5tgb6yhn7ujm8ik,";
|
||||||
|
// private static final String iv = "abcdefghi1234567";
|
||||||
|
private static SM4 sm4 = null;
|
||||||
|
|
||||||
|
private static SM4 getInstance() {
|
||||||
|
if (sm4 == null) {
|
||||||
|
sm4 = new SM4(Mode.CBC, Padding.PKCS5Padding, privateKey.getBytes(), iv.getBytes());
|
||||||
|
}
|
||||||
|
return sm4;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 加密
|
||||||
|
* @author xj
|
||||||
|
* @time 2023/8/17
|
||||||
|
*/
|
||||||
|
public static String encryptSM4(String needEncryptText) {
|
||||||
|
return getInstance().encryptBase64(needEncryptText);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 解密
|
||||||
|
* @author xj
|
||||||
|
* @time 2023/8/17
|
||||||
|
*/
|
||||||
|
public static String decryptSM4(String encryptText) {
|
||||||
|
if (encryptText == null || encryptText.isEmpty()) return "";
|
||||||
|
return getInstance().decryptStr(encryptText);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
+115
@@ -0,0 +1,115 @@
|
|||||||
|
package com.renkang.anyan.utils;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
|
||||||
|
import javax.crypto.Cipher;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.security.KeyFactory;
|
||||||
|
import java.security.PublicKey;
|
||||||
|
import java.security.spec.X509EncodedKeySpec;
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 安眼平台提供的数据加密工具类 仅用于安眼系统外部登录接口的对接
|
||||||
|
*/
|
||||||
|
public class StringUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 公钥加密方法
|
||||||
|
*
|
||||||
|
* @param publicKeyText 公钥
|
||||||
|
* @param text 将要加密的信息
|
||||||
|
* @return Base64编码的字符串
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static String encryptByPublicKey(String publicKeyText, String text) throws Exception {
|
||||||
|
// 返回按照 X.509 标准进行编码的密钥的字节
|
||||||
|
// x509EncodedKeySpec2 是一种规范、规格
|
||||||
|
X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(org.apache.commons.codec.binary.Base64.decodeBase64(publicKeyText));
|
||||||
|
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
||||||
|
// 让密钥工厂按照指定的 规范 生成公钥
|
||||||
|
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2);
|
||||||
|
Cipher cipher = Cipher.getInstance("RSA");
|
||||||
|
// 对加密初始化,使用加密模式,公钥加密
|
||||||
|
// Cipher.ENCRYPT_MODE 可以用 1 代替
|
||||||
|
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
|
||||||
|
|
||||||
|
byte[] result = cipher.doFinal(text.getBytes());
|
||||||
|
// 返回 Base64编码的字符串
|
||||||
|
return org.apache.commons.codec.binary.Base64.encodeBase64String(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static String base64Encode(String input) {
|
||||||
|
return Base64.getEncoder().encodeToString(input.getBytes());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String base64Decode(String encodedInput) {
|
||||||
|
byte[] decodedBytes = Base64.getDecoder().decode(encodedInput);
|
||||||
|
return new String(decodedBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String preprocessJsonString(String jsonStr) {
|
||||||
|
String a = StrUtil.removeAll(jsonStr, ' ', '\t', '\r', '\n');
|
||||||
|
String[] searchList = {"\":\"", "\",\"", "{\"", "\"}", "\":"};
|
||||||
|
String[] replacementList = {"$is$", "$center$", "$left$", "$right$", "$start$"};
|
||||||
|
String b = org.apache.commons.lang3.StringUtils.replaceEach(a, searchList, replacementList);
|
||||||
|
String c = b.replace("\"", "\\\"");
|
||||||
|
return org.apache.commons.lang3.StringUtils.replaceEach(c, replacementList, searchList);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提取文件名中的扩展名
|
||||||
|
*
|
||||||
|
* @param fileName 文件名
|
||||||
|
* @param needDot 需要点
|
||||||
|
* @return 文件扩展名,如果文件名中没有扩展名则返回 null
|
||||||
|
*/
|
||||||
|
public static String getFileExtension(String fileName, boolean needDot) {
|
||||||
|
// 检查文件名是否为 null 或空字符串
|
||||||
|
if (fileName == null || fileName.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 找到最后一个点的位置
|
||||||
|
int lastDotIndex = fileName.lastIndexOf('.');
|
||||||
|
|
||||||
|
// 如果找不到点,或者点在字符串的第一个位置,返回 null
|
||||||
|
if (lastDotIndex == -1 || lastDotIndex == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return fileName.substring(needDot ? lastDotIndex : (lastDotIndex + 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取路径的最后一个元素(文件名或目录名)
|
||||||
|
*
|
||||||
|
* @param pathOrUrl 文件路径或 URL
|
||||||
|
* @return 路径的最后一个元素
|
||||||
|
*/
|
||||||
|
public static String baseName(String pathOrUrl) {
|
||||||
|
if (pathOrUrl == null || pathOrUrl.isEmpty()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 尝试将字符串解析为 URI
|
||||||
|
URI uri = new URI(pathOrUrl);
|
||||||
|
// 获取 URI 的路径部分
|
||||||
|
String path = uri.getPath();
|
||||||
|
// 使用 Path 类获取路径的最后一个元素
|
||||||
|
Path filePath = Paths.get(path);
|
||||||
|
return filePath.getFileName().toString();
|
||||||
|
} catch (URISyntaxException e) {
|
||||||
|
// 如果解析 URI 失败,则直接将字符串作为路径处理
|
||||||
|
Path filePath = Paths.get(pathOrUrl);
|
||||||
|
return filePath.getFileName().toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+9
@@ -277,4 +277,13 @@ public class LargeScreenNewController {
|
|||||||
public Result<CareUserVO> careUser(@RequestParam(name = "userId") String userId){
|
public Result<CareUserVO> careUser(@RequestParam(name = "userId") String userId){
|
||||||
return Result.ok(largeScreenDataService.careUser(userId));
|
return Result.ok(largeScreenDataService.careUser(userId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 或者安眼平台访问token
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("queryAnYanToken")
|
||||||
|
public Result<String> queryAnYanToken() throws Exception {
|
||||||
|
return Result.ok(largeScreenService.queryAnYanToken());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -54,4 +54,6 @@ public interface ILargeScreenService extends IService<LargeScreenMap> {
|
|||||||
* 同步安眼系统中的油田医院数据和监控小屋数据定时任务
|
* 同步安眼系统中的油田医院数据和监控小屋数据定时任务
|
||||||
*/
|
*/
|
||||||
void syncAnYanHospital();
|
void syncAnYanHospital();
|
||||||
|
|
||||||
|
String queryAnYanToken() throws Exception;
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -533,4 +533,9 @@ public class LargeScreenServiceImpl extends ServiceImpl<LargeScreenMapper, Large
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String queryAnYanToken() throws Exception {
|
||||||
|
return anYanClient.publicNetworkToken();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user