From 3eeae9cdd99d55f40fc9993fae037934d4bcc733 Mon Sep 17 00:00:00 2001 From: wangsq Date: Wed, 8 Jul 2026 16:40:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9EXML=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E8=AF=BB=E5=8F=96=20=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E7=94=B5=E5=AD=90=E5=81=A5=E5=BA=B7=E5=8D=A1=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=EF=BC=8C=E6=96=B0=E5=A2=9E=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E8=A7=A3=E8=AF=BB=E6=8E=A5=E5=8F=A3=20=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=89=93=E5=8D=B0=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ynxbd/common/TestA.java | 47 ++--- .../{ => healthcard}/AIGuidanceAction.java | 186 +++++++++--------- .../action/healthcard/HCReportAction.java | 60 ++++++ .../ynxbd/common/config/EhCacheConfig.java | 2 - .../config/healthcard/HCAIGuidanceConfig.java | 81 ++++++++ .../config/healthcard/HCReportConfig.java | 28 +++ .../config/healthcard/HCSignHelper.java | 27 +++ .../common/helper/common/XmlConfigHelper.java | 148 ++++++++++++++ .../java/com/ynxbd/common/result/Result.java | 6 +- .../common/service/AIGuidanceService.java | 34 ++-- .../ynxbd/common/service/MedicalService.java | 6 +- .../com/ynxbd/wx/config/AIGuidanceConfig.java | 83 -------- src/main/resources/hc-config.xml | 34 ++++ 13 files changed, 516 insertions(+), 226 deletions(-) rename src/main/java/com/ynxbd/common/action/{ => healthcard}/AIGuidanceAction.java (78%) create mode 100644 src/main/java/com/ynxbd/common/action/healthcard/HCReportAction.java create mode 100644 src/main/java/com/ynxbd/common/config/healthcard/HCAIGuidanceConfig.java create mode 100644 src/main/java/com/ynxbd/common/config/healthcard/HCReportConfig.java create mode 100644 src/main/java/com/ynxbd/common/config/healthcard/HCSignHelper.java create mode 100644 src/main/java/com/ynxbd/common/helper/common/XmlConfigHelper.java delete mode 100644 src/main/java/com/ynxbd/wx/config/AIGuidanceConfig.java create mode 100644 src/main/resources/hc-config.xml diff --git a/src/main/java/com/ynxbd/common/TestA.java b/src/main/java/com/ynxbd/common/TestA.java index c94182f..459b072 100644 --- a/src/main/java/com/ynxbd/common/TestA.java +++ b/src/main/java/com/ynxbd/common/TestA.java @@ -1,24 +1,5 @@ package com.ynxbd.common; -import cn.hutool.Hutool; -import cn.hutool.core.util.PhoneUtil; -import com.ynxbd.common.bean.Doctor; -import com.ynxbd.common.bean.Patient; -import com.ynxbd.common.bean.enums.MerchantEnum; -import com.ynxbd.common.dao.PatientDao; -import com.ynxbd.common.helper.common.DateHelper; -import com.ynxbd.common.helper.common.HMACHelper; -import com.ynxbd.common.helper.common.JsonHelper; -import com.ynxbd.common.result.JsonResult; -import com.ynxbd.common.result.JsonResultEnum; -import com.ynxbd.common.result.Result; -import com.ynxbd.common.result.ResultEnum; -import com.ynxbd.common.service.DoctorService; -import com.ynxbd.wx.wxfactory.AesWxHelper; - -import java.util.List; - - public class TestA { // public static void main(String[] args) throws Exception { @@ -37,18 +18,28 @@ public class TestA { // System.out.println(cacheSign); // } - public static void main(String[] args) { - String KEY = "3431de05cbf9d0ffdbc064a352835981"; - String PARTNER_ID = "100000637"; - - String timestamp = System.currentTimeMillis() + ""; - String str = PARTNER_ID + timestamp; - String cacheSign = HMACHelper.sha256(str, KEY); - System.out.println(timestamp); - System.out.println(cacheSign); +// public static void main(String[] args) { +// String KEY = "3431de05cbf9d0ffdbc064a352835981"; +// String PARTNER_ID = "100000637"; +// +// String timestamp = System.currentTimeMillis() + ""; +// String str = PARTNER_ID + timestamp; +// String cacheSign = HMACHelper.sha256(str, KEY); +// System.out.println(timestamp); +// System.out.println(cacheSign); +// } + + + public static void getSignInfo(javax.servlet.http.HttpServletRequest request) { + System.out.println("222222222"); } + // 测试 + public static void main(String[] args) { + System.out.println("1111111111"); + } + // public static void main(String[] args) { // String respXML = "\n" + // "\t1002\n" + diff --git a/src/main/java/com/ynxbd/common/action/AIGuidanceAction.java b/src/main/java/com/ynxbd/common/action/healthcard/AIGuidanceAction.java similarity index 78% rename from src/main/java/com/ynxbd/common/action/AIGuidanceAction.java rename to src/main/java/com/ynxbd/common/action/healthcard/AIGuidanceAction.java index b011e6e..0a3f515 100644 --- a/src/main/java/com/ynxbd/common/action/AIGuidanceAction.java +++ b/src/main/java/com/ynxbd/common/action/healthcard/AIGuidanceAction.java @@ -1,93 +1,93 @@ -package com.ynxbd.common.action; - -import com.ynxbd.common.action.base.BaseAction; -import com.ynxbd.common.result.Result; -import com.ynxbd.common.result.ResultEnum; -import com.ynxbd.common.service.AIGuidanceService; -import com.ynxbd.wx.config.AIGuidanceConfig; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.ObjectUtils; -import org.apache.struts2.convention.annotation.Action; -import org.apache.struts2.convention.annotation.Namespace; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * 智能导诊 - * - * @Author wsq - * @Date 2021/2/26 12:50 - * @Copyright @ 2020 云南新八达科技有限公司 All rights reserved. - */ - -@Slf4j -@Namespace("/aiGuidance") -public class AIGuidanceAction extends BaseAction { - - /** - * 查询平台所有医院列表信息 - */ - @Action("getAllHospInfo") - public Result getAllHospInfo() { - if (!AIGuidanceConfig.IS_DEBUG && !AIGuidanceConfig.isVerifySign(request)) { - return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 - } - - List> resultList = new ArrayList<>(); - Map resultMap = new HashMap<>(); - resultMap.put("hosId", AIGuidanceConfig.HOS_ID); - resultMap.put("hosName", AIGuidanceConfig.HOS_NAME); - resultList.add(resultMap); - - return Result.success(ResultEnum.AI_SUCCESS, resultList); - } - - /** - * 查询医院详细信息 - */ - @Action("getHospDetail") - public Result getHospDetail(String hosId) { - if (!AIGuidanceConfig.IS_DEBUG && !AIGuidanceConfig.isVerifySign(request)) { - return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 - } - return new AIGuidanceService().getHospDetail(hosId); - } - - /** - * 查询科室信息 - */ - @Action("getDeptList") - public Result getDeptList(String hosId, String branchId) { - if (!AIGuidanceConfig.IS_DEBUG && !AIGuidanceConfig.isVerifySign(request)) { - return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 - } - return new AIGuidanceService().getDeptList(hosId, branchId); - } - - /** - * 查询医生信息 - */ - @Action("getDoctorList") - public Result getDoctorList(String hosId, String branchId, String deptId) { - if (!AIGuidanceConfig.IS_DEBUG && !AIGuidanceConfig.isVerifySign(request)) { - return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 - } - return new AIGuidanceService().getDoctorList(hosId, branchId, deptId); - } - - - /** - * 跳转重定向 - */ - @Action("getSchedule") - public Result getSchedule(String id) { - if (ObjectUtils.isEmpty(id)) { - return Result.redirect("test02/test02"); - } - return Result.redirect("https://www.baidu.com"); - } - -} +package com.ynxbd.common.action.healthcard; + +import com.ynxbd.common.action.base.BaseAction; +import com.ynxbd.common.config.healthcard.HCAIGuidanceConfig; +import com.ynxbd.common.result.Result; +import com.ynxbd.common.result.ResultEnum; +import com.ynxbd.common.service.AIGuidanceService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 智能导诊 + * + * @Author wsq + * @Date 2021/2/26 12:50 + * @Copyright @ 2020 云南新八达科技有限公司 All rights reserved. + */ + +@Slf4j +@Namespace("/aiGuidance") +public class AIGuidanceAction extends BaseAction { + + /** + * 查询平台所有医院列表信息 + */ + @Action("getAllHospInfo") + public Result getAllHospInfo() { + if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) { + return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 + } + + List> resultList = new ArrayList<>(); + Map resultMap = new HashMap<>(); + resultMap.put("hosId", HCAIGuidanceConfig.HOSP_ID); + resultMap.put("hosName", HCAIGuidanceConfig.HOSP_NAME); + resultList.add(resultMap); + + return Result.success(ResultEnum.AI_SUCCESS, resultList); + } + + /** + * 查询医院详细信息 + */ + @Action("getHospDetail") + public Result getHospDetail(String hosId) { + if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) { + return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 + } + return new AIGuidanceService().getHospDetail(hosId); + } + + /** + * 查询科室信息 + */ + @Action("getDeptList") + public Result getDeptList(String hosId, String branchId) { + if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) { + return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 + } + return new AIGuidanceService().getDeptList(hosId, branchId); + } + + /** + * 查询医生信息 + */ + @Action("getDoctorList") + public Result getDoctorList(String hosId, String branchId, String deptId) { + if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) { + return Result.error(ResultEnum.SIGN_ERROR); // 签名异常 + } + return new AIGuidanceService().getDoctorList(hosId, branchId, deptId); + } + + + /** + * 跳转重定向 + */ + @Action("getSchedule") + public Result getSchedule(String id) { + if (ObjectUtils.isEmpty(id)) { + return Result.redirect("test02/test02"); + } + return Result.redirect("https://www.baidu.com"); + } + +} diff --git a/src/main/java/com/ynxbd/common/action/healthcard/HCReportAction.java b/src/main/java/com/ynxbd/common/action/healthcard/HCReportAction.java new file mode 100644 index 0000000..ae59683 --- /dev/null +++ b/src/main/java/com/ynxbd/common/action/healthcard/HCReportAction.java @@ -0,0 +1,60 @@ +package com.ynxbd.common.action.healthcard; + +import com.alibaba.fastjson.JSONObject; +import com.ynxbd.common.action.base.BaseAction; +import com.ynxbd.common.config.HealthCardConfig; +import com.ynxbd.common.config.healthcard.HCReportConfig; +import com.ynxbd.common.config.healthcard.HCSignHelper; +import com.ynxbd.common.config.interceptor.AesDecode; +import com.ynxbd.common.helper.http.OkHttpHelper; +import com.ynxbd.common.result.Result; +import lombok.extern.slf4j.Slf4j; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; + +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Namespace("/hc_report") +public class HCReportAction extends BaseAction { + + + @Action("pushUserReport") + public Result pushUserReport(@AesDecode String patientId, String reportId, String healthCardId, String msgId, String reportContent) { + log.info("[报告解读] msgId={}, patientId={}, reportId={}", msgId, patientId, reportId); + String url = HCReportConfig.IS_DEV + ? "https://med-biz-pre.wecity.qq.com/api/report/PushUserReport/" + : "https://med-biz.wecity.qq.com/api/report/PushUserReport/"; + + HCSignHelper config = HCReportConfig.createSign(); + String requestId = config.getRequestId(); + + Map reqHead = new HashMap<>(); + reqHead.put("requestId", requestId); + +// Map textReportInfo = new HashMap<>(); +// Map patientInfo = new HashMap<>(); +// Map reportInfo = new HashMap<>(); + + // partnerId:合作方ID 腾讯健康提供 +// JSONObject jsonObject = OkHttpHelper.postJson(url + "合作方ID 腾讯健康提供", params -> { +// params.put("reqHead", reqHead); +// params.put("hospitalId", HealthCardConfig.H_HOSPITAL_ID); +// params.put("outerId", reportId); +// params.put("healthCardId", healthCardId); +// params.put("patientId", patientId); +// params.put("msgId", msgId); +// params.put("reportFileType", 2); // [ 1:pdf;2:图片;3:文本] +// params.put("reportContent", reportContent); // 报告内容:报告文件base64编码、体积需要在30MB以内 当reportFileType 取值为 1, 2时,将报告文件base64编码放在该字段 +// params.put("textReportInfo", ""); // 当reportFileType 取值为 3 时,将文本报告内容放下该字段。 +// }, headers -> { +// headers.add("Content-Type", "application/json"); +// headers.add("god-portal-signature", config.getSign()); +// headers.add("god-portal-timestamp", config.getTimestamp()); +// headers.add("god-portal-request-id", requestId); +// }); +// log.info("[报告解读] resp={}", jsonObject); + return Result.success(); + } +} diff --git a/src/main/java/com/ynxbd/common/config/EhCacheConfig.java b/src/main/java/com/ynxbd/common/config/EhCacheConfig.java index 517701b..86c9b0a 100644 --- a/src/main/java/com/ynxbd/common/config/EhCacheConfig.java +++ b/src/main/java/com/ynxbd/common/config/EhCacheConfig.java @@ -12,8 +12,6 @@ import org.ehcache.config.builders.CacheManagerBuilder; import org.ehcache.config.builders.ExpiryPolicyBuilder; import org.ehcache.config.builders.ResourcePoolsBuilder; import org.ehcache.config.units.MemoryUnit; -import org.ehcache.impl.internal.resilience.RobustResilienceStrategy; -import org.ehcache.spi.resilience.ResilienceStrategy; import org.ehcache.xml.XmlConfiguration; import java.net.URL; diff --git a/src/main/java/com/ynxbd/common/config/healthcard/HCAIGuidanceConfig.java b/src/main/java/com/ynxbd/common/config/healthcard/HCAIGuidanceConfig.java new file mode 100644 index 0000000..419be29 --- /dev/null +++ b/src/main/java/com/ynxbd/common/config/healthcard/HCAIGuidanceConfig.java @@ -0,0 +1,81 @@ +package com.ynxbd.common.config.healthcard; + +import com.ynxbd.common.helper.common.HMACHelper; +import com.ynxbd.common.helper.common.XmlConfigHelper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; + +import javax.servlet.http.HttpServletRequest; + +@Slf4j +public class HCAIGuidanceConfig { + public final static boolean IS_ENABLE; + // 是否为测试环境 + public final static boolean IS_DEV; + // 是否为调试 + public final static boolean IS_DEBUG; + // 是否为分时段挂号 + public final static boolean IS_SPLIT_TIME_REG; + //配置文件读取项 + public final static String HOSP_ID; + // 密钥token + public final static String TOKEN; + + public final static String PARTNER_ID; + + public final static String HOSP_NAME; + + public final static String HOSP_ADDRESS; + + public final static String HOSP_INTRO; + + public final static String HOSP_LEVEL; + + public final static String HOSP_TEL; + + static { + XmlConfigHelper config = new XmlConfigHelper().read("hc-config.xml", "ai_guidance"); + IS_ENABLE = config.getBoolean("is_enable", false); + config.setIsEnable(IS_ENABLE); + + IS_DEV = config.getBoolean("is_dev", false); + IS_DEBUG = config.getBoolean("is_debug", false); + IS_SPLIT_TIME_REG = config.getBoolean("is_split_time_reg", true); + + TOKEN = IS_DEV ? config.getString("dev_token") : config.getString("token"); + + PARTNER_ID = config.getString("partner_id"); + HOSP_ID = config.getString("hosp_id"); + HOSP_NAME = config.getString("hosp_name"); + HOSP_ADDRESS = config.getString("hosp_address", ""); + HOSP_INTRO = config.getString("hosp_intro", ""); + HOSP_LEVEL = config.getString("hosp_level", ""); + HOSP_TEL = config.getString("hosp_tel", ""); + + if (PARTNER_ID == null) { + log.error("[智能导诊]读取配置文件失败|功能未开启"); + } + } + + /** + * 验签 + * + * @param request 请求 + * @return 是否通过 + */ + public static boolean isVerifySign(HttpServletRequest request) { + if (!IS_ENABLE) { + return false; + } + String signature = request.getHeader("god-portal-signature"); // 签名 + if (ObjectUtils.isEmpty(signature)) { + return false; + } + String timestamp = request.getHeader("god-portal-timestamp"); // 时间戳 + + log.info("[智能导诊]验签 timestamp={}, signature={}", timestamp, signature); + String str = PARTNER_ID + timestamp; + String cacheSign = HMACHelper.sha256(str, TOKEN); + return signature.equals(cacheSign); + } +} diff --git a/src/main/java/com/ynxbd/common/config/healthcard/HCReportConfig.java b/src/main/java/com/ynxbd/common/config/healthcard/HCReportConfig.java new file mode 100644 index 0000000..500d701 --- /dev/null +++ b/src/main/java/com/ynxbd/common/config/healthcard/HCReportConfig.java @@ -0,0 +1,28 @@ +package com.ynxbd.common.config.healthcard; + +import com.ynxbd.common.helper.common.XmlConfigHelper; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class HCReportConfig { + + public static final boolean IS_DEV; + + public static final String TOKEN; + + public static final String PARTNER_ID; // 医院ID(每家医院不一样) + + static { + XmlConfigHelper config = new XmlConfigHelper().read("hc-config.xml", "report"); + + IS_DEV = config.getBoolean("is_dev", false); + TOKEN = config.getString("token"); + PARTNER_ID = config.getString("partner_id"); + } + + // 生成签名 + public static HCSignHelper createSign() { + return new HCSignHelper().createSign(PARTNER_ID, TOKEN); + } + +} diff --git a/src/main/java/com/ynxbd/common/config/healthcard/HCSignHelper.java b/src/main/java/com/ynxbd/common/config/healthcard/HCSignHelper.java new file mode 100644 index 0000000..2044268 --- /dev/null +++ b/src/main/java/com/ynxbd/common/config/healthcard/HCSignHelper.java @@ -0,0 +1,27 @@ +package com.ynxbd.common.config.healthcard; + +import cn.hutool.crypto.digest.DigestUtil; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +import java.util.UUID; + +@Slf4j +@Getter +public class HCSignHelper { + private String sign; + private String timestamp; + private String requestId; + + // 生成签名 + public HCSignHelper createSign(String partnerId, String token) { + // 1. 当前毫秒时间戳 + this.timestamp = String.valueOf(System.currentTimeMillis()); + // 2. 拼接 signStr = partnerId + timestamp + token + String signStr = partnerId + this.timestamp + token; + // 3. MD5 32位小写 + this.sign = DigestUtil.md5Hex(signStr); + this.requestId = String.valueOf(UUID.randomUUID()); + return this; + } +} diff --git a/src/main/java/com/ynxbd/common/helper/common/XmlConfigHelper.java b/src/main/java/com/ynxbd/common/helper/common/XmlConfigHelper.java new file mode 100644 index 0000000..0452de5 --- /dev/null +++ b/src/main/java/com/ynxbd/common/helper/common/XmlConfigHelper.java @@ -0,0 +1,148 @@ +package com.ynxbd.common.helper.common; + +import lombok.extern.slf4j.Slf4j; +import org.dom4j.Document; +import org.dom4j.Element; +import org.dom4j.io.SAXReader; + +import java.io.InputStream; + + +@Slf4j +public class XmlConfigHelper { + private org.dom4j.Element root; + + private boolean isEnable = true; + + /** + * 读取配置文件 + * + * @param filePath 文件路径 + * @param rootName 根节点名 + */ + public XmlConfigHelper read(String filePath, String rootName) { + try (InputStream is = XmlConfigHelper.class.getClassLoader().getResourceAsStream(filePath)) { // 从classpath读取resources文件 + SAXReader reader = new SAXReader(); + Document document = reader.read(is); + Element rootElement = document.getRootElement(); + if (rootName == null) { + root = rootElement; + } else { + root = rootElement.element(rootName); + } + } catch (Exception e) { + ErrorHelper.println(e); + } + return this; + } + + public XmlConfigHelper read(String filePath) { + return read(filePath, null); + } + + + public synchronized void setIsEnable(String rootName) { + this.isEnable = getBoolean(rootName, false); + } + + public synchronized void setIsEnable(boolean isEnable) { + this.isEnable = isEnable; + } + + /** + * 获取配置文件Boolean值,可设默认值 + * + * @param rootNode 节点名 + * @return Boolean + */ + public boolean getBoolean(String rootNode, boolean defaultVal) { + try { + if (root == null) { + return defaultVal; + } + + String val = root.elementTextTrim(rootNode); + return val == null ? defaultVal : Boolean.parseBoolean(val); + } catch (Exception e) { + e.printStackTrace(); + return defaultVal; + } + } + + + /** + * 获取配置文件String值 + * + * @param rootNode 节点名 + * @return String + */ + public String getString(String rootNode) { + return getString(rootNode, null); + } + + /** + * 获取配置文件String值 + * + * @param rootNode 节点名 + * @return String + */ + public String getString(String rootNode, String defaultVal) { + try { + if (root == null) { + return defaultVal; + } + + if (!isEnable) { + return defaultVal; + } + + String val = root.elementTextTrim(rootNode); + return val == null ? defaultVal : val; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + + /** + * 获取配置文件Integer值 + * + * @param rootNode 节点名 + * @return Integer + */ + public Integer getInteger(String rootNode) { + try { + String val = getString(rootNode, null); + return val == null ? null : Integer.parseInt(val.trim()); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + + // public static Element readXmlConfig(String filePath, String nodeName) { +// Element root = readXmlConfig(filePath); +// if (root == null) { +// return null; +// } +// return root.element(nodeName); +// } +// +// +// public static void main(String[] args) { +// Element report = readXmlConfig("hc-config.xml", "report"); +// String s = report.elementText("is_dev"); +// System.out.println(s); +// } +// +// +// private static void readXmlData(Element root) { +// Element dbNode = root.element("db"); +// System.out.println("密码:" + dbNode.elementText("password")); +// Element appNode = root.element("app"); +// System.out.println("端口号:" + appNode.attributeValue("port")); +// } + +} diff --git a/src/main/java/com/ynxbd/common/result/Result.java b/src/main/java/com/ynxbd/common/result/Result.java index 5c8100d..14882d8 100644 --- a/src/main/java/com/ynxbd/common/result/Result.java +++ b/src/main/java/com/ynxbd/common/result/Result.java @@ -143,9 +143,11 @@ public class Result extends BaseResult { if (e != null && e.getClass() == ServiceException.class) { ServiceException serviceException = (ServiceException) e; - if (serviceException.isLog() && serviceException.getMessage() != null) { + if (serviceException.getMessage() != null) { message = serviceException.getMessage(); - log.error(e.getMessage()); + if (serviceException.isLog()) { + log.error(e.getMessage()); + } } if (serviceException.getResultEnum() != null) { status = serviceException.getResultEnum().status; diff --git a/src/main/java/com/ynxbd/common/service/AIGuidanceService.java b/src/main/java/com/ynxbd/common/service/AIGuidanceService.java index b14cb58..fa444e0 100644 --- a/src/main/java/com/ynxbd/common/service/AIGuidanceService.java +++ b/src/main/java/com/ynxbd/common/service/AIGuidanceService.java @@ -7,6 +7,7 @@ import com.ynxbd.common.bean.ai.AIDept; import com.ynxbd.common.bean.ai.AIDoctor; import com.ynxbd.common.bean.ai.AIDoctorSchedule; import com.ynxbd.common.bean.ai.AIPatient; +import com.ynxbd.common.config.healthcard.HCAIGuidanceConfig; import com.ynxbd.common.dao.RegisterDao; import com.ynxbd.common.dao.his.HisRegisterDao; import com.ynxbd.common.helper.common.DateHelper; @@ -15,7 +16,6 @@ import com.ynxbd.common.helper.common.JsonHelper; import com.ynxbd.common.helper.common.URLHelper; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; -import com.ynxbd.wx.config.AIGuidanceConfig; import com.ynxbd.wx.config.WeChatConfig; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; @@ -41,17 +41,17 @@ public class AIGuidanceService { } List> resultList = new ArrayList<>(); - if (!hosId.equals(AIGuidanceConfig.HOS_ID)) { + if (!hosId.equals(HCAIGuidanceConfig.HOSP_ID)) { return Result.success(ResultEnum.AI_SUCCESS, resultList); } Map map = new HashMap<>(); - map.put("hosId", AIGuidanceConfig.HOS_ID); + map.put("hosId", HCAIGuidanceConfig.HOSP_ID); map.put("branchId", ""); // 如果有分院,则填写分院Id, 主院的分院Id为hosId本身 - map.put("hosName", AIGuidanceConfig.HOS_NAME); // 如果是分院,则填写分院名称,否则填写主院名称 - map.put("hosIntro", AIGuidanceConfig.HOS_INTRO); - map.put("hosLevel", AIGuidanceConfig.HOS_LEVEL); - map.put("hosAddress", AIGuidanceConfig.HOS_ADDRESS); - map.put("hosTelephone", AIGuidanceConfig.HOS_TELEPHONE); + map.put("hosName", HCAIGuidanceConfig.HOSP_NAME); // 如果是分院,则填写分院名称,否则填写主院名称 + map.put("hosIntro", HCAIGuidanceConfig.HOSP_INTRO); + map.put("hosLevel", HCAIGuidanceConfig.HOSP_LEVEL); + map.put("hosAddress", HCAIGuidanceConfig.HOSP_ADDRESS); + map.put("hosTelephone", HCAIGuidanceConfig.HOSP_TEL); map.put("hosImage", WeChatConfig.getBaseURL(true) + "config/logo.png"); map.put("appId", WeChatConfig.APP_ID); // 公众号appid map.put("hosUrl", WeChatConfig.getWebReqURL(true) + "app.html"); // 公众号appid @@ -79,13 +79,13 @@ public class AIGuidanceService { } List dataList = new ArrayList<>(); - if (!hosId.equals(AIGuidanceConfig.HOS_ID)) { // 医院id校验 + if (!hosId.equals(HCAIGuidanceConfig.HOSP_ID)) { // 医院id校验 log.warn("[智能导诊]科室列表查询-hosId不匹配"); return Result.success(ResultEnum.AI_SUCCESS, dataList); } List deptList; - if (AIGuidanceConfig.IS_SPLIT_TIME_REG) { // 分时段 + if (HCAIGuidanceConfig.IS_SPLIT_TIME_REG) { // 分时段 String curDate = DateHelper.getCurDate(); deptList = new HisRegisterDao().getTimeDeptList(curDate, DateHelper.getMoveDate(curDate, 7), ""); } else { @@ -169,7 +169,7 @@ public class AIGuidanceService { return Result.error(ResultEnum.PARAM_IS_DEFECT); } - if (!hosId.equals(AIGuidanceConfig.HOS_ID)) { // 医院id校验 + if (!hosId.equals(HCAIGuidanceConfig.HOSP_ID)) { // 医院id校验 log.warn("[智能导诊]医生列表查询-hosId不匹配"); return Result.success(ResultEnum.AI_SUCCESS, new ArrayList<>()); } @@ -177,7 +177,7 @@ public class AIGuidanceService { HisRegisterDao hisRegisterDao = new HisRegisterDao(); List doctorList; - if (AIGuidanceConfig.IS_SPLIT_TIME_REG) { // 分时段 + if (HCAIGuidanceConfig.IS_SPLIT_TIME_REG) { // 分时段 String curDate = DateHelper.getCurDate(); doctorList = hisRegisterDao.queryHisTimeRegDoctorList(deptId, branchId, curDate, DateHelper.getMoveDate(curDate, 7)); } else { @@ -264,7 +264,7 @@ public class AIGuidanceService { map.put("doctCode", doctor.getDoctCode()); map.put("subDeptCode", ""); map.put("hospitalArea", ""); - if (AIGuidanceConfig.IS_SPLIT_TIME_REG) { + if (HCAIGuidanceConfig.IS_SPLIT_TIME_REG) { item.setDoctorUrl(webReqURL + "reg-reserve.html#/reg-doct-source" + URLHelper.mapParamsToUrl(map, true)); } else { item.setDoctorUrl(webReqURL + "reg-reserve.html#/reg-doctor" + URLHelper.mapParamsToUrl(map, true)); @@ -287,10 +287,10 @@ public class AIGuidanceService { public Result getPatientCardList(String patientId, String hosId, String branchId) { List cardList = new ArrayList<>(); Map resp = new HashMap<>(); - resp.put("hospitalId", AIGuidanceConfig.HOS_ID); + resp.put("hospitalId", HCAIGuidanceConfig.HOSP_ID); resp.put("cardList", cardList); - if (!hosId.equals(AIGuidanceConfig.HOS_ID)) { // 医院id校验 + if (!hosId.equals(HCAIGuidanceConfig.HOSP_ID)) { // 医院id校验 log.warn("[智能导诊]查询就诊人列表-hosId不匹配"); return Result.success(ResultEnum.AI_SUCCESS, resp); } @@ -345,7 +345,7 @@ public class AIGuidanceService { continue; } - if (AIGuidanceConfig.IS_SPLIT_TIME_REG) { // 分时段 + if (HCAIGuidanceConfig.IS_SPLIT_TIME_REG) { // 分时段 String curDate = DateHelper.getCurDate(); hisDoctorList = hisRegisterDao.queryHisTimeRegDoctorList(departmentId, branchId, curDate, DateHelper.getMoveDate(curDate, 7)); } else { @@ -371,7 +371,7 @@ public class AIGuidanceService { item = new AIDoctorSchedule(); item.setDocId(doctor.getDoctCode()); item.setName(doctor.getDoctName()); - item.setHosId(AIGuidanceConfig.HOS_ID); + item.setHosId(HCAIGuidanceConfig.HOSP_ID); item.setDepartmentId(doctor.getDeptCode()); item.setDoctorLevel(""); item.setDescription(ObjectUtils.isEmpty(doctor.getDescription()) ? "暂无介绍" : doctor.getDescription()); diff --git a/src/main/java/com/ynxbd/common/service/MedicalService.java b/src/main/java/com/ynxbd/common/service/MedicalService.java index 56f9870..9bcb661 100644 --- a/src/main/java/com/ynxbd/common/service/MedicalService.java +++ b/src/main/java/com/ynxbd/common/service/MedicalService.java @@ -106,7 +106,7 @@ public class MedicalService { */ public MedicalInfo hisRxUploadDetails(MerchantEnum merchantEnum, String qrCode, String openid, String patientId, String cardNo, String realName, String treatNum, String recipeJson, BigDecimal totalFee, String ybAttrib, String ybBZCode, String ybBZName) throws ServiceException { String payAuthNo; - if (merchantEnum == MerchantEnum.ALI_MEDICAL) { + if (merchantEnum == MerchantEnum.ALI_MEDICAL) { // 支付宝 payAuthNo = qrCode; } else { MedicalUserInfo userInfo = WxMedHelper.getUserInfo(openid, qrCode, cardNo, realName); @@ -819,4 +819,8 @@ public class MedicalService { map.put("hifpFee", order.getHifpFee()); return map; } + + public MedicalInfo test() throws ServiceException { + throw new ServiceException("[医保授权]失败:" + "测试", false); + } } diff --git a/src/main/java/com/ynxbd/wx/config/AIGuidanceConfig.java b/src/main/java/com/ynxbd/wx/config/AIGuidanceConfig.java deleted file mode 100644 index 80affce..0000000 --- a/src/main/java/com/ynxbd/wx/config/AIGuidanceConfig.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.ynxbd.wx.config; - -import com.ynxbd.common.helper.ProperHelper; -import com.ynxbd.common.helper.common.HMACHelper; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.ObjectUtils; - -import javax.servlet.http.HttpServletRequest; -import java.util.Date; - -/** - * 智能导诊配置 - */ -@Slf4j -public class AIGuidanceConfig { - private AIGuidanceConfig() { - } - - public final static boolean IS_ENABLE; - // 是否为测试环境 - public final static boolean IS_DEV; - // 是否为调试 - public final static boolean IS_DEBUG; - // 是否为分时段挂号 - public final static boolean IS_SPLIT_TIME_REG; - //配置文件读取项 - public final static String HOS_ID; - // 密钥 - public final static String KEY; - public final static String PARTNER_ID; - public final static String HOS_NAME; - public final static String HOS_ADDRESS; - public final static String HOS_INTRO; - public final static String HOS_LEVEL; - public final static String HOS_TELEPHONE; - - static { - ProperHelper config = new ProperHelper().read("ai-guidance.properties"); - IS_ENABLE = config.getBoolean("ai.is_enable", false); - config.setIsEnable(IS_ENABLE); - - IS_DEV = config.getBoolean("ai.is_dev", false); - IS_DEBUG = config.getBoolean("ai.is_debug", false); - IS_SPLIT_TIME_REG = config.getBoolean("ai.is_split_time_reg", true); - - KEY = IS_DEV ? config.getString("ai.dev_key") : config.getString("ai.key"); - - PARTNER_ID = config.getString("ai.partner_id"); - HOS_ID = config.getString("ai.hos_id"); - HOS_NAME = config.getString("ai.hos_name"); - HOS_ADDRESS = config.getString("ai.hos_address", ""); - HOS_INTRO = config.getString("ai.hos_intro", ""); - HOS_LEVEL = config.getString("ai.hos_level", ""); - HOS_TELEPHONE = config.getString("ai.hos_telephone", ""); - - if (PARTNER_ID == null) { - log.error("[智能导诊]读取配置文件失败|功能未开启"); - } - } - - /** - * 验签 - * - * @param request 请求 - * @return 是否通过 - */ - public static boolean isVerifySign(HttpServletRequest request) { - if (!IS_ENABLE) { - return false; - } - String signature = request.getHeader("god-portal-signature"); // 签名 - if (ObjectUtils.isEmpty(signature)) { - return false; - } - String timestamp = request.getHeader("god-portal-timestamp"); // 时间戳 - - log.info("[智能导诊]验签 timestamp={}, signature={}", timestamp, signature); - String str = PARTNER_ID + timestamp; - String cacheSign = HMACHelper.sha256(str, KEY); - return signature.equals(cacheSign); - } - -} diff --git a/src/main/resources/hc-config.xml b/src/main/resources/hc-config.xml new file mode 100644 index 0000000..21ce832 --- /dev/null +++ b/src/main/resources/hc-config.xml @@ -0,0 +1,34 @@ + + + + + true + 20009250 + 3bee9edc0a2f41ac911b9b714c854cad + + + + + + true + + true + + true + + true + + 100000317 + + 795b207e12572839976d9310bdde32be + + 2a49b1566c3c2e42a1ff9e483abb57da + + 20002953 + 德宏州中医医院 + + + + + + \ No newline at end of file