diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 4d750e7..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.gitignore b/.gitignore index d9350ab..7f0afd4 100644 --- a/.gitignore +++ b/.gitignore @@ -98,4 +98,5 @@ dependency-reduced-pom.xml Guardfile README.html *.iml -.idea \ No newline at end of file +.idea +wc.db diff --git a/.svn/wc.db b/.svn/wc.db deleted file mode 100644 index d4571fb..0000000 Binary files a/.svn/wc.db and /dev/null differ diff --git a/src/.DS_Store b/src/.DS_Store deleted file mode 100644 index 98a1a43..0000000 Binary files a/src/.DS_Store and /dev/null differ diff --git a/src/main/java/com/ynxbd/common/action/XBDAction.java b/src/main/java/com/ynxbd/common/action/XBDAction.java index e719739..d20fe4a 100644 --- a/src/main/java/com/ynxbd/common/action/XBDAction.java +++ b/src/main/java/com/ynxbd/common/action/XBDAction.java @@ -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 模板id(templateNo) + * @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)); + } + } diff --git a/src/main/java/com/ynxbd/common/bean/xbd/MRHistory.java b/src/main/java/com/ynxbd/common/bean/xbd/MRHistory.java new file mode 100644 index 0000000..9dc1a6a --- /dev/null +++ b/src/main/java/com/ynxbd/common/bean/xbd/MRHistory.java @@ -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; +} diff --git a/src/main/java/com/ynxbd/common/bean/xbd/MedicalRecord.java b/src/main/java/com/ynxbd/common/bean/xbd/MedicalRecord.java new file mode 100644 index 0000000..261ddfe --- /dev/null +++ b/src/main/java/com/ynxbd/common/bean/xbd/MedicalRecord.java @@ -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; +} diff --git a/src/main/java/com/ynxbd/common/helper/xbd/HttpHelper.java b/src/main/java/com/ynxbd/common/helper/xbd/HttpHelper.java deleted file mode 100644 index 8859432..0000000 --- a/src/main/java/com/ynxbd/common/helper/xbd/HttpHelper.java +++ /dev/null @@ -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 test = new HashMap<>(); - test.put("patientID","10947918"); - System.out.println(ExecMethodGet("BLSM_Appointment_GetBA", test)); - } -} diff --git a/src/main/java/com/ynxbd/common/helper/xbd/XBDEnum.java b/src/main/java/com/ynxbd/common/helper/xbd/XBDEnum.java new file mode 100644 index 0000000..9c4381c --- /dev/null +++ b/src/main/java/com/ynxbd/common/helper/xbd/XBDEnum.java @@ -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; + } +} diff --git a/src/main/java/com/ynxbd/common/helper/xbd/XBDHelper.java b/src/main/java/com/ynxbd/common/helper/xbd/XBDHelper.java index 81df1a5..5e12d63 100644 --- a/src/main/java/com/ynxbd/common/helper/xbd/XBDHelper.java +++ b/src/main/java/com/ynxbd/common/helper/xbd/XBDHelper.java @@ -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("新八达内部团队配置文件读取失败"); } diff --git a/src/main/java/com/ynxbd/common/helper/xbd/XBDHttpHelper.java b/src/main/java/com/ynxbd/common/helper/xbd/XBDHttpHelper.java new file mode 100644 index 0000000..5fc615b --- /dev/null +++ b/src/main/java/com/ynxbd/common/helper/xbd/XBDHttpHelper.java @@ -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 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 test = new HashMap<>(); + test.put("patientID","10947918"); + System.out.println(ExecMethodGet("BLSM_Appointment_GetBA", test)); + } +} diff --git a/src/main/resources/xbd.properties b/src/main/resources/xbd.properties index 7398208..9a08825 100644 --- a/src/main/resources/xbd.properties +++ b/src/main/resources/xbd.properties @@ -1 +1,2 @@ xbd.out_team_cloud_film_link= +xbd.medical_record_remake_url = http://192.168.12.66:8080