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
/src/main/resources/druid-config.properties
/src/main/resources/apiclient_cert.p12
/catalina.home_IS_UNDEFINED

@ -434,7 +434,7 @@
<artifactId>healthcard</artifactId>
<scope>system</scope>
<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>

@ -68,7 +68,7 @@ public class AliAction extends BaseAction {
} else {
user = new User();
user.setOpenid(openid);
user.setPatientList(new PatientService().queryPatientList(openid, null, true));
user.setPatientList(new PatientService().queryPatientList(null, openid, null, true));
cache.put(openid, user);
}
@ -82,7 +82,7 @@ public class AliAction extends BaseAction {
}
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);

@ -46,7 +46,7 @@ public class AuthAgentAction extends BaseAction {
item.setEnPersonId(AesWxHelper.encode(item.getPersonId()));
item.setEnPersonTel(AesWxHelper.encode(item.getPersonTel()));
item.setShowPersonId(ParamHelper.hideIdCardNo(item.getPersonId()));
item.setShowPersonTel(ParamHelper.hidTel(item.getPersonTel()));
item.setShowPersonTel(ParamHelper.hideTel(item.getPersonTel()));
item.setPersonId(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 {
/**
* 查询患者集合
* [患者]查询信息
*/
@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")
public Result getHealthCardList(String openid) {
log.info("[电子健康卡]获取用户数据 openid={}", openid);
public Result getHealthCardList(@AesDecode String openid) {
log.info("[电子健康卡]查询患者集 openid={}", openid);
if (openid == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
List<Patient> patients = new PatientDao().selectHealthCardListByOpenid(openid);
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")
public Result getPatientByIdCardNo(String openid, String idCardNo) {
log.info("[电子健康卡]根据身份证和openid取二维码 openid={}, idCardNo={}", openid, idCardNo);
if (openid == null || idCardNo == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
@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);
}
Patient patient = new PatientDao().selectByIdCardNo(openid, idCardNo);
return Result.success(patient);
}
/**
* 获取token用于绑卡
*/
@Action("getAppToken")
public Result getAppToken() {
String appToken = new HCodeService().getAppToken();
public Result getAppToken(Boolean isMiniApp) {
String appToken = HCodeService.getAppToken(isMiniApp, true);
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 二维码
*/
@Action("getHealthCardByQrCode")
public Result getHealthCardByQrCode(String qrCode) {
log.info("[电子健康卡]通过二维码获取健康卡数据 qrCode={}", qrCode);
public Result getHealthCardByQrCode(Boolean isMiniApp, String qrCode) {
log.info("[电子健康卡]通过二维码获取健康卡数据 isMiniApp={}, qrCode={}", isMiniApp, qrCode);
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);
}
/**
* 获取健康卡二维码
* * @param appToken appToken
* * @param healthCardId 健康卡ID
* * @param idCardNo 证件号码
* * @param codeType 传0或者10返回动态码1返回静态码
*
* @param isMiniApp isMiniApp
* @param idCardNo 证件号码
* @param healthCardId 健康卡ID
* @return result
*/
@Action("getDynamicQRCode")
public Result getDynamicQRCode(String idCardNo, String healthCardId) {
public Result getDynamicQRCode(Boolean isMiniApp, String idCardNo, String healthCardId) {
log.info("[电子健康卡]获取二维码 healthCardId={}, idCardNo={}", healthCardId, idCardNo);
if (healthCardId == null || idCardNo == null) {
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);
}
@ -129,36 +141,21 @@ public class HealthCodeAction extends BaseAction {
* 获取卡包订单ID
*/
@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);
if (healthCardId == null || idCardNo == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数缺失
}
HCodeService hCodeService = new HCodeService();
String qrCodeText = hCodeService.getQRCodeText(healthCardId, idCardNo);
String qrCodeText = HCodeService.getQRCodeText(isMiniApp, healthCardId, idCardNo);
if (qrCodeText == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); // qrCodeText参数缺失
}
JSONObject result = hCodeService.getCardOrderId(qrCodeText);
JSONObject result = HCodeService.getCardOrderId(isMiniApp, qrCodeText);
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);
}
HCodeService hCodeService = new HCodeService();
String qrCodeText = hCodeService.getQRCodeText(healthCardId, idCardNo);
String qrCodeText = HCodeService.getQRCodeText(false, healthCardId, idCardNo);
if (qrCodeText == null) {
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) {
return Result.error();
}
@ -191,7 +187,7 @@ public class HealthCodeAction extends BaseAction {
* [电子健康卡]患者绑定成人
*/
@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={}",
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) {
@ -203,9 +199,8 @@ public class HealthCodeAction extends BaseAction {
return Result.error(ResultEnum.PARAM_IS_INVALID);
}
HCodeService hCodeService = new HCodeService();
if (isFace) { // 实名认证
if (!hCodeService.checkUniformVerifyResult(orderId, registerOrderId)) {
if (isHealthCard && isFace) { // 实名认证
if (!HCodeService.checkUniformVerifyResult(isMiniApp, orderId, registerOrderId)) {
return Result.error(ResultEnum.FACE_VERIFY_ERROR);
}
}
@ -251,7 +246,7 @@ public class HealthCodeAction extends BaseAction {
}
// 先注册,后修改-->先获取健康卡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) {
log.info("[电子健康卡]注册健康卡失败,响应内容为空");
@ -263,9 +258,8 @@ public class HealthCodeAction extends BaseAction {
// 响应处理
String errMsg = respObj.getString("errMsg");
String resultCode = respObj.getString("resultCode");
HealthCardRespCodeEnum healthCardRespCodeEnum = hCodeService.resultCodeHandle(resultCode);
HealthCardRespCodeEnum healthCardRespCodeEnum = HealthCardRespCodeEnum.findEnumByResultCode(resultCode);
log.info("[电子健康卡] 绑定失败原因 resultCode={}, errMsg={}, statusMsg={}", resultCode, errMsg, healthCardRespCodeEnum.MESSAGE);
//
if (!healthCardRespCodeEnum.IS_CONTINUE) { // 不继续执行
if (!healthCardRespCodeEnum.equals(HealthCardRespCodeEnum._10060)) { // 姓名和身份证不一致
return Result.error(healthCardRespCodeEnum.MESSAGE);
@ -301,26 +295,25 @@ public class HealthCodeAction extends BaseAction {
bindInfo.setEnUnionId(enUnionId);
bindInfo.setEnHospAppId(enHospAppId);
bindInfo.setEnGmcOpenId(enGmcOpenId);
return new PatientService().bindCard(request, false, isAreaCode, bindInfo);
}
/**
* [一键绑定]-->获取健康卡用户信息
* 获取健康卡用户信息
*
* @param openid openid
* @param healthCode 健康卡授权码-->用来获取健康卡用户信息
*/
@Action("getHealthCardInfo")
public Result getHealthCardInfo(String openid, String healthCode) {
log.info("[电子健康卡]一键绑定 获取健康卡用户信息 healthCode={}, openid={}", healthCode, openid);
if (healthCode == null || openid == null) return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数为空
public Result getHealthCardInfo(Boolean isMiniApp, String openid, String healthCode) {
log.info("[电子健康卡]获取健康卡用户信息 healthCode={}, openid={}", healthCode, openid);
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) {
log.info("[电子健康卡]一键绑定 获取用户信息失败");
return Result.error("[电子健康卡]一键绑定 获取用户信息失败");
log.info("[电子健康卡]获取健康卡用户信息-失败");
return Result.error("[电子健康卡]获取健康卡用户信息-失败");
}
return Result.success(patient);
}
@ -338,7 +331,6 @@ public class HealthCodeAction extends BaseAction {
* @param nation nation
* @param patientId patientId
* @param address address
* @return Result
*/
@Action("upBind")
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);
}
HCodeService hCodeService = new HCodeService();
// 先注册,后修改-->先获取健康卡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) {
log.info("[电子健康卡]升级绑定失败, 响应内容为空");
return Result.error("[电子健康卡]升级绑定失败, 响应内容为空");
@ -377,7 +368,7 @@ public class HealthCodeAction extends BaseAction {
// 响应处理
String errMsg = rspObj.getString("errMsg");
String resultCode = rspObj.getString("resultCode");
HealthCardRespCodeEnum healthCardRespCodeEnum = hCodeService.resultCodeHandle(resultCode);
HealthCardRespCodeEnum healthCardRespCodeEnum = HealthCardRespCodeEnum.findEnumByResultCode(resultCode);
log.info("[电子健康卡]升级绑定失败原因 resultCode={}, errMsg={}, statusMsg={}", resultCode, errMsg, healthCardRespCodeEnum.MESSAGE);
return Result.error(healthCardRespCodeEnum.MESSAGE);
@ -407,12 +398,12 @@ public class HealthCodeAction extends BaseAction {
* 身份证识别
*/
@Action("orcInfo")
public Result orcInfo(String image) {
public Result orcInfo(Boolean isMiniApp, String image) {
log.info("身份证识别");
if (image == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
Patient patient = new HCodeService().orcInfo(image);
Patient patient = HCodeService.orcInfo(isMiniApp, image);
return Result.success(patient);
}
@ -423,7 +414,6 @@ public class HealthCodeAction extends BaseAction {
* @param idCardNo idCardNo
* @param name name
* @param wechatCode wechatCode
* @return result
*/
@Action("registerUniformVerifyOrder")
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) {
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);
}
/**
* 实人认证结果查询接口
* * @param qrCodeText 二维码编码
*
* @param orderId orderId
* @param registerOrderId registerOrderId
*/
@Action("checkUniformVerifyResult")
public Result checkUniformVerifyResult(String orderId, String registerOrderId) {
public Result checkUniformVerifyResult(Boolean isMiniApp, String orderId, String registerOrderId) {
log.info("[电子健康卡]实人认证结果查询 orderId={}, registerOrderId={}", orderId, registerOrderId);
if (orderId == null || registerOrderId == null) {
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();
JSONArray jsonArray = null;
try {
jsonArray = new HCodeService().batchUpdate(lstPatient);
jsonArray = HCodeService.batchUpdate(lstPatient);
} catch (Exception e) {
log.error(e.getMessage());
}
@ -475,4 +467,15 @@ public class HealthCodeAction extends BaseAction {
}, 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.bean.Patient;
import com.ynxbd.common.bean.PatientLink;
import com.ynxbd.common.bean.User;
import com.ynxbd.common.bean.enums.HCardTypeEnum;
import com.ynxbd.common.config.interceptor.AesDecode;
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.ServiceException;
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 org.apache.commons.lang3.ObjectUtils;
import org.apache.struts2.convention.annotation.Action;
@ -31,19 +33,13 @@ public class PatientAction extends BaseAction {
*/
@Action("getHisInfoByPatientId")
public Result getHisInfoByPatientId(@AesDecode String patientId) {
log.info("[患者]根据patientId查询HIS信息 patientId={}", patientId);
if (patientId == null) {
return Result.error(ResultEnum.PARAM_IS_BLANK);
}
try {
JsonResult jsonResult = new HisPatientDao().selectPatientInfo(patientId, "999");
if (!jsonResult.success()) {
return Result.error(jsonResult.getMessage());
}
Patient patient = jsonResult.dataMapToBean(Patient.class);
if (patient == null) {
return Result.error(ResultEnum.DATA_NOT_FOUND);
log.info("[患者]根据patientId查询HIS信息 patientId={}", patientId);
if (patientId == null) {
return Result.error(ResultEnum.PARAM_IS_BLANK);
}
Patient patient = new PatientService().queryPatientByPatientId(patientId);
String encode = Base64Helper.encode(patient, true);
if (encode == null) {
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;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.ali.helper.AliUploadHelper;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.*;
@ -35,8 +34,6 @@ import java.util.stream.Collectors;
@Slf4j
@Namespace("/register")
public class RegisterAction extends BaseAction {
/**
* [推送] 获取预约今日的所有患者openId
*
@ -507,9 +504,21 @@ public class RegisterAction extends BaseAction {
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<>();
String curDate = DateHelper.getCurDate();
for (Patient pItem : patients) {
for (Patient pItem : noRepeatPatients) {
String patientId = pItem.getPatientId();
List<Register> hisWaitRegRecords = new RegService().getHisWaitRegRecords(patientId);
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.result.Result;
import com.ynxbd.wx.wxfactory.WxAuthHelper;
import com.ynxbd.wx.wxfactory.WxMiniHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
@ -34,4 +35,10 @@ public class WxAuthAction extends BaseAction {
// 支付使用普通授权
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;
import com.ynxbd.common.bean.pay.Order;
import com.ynxbd.common.dao.RecipeDao;
import com.ynxbd.common.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import java.util.List;
@Slf4j
@Namespace("/data_wh")
public class DataWHAction {
@Action("getData")
public Result getData(String callNo) {
String begTime = "2025-10-27";
String endTime = "2025-12-08";
public Result getData() {
String begDate = "2025-10-27";
String endDate = "2025-12-08";
return Result.success();
}
@Action("wh")
public Result wh() {
return Result.success();
}

@ -1,10 +1,13 @@
package com.ynxbd.common.bean;
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.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import org.apache.commons.lang3.ObjectUtils;
import java.io.Serializable;
@ -50,7 +53,7 @@ public class Patient implements Serializable {
private String county;
// 支付宝认证令牌
private String accessToken;
//
private String accessCode;
//
private String updateTime;
@ -81,29 +84,62 @@ public class Patient implements Serializable {
private String gmcUniqueId;
// 子公众号的AppId
private String hospAppId;
// 医共体HIS患者Id
private String gmcHisPatientId;
//
private Integer gmcBindState;
// 认证加密openid
private String enUnionId;
private String enOpenId;
private String enGmcOpenId;
private String enHospAppId;
// BindingFlag:值为1时,说明患者尚未绑定或建档
private String bindingFlag;
private HCardTypeEnum cardTypeEnum;
// HIS绑定
public boolean hasHisBind() {
return "1".equals(this.bindingFlag);
}
// 清除监护人信息
public void clearGuardianData() {
this.fatherName = null;
this.fatherIdCardNo = null;
this.fatherTel = null;
//
this.motherName = null;
this.motherIdCardNo = 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;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
/**
* 微信电子健康卡异常信息
@ -9,6 +10,7 @@ import lombok.ToString;
* @Date 2020/10/13 11:45
* @Copyright @ 2020 云南新八达科技有限公司 All rights reserved.
*/
@Slf4j
@ToString
public enum HealthCardRespCodeEnum {
// 自定义
@ -121,4 +123,27 @@ public enum HealthCardRespCodeEnum {
this.IS_RESULT = IS_RESULT;
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)) {
this.tel = null;
this.enTel = AesWxHelper.encode(_tel);
this.showTel = ParamHelper.hidTel(_tel);
this.showTel = ParamHelper.hideTel(_tel);
}
if (!ObjectUtils.isEmpty(this.patientId)) {

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

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

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

@ -100,7 +100,7 @@ public class PatientDao {
ps.setString(1, openid);
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 患者信息
*/
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 -> {
ps.setString(1, openId);
});
@ -168,7 +168,7 @@ public class PatientDao {
* @return 是否成功
*/
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 -> {
ps.setString(1, openid);
ps.setString(2, patientId);
@ -183,12 +183,10 @@ public class PatientDao {
* @return 是否成功
*/
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), " +
" gmcUniqueId=if(gmcUniqueId is null or gmcUniqueId = '', ?, gmcUniqueId), " +
" hospAppId=if(hospAppId is null or hospAppId = '', ?, hospAppId) " +
" gmcUniqueId=if(gmcUniqueId is null or gmcUniqueId = '', ?, gmcUniqueId) " +
" where openid=? and idCardNo=?";
return DataBase.update(sql, ps -> {
ps.setString(1, bindInfo.getHealthCardId());
ps.setString(2, bindInfo.getName());
@ -199,13 +197,11 @@ public class PatientDao {
ps.setString(7, bindInfo.getAreaCode());
ps.setString(8, bindInfo.getAreaAddress());
ps.setString(9, bindInfo.getPatientId());
ps.setString(10, bindInfo.getGmcHisPatientId());
ps.setString(11, CodeHelper.get32UUID());
ps.setString(12, bindInfo.getGmcUniqueId());
ps.setString(13, bindInfo.getHospAppId());
ps.setString(10, CodeHelper.get32UUID());
ps.setString(11, bindInfo.getGmcUniqueId());
// 条件
ps.setString(14, bindInfo.getOpenid());
ps.setString(15, bindInfo.getIdCardNo());
ps.setString(12, bindInfo.getOpenid());
ps.setString(13, bindInfo.getIdCardNo());
}) > 0;
}
@ -227,8 +223,8 @@ public class PatientDao {
* @return bool
*/
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) " +
" values(now(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
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(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
HCardTypeEnum cardTypeEnum = bindData.getCardTypeEnum();
@ -261,9 +257,7 @@ public class PatientDao {
ps.setString(24, bindData.getUnionId());
ps.setString(25, bindData.getHospAppId());
ps.setString(26, bindData.getGmcUniqueId());
ps.setString(27, bindData.getGmcHisPatientId());
ps.setInt(28, bindData.getGmcBindState());
ps.setString(29, CodeHelper.get32UUID());
ps.setString(27, CodeHelper.get32UUID());
}) > 0;
}

@ -24,7 +24,6 @@ import java.util.UUID;
@Slf4j
public class HisPatientDao {
/**
* HIS身份绑定
*
@ -110,9 +109,20 @@ public class HisPatientDao {
params.put("CardNo", idCardNo);
params.put("CardType", cardType);
params.put("TransNo", UUID.randomUUID().toString().replace("-", ""));
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 需要查询患者信息的情景}
* @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) {
throw new ServiceException(ResultEnum.PARAM_IS_DEFECT);
}
@ -130,7 +140,6 @@ public class HisPatientDao {
Map<String, Object> params = new HashMap<>();
params.put("CardNo", cardNo);
params.put("CardType", cardType);
return HisHelper.getJsonResult(HisEnum.AP_Query_Patient, params);
}

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

@ -1,10 +1,13 @@
package com.ynxbd.common.helper.common;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class URLHelper {
@FunctionalInterface
@ -36,6 +39,27 @@ public class URLHelper {
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) {
if (ObjectUtils.isEmpty(url)) {
@ -48,4 +72,13 @@ public class URLHelper {
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 {
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_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) {
if (pEnum == null) {
@ -102,7 +102,7 @@ public class HisHelper {
}
/**
* HIS订单号
* 生成HIS订单号
*/
public static String getHisTradeNo(String prefix, PEnum pEnum) {
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.his.HisRegisterDao;
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.ResultEnum;
import com.ynxbd.wx.config.AIGuidanceConfig;
@ -81,7 +82,7 @@ public class AIGuidanceService {
}
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 deptName;
@ -107,7 +108,7 @@ public class AIGuidanceService {
item.setDeptEmbedAlipayUrl("");
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) {
log.error(e.getMessage());
item.setDeptUrl("");
@ -117,6 +118,7 @@ public class AIGuidanceService {
return Result.success(ResultEnum.AI_SUCCESS, resultList);
}
/**
* [医生列表]
*
@ -145,7 +147,6 @@ public class AIGuidanceService {
RegisterDao registerDao = new RegisterDao();
List<Dept> wxDeptList = registerDao.selectDeptList();
String domain = WeChatConfig.getDomain(true);
String deptName, deptCode, headImg, doctCode;
Dept dept;
@ -188,7 +189,16 @@ public class AIGuidanceService {
}
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) {
log.error(e.getMessage());
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;
import com.ynxbd.common.bean.GMCUser;
import com.ynxbd.common.bean.User;
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 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 {
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);
log.info("[认证联系]添加{} wxOpenId={}, gmcOpenId={}, gmcUUId={}", (isOK ? "成功" : "失败"), wxOpenId, gmcOpenId, gmcUUId);
return isOK;
} 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;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.bean.GMCUser;
import com.ynxbd.common.bean.Patient;
import com.ynxbd.common.bean.User;
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.utils.DesEncryptHelper;
import com.ynxbd.wx.wxfactory.AesWxHelper;
import com.ynxbd.wx.wxfactory.WxAuthHelper;
import com.ynxbd.wx.wxfactory.WxCacheHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.*;
/**
* 患者业务层
@ -39,7 +33,7 @@ public class PatientService {
return new PatientDao().selectMyself(openid);
}
public Patient getCacheMyself(String openid) {
public Patient queryCacheMyself(String openid) {
User user = WxCacheHelper.getCacheUser(openid);
if (user == null) {
return null;
@ -63,53 +57,23 @@ public class PatientService {
public List<Patient> enPatientList(List<Patient> patients) {
for (Patient item : patients) {
if (item.getPatientId() != null) {
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()));
}
item.filterData(false);
}
return patients;
}
/**
* 查询医共体医生列表
*
* @param openid
* @param unionId
* @param isEnPid
* @return
*/
public List<Patient> queryGMCPatientList(String enUnionId, String openid, String unionId, boolean isEnPid) {
// 在查询时完成数据同步
if (!WeChatConfig.IS_GMC_SERVER) { // 不为医共体主体
// 查询医共体患者数据
// public List<Patient> queryGMCPatientList(String enUnionId, String openid, String unionId, boolean isEnPid) {
// // 在查询时完成数据同步
// if (!WeChatConfig.IS_GMC_SERVER) { // 不为医共体主体=>查询医共体患者数据
//
// }
// return queryPatientList(openid, unionId, true);
// }
public List<Patient> queryPatientList(HttpServletRequest request, String openid, String unionId, boolean isEnPid) {
if (request != null && WeChatConfig.IS_ENABLE_GMC && !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);
if (isEnPid) {
patients = enPatientList(patients);
@ -125,79 +89,6 @@ public class PatientService {
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) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
try {
bindInfo = gmcServerBind(request, bindInfo);
bindInfo = new GMCService().bindGmcServer(request, bindInfo);
} catch (Exception e) {
ErrorHelper.println(e);
return Result.error(e);
}
log.info("[患者]身份绑定 bindInfo={}", JsonHelper.toJsonString(bindInfo));
log.info("[患者]身份绑定: {}", JsonHelper.toJsonString(bindInfo));
String openid = bindInfo.getOpenid();
String name = bindInfo.getName();
String idCardNo = bindInfo.getIdCardNo();
@ -246,11 +138,11 @@ public class PatientService {
String patientId = hisPatient.getPatientId();
String hisTransNo = hisPatient.getHisTransNo();
String gmcHisPatientId = null; // HIS医共体患者ID
// String gmcHospId = null; // 医共体下的医院id
bindInfo.setPatientId(patientId);
bindInfo.setHisTransNo(hisTransNo);
bindInfo.setGmcHisPatientId(gmcHisPatientId);
// bindInfo.setGmcHospId(gmcHospId);
// 判断是否已有数据
Patient patient = patientDao.selectByIdCardNo(openid, idCardNo);
@ -267,7 +159,7 @@ public class PatientService {
} else {
patientId = patient.getPatientId();
if (healthCardId != null && new HCodeService().bindCardRelation(patientId, healthCardId) == null) { // 绑定患者和院内关系
if (healthCardId != null && new HCodeService().bindCardRelation(false, patientId, healthCardId) == null) { // 绑定患者和院内关系
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); // 天助医技预约
new HCodeService().rxReportHISData(openid, patientId);
new HealthUploadService().rxReportHISData(openid, patientId);
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)) {

@ -51,6 +51,7 @@ public class WeChatConfig {
// public static final String GMC_AUTH_APP_ID;
// public static final String GMC_AUTH_APP_SECRET;
public static final String GMC_AUTH_DOMAIN;
public static final String GMC_APP_ID;
static {
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_SECRET = config.getString("wx.gmc.auth_app_secret");
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);
}

@ -35,8 +35,8 @@ public class AesWxHelper extends AesHelper {
return decryptHex(enData, KEY, IV);
}
// public static void main(String[] args) {
// System.out.println(encode("847149"));
public static void main(String[] args) {
System.out.println(encode("001"));
// 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.helper.common.*;
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.service.GMCUserService;
import com.ynxbd.common.service.PatientService;
@ -36,8 +34,8 @@ public class WxAuthHelper {
private static final String P_PREFIX = "_@"; // 前缀
private static final String P_SUFFIX = ":"; // 后缀
private static final String AUTH_SESSION_ID_NAME = "SID";
private static final String GMC_ID = "GMCId";
private static final String AUTH_SESSION_ID_NAME = "SID"; // session name标识
private static final String GMC_ID = "GMCId"; // 主体服务器-sessionId
private static final String OPENID = "openid";
public static String getSessionOpenid(HttpServletRequest request) {
@ -78,7 +76,7 @@ public class WxAuthHelper {
user.setUnionId(unionId);
user.setOpenid(openid);
user.setIsSnapShotUser(snsToken.getIsSnapShotUser());
user.setPatientList(new PatientService().queryPatientList(openid, unionId, true));
user.setPatientList(new PatientService().queryPatientList(request, openid, unionId, true));
if (isUserInfo) {
SnsUserInfo snsUser = WxFactory.Base.OAuth().snsUserInfo(snsToken.getAccessToken(), openid, "zh_CN", 3);
@ -145,7 +143,7 @@ public class WxAuthHelper {
AuthTokenData authTokenData = new AuthTokenData();
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;
if (WeChatConfig.IS_ENABLE_GMC) { // 开启医共体开关
@ -153,12 +151,13 @@ public class WxAuthHelper {
if (WeChatConfig.IS_GMC_SERVER) { // 是医共体主服务器
authSessionId = AesWxHelper.decode(request.getHeader(AUTH_SESSION_ID_NAME));
} else { // 请求转发
} else { // 请求转发
String serverDomain = WeChatConfig.getDomain(false, false);
if (deState != null && serverDomain != null && !deState.contains(serverDomain)) {
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) {
ErrorHelper.println(e);
@ -167,20 +166,22 @@ public class WxAuthHelper {
}
if (cacheTokenOpenId != null) {
log.info("[微信token认证] token={}, cacheOpenId={}", token, cacheTokenOpenId);
AuthResultData authResultData = getTokenData(cacheTokenOpenId, token, authTokenData);
log.info("[微信token认证] cacheOpenId={}", cacheTokenOpenId);
AuthResultData authResultData = getTokenData(request, cacheTokenOpenId, token, authTokenData);
session.setAttribute(OPENID, cacheTokenOpenId);
return Result.success(authResultData.toResultData());
}
log.info("[微信认证]获取 openid={}, authSessionId={}", sessionOpenId, authSessionId);
log.info("[微信认证]获取 openId={}, authSessionId={}", sessionOpenId, authSessionId);
if (!ObjectUtils.isEmpty(authSessionId) && ObjectUtils.isEmpty(sessionOpenId)) {
sessionOpenId = WxCacheHelper.findOpenIdBySessionIdCache(authSessionId);
log.info("[微信AID认证]sessionOpenId={}", sessionOpenId);
}
AuthResultData authResultData = getCacheUserData(request, sessionOpenId, state, isUserInfo, authSessionId);
log.info("[返回认证数据] data={}", JsonHelper.toJsonString(authResultData));
if (authResultData.hasAuthUrl()) {
log.info("[返回认证链接]authResultData.getAuthUrl");
return Result.success(authResultData.getAuthUrl());
}
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,
String cacheTokenOpenId, String token, AuthTokenData tokenData, String sessionOpenId, String authSessionId) {
String reqGMCServerUrl = getReqGMCServerUrl(request);
public static Result reqGmcServiceAuth(HttpServletRequest request, HttpSession session, String state, String isUserInfo,
String cacheTokenOpenId, String token, AuthTokenData tokenData, String sessionOpenId, String authSessionId) {
// 自身认证
boolean hasTokenCache = !ObjectUtils.isEmpty(cacheTokenOpenId);
String openId = hasTokenCache ? cacheTokenOpenId : sessionOpenId;
if (ObjectUtils.isEmpty(openId)) { // 自身认证未完成
return Result.success(getAuthUrl(request, state, false, null, authSessionId));
}
// log.info("cacheTokenOpenId={}, sessionOpenId={}", cacheTokenOpenId, sessionOpenId);
// log.info("cacheTokenOpenId={}, sessionOpenId={}", cacheTokenOpenId, sessionOpenId);
// 判断是否有主体id
Object sessionGmcOpenId = session.getAttribute(GMC_ID);
String gmcOpenId = sessionGmcOpenId == null ? null : sessionGmcOpenId.toString();
log.info("[向主服务器请求认证] gmcOpenId={}", gmcOpenId);
if (gmcOpenId == null) {
GMCUser gmcUser = new GMCUserService().queryInfoByOpenId(openId);
if (gmcUser != null) {
log.info("[医共体认证]存在关联信息");
gmcOpenId = gmcUser.getGmcOpenId();
}
}
if (!ObjectUtils.isEmpty(gmcOpenId)) {
new GMCUserService().addInfo(sessionOpenId, gmcOpenId, null, CodeHelper.get32UUID());
if (sessionGmcOpenId == null) {
session.setAttribute(GMC_ID, gmcOpenId);
}
@ -219,7 +226,7 @@ public class WxAuthHelper {
// 查询返回数据
AuthResultData authResultData = null;
if (hasTokenCache) {
authResultData = getTokenData(openId, token, tokenData);
authResultData = getTokenData(request, openId, token, tokenData);
}
if (authResultData == null) {
authResultData = getCacheUserData(request, sessionOpenId, state, isUserInfo, authSessionId);
@ -227,14 +234,14 @@ public class WxAuthHelper {
if (authResultData.hasAuthUrl()) { // 授权链接
return Result.success(authResultData.getAuthUrl());
}
// repeatPatients(reqGMCServerUrl, authResultData.getPatientList(), gmcOpenId); // 患者信息去重
// repeatPatients(reqGMCServerUrl, authResultData.getPatientList(), gmcOpenId); // 患者信息去重
authResultData.setEnGmcOpenId(AesWxHelper.encode(gmcOpenId)); // 用于绑定传递数据,确保关系记录
return Result.success(authResultData.toResultData());
}
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 -> {
params.put("token", token);
params.put("state", state);
@ -249,20 +256,24 @@ public class WxAuthHelper {
return result;
}
String dataStr = result.toDataStr();
if (dataStr != null && !dataStr.contains("{")) {
if (dataStr != null && !dataStr.contains("{")) { // 返回的是认证链接
log.info("[req:主服务器认证]返回认证链接");
return Result.success(dataStr);
}
AuthResultData gmcAuthResultData = result.dataToBean(AuthResultData.class); // 医共体医生
AuthResultData gmcAuthResultData = result.dataToBean(AuthResultData.class); // 医共体信息
String enGmcOpenId = gmcAuthResultData.getEnOpenId();
gmcOpenId = AesWxHelper.decode(enGmcOpenId); // 主体openid
String gmcUUId = AesWxHelper.decode(gmcAuthResultData.getEnGmcUniqueId());
gmcOpenId = AesWxHelper.decode(enGmcOpenId); // 主体服务器的openid
log.info("[req:主服务器认证]wxOpenId={}, gmcOpenId={}", sessionOpenId, openId);
if (!ObjectUtils.isEmpty(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);
if (authResultData.hasAuthUrl()) { // 授权链接
return Result.success(authResultData.getAuthUrl());
}
authResultData.setEnGmcOpenId(enGmcOpenId); // 用于绑定传递数据,确保关系记录
return Result.success(authResultData.toResultData());
}
@ -277,18 +288,15 @@ public class WxAuthHelper {
* @param tokenData token解析出来的数据
* @return bean
*/
public static AuthResultData getTokenData(String cacheOpenId, String token, AuthTokenData tokenData) {
if (cacheOpenId == null) {
return null;
}
if (tokenData == null) {
public static AuthResultData getTokenData(HttpServletRequest request, String cacheOpenId, String token, AuthTokenData tokenData) {
if (tokenData == null || cacheOpenId == 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);
List<Patient> patients;
if (user == null) {
patients = new PatientService().queryPatientList(cacheOpenId, null, true);
patients = new PatientService().queryPatientList(request, cacheOpenId, null, true);
Cache<String, User> cache = WxCacheHelper.getUserCacheManager();
User addCache = new User();
addCache.setOpenid(cacheOpenId);
@ -315,12 +323,23 @@ public class WxAuthHelper {
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) {
log.info("[微信认证]openid={}", openId);
AuthResultData authResultData = new AuthResultData();
boolean isFindUserInfo = ("true".equals(isUserInfo));
if (openId == null) {
authResultData.setAuthUrl(getAuthUrl(request, state, isFindUserInfo, null, authSessionId));
log.info("[微信认证]data={}", JsonHelper.toJsonString(authResultData));
return authResultData;
}
@ -354,24 +373,6 @@ public class WxAuthHelper {
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=";
@ -391,7 +392,7 @@ public class WxAuthHelper {
String params = enSID + enUID;
try {
params = ObjectUtils.isEmpty(params) ? "" : URLEncoder.encode(params, "UTF-8");
log.warn("[认证链接参数] params={}", params);
log.warn("[认证链接参数]params={}", params);
} catch (Exception e) {
log.error(e.getMessage());
}
@ -407,7 +408,6 @@ public class WxAuthHelper {
return Base64Helper.encode(state);
}
// 是否为https请求
public static boolean isHttpsWithProxy(HttpServletRequest request) {
// 优先检查代理头(适用于反向代理场景)
@ -419,6 +419,7 @@ public class WxAuthHelper {
return request.isSecure();
}
// 转化成url中的参数
public static String toURLParam(String key, String val) {
if (ObjectUtils.isEmpty(val)) return "";
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) {
// 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;]
// }
// 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();
createAccessTokenCache();
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
#微信开放平台调用参数
#\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u8C03\u7528\u53C2\u6570
h.app_id=e4a05c13301f2f6a8b07b3de872dfe2d
h.app_secret=e5322dfd9bfab939851319812c30f9f1
# 医院id
# \u533B\u9662id
h.hospital_id=36626
#万达卡管平台调用参数
#\u4E07\u8FBE\u5361\u7BA1\u5E73\u53F0\u8C03\u7528\u53C2\u6570
h.card_app_id=5a4a6eacbe1040d8a91c76608aefb943
h.card_public_key=mfkwewyhkozizj0caqyikozizj0daqcdqgaepc6p0omuruc5lq7cwdu18ca4cgmqbtjpwdyrglo4wbal9/m3dv4oywez7fbgtnkkgj/kfojvze6sc/dka+ddca==
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.token=ynxbd
wx.aes_key=
@ -12,3 +12,12 @@ wx.deploy_server_name=wx
wx.web_static_path=/web
# \u9000\u8D39\u5BC6\u7801
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