微信认证调整

debug
王绍全 2 weeks ago
parent 07adc6176e
commit 572dfd80fc
  1. 59
      pom.xml
  2. 4
      src/main/java/com/ynxbd/common/TestA.java
  3. 19
      src/main/java/com/ynxbd/common/action/AliAction.java
  4. 48
      src/main/java/com/ynxbd/common/action/HealthCodeAction.java
  5. 41
      src/main/java/com/ynxbd/common/action/PatientAction.java
  6. 4
      src/main/java/com/ynxbd/common/bean/GMCUser.java
  7. 34
      src/main/java/com/ynxbd/common/bean/Patient.java
  8. 6
      src/main/java/com/ynxbd/common/dao/GMCUserDao.java
  9. 168
      src/main/java/com/ynxbd/common/dao/PatientDao.java
  10. 63
      src/main/java/com/ynxbd/common/dao/his/HisPatientDao.java
  11. 25
      src/main/java/com/ynxbd/common/result/JsonResult.java
  12. 2
      src/main/java/com/ynxbd/common/result/JsonResultEnum.java
  13. 8
      src/main/java/com/ynxbd/common/service/GMCUserService.java
  14. 191
      src/main/java/com/ynxbd/common/service/PatientService.java
  15. 33
      src/main/java/com/ynxbd/wx/wxfactory/WxAuthHelper.java
  16. 2
      src/main/java/com/ynxbd/wx/wxfactory/WxPayHelper.java
  17. 9
      src/main/java/com/ynxbd/wx/wxfactory/base/auth/models/AuthResultData.java

@ -34,7 +34,7 @@
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.36</version> <version>1.18.42</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
@ -60,10 +60,12 @@
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.rabbitmq</groupId> <groupId>org.ehcache</groupId>
<artifactId>amqp-client</artifactId> <artifactId>ehcache</artifactId>
<version>5.27.1</version> <version>3.11.1</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
@ -73,9 +75,9 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.ehcache</groupId> <groupId>com.rabbitmq</groupId>
<artifactId>ehcache</artifactId> <artifactId>amqp-client</artifactId>
<version>3.11.1</version> <version>5.28.0</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
@ -87,8 +89,12 @@
<dependency> <dependency>
<groupId>redis.clients</groupId> <groupId>redis.clients</groupId>
<artifactId>jedis</artifactId> <artifactId>jedis</artifactId>
<version>7.1.0</version> <version>7.2.0</version>
<exclusions> <exclusions>
<exclusion>
<artifactId>error_prone_annotations</artifactId>
<groupId>com.google.errorprone</groupId>
</exclusion>
<exclusion> <exclusion>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
@ -132,12 +138,6 @@
<groupId>org.apache.struts</groupId> <groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId> <artifactId>struts2-core</artifactId>
<version>${struts.version}</version> <version>${struts.version}</version>
<exclusions>
<exclusion>
<artifactId>error_prone_annotations</artifactId>
<groupId>com.google.errorprone</groupId>
</exclusion>
</exclusions>
</dependency> </dependency>
<!-- struts2零配置依赖 --> <!-- struts2零配置依赖 -->
@ -155,12 +155,12 @@
<version>1.2</version> <version>1.2</version>
</dependency> </dependency>
<!-- 微信菜单-包冲突--> <!-- 微信菜单-包冲突-->
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>com.soecode.wx-tools</groupId>--> <!-- <groupId>com.soecode.wx-tools</groupId>-->
<!-- <artifactId>wx-tools</artifactId>--> <!-- <artifactId>wx-tools</artifactId>-->
<!-- <version>2.1.4-RELEASE</version>--> <!-- <version>2.1.4-RELEASE</version>-->
<!-- </dependency>--> <!-- </dependency>-->
<!--微信授权和订单信息--> <!--微信授权和订单信息-->
<dependency> <dependency>
@ -180,6 +180,14 @@
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
</exclusion> </exclusion>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
<exclusion>
<artifactId>commons-codec</artifactId>
<groupId>commons-codec</groupId>
</exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
@ -242,6 +250,10 @@
<artifactId>log4j-api</artifactId> <artifactId>log4j-api</artifactId>
<groupId>org.apache.logging.log4j</groupId> <groupId>org.apache.logging.log4j</groupId>
</exclusion> </exclusion>
<exclusion>
<artifactId>commons-lang3</artifactId>
<groupId>org.apache.commons</groupId>
</exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
@ -271,6 +283,12 @@
<groupId>commons-net</groupId> <groupId>commons-net</groupId>
<artifactId>commons-net</artifactId> <artifactId>commons-net</artifactId>
<version>3.12.0</version> <version>3.12.0</version>
<exclusions>
<exclusion>
<artifactId>commons-io</artifactId>
<groupId>commons-io</groupId>
</exclusion>
</exclusions>
</dependency> </dependency>
<!-- 共享文件工具包--> <!-- 共享文件工具包-->
@ -420,7 +438,6 @@
</dependency> </dependency>
<!--百度身份证识别--> <!--百度身份证识别-->
<dependency> <dependency>
<groupId>com.baidu.aip</groupId> <groupId>com.baidu.aip</groupId>

@ -1,5 +1,6 @@
package com.ynxbd.common; package com.ynxbd.common;
import com.ynxbd.wx.wxfactory.AesWxHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
@ -25,6 +26,9 @@ public class TestA {
// .build(); // .build();
// log.info("[认证请求转发] resp:[{}]", requestBody); // log.info("[认证请求转发] resp:[{}]", requestBody);
// log.info("[认证请求转发] resp:[{}]", JsonHelper.toJsonString(requestBody)); // log.info("[认证请求转发] resp:[{}]", JsonHelper.toJsonString(requestBody));
String decode = AesWxHelper.decode("26BF93E3E09EFC13F3AC0574A271B83F4D5EAE7C8A5101BCF8560CE14EC80FF9");
System.out.println(decode);
} }

@ -6,6 +6,7 @@ import com.ynxbd.ali.helper.AliHelper;
import com.ynxbd.ali.helper.AliMessageHelper; import com.ynxbd.ali.helper.AliMessageHelper;
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.Patient;
import com.ynxbd.common.bean.User; import com.ynxbd.common.bean.User;
import com.ynxbd.common.bean.enums.HCardTypeEnum; import com.ynxbd.common.bean.enums.HCardTypeEnum;
import com.ynxbd.common.result.Result; import com.ynxbd.common.result.Result;
@ -100,7 +101,7 @@ public class AliAction extends BaseAction {
* 绑定新患者不通过电子健康卡 * 绑定新患者不通过电子健康卡
*/ */
@Action("bindMyself") @Action("bindMyself")
public Result bindMyself(String openid, String accessToken, String address, String county, String areaCode, String areaAddress, String nation, String birthday, boolean isVerifyCode, String smsCode) { public Result bindMyself(boolean isVerifyCode, String smsCode, String openid, String accessToken, String address, String county, String areaCode, String areaAddress, String nation, String birthday) {
log.info("【支付宝】用户授权 accessToken={}", accessToken); log.info("【支付宝】用户授权 accessToken={}", accessToken);
if (accessToken == null) { if (accessToken == null) {
return Result.error(ResultEnum.PARAM_IS_BLANK); return Result.error(ResultEnum.PARAM_IS_BLANK);
@ -128,7 +129,21 @@ public class AliAction extends BaseAction {
if (ObjectUtils.isEmpty(areaCode)) { if (ObjectUtils.isEmpty(areaCode)) {
areaCode = county; areaCode = county;
} }
return new PatientService().bindMyself(trueName, idCardNo, cardTypeEnum, address, areaCode, areaAddress, openid, gender, nation, birthday, isVerifyCode, tel, smsCode);
Patient bindInfo = new Patient();
bindInfo.setName(trueName);
bindInfo.setIdCardNo(idCardNo);
bindInfo.setCardTypeEnum(cardTypeEnum);
bindInfo.setAddress(address);
bindInfo.setAreaCode(areaCode);
bindInfo.setAreaAddress(areaAddress);
bindInfo.setOpenid(openid);
bindInfo.setSex(gender);
bindInfo.setNation(nation);
bindInfo.setBirthday(birthday);
bindInfo.setTel(tel);
return new PatientService().bindMyself(request, isVerifyCode, tel, smsCode, bindInfo);
} }

@ -12,12 +12,15 @@ import com.ynxbd.common.config.interceptor.AesDecode;
import com.ynxbd.common.dao.PatientDao; import com.ynxbd.common.dao.PatientDao;
import com.ynxbd.common.dao.his.HisPatientDao; import com.ynxbd.common.dao.his.HisPatientDao;
import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.helper.common.DateHelper;
import com.ynxbd.common.helper.common.ErrorHelper;
import com.ynxbd.common.helper.common.IDNumberHelper; import com.ynxbd.common.helper.common.IDNumberHelper;
import com.ynxbd.common.helper.common.ValidHelper; import com.ynxbd.common.helper.common.ValidHelper;
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.common.service.HCodeService; import com.ynxbd.common.service.HCodeService;
import com.ynxbd.common.service.PatientService; import com.ynxbd.common.service.PatientService;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.AesWxHelper;
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;
@ -191,12 +194,18 @@ 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) { 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) {
log.info("[电子健康卡]身份绑定 name={}, address={}, areaCode={}, areaAddress={}, nation={}, sex={}, birthday={}, tel={}, healthCardId={}, cardType={}", name, address, areaCode, areaAddress, nation, sex, birthday, tel, healthCardId, cardType); 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) { if (isHealthCard == null || openid == null || tel == null || sex == null || birthday == null || name == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); return Result.error(ResultEnum.PARAM_IS_DEFECT);
} }
if (!openid.equals(AesWxHelper.decode(enOpenId))) {
log.info("[绑定]参数无效 openId={}, enOpenId={}", openid, AesWxHelper.decode(enOpenId));
return Result.error(ResultEnum.PARAM_IS_INVALID);
}
HCodeService hCodeService = new HCodeService(); HCodeService hCodeService = new HCodeService();
if (isFace) { // 实名认证 if (isFace) { // 实名认证
if (!hCodeService.checkUniformVerifyResult(orderId, registerOrderId)) { if (!hCodeService.checkUniformVerifyResult(orderId, registerOrderId)) {
@ -275,7 +284,28 @@ public class HealthCodeAction extends BaseAction {
} }
} }
} }
return new PatientService().bindCard(false, isAreaCode, healthCardId, openid, name, sex, idCardNo, cardTypeEnum, tel, birthday, nation, uuid, address, areaCode, areaAddress);
Patient bindInfo = new Patient();
bindInfo.setOpenid(openid);
bindInfo.setUuid(uuid);
bindInfo.setHealthCardId(healthCardId);
bindInfo.setName(name);
bindInfo.setSex(sex);
bindInfo.setIdCardNo(idCardNo);
bindInfo.setCardTypeEnum(cardTypeEnum);
bindInfo.setTel(tel);
bindInfo.setBirthday(birthday);
bindInfo.setNation(nation);
bindInfo.setAddress(address);
bindInfo.setAreaCode(areaCode);
bindInfo.setAreaAddress(areaAddress);
//
bindInfo.setEnOpenId(enOpenId);
bindInfo.setEnUnionId(enUnionId);
bindInfo.setEnHospAppId(enHospAppId);
bindInfo.setEnGmcOpenId(enGmcOpenId);
return new PatientService().bindCard(request, false, isAreaCode, bindInfo);
} }
@ -356,7 +386,17 @@ public class HealthCodeAction extends BaseAction {
return Result.error(healthCardRespCodeEnum.MESSAGE); return Result.error(healthCardRespCodeEnum.MESSAGE);
} }
boolean isUpdate = new PatientDao().updateInfo(openid, patientId, idCardNo, healthCardId, name, nation, tel, null, address, null, null); Patient bindInfo = new Patient();
bindInfo.setOpenid(openid);
bindInfo.setPatientId(patientId);
bindInfo.setIdCardNo(idCardNo);
bindInfo.setHealthCardId(healthCardId);
bindInfo.setName(name);
bindInfo.setNation(nation);
bindInfo.setTel(tel);
bindInfo.setAddress(address);
boolean isUpdate = new PatientDao().updateInfo(bindInfo);
if (isUpdate) { if (isUpdate) {
Cache<String, User> cache = WxCacheHelper.getUserCacheManager(); Cache<String, User> cache = WxCacheHelper.getUserCacheManager();
cache.remove(openid); cache.remove(openid);

@ -13,6 +13,7 @@ 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 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;
@ -193,10 +194,10 @@ public class PatientAction extends BaseAction {
} }
/** /**
* [无证绑定-有证绑定]绑定新患者不通过电子健康卡 * [无证|有证绑定]绑定新患者不通过电子健康卡
*/ */
@Action("bind") @Action("bind")
public Result bind(boolean isVerifyCode, String address, String areaCode, String areaAddress, String idCardNo, String openid, String sex, String name, String nation, String birthday, String cardType, String tel, String smsCode) { public Result bind(boolean isVerifyCode, String tel, String smsCode, String address, String areaCode, String areaAddress, String idCardNo, String openid, String sex, String name, String nation, String birthday, String cardType, String enUnionId, String enOpenId, String enGmcOpenId, String enHospAppId) {
log.info("[身份绑定] openid={}, name={}, address={}, areaCode={}, areaAddress={}, nation={}, sex={}, birthday={}, cardType={}", openid, name, address, areaCode, areaAddress, nation, sex, birthday, cardType); log.info("[身份绑定] openid={}, name={}, address={}, areaCode={}, areaAddress={}, nation={}, sex={}, birthday={}, cardType={}", openid, name, address, areaCode, areaAddress, nation, sex, birthday, cardType);
if (openid == null || sex == null || birthday == null || name == null || nation == null) { if (openid == null || sex == null || birthday == null || name == null || nation == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); return Result.error(ResultEnum.PARAM_IS_DEFECT);
@ -244,7 +245,7 @@ public class PatientAction extends BaseAction {
mName = getString("mName"); mName = getString("mName");
mIDCardNo = getString("mIDCardNo"); mIDCardNo = getString("mIDCardNo");
Result result = new PatientService().noCardBind(fTel, fName, fIDCardNo, mTel, mName, mIDCardNo); Result result = new PatientService().noCardParamsValid(fTel, fName, fIDCardNo, mTel, mName, mIDCardNo);
if (!result.isOK()) { if (!result.isOK()) {
return result; return result;
} }
@ -260,13 +261,39 @@ public class PatientAction extends BaseAction {
} }
} }
String uuid = UUID.randomUUID().toString().replace("-", ""); // 儿童身份证代码 Patient bindInfo = new Patient();
bindInfo.setUuid(UUID.randomUUID().toString().replace("-", "")); // 儿童身份证代码
return new PatientService().bind(false, true, null, openid, name, sex, idCardNo, cardTypeEnum, tel, birthday, nation, uuid, address, areaCode, areaAddress, fName, fTel, fIDCardNo, mName, mTel, mIDCardNo);
bindInfo.setHealthCardId(null);
bindInfo.setOpenid(openid);
bindInfo.setEnOpenId(enOpenId);
bindInfo.setEnUnionId(enUnionId);
bindInfo.setEnHospAppId(enHospAppId);
bindInfo.setEnGmcOpenId(enGmcOpenId);
bindInfo.setName(name);
bindInfo.setSex(sex);
bindInfo.setIdCardNo(idCardNo);
bindInfo.setCardTypeEnum(cardTypeEnum);
bindInfo.setTel(tel);
bindInfo.setBirthday(birthday);
bindInfo.setNation(nation);
bindInfo.setAddress(address);
bindInfo.setAreaCode(areaCode);
bindInfo.setAreaAddress(areaAddress);
//
bindInfo.setFatherName(fName);
bindInfo.setFatherTel(fTel);
bindInfo.setFatherIdCardNo(fIDCardNo);
//
bindInfo.setMotherName(mName);
bindInfo.setMotherTel(mTel);
bindInfo.setMotherIdCardNo(mIDCardNo);
return new PatientService().bind(request, false, true, bindInfo);
} }
/** /**
* 解绑健康卡 * 患者解绑
*/ */
@Action("unBind") @Action("unBind")
public Result unBind(String openid, String patientId) { public Result unBind(String openid, String patientId) {

@ -24,6 +24,8 @@ public class GMCUser {
private String gmcUnionId; private String gmcUnionId;
private String gmcUUID; private String gmcUUId;
private String childAppId;
} }

@ -1,5 +1,6 @@
package com.ynxbd.common.bean; package com.ynxbd.common.bean;
import com.ynxbd.common.bean.enums.HCardTypeEnum;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
@ -72,4 +73,37 @@ public class Patient implements Serializable {
private String areaCode; private String areaCode;
// 地区 // 地区
private String areaAddress; private String areaAddress;
// 表内唯一ID
private String uniqueId;
// 医共体主体认证id
private String gmcOpenId;
// 医共体主体患者UUID
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;
private HCardTypeEnum cardTypeEnum;
// 清除监护人信息
public void clearGuardianData() {
this.fatherName = null;
this.fatherIdCardNo = null;
this.fatherTel = null;
this.motherName = null;
this.motherIdCardNo = null;
this.motherTel = null;
}
} }

@ -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 gmcUUId) {
String sql = "insert into gmc_user(updateTime, wxOpenId, gmcOpenId, gmcUnionId, gmcUUID) values (now(),?,?,?,?)"; String sql = "insert into gmc_user(updateTime, wxOpenId, gmcOpenId, gmcUnionId, gmcUUId, childAppId) 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, gmcUUId);
}) > 0; }) > 0;
} }
} }

@ -4,6 +4,7 @@ import com.ynxbd.common.bean.Patient;
import com.ynxbd.common.bean.PatientLink; import com.ynxbd.common.bean.PatientLink;
import com.ynxbd.common.bean.enums.HCardTypeEnum; import com.ynxbd.common.bean.enums.HCardTypeEnum;
import com.ynxbd.common.config.db.DataBase; import com.ynxbd.common.config.db.DataBase;
import com.ynxbd.common.helper.common.CodeHelper;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import java.util.ArrayList; import java.util.ArrayList;
@ -178,117 +179,91 @@ public class PatientDao {
/** /**
* 更新用户信息 * 更新用户信息
* *
* @param openid openid * @param bindInfo 绑定信息
* @param idCardNo idCardNo
* @param healthCardId 健康卡id
* @param name 姓名
* @param nation 民族
* @param tel 电话
* @param address 地址
* @return 是否成功 * @return 是否成功
*/ */
public boolean updateInfo(String openid, String idCardNo, String patientId, String healthCardId, String name, String nation, String tel, String uuid, String address, String areaCode, String areaAddress) { public boolean updateInfo(Patient bindInfo) {
String sql = "update patientBase set deletedState=0, healthCardId=?, name=?, nation=?, tel=?, address=?, uuid=?, areaCode=?, areaAddress=?, patientId=? where openid=? and idCardNo=?"; String sql = "update patientBase set deletedState=0, healthCardId=?, name=?, nation=?, tel=?, address=?, uuid=?, areaCode=?, areaAddress=?, patientId=?, gmcHisPatientId=?, gmcBindState=1, " +
" uniqueId=if(uniqueId is null or uniqueId = '', ?, uniqueId), " +
" gmcUniqueId=if(gmcUniqueId is null or gmcUniqueId = '', ?, gmcUniqueId), " +
" hospAppId=if(hospAppId is null or hospAppId = '', ?, hospAppId) " +
" where openid=? and idCardNo=?";
return DataBase.update(sql, ps -> { return DataBase.update(sql, ps -> {
ps.setString(1, healthCardId); ps.setString(1, bindInfo.getHealthCardId());
ps.setString(2, name); ps.setString(2, bindInfo.getName());
ps.setString(3, nation); ps.setString(3, bindInfo.getNation());
ps.setString(4, tel); ps.setString(4, bindInfo.getTel());
ps.setString(5, address); ps.setString(5, bindInfo.getAddress());
ps.setString(6, uuid); ps.setString(6, bindInfo.getUuid());
ps.setString(7, areaCode); ps.setString(7, bindInfo.getAreaCode());
ps.setString(8, areaAddress); ps.setString(8, bindInfo.getAreaAddress());
ps.setString(9, patientId); 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, openid); ps.setString(14, bindInfo.getOpenid());
ps.setString(11, idCardNo); ps.setString(15, bindInfo.getIdCardNo());
}) > 0; }) > 0;
} }
/** /**
* [患者]绑定身份证成人 * [患者]绑定身份证成人
* *
* @param healthCardId 健康卡ID
* @param openid openid
* @param patientId 患者ID
* @param hisTransNo hisTransNo
* @param name 姓名
* @param sex 性别
* @param idCardNo 身份证
* @param tel 电话
* @param address 地址
* @param birthday 生日
* @param nation 民族
*/ */
public boolean insertCard(boolean isMyself, String healthCardId, String openid, String patientId, String hisTransNo, public boolean insertCard(boolean isMyself, Patient bindData) {
String name, String sex, String idCardNo, HCardTypeEnum cardTypeEnum, String birthday, String age, bindData.clearGuardianData();
String nation, String tel, String uuid, String address, String areaCode, String areaAddress) { return insert(isMyself, bindData);
return insert(isMyself, healthCardId, openid, patientId, hisTransNo, name, sex, idCardNo, cardTypeEnum, birthday, age, nation, tel, uuid, address, areaCode, areaAddress, null, null, null, null, null, null);
} }
/** /**
* [患者]绑定身份证 * [患者]绑定身份证
* *
* @param isMyself 是否为自己 * @param isMyself 是否为自己
* @param healthCardId 健康卡ID * @param bindData 绑定数据
* @param openid openid
* @param patientId 患者ID
* @param hisTransNo hisTransNo
* @param name 姓名
* @param sex 性别
* @param idCardNo 身份证
* @param cardTypeEnum 证件类型
* @param birthday 生日
* @param age 年龄
* @param address 详细地址
* @param nation 民族
* @param tel 电话
* @param uuid uuid
* @param areaCode 地区编码
* @param areaAddress 地区地址
* @param fName 父亲姓名
* @param fTel 父亲电话
* @param fIDCardNo 父亲身份证
* @param mName 母亲姓名
* @param mTel 母亲电话
* @param mIDCardNo 母亲身份证号
* @return bool * @return bool
*/ */
public boolean insert(boolean isMyself, String healthCardId, String openid, String patientId, String hisTransNo, public boolean insert(boolean isMyself, Patient bindData) {
String name, String sex, String idCardNo, HCardTypeEnum cardTypeEnum, String birthday, String age, 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 nation, String tel, String uuid, String address, String areaCode, String areaAddress, " values(now(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
String fName, String fTel, String fIDCardNo,
String mName, String mTel, String mIDCardNo) { HCardTypeEnum cardTypeEnum = bindData.getCardTypeEnum();
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) " +
" values(now(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
return DataBase.insert(sql, ps -> { return DataBase.insert(sql, ps -> {
ps.setString(1, openid); ps.setString(1, bindData.getOpenid());
ps.setString(2, patientId); ps.setString(2, bindData.getPatientId());
ps.setString(3, hisTransNo); ps.setString(3, bindData.getHisTransNo());
ps.setString(4, name); ps.setString(4, bindData.getName());
ps.setString(5, sex); ps.setString(5, bindData.getSex());
ps.setString(6, idCardNo); ps.setString(6, bindData.getIdCardNo());
ps.setString(7, tel); ps.setString(7, bindData.getTel());
ps.setString(8, birthday); ps.setString(8, bindData.getBirthday());
ps.setString(9, nation); ps.setString(9, bindData.getNation());
ps.setString(10, healthCardId); ps.setString(10, bindData.getHealthCardId());
ps.setString(11, age); ps.setString(11, bindData.getAge());
ps.setString(12, uuid); ps.setString(12, bindData.getUuid());
// //
ps.setString(13, fName); ps.setString(13, bindData.getFatherName());
ps.setString(14, fTel); ps.setString(14, bindData.getFatherTel());
ps.setString(15, fIDCardNo); ps.setString(15, bindData.getFatherIdCardNo());
ps.setString(16, mName); ps.setString(16, bindData.getMotherName());
ps.setString(17, mTel); ps.setString(17, bindData.getMotherTel());
ps.setString(18, mIDCardNo); ps.setString(18, bindData.getMotherIdCardNo());
ps.setString(19, address); ps.setString(19, bindData.getAddress());
ps.setString(20, areaCode); ps.setString(20, bindData.getAreaCode());
ps.setString(21, areaAddress); ps.setString(21, bindData.getAreaAddress());
ps.setBoolean(22, isMyself); ps.setBoolean(22, isMyself);
ps.setString(23, cardTypeEnum.WX_CODE); ps.setString(23, cardTypeEnum == null ? HCardTypeEnum._01.WX_CODE : cardTypeEnum.WX_CODE);
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());
}) > 0; }) > 0;
} }
@ -364,7 +339,8 @@ public class PatientDao {
} }
public boolean updateMyself(String openid, String idCardNo, String patientId, String name, String address, String areaCode, String nation, String tel) { public boolean updateMyself(Patient bindInfo) {
String idCardNo = bindInfo.getIdCardNo();
if (idCardNo == null) { if (idCardNo == null) {
return false; return false;
} }
@ -379,14 +355,14 @@ public class PatientDao {
" nation = (CASE idCardNo WHEN " + idCardNo + " THEN ? else nation end)" + " nation = (CASE idCardNo WHEN " + idCardNo + " THEN ? else nation end)" +
" where openid = ?"; " where openid = ?";
return DataBase.update(sql, ps -> { return DataBase.update(sql, ps -> {
ps.setString(1, areaCode); ps.setString(1, bindInfo.getAreaCode());
ps.setString(2, address); ps.setString(2, bindInfo.getAddress());
ps.setString(3, patientId); ps.setString(3, bindInfo.getPatientId());
ps.setString(4, name); ps.setString(4, bindInfo.getName());
ps.setString(5, tel); ps.setString(5, bindInfo.getTel());
ps.setString(6, nation); ps.setString(6, bindInfo.getNation());
//--------------------------------------- //---------------------------------------
ps.setString(7, openid); ps.setString(7, bindInfo.getOpenid());
}) > 0; }) > 0;
} }
} }

@ -24,26 +24,19 @@ import java.util.UUID;
@Slf4j @Slf4j
public class HisPatientDao { public class HisPatientDao {
/** /**
* 身份绑定 * HIS身份绑定
* *
* @param name 患者名 * @param isArea 是否传递区域编码
* @param sex 性别 * @param bindData 绑定信息
* @param idCardNo 身份证号 * @return bean
* @param tel 电话
* @param address 地址
* @param birthday 生日
* @param nation 名族
* @param fName 父亲姓名
* @param fTel 父亲电话
* @param fIDCardNo 父亲身份证
* @param mName 母亲姓名
* @param mTel 母亲电话
* @param mIDCardNo 母亲身份证号
* @return 患者
*/ */
public Patient bind(boolean isArea, String name, String sex, String idCardNo, HCardTypeEnum cardTypeEnum, String tel, String address, String birthday, String nation, String areaCode, String uuid, String fName, String fTel, String fIDCardNo, String mName, String mTel, String mIDCardNo) throws ServiceException { public Patient bind(boolean isArea, Patient bindData) throws ServiceException {
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
String uuid = bindData.getUuid();
String idCardNo = bindData.getIdCardNo();
HCardTypeEnum cardTypeEnum = bindData.getCardTypeEnum();
// idCardNo = null 是儿童 // idCardNo = null 是儿童
String cardNo = idCardNo == null ? uuid : idCardNo; String cardNo = idCardNo == null ? uuid : idCardNo;
@ -53,27 +46,35 @@ public class HisPatientDao {
params.put("TransNo", UUID.randomUUID().toString().replace("-", "")); params.put("TransNo", UUID.randomUUID().toString().replace("-", ""));
params.put("IdCardNo", idCardNo); params.put("IdCardNo", idCardNo);
params.put("CardNo", cardNo); params.put("CardNo", cardNo);
params.put("Name", name); params.put("Name", bindData.getName());
params.put("Sex", sex.equals("男") ? "1" : "2"); params.put("Sex", "男".equals(bindData.getSex()) ? "1" : "2");
params.put("BirthDay", birthday); params.put("BirthDay", bindData.getBirthday());
params.put("Address", address); params.put("Address", bindData.getAddress());
params.put("Nation", nation); params.put("Nation", bindData.getNation());
params.put("Tel", tel); params.put("Tel", bindData.getTel());
String areaCode = bindData.getAreaCode();
if (isArea && !ObjectUtils.isEmpty(areaCode)) { if (isArea && !ObjectUtils.isEmpty(areaCode)) {
params.put("Address_Code", areaCode); params.put("Address_Code", areaCode);
} }
if (fName != null && fTel != null && fIDCardNo != null) { String fatherName = bindData.getFatherName();
params.put("GuardianFatherName", fName); String fatherTel = bindData.getFatherTel();
params.put("GuardianFatherTel", fIDCardNo); String fatherIdCardNo = bindData.getFatherIdCardNo();
params.put("GuardianFatherIdCard", fIDCardNo); if (fatherName != null && fatherTel != null && fatherIdCardNo != null) {
params.put("GuardianFatherName", fatherName);
params.put("GuardianFatherTel", fatherTel);
params.put("GuardianFatherIdCard", fatherIdCardNo);
} }
if (mName != null && mTel != null & mIDCardNo != null) { String motherName = bindData.getMotherName();
params.put("GuardianMotherName", mName); String motherTel = bindData.getMotherTel();
params.put("GuardianMotherTel", mTel); String motherIdCardNo = bindData.getMotherIdCardNo();
params.put("GuardianMotherIdCard", mIDCardNo);
if (motherName != null && motherTel != null & motherIdCardNo != null) {
params.put("GuardianMotherName", motherName);
params.put("GuardianMotherTel", motherTel);
params.put("GuardianMotherIdCard", motherIdCardNo);
} }
JsonResult JsonResult = HisHelper.getJsonResult(HisEnum.AP_Binding_Card, params); JsonResult JsonResult = HisHelper.getJsonResult(HisEnum.AP_Binding_Card, params);
Patient patient = JsonResult.dataMapToBean(Patient.class); Patient patient = JsonResult.dataMapToBean(Patient.class);

@ -421,7 +421,7 @@ public class JsonResult {
} }
public <T> List<T> dataMapGetNodeToList(Class<T> clazz) { public <T> List<T> dataMapGetNodeToList(Class<T> clazz) {
return dataMapGetNodeToList(clazz, "data"); return dataMapGetNodeToList(clazz, "data");
} }
@ -453,6 +453,29 @@ public class JsonResult {
return JsonHelper.decodeBean(jsonObject, clazz); return JsonHelper.decodeBean(jsonObject, clazz);
} }
public String dataMapGetStr(String key) {
if (key == null || this.dataMap == null) {
return null;
}
Object val = this.dataMap.get(key);
return val == null ? null : val.toString();
}
public JSONObject dataMapGetNodeToJsonObj() {
return dataMapGetNodeToJsonObj("data");
}
public JSONObject dataMapGetNodeToJsonObj(String node) {
if (this.dataMap == null) {
return null;
}
Object dataObj = this.dataMap.get(node);
if (dataObj == null) {
return null;
}
return JsonHelper.parseObject(dataObj.toString());
}
// /** // /**
// * 获取DataMap为bean // * 获取DataMap为bean
// * // *

@ -16,7 +16,7 @@ public enum JsonResultEnum {
SYS_ME("[医保]", "return_code", "return_msg", "SUCCESS", "FAIL", String.valueOf(HttpStatus.HTTP_CLIENT_TIMEOUT)), SYS_ME("[医保]", "return_code", "return_msg", "SUCCESS", "FAIL", String.valueOf(HttpStatus.HTTP_CLIENT_TIMEOUT)),
SYS_MICRO("[微官网]", "code", "message", "200", "0", String.valueOf(HttpStatus.HTTP_CLIENT_TIMEOUT)), SYS_COMMON("[通用]", "code", "message", "200", "0", String.valueOf(HttpStatus.HTTP_CLIENT_TIMEOUT)),
SYS_MEDICAL_ASSISTANT("[就医助手]", "errcode", "errmsg", "0", "-1", String.valueOf(HttpStatus.HTTP_CLIENT_TIMEOUT)), SYS_MEDICAL_ASSISTANT("[就医助手]", "errcode", "errmsg", "0", "-1", String.valueOf(HttpStatus.HTTP_CLIENT_TIMEOUT)),

@ -18,12 +18,14 @@ public class GMCUserService {
/** /**
* 添加用户关系 * 添加用户关系
*/ */
public boolean addInfo(String wxOpenId, String gmcOpenId, String gmcUnionId, String gmcUUID) { public boolean 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 false;
} }
return 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);
return isOK;
} catch (Exception e) { } catch (Exception e) {
return false; return false;
} }

@ -1,25 +1,28 @@
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.bean.enums.HCardTypeEnum;
import com.ynxbd.common.dao.PatientDao; import com.ynxbd.common.dao.PatientDao;
import com.ynxbd.common.dao.his.HisPatientDao; import com.ynxbd.common.dao.his.HisPatientDao;
import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.helper.common.*;
import com.ynxbd.common.helper.common.ParamHelper; import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.helper.common.SmsHelper;
import com.ynxbd.common.helper.common.ValidHelper;
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.common.result.ServiceException; 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 java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.UUID; import java.util.UUID;
/** /**
@ -117,36 +120,109 @@ public class PatientService {
/** /**
* [有证绑定] * [有证绑定]
*/ */
public Result bindCard(boolean isMyself, boolean isAreaCode, String healthCardId, String openid, String name, String sex, String idCardNo, HCardTypeEnum cardTypeEnum, String tel, String birthday, String nation, String uuid, String address, String areaCode, String areaAddress) { public Result bindCard(HttpServletRequest request, boolean isMyself, boolean isAreaCode, Patient bindInfo) {
return bind(isMyself, isAreaCode, healthCardId, openid, name, sex, idCardNo, cardTypeEnum, tel, birthday, nation, uuid, address, areaCode, areaAddress, null, null, null, null, null, null); bindInfo.clearGuardianData();
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;
} }
/** /**
* [绑定] * [绑定]
* *
* @param isMyself 是否为自己 * @param isMyself 是否为自己
* @param isAreaCode 是否传递行政区编码 * @param isAreaCode 是否传递行政区编码
* @param healthCardId 健康卡id * @param bindInfo 绑定数据
* @param openid openid
* @param name 姓名
* @param sex 性别
* @param idCardNo 证件号码
* @param tel 电话号码
* @param address 地址
* @param birthday 出生日期
* @param nation 名字
* @param areaCode 行政区编码
* @param uuid uuid 随机编码
* @param fName 父姓名
* @param fTel 父电话
* @param fIDCardNo 父证件号码
* @param mName 母姓名
* @param mTel 母电话
* @param mIDCardNo 母身份证号码
*/ */
public Result bind(boolean isMyself, boolean isAreaCode, String healthCardId, String openid, String name, String sex, String idCardNo, HCardTypeEnum cardTypeEnum, String tel, String birthday, String nation, String uuid, String address, String areaCode, String areaAddress, String fName, String fTel, String fIDCardNo, String mName, String mTel, String mIDCardNo) { public Result bind(HttpServletRequest request, boolean isMyself, boolean isAreaCode, Patient bindInfo) {
log.info("[患者]身份绑定 name={}, address={}, areaCode={}, areaAddress={}, nation={}, sex={}, birthday={}, tel={}", name, address, areaCode, areaAddress, nation, sex, birthday, tel); if (bindInfo == null) {
if (openid == null || sex == null || birthday == null || name == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
try {
bindInfo = gmcServerBind(request, bindInfo);
} catch (Exception e) {
ErrorHelper.println(e);
return Result.error(e);
}
log.info("[患者]身份绑定 bindInfo={}", JsonHelper.toJsonString(bindInfo));
String openid = bindInfo.getOpenid();
String name = bindInfo.getName();
String idCardNo = bindInfo.getIdCardNo();
String healthCardId = bindInfo.getHealthCardId();
if (openid == null || bindInfo.getSex() == null || bindInfo.getBirthday() == null || bindInfo.getName() == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); return Result.error(ResultEnum.PARAM_IS_DEFECT);
} }
PatientDao patientDao = new PatientDao(); PatientDao patientDao = new PatientDao();
@ -159,7 +235,7 @@ public class PatientService {
Patient hisPatient; Patient hisPatient;
try { try {
hisPatient = new HisPatientDao().bind(isAreaCode, name, sex, idCardNo, cardTypeEnum, tel, address, birthday, nation, areaCode, uuid, fName, fTel, fIDCardNo, mName, mTel, mIDCardNo); hisPatient = new HisPatientDao().bind(isAreaCode, bindInfo);
} catch (ServiceException e) { } catch (ServiceException e) {
return Result.error(e); return Result.error(e);
} }
@ -169,16 +245,28 @@ public class PatientService {
} }
String patientId = hisPatient.getPatientId(); String patientId = hisPatient.getPatientId();
String hisTransNo = hisPatient.getHisTransNo();
String gmcHisPatientId = null; // HIS医共体患者ID
bindInfo.setPatientId(patientId);
bindInfo.setHisTransNo(hisTransNo);
bindInfo.setGmcHisPatientId(gmcHisPatientId);
// 判断是否已有数据 // 判断是否已有数据
Patient patient = patientDao.selectByIdCardNo(openid, idCardNo); Patient patient = patientDao.selectByIdCardNo(openid, idCardNo);
if (patient == null) { // 数据库没有-->添加 if (patient == null) { // 数据库没有-->添加
log.info("[患者]添加 name={}, address={}, areaCode={}, healthCardId={}, nation={}, sex={}, birthday={}, tel={}", name, address, areaCode, healthCardId, nation, sex, birthday, tel); log.info("[用户身份绑定]添加 name={}, patientId={}", name, patientId);
if (!patientDao.insert(isMyself, healthCardId, openid, patientId, hisPatient.getHisTransNo(), name, sex, idCardNo, cardTypeEnum, birthday, null, nation, tel, uuid, address, areaCode, areaAddress, fName, fTel, fIDCardNo, mName, mTel, mIDCardNo)) { bindInfo.setGmcBindState(1);
log.info("[身份绑定]添加患者失败"); if (bindInfo.getEnUnionId() != null) {
bindInfo.setUnionId(AesWxHelper.decode(bindInfo.getEnUnionId()));
}
if (!patientDao.insert(isMyself, bindInfo)) {
log.info("[用户身份绑定]添加患者失败 name={}, patientId={}", name, patientId);
return Result.error(ResultEnum.PATIENT_ADD_ERROR); return Result.error(ResultEnum.PATIENT_ADD_ERROR);
} }
} else { } else {
patientId = patient.getPatientId();
if (healthCardId != null && new HCodeService().bindCardRelation(patientId, healthCardId) == null) { // 绑定患者和院内关系 if (healthCardId != null && new HCodeService().bindCardRelation(patientId, healthCardId) == null) { // 绑定患者和院内关系
log.info("[电子健康卡]绑定患者和医院关系失败"); log.info("[电子健康卡]绑定患者和医院关系失败");
} }
@ -188,28 +276,31 @@ public class PatientService {
healthCardId = hcId; healthCardId = hcId;
} }
log.info("[患者]更新 isMyself={}, patientId={}, name={}, healthCardId={}", isMyself, patient.getPatientId(), name, healthCardId); log.info("[患者]更新 isMyself={}, patientId={}, name={}, healthCardId={}", isMyself, patientId, name, healthCardId);
if (isMyself) { if (isMyself) {
if (!patientDao.updateMyself(openid, idCardNo, patientId, name, address, areaCode, nation, tel)) { if (!patientDao.updateMyself(bindInfo)) {
log.info("[患者]自身信息更新失败 patientId={}", patient.getPatientId()); log.info("[患者]自身信息更新失败 patientId={}", patientId);
return Result.error(ResultEnum.DATA_UPDATE_ERROR); return Result.error(ResultEnum.DATA_UPDATE_ERROR);
} }
} else { } else {
if (!patientDao.updateInfo(openid, idCardNo, patientId, healthCardId, name, nation, tel, uuid, address, areaCode, areaAddress)) { if (!patientDao.updateInfo(bindInfo)) {
log.info("[患者]更新失败 patientId={}", patient.getPatientId()); log.info("[患者]更新失败 patientId={}", patientId);
return Result.error(ResultEnum.PATIENT_UPDATE_ERROR); return Result.error(ResultEnum.PATIENT_UPDATE_ERROR);
} }
} }
} }
WxCacheHelper.removeUser(openid); WxCacheHelper.removeUser(openid);
return Result.success(); Map<String, Object> map = new HashMap<>();
map.put("gmcUniqueId", bindInfo.getGmcUniqueId());
map.put("enOpenId", AesWxHelper.encode(openid));
return Result.success(map);
} }
/** /**
* [无证绑定]参数校验 * [无证绑定]参数校验
*/ */
public Result noCardBind(String fTel, String fName, String fIDCardNo, String mTel, String mName, String mIDCardNo) { public Result noCardParamsValid(String fTel, String fName, String fIDCardNo, String mTel, String mName, String mIDCardNo) {
log.info("[无证绑定]fTel={}, fName={}, fIDCardNo={}, mTel={}, mName={}, mIDCardNo={}", fTel, fName, fIDCardNo, mTel, mName, mIDCardNo); log.info("[无证绑定]fTel={}, fName={}, fIDCardNo={}, mTel={}, mName={}, mIDCardNo={}", fTel, fName, fIDCardNo, mTel, mName, mIDCardNo);
if ((fName == null || fTel == null || fIDCardNo == null) && (mName == null || mTel == null || mIDCardNo == null)) { if ((fName == null || fTel == null || fIDCardNo == null) && (mName == null || mTel == null || mIDCardNo == null)) {
@ -257,9 +348,18 @@ public class PatientService {
/** /**
* [绑定本人] * [绑定本人]
*/ */
public Result bindMyself(String name, String idCardNo, HCardTypeEnum cardTypeEnum, String address, String areaCode, String areaAddress, String openid, String sex, String nation, String birthday, boolean isVerifyCode, String tel, String smsCode) { public Result bindMyself(HttpServletRequest request, boolean isVerifyCode, String tel, String smsCode, Patient bindInfo) {
log.info("[身份绑定] openid={}, name={}, address={}, areaCode={}, areaAddress={},nation={}, sex={}, birthday={}, cardType={}", openid, name, address, areaCode, areaAddress, nation, sex, birthday, cardTypeEnum.ALI_CODE); String openid = bindInfo.getOpenid();
if (openid == null || sex == null || birthday == null || name == null || nation == null) { String idCardNo = bindInfo.getIdCardNo();
String sex = bindInfo.getSex();
String birthday = bindInfo.getBirthday();
String name = bindInfo.getName();
String nation = bindInfo.getNation();
String areaCode = bindInfo.getAreaCode();
String address = bindInfo.getAddress();
log.info("[身份绑定] openid={}, name={}, address={}, areaCode={}, nation={}, sex={}, birthday={}", openid, name, address, areaCode, nation, sex, birthday);
if (bindInfo.getOpenid() == null || sex == null || birthday == null || name == null || nation == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); return Result.error(ResultEnum.PARAM_IS_DEFECT);
} }
@ -301,9 +401,10 @@ public class PatientService {
return Result.error(ResultEnum.ID_CARD_ERROR); return Result.error(ResultEnum.ID_CARD_ERROR);
} }
String uuid = UUID.randomUUID().toString().replace("-", ""); // 儿童身份证代码 bindInfo.setHealthCardId(null);
bindInfo.setUuid(UUID.randomUUID().toString().replace("-", "")); // 儿童身份证代码
return bindCard(true, true, null, openid, name, sex, idCardNo, cardTypeEnum, tel, birthday, nation, uuid, address, areaCode, areaAddress); return bindCard(request, true, true, bindInfo);
} }

@ -143,9 +143,9 @@ public class WxAuthHelper {
log.warn("[授权is_auth] token={}, state={}, isUserInfo={}, deState={}", token, state, isUserInfo, deState); log.warn("[授权is_auth] token={}, state={}, isUserInfo={}, deState={}", token, state, isUserInfo, deState);
String authSessionId = null; String authSessionId = null;
if (WeChatConfig.IS_ENABLE_GMC) { // 开启医共体开关 & 是医共体主服务器 & 不是支付授权 if (WeChatConfig.IS_ENABLE_GMC) { // 开启医共体开关
try { try {
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 { // 请求转发
@ -185,7 +185,7 @@ public class WxAuthHelper {
*/ */
public static Result gmc_server_auth(HttpServletRequest request, HttpSession session, String state, String isUserInfo, 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 cacheTokenOpenId, String token, AuthTokenData tokenData, String sessionOpenId, String authSessionId) {
String reqGMCDomain = WeChatConfig.getGMCAuthDomain(isHttpsWithProxy(request), true); // 医共体请求服务地址 String reqGMCServerUrl = getReqGMCServerUrl(request);
// 自身认证 // 自身认证
boolean hasTokenCache = !ObjectUtils.isEmpty(cacheTokenOpenId); boolean hasTokenCache = !ObjectUtils.isEmpty(cacheTokenOpenId);
String openId = hasTokenCache ? cacheTokenOpenId : sessionOpenId; String openId = hasTokenCache ? cacheTokenOpenId : sessionOpenId;
@ -221,14 +221,15 @@ public class WxAuthHelper {
if (authResultData.hasAuthUrl()) { // 授权链接 if (authResultData.hasAuthUrl()) { // 授权链接
return Result.success(authResultData.getAuthUrl()); return Result.success(authResultData.getAuthUrl());
} }
// repeatPatients(reqGMCDomain, authResultData.getPatientList(), gmcOpenId); // 患者信息去重 // repeatPatients(reqGMCServerUrl, authResultData.getPatientList(), 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, reqGMCDomain); log.info("[认证请求转发] [sessionId:{}]URL:[{}]", sessionId, reqGMCServerUrl);
String resultJson = OkHttpHelper.postFormStr(reqGMCDomain + "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);
params.put("isUserInfo", "false"); params.put("isUserInfo", "false");
@ -249,12 +250,11 @@ public class WxAuthHelper {
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.getEnGmcUUID()); String gmcUUId = AesWxHelper.decode(gmcAuthResultData.getEnGmcUniqueId());
if (!ObjectUtils.isEmpty(gmcOpenId)) { // 授权主体完成认证 if (!ObjectUtils.isEmpty(gmcOpenId)) { // 授权主体完成认证
session.setAttribute(GMC_ID, gmcOpenId); session.setAttribute(GMC_ID, gmcOpenId);
boolean isOK = new GMCUserService().addInfo(sessionOpenId, gmcOpenId, null, gmcUUID); new GMCUserService().addInfo(sessionOpenId, gmcOpenId, null, gmcUUId);
log.info("[认证联系]添加{} wxOpenId={}, gmcOpenId={}, gmcUUID={}", (isOK ? "成功" : "失败"), sessionOpenId, gmcOpenId, gmcUUID);
AuthResultData authResultData = getCacheUserData(request, sessionOpenId, state, isUserInfo, authSessionId); AuthResultData authResultData = getCacheUserData(request, sessionOpenId, state, isUserInfo, authSessionId);
authResultData.setEnGmcOpenId(enGmcOpenId); // 用于绑定传递数据,确保关系记录 authResultData.setEnGmcOpenId(enGmcOpenId); // 用于绑定传递数据,确保关系记录
@ -305,7 +305,7 @@ public class WxAuthHelper {
authResultData.setAvatar(tokenData.getAvatar()); authResultData.setAvatar(tokenData.getAvatar());
authResultData.setPatientList(patients); authResultData.setPatientList(patients);
authResultData.setEnParams(AesMicroHelper.encode(cacheOpenId)); authResultData.setEnParams(AesMicroHelper.encode(cacheOpenId));
authResultData.setEnGmcUUID(AesWxHelper.encode(CodeHelper.get32UUID())); authResultData.setEnGmcUniqueId(AesWxHelper.encode(CodeHelper.get32UUID()));
return authResultData; return authResultData;
} }
@ -344,7 +344,7 @@ public class WxAuthHelper {
authResultData.setAvatar(user.getAvatar()); authResultData.setAvatar(user.getAvatar());
authResultData.setPatientList(user.getPatientList()); authResultData.setPatientList(user.getPatientList());
authResultData.setEnParams(AesMicroHelper.encode(openId)); authResultData.setEnParams(AesMicroHelper.encode(openId));
authResultData.setEnGmcUUID(AesWxHelper.encode(CodeHelper.get32UUID())); authResultData.setEnGmcUniqueId(AesWxHelper.encode(CodeHelper.get32UUID()));
return authResultData; return authResultData;
} }
@ -362,6 +362,10 @@ public class WxAuthHelper {
return 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=";
@ -446,7 +450,12 @@ public class WxAuthHelper {
public static JsonResult postForm(String url, OkHttpHelper.MapParams params, OkHttpHelper.Header header) { public static JsonResult postForm(String url, OkHttpHelper.MapParams params, OkHttpHelper.Header header) {
return OkHttpHelper.postForm(url, params, header, JsonResultEnum.SYS_MICRO); 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);
} }
// // 医共体开启 & 不是支付授权 // // 医共体开启 & 不是支付授权

@ -311,7 +311,7 @@ public class WxPayHelper {
/** /**
* 微信扫码盒子支付 * 微信支付
* *
* @param title 商品标题 * @param title 商品标题
* @param outTradeNo 商户订单号 * @param outTradeNo 商户订单号

@ -4,6 +4,7 @@ import com.ynxbd.common.bean.Patient;
import com.ynxbd.common.helper.common.Base64Helper; import com.ynxbd.common.helper.common.Base64Helper;
import com.ynxbd.common.helper.common.CodeHelper; import com.ynxbd.common.helper.common.CodeHelper;
import com.ynxbd.common.helper.common.JsonHelper; import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.AesWxHelper; import com.ynxbd.wx.wxfactory.AesWxHelper;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -40,8 +41,9 @@ public class AuthResultData implements Serializable {
private String authUrl; private String authUrl;
private String enGmcUUID; private String enGmcUniqueId;
private String enGmcOpenId; private String enGmcOpenId;
private String enHospAppId;
public boolean hasAuthUrl() { public boolean hasAuthUrl() {
return !ObjectUtils.isEmpty(authUrl); return !ObjectUtils.isEmpty(authUrl);
@ -56,9 +58,10 @@ public class AuthResultData implements Serializable {
} }
this.patientList = null; this.patientList = null;
this.authUrl = null; this.authUrl = null;
if (ObjectUtils.isEmpty(this.enGmcUUID)) { if (ObjectUtils.isEmpty(this.enGmcUniqueId)) {
this.enGmcUUID = AesWxHelper.encode(CodeHelper.get32UUID()); this.enGmcUniqueId = AesWxHelper.encode(CodeHelper.get32UUID());
} }
this.enHospAppId = AesWxHelper.encode(WeChatConfig.APP_ID);
return this; return this;
} }

Loading…
Cancel
Save