1、微信认证,在子服务器关闭后再次访问时,存在问题修复

2、主次服务器关联关系调整
debug
王绍全 6 days ago
parent 38c8d74d54
commit 14ac702e7b
  1. 1
      .gitignore
  2. 2
      pom.xml
  3. 4
      src/main/java/com/ynxbd/common/action/AliAction.java
  4. 2
      src/main/java/com/ynxbd/common/action/AuthAgentAction.java
  5. 12
      src/main/java/com/ynxbd/common/action/HealthCardAction.java
  6. 177
      src/main/java/com/ynxbd/common/action/HealthCodeAction.java
  7. 42
      src/main/java/com/ynxbd/common/action/PatientAction.java
  8. 17
      src/main/java/com/ynxbd/common/action/RegisterAction.java
  9. 7
      src/main/java/com/ynxbd/common/action/auth/WxAuthAction.java
  10. 17
      src/main/java/com/ynxbd/common/action/weihu/DataWHAction.java
  11. 48
      src/main/java/com/ynxbd/common/bean/Patient.java
  12. 25
      src/main/java/com/ynxbd/common/bean/enums/HealthCardRespCodeEnum.java
  13. 37
      src/main/java/com/ynxbd/common/bean/enums/HealthCardSceneEnum.java
  14. 2
      src/main/java/com/ynxbd/common/bean/pay/Order.java
  15. 1
      src/main/java/com/ynxbd/common/bean/pay/Register.java
  16. 2
      src/main/java/com/ynxbd/common/config/interceptor/MethodInterceptor.java
  17. 6
      src/main/java/com/ynxbd/common/dao/GMCUserDao.java
  18. 30
      src/main/java/com/ynxbd/common/dao/PatientDao.java
  19. 17
      src/main/java/com/ynxbd/common/dao/his/HisPatientDao.java
  20. 8
      src/main/java/com/ynxbd/common/helper/common/Base64Helper.java
  21. 2
      src/main/java/com/ynxbd/common/helper/common/ParamHelper.java
  22. 33
      src/main/java/com/ynxbd/common/helper/common/URLHelper.java
  23. 2
      src/main/java/com/ynxbd/common/helper/his/HisEnum.java
  24. 4
      src/main/java/com/ynxbd/common/helper/his/HisHelper.java
  25. 18
      src/main/java/com/ynxbd/common/service/AIGuidanceService.java
  26. 205
      src/main/java/com/ynxbd/common/service/GMCService.java
  27. 18
      src/main/java/com/ynxbd/common/service/GMCUserService.java
  28. 853
      src/main/java/com/ynxbd/common/service/HCodeService.java
  29. 159
      src/main/java/com/ynxbd/common/service/HealthUploadService.java
  30. 187
      src/main/java/com/ynxbd/common/service/PatientService.java
  31. 2
      src/main/java/com/ynxbd/common/service/RecipeService.java
  32. 2
      src/main/java/com/ynxbd/common/service/RegService.java
  33. 2
      src/main/java/com/ynxbd/wx/config/WeChatConfig.java
  34. 6
      src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java
  35. 126
      src/main/java/com/ynxbd/wx/wxfactory/WxAuthHelper.java
  36. 1
      src/main/java/com/ynxbd/wx/wxfactory/WxCacheHelper.java
  37. 19
      src/main/java/com/ynxbd/wx/wxfactory/WxMiniHelper.java
  38. 15
      src/main/resources/hcode.properties
  39. 2
      src/main/resources/webservice.properties
  40. 11
      src/main/resources/wx.properties

1
.gitignore vendored

@ -105,3 +105,4 @@ wc.db
.DS_Store .DS_Store
/src/main/resources/druid-config.properties /src/main/resources/druid-config.properties
/src/main/resources/apiclient_cert.p12 /src/main/resources/apiclient_cert.p12
/catalina.home_IS_UNDEFINED

@ -434,7 +434,7 @@
<artifactId>healthcard</artifactId> <artifactId>healthcard</artifactId>
<scope>system</scope> <scope>system</scope>
<version>2.7</version> <version>2.7</version>
<systemPath>${pom.basedir}/src/main/webapp/WEB-INF/lib/open-platform-sdk-2.7-jdk1.8.jar</systemPath> <systemPath>${pom.basedir}/src/main/webapp/WEB-INF/lib/open-platform-sdk-3.1-jdk1.8.jar</systemPath>
</dependency> </dependency>
<dependency> <dependency>

@ -68,7 +68,7 @@ public class AliAction extends BaseAction {
} else { } else {
user = new User(); user = new User();
user.setOpenid(openid); user.setOpenid(openid);
user.setPatientList(new PatientService().queryPatientList(openid, null, true)); user.setPatientList(new PatientService().queryPatientList(null, openid, null, true));
cache.put(openid, user); cache.put(openid, user);
} }
@ -82,7 +82,7 @@ public class AliAction extends BaseAction {
} }
if (user.getPatientList() == null) { if (user.getPatientList() == null) {
user.setPatientList(new PatientService().queryPatientList(openid, null, true)); user.setPatientList(new PatientService().queryPatientList(null, openid, null, true));
} }
AliCacheHelper.setUserAccessToken(scopes, user, accessToken); AliCacheHelper.setUserAccessToken(scopes, user, accessToken);

@ -46,7 +46,7 @@ public class AuthAgentAction extends BaseAction {
item.setEnPersonId(AesWxHelper.encode(item.getPersonId())); item.setEnPersonId(AesWxHelper.encode(item.getPersonId()));
item.setEnPersonTel(AesWxHelper.encode(item.getPersonTel())); item.setEnPersonTel(AesWxHelper.encode(item.getPersonTel()));
item.setShowPersonId(ParamHelper.hideIdCardNo(item.getPersonId())); item.setShowPersonId(ParamHelper.hideIdCardNo(item.getPersonId()));
item.setShowPersonTel(ParamHelper.hidTel(item.getPersonTel())); item.setShowPersonTel(ParamHelper.hideTel(item.getPersonTel()));
item.setPersonId(null); item.setPersonId(null);
item.setPersonTel(null); item.setPersonTel(null);

@ -0,0 +1,12 @@
package com.ynxbd.common.action;
import com.ynxbd.common.action.base.BaseAction;
import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Namespace;
@Slf4j
@Namespace("/hc")
public class HealthCardAction extends BaseAction {
}

@ -39,89 +39,101 @@ import java.util.TimerTask;
public class HealthCodeAction extends BaseAction { public class HealthCodeAction extends BaseAction {
/** /**
* 查询患者集合 * [患者]查询信息
*/
@Action("getPatientByIdCardNo")
public Result getPatientByIdCardNo(@AesDecode String openid, @AesDecode String idCardNo) {
log.info("[电子健康卡]根据身份证和openId查询患者信息 openid={}, idCardNo={}", openid, idCardNo);
if (openid == null || idCardNo == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
Patient patient = new PatientDao().selectByIdCardNo(openid, idCardNo);
return Result.success(patient);
}
/**
* [电子健康卡]查询患者集
*/ */
@Action("getHealthCardList") @Action("getHealthCardList")
public Result getHealthCardList(String openid) { public Result getHealthCardList(@AesDecode String openid) {
log.info("[电子健康卡]获取用户数据 openid={}", openid); log.info("[电子健康卡]查询患者集 openid={}", openid);
if (openid == null) { if (openid == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); return Result.error(ResultEnum.PARAM_IS_DEFECT);
} }
List<Patient> patients = new PatientDao().selectHealthCardListByOpenid(openid); List<Patient> patients = new PatientDao().selectHealthCardListByOpenid(openid);
return Result.success(patients); return Result.success(patients);
} }
// @Action("appBindHealthCard")
// public Result appBindHealthCard(String openid, String healthCode) {
// log.info("[新版电子健康卡]H5嵌入链接绑卡-通过healthCode获取健康卡数据 healthCode={}, openid={}", healthCode, openid);
// if (healthCode == null || openid == null) return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数为空
//
// Patient patient = HCodeService.appBindHealthCard(healthCode); // 通过健康卡授权码获取健康卡的用户信息
// if (patient == null) {
// log.info("[新版电子健康卡]H5嵌入链接绑卡 获取用户信息失败");
// return Result.error("[新版电子健康卡]H5嵌入链接绑卡 获取用户信息失败");
// }
// return Result.success(patient);
// }
/** /**
* 根据身份证和openid取二维码 * 获取HIS地区编码信息
*/ */
@Action("getPatientByIdCardNo") @Action("getArea")
public Result getPatientByIdCardNo(String openid, String idCardNo) { public Result getArea(Integer level, String areaCode) {
log.info("[电子健康卡]根据身份证和openid取二维码 openid={}, idCardNo={}", openid, idCardNo); try {
if (openid == null || idCardNo == null) { return Result.success(new HisPatientDao().getArea(level, areaCode));
return Result.error(ResultEnum.PARAM_IS_DEFECT); } catch (Exception e) {
return Result.error(e);
} }
Patient patient = new PatientDao().selectByIdCardNo(openid, idCardNo);
return Result.success(patient);
} }
/** /**
* 获取token用于绑卡 * 获取token用于绑卡
*/ */
@Action("getAppToken") @Action("getAppToken")
public Result getAppToken() { public Result getAppToken(Boolean isMiniApp) {
String appToken = new HCodeService().getAppToken(); String appToken = HCodeService.getAppToken(isMiniApp, true);
return appToken == null ? Result.error() : Result.success(); return appToken == null ? Result.error() : Result.success();
} }
@Action("appBindHealthCard")
public Result appBindHealthCard(String openid, String healthCode) {
log.info("[新版电子健康卡]H5嵌入链接绑卡-通过healthCode获取健康卡数据 healthCode={}, openid={}", healthCode, openid);
if (healthCode == null || openid == null) return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数为空
Patient patient = new HCodeService().appBindHealthCard(healthCode); // 通过健康卡授权码获取健康卡的用户信息
if (patient == null) {
log.info("[新版电子健康卡]H5嵌入链接绑卡 获取用户信息失败");
return Result.error("[新版电子健康卡]H5嵌入链接绑卡 获取用户信息失败");
}
return Result.success(patient);
}
/** /**
* [电子健康卡]通过二维码获取健康卡数据 * [电子健康卡]通过二维码获取健康卡数据
* *
* @param qrCode 二维码 * @param qrCode 二维码
*/ */
@Action("getHealthCardByQrCode") @Action("getHealthCardByQrCode")
public Result getHealthCardByQrCode(String qrCode) { public Result getHealthCardByQrCode(Boolean isMiniApp, String qrCode) {
log.info("[电子健康卡]通过二维码获取健康卡数据 qrCode={}", qrCode); log.info("[电子健康卡]通过二维码获取健康卡数据 isMiniApp={}, qrCode={}", isMiniApp, qrCode);
if (qrCode == null) { if (qrCode == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数为空 return Result.error(ResultEnum.PARAM_IS_DEFECT);
} }
Patient patient = new HCodeService().getHealthCardByQrCode(qrCode); Patient patient = HCodeService.getHealthCardByQrCode(isMiniApp, qrCode);
return patient == null ? Result.error() : Result.success(patient); return patient == null ? Result.error() : Result.success(patient);
} }
/** /**
* 获取健康卡二维码 * 获取健康卡二维码
* * @param appToken appToken *
* * @param healthCardId 健康卡ID * @param isMiniApp isMiniApp
* * @param idCardNo 证件号码 * @param idCardNo 证件号码
* * @param codeType 传0或者10返回动态码1返回静态码 * @param healthCardId 健康卡ID
* @return result
*/ */
@Action("getDynamicQRCode") @Action("getDynamicQRCode")
public Result getDynamicQRCode(String idCardNo, String healthCardId) { public Result getDynamicQRCode(Boolean isMiniApp, String idCardNo, String healthCardId) {
log.info("[电子健康卡]获取二维码 healthCardId={}, idCardNo={}", healthCardId, idCardNo); log.info("[电子健康卡]获取二维码 healthCardId={}, idCardNo={}", healthCardId, idCardNo);
if (healthCardId == null || idCardNo == null) { if (healthCardId == null || idCardNo == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数缺失 return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数缺失
} }
JSONObject result = new HCodeService().getDynamicQRCode(healthCardId, idCardNo, "0"); JSONObject result = HCodeService.getDynamicQRCode(isMiniApp, healthCardId, idCardNo, "0");
return result == null ? Result.error() : Result.success(result); return result == null ? Result.error() : Result.success(result);
} }
@ -129,36 +141,21 @@ public class HealthCodeAction extends BaseAction {
* 获取卡包订单ID * 获取卡包订单ID
*/ */
@Action("getCardOrderId") @Action("getCardOrderId")
public Result getCardOrderId(String idCardNo, String healthCardId) { public Result getCardOrderId(Boolean isMiniApp, String idCardNo, String healthCardId) {
log.info("[电子健康卡]获取卡包订单ID healthCardId={}, idCardNo={}", healthCardId, idCardNo); log.info("[电子健康卡]获取卡包订单ID healthCardId={}, idCardNo={}", healthCardId, idCardNo);
if (healthCardId == null || idCardNo == null) { if (healthCardId == null || idCardNo == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数缺失 return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数缺失
} }
HCodeService hCodeService = new HCodeService(); String qrCodeText = HCodeService.getQRCodeText(isMiniApp, healthCardId, idCardNo);
String qrCodeText = hCodeService.getQRCodeText(healthCardId, idCardNo);
if (qrCodeText == null) { if (qrCodeText == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); // qrCodeText参数缺失 return Result.error(ResultEnum.PARAM_IS_DEFECT); // qrCodeText参数缺失
} }
JSONObject result = HCodeService.getCardOrderId(isMiniApp, qrCodeText);
JSONObject result = hCodeService.getCardOrderId(qrCodeText);
return result == null ? Result.error() : Result.success(result); return result == null ? Result.error() : Result.success(result);
} }
/**
* 获取卡包订单ID
*/
@Action("getArea")
public Result getArea(Integer level, String areaCode) {
try {
return Result.success(new HisPatientDao().getArea(level, areaCode));
} catch (Exception e) {
return Result.error(e);
}
}
/** /**
* 健康卡[上报数据] * 健康卡[上报数据]
* *
@ -173,13 +170,12 @@ public class HealthCodeAction extends BaseAction {
return Result.error(ResultEnum.PARAM_IS_DEFECT); return Result.error(ResultEnum.PARAM_IS_DEFECT);
} }
HCodeService hCodeService = new HCodeService(); String qrCodeText = HCodeService.getQRCodeText(false, healthCardId, idCardNo);
String qrCodeText = hCodeService.getQRCodeText(healthCardId, idCardNo);
if (qrCodeText == null) { if (qrCodeText == null) {
return Result.error(ResultEnum.INTERFACE_OUTER_INVOKE_ERROR); return Result.error(ResultEnum.INTERFACE_OUTER_INVOKE_ERROR);
} }
JSONObject jsonObject = hCodeService.reportHISData(qrCodeText, null, scene, HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, null); JSONObject jsonObject = HCodeService.reportHISData(qrCodeText, null, scene, HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, null);
if (jsonObject == null) { if (jsonObject == null) {
return Result.error(); return Result.error();
} }
@ -191,7 +187,7 @@ public class HealthCodeAction extends BaseAction {
* [电子健康卡]患者绑定成人 * [电子健康卡]患者绑定成人
*/ */
@Action("bind") @Action("bind")
public Result bind(boolean isAreaCode, boolean isFace, String orderId, String registerOrderId, String address, String areaCode, String areaAddress, String openid, String tel, String sex, String name, String nation, String birthday, String idCardNo, String cardType, Boolean isHealthCard, String healthCardId, String wechatCode, String enOpenId, String enUnionId, String enGmcOpenId, String enHospAppId) { public Result bind(Boolean isMiniApp, boolean isAreaCode, boolean isFace, String orderId, String registerOrderId, String address, String areaCode, String areaAddress, String openid, String tel, String sex, String name, String nation, String birthday, String idCardNo, String cardType, Boolean isHealthCard, String healthCardId, String wechatCode, String enOpenId, String enUnionId, String enGmcOpenId, String enHospAppId) {
log.info("[电子健康卡]身份绑定 name={}, address={}, areaCode={}, areaAddress={}, nation={}, sex={}, birthday={}, tel={}, healthCardId={}, cardType={}, enUnionId={}, openId={}, enOpenId={}, enGmcOpenId={}, enChildAppId={}", log.info("[电子健康卡]身份绑定 name={}, address={}, areaCode={}, areaAddress={}, nation={}, sex={}, birthday={}, tel={}, healthCardId={}, cardType={}, enUnionId={}, openId={}, enOpenId={}, enGmcOpenId={}, enChildAppId={}",
name, address, areaCode, areaAddress, nation, sex, birthday, tel, healthCardId, cardType, enUnionId, openid, enOpenId, enGmcOpenId, enHospAppId); name, address, areaCode, areaAddress, nation, sex, birthday, tel, healthCardId, cardType, enUnionId, openid, enOpenId, enGmcOpenId, enHospAppId);
if (isHealthCard == null || openid == null || tel == null || sex == null || birthday == null || name == null) { if (isHealthCard == null || openid == null || tel == null || sex == null || birthday == null || name == null) {
@ -203,9 +199,8 @@ public class HealthCodeAction extends BaseAction {
return Result.error(ResultEnum.PARAM_IS_INVALID); return Result.error(ResultEnum.PARAM_IS_INVALID);
} }
HCodeService hCodeService = new HCodeService(); if (isHealthCard && isFace) { // 实名认证
if (isFace) { // 实名认证 if (!HCodeService.checkUniformVerifyResult(isMiniApp, orderId, registerOrderId)) {
if (!hCodeService.checkUniformVerifyResult(orderId, registerOrderId)) {
return Result.error(ResultEnum.FACE_VERIFY_ERROR); return Result.error(ResultEnum.FACE_VERIFY_ERROR);
} }
} }
@ -251,7 +246,7 @@ public class HealthCodeAction extends BaseAction {
} }
// 先注册,后修改-->先获取健康卡ID // 先注册,后修改-->先获取健康卡ID
JSONObject respObj = hCodeService.registerHealthCard(null, wechatCode, birthday, cardTypeEnum, address, areaAddress, sex, nation, name, idCardNo, tel); JSONObject respObj = HCodeService.registerHealthCard(isMiniApp, null, wechatCode, birthday, cardTypeEnum, address, areaAddress, sex, nation, name, idCardNo, tel);
if (respObj == null) { if (respObj == null) {
log.info("[电子健康卡]注册健康卡失败,响应内容为空"); log.info("[电子健康卡]注册健康卡失败,响应内容为空");
@ -263,9 +258,8 @@ public class HealthCodeAction extends BaseAction {
// 响应处理 // 响应处理
String errMsg = respObj.getString("errMsg"); String errMsg = respObj.getString("errMsg");
String resultCode = respObj.getString("resultCode"); String resultCode = respObj.getString("resultCode");
HealthCardRespCodeEnum healthCardRespCodeEnum = hCodeService.resultCodeHandle(resultCode); HealthCardRespCodeEnum healthCardRespCodeEnum = HealthCardRespCodeEnum.findEnumByResultCode(resultCode);
log.info("[电子健康卡] 绑定失败原因 resultCode={}, errMsg={}, statusMsg={}", resultCode, errMsg, healthCardRespCodeEnum.MESSAGE); log.info("[电子健康卡] 绑定失败原因 resultCode={}, errMsg={}, statusMsg={}", resultCode, errMsg, healthCardRespCodeEnum.MESSAGE);
//
if (!healthCardRespCodeEnum.IS_CONTINUE) { // 不继续执行 if (!healthCardRespCodeEnum.IS_CONTINUE) { // 不继续执行
if (!healthCardRespCodeEnum.equals(HealthCardRespCodeEnum._10060)) { // 姓名和身份证不一致 if (!healthCardRespCodeEnum.equals(HealthCardRespCodeEnum._10060)) { // 姓名和身份证不一致
return Result.error(healthCardRespCodeEnum.MESSAGE); return Result.error(healthCardRespCodeEnum.MESSAGE);
@ -301,26 +295,25 @@ public class HealthCodeAction extends BaseAction {
bindInfo.setEnUnionId(enUnionId); bindInfo.setEnUnionId(enUnionId);
bindInfo.setEnHospAppId(enHospAppId); bindInfo.setEnHospAppId(enHospAppId);
bindInfo.setEnGmcOpenId(enGmcOpenId); bindInfo.setEnGmcOpenId(enGmcOpenId);
return new PatientService().bindCard(request, false, isAreaCode, bindInfo); return new PatientService().bindCard(request, false, isAreaCode, bindInfo);
} }
/** /**
* [一键绑定]-->获取健康卡用户信息 * 获取健康卡用户信息
* *
* @param openid openid * @param openid openid
* @param healthCode 健康卡授权码-->用来获取健康卡用户信息 * @param healthCode 健康卡授权码-->用来获取健康卡用户信息
*/ */
@Action("getHealthCardInfo") @Action("getHealthCardInfo")
public Result getHealthCardInfo(String openid, String healthCode) { public Result getHealthCardInfo(Boolean isMiniApp, String openid, String healthCode) {
log.info("[电子健康卡]一键绑定 获取健康卡用户信息 healthCode={}, openid={}", healthCode, openid); log.info("[电子健康卡]获取健康卡用户信息 healthCode={}, openid={}", healthCode, openid);
if (healthCode == null || openid == null) return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数为空 if (healthCode == null || openid == null) return Result.error(ResultEnum.PARAM_IS_DEFECT);
Patient patient = new HCodeService().getInfoByHealthCode(healthCode); // 通过健康卡授权码获取健康卡的用户信息 Patient patient = HCodeService.getHealthCardByHealthCode(isMiniApp, healthCode);
if (patient == null) { if (patient == null) {
log.info("[电子健康卡]一键绑定 获取用户信息失败"); log.info("[电子健康卡]获取健康卡用户信息-失败");
return Result.error("[电子健康卡]一键绑定 获取用户信息失败"); return Result.error("[电子健康卡]获取健康卡用户信息-失败");
} }
return Result.success(patient); return Result.success(patient);
} }
@ -338,7 +331,6 @@ public class HealthCodeAction extends BaseAction {
* @param nation nation * @param nation nation
* @param patientId patientId * @param patientId patientId
* @param address address * @param address address
* @return Result
*/ */
@Action("upBind") @Action("upBind")
public Result upBind(String wechatCode, String idCardNo, String cardType, String openid, String tel, String name, String nation, String patientId, String address) { public Result upBind(String wechatCode, String idCardNo, String cardType, String openid, String tel, String name, String nation, String patientId, String address) {
@ -364,9 +356,8 @@ public class HealthCodeAction extends BaseAction {
return Result.error(ResultEnum.PARAM_TYPE_ERROR); return Result.error(ResultEnum.PARAM_TYPE_ERROR);
} }
HCodeService hCodeService = new HCodeService();
// 先注册,后修改-->先获取健康卡ID // 先注册,后修改-->先获取健康卡ID
JSONObject rspObj = hCodeService.registerHealthCard(patientId, wechatCode, birthday, cardTypeEnum, address, null, sex, nation, name, idCardNo, tel); JSONObject rspObj = HCodeService.registerHealthCard(false, patientId, wechatCode, birthday, cardTypeEnum, address, null, sex, nation, name, idCardNo, tel);
if (rspObj == null) { if (rspObj == null) {
log.info("[电子健康卡]升级绑定失败, 响应内容为空"); log.info("[电子健康卡]升级绑定失败, 响应内容为空");
return Result.error("[电子健康卡]升级绑定失败, 响应内容为空"); return Result.error("[电子健康卡]升级绑定失败, 响应内容为空");
@ -377,7 +368,7 @@ public class HealthCodeAction extends BaseAction {
// 响应处理 // 响应处理
String errMsg = rspObj.getString("errMsg"); String errMsg = rspObj.getString("errMsg");
String resultCode = rspObj.getString("resultCode"); String resultCode = rspObj.getString("resultCode");
HealthCardRespCodeEnum healthCardRespCodeEnum = hCodeService.resultCodeHandle(resultCode); HealthCardRespCodeEnum healthCardRespCodeEnum = HealthCardRespCodeEnum.findEnumByResultCode(resultCode);
log.info("[电子健康卡]升级绑定失败原因 resultCode={}, errMsg={}, statusMsg={}", resultCode, errMsg, healthCardRespCodeEnum.MESSAGE); log.info("[电子健康卡]升级绑定失败原因 resultCode={}, errMsg={}, statusMsg={}", resultCode, errMsg, healthCardRespCodeEnum.MESSAGE);
return Result.error(healthCardRespCodeEnum.MESSAGE); return Result.error(healthCardRespCodeEnum.MESSAGE);
@ -407,12 +398,12 @@ public class HealthCodeAction extends BaseAction {
* 身份证识别 * 身份证识别
*/ */
@Action("orcInfo") @Action("orcInfo")
public Result orcInfo(String image) { public Result orcInfo(Boolean isMiniApp, String image) {
log.info("身份证识别"); log.info("身份证识别");
if (image == null) { if (image == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); return Result.error(ResultEnum.PARAM_IS_DEFECT);
} }
Patient patient = new HCodeService().orcInfo(image); Patient patient = HCodeService.orcInfo(isMiniApp, image);
return Result.success(patient); return Result.success(patient);
} }
@ -423,7 +414,6 @@ public class HealthCodeAction extends BaseAction {
* @param idCardNo idCardNo * @param idCardNo idCardNo
* @param name name * @param name name
* @param wechatCode wechatCode * @param wechatCode wechatCode
* @return result
*/ */
@Action("registerUniformVerifyOrder") @Action("registerUniformVerifyOrder")
public Result registerUniformVerifyOrder(String idCardNo, String name, String wechatCode) { public Result registerUniformVerifyOrder(String idCardNo, String name, String wechatCode) {
@ -431,21 +421,23 @@ public class HealthCodeAction extends BaseAction {
if (idCardNo == null || name == null || wechatCode == null) { if (idCardNo == null || name == null || wechatCode == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数为空 return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数为空
} }
String orderId = new HCodeService().registerUniformVerifyOrder(idCardNo, name, wechatCode); String orderId = HCodeService.bindUniformVerifyOrder(idCardNo, name, wechatCode);
return ObjectUtils.isEmpty(orderId) ? Result.error() : Result.success(orderId); return ObjectUtils.isEmpty(orderId) ? Result.error() : Result.success(orderId);
} }
/** /**
* 实人认证结果查询接口 * 实人认证结果查询接口
* * @param qrCodeText 二维码编码 *
* @param orderId orderId
* @param registerOrderId registerOrderId
*/ */
@Action("checkUniformVerifyResult") @Action("checkUniformVerifyResult")
public Result checkUniformVerifyResult(String orderId, String registerOrderId) { public Result checkUniformVerifyResult(Boolean isMiniApp, String orderId, String registerOrderId) {
log.info("[电子健康卡]实人认证结果查询 orderId={}, registerOrderId={}", orderId, registerOrderId); log.info("[电子健康卡]实人认证结果查询 orderId={}, registerOrderId={}", orderId, registerOrderId);
if (orderId == null || registerOrderId == null) { if (orderId == null || registerOrderId == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数为空 return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数为空
} }
return Result.isOK(new HCodeService().checkUniformVerifyResult(orderId, registerOrderId)); return Result.isOK(HCodeService.checkUniformVerifyResult(isMiniApp, orderId, registerOrderId));
} }
@ -458,7 +450,7 @@ public class HealthCodeAction extends BaseAction {
List<Patient> lstPatient = new PatientDao().selectPatient4BatchUpdateHealthCard(); List<Patient> lstPatient = new PatientDao().selectPatient4BatchUpdateHealthCard();
JSONArray jsonArray = null; JSONArray jsonArray = null;
try { try {
jsonArray = new HCodeService().batchUpdate(lstPatient); jsonArray = HCodeService.batchUpdate(lstPatient);
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage()); log.error(e.getMessage());
} }
@ -475,4 +467,15 @@ public class HealthCodeAction extends BaseAction {
}, 2 * 1000, 30 * 1000); }, 2 * 1000, 30 * 1000);
} }
/**
* [电子健康卡]绑卡验证授权
*/
@Action("registerHealthCardPreAuth")
public Result registerHealthCardPreAuth(Boolean isMiniApp, String wechatCode, String healthCode, String openId) {
log.info("[电子健康卡]绑卡验证授权 isMiniApp={}, wechatCode={}, healthCode={}, openId={}", isMiniApp, wechatCode, healthCode, openId);
JSONObject result = HCodeService.registerHealthCardPreAuth(isMiniApp, WeChatConfig.getDomain(true), wechatCode, healthCode, openId);
return Result.success(result);
}
} }

@ -3,6 +3,7 @@ package com.ynxbd.common.action;
import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.Patient; import com.ynxbd.common.bean.Patient;
import com.ynxbd.common.bean.PatientLink; import com.ynxbd.common.bean.PatientLink;
import com.ynxbd.common.bean.User;
import com.ynxbd.common.bean.enums.HCardTypeEnum; import com.ynxbd.common.bean.enums.HCardTypeEnum;
import com.ynxbd.common.config.interceptor.AesDecode; import com.ynxbd.common.config.interceptor.AesDecode;
import com.ynxbd.common.dao.PatientDao; import com.ynxbd.common.dao.PatientDao;
@ -13,7 +14,8 @@ import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.result.ServiceException; import com.ynxbd.common.result.ServiceException;
import com.ynxbd.common.service.PatientService; import com.ynxbd.common.service.PatientService;
import com.ynxbd.wx.wxfactory.AesWxHelper; import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.WxCacheHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Action;
@ -31,19 +33,13 @@ public class PatientAction extends BaseAction {
*/ */
@Action("getHisInfoByPatientId") @Action("getHisInfoByPatientId")
public Result getHisInfoByPatientId(@AesDecode String patientId) { public Result getHisInfoByPatientId(@AesDecode String patientId) {
log.info("[患者]根据patientId查询HIS信息 patientId={}", patientId);
if (patientId == null) {
return Result.error(ResultEnum.PARAM_IS_BLANK);
}
try { try {
JsonResult jsonResult = new HisPatientDao().selectPatientInfo(patientId, "999"); log.info("[患者]根据patientId查询HIS信息 patientId={}", patientId);
if (!jsonResult.success()) { if (patientId == null) {
return Result.error(jsonResult.getMessage()); return Result.error(ResultEnum.PARAM_IS_BLANK);
}
Patient patient = jsonResult.dataMapToBean(Patient.class);
if (patient == null) {
return Result.error(ResultEnum.DATA_NOT_FOUND);
} }
Patient patient = new PatientService().queryPatientByPatientId(patientId);
String encode = Base64Helper.encode(patient, true); String encode = Base64Helper.encode(patient, true);
if (encode == null) { if (encode == null) {
return Result.error(); return Result.error();
@ -339,4 +335,26 @@ public class PatientAction extends BaseAction {
} }
} }
/**
* [患者]查询列表
*/
@Action("queryPatientList")
public Result queryPatientList(@AesDecode String openId, @AesDecode String hospAppId) {
log.info("[患者]查询列表 hospAppId={}, openId={}", hospAppId, openId);
if (openId == null || hospAppId == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
if (!hospAppId.equals(WeChatConfig.APP_ID)) {
return Result.error(ResultEnum.PARAM_IS_INVALID);
}
User user = WxCacheHelper.getCacheUser(openId);
List<Patient> patients;
if (user == null) {
patients = new PatientService().queryPatientList(request, openId, null, true);
} else {
patients = user.getPatientList();
}
return Result.success(patients);
}
} }

@ -1,7 +1,6 @@
package com.ynxbd.common.action; package com.ynxbd.common.action;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.ali.helper.AliUploadHelper; import com.ynxbd.ali.helper.AliUploadHelper;
import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.*; import com.ynxbd.common.bean.*;
@ -35,8 +34,6 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
@Namespace("/register") @Namespace("/register")
public class RegisterAction extends BaseAction { public class RegisterAction extends BaseAction {
/** /**
* [推送] 获取预约今日的所有患者openId * [推送] 获取预约今日的所有患者openId
* *
@ -507,9 +504,21 @@ public class RegisterAction extends BaseAction {
return Result.success(regList); return Result.success(regList);
} }
List<Patient> noRepeatPatients = new ArrayList<>();
for (Patient pItem : patients) {
String patientId = pItem.getPatientId();
if(ObjectUtils.isEmpty(patientId)){
continue;
}
Patient findItem = noRepeatPatients.stream().filter(o -> patientId.equals(o.getPatientId())).findFirst().orElse(null);
if (findItem == null) {
noRepeatPatients.add(pItem);
}
}
List<String> treatNumList = new ArrayList<>(); List<String> treatNumList = new ArrayList<>();
String curDate = DateHelper.getCurDate(); String curDate = DateHelper.getCurDate();
for (Patient pItem : patients) { for (Patient pItem : noRepeatPatients) {
String patientId = pItem.getPatientId(); String patientId = pItem.getPatientId();
List<Register> hisWaitRegRecords = new RegService().getHisWaitRegRecords(patientId); List<Register> hisWaitRegRecords = new RegService().getHisWaitRegRecords(patientId);
if (hisWaitRegRecords != null && !hisWaitRegRecords.isEmpty()) { if (hisWaitRegRecords != null && !hisWaitRegRecords.isEmpty()) {

@ -3,6 +3,7 @@ package com.ynxbd.common.action.auth;
import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.result.Result; import com.ynxbd.common.result.Result;
import com.ynxbd.wx.wxfactory.WxAuthHelper; import com.ynxbd.wx.wxfactory.WxAuthHelper;
import com.ynxbd.wx.wxfactory.WxMiniHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
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;
@ -34,4 +35,10 @@ public class WxAuthAction extends BaseAction {
// 支付使用普通授权 // 支付使用普通授权
return WxAuthHelper.isAuth(request, response); return WxAuthHelper.isAuth(request, response);
} }
@Action("mini_auth")
public Result mini_auth(String jsCode) {
String auth = WxMiniHelper.auth(jsCode);
return Result.success();
}
} }

@ -1,24 +1,25 @@
package com.ynxbd.common.action.weihu; package com.ynxbd.common.action.weihu;
import com.ynxbd.common.bean.pay.Order;
import com.ynxbd.common.dao.RecipeDao;
import com.ynxbd.common.result.Result; import com.ynxbd.common.result.Result;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
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;
import java.util.List;
@Slf4j @Slf4j
@Namespace("/data_wh") @Namespace("/data_wh")
public class DataWHAction { public class DataWHAction {
@Action("getData") @Action("getData")
public Result getData(String callNo) { public Result getData() {
String begTime = "2025-10-27"; String begDate = "2025-10-27";
String endTime = "2025-12-08"; String endDate = "2025-12-08";
return Result.success();
}
@Action("wh")
public Result wh() {
return Result.success(); return Result.success();
} }

@ -1,10 +1,13 @@
package com.ynxbd.common.bean; package com.ynxbd.common.bean;
import com.ynxbd.common.bean.enums.HCardTypeEnum; import com.ynxbd.common.bean.enums.HCardTypeEnum;
import com.ynxbd.common.helper.common.ParamHelper;
import com.ynxbd.wx.wxfactory.AesWxHelper;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import lombok.ToString; import lombok.ToString;
import org.apache.commons.lang3.ObjectUtils;
import java.io.Serializable; import java.io.Serializable;
@ -50,7 +53,7 @@ public class Patient implements Serializable {
private String county; private String county;
// 支付宝认证令牌 // 支付宝认证令牌
private String accessToken; private String accessToken;
//
private String accessCode; private String accessCode;
// //
private String updateTime; private String updateTime;
@ -81,29 +84,62 @@ public class Patient implements Serializable {
private String gmcUniqueId; private String gmcUniqueId;
// 子公众号的AppId // 子公众号的AppId
private String hospAppId; private String hospAppId;
// 医共体HIS患者Id
private String gmcHisPatientId;
// //
private Integer gmcBindState; private Integer gmcBindState;
// 认证加密openid // 认证加密openid
private String enUnionId; private String enUnionId;
private String enOpenId; private String enOpenId;
private String enGmcOpenId; private String enGmcOpenId;
private String enHospAppId; private String enHospAppId;
// BindingFlag:值为1时,说明患者尚未绑定或建档
private String bindingFlag;
private HCardTypeEnum cardTypeEnum; private HCardTypeEnum cardTypeEnum;
// HIS绑定
public boolean hasHisBind() {
return "1".equals(this.bindingFlag);
}
// 清除监护人信息 // 清除监护人信息
public void clearGuardianData() { public void clearGuardianData() {
this.fatherName = null; this.fatherName = null;
this.fatherIdCardNo = null; this.fatherIdCardNo = null;
this.fatherTel = null; this.fatherTel = null;
//
this.motherName = null; this.motherName = null;
this.motherIdCardNo = null; this.motherIdCardNo = null;
this.motherTel = null; this.motherTel = null;
} }
/**
* 数据过滤
*
* @param isClearCardNoAndTel 是否清除证件号和电话
*/
public void filterData(boolean isClearCardNoAndTel) {
boolean noneCardNo = ObjectUtils.isEmpty(this.idCardNo); // 无证件号
// 患者ID
this.enPatientId = AesWxHelper.encode(this.patientId, true);
// 身份证
this.showCardNo = ParamHelper.hideIdCardNo(this.idCardNo);
this.enCardNo = AesWxHelper.encode(this.idCardNo, true);
// 电话
this.showTel = ParamHelper.hideTel(this.tel);
this.enTel = AesWxHelper.encode(this.tel, true);
if (noneCardNo) { // 无证绑定数据显示过滤
this.fatherIdCardNo = ParamHelper.hideIdCardNo(this.fatherIdCardNo);
this.fatherTel = ParamHelper.hideTel(this.fatherTel);
this.motherIdCardNo = ParamHelper.hideIdCardNo(this.motherIdCardNo);
this.motherTel = ParamHelper.hideTel(this.motherTel);
}
if (isClearCardNoAndTel) {
this.tel = null;
this.idCardNo = null;
}
}
} }

@ -1,6 +1,7 @@
package com.ynxbd.common.bean.enums; package com.ynxbd.common.bean.enums;
import lombok.ToString; import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
/** /**
* 微信电子健康卡异常信息 * 微信电子健康卡异常信息
@ -9,6 +10,7 @@ import lombok.ToString;
* @Date 2020/10/13 11:45 * @Date 2020/10/13 11:45
* @Copyright @ 2020 云南新八达科技有限公司 All rights reserved. * @Copyright @ 2020 云南新八达科技有限公司 All rights reserved.
*/ */
@Slf4j
@ToString @ToString
public enum HealthCardRespCodeEnum { public enum HealthCardRespCodeEnum {
// 自定义 // 自定义
@ -121,4 +123,27 @@ public enum HealthCardRespCodeEnum {
this.IS_RESULT = IS_RESULT; this.IS_RESULT = IS_RESULT;
this.IS_CONTINUE = IS_CONTINUE; this.IS_CONTINUE = IS_CONTINUE;
} }
/**
* 响应码处理
*
* @param resultCode 响应码
* @return 返回响应码对应的消息
*/
public static HealthCardRespCodeEnum findEnumByResultCode(String resultCode) {
HealthCardRespCodeEnum respEnum = HealthCardRespCodeEnum.CONTINUE;
for (HealthCardRespCodeEnum e : HealthCardRespCodeEnum.values()) {
if (e.STATUS.equals(resultCode)) {
if (e.IS_RESULT) { // 是否返回枚举中的信息
respEnum = e;
} else {
log.info("[电子健康卡]异常信息:{}", e.MESSAGE);
respEnum = e.IS_CONTINUE ? HealthCardRespCodeEnum.CONTINUE : e;
}
break;
}
}
return respEnum;
}
} }

@ -0,0 +1,37 @@
package com.ynxbd.common.bean.enums;
// 查报告等需要验证的场景
import lombok.ToString;
@ToString
public enum HealthCardSceneEnum {
_0101081("0101081", "查(取)检查报告"),
_0101082("0101082", "查(取)检验报告"),
_0101083("0101083", "查(取)体检报告"),
_010108("010108", "查询就医记录"),
_010101("010101", "挂号"),
_0101011("0101011", "预约挂号"),
_0101012("0101012", "当日挂号"),
_0101013("0101013", "挂号记录"),
_01010116("01010116", "预约社区挂号"),
_02010184("02010184", "健康码出示查验"),
_0201017("0201017", "家庭医生服务"),
_0201091("0201091", "健康档案"),
_0201032("0201032", "疫苗接种记录"),
_02010322("02010322", "疫苗接种核验"),
_0101023("0101023", "病历查询与打印"),
;
public final String CODE;
public final String NAME;
HealthCardSceneEnum(String CODE, String NAME) {
this.CODE = CODE;
this.NAME = NAME;
}
}

@ -169,7 +169,7 @@ public class Order implements Serializable {
if (!ObjectUtils.isEmpty(_tel)) { if (!ObjectUtils.isEmpty(_tel)) {
this.tel = null; this.tel = null;
this.enTel = AesWxHelper.encode(_tel); this.enTel = AesWxHelper.encode(_tel);
this.showTel = ParamHelper.hidTel(_tel); this.showTel = ParamHelper.hideTel(_tel);
} }
if (!ObjectUtils.isEmpty(this.patientId)) { if (!ObjectUtils.isEmpty(this.patientId)) {

@ -147,6 +147,7 @@ public class Register extends Order {
patientId, deptCode, doctCode, regCode, regDate, tid); patientId, deptCode, doctCode, regCode, regDate, tid);
throw new ServiceException(ResultEnum.PARAM_IS_DEFECT); throw new ServiceException(ResultEnum.PARAM_IS_DEFECT);
} }
System.out.println("[挂号]证件号码:" + cardNo); // 此处打印不存日志
if (payMoney == null || totalFee == null) { if (payMoney == null || totalFee == null) {
log.info("[挂号]参数缺失 payMoney"); log.info("[挂号]参数缺失 payMoney");

@ -135,11 +135,13 @@ public class MethodInterceptor extends org.apache.struts2.interceptor.AbstractIn
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
if (e.getMessage() == null) { if (e.getMessage() == null) {
System.out.println("异常1");
Throwable cause = e.getCause(); Throwable cause = e.getCause();
if (cause != null) { if (cause != null) {
ErrorHelper.println((Exception) cause); ErrorHelper.println((Exception) cause);
} }
} else { } else {
System.out.println("异常2");
ErrorHelper.println(e); ErrorHelper.println(e);
} }
return "SUCCESS"; return "SUCCESS";

@ -21,13 +21,13 @@ public class GMCUserDao {
/** /**
* 添加关系 * 添加关系
*/ */
public boolean insert(String wxOpenId, String gmcOpenId, String gmcUnionId, String gmcUUId) { public boolean insert(String wxOpenId, String gmcOpenId, String gmcUnionId, String gmcUniqueId) {
String sql = "insert into gmc_user(updateTime, wxOpenId, gmcOpenId, gmcUnionId, gmcUUId, childAppId) values (now(),?,?,?,?)"; String sql = "insert into gmc_user(updateTime, wxOpenId, gmcOpenId, gmcUnionId, gmcUniqueId) values (now(),?,?,?,?)";
return DataBase.insert(sql, ps -> { return DataBase.insert(sql, ps -> {
ps.setString(1, wxOpenId); ps.setString(1, wxOpenId);
ps.setString(2, gmcOpenId); ps.setString(2, gmcOpenId);
ps.setString(3, gmcUnionId); ps.setString(3, gmcUnionId);
ps.setString(4, gmcUUId); ps.setString(4, gmcUniqueId);
}) > 0; }) > 0;
} }
} }

@ -100,7 +100,7 @@ public class PatientDao {
ps.setString(1, openid); ps.setString(1, openid);
ps.setString(2, idCardNo); ps.setString(2, idCardNo);
}); });
return resultList.size() > 0 ? resultList.get(0) : null; return !resultList.isEmpty() ? resultList.get(0) : null;
} }
/** /**
@ -154,7 +154,7 @@ public class PatientDao {
* @return 患者信息 * @return 患者信息
*/ */
public List<Patient> selectPatientsByOpenId(String openId) { public List<Patient> selectPatientsByOpenId(String openId) {
String sql = "select patientId, name, sex, birthday, idCardNo, tel from patientBase where openId= ? and deletedState = 0 order by isDefault desc"; String sql = "select patientId, name, sex, birthday, idCardNo, tel from patientBase where openId= ? and deletedState = 0 order by isDefault desc, id asc";
return DataBase.select(sql, Patient.class, ps -> { return DataBase.select(sql, Patient.class, ps -> {
ps.setString(1, openId); ps.setString(1, openId);
}); });
@ -168,7 +168,7 @@ public class PatientDao {
* @return 是否成功 * @return 是否成功
*/ */
public boolean removePatient(String openid, String patientId) { public boolean removePatient(String openid, String patientId) {
String sql = "update patientBase set updateTime=now(), deletedState=1 where openid=? and patientId=?"; String sql = "update patientBase set updateTime=now(), age=null, deletedState=1 where openid=? and patientId=?";
return DataBase.update(sql, ps -> { return DataBase.update(sql, ps -> {
ps.setString(1, openid); ps.setString(1, openid);
ps.setString(2, patientId); ps.setString(2, patientId);
@ -183,12 +183,10 @@ public class PatientDao {
* @return 是否成功 * @return 是否成功
*/ */
public boolean updateInfo(Patient bindInfo) { public boolean updateInfo(Patient bindInfo) {
String sql = "update patientBase set deletedState=0, healthCardId=?, name=?, nation=?, tel=?, address=?, uuid=?, areaCode=?, areaAddress=?, patientId=?, gmcHisPatientId=?, gmcBindState=1, " + String sql = "update patientBase set deletedState=0, healthCardId=?, name=?, nation=?, tel=?, address=?, uuid=?, areaCode=?, areaAddress=?, patientId=?, " +
" uniqueId=if(uniqueId is null or uniqueId = '', ?, uniqueId), " + " uniqueId=if(uniqueId is null or uniqueId = '', ?, uniqueId), " +
" gmcUniqueId=if(gmcUniqueId is null or gmcUniqueId = '', ?, gmcUniqueId), " + " gmcUniqueId=if(gmcUniqueId is null or gmcUniqueId = '', ?, gmcUniqueId) " +
" hospAppId=if(hospAppId is null or hospAppId = '', ?, hospAppId) " +
" where openid=? and idCardNo=?"; " where openid=? and idCardNo=?";
return DataBase.update(sql, ps -> { return DataBase.update(sql, ps -> {
ps.setString(1, bindInfo.getHealthCardId()); ps.setString(1, bindInfo.getHealthCardId());
ps.setString(2, bindInfo.getName()); ps.setString(2, bindInfo.getName());
@ -199,13 +197,11 @@ public class PatientDao {
ps.setString(7, bindInfo.getAreaCode()); ps.setString(7, bindInfo.getAreaCode());
ps.setString(8, bindInfo.getAreaAddress()); ps.setString(8, bindInfo.getAreaAddress());
ps.setString(9, bindInfo.getPatientId()); ps.setString(9, bindInfo.getPatientId());
ps.setString(10, bindInfo.getGmcHisPatientId()); ps.setString(10, CodeHelper.get32UUID());
ps.setString(11, CodeHelper.get32UUID()); ps.setString(11, bindInfo.getGmcUniqueId());
ps.setString(12, bindInfo.getGmcUniqueId());
ps.setString(13, bindInfo.getHospAppId());
// 条件 // 条件
ps.setString(14, bindInfo.getOpenid()); ps.setString(12, bindInfo.getOpenid());
ps.setString(15, bindInfo.getIdCardNo()); ps.setString(13, bindInfo.getIdCardNo());
}) > 0; }) > 0;
} }
@ -227,8 +223,8 @@ public class PatientDao {
* @return bool * @return bool
*/ */
public boolean insert(boolean isMyself, Patient bindData) { public boolean insert(boolean isMyself, Patient bindData) {
String sql = "insert into patientBase(bindDate, openid, patientId, hisTransNo, name, sex, idCardNo, tel, birthday, nation, healthCardId, age, uuid, fatherName, fatherTel, fatherIDCardNo, motherName, motherTel, motherIDCardNo, address, areaCode, areaAddress, isMyself, cardType, unionId, hospAppId, gmcUniqueId, gmcHisPatientId, gmcBindState, uniqueId) " + String sql = "insert into patientBase(bindDate, openid, patientId, hisTransNo, name, sex, idCardNo, tel, birthday, nation, healthCardId, age, uuid, fatherName, fatherTel, fatherIDCardNo, motherName, motherTel, motherIDCardNo, address, areaCode, areaAddress, isMyself, cardType, unionId, hospAppId, gmcUniqueId, uniqueId) " +
" values(now(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; " values(now(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
HCardTypeEnum cardTypeEnum = bindData.getCardTypeEnum(); HCardTypeEnum cardTypeEnum = bindData.getCardTypeEnum();
@ -261,9 +257,7 @@ public class PatientDao {
ps.setString(24, bindData.getUnionId()); ps.setString(24, bindData.getUnionId());
ps.setString(25, bindData.getHospAppId()); ps.setString(25, bindData.getHospAppId());
ps.setString(26, bindData.getGmcUniqueId()); ps.setString(26, bindData.getGmcUniqueId());
ps.setString(27, bindData.getGmcHisPatientId()); ps.setString(27, CodeHelper.get32UUID());
ps.setInt(28, bindData.getGmcBindState());
ps.setString(29, CodeHelper.get32UUID());
}) > 0; }) > 0;
} }

@ -24,7 +24,6 @@ import java.util.UUID;
@Slf4j @Slf4j
public class HisPatientDao { public class HisPatientDao {
/** /**
* HIS身份绑定 * HIS身份绑定
* *
@ -110,9 +109,20 @@ public class HisPatientDao {
params.put("CardNo", idCardNo); params.put("CardNo", idCardNo);
params.put("CardType", cardType); params.put("CardType", cardType);
params.put("TransNo", UUID.randomUUID().toString().replace("-", "")); params.put("TransNo", UUID.randomUUID().toString().replace("-", ""));
return HisHelper.getJsonResult(HisEnum.AP_UnBinding_Card, params); return HisHelper.getJsonResult(HisEnum.AP_UnBinding_Card, params);
}
/**
* [患者]根据患者id查询信息
*
* @param patientId 患者id
* @return hisResult
*/
public JsonResult queryPatientByPatientId(String patientId) throws ServiceException {
if (StringUtils.isEmpty(patientId)) {
throw new ServiceException(ResultEnum.PARAM_IS_DEFECT);
}
return queryPatientInfo(patientId, "999");
} }
/** /**
@ -122,7 +132,7 @@ public class HisPatientDao {
* @param cardType 类型 {0身份证 1健康卡999患者ID(PatientId) 此步骤对于已经获得PatientId 需要查询患者信息的情景} * @param cardType 类型 {0身份证 1健康卡999患者ID(PatientId) 此步骤对于已经获得PatientId 需要查询患者信息的情景}
* @return hisResult * @return hisResult
*/ */
public JsonResult selectPatientInfo(String cardNo, String cardType) throws ServiceException { public JsonResult queryPatientInfo(String cardNo, String cardType) throws ServiceException {
if (StringUtils.isEmpty(cardNo) || cardType == null) { if (StringUtils.isEmpty(cardNo) || cardType == null) {
throw new ServiceException(ResultEnum.PARAM_IS_DEFECT); throw new ServiceException(ResultEnum.PARAM_IS_DEFECT);
} }
@ -130,7 +140,6 @@ public class HisPatientDao {
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
params.put("CardNo", cardNo); params.put("CardNo", cardNo);
params.put("CardType", cardType); params.put("CardType", cardType);
return HisHelper.getJsonResult(HisEnum.AP_Query_Patient, params); return HisHelper.getJsonResult(HisEnum.AP_Query_Patient, params);
} }

@ -1,5 +1,6 @@
package com.ynxbd.common.helper.common; package com.ynxbd.common.helper.common;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType; import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.pdfbox.rendering.PDFRenderer;
@ -11,7 +12,6 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.UUID; import java.util.UUID;
/** /**
@ -69,7 +69,9 @@ public class Base64Helper {
* @return 加密后的字符串 * @return 加密后的字符串
*/ */
public static String encode(Object obj, Boolean isEncryption) { public static String encode(Object obj, Boolean isEncryption) {
if (obj == null) return null; if (obj == null) {
return null;
}
String encode; String encode;
if (obj.getClass() != String.class) { if (obj.getClass() != String.class) {
encode = JsonHelper.toJsonString(obj); encode = JsonHelper.toJsonString(obj);
@ -77,7 +79,7 @@ public class Base64Helper {
encode = obj.toString(); encode = obj.toString();
} }
if ("".equals(encode)) { if (ObjectUtils.isEmpty(encode)) {
return null; return null;
} }

@ -168,7 +168,7 @@ public class ParamHelper {
} }
public static String hidTel(String tel) { public static String hideTel(String tel) {
if (ObjectUtils.isEmpty(tel)) { if (ObjectUtils.isEmpty(tel)) {
return null; return null;
} }

@ -1,10 +1,13 @@
package com.ynxbd.common.helper.common; package com.ynxbd.common.helper.common;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import java.net.URLEncoder;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Slf4j
public class URLHelper { public class URLHelper {
@FunctionalInterface @FunctionalInterface
@ -36,6 +39,27 @@ public class URLHelper {
return (isPrefix ? "?" : "") + sb; return (isPrefix ? "?" : "") + sb;
} }
/**
* map转url
*
* @param paramsMap paramsMap
* @param isPrefix 是否有前缀
* @return string
*/
public static String mapParamsToUrl(Map<String, Object> paramsMap, boolean isPrefix) {
if (paramsMap == null) {
return "";
}
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, Object> item : paramsMap.entrySet()) {
Object value = item.getValue();
sb.append("&").append(item.getKey()).append("=").append(value == null ? "" : value);
}
sb.replace(0, 1, "");
return (isPrefix ? "?" : "") + sb;
}
public static String URLToHttps(String url) { public static String URLToHttps(String url) {
if (ObjectUtils.isEmpty(url)) { if (ObjectUtils.isEmpty(url)) {
@ -48,4 +72,13 @@ public class URLHelper {
return url; return url;
} }
public static String encodeURL(String param) {
try {
URLEncoder.encode(param, "utf-8");
} catch (Exception e) {
log.error(e.getMessage());
}
return null;
}
} }

@ -3,7 +3,7 @@ package com.ynxbd.common.helper.his;
public enum HisEnum { public enum HisEnum {
AP_Query_Hospital("查询医院列表", "1", "AP_Query_Hospital", true), AP_Query_Hospital("查询医院列表", "1", "AP_Query_Hospital", true),
AP_Query_Patient("[患者]获取病人绑定信息", "1001", "AP_Query_Patient", true), AP_Query_Patient("[患者]获取用户绑定信息", "1001", "AP_Query_Patient", true),
AP_Binding_Card("[患者]身份证绑定", "1002", "AP_Binding_Card", true), AP_Binding_Card("[患者]身份证绑定", "1002", "AP_Binding_Card", true),
AP_UnBinding_Card("[患者]身份证解绑", "1003", "AP_UnBinding_Card", true), AP_UnBinding_Card("[患者]身份证解绑", "1003", "AP_UnBinding_Card", true),

@ -92,7 +92,7 @@ public class HisHelper {
} }
/** /**
* HIS订单号 * 生成HIS订单号
*/ */
public static List<Order> getHisTradeNo(String prefix, List<Long> ids, PEnum pEnum) { public static List<Order> getHisTradeNo(String prefix, List<Long> ids, PEnum pEnum) {
if (pEnum == null) { if (pEnum == null) {
@ -102,7 +102,7 @@ public class HisHelper {
} }
/** /**
* HIS订单号 * 生成HIS订单号
*/ */
public static String getHisTradeNo(String prefix, PEnum pEnum) { public static String getHisTradeNo(String prefix, PEnum pEnum) {
if (pEnum == null) { if (pEnum == null) {

@ -7,6 +7,7 @@ import com.ynxbd.common.bean.ai.AIDoctor;
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;
import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.helper.common.DateHelper;
import com.ynxbd.common.helper.common.URLHelper;
import com.ynxbd.common.result.Result; import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.wx.config.AIGuidanceConfig; import com.ynxbd.wx.config.AIGuidanceConfig;
@ -81,7 +82,7 @@ public class AIGuidanceService {
} }
String curDate = DateHelper.getCurDate(); String curDate = DateHelper.getCurDate();
List<Dept> deptList = new HisRegisterDao().getTimeDeptList(curDate, DateHelper.getMoveDate(curDate, 7),""); List<Dept> deptList = new HisRegisterDao().getTimeDeptList(curDate, DateHelper.getMoveDate(curDate, 7), "");
String webReqURL = WeChatConfig.getWebReqURL(true); String webReqURL = WeChatConfig.getWebReqURL(true);
String deptName; String deptName;
@ -107,7 +108,7 @@ public class AIGuidanceService {
item.setDeptEmbedAlipayUrl(""); item.setDeptEmbedAlipayUrl("");
try { try {
item.setDeptUrl(webReqURL + "reg-reserve.html#/doctor?deptCode=" + dept.getDeptCode() + "&deptName=" + URLEncoder.encode(deptName, "utf-8") + "&hospitalArea="); item.setDeptUrl(webReqURL + "reg-reserve.html#/reg-doctor?deptCode=" + dept.getDeptCode() + "&deptName=" + URLHelper.encodeURL(deptName) + "&hospitalArea=");
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage()); log.error(e.getMessage());
item.setDeptUrl(""); item.setDeptUrl("");
@ -117,6 +118,7 @@ public class AIGuidanceService {
return Result.success(ResultEnum.AI_SUCCESS, resultList); return Result.success(ResultEnum.AI_SUCCESS, resultList);
} }
/** /**
* [医生列表] * [医生列表]
* *
@ -145,7 +147,6 @@ public class AIGuidanceService {
RegisterDao registerDao = new RegisterDao(); RegisterDao registerDao = new RegisterDao();
List<Dept> wxDeptList = registerDao.selectDeptList(); List<Dept> wxDeptList = registerDao.selectDeptList();
String domain = WeChatConfig.getDomain(true); String domain = WeChatConfig.getDomain(true);
String deptName, deptCode, headImg, doctCode; String deptName, deptCode, headImg, doctCode;
Dept dept; Dept dept;
@ -188,7 +189,16 @@ public class AIGuidanceService {
} }
try { try {
item.setDoctorUrl(webReqURL + "reg-reserve.html#/source?deptCode=" + deptCode + "&deptName=" + URLEncoder.encode(deptName, "utf-8") + "&doctName=" + URLEncoder.encode(doctor.getDoctName(), "utf-8") + "&doctCode=" + doctor.getDoctCode() + "&hospitalArea="); //reg-doct-source?date=2026-03-02&deptCode=0501&doctCode=1477&subDeptCode=0001&deptName=%25E5%25A6%2587%25E7%25A7%2591-%25E5%25A6%2587%25E7%25A7%2591%25E6%2599%25AE%25E9%2580%259A%25E9%2597%25A8%25E8%25AF%258A&doctName=%25E6%2598%258E%25E6%25BB%25A1%25E6%25B1%259F&hospitalArea=
Map<String, Object> map = new HashMap<>();
map.put("date", DateHelper.getCurDate());
map.put("deptCode", deptCode);
map.put("deptName", URLHelper.encodeURL(deptName));
map.put("doctName", URLHelper.encodeURL(doctor.getDoctName()));
map.put("doctCode", doctor.getDoctCode());
map.put("subDeptCode", "");
map.put("hospitalArea", "");
item.setDoctorUrl(webReqURL + "reg-reserve.html#/reg-doct-source" + URLHelper.mapParamsToUrl(map, true));
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage()); log.error(e.getMessage());
item.setDoctorUrl(""); item.setDoctorUrl("");

@ -0,0 +1,205 @@
package com.ynxbd.common.service;
import com.ynxbd.common.bean.Patient;
import com.ynxbd.common.helper.common.CodeHelper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.helper.http.OkHttpHelper;
import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.JsonResultEnum;
import com.ynxbd.common.result.ServiceException;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.AesWxHelper;
import com.ynxbd.wx.wxfactory.WxAuthHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
@Slf4j
public class GMCService {
public List<Patient> queryGmcPatientList(HttpServletRequest request, String openId, String unionId) {
try {
if (WeChatConfig.IS_ENABLE_GMC && !WeChatConfig.IS_GMC_SERVER) { // 开启医共体服务 & 不为医共体主体
return new ArrayList<>();
}
if (ObjectUtils.isEmpty(openId)) {
return new ArrayList<>();
}
JsonResult jsonResult = postFormGMC(request, "/patient/queryPatientList", params -> {
params.put("openId", openId);
params.put("hospAppId", AesWxHelper.encode(WeChatConfig.GMC_APP_ID));
}, null);
if (!jsonResult.success()) {
return new ArrayList<>();
}
List<Patient> data = jsonResult.getDataMapList(Patient.class, "data");
System.out.println(JsonHelper.toJsonString(data));
return data;
} catch (Exception e) {
log.error(e.getMessage());
}
return new ArrayList<>();
}
/**
* 医共体绑定
*
* @param request request
* @param bindInfo 绑定信息
*/
public Patient bindGmcServer(HttpServletRequest request, Patient bindInfo) throws ServiceException {
if (!WeChatConfig.IS_ENABLE_GMC) { // 未开启医共体开关
return bindInfo;
}
// String openid = bindInfo.getOpenid();
// String hospAppId = AesWxHelper.decode(bindInfo.getEnHospAppId());
// if (ObjectUtils.isEmpty(hospAppId)) {
// throw new ServiceException("医共体子公众号id参数错误");
// }
String gmcUniqueId;
if (WeChatConfig.IS_GMC_SERVER) { // 是医共体主服务器
// if (!WeChatConfig.APP_ID.equals(hospAppId)) { // 不为自身AppId
// bindInfo.setHospAppId(hospAppId); // 需存的数据
// }
bindInfo.setGmcUniqueId(CodeHelper.get32UUID());
return bindInfo;
}
String enGmcOpenId = bindInfo.getEnGmcOpenId(); // 只有子服务器有主服务器的openId
String gmcOpenId = AesWxHelper.decode(enGmcOpenId);
log.info("[转发]enGmcOpenId={}, gmcOpenId={}", enGmcOpenId, gmcOpenId);
if (ObjectUtils.isEmpty(gmcOpenId)) {
throw new ServiceException("医共体非主体公众号ID参数异常");
}
JsonResult jsonResult = postFormGMC(request, "/healthCode/bind", params -> {
params.put("isAreaCode", false);
params.put("isFace", false);
params.put("isHealthCard", false);
params.put("openid", gmcOpenId); // 主服务器的openId
params.put("address", bindInfo.getAddress());
params.put("areaCode", bindInfo.getAreaCode());
params.put("areaAddress", bindInfo.getAreaAddress());
params.put("tel", bindInfo.getTel());
params.put("sex", bindInfo.getSex());
params.put("name", bindInfo.getName());
params.put("nation", bindInfo.getNation());
params.put("birthday", bindInfo.getBirthday());
params.put("idCardNo", bindInfo.getIdCardNo());
params.put("enOpenId", enGmcOpenId);
params.put("enUnionId", bindInfo.getEnUnionId());
params.put("hospAppId", WeChatConfig.APP_ID);
}, null);
if (!jsonResult.success()) {
throw new ServiceException(jsonResult.getMessage());
}
log.info("[医供体]绑定转发 resp={}", JsonHelper.toJsonString(jsonResult));
// JSONObject dataJson = jsonResult.dataMapGetNodeToJsonObj();
// gmcUniqueId = dataJson.getString("gmcUniqueId");
// if (ObjectUtils.isEmpty(gmcUniqueId)) {
// throw new ServiceException("医共体返回唯一id为空");
// }
// bindInfo.setGmcUniqueId(gmcUniqueId);
// if (!enGmcOpenId.equals(dataJson.getString("enOpenId"))) {
// throw new ServiceException("医共体主体openId不匹配");
// }
return bindInfo;
}
public static JsonResult postForm(String url, OkHttpHelper.MapParams params, OkHttpHelper.Header header) {
return OkHttpHelper.postForm(url, params, header, JsonResultEnum.SYS_COMMON);
}
public static JsonResult postFormGMC(HttpServletRequest request, String api, OkHttpHelper.MapParams params, OkHttpHelper.Header header) {
String url = WeChatConfig.getGMCAuthDomain(WxAuthHelper.isHttpsWithProxy(request), true); // 医共体请求服务地址
return OkHttpHelper.postForm((url + api), params, header, JsonResultEnum.SYS_COMMON);
}
public List<Patient> updatePatientList(String openId){
return new ArrayList<>();
}
// public Patient queryGmcPatientList(HttpServletRequest request, Patient bindInfo) throws ServiceException {
// if (!WeChatConfig.IS_ENABLE_GMC) { // 不为医共体主体
// return bindInfo;
// }
// String openid = bindInfo.getOpenid();
// String hospAppId = AesWxHelper.decode(bindInfo.getEnHospAppId());
// if (ObjectUtils.isEmpty(hospAppId)) {
// throw new ServiceException("医共体子公众号id参数错误");
// }
//
// String gmcUniqueId;
// if (WeChatConfig.IS_GMC_SERVER) { // 是医共体主服务器
// if (!WeChatConfig.APP_ID.equals(hospAppId)) { // 不为自身AppId
// bindInfo.setHospAppId(hospAppId); // 需存的数据
// }
// bindInfo.setGmcUniqueId(CodeHelper.get32UUID());
//
// } else {
// String enGmcOpenId = bindInfo.getEnGmcOpenId(); // 只有子公众号有
// String gmcOpenId = AesWxHelper.decode(enGmcOpenId);
//
// log.info("[转发]enGmcOpenId={}, gmcOpenId={}", enGmcOpenId, gmcOpenId);
// if (ObjectUtils.isEmpty(gmcOpenId)) {
// throw new ServiceException("医共体非主体公众号ID参数异常");
// }
//
// JsonResult jsonResult = WxAuthHelper.postFormGMC(request, "/patient/bind", params -> {
// params.put("isAreaCode", false);
// params.put("isFace", false);
// params.put("isHealthCard", false);
//
// params.put("openid", gmcOpenId); // 主体的openid
// params.put("address", bindInfo.getAddress());
// params.put("areaCode", bindInfo.getAreaCode());
// params.put("areaAddress", bindInfo.getAreaAddress());
// params.put("tel", bindInfo.getTel());
// params.put("sex", bindInfo.getSex());
// params.put("name", bindInfo.getName());
// params.put("nation", bindInfo.getNation());
// params.put("birthday", bindInfo.getBirthday());
// params.put("idCardNo", bindInfo.getIdCardNo());
// //
// params.put("enOpenId", enGmcOpenId);
// params.put("enUnionId", bindInfo.getEnUnionId());
// params.put("enGmcOpenId", enGmcOpenId);
// params.put("enHospAppId", AesWxHelper.encode(WeChatConfig.APP_ID));
// }, null);
// if (!jsonResult.success()) {
// throw new ServiceException(jsonResult.getMessage());
// }
// log.info("[绑定转发]resp={}", JsonHelper.toJsonString(jsonResult));
//
// JSONObject dataJson = jsonResult.dataMapGetNodeToJsonObj();
// gmcUniqueId = dataJson.getString("gmcUniqueId");
// if (ObjectUtils.isEmpty(gmcUniqueId)) {
// throw new ServiceException("医共体返回唯一id为空");
// }
// bindInfo.setGmcUniqueId(gmcUniqueId);
// if (!enGmcOpenId.equals(dataJson.getString("enOpenId"))) {
// throw new ServiceException("医共体主体openId不匹配");
// }
//
// GMCUser findGMCUser = new GMCUserService().queryInfoByOpenId(openid);
// if (findGMCUser == null) {
// boolean isOK = new GMCUserService().addInfo(openid, gmcOpenId, bindInfo.getUnionId(), gmcUniqueId);
// if (!isOK) {
// log.error("[医共体关系]添加失败 openid={}, gmcOpenId={}, uuid={}", openid, gmcOpenId, gmcUniqueId);
// }
// }
// }
// return bindInfo;
// }
}

@ -1,7 +1,10 @@
package com.ynxbd.common.service; package com.ynxbd.common.service;
import com.ynxbd.common.bean.GMCUser; import com.ynxbd.common.bean.GMCUser;
import com.ynxbd.common.bean.User;
import com.ynxbd.common.dao.GMCUserDao; import com.ynxbd.common.dao.GMCUserDao;
import com.ynxbd.common.helper.common.ErrorHelper;
import com.ynxbd.wx.wxfactory.WxCacheHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
@ -16,18 +19,23 @@ public class GMCUserService {
} }
/** /**
* 添加用户关系 * 添加主体关联
*/ */
public boolean addInfo(String wxOpenId, String gmcOpenId, String gmcUnionId, String gmcUUId) { public void addInfo(String wxOpenId, String gmcOpenId, String gmcUnionId, String gmcUUId) {
try { try {
if (ObjectUtils.isEmpty(wxOpenId) || ObjectUtils.isEmpty(gmcOpenId) || ObjectUtils.isEmpty(gmcUUId)) { if (ObjectUtils.isEmpty(wxOpenId) || ObjectUtils.isEmpty(gmcOpenId) || ObjectUtils.isEmpty(gmcUUId)) {
return false; return;
}
GMCUser findInfo = queryInfoByOpenId(wxOpenId);
if (findInfo != null) {
return;
} }
boolean isOK = new GMCUserDao().insert(wxOpenId, gmcOpenId, gmcUnionId, gmcUUId); boolean isOK = new GMCUserDao().insert(wxOpenId, gmcOpenId, gmcUnionId, gmcUUId);
log.info("[认证联系]添加{} wxOpenId={}, gmcOpenId={}, gmcUUId={}", (isOK ? "成功" : "失败"), wxOpenId, gmcOpenId, gmcUUId); log.info("[认证联系]添加{} wxOpenId={}, gmcOpenId={}, gmcUUId={}", (isOK ? "成功" : "失败"), wxOpenId, gmcOpenId, gmcUUId);
return isOK;
} catch (Exception e) { } catch (Exception e) {
return false; ErrorHelper.println(e);
} }
} }
} }

File diff suppressed because it is too large Load Diff

@ -0,0 +1,159 @@
package com.ynxbd.common.service;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.bean.Patient;
import com.ynxbd.common.bean.enums.HealthCardEnum;
import com.ynxbd.common.dao.PatientDao;
import lombok.extern.slf4j.Slf4j;
import java.text.SimpleDateFormat;
import java.util.Date;
@Slf4j
public class HealthUploadService {
/**
* 健康卡数据上报-->挂号支付
*
* @param openid openid
* @param patientId 患者ID
* @param deptName 科室名
* @param regDate 挂号日期
*/
public void regPayReportHISData(String openid, String patientId, String deptName, String regDate) {
try {
if (!HCodeService.isEnableHCode()) { // 判断是否禁用电子健康卡
return;
}
if (deptName == null || openid == null || patientId == null || regDate == null) {
return;
}
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String today = format.format(new Date());
String scene = regDate.equals(today) ? HealthCardEnum.SCENE_REGISTER_SITE.STATUS : HealthCardEnum.SCENE_REGISTER_RESERVE.STATUS;
Patient patient = new PatientDao().selectByOpenidAndPatientId(openid, patientId);
if (patient == null) {
return;
}
String healthCardId = patient.getHealthCardId();
String idCardNo = patient.getIdCardNo();
if (healthCardId == null || idCardNo == null) {
return;
}
String qrCodeText = HCodeService.getQRCodeText(false, healthCardId, idCardNo);
if (qrCodeText == null) {
return;
}
JSONObject jsonObject = HCodeService.reportHISData(qrCodeText, deptName, scene, HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, HealthCardEnum.CARD_COST_TYPE_OWN_EXPENSE.STATUS);
if (jsonObject == null) {
log.info("[电子健康卡][挂号缴费]数据上报失败");
}
} catch (Exception e) {
log.error(e.getMessage());
}
}
/**
* 健康卡数据上报-->门诊缴费
*
* @param openid openid
* @param patientId patientId
*/
public void rxReportHISData(String openid, String patientId) {
try {
if (!HCodeService.isEnableHCode()) { // 判断是否禁用电子健康卡
return;
}
if (patientId == null || openid == null) {
return;
}
Patient patient = new PatientDao().selectByOpenidAndPatientId(openid, patientId);
if (patient == null) {
return;
}
String healthCardId = patient.getHealthCardId();
String idCardNo = patient.getIdCardNo();
if (healthCardId == null || idCardNo == null) {
return;
}
String qrCodeText = HCodeService.getQRCodeText(false, healthCardId, idCardNo);
if (qrCodeText == null) {
return;
}
JSONObject jsonObject = HCodeService.reportHISData(qrCodeText, null, HealthCardEnum.SCENE_TOLL_OUTPATIENT_PAYMENT.STATUS, HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, HealthCardEnum.CARD_COST_TYPE_OWN_EXPENSE.STATUS);
if (jsonObject == null) {
log.info("[电子健康卡][门诊缴费]数据上报失败");
}
} catch (Exception e) {
log.error(e.getMessage());
}
}
// public static Patient appBindHealthCard(String healthCode) {
// if (healthCode == null) {
// return null;
// }
// String appToken = getAppToken();
// if (appToken == null) {
// return null;
// }
// CommonIn commonIn = createCommonIn(appToken);
//
// JSONObject resultObj = createHealthCardService().getHealthCardByHealthCode(commonIn, healthCode);
// JSONObject rspObj = resultObj.getJSONObject("rsp");
// JSONObject cardJson = rspObj.getJSONObject("card");
// Patient patient = new Patient();
// patient.setSex(cardJson.getString("gender")); // 性别
// patient.setName(cardJson.getString("name"));
// patient.setNation(cardJson.getString("nation"));
// patient.setCardType(cardJson.getString("idType"));
// patient.setIdCardNo(cardJson.getString("idNumber"));
// patient.setBirthday(cardJson.getString("birthday"));
// patient.setAddress(cardJson.getString("address"));
// String phone1 = cardJson.getString("phone1");
// String phone2 = cardJson.getString("phone2");
// patient.setTel(ObjectUtils.isEmpty(phone1) ? phone2 : phone1);
// return patient;
// }
public static void dataUpload() {
String qrCodeText = HCodeService.getQRCodeText(false, "F43F5B90877116A61D3B960EDAECBCDDDDE7F452605C23DD425CC79BF4644F61", "530127199711211059");
HCodeService.reportHISData(qrCodeText, "口腔科", "0101011", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, null);
HCodeService.reportHISData(qrCodeText, "口腔科", "0101012", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, null);
HCodeService.reportHISData(qrCodeText, null, "0101013", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, null);
HCodeService.reportHISData(qrCodeText, null, "0101014", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, null);
// 门诊缴费
HCodeService.reportHISData(qrCodeText, "口腔科", "0101051", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, "0100");
// 门诊缴费记录
HCodeService.reportHISData(qrCodeText, null, "0101052", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, null);
HCodeService.reportHISData(qrCodeText, null, "0101081", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, null);
HCodeService.reportHISData(qrCodeText, null, "0101082", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, null);
HCodeService.reportHISData(qrCodeText, null, "0101083", HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, null);
}
public static void main(String[] args) {
dataUpload();
}
}

@ -1,7 +1,5 @@
package com.ynxbd.common.service; package com.ynxbd.common.service;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.bean.GMCUser;
import com.ynxbd.common.bean.Patient; import com.ynxbd.common.bean.Patient;
import com.ynxbd.common.bean.User; import com.ynxbd.common.bean.User;
import com.ynxbd.common.dao.PatientDao; import com.ynxbd.common.dao.PatientDao;
@ -14,16 +12,12 @@ import com.ynxbd.common.result.ServiceException;
import com.ynxbd.wx.config.WeChatConfig; import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.utils.DesEncryptHelper; import com.ynxbd.wx.utils.DesEncryptHelper;
import com.ynxbd.wx.wxfactory.AesWxHelper; import com.ynxbd.wx.wxfactory.AesWxHelper;
import com.ynxbd.wx.wxfactory.WxAuthHelper;
import com.ynxbd.wx.wxfactory.WxCacheHelper; import com.ynxbd.wx.wxfactory.WxCacheHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.HashMap; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/** /**
* 患者业务层 * 患者业务层
@ -39,7 +33,7 @@ public class PatientService {
return new PatientDao().selectMyself(openid); return new PatientDao().selectMyself(openid);
} }
public Patient getCacheMyself(String openid) { public Patient queryCacheMyself(String openid) {
User user = WxCacheHelper.getCacheUser(openid); User user = WxCacheHelper.getCacheUser(openid);
if (user == null) { if (user == null) {
return null; return null;
@ -63,53 +57,23 @@ public class PatientService {
public List<Patient> enPatientList(List<Patient> patients) { public List<Patient> enPatientList(List<Patient> patients) {
for (Patient item : patients) { for (Patient item : patients) {
if (item.getPatientId() != null) { item.filterData(false);
item.setEnPatientId(AesWxHelper.encode(item.getPatientId()));
}
if (!ObjectUtils.isEmpty(item.getIdCardNo())) {
// 加密数据
item.setEnCardNo(AesWxHelper.encode(item.getIdCardNo()));
item.setEnTel(AesWxHelper.encode(item.getTel()));
// 显示数据----------------------
item.setShowCardNo(ParamHelper.hideIdCardNo(item.getIdCardNo()));
item.setShowTel(ParamHelper.hidTel(item.getTel()));
} else {
// 无证绑定显示数据
item.setFatherIdCardNo(ParamHelper.hideIdCardNo(item.getFatherIdCardNo()));
item.setMotherIdCardNo(ParamHelper.hideIdCardNo(item.getMotherIdCardNo()));
// ------------
item.setFatherTel(ParamHelper.hidTel(item.getFatherTel()));
item.setMotherTel(ParamHelper.hidTel(item.getMotherTel()));
}
} }
return patients; return patients;
} }
/** // public List<Patient> queryGMCPatientList(String enUnionId, String openid, String unionId, boolean isEnPid) {
* 查询医共体医生列表 // // 在查询时完成数据同步
* // if (!WeChatConfig.IS_GMC_SERVER) { // 不为医共体主体=>查询医共体患者数据
* @param openid //
* @param unionId // }
* @param isEnPid // return queryPatientList(openid, unionId, true);
* @return // }
*/
public List<Patient> queryGMCPatientList(String enUnionId, String openid, String unionId, boolean isEnPid) { public List<Patient> queryPatientList(HttpServletRequest request, String openid, String unionId, boolean isEnPid) {
// 在查询时完成数据同步 if (request != null && WeChatConfig.IS_ENABLE_GMC && !WeChatConfig.IS_GMC_SERVER) { // 不是主体服务器=>请求主服务器
if (!WeChatConfig.IS_GMC_SERVER) { // 不为医共体主体 return new GMCService().queryGmcPatientList(request, openid, unionId);
// 查询医共体患者数据
} }
List<Patient> patients = new PatientDao().selectListByToken(openid, unionId);
if (isEnPid) {
patients = enPatientList(patients);
}
return patients;
}
public List<Patient> queryPatientList(String openid, String unionId, boolean isEnPid) {
List<Patient> patients = new PatientDao().selectListByToken(openid, unionId); List<Patient> patients = new PatientDao().selectListByToken(openid, unionId);
if (isEnPid) { if (isEnPid) {
patients = enPatientList(patients); patients = enPatientList(patients);
@ -125,79 +89,6 @@ public class PatientService {
return bind(request, isMyself, isAreaCode, bindInfo); return bind(request, isMyself, isAreaCode, bindInfo);
} }
public Patient gmcServerBind(HttpServletRequest request, Patient bindInfo) throws ServiceException {
if (!WeChatConfig.IS_ENABLE_GMC) { // 未医共体开关
return bindInfo;
}
String openid = bindInfo.getOpenid();
String hospAppId = AesWxHelper.decode(bindInfo.getEnHospAppId());
if (ObjectUtils.isEmpty(hospAppId)) {
throw new ServiceException("医共体子公众号id参数错误");
}
String gmcUniqueId;
if (WeChatConfig.IS_GMC_SERVER) { // 是医共体主服务器
if (!WeChatConfig.APP_ID.equals(hospAppId)) { // 不为自身AppId
bindInfo.setHospAppId(hospAppId); // 需存的数据
}
bindInfo.setGmcUniqueId(CodeHelper.get32UUID());
} else {
String enGmcOpenId = bindInfo.getEnGmcOpenId(); // 只有子公众号有
String gmcOpenId = AesWxHelper.decode(enGmcOpenId);
log.info("[转发]enGmcOpenId={}, gmcOpenId={}", enGmcOpenId, gmcOpenId);
if (ObjectUtils.isEmpty(gmcOpenId)) {
throw new ServiceException("医共体非主体公众号ID参数异常");
}
JsonResult jsonResult = WxAuthHelper.postFormGMC(request, "/healthCode/bind", params -> {
params.put("isAreaCode", false);
params.put("isFace", false);
params.put("isHealthCard", false);
params.put("openid", gmcOpenId); // 主体的openid
params.put("address", bindInfo.getAddress());
params.put("areaCode", bindInfo.getAreaCode());
params.put("areaAddress", bindInfo.getAreaAddress());
params.put("tel", bindInfo.getTel());
params.put("sex", bindInfo.getSex());
params.put("name", bindInfo.getName());
params.put("nation", bindInfo.getNation());
params.put("birthday", bindInfo.getBirthday());
params.put("idCardNo", bindInfo.getIdCardNo());
//
params.put("enOpenId", enGmcOpenId);
params.put("enUnionId", bindInfo.getEnUnionId());
params.put("enGmcOpenId", enGmcOpenId);
params.put("enHospAppId", bindInfo.getEnHospAppId());
}, null);
if (!jsonResult.success()) {
throw new ServiceException(jsonResult.getMessage());
}
log.info("[绑定转发] resp={}", JsonHelper.toJsonString(jsonResult));
JSONObject dataJson = jsonResult.dataMapGetNodeToJsonObj();
gmcUniqueId = dataJson.getString("gmcUniqueId");
if (ObjectUtils.isEmpty(gmcUniqueId)) {
throw new ServiceException("医共体返回唯一id为空");
}
bindInfo.setGmcUniqueId(gmcUniqueId);
if (!enGmcOpenId.equals(dataJson.getString("enOpenId"))) {
throw new ServiceException("医共体主体openId不匹配");
}
GMCUser findGMCUser = new GMCUserService().queryInfoByOpenId(openid);
if (findGMCUser == null) {
boolean isOK = new GMCUserService().addInfo(openid, gmcOpenId, bindInfo.getUnionId(), gmcUniqueId);
if (!isOK) {
log.error("[医共体关系]添加失败 openid={}, gmcOpenId={}, uuid={}", openid, gmcOpenId, gmcUniqueId);
}
}
}
return bindInfo;
}
/** /**
* [绑定] * [绑定]
* *
@ -209,14 +100,15 @@ public class PatientService {
if (bindInfo == null) { if (bindInfo == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); return Result.error(ResultEnum.PARAM_IS_DEFECT);
} }
try { try {
bindInfo = gmcServerBind(request, bindInfo); bindInfo = new GMCService().bindGmcServer(request, bindInfo);
} catch (Exception e) { } catch (Exception e) {
ErrorHelper.println(e); ErrorHelper.println(e);
return Result.error(e); return Result.error(e);
} }
log.info("[患者]身份绑定 bindInfo={}", JsonHelper.toJsonString(bindInfo)); log.info("[患者]身份绑定: {}", JsonHelper.toJsonString(bindInfo));
String openid = bindInfo.getOpenid(); String openid = bindInfo.getOpenid();
String name = bindInfo.getName(); String name = bindInfo.getName();
String idCardNo = bindInfo.getIdCardNo(); String idCardNo = bindInfo.getIdCardNo();
@ -246,11 +138,11 @@ public class PatientService {
String patientId = hisPatient.getPatientId(); String patientId = hisPatient.getPatientId();
String hisTransNo = hisPatient.getHisTransNo(); String hisTransNo = hisPatient.getHisTransNo();
String gmcHisPatientId = null; // HIS医共体患者ID // String gmcHospId = null; // 医共体下的医院id
bindInfo.setPatientId(patientId); bindInfo.setPatientId(patientId);
bindInfo.setHisTransNo(hisTransNo); bindInfo.setHisTransNo(hisTransNo);
bindInfo.setGmcHisPatientId(gmcHisPatientId); // bindInfo.setGmcHospId(gmcHospId);
// 判断是否已有数据 // 判断是否已有数据
Patient patient = patientDao.selectByIdCardNo(openid, idCardNo); Patient patient = patientDao.selectByIdCardNo(openid, idCardNo);
@ -267,7 +159,7 @@ public class PatientService {
} else { } else {
patientId = patient.getPatientId(); patientId = patient.getPatientId();
if (healthCardId != null && new HCodeService().bindCardRelation(patientId, healthCardId) == null) { // 绑定患者和院内关系 if (healthCardId != null && new HCodeService().bindCardRelation(false, patientId, healthCardId) == null) { // 绑定患者和院内关系
log.info("[电子健康卡]绑定患者和医院关系失败"); log.info("[电子健康卡]绑定患者和医院关系失败");
} }
@ -436,4 +328,43 @@ public class PatientService {
} }
} }
/**
* [患者]根据患者id查询信息
*
* @param patientId 患者id
* @return patient
*/
public Patient queryPatientByPatientId(String patientId) throws ServiceException {
if (ObjectUtils.isEmpty(patientId)) {
throw new ServiceException(ResultEnum.PARAM_IS_DEFECT);
}
JsonResult jsonResult = new HisPatientDao().queryPatientByPatientId(patientId);
if (!jsonResult.success()) {
throw new ServiceException(jsonResult.getMessage());
}
Patient patient = jsonResult.dataMapToBean(Patient.class);
if (patient == null) {
throw new ServiceException(ResultEnum.DATA_NOT_FOUND);
}
return patient;
}
/**
* [患者]HIS中是否已绑定
*
* @param patientId 患者id
* @return patient
*/
public boolean hasHisBind(String patientId) {
try {
Patient patient = queryPatientByPatientId(patientId);
if (patient == null) {
return false;
}
return "1".equals(patient.getBindingFlag());
} catch (Exception ignored) {
}
return false;
}
} }

@ -380,7 +380,7 @@ public class RecipeService {
TZReserveConfig.reserveRun(patientId); // 天助医技预约 TZReserveConfig.reserveRun(patientId); // 天助医技预约
new HCodeService().rxReportHISData(openid, patientId); new HealthUploadService().rxReportHISData(openid, patientId);
return true; return true;
} }

@ -228,7 +228,7 @@ public class RegService {
// 电子健康卡上报数据 // 电子健康卡上报数据
new HCodeService().regPayReportHISData(openid, patientId, reg.getDeptName(), reg.getRegDate()); new HealthUploadService().regPayReportHISData(openid, patientId, reg.getDeptName(), reg.getRegDate());
} }
if (MerchantEnum.ALI.equals(merchantEnum)) { if (MerchantEnum.ALI.equals(merchantEnum)) {

@ -51,6 +51,7 @@ public class WeChatConfig {
// public static final String GMC_AUTH_APP_ID; // public static final String GMC_AUTH_APP_ID;
// public static final String GMC_AUTH_APP_SECRET; // public static final String GMC_AUTH_APP_SECRET;
public static final String GMC_AUTH_DOMAIN; public static final String GMC_AUTH_DOMAIN;
public static final String GMC_APP_ID;
static { static {
ProperHelper config = new ProperHelper().read("wx.properties"); ProperHelper config = new ProperHelper().read("wx.properties");
@ -85,6 +86,7 @@ public class WeChatConfig {
// GMC_AUTH_APP_ID = config.getString("wx.gmc.auth_app_id"); // GMC_AUTH_APP_ID = config.getString("wx.gmc.auth_app_id");
// GMC_AUTH_APP_SECRET = config.getString("wx.gmc.auth_app_secret"); // GMC_AUTH_APP_SECRET = config.getString("wx.gmc.auth_app_secret");
GMC_AUTH_DOMAIN = config.getString("wx.gmc.auth_domain"); GMC_AUTH_DOMAIN = config.getString("wx.gmc.auth_domain");
GMC_APP_ID = config.getString("wx.gmc.app_id");
IS_GMC_SERVER = DOMAIN != null && DOMAIN.equals(GMC_AUTH_DOMAIN); IS_GMC_SERVER = DOMAIN != null && DOMAIN.equals(GMC_AUTH_DOMAIN);
} }

@ -35,8 +35,8 @@ public class AesWxHelper extends AesHelper {
return decryptHex(enData, KEY, IV); return decryptHex(enData, KEY, IV);
} }
// public static void main(String[] args) { public static void main(String[] args) {
// System.out.println(encode("847149")); System.out.println(encode("001"));
// System.out.println(decode("E6835E243069406F53EC8464898B37C0")); // System.out.println(decode("E6835E243069406F53EC8464898B37C0"));
// } }
} }

@ -5,8 +5,6 @@ import com.ynxbd.common.bean.Patient;
import com.ynxbd.common.bean.User; import com.ynxbd.common.bean.User;
import com.ynxbd.common.helper.common.*; import com.ynxbd.common.helper.common.*;
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.JsonResultEnum;
import com.ynxbd.common.result.Result; import com.ynxbd.common.result.Result;
import com.ynxbd.common.service.GMCUserService; import com.ynxbd.common.service.GMCUserService;
import com.ynxbd.common.service.PatientService; import com.ynxbd.common.service.PatientService;
@ -36,8 +34,8 @@ public class WxAuthHelper {
private static final String P_PREFIX = "_@"; // 前缀 private static final String P_PREFIX = "_@"; // 前缀
private static final String P_SUFFIX = ":"; // 后缀 private static final String P_SUFFIX = ":"; // 后缀
private static final String AUTH_SESSION_ID_NAME = "SID"; private static final String AUTH_SESSION_ID_NAME = "SID"; // session name标识
private static final String GMC_ID = "GMCId"; private static final String GMC_ID = "GMCId"; // 主体服务器-sessionId
private static final String OPENID = "openid"; private static final String OPENID = "openid";
public static String getSessionOpenid(HttpServletRequest request) { public static String getSessionOpenid(HttpServletRequest request) {
@ -78,7 +76,7 @@ public class WxAuthHelper {
user.setUnionId(unionId); user.setUnionId(unionId);
user.setOpenid(openid); user.setOpenid(openid);
user.setIsSnapShotUser(snsToken.getIsSnapShotUser()); user.setIsSnapShotUser(snsToken.getIsSnapShotUser());
user.setPatientList(new PatientService().queryPatientList(openid, unionId, true)); user.setPatientList(new PatientService().queryPatientList(request, openid, unionId, true));
if (isUserInfo) { if (isUserInfo) {
SnsUserInfo snsUser = WxFactory.Base.OAuth().snsUserInfo(snsToken.getAccessToken(), openid, "zh_CN", 3); SnsUserInfo snsUser = WxFactory.Base.OAuth().snsUserInfo(snsToken.getAccessToken(), openid, "zh_CN", 3);
@ -145,7 +143,7 @@ public class WxAuthHelper {
AuthTokenData authTokenData = new AuthTokenData(); AuthTokenData authTokenData = new AuthTokenData();
String cacheTokenOpenId = authTokenData.decodeToken(token, WeChatConfig.APP_ID); String cacheTokenOpenId = authTokenData.decodeToken(token, WeChatConfig.APP_ID);
log.warn("[授权is_auth] token={}, state={}, isUserInfo={}, deState={}", token, state, isUserInfo, deState); log.warn("[授权is_auth] has_token={}, state={}, isUserInfo={}, deState={}", !ObjectUtils.isEmpty(token), state, isUserInfo, deState);
String authSessionId = null; String authSessionId = null;
if (WeChatConfig.IS_ENABLE_GMC) { // 开启医共体开关 if (WeChatConfig.IS_ENABLE_GMC) { // 开启医共体开关
@ -153,12 +151,13 @@ public class WxAuthHelper {
if (WeChatConfig.IS_GMC_SERVER) { // 是医共体主服务器 if (WeChatConfig.IS_GMC_SERVER) { // 是医共体主服务器
authSessionId = AesWxHelper.decode(request.getHeader(AUTH_SESSION_ID_NAME)); authSessionId = AesWxHelper.decode(request.getHeader(AUTH_SESSION_ID_NAME));
} else { // 请求转发 } else { // 请求转发
String serverDomain = WeChatConfig.getDomain(false, false); String serverDomain = WeChatConfig.getDomain(false, false);
if (deState != null && serverDomain != null && !deState.contains(serverDomain)) { if (deState != null && serverDomain != null && !deState.contains(serverDomain)) {
return Result.error("授权域名不匹配"); return Result.error("授权域名不匹配");
} }
return gmc_server_auth(request, session, state, isUserInfo, cacheTokenOpenId, token, authTokenData, sessionOpenId, authSessionId); log.info("[微信认证]向主服务器请求认证 cacheTokenOpenId={}", cacheTokenOpenId);
return reqGmcServiceAuth(request, session, state, isUserInfo, cacheTokenOpenId, token, authTokenData, sessionOpenId, authSessionId);
} }
} catch (Exception e) { } catch (Exception e) {
ErrorHelper.println(e); ErrorHelper.println(e);
@ -167,20 +166,22 @@ public class WxAuthHelper {
} }
if (cacheTokenOpenId != null) { if (cacheTokenOpenId != null) {
log.info("[微信token认证] token={}, cacheOpenId={}", token, cacheTokenOpenId); log.info("[微信token认证] cacheOpenId={}", cacheTokenOpenId);
AuthResultData authResultData = getTokenData(cacheTokenOpenId, token, authTokenData); AuthResultData authResultData = getTokenData(request, cacheTokenOpenId, token, authTokenData);
session.setAttribute(OPENID, cacheTokenOpenId); session.setAttribute(OPENID, cacheTokenOpenId);
return Result.success(authResultData.toResultData()); return Result.success(authResultData.toResultData());
} }
log.info("[微信认证]获取 openid={}, authSessionId={}", sessionOpenId, authSessionId); log.info("[微信认证]获取 openId={}, authSessionId={}", sessionOpenId, authSessionId);
if (!ObjectUtils.isEmpty(authSessionId) && ObjectUtils.isEmpty(sessionOpenId)) { if (!ObjectUtils.isEmpty(authSessionId) && ObjectUtils.isEmpty(sessionOpenId)) {
sessionOpenId = WxCacheHelper.findOpenIdBySessionIdCache(authSessionId); sessionOpenId = WxCacheHelper.findOpenIdBySessionIdCache(authSessionId);
log.info("[微信AID认证]sessionOpenId={}", sessionOpenId); log.info("[微信AID认证]sessionOpenId={}", sessionOpenId);
} }
AuthResultData authResultData = getCacheUserData(request, sessionOpenId, state, isUserInfo, authSessionId); AuthResultData authResultData = getCacheUserData(request, sessionOpenId, state, isUserInfo, authSessionId);
log.info("[返回认证数据] data={}", JsonHelper.toJsonString(authResultData));
if (authResultData.hasAuthUrl()) { if (authResultData.hasAuthUrl()) {
log.info("[返回认证链接]authResultData.getAuthUrl");
return Result.success(authResultData.getAuthUrl()); return Result.success(authResultData.getAuthUrl());
} }
return Result.success(authResultData.toResultData()); return Result.success(authResultData.toResultData());
@ -189,29 +190,35 @@ public class WxAuthHelper {
/** /**
* 主体服务器认证 * 主体服务器认证
*/ */
public static Result gmc_server_auth(HttpServletRequest request, HttpSession session, String state, String isUserInfo, public static Result reqGmcServiceAuth(HttpServletRequest request, HttpSession session, String state, String isUserInfo,
String cacheTokenOpenId, String token, AuthTokenData tokenData, String sessionOpenId, String authSessionId) { String cacheTokenOpenId, String token, AuthTokenData tokenData, String sessionOpenId, String authSessionId) {
String reqGMCServerUrl = getReqGMCServerUrl(request);
// 自身认证 // 自身认证
boolean hasTokenCache = !ObjectUtils.isEmpty(cacheTokenOpenId); boolean hasTokenCache = !ObjectUtils.isEmpty(cacheTokenOpenId);
String openId = hasTokenCache ? cacheTokenOpenId : sessionOpenId; String openId = hasTokenCache ? cacheTokenOpenId : sessionOpenId;
if (ObjectUtils.isEmpty(openId)) { // 自身认证未完成 if (ObjectUtils.isEmpty(openId)) { // 自身认证未完成
return Result.success(getAuthUrl(request, state, false, null, authSessionId)); return Result.success(getAuthUrl(request, state, false, null, authSessionId));
} }
// log.info("cacheTokenOpenId={}, sessionOpenId={}", cacheTokenOpenId, sessionOpenId); // log.info("cacheTokenOpenId={}, sessionOpenId={}", cacheTokenOpenId, sessionOpenId);
// 判断是否有主体id // 判断是否有主体id
Object sessionGmcOpenId = session.getAttribute(GMC_ID); Object sessionGmcOpenId = session.getAttribute(GMC_ID);
String gmcOpenId = sessionGmcOpenId == null ? null : sessionGmcOpenId.toString(); String gmcOpenId = sessionGmcOpenId == null ? null : sessionGmcOpenId.toString();
log.info("[向主服务器请求认证] gmcOpenId={}", gmcOpenId);
if (gmcOpenId == null) { if (gmcOpenId == null) {
GMCUser gmcUser = new GMCUserService().queryInfoByOpenId(openId); GMCUser gmcUser = new GMCUserService().queryInfoByOpenId(openId);
if (gmcUser != null) { if (gmcUser != null) {
log.info("[医共体认证]存在关联信息");
gmcOpenId = gmcUser.getGmcOpenId(); gmcOpenId = gmcUser.getGmcOpenId();
} }
} }
if (!ObjectUtils.isEmpty(gmcOpenId)) { if (!ObjectUtils.isEmpty(gmcOpenId)) {
new GMCUserService().addInfo(sessionOpenId, gmcOpenId, null, CodeHelper.get32UUID());
if (sessionGmcOpenId == null) { if (sessionGmcOpenId == null) {
session.setAttribute(GMC_ID, gmcOpenId); session.setAttribute(GMC_ID, gmcOpenId);
} }
@ -219,7 +226,7 @@ public class WxAuthHelper {
// 查询返回数据 // 查询返回数据
AuthResultData authResultData = null; AuthResultData authResultData = null;
if (hasTokenCache) { if (hasTokenCache) {
authResultData = getTokenData(openId, token, tokenData); authResultData = getTokenData(request, openId, token, tokenData);
} }
if (authResultData == null) { if (authResultData == null) {
authResultData = getCacheUserData(request, sessionOpenId, state, isUserInfo, authSessionId); authResultData = getCacheUserData(request, sessionOpenId, state, isUserInfo, authSessionId);
@ -227,14 +234,14 @@ public class WxAuthHelper {
if (authResultData.hasAuthUrl()) { // 授权链接 if (authResultData.hasAuthUrl()) { // 授权链接
return Result.success(authResultData.getAuthUrl()); return Result.success(authResultData.getAuthUrl());
} }
// repeatPatients(reqGMCServerUrl, authResultData.getPatientList(), gmcOpenId); // 患者信息去重 // repeatPatients(reqGMCServerUrl, authResultData.getPatientList(), gmcOpenId); // 患者信息去重
authResultData.setEnGmcOpenId(AesWxHelper.encode(gmcOpenId)); // 用于绑定传递数据,确保关系记录 authResultData.setEnGmcOpenId(AesWxHelper.encode(gmcOpenId)); // 用于绑定传递数据,确保关系记录
return Result.success(authResultData.toResultData()); return Result.success(authResultData.toResultData());
} }
String sessionId = session.getId(); String sessionId = session.getId();
log.info("[认证请求转发] [sessionId:{}]URL:[{}]", sessionId, reqGMCServerUrl); String reqGMCServerUrl = WeChatConfig.getGMCAuthDomain(isHttpsWithProxy(request), true); // 医共体请求地址
log.info("[req:认证请求转发] [sessionId:{}]URL:[{}]", sessionId, reqGMCServerUrl);
String resultJson = OkHttpHelper.postFormStr(reqGMCServerUrl + "wx_auth/is_auth", params -> { String resultJson = OkHttpHelper.postFormStr(reqGMCServerUrl + "wx_auth/is_auth", params -> {
params.put("token", token); params.put("token", token);
params.put("state", state); params.put("state", state);
@ -249,20 +256,24 @@ public class WxAuthHelper {
return result; return result;
} }
String dataStr = result.toDataStr(); String dataStr = result.toDataStr();
if (dataStr != null && !dataStr.contains("{")) { if (dataStr != null && !dataStr.contains("{")) { // 返回的是认证链接
log.info("[req:主服务器认证]返回认证链接");
return Result.success(dataStr); return Result.success(dataStr);
} }
AuthResultData gmcAuthResultData = result.dataToBean(AuthResultData.class); // 医共体医生 AuthResultData gmcAuthResultData = result.dataToBean(AuthResultData.class); // 医共体信息
String enGmcOpenId = gmcAuthResultData.getEnOpenId(); String enGmcOpenId = gmcAuthResultData.getEnOpenId();
gmcOpenId = AesWxHelper.decode(enGmcOpenId); // 主体openid gmcOpenId = AesWxHelper.decode(enGmcOpenId); // 主体服务器的openid
String gmcUUId = AesWxHelper.decode(gmcAuthResultData.getEnGmcUniqueId());
log.info("[req:主服务器认证]wxOpenId={}, gmcOpenId={}", sessionOpenId, openId);
if (!ObjectUtils.isEmpty(gmcOpenId)) { // 授权主体完成认证 if (!ObjectUtils.isEmpty(gmcOpenId)) { // 授权主体完成认证
session.setAttribute(GMC_ID, gmcOpenId); session.setAttribute(GMC_ID, gmcOpenId);
new GMCUserService().addInfo(sessionOpenId, gmcOpenId, null, gmcUUId); new GMCUserService().addInfo(sessionOpenId, gmcOpenId, null, CodeHelper.get32UUID());
AuthResultData authResultData = getCacheUserData(request, sessionOpenId, state, isUserInfo, authSessionId); AuthResultData authResultData = getCacheUserData(request, sessionOpenId, state, isUserInfo, authSessionId);
if (authResultData.hasAuthUrl()) { // 授权链接
return Result.success(authResultData.getAuthUrl());
}
authResultData.setEnGmcOpenId(enGmcOpenId); // 用于绑定传递数据,确保关系记录 authResultData.setEnGmcOpenId(enGmcOpenId); // 用于绑定传递数据,确保关系记录
return Result.success(authResultData.toResultData()); return Result.success(authResultData.toResultData());
} }
@ -277,18 +288,15 @@ public class WxAuthHelper {
* @param tokenData token解析出来的数据 * @param tokenData token解析出来的数据
* @return bean * @return bean
*/ */
public static AuthResultData getTokenData(String cacheOpenId, String token, AuthTokenData tokenData) { public static AuthResultData getTokenData(HttpServletRequest request, String cacheOpenId, String token, AuthTokenData tokenData) {
if (cacheOpenId == null) { if (tokenData == null || cacheOpenId == null) {
return null;
}
if (tokenData == null) {
return null; return null;
} }
log.info("[微信token认证] token={}, cacheOpenId={}", token, cacheOpenId); log.info("[微信token认证]has_token={}, cacheOpenId={}", !ObjectUtils.isEmpty(token), cacheOpenId);
User user = WxCacheHelper.getCacheUser(cacheOpenId); User user = WxCacheHelper.getCacheUser(cacheOpenId);
List<Patient> patients; List<Patient> patients;
if (user == null) { if (user == null) {
patients = new PatientService().queryPatientList(cacheOpenId, null, true); patients = new PatientService().queryPatientList(request, cacheOpenId, null, true);
Cache<String, User> cache = WxCacheHelper.getUserCacheManager(); Cache<String, User> cache = WxCacheHelper.getUserCacheManager();
User addCache = new User(); User addCache = new User();
addCache.setOpenid(cacheOpenId); addCache.setOpenid(cacheOpenId);
@ -315,12 +323,23 @@ public class WxAuthHelper {
return authResultData; return authResultData;
} }
/**
* 从缓存获取数据
*
* @param request
* @param openId
* @param state
* @param isUserInfo
* @param authSessionId
* @return
*/
public static AuthResultData getCacheUserData(HttpServletRequest request, String openId, String state, String isUserInfo, String authSessionId) { public static AuthResultData getCacheUserData(HttpServletRequest request, String openId, String state, String isUserInfo, String authSessionId) {
log.info("[微信认证]openid={}", openId); log.info("[微信认证]openid={}", openId);
AuthResultData authResultData = new AuthResultData(); AuthResultData authResultData = new AuthResultData();
boolean isFindUserInfo = ("true".equals(isUserInfo)); boolean isFindUserInfo = ("true".equals(isUserInfo));
if (openId == null) { if (openId == null) {
authResultData.setAuthUrl(getAuthUrl(request, state, isFindUserInfo, null, authSessionId)); authResultData.setAuthUrl(getAuthUrl(request, state, isFindUserInfo, null, authSessionId));
log.info("[微信认证]data={}", JsonHelper.toJsonString(authResultData));
return authResultData; return authResultData;
} }
@ -354,24 +373,6 @@ public class WxAuthHelper {
return authResultData; return authResultData;
} }
public List<Patient> repeatPatients(String reqDomain, List<Patient> patientList, String gmcOpenId) throws Exception {
// 数据去重
JsonResult jsonResult = postForm(reqDomain + "patient/authGMCPatients", params -> {
params.put("gmcOpenId", AesWxHelper.encode(gmcOpenId, true));
}, headers -> {
headers.add("gmcOpenId", AesWxHelper.encode(gmcOpenId, true));
});
if (jsonResult.success()) {
List<Patient> gmcPatientList = jsonResult.dataMapGetNodeToList(Patient.class);
// authResultData.setPatientList(patientList);
}
return patientList;
}
public static String getReqGMCServerUrl(HttpServletRequest request) {
return WeChatConfig.getGMCAuthDomain(isHttpsWithProxy(request), true); // 医共体请求服务地址
}
private static final String OAUTH_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + WeChatConfig.APP_ID + "&redirect_uri="; private static final String OAUTH_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + WeChatConfig.APP_ID + "&redirect_uri=";
@ -391,7 +392,7 @@ public class WxAuthHelper {
String params = enSID + enUID; String params = enSID + enUID;
try { try {
params = ObjectUtils.isEmpty(params) ? "" : URLEncoder.encode(params, "UTF-8"); params = ObjectUtils.isEmpty(params) ? "" : URLEncoder.encode(params, "UTF-8");
log.warn("[认证链接参数] params={}", params); log.warn("[认证链接参数]params={}", params);
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage()); log.error(e.getMessage());
} }
@ -407,7 +408,6 @@ public class WxAuthHelper {
return Base64Helper.encode(state); return Base64Helper.encode(state);
} }
// 是否为https请求 // 是否为https请求
public static boolean isHttpsWithProxy(HttpServletRequest request) { public static boolean isHttpsWithProxy(HttpServletRequest request) {
// 优先检查代理头(适用于反向代理场景) // 优先检查代理头(适用于反向代理场景)
@ -419,6 +419,7 @@ public class WxAuthHelper {
return request.isSecure(); return request.isSecure();
} }
// 转化成url中的参数
public static String toURLParam(String key, String val) { public static String toURLParam(String key, String val) {
if (ObjectUtils.isEmpty(val)) return ""; if (ObjectUtils.isEmpty(val)) return "";
return P_PREFIX + key + P_SUFFIX + val; return P_PREFIX + key + P_SUFFIX + val;
@ -455,15 +456,6 @@ public class WxAuthHelper {
} }
public static JsonResult postForm(String url, OkHttpHelper.MapParams params, OkHttpHelper.Header header) {
return OkHttpHelper.postForm(url, params, header, JsonResultEnum.SYS_COMMON);
}
public static JsonResult postFormGMC(HttpServletRequest request, String api, OkHttpHelper.MapParams params, OkHttpHelper.Header header) {
String url = getReqGMCServerUrl(request) + api;
return OkHttpHelper.postForm(url, params, header, JsonResultEnum.SYS_COMMON);
}
// // 医共体开启 & 不是支付授权 // // 医共体开启 & 不是支付授权
// private static boolean isAuthGMC(boolean isPayOAuth) { // private static boolean isAuthGMC(boolean isPayOAuth) {
// return WeChatConfig.IS_ENABLE_GMC && !isPayOAuth; // return WeChatConfig.IS_ENABLE_GMC && !isPayOAuth;
@ -491,4 +483,18 @@ public class WxAuthHelper {
// return WeChatConfig.getDomain(WeChatConfig.HAS_HTTPS_BY_BASE_URL || isHttpsWithProxy(request)); // 配置中baseURL有"https"时优先级最高 ["@protocol=1"为https;"@protocol=0"为默认的http;] // return WeChatConfig.getDomain(WeChatConfig.HAS_HTTPS_BY_BASE_URL || isHttpsWithProxy(request)); // 配置中baseURL有"https"时优先级最高 ["@protocol=1"为https;"@protocol=0"为默认的http;]
// } // }
// public List<Patient> repeatPatients(String reqDomain, List<Patient> patientList, String gmcOpenId) throws Exception {
// // 数据去重
// JsonResult jsonResult = postForm(reqDomain + "patient/authGMCPatients", params -> {
// params.put("gmcOpenId", AesWxHelper.encode(gmcOpenId, true));
// }, headers -> {
// headers.add("gmcOpenId", AesWxHelper.encode(gmcOpenId, true));
// });
// if (jsonResult.success()) {
// List<Patient> gmcPatientList = jsonResult.dataMapGetNodeToList(Patient.class);
//// authResultData.setPatientList(patientList);
// }
// return patientList;
// }
} }

@ -25,7 +25,6 @@ public class WxCacheHelper {
createUserCacheManager(); createUserCacheManager();
createAccessTokenCache(); createAccessTokenCache();
createAuthSessionIdCacheManager(); createAuthSessionIdCacheManager();
} }

@ -0,0 +1,19 @@
package com.ynxbd.wx.wxfactory;
import com.ynxbd.common.helper.http.OkHttpHelper;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class WxMiniHelper {
public static String auth(String jsCode) {
String respJson = OkHttpHelper.get("https://api.weixin.qq.com/sns/jscode2session", params -> {
params.put("appid", "appid");
params.put("secret", "secret");
params.put("js_code", jsCode);
params.put("grant_type", "authorization_code");
});
log.info("respJson:{}", respJson);
return null;
}
}

@ -1,12 +1,17 @@
# 是否使用健康卡 # \u662F\u5426\u4F7F\u7528\u5065\u5EB7\u5361
is_enable=true is_enable=true
#微信开放平台调用参数 #\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u8C03\u7528\u53C2\u6570
h.app_id=e4a05c13301f2f6a8b07b3de872dfe2d h.app_id=e4a05c13301f2f6a8b07b3de872dfe2d
h.app_secret=e5322dfd9bfab939851319812c30f9f1 h.app_secret=e5322dfd9bfab939851319812c30f9f1
# 医院id # \u533B\u9662id
h.hospital_id=36626 h.hospital_id=36626
#万达卡管平台调用参数 #\u4E07\u8FBE\u5361\u7BA1\u5E73\u53F0\u8C03\u7528\u53C2\u6570
h.card_app_id=5a4a6eacbe1040d8a91c76608aefb943 h.card_app_id=5a4a6eacbe1040d8a91c76608aefb943
h.card_public_key=mfkwewyhkozizj0caqyikozizj0daqcdqgaepc6p0omuruc5lq7cwdu18ca4cgmqbtjpwdyrglo4wbal9/m3dv4oywez7fbgtnkkgj/kfojvze6sc/dka+ddca== h.card_public_key=mfkwewyhkozizj0caqyikozizj0daqcdqgaepc6p0omuruc5lq7cwdu18ca4cgmqbtjpwdyrglo4wbal9/m3dv4oywez7fbgtnkkgj/kfojvze6sc/dka+ddca==
h.card_private_key=4e181412b5874b22ba113ea3a907e244 h.card_private_key=4e181412b5874b22ba113ea3a907e244
h.card_url=http://220.164.109.105:19211/internet h.card_url=http://220.164.109.105:19211/internet
# mini-app======================================
# \u5C0F\u7A0B\u5E8F\u533B\u9662id
h.mini_hospital_id=36626
# \u5C0F\u7A0B\u5E8FappId
h.mini_app_id=wx80685a7daa772a0b

@ -1 +1 @@
# \u5F00\u542F\u5904\u65B9\u9884\u7ED3\u7B97\uFF08\u7B2C2\u5F00\u5173\uFF09\uFF08\u6CE8\u610F\u8BE5\u914D\u7F6E\u9700\u8054\u7CFBhis\u5F00\u53D1\u8005\u786E\u8BA4\u652F\u6301\u624D\u80FD\u5F00\u542F\uFF0C\u5426\u5219\u5B58\u5728\u98CE\u9669\uFF01\uFF09 his.is_recipe_prepay=false # \u672C\u5730 #his.url=127.0.0.1:8888 # HIS\u662F\u5426\u5F00\u542F\u652F\u4ED8\u5B9D\u5206\u5F00\u5BF9\u8D26 his.is_ali_mer=false # \u662F\u5426\u5F3A\u5236\u6253\u5370webservice\u7684xml\u8FD4\u56DE\u6570\u636E his.is_log_resp=true # \u662F\u5426\u4F20\u9012openid\u7ED9his\u63A8\u9001\u6D88\u606F his.is_push_msg=false #------------------------------------------------------------- # \u6D4B\u8BD5\u73AF\u5883 his.dev_url=127.0.0.1:7777 # \u533B\u4FDD====================== # \u65E7\u914D\u7F6E his.md_url=127.0.0.1:7777 # \u5FAE\u4FE1\u533B\u4FDD his.wx_med_url=10.20.10.7:7885 # \u652F\u4ED8\u5B9D\u533B\u4FDD his.ali_med_url=10.20.10.7:7885 # \u6D4B\u8BD5============================================================ # \u5FB7\u5B8F\u4E2D\u533B his.url=200.200.200.60:8888 # \u7EA2\u6CB3\u5DDE\u533B\u9662 #his.url=10.20.10.6:8888 # \u8292\u5E02\u5987\u5E7C #his.url=192.168.11.7:8888 # \u5B81\u8497\u5987\u5E7C #his.url=172.19.3.15:8888 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.39:8888 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.10:8888 # \u7EA2\u6CB3 #his.url=10.20.10.6:8888 # \u7EA2\u6CB3\u533B\u4FDD #his.url=10.20.10.6:8888 #his.url=192.168.12.10:8888 #his.md_url=192.168.1.128:7885 #his.dev_url=10.20.10.6:9988 # \u6C38\u80DC #his.url=200.200.200.20:8888 # \u5FB7\u5B8F\u4E2D\u533B #his.url=200.200.200.60:8888 # \u534E\u576A #his.url=192.168.1.115:8888 # \u8499\u81EA\u4E2D\u533B #his.url=192.168.0.228:8888 # \u7389\u9F99 #his.url=192.168.0.17:8888 # \u4E91\u9F99 #his.url=200.200.200.69:8888 # #his.url=172.16.10.15:8888 # \u7984\u529D\u949F\u7231 #his.url=200.200.200.5:8888 # \u8499\u81EA\u5E02\u4EBA\u6C11\u533B\u9662 #his.url=200.200.200.174:8080 # \u5143\u8C0B #his.url=200.200.200.29:8888 # \u5143\u8C0B\u533B\u4FDD #his.dev_url=200.200.200.36:9999 # \u8292\u5E02 #his.url=192.168.100.8:8888 # \u7EA2\u6CB3\u5987\u5E7C\u4FDD\u5065\u9662 #his.url=192.168.1.204:8888 # \u8292\u5E02\u5987\u5E7C #his.url=192.168.11.7:8888 # #his.url=10.10.11.23:8888 # \u77F3\u6797 #his.url=192.168.10.10:8888 # \u5BCC\u6C11 #his.url=200.200.201.27:8888 # \u897F\u53CC\u7248\u7EB3 #his.url=10.10.11.23:8888 #wx.password=ynxbd@6910 # \u5F00\u542F\u5904\u65B9\u9884\u7ED3\u7B97\uFF08\u7B2C2\u5F00\u5173\uFF09\uFF08\u6CE8\u610F\u8BE5\u914D\u7F6E\u9700\u8054\u7CFBhis\u5F00\u53D1\u8005\u786E\u8BA4\u652F\u6301\u624D\u80FD\u5F00\u542F\uFF0C\u5426\u5219\u5B58\u5728\u98CE\u9669\uFF01\uFF09 his.is_recipe_prepay=false # \u672C\u5730 #his.url=127.0.0.1:8888 # HIS\u662F\u5426\u5F00\u542F\u652F\u4ED8\u5B9D\u5206\u5F00\u5BF9\u8D26 his.is_ali_mer=false # \u662F\u5426\u5F3A\u5236\u6253\u5370webservice\u7684xml\u8FD4\u56DE\u6570\u636E his.is_log_resp=true # \u662F\u5426\u4F20\u9012openid\u7ED9his\u63A8\u9001\u6D88\u606F his.is_push_msg=false #------------------------------------------------------------- # \u6D4B\u8BD5\u73AF\u5883 his.dev_url=127.0.0.1:7777 # \u533B\u4FDD====================== # \u65E7\u914D\u7F6E his.md_url=127.0.0.1:7777 # \u5FAE\u4FE1\u533B\u4FDD his.wx_med_url=10.20.10.7:7885 # \u652F\u4ED8\u5B9D\u533B\u4FDD his.ali_med_url=10.20.10.7:7885 # \u77F3\u6797\u6D4B\u8BD5 his.url=200.200.200.105:8888 # \u6D4B\u8BD5============================================================ # \u5FB7\u5B8F\u4E2D\u533B #his.url=200.200.200.60:8888 # \u7EA2\u6CB3\u5DDE\u533B\u9662 #his.url=10.20.10.6:8888 # \u8292\u5E02\u5987\u5E7C #his.url=192.168.11.7:8888 # \u5B81\u8497\u5987\u5E7C #his.url=172.19.3.15:8888 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.39:8888 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.10:8888 # \u7EA2\u6CB3 #his.url=10.20.10.6:8888 # \u7EA2\u6CB3\u533B\u4FDD #his.url=10.20.10.6:8888 #his.url=192.168.12.10:8888 #his.md_url=192.168.1.128:7885 #his.dev_url=10.20.10.6:9988 # \u6C38\u80DC #his.url=200.200.200.20:8888 # \u5FB7\u5B8F\u4E2D\u533B #his.url=200.200.200.60:8888 # \u534E\u576A #his.url=192.168.1.115:8888 # \u8499\u81EA\u4E2D\u533B #his.url=192.168.0.228:8888 # \u7389\u9F99 #his.url=192.168.0.17:8888 # \u4E91\u9F99 #his.url=200.200.200.69:8888 # #his.url=172.16.10.15:8888 # \u7984\u529D\u949F\u7231 #his.url=200.200.200.5:8888 # \u8499\u81EA\u5E02\u4EBA\u6C11\u533B\u9662 #his.url=200.200.200.174:8080 # \u5143\u8C0B #his.url=200.200.200.29:8888 # \u5143\u8C0B\u533B\u4FDD #his.dev_url=200.200.200.36:9999 # \u8292\u5E02 #his.url=192.168.100.8:8888 # \u7EA2\u6CB3\u5987\u5E7C\u4FDD\u5065\u9662 #his.url=192.168.1.204:8888 # \u8292\u5E02\u5987\u5E7C #his.url=192.168.11.7:8888 # #his.url=10.10.11.23:8888 # \u77F3\u6797 #his.url=192.168.10.10:8888 # \u5BCC\u6C11 #his.url=200.200.201.27:8888 # \u897F\u53CC\u7248\u7EB3 #his.url=10.10.11.23:8888 #wx.password=ynxbd@6910

@ -1,4 +1,4 @@
wx.app_id=wxd503671f502bd89d wx.app_id=
wx.app_secret= wx.app_secret=
wx.token=ynxbd wx.token=ynxbd
wx.aes_key= wx.aes_key=
@ -12,3 +12,12 @@ wx.deploy_server_name=wx
wx.web_static_path=/web wx.web_static_path=/web
# \u9000\u8D39\u5BC6\u7801 # \u9000\u8D39\u5BC6\u7801
wx.password=ynxbd@6910 wx.password=ynxbd@6910
# \u662F\u5426\u4E3A\u6D4B\u8BD5\u73AF\u5883
wx.is_dev=true
# \u7528\u4E8E\u6388\u6743\u7684\u533B\u5171\u4F53\u516C\u4F17\u53F7\u914D\u7F6E=======================
wx.gmc.is_enable=
wx.gmc.auth_domain=
wx.gmc.app_id=
Loading…
Cancel
Save