新增XML配置文件读取

合并电子健康卡相关配置,新增报告解读接口
异常打印调整
debug
王绍全 1 week ago
parent 679067d51e
commit 3eeae9cdd9
  1. 47
      src/main/java/com/ynxbd/common/TestA.java
  2. 186
      src/main/java/com/ynxbd/common/action/healthcard/AIGuidanceAction.java
  3. 60
      src/main/java/com/ynxbd/common/action/healthcard/HCReportAction.java
  4. 2
      src/main/java/com/ynxbd/common/config/EhCacheConfig.java
  5. 81
      src/main/java/com/ynxbd/common/config/healthcard/HCAIGuidanceConfig.java
  6. 28
      src/main/java/com/ynxbd/common/config/healthcard/HCReportConfig.java
  7. 27
      src/main/java/com/ynxbd/common/config/healthcard/HCSignHelper.java
  8. 148
      src/main/java/com/ynxbd/common/helper/common/XmlConfigHelper.java
  9. 6
      src/main/java/com/ynxbd/common/result/Result.java
  10. 34
      src/main/java/com/ynxbd/common/service/AIGuidanceService.java
  11. 6
      src/main/java/com/ynxbd/common/service/MedicalService.java
  12. 83
      src/main/java/com/ynxbd/wx/config/AIGuidanceConfig.java
  13. 34
      src/main/resources/hc-config.xml

@ -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 = "<Response>\n" +
// "\t<TransactionCode>1002</TransactionCode>\n" +

@ -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<Map<String, String>> resultList = new ArrayList<>();
Map<String, String> 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<Map<String, String>> resultList = new ArrayList<>();
Map<String, String> 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");
}
}

@ -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<String, Object> reqHead = new HashMap<>();
reqHead.put("requestId", requestId);
// Map<String, Object> textReportInfo = new HashMap<>();
// Map<String, Object> patientInfo = new HashMap<>();
// Map<String, Object> 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();
}
}

@ -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;

@ -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);
}
}

@ -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);
}
}

@ -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;
}
}

@ -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"));
// }
}

@ -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;

@ -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<Map<String, Object>> resultList = new ArrayList<>();
if (!hosId.equals(AIGuidanceConfig.HOS_ID)) {
if (!hosId.equals(HCAIGuidanceConfig.HOSP_ID)) {
return Result.success(ResultEnum.AI_SUCCESS, resultList);
}
Map<String, Object> 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<AIDept> 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<Dept> 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<Doctor> 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<AIPatient> cardList = new ArrayList<>();
Map<String, Object> 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());

@ -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);
}
}

@ -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);
}
}

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<config>
<!-- 报告解读 -->
<report>
<is_dev>true</is_dev>
<partner_id>20009250</partner_id>
<token>3bee9edc0a2f41ac911b9b714c854cad</token>
</report>
<!-- 智能导诊 -->
<ai_guidance>
<!-- 是否开启 -->
<is_enable>true</is_enable>
<!-- 是否开启调试 -->
<is_debug>true</is_debug>
<!-- 是否为测试环境 -->
<is_dev>true</is_dev>
<!-- 是否为分时段挂号(默认true) -->
<is_split_time_reg>true</is_split_time_reg>
<!-- 合作方ID -->
<partner_id>100000317</partner_id>
<!-- 密钥token -->
<token>795b207e12572839976d9310bdde32be</token>
<!-- 测试密钥token -->
<dev_token>2a49b1566c3c2e42a1ff9e483abb57da</dev_token>
<hosp_id name="医院ID">20002953</hosp_id>
<hosp_name name="医院名称">德宏州中医医院</hosp_name>
<hosp_intro name="医院介绍"></hosp_intro>
<hosp_level name="医院等级"></hosp_level>
<hosp_address name="医院地址"></hosp_address>
<hosp_tel name="联系方式"></hosp_tel>
</ai_guidance>
</config>
Loading…
Cancel
Save