1、部分配置文件合并

2、新增智能导诊接口,兼容旧版本接口
3、新增生育门诊医保支付类型。
debug
王绍全 3 months ago
parent 0cf61df369
commit 6db6d0c4c7
  1. 12
      src/main/java/com/ynxbd/common/TestA.java
  2. 3
      src/main/java/com/ynxbd/common/action/SmsAction.java
  3. 2
      src/main/java/com/ynxbd/common/action/XBDAction.java
  4. 32
      src/main/java/com/ynxbd/common/action/base/BaseAction.java
  5. 42
      src/main/java/com/ynxbd/common/action/healthcard/AIGuidanceAction.java
  6. 2
      src/main/java/com/ynxbd/common/action/pay/PayAction.java
  7. 2
      src/main/java/com/ynxbd/common/action/pay/ThirdPartyPayAction.java
  8. 6
      src/main/java/com/ynxbd/common/action/test/TestAction.java
  9. 2
      src/main/java/com/ynxbd/common/bean/Doctor.java
  10. 4
      src/main/java/com/ynxbd/common/bean/ai/AIDoctorSchedule.java
  11. 48
      src/main/java/com/ynxbd/common/bean/healthcard/HCHospitalHome.java
  12. 5
      src/main/java/com/ynxbd/common/bean/pay/Order.java
  13. 2
      src/main/java/com/ynxbd/common/bean/wx_msg/WaitReg.java
  14. 20
      src/main/java/com/ynxbd/common/config/healthcard/HCAIGuidanceConfig.java
  15. 49
      src/main/java/com/ynxbd/common/config/healthcard/HCPWEConfig.java
  16. 6
      src/main/java/com/ynxbd/common/config/healthcard/HCReportConfig.java
  17. 2
      src/main/java/com/ynxbd/common/config/healthcard/HCSignHelper.java
  18. 3
      src/main/java/com/ynxbd/common/dao/RecipeDao.java
  19. 2
      src/main/java/com/ynxbd/common/dao/RegisterDao.java
  20. 8
      src/main/java/com/ynxbd/common/dao/his/HisMedDao.java
  21. 9
      src/main/java/com/ynxbd/common/helper/common/SmsHelper.java
  22. 14
      src/main/java/com/ynxbd/common/helper/lis/RMLisHelper.java
  23. 9
      src/main/java/com/ynxbd/common/helper/pacs/RISPacsHelper.java
  24. 23
      src/main/java/com/ynxbd/common/helper/xbd/XBDHelper.java
  25. 4
      src/main/java/com/ynxbd/common/helper/xbd/XBDHttpHelper.java
  26. 23
      src/main/java/com/ynxbd/common/result/Result.java
  27. 174
      src/main/java/com/ynxbd/common/service/AIGuidanceService.java
  28. 14
      src/main/java/com/ynxbd/common/service/PEISService.java
  29. 2
      src/main/java/com/ynxbd/common/service/RegService.java
  30. 45
      src/main/java/com/ynxbd/wx/config/TZReserveConfig.java
  31. 2
      src/main/java/com/ynxbd/wx/pwe/PWEConfig.java
  32. 51
      src/main/resources/hc-config.xml
  33. 4
      src/main/resources/idcard.properties
  34. 1
      src/main/resources/lis.properties
  35. 7
      src/main/resources/pacs.properties
  36. 17
      src/main/resources/sms-config.xml
  37. 4
      src/main/resources/sms.properties
  38. 5
      src/main/resources/tz-reserve.properties
  39. 39
      src/main/resources/xbd-config.xml
  40. 24
      src/main/resources/xbd.properties

@ -1,5 +1,7 @@
package com.ynxbd.common; package com.ynxbd.common;
import com.ynxbd.wx.wxfactory.AesWxHelper;
public class TestA { public class TestA {
// public static void main(String[] args) { // public static void main(String[] args) {
@ -32,11 +34,11 @@ public class TestA {
// } // }
// public static void main(String[] args) { public static void main(String[] args) {
// System.out.println(AesWxHelper.encode("oqsq-vyMNxdWrlZFkbigCre0PM8s")); System.out.println(AesWxHelper.encode("624091"));
// System.out.println(AesWxHelper.encode("wxe53f0f528bb16d9f"));
//
// System.out.println(AesWxHelper.decode("A25BF2DD5820B151B8AB2E333E05565E")); // System.out.println(AesWxHelper.decode("A25BF2DD5820B151B8AB2E333E05565E"));
// } }
} }

@ -5,7 +5,7 @@ import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.enums.HospEnum; import com.ynxbd.common.bean.enums.HospEnum;
import com.ynxbd.common.bean.sms.SmsTempEnum; import com.ynxbd.common.bean.sms.SmsTempEnum;
import com.ynxbd.common.bean.sms.SmsTemplate; import com.ynxbd.common.bean.sms.SmsTemplate;
import com.ynxbd.common.bean.wxMessage.WaitReg; import com.ynxbd.common.bean.wx_msg.WaitReg;
import com.ynxbd.common.dao.RegisterDao; import com.ynxbd.common.dao.RegisterDao;
import com.ynxbd.common.helper.common.CodeHelper; import com.ynxbd.common.helper.common.CodeHelper;
import com.ynxbd.common.helper.common.SmsHelper; import com.ynxbd.common.helper.common.SmsHelper;
@ -21,7 +21,6 @@ import org.apache.struts2.convention.annotation.Namespace;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
* @Author wsq * @Author wsq

@ -280,7 +280,7 @@ public class XBDAction extends BaseAction {
} }
/** /**
* 生成token // 德宏体检看pacs报告 * 查询体检报告
*/ */
@Action("getPeisByCardNo") @Action("getPeisByCardNo")
public Result getPeisByCardNo(@AesDecode String cardNo, String begDate, String endDate) { public Result getPeisByCardNo(@AesDecode String cardNo, String begDate, String endDate) {

@ -17,6 +17,8 @@ import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import java.io.*; import java.io.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
/** /**
@ -167,9 +169,8 @@ public class BaseAction implements Serializable, ServletRequestAware {
* @param request 请求体 * @param request 请求体
*/ */
public static JSONObject readBody(HttpServletRequest request) { public static JSONObject readBody(HttpServletRequest request) {
BufferedReader br = null; try (BufferedReader br = request.getReader()) {
try { try {
br = request.getReader();
String line; String line;
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) { while ((line = br.readLine()) != null) {
@ -178,15 +179,10 @@ public class BaseAction implements Serializable, ServletRequestAware {
return JsonHelper.parseObject(sb.toString()); return JsonHelper.parseObject(sb.toString());
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage()); log.error(e.getMessage());
} finally {
try {
if (br != null) {
br.close();
} }
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage()); log.error(e.getMessage());
} }
}
return null; return null;
} }
@ -200,4 +196,26 @@ public class BaseAction implements Serializable, ServletRequestAware {
// 未经过代理,直接检查原生请求 // 未经过代理,直接检查原生请求
return request.isSecure(); return request.isSecure();
} }
/**
* 获取所有【URL参数 + form表单参数】
*/
protected Map<String, String> reqParamsToMap() {
Map<String, String> params = new HashMap<>();
Map<String, String[]> requestParameterMap = request.getParameterMap();
for (Map.Entry<String, String[]> entry : requestParameterMap.entrySet()) {
String[] values = entry.getValue();
params.put(entry.getKey(), values.length > 0 ? values[0] : "");
}
return params;
}
/**
* 获取所有【URL参数 + form表单参数】转为JSON
*/
protected <T> T reqParamsToBean(Class<T> clazz) {
Map<String, String> params = reqParamsToMap();
return JsonHelper.parseObject(JsonHelper.toJsonString(params), clazz);
}
} }

@ -1,5 +1,6 @@
package com.ynxbd.common.action.healthcard; package com.ynxbd.common.action.healthcard;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.config.healthcard.HCAIGuidanceConfig; import com.ynxbd.common.config.healthcard.HCAIGuidanceConfig;
import com.ynxbd.common.result.Result; import com.ynxbd.common.result.Result;
@ -79,6 +80,47 @@ public class AIGuidanceAction extends BaseAction {
} }
/**
* 4.1.5 查询就诊人列表(必选)
*/
@Action("getPatientCardList")
public Result getPatientCardList(String hosId, String branchId, String deptId) {
if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) {
return Result.error(ResultEnum.SIGN_ERROR); // 签名异常
}
return new AIGuidanceService().getPatientCardList(hosId, branchId, deptId);
}
/**
* 4.1.9 获取医生号源排班信息(必选)
*/
@Action("getDoctorSchedule")
public Result getDoctorSchedule() {
JSONObject body = getBody();
String hosId = body.getString("hosId");
String branchId = body.getString("branchId");
String doctors = body.getString("doctors");
log.info("[获取医生号源排班信息]hosId={}, branchId={}, doctors={}", hosId, branchId, doctors);
if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) {
return Result.error(ResultEnum.SIGN_ERROR); // 签名异常
}
return new AIGuidanceService().getDoctorSchedule(hosId, branchId, doctors);
}
/**
* 4.2.1.1 查询医院的首页服务列表(必选)
*/
@Action("getHospitalHomeService")
public Result getHospitalHomeService(String hosId) {
log.info("[查询医院的首页服务列表]hosId={}", hosId);
if (!HCAIGuidanceConfig.IS_DEBUG && !HCAIGuidanceConfig.isVerifySign(request)) {
return Result.error(ResultEnum.SIGN_ERROR); // 签名异常
}
return new AIGuidanceService().getHospitalHomeService(hosId);
}
/** /**
* 跳转重定向 * 跳转重定向
*/ */

@ -887,7 +887,7 @@ public class PayAction extends BaseAction {
return Result.error(ResultEnum.PAY_TYPE_ERROR); return Result.error(ResultEnum.PAY_TYPE_ERROR);
} }
if (ObjectUtils.isEmpty(XBDHelper.XBD_PEIS)) { if (ObjectUtils.isEmpty(XBDHelper.PEIS_URL)) {
return Result.error(ResultEnum.SYSTEM_CONFIG_ERROR); return Result.error(ResultEnum.SYSTEM_CONFIG_ERROR);
} }

@ -69,6 +69,7 @@ public class ThirdPartyPayAction extends BaseAction {
reg.setRegType(DateHelper.isToday(date) ? "2" : "1"); reg.setRegType(DateHelper.isToday(date) ? "2" : "1");
reg.setSourceId(sourceId); reg.setSourceId(sourceId);
reg.setPatientId(patientId); reg.setPatientId(patientId);
reg.setHisPatientId(patientId);
reg.setTotalFee(money); reg.setTotalFee(money);
reg.setPayMoney(money); reg.setPayMoney(money);
@ -87,7 +88,6 @@ public class ThirdPartyPayAction extends BaseAction {
return Result.error(ResultEnum.SPECIFIED_QUESTIONED_USER_NOT_EXIST); return Result.error(ResultEnum.SPECIFIED_QUESTIONED_USER_NOT_EXIST);
} }
String ip = request.getRemoteAddr(); String ip = request.getRemoteAddr();
String body = "扫码挂号" + date + " 患者:" + patientId; String body = "扫码挂号" + date + " 患者:" + patientId;

@ -1,6 +1,7 @@
package com.ynxbd.common.action.test; package com.ynxbd.common.action.test;
import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.pay.Register;
import com.ynxbd.common.bean.sms.SmsTempEnum; import com.ynxbd.common.bean.sms.SmsTempEnum;
import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.helper.common.DateHelper;
import com.ynxbd.common.helper.common.SmsHelper; import com.ynxbd.common.helper.common.SmsHelper;
@ -13,6 +14,7 @@ import com.ynxbd.wx.wxfactory.WxPayHelper;
import com.ynxbd.wx.wxfactory.medical.WxMedConfig; import com.ynxbd.wx.wxfactory.medical.WxMedConfig;
import com.ynxbd.wx.wxfactory.medical.models.WxMedOrder; import com.ynxbd.wx.wxfactory.medical.models.WxMedOrder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.Namespace;
@ -52,6 +54,8 @@ public class TestAction extends BaseAction {
} }
// @Action("a") // @Action("a")
// public String a() { // public String a() {
// String sql = "select * from a limit 0, 100"; // String sql = "select * from a limit 0, 100";
@ -125,7 +129,7 @@ public class TestAction extends BaseAction {
String url = WeChatConfig.getHttpsBaseURL() + "ali_qrcode" + "?p=123"; String url = WeChatConfig.getHttpsBaseURL() + "ali_qrcode" + "?p=123";
System.out.println(url); System.out.println(url);
System.out.println(); System.out.println();
return Result.redirect( "/wx/test02/log_test"); return Result.redirect("/wx/test02/log_test");
} }
// @Action("lock") // @Action("lock")

@ -33,7 +33,7 @@ public class Doctor implements Serializable {
private String title; private String title;
// 医师职称 // 医师职称
private String customTitle; private String customTitle;
// 简介 // 擅长
private String skill; private String skill;
// 电话 // 电话
private String tel; private String tel;

@ -6,6 +6,7 @@ import lombok.Setter;
import lombok.ToString; import lombok.ToString;
import java.util.List; import java.util.List;
import java.util.Map;
@Setter @Setter
@Getter @Getter
@ -43,4 +44,7 @@ public class AIDoctorSchedule {
private String url; private String url;
private List<AISchedule> schedule; private List<AISchedule> schedule;
// 科室下的医生集
private Map<String, String> doctorIds;
} }

@ -0,0 +1,48 @@
package com.ynxbd.common.bean.healthcard;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class HCHospitalHome {
/**
* 场景 eg: 门诊、体检、通用、住院
*/
private String scene;
/**
* 服务名称:建议6字以内,超出第6字后省略号展示 eg:预约挂号、在线缴费
*/
private String serviceName;
/**
* 服务描述 非必填 建议15字以内,超出省略号展示
*/
private String remark;
/**
* H5地址 跳转H5、小程序二选一
*/
private String h5Url;
/**
* 小程序appId
*/
private String wxAppId;
/**
* 小程序跳转路径
*/
private String wxAppPath;
/**
* 小程序原始id
*/
private String wxAppOriginalId;
}

@ -37,10 +37,13 @@ public class Order implements Serializable {
private String payOpenId; private String payOpenId;
// 支付商户编码 // 支付商户编码
private String payMchCode; private String payMchCode;
// 患者id // 患者id | 医共体id
private String patientId; private String patientId;
// 加密的patientId // 加密的patientId
private String enPatientId; private String enPatientId;
// his患者ID
private String hisPatientId;
private String enHisPatientId;
// 患者姓名 // 患者姓名
private String patientName; private String patientName;
// 证件号码 // 证件号码

@ -1,4 +1,4 @@
package com.ynxbd.common.bean.wxMessage; package com.ynxbd.common.bean.wx_msg;
import lombok.Getter; import lombok.Getter;

@ -7,6 +7,8 @@ import org.apache.commons.lang3.ObjectUtils;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
// 智能导诊
@Slf4j @Slf4j
public class HCAIGuidanceConfig { public class HCAIGuidanceConfig {
public final static boolean IS_ENABLE; public final static boolean IS_ENABLE;
@ -16,13 +18,21 @@ public class HCAIGuidanceConfig {
public final static boolean IS_DEBUG; public final static boolean IS_DEBUG;
// 是否为分时段挂号 // 是否为分时段挂号
public final static boolean IS_SPLIT_TIME_REG; public final static boolean IS_SPLIT_TIME_REG;
//配置文件读取项 // 配置文件读取项
public final static String HOSP_ID; public final static String HOSP_ID;
// 密钥token
public final static String TOKEN;
/**
* AI版:电子健康卡AppId(管理>开发商接入)
* 旧版:合作方ID(腾讯提供)
*/
public final static String PARTNER_ID; public final static String PARTNER_ID;
/**
* AI版:电子健康卡AppSecret(管理>开发商接入)
* 旧版:Token(腾讯提供)
*/
public final static String PARTNER_KEY;
public final static String HOSP_NAME; public final static String HOSP_NAME;
public final static String HOSP_ADDRESS; public final static String HOSP_ADDRESS;
@ -42,7 +52,7 @@ public class HCAIGuidanceConfig {
IS_DEBUG = config.getBoolean("is_debug", false); IS_DEBUG = config.getBoolean("is_debug", false);
IS_SPLIT_TIME_REG = config.getBoolean("is_split_time_reg", true); IS_SPLIT_TIME_REG = config.getBoolean("is_split_time_reg", true);
TOKEN = IS_DEV ? config.getString("dev_token") : config.getString("token"); PARTNER_KEY = config.getString(IS_DEV ? "dev_partner_key" : "partner_key");
PARTNER_ID = config.getString("partner_id"); PARTNER_ID = config.getString("partner_id");
HOSP_ID = config.getString("hosp_id"); HOSP_ID = config.getString("hosp_id");
@ -75,7 +85,7 @@ public class HCAIGuidanceConfig {
log.info("[智能导诊]验签 timestamp={}, signature={}", timestamp, signature); log.info("[智能导诊]验签 timestamp={}, signature={}", timestamp, signature);
String str = PARTNER_ID + timestamp; String str = PARTNER_ID + timestamp;
String cacheSign = HMACHelper.sha256(str, TOKEN); String cacheSign = HMACHelper.sha256(str, PARTNER_KEY);
return signature.equals(cacheSign); return signature.equals(cacheSign);
} }
} }

@ -0,0 +1,49 @@
package com.ynxbd.common.config.healthcard;
import com.ynxbd.common.helper.common.XmlConfigHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import java.util.Arrays;
import java.util.List;
// 预问诊
@Slf4j
public class HCPWEConfig {
public static final String PARTNER_ID;
public static final String PARTNER_SECRET; // 合作方密钥
public static final String HOSPITAL_ID; // 医院ID
public static final String SECRET_KEY; // 私钥
public static final String DEV_OPEN_IDS; // 用于测试的openid
public static final boolean IS_DEV;
public static final boolean IS_ENABLE;
static {
XmlConfigHelper config = new XmlConfigHelper().read("hc-config.xml", "pwe");
IS_ENABLE = config.getBoolean("is_enable", false);
config.setIsEnable(IS_ENABLE);
IS_DEV = config.getBoolean("is_dev", false);
HOSPITAL_ID = config.getString("hospital_id");
PARTNER_ID = config.getString("partner_id");
PARTNER_SECRET = config.getString(IS_DEV ? "dev_partner_secret" : "partner_secret");
SECRET_KEY = config.getString(IS_DEV ? "dev_secret_key" : "secret_key");
DEV_OPEN_IDS = config.getString("dev_open_ids");
if (PARTNER_ID == null || PARTNER_SECRET == null) {
log.error("[预问诊]读取配置文件pwe.properties失败");
}
}
public static boolean hasDevOpenId(String openid) {
if (ObjectUtils.isEmpty(openid)) {
return false;
}
String openIds = DEV_OPEN_IDS == null ? "" : DEV_OPEN_IDS;
List<String> openIdList = Arrays.asList(openIds.split(","));
return openIdList.contains(openid);
}
}

@ -3,6 +3,8 @@ package com.ynxbd.common.config.healthcard;
import com.ynxbd.common.helper.common.XmlConfigHelper; import com.ynxbd.common.helper.common.XmlConfigHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
// 报告解读
@Slf4j @Slf4j
public class HCReportConfig { public class HCReportConfig {
@ -16,8 +18,8 @@ public class HCReportConfig {
XmlConfigHelper config = new XmlConfigHelper().read("hc-config.xml", "report"); XmlConfigHelper config = new XmlConfigHelper().read("hc-config.xml", "report");
IS_DEV = config.getBoolean("is_dev", false); IS_DEV = config.getBoolean("is_dev", false);
TOKEN = config.getString("token"); TOKEN = config.getString(IS_DEV ? "dev_token" : "token");
PARTNER_ID = config.getString("partner_id"); PARTNER_ID = config.getString(IS_DEV ? "dev_partner_id" : "partner_id");
} }
// 生成签名 // 生成签名

@ -7,6 +7,8 @@ import lombok.extern.slf4j.Slf4j;
import java.util.UUID; import java.util.UUID;
// 签名生成
@Slf4j @Slf4j
@Getter @Getter
public class HCSignHelper { public class HCSignHelper {

@ -73,7 +73,7 @@ public class RecipeDao {
* @return 是否存储成功 * @return 是否存储成功
*/ */
public boolean insertMedical(Recipe recipe) { public boolean insertMedical(Recipe recipe) {
String sql = "insert into pay(updateTime, hisStatus, payStatus, openId, patientId, payWay, payMoney, totalFee, outTradeNo, bankTransNo, tradeNo, recipeId, treatNum, authCode, invoiceTransNo, hisTransNo, operateUser, deptCode, deptName, reqDeptCode, reqDeptName, hospitalArea, PayOrdId, AcctFee, HifpFee, ChrgBchno, MdTrtId, MdUserId, RecipeJson, PayMchCode, PayOpenId) values (now(),?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?)"; String sql = "insert into pay(updateTime, hisStatus, payStatus, openId, patientId, payWay, payMoney, totalFee, outTradeNo, bankTransNo, tradeNo, recipeId, treatNum, authCode, invoiceTransNo, hisTransNo, operateUser, deptCode, deptName, reqDeptCode, reqDeptName, hospitalArea, PayOrdId, AcctFee, HifpFee, ChrgBchno, MdTrtId, MdUserId, RecipeJson, PayMchCode, PayOpenId, HisPatientId) values (now(),?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?)";
return DataBase.insert(sql, ps -> { return DataBase.insert(sql, ps -> {
ps.setInt(1, recipe.getHisStatus()); ps.setInt(1, recipe.getHisStatus());
ps.setInt(2, recipe.getPayStatus()); ps.setInt(2, recipe.getPayStatus());
@ -109,6 +109,7 @@ public class RecipeDao {
ps.setString(28, recipe.getRecipeJson()); ps.setString(28, recipe.getRecipeJson());
ps.setString(29, recipe.getPayMchCode()); ps.setString(29, recipe.getPayMchCode());
ps.setString(30, recipe.getPayOpenId()); ps.setString(30, recipe.getPayOpenId());
ps.setString(31, recipe.getHisPatientId());
}) > 0; }) > 0;
} }

@ -4,7 +4,7 @@ import com.ynxbd.common.bean.Dept;
import com.ynxbd.common.bean.Doctor; import com.ynxbd.common.bean.Doctor;
import com.ynxbd.common.bean.pay.Order; import com.ynxbd.common.bean.pay.Order;
import com.ynxbd.common.bean.pay.Register; import com.ynxbd.common.bean.pay.Register;
import com.ynxbd.common.bean.wxMessage.WaitReg; import com.ynxbd.common.bean.wx_msg.WaitReg;
import com.ynxbd.common.config.db.DataBase; import com.ynxbd.common.config.db.DataBase;
import com.ynxbd.common.dao.his.HisRegisterDao; import com.ynxbd.common.dao.his.HisRegisterDao;
import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.helper.common.DateHelper;

@ -58,9 +58,15 @@ public class HisMedDao {
// 医保----------------------------------- // 医保-----------------------------------
params.put("PayAuthNo", payAuthNo); params.put("PayAuthNo", payAuthNo);
params.put("PersonID", cardNo); params.put("PersonID", cardNo);
if (ObjectUtils.isNotEmpty(ybAttrib) && ObjectUtils.isNotEmpty(ybBZCode) && ObjectUtils.isNotEmpty(ybBZName)) { if (ObjectUtils.isNotEmpty(ybAttrib)) {
params.put("YBAttrib", ybAttrib); params.put("YBAttrib", ybAttrib);
}
if (ObjectUtils.isNotEmpty(ybBZCode)) {
params.put("YBBZCode", ybBZCode); params.put("YBBZCode", ybBZCode);
}
if (ObjectUtils.isNotEmpty(ybBZName)) {
params.put("YBBZName", ybBZName); params.put("YBBZName", ybBZName);
} }
return HisMedHelper.getJsonResult(merchantEnum, HisEnum.AP_Pay_Invoice, params); return HisMedHelper.getJsonResult(merchantEnum, HisEnum.AP_Pay_Invoice, params);

@ -43,11 +43,10 @@ public class SmsHelper {
public static Cache<String, SmsTemplate> CACHE; public static Cache<String, SmsTemplate> CACHE;
static { static {
ProperHelper config = new ProperHelper().read("sms.properties"); XmlConfigHelper config = new XmlConfigHelper().read("sms-config.xml", "ali_sms");
ACCESS_KEY_ID = config.getString("sms.access_key_id"); ACCESS_KEY_ID = config.getString("access_key_id");
ACCESS_KEY_SECRET = config.getString("sms.access_key_secret"); ACCESS_KEY_SECRET = config.getString("access_key_secret");
SIGN_NAME = config.getString("sms.sign_name"); SIGN_NAME = config.getString("sign_name");
createCache(); createCache();
} }

@ -1,9 +1,9 @@
package com.ynxbd.common.helper.lis; package com.ynxbd.common.helper.lis;
import com.ynxbd.common.helper.ProperHelper;
import com.ynxbd.common.helper.common.ErrorHelper; import com.ynxbd.common.helper.common.ErrorHelper;
import com.ynxbd.common.helper.common.SnowHelper; import com.ynxbd.common.helper.common.SnowHelper;
import com.ynxbd.common.helper.common.SoapHelper; import com.ynxbd.common.helper.common.SoapHelper;
import com.ynxbd.common.helper.common.XmlConfigHelper;
import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.JsonResultEnum; import com.ynxbd.common.result.JsonResultEnum;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -16,6 +16,9 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
// 瑞美LIS
@Slf4j @Slf4j
public class RMLisHelper { public class RMLisHelper {
@ -24,10 +27,11 @@ public class RMLisHelper {
final private static Boolean IS_LOG_RESP; final private static Boolean IS_LOG_RESP;
static { static {
ProperHelper config = new ProperHelper().read("lis.properties"); XmlConfigHelper config = new XmlConfigHelper().read("xbd-config.xml", "rm_lis");
String url = config.getString("lis.url");
Boolean is_unified_entrance = config.getBoolean("lis.is_unified_entrance", false); String url = config.getString("url");
IS_LOG_RESP = config.getBoolean("lis.is_log_resp", false); IS_LOG_RESP = config.getBoolean("is_log_resp", false);
Boolean is_unified_entrance = config.getBoolean("is_unified_entrance", false);
if (url == null) { if (url == null) {
LIS_SOAP_URL = null; LIS_SOAP_URL = null;

@ -2,6 +2,7 @@ package com.ynxbd.common.helper.pacs;
import com.ynxbd.common.helper.ProperHelper; import com.ynxbd.common.helper.ProperHelper;
import com.ynxbd.common.helper.common.SmbHelper; import com.ynxbd.common.helper.common.SmbHelper;
import com.ynxbd.common.helper.common.XmlConfigHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
@ -17,9 +18,11 @@ public class RISPacsHelper {
public static SmbHelper smbHelper; public static SmbHelper smbHelper;
static { static {
ProperHelper config = new ProperHelper().read("pacs.properties");
FTP_USER = config.getString("ris.ftpUser"); XmlConfigHelper config = new XmlConfigHelper().read("xbd-config.xml", "ris_pacs");
FTP_PASS = config.getString("ris.ftpPass");
FTP_USER = config.getString("user");
FTP_PASS = config.getString("pass");
if (FTP_USER == null) { if (FTP_USER == null) {
log.error("上海岱嘉PACS配置文件读取失败"); log.error("上海岱嘉PACS配置文件读取失败");
} else { } else {

@ -1,7 +1,7 @@
package com.ynxbd.common.helper.xbd; package com.ynxbd.common.helper.xbd;
import com.ynxbd.common.dao.xbd.OutTeamDao; import com.ynxbd.common.dao.xbd.OutTeamDao;
import com.ynxbd.common.helper.ProperHelper; import com.ynxbd.common.helper.common.XmlConfigHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
@ -12,21 +12,24 @@ import lombok.extern.slf4j.Slf4j;
*/ */
@Slf4j @Slf4j
public class XBDHelper { public class XBDHelper {
private static final String CLOUD_FILM_URL; private static final String PACS_CLOUD_URL;
public static final String MED_RECORD_COPY_URL; public static final String CASEBOOK_URL;
public static final String XBD_PEIS; public static final String PEIS_URL;
public static OutTeamDao outTeamDao; public static OutTeamDao outTeamDao;
static { static {
ProperHelper config = new ProperHelper().read("xbd.properties"); XmlConfigHelper config = new XmlConfigHelper().read("xbd-config.xml", "tz_sms");
PACS_CLOUD_URL = config.getString("pacs_cloud_url");
CASEBOOK_URL = config.getString("casebook_url");
CLOUD_FILM_URL = config.getString("xbd.200.cloud_film_url"); PEIS_URL = config.getString("peis_url");
MED_RECORD_COPY_URL = config.getString("xbd.200.med_record_copy_url"); if (PACS_CLOUD_URL == null) {
XBD_PEIS = config.getString("xbd.100.peis_url");
if (CLOUD_FILM_URL == null) {
log.error("新八达200团队配置文件读取失败"); log.error("新八达200团队配置文件读取失败");
} }
outTeamDao = new OutTeamDao(CLOUD_FILM_URL); outTeamDao = new OutTeamDao(PACS_CLOUD_URL);
} }

@ -78,7 +78,7 @@ public class XBDHttpHelper {
private static String UsePost(String methodName, RequestBody requestBody) { private static String UsePost(String methodName, RequestBody requestBody) {
OkHttpClient httpClient = OkHttpHelper.creatClient(); OkHttpClient httpClient = OkHttpHelper.creatClient();
Headers.Builder headersBuilder = new Headers.Builder(); Headers.Builder headersBuilder = new Headers.Builder();
HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(XBDHelper.MED_RECORD_COPY_URL + "/api/SqlContext/PostMethodByNameEncryption")).newBuilder(); HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(XBDHelper.CASEBOOK_URL + "/api/SqlContext/PostMethodByNameEncryption")).newBuilder();
try (Response response = httpClient.newCall(new Request.Builder().url(urlBuilder.build()).post(requestBody).headers(headersBuilder.build()).build()).execute()) { try (Response response = httpClient.newCall(new Request.Builder().url(urlBuilder.build()).post(requestBody).headers(headersBuilder.build()).build()).execute()) {
JSONObject respJson = respFilter(response, methodName); JSONObject respJson = respFilter(response, methodName);
String code = respJson.getString("Code"); String code = respJson.getString("Code");
@ -171,7 +171,7 @@ public class XBDHttpHelper {
private static String UseGet(String methodName, Object paramDic) { private static String UseGet(String methodName, Object paramDic) {
try { try {
OkHttpClient httpClient = OkHttpHelper.creatClient(); OkHttpClient httpClient = OkHttpHelper.creatClient();
HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(XBDHelper.MED_RECORD_COPY_URL + "/api/SqlContext/ExecMethodByNameEncryption")).newBuilder(); HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(XBDHelper.CASEBOOK_URL + "/api/SqlContext/ExecMethodByNameEncryption")).newBuilder();
// 加密序列化 // 加密序列化
String paramJson = JSONObject.toJSONString(paramDic == null ? "" : paramDic); String paramJson = JSONObject.toJSONString(paramDic == null ? "" : paramDic);
log.info("[病历GET]未加密前get请求入参:[methodName:{}] {}", methodName, paramJson); log.info("[病历GET]未加密前get请求入参:[methodName:{}] {}", methodName, paramJson);

@ -140,13 +140,32 @@ public class Result extends BaseResult {
public static Result error(Exception e) { public static Result error(Exception e) {
Integer status = ResultEnum.SYSTEM_ERROR.status; Integer status = ResultEnum.SYSTEM_ERROR.status;
String message = ResultEnum.SYSTEM_ERROR.message; String message = ResultEnum.SYSTEM_ERROR.message;
if (e == null) {
return new Result(status, message);
}
// 异常代码位置信息
String stackPosition = "";
// 获取栈帧,第一个栈帧就是异常发生位置
StackTraceElement[] stackTrace = e.getStackTrace();
if (stackTrace != null && stackTrace.length > 0) {
StackTraceElement stack = stackTrace[0];
// 类名.方法名(文件名:行号)
stackPosition = String.format("%s.%s(%s:%d)",
stack.getClassName(),
stack.getMethodName(),
stack.getFileName(),
stack.getLineNumber()
);
}
if (e != null && e.getClass() == ServiceException.class) { if (e.getClass() == ServiceException.class) {
ServiceException serviceException = (ServiceException) e; ServiceException serviceException = (ServiceException) e;
if (serviceException.getMessage() != null) { if (serviceException.getMessage() != null) {
message = serviceException.getMessage(); message = serviceException.getMessage();
if (serviceException.isLog()) { if (serviceException.isLog()) {
log.error(e.getMessage()); log.error("[异常][{}]{}", stackPosition, e.getMessage(), e);
} }
} }
if (serviceException.getResultEnum() != null) { if (serviceException.getResultEnum() != null) {

@ -3,10 +3,9 @@ package com.ynxbd.common.service;
import com.ynxbd.common.bean.Dept; import com.ynxbd.common.bean.Dept;
import com.ynxbd.common.bean.Doctor; import com.ynxbd.common.bean.Doctor;
import com.ynxbd.common.bean.Patient; import com.ynxbd.common.bean.Patient;
import com.ynxbd.common.bean.ai.AIDept; import com.ynxbd.common.bean.ai.*;
import com.ynxbd.common.bean.ai.AIDoctor; import com.ynxbd.common.bean.healthcard.HCHospitalHome;
import com.ynxbd.common.bean.ai.AIDoctorSchedule; import com.ynxbd.common.bean.pay.Register;
import com.ynxbd.common.bean.ai.AIPatient;
import com.ynxbd.common.config.healthcard.HCAIGuidanceConfig; import com.ynxbd.common.config.healthcard.HCAIGuidanceConfig;
import com.ynxbd.common.dao.RegisterDao; import com.ynxbd.common.dao.RegisterDao;
import com.ynxbd.common.dao.his.HisRegisterDao; import com.ynxbd.common.dao.his.HisRegisterDao;
@ -41,7 +40,7 @@ public class AIGuidanceService {
} }
List<Map<String, Object>> resultList = new ArrayList<>(); List<Map<String, Object>> resultList = new ArrayList<>();
if (!hosId.equals(HCAIGuidanceConfig.HOSP_ID)) { if (!HCAIGuidanceConfig.HOSP_ID.equals(hosId)) { // 医院id校验
return Result.success(ResultEnum.AI_SUCCESS, resultList); return Result.success(ResultEnum.AI_SUCCESS, resultList);
} }
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
@ -79,7 +78,7 @@ public class AIGuidanceService {
} }
List<AIDept> dataList = new ArrayList<>(); List<AIDept> dataList = new ArrayList<>();
if (!hosId.equals(HCAIGuidanceConfig.HOSP_ID)) { // 医院id校验 if (!HCAIGuidanceConfig.HOSP_ID.equals(hosId)) { // 医院id校验
log.warn("[智能导诊]科室列表查询-hosId不匹配"); log.warn("[智能导诊]科室列表查询-hosId不匹配");
return Result.success(ResultEnum.AI_SUCCESS, dataList); return Result.success(ResultEnum.AI_SUCCESS, dataList);
} }
@ -169,7 +168,7 @@ public class AIGuidanceService {
return Result.error(ResultEnum.PARAM_IS_DEFECT); return Result.error(ResultEnum.PARAM_IS_DEFECT);
} }
if (!hosId.equals(HCAIGuidanceConfig.HOSP_ID)) { // 医院id校验 if (!HCAIGuidanceConfig.HOSP_ID.equals(hosId)) { // 医院id校验
log.warn("[智能导诊]医生列表查询-hosId不匹配"); log.warn("[智能导诊]医生列表查询-hosId不匹配");
return Result.success(ResultEnum.AI_SUCCESS, new ArrayList<>()); return Result.success(ResultEnum.AI_SUCCESS, new ArrayList<>());
} }
@ -290,7 +289,7 @@ public class AIGuidanceService {
resp.put("hospitalId", HCAIGuidanceConfig.HOSP_ID); resp.put("hospitalId", HCAIGuidanceConfig.HOSP_ID);
resp.put("cardList", cardList); resp.put("cardList", cardList);
if (!hosId.equals(HCAIGuidanceConfig.HOSP_ID)) { // 医院id校验 if (!HCAIGuidanceConfig.HOSP_ID.equals(hosId)) { // 医院id校验
log.warn("[智能导诊]查询就诊人列表-hosId不匹配"); log.warn("[智能导诊]查询就诊人列表-hosId不匹配");
return Result.success(ResultEnum.AI_SUCCESS, resp); return Result.success(ResultEnum.AI_SUCCESS, resp);
} }
@ -323,27 +322,57 @@ public class AIGuidanceService {
/** /**
* 4.1.9 获取医生号源排班信息(必选) * 4.1.9 获取医生号源排班信息(必选)
*
*/ */
public Result getDoctorSchedule(String hosId, String branchId, String doctorsJson) { public Result getDoctorSchedule(String hosId, String branchId, String doctorsJson) {
Map<String, Object> map = new HashMap<>();
if (!HCAIGuidanceConfig.HOSP_ID.equals(hosId)) { // 医院id校验
log.warn("[智能导诊]获取医生号源排班信息-hosId不匹配");
return Result.success(ResultEnum.AI_SUCCESS, map);
}
List<AIDoctorSchedule> doctors = new ArrayList<>(); List<AIDoctorSchedule> doctors = new ArrayList<>();
if (ObjectUtils.isEmpty(doctors)) {
return Result.success(ResultEnum.AI_SUCCESS, doctors);
}
List<AIDoctorSchedule> doctorScheduleList = JsonHelper.parseArray(doctorsJson, AIDoctorSchedule.class); List<AIDoctorSchedule> doctorScheduleList = JsonHelper.parseArray(doctorsJson, AIDoctorSchedule.class);
if (doctorScheduleList.isEmpty()) { if (doctorScheduleList.isEmpty()) {
return Result.success(ResultEnum.AI_SUCCESS, doctors); return Result.success(ResultEnum.AI_SUCCESS, doctors);
} }
List<AIDoctorSchedule> deptList = new ArrayList<>();
for (AIDoctorSchedule item : doctorScheduleList) {
String docId = item.getDocId();
String departmentId = item.getDepartmentId();
AIDoctorSchedule findDept = deptList.stream().filter(o -> o.getDepartmentId().equals(departmentId)).findFirst().orElse(null);
if (findDept == null) {
AIDoctorSchedule dept = new AIDoctorSchedule();
dept.setDepartmentId(departmentId);
Map<String, String> doctorIds = new HashMap<>();
doctorIds.put(docId, docId);
dept.setDoctorIds(doctorIds);
deptList.add(dept);
} else {
Map<String, String> doctorIds = findDept.getDoctorIds();
if (doctorIds == null) {
doctorIds = new HashMap<>();
}
if (!doctorIds.containsKey(docId)) {
doctorIds.put(docId, docId);
}
}
}
List<Doctor> regDoctorList = new ArrayList<>(); List<Doctor> regDoctorList = new ArrayList<>();
List<Doctor> hisDoctorList; List<Doctor> hisDoctorList;
HisRegisterDao hisRegisterDao = new HisRegisterDao(); HisRegisterDao hisRegisterDao = new HisRegisterDao();
for (AIDoctorSchedule aiDoctorSchedule : doctorScheduleList) { for (AIDoctorSchedule deptItem : deptList) {
String departmentId = aiDoctorSchedule.getDepartmentId(); String departmentId = deptItem.getDepartmentId();
if (ObjectUtils.isEmpty(departmentId)) { if (ObjectUtils.isEmpty(departmentId)) {
continue; continue;
} }
Map<String, String> doctorIds = deptItem.getDoctorIds();
if (doctorIds == null || doctorIds.isEmpty()) {
continue;
}
if (HCAIGuidanceConfig.IS_SPLIT_TIME_REG) { // 分时段 if (HCAIGuidanceConfig.IS_SPLIT_TIME_REG) { // 分时段
String curDate = DateHelper.getCurDate(); String curDate = DateHelper.getCurDate();
@ -358,23 +387,45 @@ public class AIGuidanceService {
} }
} }
} }
regDoctorList.addAll(hisDoctorList);
for (Map.Entry<String, String> item : doctorIds.entrySet()) {
String docId = item.getKey();
Doctor findRegDoctorItem = regDoctorList.stream().filter(o -> o.getDoctCode().equals(docId)).findFirst().orElse(null);
if (findRegDoctorItem != null) {
continue;
}
Doctor findHisDoctorItem = hisDoctorList.stream().filter(o -> o.getDoctCode().equals(docId)).findFirst().orElse(null);
if (findHisDoctorItem != null) {
regDoctorList.add(findHisDoctorItem);
}
}
} }
regDoctorList = new DoctorService().doctorListFilter(regDoctorList); regDoctorList = new DoctorService().doctorListFilter(regDoctorList);
String domain = WeChatConfig.getDomain(true); String domain = WeChatConfig.getDomain(true);
String webReqURL = WeChatConfig.getWebReqURL(true);
String curDate = DateHelper.getCurDate();
AIDoctorSchedule item; AIDoctorSchedule item;
String headImg; String headImg;
for (Doctor doctor : regDoctorList) { for (Doctor doctor : regDoctorList) {
String deptCode = doctor.getDeptCode();
String deptName = doctor.getDeptName();
String doctCode = doctor.getDoctCode();
String doctName = doctor.getDoctName();
item = new AIDoctorSchedule(); item = new AIDoctorSchedule();
item.setDocId(doctor.getDoctCode());
item.setName(doctor.getDoctName());
item.setHosId(HCAIGuidanceConfig.HOSP_ID); item.setHosId(HCAIGuidanceConfig.HOSP_ID);
item.setDepartmentId(doctor.getDeptCode()); item.setBranchId(branchId);
item.setDoctorLevel(""); //
item.setDescription(ObjectUtils.isEmpty(doctor.getDescription()) ? "暂无介绍" : doctor.getDescription()); item.setDocId(doctCode);
item.setName(doctName);
item.setDepartmentId(deptCode);
item.setDeptName(deptName);
item.setDoctorLevel(doctor.getTitle());
item.setDescription(ObjectUtils.isEmpty(doctor.getSkill()) ? "暂无内容" : doctor.getSkill()); // 擅长
headImg = doctor.getHeadImg(); headImg = doctor.getHeadImg();
if (headImg != null && !ObjectUtils.isEmpty(headImg.trim())) { if (headImg != null && !ObjectUtils.isEmpty(headImg.trim())) {
if (!headImg.contains("data:image/")) { // 不是base64 if (!headImg.contains("data:image/")) { // 不是base64
@ -382,11 +433,90 @@ public class AIGuidanceService {
} }
} }
item.setUrl(""); // 挂号链接
// item.sets map.put("date", curDate);
map.put("deptCode", deptCode);
map.put("deptName", URLHelper.encodeURL(deptName));
map.put("doctName", URLHelper.encodeURL(doctName));
map.put("doctCode", doctCode);
map.put("subDeptCode", "");
map.put("hospitalArea", "");
if (HCAIGuidanceConfig.IS_SPLIT_TIME_REG) {
item.setUrl(webReqURL + "reg-reserve.html#/reg-doct-source" + URLHelper.mapParamsToUrl(map, true));
} else {
item.setUrl(webReqURL + "reg-reserve.html#/reg-doctor" + URLHelper.mapParamsToUrl(map, true));
}
item.setSchedule(queryDoctorSchedule(deptCode, null, doctCode));
doctors.add(item); doctors.add(item);
} }
return Result.success(ResultEnum.AI_SUCCESS, doctors); return Result.success(ResultEnum.AI_SUCCESS, doctors);
} }
public List<AISchedule> queryDoctorSchedule(String deptCode, String subDeptCode, String doctCode) {
String begDate = DateHelper.getCurDate();
List<Register> sourceList = new HisRegisterDao().getTimeRegSource(deptCode, subDeptCode, doctCode, begDate, DateHelper.getMoveDate(begDate, 7));
List<AISchedule> schedules = new ArrayList<>();
for (Register item : sourceList) {
String regDate = item.getRegDate();
AISchedule findItem = schedules.stream().filter(o -> o.getDate().equals(regDate)).findFirst().orElse(null);
if (findItem == null) {
AISchedule addItem = new AISchedule();
addItem.setDate(regDate);
addItem.setAvailable(1);
addItem.setType("普通");
schedules.add(addItem);
} else {
findItem.setAvailable(findItem.getAvailable() + 1);
}
}
return schedules;
}
// 4.2.1.1 查询医院的首页服务列表(必选)
public Result getHospitalHomeService(String hosId) {
Map<String, Object> map = new HashMap<>();
if (!HCAIGuidanceConfig.HOSP_ID.equals(hosId)) { // 医院id校验
log.warn("[智能导诊]查询医院的首页服务列表-hosId不匹配");
return Result.success(ResultEnum.AI_SUCCESS, map);
}
List<HCHospitalHome> dataList = new ArrayList<>();
String webReqURL = WeChatConfig.getWebReqURL(true);
dataList.add(new HCHospitalHome(){{
setScene("门诊");
setServiceName("预约挂号");
setH5Url(webReqURL + "reg-reserve.html");
setRemark("线上挂号,线下就诊");
setWxAppId("");
}});
dataList.add(new HCHospitalHome(){{
setScene("通用");
setServiceName("微官网");
setH5Url(webReqURL + "app.html");
setRemark("医院官网,功能分类展示");
setWxAppId("");
}});
dataList.add(new HCHospitalHome(){{
setScene("门诊");
setServiceName("诊间支付");
setH5Url(webReqURL + "pay-info.html");
setRemark("处方和申请单线上缴费");
setWxAppId("");
}});
dataList.add(new HCHospitalHome(){{
setScene("报告");
setServiceName("报告查询");
setH5Url(webReqURL + "all-result.html");
setRemark("检验、检查报告查询");
setWxAppId("");
}});
map.put("dataList", dataList);
return Result.success(map);
}
} }

@ -29,6 +29,8 @@ import java.util.Date;
@Slf4j @Slf4j
public class PEISService { public class PEISService {
private final String PEIS_SUCCESS_CODE = "200";
public JsonResult get(String url, OkHttpHelper.MapParams params) { public JsonResult get(String url, OkHttpHelper.MapParams params) {
return OkHttpHelper.get(url, params, JsonResultEnum.SYS_PEIS_RESERVE); return OkHttpHelper.get(url, params, JsonResultEnum.SYS_PEIS_RESERVE);
} }
@ -100,7 +102,7 @@ public class PEISService {
return; return;
} }
JsonResult jsonResult = postForm(XBDHelper.XBD_PEIS + "/wxUse/wxPay", params -> { JsonResult jsonResult = postForm(XBDHelper.PEIS_URL + "/wxUse/wxPay", params -> {
params.put("orderNo", noticeOrderNo); params.put("orderNo", noticeOrderNo);
params.put("payStatus", "OK"); params.put("payStatus", "OK");
params.put("payFailReason", ""); params.put("payFailReason", "");
@ -136,7 +138,7 @@ public class PEISService {
* @return bean * @return bean
*/ */
public PEISOrderInfo queryPEISOrderByNoticeOrderNo(String noticeOrderNo) throws ServiceException { public PEISOrderInfo queryPEISOrderByNoticeOrderNo(String noticeOrderNo) throws ServiceException {
JsonResult jsonResult = get(XBDHelper.XBD_PEIS + "/wxUse/GetOrder", params -> { JsonResult jsonResult = get(XBDHelper.PEIS_URL + "/wxUse/GetOrder", params -> {
params.put("orderNo", noticeOrderNo); params.put("orderNo", noticeOrderNo);
}); });
log.info("[体检预约]订单查询 {}", JsonHelper.toJsonString(jsonResult)); log.info("[体检预约]订单查询 {}", JsonHelper.toJsonString(jsonResult));
@ -222,7 +224,7 @@ public class PEISService {
* @return bool * @return bool
*/ */
public boolean cancelPEISReserve(String noticeOrderNo, String refundStatus, String refundFailReason) throws ServiceException { public boolean cancelPEISReserve(String noticeOrderNo, String refundStatus, String refundFailReason) throws ServiceException {
JsonResult jsonResult = postForm(XBDHelper.XBD_PEIS + "/wxUse/wxRefund", params -> { JsonResult jsonResult = postForm(XBDHelper.PEIS_URL + "/wxUse/wxRefund", params -> {
params.put("orderNo", noticeOrderNo); params.put("orderNo", noticeOrderNo);
params.put("refundStatus", refundStatus); // 退费状态(成功:OK,失败:FAIL) params.put("refundStatus", refundStatus); // 退费状态(成功:OK,失败:FAIL)
params.put("refundFailReason", refundFailReason); params.put("refundFailReason", refundFailReason);
@ -242,7 +244,7 @@ public class PEISService {
.add("begDate", begDate) .add("begDate", begDate)
.add("endDate", endDate) .add("endDate", endDate)
.build(); .build();
String result = OkHttpHelper.post(XBDHelper.XBD_PEIS + "/WxUse/GetPeisOfPacsResult", formBody); String result = OkHttpHelper.post(XBDHelper.PEIS_URL + "/WxUse/GetPeisOfPacsResult", formBody);
if (ObjectUtils.isEmpty(result)) { if (ObjectUtils.isEmpty(result)) {
throw new ServiceException("请求失败"); throw new ServiceException("请求失败");
} }
@ -251,9 +253,9 @@ public class PEISService {
throw new ServiceException("请求失败"); throw new ServiceException("请求失败");
} }
String code = jsonResult.getString("code"); String code = jsonResult.getString("code");
if (!"200".equals(code)) {
String message = jsonResult.getString("message"); String message = jsonResult.getString("message");
throw new ServiceException(ObjectUtils.isEmpty(message) ? "请求失败" : message); if (!PEIS_SUCCESS_CODE.equals(code)) {
throw new ServiceException(("[体检]" + (ObjectUtils.isEmpty(message) ? "请求失败" : message)));
} }
return jsonResult.getJSONArray("data"); return jsonResult.getJSONArray("data");
} }

@ -73,7 +73,7 @@ public class RegService {
*/ */
public boolean saveRegPrepay(Register reg) { public boolean saveRegPrepay(Register reg) {
if (reg == null) { if (reg == null) {
log.info("reg is null"); log.error("[挂号]预存信息为空");
return false; return false;
} }
reg.setHisStatus(-1); reg.setHisStatus(-1);

@ -5,8 +5,8 @@ import com.ynxbd.common.bean.me_technology.BookOrder;
import com.ynxbd.common.bean.me_technology.BookedInfo; import com.ynxbd.common.bean.me_technology.BookedInfo;
import com.ynxbd.common.bean.me_technology.NumberSourceDetails; import com.ynxbd.common.bean.me_technology.NumberSourceDetails;
import com.ynxbd.common.bean.me_technology.NumberSourceStatistics; import com.ynxbd.common.bean.me_technology.NumberSourceStatistics;
import com.ynxbd.common.helper.ProperHelper;
import com.ynxbd.common.helper.common.JsonHelper; import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.helper.common.XmlConfigHelper;
import com.ynxbd.common.helper.http.OkHttpHelper; import com.ynxbd.common.helper.http.OkHttpHelper;
import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.JsonResultEnum; import com.ynxbd.common.result.JsonResultEnum;
@ -34,35 +34,36 @@ public class TZReserveConfig {
private TZReserveConfig() { private TZReserveConfig() {
} }
public static final String TZ_RESERVE_WEBSERVICE_URL;
public static final String TZ_RESERVE_TERMINAL_NO;
public static final String TZ_RESERVE_TEST_PATIENT_ID;
public static final String TZ_RESERVE_JSON_URL;
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
public static final String WEBSERVICE_URL;
public static final String TERMINAL_NO;
public static final String TEST_PATIENT_ID;
public static final String JSON_URL;
static { static {
ProperHelper config = new ProperHelper().read("tz-reserve.properties"); XmlConfigHelper config = new XmlConfigHelper().read("sms-config.xml", "tz_sms");
TZ_RESERVE_WEBSERVICE_URL = config.getString("tz_reserve.webservice_url"); WEBSERVICE_URL = config.getString("webservice_url");
TZ_RESERVE_TERMINAL_NO = config.getString("tz_reserve.terminal_no"); TERMINAL_NO = config.getString("terminal_no");
TZ_RESERVE_TEST_PATIENT_ID = config.getString("tz_reserve.test_patientId"); JSON_URL = config.getString("json_url");
TZ_RESERVE_JSON_URL = config.getString("tz_reserve.json_url"); TEST_PATIENT_ID = config.getString("test_patientId");
} }
// 天助医技预约 // 天助医技预约
public static void reserveRun(String patientId) { public static void reserveRun(String patientId) {
try { try {
if (TZ_RESERVE_WEBSERVICE_URL == null) { if (WEBSERVICE_URL == null) {
return; return;
} }
if (TZ_RESERVE_TEST_PATIENT_ID != null) { if (TEST_PATIENT_ID != null) {
if (!patientId.equals(TZ_RESERVE_TEST_PATIENT_ID)) { if (!patientId.equals(TEST_PATIENT_ID)) {
log.info("[天助预约平台] 不是测试账号,不允许调用接口 patientId-{}", patientId); log.info("[天助预约平台] 不是测试账号,不允许调用接口 patientId-{}", patientId);
return; return;
} }
} }
String result = OkHttpHelper.get(TZ_RESERVE_WEBSERVICE_URL, params -> { String result = OkHttpHelper.get(WEBSERVICE_URL, params -> {
params.put("patientID", patientId); params.put("patientID", patientId);
params.put("terminalNo", TZ_RESERVE_TERMINAL_NO); params.put("terminalNo", TERMINAL_NO);
}); });
JsonResult jsonResult = JsonResult.xmlToBean(result, JsonResultEnum.SYS_RESERVE); JsonResult jsonResult = JsonResult.xmlToBean(result, JsonResultEnum.SYS_RESERVE);
if (jsonResult == null) { if (jsonResult == null) {
@ -79,7 +80,7 @@ public class TZReserveConfig {
} }
public static String getToken() { public static String getToken() {
String result = OkHttpHelper.get(TZ_RESERVE_JSON_URL + "/Tools/Tool/GetToken", params -> { String result = OkHttpHelper.get(JSON_URL + "/Tools/Tool/GetToken", params -> {
params.put("clientName", "WXAPP"); params.put("clientName", "WXAPP");
params.put("clientCode", "wxapp"); params.put("clientCode", "wxapp");
}); });
@ -103,11 +104,11 @@ public class TZReserveConfig {
params.put("PatientId", patientId); params.put("PatientId", patientId);
params.put("StartDate", startDate); params.put("StartDate", startDate);
params.put("EndDate", endDate); params.put("EndDate", endDate);
params.put("TerminalNo", TZ_RESERVE_TERMINAL_NO); params.put("TerminalNo", TERMINAL_NO);
params.put("IsBooked", "2"); params.put("IsBooked", "2");
RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toJsonString(params)); RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toJsonString(params));
String result = OkHttpHelper.post(TZ_RESERVE_JSON_URL + "/BookDetails/BookDetails/GetCanBookOrders", requestBody, headers -> { String result = OkHttpHelper.post(JSON_URL + "/BookDetails/BookDetails/GetCanBookOrders", requestBody, headers -> {
headers.add("token", getToken()); headers.add("token", getToken());
}); });
JSONObject jsonObject = JsonHelper.parseObject(result); JSONObject jsonObject = JsonHelper.parseObject(result);
@ -142,7 +143,7 @@ public class TZReserveConfig {
String json = JsonHelper.toJsonString(params); String json = JsonHelper.toJsonString(params);
RequestBody requestBody = RequestBody.create(JSON, json); RequestBody requestBody = RequestBody.create(JSON, json);
String result = OkHttpHelper.post(TZ_RESERVE_JSON_URL + "/BookDetails/BookDetails/GetNumberSourceStatistics", requestBody, headers -> { String result = OkHttpHelper.post(JSON_URL + "/BookDetails/BookDetails/GetNumberSourceStatistics", requestBody, headers -> {
headers.add("token", getToken()); headers.add("token", getToken());
}); });
JSONObject jsonObject = JsonHelper.parseObject(result); JSONObject jsonObject = JsonHelper.parseObject(result);
@ -175,7 +176,7 @@ public class TZReserveConfig {
jsonParams.put("appFromID", appFromID); jsonParams.put("appFromID", appFromID);
RequestBody requestBody = RequestBody.create(JSON, jsonParams.toJSONString()); RequestBody requestBody = RequestBody.create(JSON, jsonParams.toJSONString());
String result = OkHttpHelper.post(TZ_RESERVE_JSON_URL + "/BookDetails/BookDetails/GetNumberSourceDetails", requestBody, headers -> { String result = OkHttpHelper.post(JSON_URL + "/BookDetails/BookDetails/GetNumberSourceDetails", requestBody, headers -> {
headers.add("token", getToken()); headers.add("token", getToken());
}); });
JSONObject jsonObject = JsonHelper.parseObject(result); JSONObject jsonObject = JsonHelper.parseObject(result);
@ -208,7 +209,7 @@ public class TZReserveConfig {
params.put("endDateTime", endDateTime); params.put("endDateTime", endDateTime);
params.put("lockStatus", lockStatus); params.put("lockStatus", lockStatus);
RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toJsonString(params)); RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toJsonString(params));
String result = OkHttpHelper.post(TZ_RESERVE_JSON_URL + "/BookDetails/BookDetails/LockedBookNo", requestBody, headers -> { String result = OkHttpHelper.post(JSON_URL + "/BookDetails/BookDetails/LockedBookNo", requestBody, headers -> {
headers.add("token", getToken()); headers.add("token", getToken());
}); });
JSONObject jsonObject = JsonHelper.parseObject(result); JSONObject jsonObject = JsonHelper.parseObject(result);
@ -237,7 +238,7 @@ public class TZReserveConfig {
params.put("ScheduleUser", patientName); params.put("ScheduleUser", patientName);
log.info("[天助预约平台] 确定预约json={}", JsonHelper.toProJsonString(params)); log.info("[天助预约平台] 确定预约json={}", JsonHelper.toProJsonString(params));
RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toProJsonString(params)); RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toProJsonString(params));
String result = OkHttpHelper.post(TZ_RESERVE_JSON_URL + "/BookDetails/BookDetails/GetBookedDateTime", requestBody, headers -> { String result = OkHttpHelper.post(JSON_URL + "/BookDetails/BookDetails/GetBookedDateTime", requestBody, headers -> {
headers.add("token", getToken()); headers.add("token", getToken());
}); });
JSONObject jsonObject = JsonHelper.parseObject(result); JSONObject jsonObject = JsonHelper.parseObject(result);

@ -7,6 +7,8 @@ import org.apache.commons.lang3.ObjectUtils;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
// Pre-Visit Evaluation
@Slf4j @Slf4j
public class PWEConfig { public class PWEConfig {

@ -2,33 +2,50 @@
<config> <config>
<!-- 报告解读 --> <!-- 报告解读 -->
<report> <report>
<is_dev>true</is_dev> <is_dev mame="是否为测试环境">true</is_dev>
<partner_id>20009250</partner_id>
<token>3bee9edc0a2f41ac911b9b714c854cad</token> <partner_id name="合作方ID">20009251</partner_id>
<token name="密钥token">3bee9edc0a2f41ac911b9b714c854cad</token>
<!-- 测试环境 -->
<dev_partner_id>20009250</dev_partner_id>
<dev_token>3bee9edc0a2f41ac911b9b714c854cad</dev_token>
</report> </report>
<!-- 智能导诊 --> <!-- 智能导诊 -->
<ai_guidance> <ai_guidance>
<!-- 是否开启 --> <is_enable name="是否开启">true</is_enable>
<is_enable>true</is_enable> <is_debug mame="是否开启调试">true</is_debug>
<!-- 是否开启调试 --> <is_dev mame="是否为测试环境">true</is_dev>
<is_debug>true</is_debug>
<!-- 是否为测试环境 -->
<is_dev>true</is_dev>
<!-- 是否为分时段挂号(默认true) --> <!-- 是否为分时段挂号(默认true) -->
<is_split_time_reg>true</is_split_time_reg> <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> <!-- AI版:电子健康卡AppId(管理>开发商接入) | 旧版:合作方ID(腾讯提供)-->
<hosp_name name="医院名称">德宏州中医医院</hosp_name> <partner_id >e4a05c13301f2f6a8b07b3de872dfe2d</partner_id>
<!-- AI版:电子健康卡AppSecret(管理>开发商接入) | 旧版:Token(腾讯提供)-->
<partner_key >e5322dfd9bfab939851319812c30f9f1</partner_key>
<!-- -->
<dev_partner_key>e5322dfd9bfab939851319812c30f9f1</dev_partner_key>
<hosp_id name="医院ID">800002580</hosp_id>
<hosp_name name="医院名称">红河州第一人民医院</hosp_name>
<hosp_intro name="医院介绍"></hosp_intro> <hosp_intro name="医院介绍"></hosp_intro>
<hosp_level name="医院等级"></hosp_level> <hosp_level name="医院等级"></hosp_level>
<hosp_address name="医院地址"></hosp_address> <hosp_address name="医院地址"></hosp_address>
<hosp_tel name="联系方式"></hosp_tel> <hosp_tel name="联系方式"></hosp_tel>
</ai_guidance> </ai_guidance>
<pew>
<is_enable name="是否开启">true</is_enable>
<is_dev mame="是否为测试环境">true</is_dev>
<!-- 合作方ID -->
<hosp_id>800002580</hosp_id>
<partner_id>20009251</partner_id>
<partner_secret>0e07b445b2ce8ca37b9bff174823af31</partner_secret>
<secret_key>##akgdaS!SwZRam^</secret_key>
<dev_partner_secret></dev_partner_secret>
<dev_secret_key></dev_secret_key>
<dev_open_ids>oeso-t62kkoRwLVVkSkwmmjPfUXk</dev_open_ids>
</pew>
</config> </config>

@ -1,4 +0,0 @@
t#百度身份证识别
baidu.appid=16670654
baidu.apikey=55eavj80l3bga2qebsnxtgq8
baidu.secretkey=mj2vr7hwkbinku0vsojqxgsnzsgaju8m

@ -1 +0,0 @@
# LIS\u914D\u7F6E lis.url=10.20.10.36:9623 # \u662F\u5426\u6253\u5370\u8FD4\u56DE\u65E5\u5FD7 lis.is_log_resp=false # \u914D\u7F6E lis.is_unified_entrance=false

@ -1,7 +0,0 @@
#上海岱嘉
ris.ftpPath= 192.168.1.128
ris.ftpPort = 20
#ris.ftpUser= pacs
ris.ftpUser= absorber
#ris.ftpPass=Pacs!2021
ris.ftpPass=share

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<config>
<ali_sms>
<!--阿里云短信配置-->
<access_key_id>20009251</access_key_id>
<access_key_secret>3bee9edc0a2f41ac911b9b714c854cad</access_key_secret>
<sign_name name="短信签名">德宏州中医医院</sign_name>
</ali_sms>
<tz_sms>
<!-- 天助平台短信 -->
<webservice_url>http://10.255.248.183:9003/WebService1.asmx/SlipPrint</webservice_url>
<json_url>http://10.255.248.183:9001</json_url>
<terminal_no>VX</terminal_no>
<test_patientId></test_patientId>
</tz_sms>
</config>

@ -1,4 +0,0 @@
#\u963F\u91CC\u4E91\u77ED\u4FE1\u914D\u7F6E
sms.access_key_id=LTAIucQcv6BOaBQ6
sms.access_key_secret=96QOyw62AgBT9BbLI8IyEkA8g43VNQ
sms.sign_name=\u5FB7\u5B8F\u5DDE\u4E2D\u533B\u533B\u9662

@ -1,5 +0,0 @@
# \u5929\u52A9\u9884\u7EA6\u5E73\u53F0
tz_reserve.webservice_url=http://10.255.248.183:9003/WebService1.asmx/SlipPrint
tz_reserve.terminal_no=VX
tz_reserve.json_url=http://10.255.248.183:9001
#tz_reserve.test_patientId=

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<config>
<rm_lis name="瑞美LIS">
<url>10.20.10.36:9623</url>
<is_log_resp name="是否打印返回日志">false</is_log_resp>
<is_unified_entrance>false</is_unified_entrance>
</rm_lis>
<ris_pacs name="上海岱嘉">
<url>192.168.1.128</url>
<port>20</port>
<!-- <user>pacs</user> -->
<user>absorber</user>
<!-- <pass>Pacs!2021</pass>-->
<pass>share</pass>
</ris_pacs>
<xbd>
<peis_url name="体检预约">http://192.168.0.183:3307/wx3307</peis_url>
<pacs_cloud_url name="云胶片">http://192.168.0.183:3307/wx3307</pacs_cloud_url>
<casebook_url name="病历复印">http://192.168.0.183:3307/wx3307</casebook_url>
</xbd>
</config>
<!-- # 云胶片地址-->
<!-- xbd.200.cloud_film_url=http://192.168.0.183:3307/wx3307-->
<!-- # 病历复印-->
<!-- xbd.200.med_record_copy_url=http://192.168.12.66:8081-->
<!-- # 体检-->
<!-- xbd.100.peis_url=http://192.168.12.102:3000/peisReserve-->
<!-- location /wx3303{-->
<!-- proxy_pass http://10.20.11.60:3303;-->
<!-- proxy_set_header X-Real-IP $remote_addr;-->
<!-- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;-->
<!-- proxy_set_header Host $host;-->
<!-- proxy_set_header Upgrade-Insecure-Requests 1;-->
<!-- proxy_set_header X-Forwarded-Proto https;-->
<!-- }-->

@ -1,24 +0,0 @@
## \u4E91\u80F6\u7247\u5730\u5740
#xbd.200.cloud_film_url=http://192.168.0.183:3307/wx3307
## \u75C5\u5386\u590D\u5370
#xbd.200.med_record_copy_url=http://192.168.12.66:8081
## \u4F53\u68C0
#xbd.100.peis_url=http://192.168.12.102:3000/peisReserve
#location /wx3303{
#proxy_pass http://10.20.11.60:3303;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header Host $host;
#proxy_set_header Upgrade-Insecure-Requests 1;
#proxy_set_header X-Forwarded-Proto https;
#}
# \u4E91\u80F6\u7247\u5730\u5740
xbd.200.cloud_film_url=http://200.200.200.70:3306/wx3306
# \u75C5\u5386\u590D\u5370
#xbd.200.med_record_copy_url=http://10.20.10.41:8082
xbd.200.med_record_copy_url=http://192.168.12.66:8080
# \u4F53\u68C0
xbd.100.peis_url=http://200.200.200.71:5050/peisReserve
Loading…
Cancel
Save