微信后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

178 lines
6.3 KiB

package com.ynxbd.common.helper.xbd;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.helper.http.OkHttpHelper;
import com.ynxbd.common.result.JsonResult;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
/**
* @author 李进才
* @ClassName HttpHelper
* @Description 在线病历打印请求的http请求方法
* @date 2023/4/20 09:40
*/
@Slf4j
public class XBDHttpHelper {
/**
* Get执行后台指定方法
* @param methodName 方法名
* @param paramDic 参数
* @return 返回的数据(Json)
*/
public static String ExecMethodGet (String methodName, Object paramDic){
return UseGet(methodName,paramDic);
}
/**
* 直接用lambda传参数的方法
* @param methodName 方法名
* @param params lambda表达式
* @return String
*/
public static String ExecMethodGet(String methodName, JsonResult.MapParams params){
Map<String, Object> requestParams = new HashMap<>();
if (params != null) {
params.setParams(requestParams);
}
return ExecMethodGet(methodName,requestParams);
}
/**
* Get执行后台指定方法
* @param methodName 方法名
* @return 返回的数据(Json)
*/
public static String ExecMethodGet (String methodName){
return UseGet(methodName,null);
}
private static String UseGet(String methodName, Object paramDic) {
try {
OkHttpClient httpClient = OkHttpHelper.creatClient();
HttpUrl.Builder urlBuilder = HttpUrl.parse(XBDHelper.MEDICAL_RECORD_REMAKE_URL+"/api/SqlContext/ExecMethodByNameEncryption").newBuilder();
// 加密序列化
String methodNameEnv = URLEncoder.encode(EncHelper.AES_Encrypt(methodName), StandardCharsets.UTF_8.toString());
urlBuilder.addQueryParameter("methodNameEnc", methodNameEnv);
String paramJson = JSONObject.toJSONString(paramDic==null? "" :paramDic);
// json 加密序列化传入链接
String paramsStrEnv = URLEncoder.encode(EncHelper.AES_Encrypt(paramJson), StandardCharsets.UTF_8.toString());
urlBuilder.addQueryParameter("paramsStrEnc", compress(paramsStrEnv));
String md5Check = URLEncoder.encode(EncHelper.MD5Encrypt64(methodName + paramJson),StandardCharsets.UTF_8.toString());
urlBuilder.addQueryParameter("modCode", md5Check);
Request request = new Request.Builder()
.url(urlBuilder.toString())
.get()
.build();
Response response = httpClient.newCall(request).execute();
// 清除并关闭线程池
// httpClient.dispatcher().executorService().shutdown();
// 清除并关闭连接池
// httpClient.connectionPool().evictAll();
JSONObject JSON = JSONObject.parseObject(response.body().string());
if(response.isSuccessful()){
return JSON.getString("Data").replaceAll(" ","");
}
else {
log.error("[在线病例打印]返回错误:方法名-{},错误-{}",methodName,JSON.getString("Msg"));
throw new Exception("方法:" + methodName + "错误:" + JSON.getString("Msg") );
}
}
catch (Exception e){
log.error("[在线病例打印]请求错误-{}",e.getMessage());
return e.getMessage();
}
}
/**
* gzip压缩方法
* @param primStr 压缩字符串
* @return 压缩后的字符
*/
private static String compress(String primStr) {
if (primStr == null || primStr.length() == 0) {
return primStr;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = null;
try {
gzip = new GZIPOutputStream(out);
gzip.write(primStr.getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (gzip != null) {
try {
gzip.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return new sun.misc.BASE64Encoder().encode(out.toByteArray());
}
private static String uncompress(String compressedStr) {
if (compressedStr == null) {
return null;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = null;
GZIPInputStream ginzip = null;
byte[] compressed = null;
String decompressed = null;
try {
compressed = new sun.misc.BASE64Decoder().decodeBuffer(compressedStr);
in = new ByteArrayInputStream(compressed);
ginzip = new GZIPInputStream(in);
byte[] buffer = new byte[1024];
int offset = -1;
while ((offset = ginzip.read(buffer)) != -1) {
out.write(buffer, 0, offset);
}
decompressed = out.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ginzip != null) {
try {
ginzip.close();
} catch (IOException ignored) {
}
}
if (in != null) {
try {
in.close();
} catch (IOException ignored) {
}
}
try {
out.close();
} catch (IOException ignored) {
}
}
return decompressed;
}
public static void main(String[] args) {
Map<String,String> test = new HashMap<>();
test.put("patientID","10947918");
System.out.println(ExecMethodGet("BLSM_Appointment_GetBA", test));
}
}