5.3.1.230505_Debug

新增病案翻拍部分的接口
debug
李进才 2 years ago
parent 2ff6c0433f
commit e161890a3e
  1. BIN
      .DS_Store
  2. 1
      .gitignore
  3. BIN
      .svn/wc.db
  4. BIN
      src/.DS_Store
  5. 137
      src/main/java/com/ynxbd/common/action/XBDAction.java
  6. 176
      src/main/java/com/ynxbd/common/bean/xbd/MRHistory.java
  7. 65
      src/main/java/com/ynxbd/common/bean/xbd/MedicalRecord.java
  8. 89
      src/main/java/com/ynxbd/common/helper/xbd/HttpHelper.java
  9. 46
      src/main/java/com/ynxbd/common/helper/xbd/XBDEnum.java
  10. 2
      src/main/java/com/ynxbd/common/helper/xbd/XBDHelper.java
  11. 183
      src/main/java/com/ynxbd/common/helper/xbd/XBDHttpHelper.java
  12. 1
      src/main/resources/xbd.properties

BIN
.DS_Store vendored

Binary file not shown.

1
.gitignore vendored

@ -99,3 +99,4 @@ Guardfile
README.html
*.iml
.idea
wc.db

Binary file not shown.

BIN
src/.DS_Store vendored

Binary file not shown.

@ -1,7 +1,11 @@
package com.ynxbd.common.action;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.helper.http.OkHttpHelper;
import com.ynxbd.common.bean.xbd.MRHistory;
import com.ynxbd.common.bean.xbd.MedicalRecord;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.helper.xbd.XBDHttpHelper;
import com.ynxbd.common.helper.xbd.XBDEnum;
import com.ynxbd.common.helper.xbd.XBDHelper;
import com.ynxbd.common.result.Result;
import lombok.extern.slf4j.Slf4j;
@ -19,8 +23,139 @@ import org.apache.struts2.convention.annotation.Namespace;
@Namespace("/xbd")
public class XBDAction extends BaseAction {
/**
* 获取智能云胶片的地址
* @param info patientId
* @return 路径
*/
@Action("cloudFilm")
public Result cloudFilm (String info){
return Result.success(XBDHelper.outTeamDao.getCloudFilmPath(info));
}
/**
* 获取该病人已归档可以翻拍的病历
* @param patientId 病人id
* @return 可以翻拍的病历列表
*/
@Action("getMedicalRecordList")
public Result getMedicalRecordList(String patientId){
String jsonString = XBDHttpHelper.ExecMethodGet(XBDEnum.BLSM_Appointment_GetBA.Name,params->{
params.put("patientID",patientId);
});
return Result.success(JsonHelper.parseArray(jsonString, MedicalRecord.class));
}
/**
* 获取该病人需要翻拍病历干啥的列表(用途)->直接绑定翻拍的病历类型
* @return 用途列表
*/
@Action("getMRTemplateList")
public Result getMRTemplateList(){
String jsonString = XBDHttpHelper.ExecMethodGet(XBDEnum.BLSM_Appointment_GetTemplate.Name);
return Result.success(JsonHelper.parseArray(jsonString));
}
/**
* 新增预约记录
* @param ipsID 住院号
* @param dx 诊断名称
* @param ptId 病人ID
* @param ptName 病人姓名
* @param deptID 出院科室ID
* @param deptName 出院科室
* @param ptIdcID 身份证
* @param phone 联系电话邮寄时也填这个
* @param applicantName 委托代理人姓名
* @param applicantRel 申请人与病人关系
* @param applicantRelId 申请人与病人关系代码
* @param ptImg1 本人身份证正面照片
* @param ptImg2 本人身份证背面照片
* @param applicantIdcImg1 申请人身份证正面照片
* @param applicantIdcImg2 申请人身份证背面照片
* @param agreementLetterImg 申请书照片
* @param useWay 模板templateName
* @param useWayId 模板idtemplateNo
* @param getWay 获取方式:0.自提 1.邮寄 2.电子版
* @param address 邮寄的地址
* @return 是否成功及行数
*/
@Action("addMRReserve")
public Result addMRReserve(String ipsID, String dx, String ptId, String ptName, String deptID,
String deptName, String ptIdcID, String phone, String applicantName, String applicantRel,
String applicantRelId, byte[] ptImg1, byte[] ptImg2, byte[] applicantIdcImg1, byte[] applicantIdcImg2,
byte[] agreementLetterImg, String useWay, String useWayId, String getWay, String address) {
String jsonString = XBDHttpHelper.ExecMethodGet(XBDEnum.BLSM_Appointment_SetAppointment.Name,params -> {
params.put("ipsID", ipsID);
params.put("dx", dx);
params.put("ptId", ptId);
params.put("ptName", ptName);
params.put("deptID", deptID);
params.put("deptName", deptName);
params.put("ptIdcID", ptIdcID);
params.put("phone", phone);
params.put("applyerName", applicantName);
params.put("applyerRel", applicantRel);
params.put("applyerRelId", applicantRelId);
params.put("ptImg1", ptImg1);
params.put("ptImg2", ptImg2);
params.put("applyerIdcImg1", applicantIdcImg1);
params.put("applyerIdcImg2", applicantIdcImg2);
params.put("agreementLetterImg", agreementLetterImg);
params.put("useway", useWay);
params.put("useWayId", useWayId);
params.put("getWay", getWay);
params.put("address", address);
});
return Result.success(JsonHelper.parseObject(jsonString));
}
/**
* 获取该病人的病历翻拍历史
* @param patientId 病人Id
* @return 历史记录
*/
@Action("getMRHistory")
public Result getMRHistory(String patientId,String flagTime,String begDate,String endDate){
String jsonString = XBDHttpHelper.ExecMethodGet(XBDEnum.BLSM_Appointment_GetHistoryAppointment.Name,params->{
params.put("patientID",patientId);
params.put("flagTime",flagTime);
params.put("begdate",begDate);
params.put("enddate",endDate);
});
return Result.success(JsonHelper.parseArray(jsonString, MRHistory.class));
}
/**
* 病人修改病历的地址
* @param id 申请单号
* @param getWay 收货方式(0.自提 1.邮寄 2.电子版)
* @param address 地址
* @return 是否修改成功
*/
@Action("changeMRAddress")
public Result changeMRAddress(Integer id,String getWay,String address) {
String jsonString = XBDHttpHelper.ExecMethodGet(XBDEnum.BLSM_Appointment_ChangeAddress.Name,params-> {
params.put("Id",id);
params.put("getWay",getWay);
params.put("address",address);
});
return Result.success(JsonHelper.parseObject(jsonString));
}
/**
* 停止未通过审核的病历预约
* @param id 申请单号
* @param delNote 删除理由
* @return 是否成功
*/
@Action("stopMRReserve")
public Result stopMRReserve(Integer id,String delNote){
String jsonString = XBDHttpHelper.ExecMethodGet(XBDEnum.BLSM_Appointment_StopAppointment.Name,params-> {
params.put("Id",id);
params.put("delNote",delNote);
});
return Result.success(JsonHelper.parseObject(jsonString));
}
}

@ -0,0 +1,176 @@
package com.ynxbd.common.bean.xbd;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.util.Date;
/**
* @author 李进才
* @ClassName MRHistory
* @Description TODO
* @date 2023/05/05 13:56:00
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class MRHistory {
/**
* 预约申请号
*/
private int id;
/**
* 住院号
*/
private String ipsId;
/**
* 诊断名称
*/
private String dx;
/**
* 病人id
*/
private String ptId;
/**
* 病人姓名
*/
private String ptName;
/**
* 出院科室id
*/
private String deptId;
/**
* 出院科室代码
*/
private String deptName;
/**
* 病人身份证号
*/
private String ptIdcId;
/**
* 电话号码
*/
private String phone;
/**
* 申请人姓名
*/
private String applyerName;
/**
* 申请人与病人关系
*/
private String applyerRel;
/**
* 申请人与病人关系代码
*/
private String applyerRelId;
/**
* 病人身份证正面照片
*/
private byte[] ptIdcImg1;
/**
* 病人身份证背面照片
*/
private byte[] ptIdcImg2;
/**
* 申请人身份证正面照片
*/
private byte[] applyerIdcImg1;
/**
* 申请人身份证背面照片
*/
private byte[] applyerIdcImg2;
/**
* 申请书照片
*/
private byte[] agreementLetterImg;
/**
* 申请时间
*/
private Date applyTime;
/**
* 用途
*/
private String useWay;
/**
* 用途代码
*/
private String useWayId;
/**
* 获取方式
*/
private String getWay;
/**
* 地址
*/
private String address;
/**
* 快递信息
*/
private String expressInfo;
/**
* 状态代码(null.未审核1.已审核 2.审核不通过)
*/
private int stateId;
/**
* 审核不通过的原因
*/
private String noReviewNote;
/**
* 打印页数
*/
private int pages;
/**
* 付费状态
*/
private boolean isPay;
/**
* 打印状态
*/
private boolean isPrint;
/**
* 最终状态代码(null:正在流程中.1完成流程 2审核未通过 3其他情况)
*/
private int statusId;
/**
* 删除时间
*/
private Date statusDate;
/**
* 删除说明
*/
private String statusNote;
}

@ -0,0 +1,65 @@
package com.ynxbd.common.bean.xbd;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @author 李进才
* @ClassName MedicalRecordList
* @Description TODO
* @date 2023/05/05 11:17:00
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class MedicalRecord {
/**
* 入院时间
*/
public String inHospTime;
/**
* 住院号
*/
public String ipsId;
/**
* 主要诊断
*/
public String dx;
/**
* 入院科室代码
*/
public String inHospDeptCode;
/**
* 患者Id
*/
public String ptId;
/**
* 患者身份证号
*/
public String ptIdcId;
/**
* 科室名称
*/
public String deptName;
/**
* 出院时间
*/
public String outHospTime;
/**
* 患者姓名
*/
public String ptName;
/**
* 出院科室code
*/
public String deptId;
/**
* 入院科室名称
*/
public String inHospDeptName;
}

@ -1,89 +0,0 @@
package com.ynxbd.common.helper.xbd;
import cn.hutool.core.compress.Gzip;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.helper.http.OkHttpHelper;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.compress.compressors.gzip.GzipUtils;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
/**
* @author 李进才
* @ClassName HttpHelper
* @Description 在线病历打印请求的http请求方法
* @date 2023/4/20 09:40
*/
@Slf4j
public class HttpHelper {
/**
* Get执行后台指定方法
* @param methodName 方法名
* @param paramDic 参数
* @return 返回的数据(Json)
*/
public static String ExecMethodGet (String methodName, Object paramDic){
return UseGet(methodName,paramDic);
}
/**
* Get执行后台指定方法
* @param methodName 方法名
* @return 返回的数据(Json)
*/
public static String ExecMethodGet (String methodName){
return UseGet(methodName,null);
}
private static String UseGet(String methodName, Object paramDic) {
try {
String url = "http://192.168.12.66:8080";
OkHttpClient httpClient = OkHttpHelper.creatClient();
HttpUrl.Builder urlBuilder = HttpUrl.parse(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", 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();
}
}
public static void main(String[] args) {
Map<String,String> test = new HashMap<>();
test.put("patientID","10947918");
System.out.println(ExecMethodGet("BLSM_Appointment_GetBA", test));
}
}

@ -0,0 +1,46 @@
package com.ynxbd.common.helper.xbd;
/**
* @author 李进才
* @ClassName XBDEnum
* @Description TODO
* @date 2023/05/05 10:24:00
*/
public enum XBDEnum {
/**
* [病案翻拍] 获取可以翻拍的列表
*/
BLSM_Appointment_GetBA("BLSM_Appointment_GetBA","获取此病人已被翻拍的病案(可以翻拍的病历)"),
/**
* [病案翻拍] 获取病人翻拍病案所用用途
*/
BLSM_Appointment_GetTemplate("BLSM_Appointment_GetTemplate","获取模板列表(获取用途列表)"),
/**
* [病案翻拍] 新增预约记录
*/
BLSM_Appointment_SetAppointment("BLSM_Appointment_SetAppointment","新增预约记录"),
/**
* [病案翻拍] 获取历史预约记录
*/
BLSM_Appointment_GetHistoryAppointment("BLSM_Appointment_GetHistoryAppointment","获取此病人预约的历史数据"),
/**
* [病案翻拍] 付费成功回调
*/
BLSM_Appointment_SetISPay("BLSM_Appointment_SetISPay","付费成功回调"),
/**
* [病案翻拍] 修改收获地址
*/
BLSM_Appointment_ChangeAddress("BLSM_Appointment_ChangeAddress","修改收货信息"),
/**
* [病案翻拍] 停止预约
*/
BLSM_Appointment_StopAppointment("BLSM_Appointment_StopAppointment","停止预约");
public final String Name;
public final String Description;
XBDEnum(String Name, String Description) {
this.Name = Name;
this.Description = Description;
}
}

@ -13,11 +13,13 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
public class XBDHelper {
private static final String OUT_TEAM_CLOUD_FILM;
public static final String MEDICAL_RECORD_REMAKE_URL;
public static OutTeamDao outTeamDao;
static {
ProperHelper config = new ProperHelper().read("xbd.properties");
OUT_TEAM_CLOUD_FILM = config.getString("xbd.out_team_cloud_film_link");
MEDICAL_RECORD_REMAKE_URL = config.getString("xbd.medical_record_remake_url");
if(OUT_TEAM_CLOUD_FILM ==null){
log.error("新八达内部团队配置文件读取失败");
}

@ -0,0 +1,183 @@
package com.ynxbd.common.helper.xbd;
import cn.hutool.core.compress.Gzip;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.helper.http.OkHttpHelper;
import com.ynxbd.common.result.JsonResult;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.compress.compressors.gzip.GzipUtils;
import org.apache.commons.io.IOUtils;
import org.apache.poi.ss.formula.functions.T;
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));
}
}

@ -1 +1,2 @@
xbd.out_team_cloud_film_link=
xbd.medical_record_remake_url = http://192.168.12.66:8080

Loading…
Cancel
Save