diff --git a/src/main/java/com/ynxbd/common/action/PWEAction.java b/src/main/java/com/ynxbd/common/action/PWEAction.java index d74e127..d1ce998 100644 --- a/src/main/java/com/ynxbd/common/action/PWEAction.java +++ b/src/main/java/com/ynxbd/common/action/PWEAction.java @@ -22,6 +22,7 @@ import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import javax.servlet.http.HttpServletRequest; +import java.util.Map; /** * 【预问诊】 @@ -91,14 +92,47 @@ public class PWEAction extends BaseAction { if (ObjectUtils.isEmpty(outTradeNo)) { return Result.error("订单没有订单号"); } - String miniPWEUrl = PWEHelper.getPWEReportUrl(deptCode, doctCode, doctName, outTradeNo); - return Result.success(miniPWEUrl); + Map dataMap = PWEHelper.getPWEReportUrl(deptCode, doctCode, doctName, outTradeNo); + return Result.success(dataMap); } catch (Exception e) { return Result.error(e); } } - // 返回挂号信息 + /** + * [预问诊][医生端][方式二]7.3.1 通过 GetDiagnosisReportByCaseId 接口获取数据 + */ + @Action("getDiagnosisReportByCaseId") + public PWEResult getDiagnosisReportByCaseId(String tradeNo, String doctCode, String doctName, String deptCode, String deptName) { + try { + Register order = new PWEReportDao().selectRegOrderNo(tradeNo); + if (order == null) { + return PWEResult.error("未找到挂号订单"); + } + JSONObject data = PWEHelper.getDiagnosisReportByCaseId(order.getOutTradeNo(), doctCode, doctName, deptCode, deptName); + return PWEResult.success(data); + } catch (Exception e) { + return PWEResult.error(e); + } + } + + /** + * [预问诊][医生端][方式二]7.3.2 通过 GetPreDiagnosisReportDialogues 接口获取对话记录 + */ + @Action("getPreDiagnosisReportDialogues") + public PWEResult getPreDiagnosisReportDialogues(String tradeNo, String doctCode, String doctName, String deptCode, String deptName) { + try { + Register order = new PWEReportDao().selectRegOrderNo(tradeNo); + if (order == null) { + return PWEResult.error("未找到挂号订单"); + } + JSONObject data = PWEHelper.getPreDiagnosisReportDialogues(order.getOutTradeNo(), doctCode, doctName, deptCode, deptName); + return PWEResult.success(data); + } catch (Exception e) { + return PWEResult.error(e); + } + } + /** * [预问诊]6.3 预问诊完成通知 ReportNotify(可选) @@ -126,7 +160,6 @@ public class PWEAction extends BaseAction { } - /** * [预问诊]6.2 挂号查询 GetRegisteredInfo(必选) */ @@ -162,14 +195,14 @@ public class PWEAction extends BaseAction { } PWERegister reg = new PWERegister(); - reg.setName(ObjectUtils.isEmpty(order.getPatientName())? "": order.getPatientName()); + reg.setName(ObjectUtils.isEmpty(order.getPatientName()) ? "" : order.getPatientName()); reg.setSex(gender); reg.setAge(age); reg.setRegisteredId(order.getOutTradeNo()); reg.setDepartments(reg.getStrList(order.getDeptName())); reg.setDepartmentIds(reg.getStrList(order.getDeptCode())); - reg.setDoctorId(order.getDoctCode()); + reg.setDoctorId(PWEHelper.filterDoctorId(order.getDoctCode())); reg.setDoctorName(order.getDoctName()); reg.setQuery(""); reg.setVisitingStatus(0); diff --git a/src/main/java/com/ynxbd/common/helper/common/URLHelper.java b/src/main/java/com/ynxbd/common/helper/common/URLHelper.java index 66144c5..2ae7422 100644 --- a/src/main/java/com/ynxbd/common/helper/common/URLHelper.java +++ b/src/main/java/com/ynxbd/common/helper/common/URLHelper.java @@ -34,6 +34,7 @@ public class URLHelper { return (isPrefix ? "?" : "") + sb; } + public static void main(String[] args) { String s = mapToUrl(map -> { map.put("a", 2); diff --git a/src/main/java/com/ynxbd/wx/pwe/PWEHelper.java b/src/main/java/com/ynxbd/wx/pwe/PWEHelper.java index 14b947c..070ab3e 100644 --- a/src/main/java/com/ynxbd/wx/pwe/PWEHelper.java +++ b/src/main/java/com/ynxbd/wx/pwe/PWEHelper.java @@ -2,9 +2,11 @@ package com.ynxbd.wx.pwe; import com.alibaba.fastjson.JSONObject; import com.ynxbd.common.helper.common.CodeHelper; +import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.helper.common.URLHelper; import com.ynxbd.common.helper.http.OkHttpHelper; import com.ynxbd.common.result.ServiceException; +import com.ynxbd.wx.pwe.bean.PWEToken; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; @@ -39,7 +41,13 @@ public class PWEHelper { JSONObject resultJson = post(url, params -> { params.put("data", data); params.put("header", header); - }, null); + }, headers -> { + String timestamp = String.valueOf(System.currentTimeMillis()); + headers.add("god-portal-signature", toHmacSha256Example(PWEConfig.PARTNER_SECRET, (PWEConfig.PARTNER_ID + timestamp))); + headers.add("god-portal-timestamp", timestamp); + headers.add("god-portal-request-id", CodeHelper.get32UUID()); + }); + String code = resultJson.getString("retcode"); String message = resultJson.getString("retmsg"); String reqId = resultJson.getString("request_id"); @@ -58,7 +66,6 @@ public class PWEHelper { throw new ServiceException("[8.1.获取打开小程序短链]获取到的链接为空"); } return urlLink; - } @@ -107,42 +114,53 @@ public class PWEHelper { /** * [医生端]获取预问诊报告链接 */ - public static String getPWEReportUrl(String departmentId, String doctorId, String doctorName, String registeredId) throws ServiceException { - String token = getPWEHisToken(doctorId, doctorName); + public static Map getPWEReportUrl(String departmentId, String doctorId, String doctorName, String registeredId) throws ServiceException { + PWEToken pweToken = getPWEHisToken(doctorId, doctorName); + String params = URLHelper.mapToUrl(map -> { - map.put("token", token); - map.put("registeredId", registeredId); + map.put("token", pweToken.getToken()); + map.put("registeredid", registeredId); map.put("departmentId", departmentId); - map.put("doctorId", doctorId); + map.put("doctorId", filterDoctorId(doctorId)); }, true); String url = PWEConfig.IS_DEV ? "https://dev-aimedical.wecity.qq.com/toolbox/prediagnosis.html" : "https://aimedical.wecity.qq.com/toolbox/prediagnosis.html"; - return url + params; + Map map = new HashMap<>(); + map.put("createTime", DateHelper.getCurDateTime()); + map.put("url", (url + params)); + map.put("expiresIn", pweToken.getExpiresIn()); + return map; } /** * 7.2.1 通过 HisToolLoginIn 接口获取 token */ - private static String getPWEHisToken(String doctorId, String doctorName) throws ServiceException { + private static PWEToken getPWEHisToken(String doctorId, String doctorName) throws ServiceException { String url = PWEConfig.IS_DEV ? "https://dev-aimedical.wecity.qq.com/cgi-bin/v1/Diagnosis/RationalDrugServer/RationalDrugServant/HisToolLogin" : "https://aimedical.wecity.qq.com/cgi-bin/v1/Diagnosis/RationalDrugServer/RationalDrugServant/HisToolLogin"; Map data = new HashMap<>(); data.put("partner_id", PWEConfig.PARTNER_ID); - data.put("doctor_id", doctorId); + data.put("doctor_id", filterDoctorId(doctorId)); data.put("doctor_name", doctorName); Map header = new HashMap<>(); header.put("hospital_id", PWEConfig.HOSPITAL_ID); + log.info("[HisToolLoginIn 获取 token] 入参:{data:{}, header:{}}", data, header); JSONObject resultJson = post(url, params -> { params.put("data", data); params.put("header", header); - }, null); + }, headers -> { + String timestamp = String.valueOf(System.currentTimeMillis()); + headers.add("god-portal-signature", toHmacSha256Example(PWEConfig.SECRET_KEY, (PWEConfig.HOSPITAL_ID + timestamp))); + headers.add("god-portal-timestamp", timestamp); + headers.add("god-portal-request-id", CodeHelper.get32UUID()); + }); String code = resultJson.getString("retcode"); String message = resultJson.getString("retmsg"); @@ -156,12 +174,16 @@ public class PWEHelper { throw new ServiceException("[HisToolLoginIn 获取 token]data返回为空"); } String token = dataJson.getString("token"); - String expiresIn = dataJson.getString("expires_in"); + Integer expiresIn = dataJson.getInteger("expires_in"); log.info("[HisToolLoginIn 获取 token][rid:{}] token=[{}] expires_in={}", reqId, token, expiresIn); if (ObjectUtils.isEmpty(token)) { throw new ServiceException("[HisToolLoginIn 获取 token]token为空"); } - return token; + + PWEToken pweToken = new PWEToken(); + pweToken.setToken(token); + pweToken.setExpiresIn(expiresIn); + return pweToken; } // public static void post(String url, OkHttpHelper.MapParams params) { @@ -175,33 +197,12 @@ public class PWEHelper { // } public static JSONObject post(String url, OkHttpHelper.MapParams params, OkHttpHelper.Header header) { - String timestamp = String.valueOf(System.currentTimeMillis()); - return OkHttpHelper.postJson(url, params, headers -> { - headers.add("god-portal-signature", toHmacSha256Example(PWEConfig.PARTNER_SECRET, (PWEConfig.PARTNER_ID + timestamp))); - headers.add("god-portal-timestamp", timestamp); - headers.add("god-portal-request-id", CodeHelper.get32UUID()); - }); + return OkHttpHelper.postJson(url, params, header); } - public static void main(String[] args) { -// getUrl(); -// System.out.println(System.currentTimeMillis()); -// -// post("http://127.0.0.1:9090/micro/test_q/post_json", map -> { -// map.put("a", "1"); -// map.put("b", "1"); -// }); -// - - String timestamp = String.valueOf(System.currentTimeMillis()); - String sign = PWEHelper.toHmacSha256Example(PWEConfig.PARTNER_SECRET, (PWEConfig.PARTNER_ID + timestamp)); - log.info("timestamp={}, sign={}, uuid={}", timestamp, sign, CodeHelper.get32UUID()); + public static String filterDoctorId(String doctorId) { + return ("*".equals(doctorId) ? "0" : doctorId); } -// -// public static void main(String[] args) { -// -// } - /** * 签名验证 @@ -277,4 +278,95 @@ public class PWEHelper { } return ""; } + + public static JSONObject getDiagnosisReportByCaseId(String registerId, String doctorId, String doctorName, String departmentId, String departmentName) throws ServiceException { + String url = PWEConfig.IS_DEV + ? "https://dev-aimedical.wecity.qq.com/cgi-bin/v1/Diagnosis/DiagnosisAssistServer/DiagnosisAssistServant/GetPreDiagnosisReportByCaseId" + : "https://aimedical.wecity.qq.com/cgi-bin/v1/Diagnosis/DiagnosisAssistServer/DiagnosisAssistServant/GetPreDiagnosisReportByCaseId"; + + Map data = new HashMap<>(); + data.put("partnerId", PWEConfig.PARTNER_ID); + data.put("caseId", registerId); + data.put("doctorId", doctorId); + data.put("doctorName", doctorName); + data.put("departmentId", departmentId); + data.put("departmentName", departmentName); + + Map header = new HashMap<>(); + header.put("hospitalId", PWEConfig.HOSPITAL_ID); + + log.info("[7.3.1 通过 GetDiagnosisReportByCaseId 接口获取数据] 入参:data={}, header={}", data, header); + JSONObject resultJson = post(url, params -> { + params.put("data", data); + params.put("header", header); + }, headers -> { + String timestamp = String.valueOf(System.currentTimeMillis()); + headers.add("god-portal-signature", toHmacSha256Example(PWEConfig.SECRET_KEY, (PWEConfig.HOSPITAL_ID + timestamp))); + headers.add("god-portal-timestamp", timestamp); + headers.add("god-portal-request-id", CodeHelper.get32UUID()); + }); + + String code = resultJson.getString("retcode"); + String message = resultJson.getString("retmsg"); + String reqId = resultJson.getString("request_id"); + if (!"0".equals(code)) { + log.error("[7.3.1 通过 GetDiagnosisReportByCaseId 接口获取数据]失败[rid:{}] code={}, message={}", reqId, code, message); + throw new ServiceException(message); + } + JSONObject dataJson = resultJson.getJSONObject("data"); + if (dataJson == null) { + throw new ServiceException("[7.3.1 通过 GetDiagnosisReportByCaseId 接口获取数据]data返回为空"); + } + return dataJson; + } + + /** + * 7.3.2 通过 GetPreDiagnosisReportDialogues 接口获取对话记录 + */ + public static JSONObject getPreDiagnosisReportDialogues(String registerId, String doctorId, String doctorName, String departmentId, String departmentName) throws ServiceException { + String url = PWEConfig.IS_DEV + ? "https://dev-aimedical.wecity.qq.com/cgi-bin/v1/Diagnosis/DiagnosisAssistServer/DiagnosisAssistServant/GetPreDiagnosisReportDialogues" + : "https://aimedical.wecity.qq.com/cgi-bin/v1/Diagnosis/DiagnosisAssistServer/DiagnosisAssistServant/GetPreDiagnosisReportDialogues"; + + Map data = new HashMap<>(); + data.put("partnerId", PWEConfig.PARTNER_ID); + data.put("caseId", registerId); + data.put("doctorId", doctorId); + data.put("doctorName", doctorName); + data.put("departmentId", departmentId); + data.put("departmentName", departmentName); + + Map header = new HashMap<>(); + header.put("hospitalId", PWEConfig.HOSPITAL_ID); + + log.info("[7.3.2 通过 GetPreDiagnosisReportDialogues 接口获取对话记录] 入参:data={}, header={}", data, header); + JSONObject resultJson = post(url, params -> { + params.put("data", data); + params.put("header", header); + }, headers -> { + String timestamp = String.valueOf(System.currentTimeMillis()); + headers.add("god-portal-signature", toHmacSha256Example(PWEConfig.SECRET_KEY, (PWEConfig.HOSPITAL_ID + timestamp))); + headers.add("god-portal-timestamp", timestamp); + headers.add("god-portal-request-id", CodeHelper.get32UUID()); + }); + + String code = resultJson.getString("retcode"); + String message = resultJson.getString("retmsg"); + String reqId = resultJson.getString("request_id"); + if (!"0".equals(code)) { + log.error("[7.3.2 通过 GetPreDiagnosisReportDialogues 接口获取对话记录]失败[rid:{}] code={}, message={}", reqId, code, message); + throw new ServiceException(message); + } + JSONObject dataJson = resultJson.getJSONObject("data"); + if (dataJson == null) { + throw new ServiceException("[7.3.2 通过 GetPreDiagnosisReportDialogues 接口获取对话记录]data返回为空"); + } + return dataJson; + } + + +// +// public static void main(String[] args) { +// +// } } diff --git a/src/main/java/com/ynxbd/wx/pwe/bean/PWEDiagnosisReport.java b/src/main/java/com/ynxbd/wx/pwe/bean/PWEDiagnosisReport.java new file mode 100644 index 0000000..fd4ad4d --- /dev/null +++ b/src/main/java/com/ynxbd/wx/pwe/bean/PWEDiagnosisReport.java @@ -0,0 +1,20 @@ +package com.ynxbd.wx.pwe.bean; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; + +import java.io.Serializable; + + +@Getter +@Setter +@ToString +@Slf4j +@NoArgsConstructor +public class PWEDiagnosisReport implements Serializable { + private static final long serialVersionUID = 2024040816560001L; + +} diff --git a/src/main/java/com/ynxbd/wx/pwe/bean/PWEToken.java b/src/main/java/com/ynxbd/wx/pwe/bean/PWEToken.java new file mode 100644 index 0000000..f869b6d --- /dev/null +++ b/src/main/java/com/ynxbd/wx/pwe/bean/PWEToken.java @@ -0,0 +1,18 @@ +package com.ynxbd.wx.pwe.bean; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; + +@Getter +@Setter +@ToString +@NoArgsConstructor +public class PWEToken { + private String token; + private Integer expiresIn; + +}