diff --git a/src/main/java/com/ynxbd/common/action/HealthCardAction.java b/src/main/java/com/ynxbd/common/action/HealthCardAction.java index b8b98c0..cc126e2 100644 --- a/src/main/java/com/ynxbd/common/action/HealthCardAction.java +++ b/src/main/java/com/ynxbd/common/action/HealthCardAction.java @@ -5,7 +5,9 @@ import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.bean.Patient; import com.ynxbd.common.bean.User; import com.ynxbd.common.bean.enums.HCardTypeEnum; +import com.ynxbd.common.bean.enums.HealthCardEnum; import com.ynxbd.common.bean.enums.HealthCardRespCodeEnum; +import com.ynxbd.common.bean.enums.HealthCardSceneEnum; import com.ynxbd.common.config.interceptor.AesDecode; import com.ynxbd.common.dao.PatientDao; import com.ynxbd.common.helper.HealthCardHelper; @@ -15,8 +17,10 @@ import com.ynxbd.common.helper.common.ValidHelper; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.service.PatientService; +import com.ynxbd.wx.wxfactory.AesWxHelper; import com.ynxbd.wx.wxfactory.WxCacheHelper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.ehcache.Cache; @@ -29,13 +33,23 @@ public class HealthCardAction extends BaseAction { * [电子健康卡]绑卡验证授权 */ @Action("registerHealthCardPreAuth") - public Result registerHealthCardPreAuth(Boolean isMiniApp, @AesDecode String openid, String wechatCode) { - log.info("[电子健康卡]绑卡验证授权 isMiniApp={}, wechatCode={}, openid={}", isMiniApp, wechatCode, openid); - JSONObject result = new HealthCardHelper().registerHealthCardPreAuth(isMiniApp, false, wechatCode); - if (result == null) { - return Result.error(); + public Result registerHealthCardPreAuth(Boolean isMiniApp, Integer patientType, String wechatCode, String enHisPatientId) { + try { + log.info("[电子健康卡]绑卡验证授权 isMiniApp={}, patientType={}, wechatCode={}, enHisPatientId={}", isMiniApp, patientType, wechatCode, enHisPatientId); + if (wechatCode == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + if (!ObjectUtils.isEmpty(enHisPatientId)) { + String hisPatientId = AesWxHelper.decode(enHisPatientId); + if (ObjectUtils.isEmpty(hisPatientId)) { + return Result.error(ResultEnum.PARAM_IS_INVALID); + } + } + JSONObject result = HealthCardHelper.registerHealthCardPreAuth(isMiniApp, false, patientType, wechatCode, enHisPatientId); + return Result.success(result); + } catch (Exception e) { + return Result.error(e); } - return Result.success(result); } @@ -45,7 +59,7 @@ public class HealthCardAction extends BaseAction { @Action("registerHealthCardPreFill") public Result registerHealthCardPreFill(Boolean isMiniApp, @AesDecode String openid, String authCode, String name, String gender, String nation, String birthday, String idNumber, String phone) { log.info("[电子健康卡]验证注册/绑卡接口 isMiniApp={}, authCode={}, name={}, openid={}", isMiniApp, authCode, name, openid); - JSONObject result = new HealthCardHelper().registerHealthCardPreFill(isMiniApp, authCode, name, gender, nation, birthday, + JSONObject result = HealthCardHelper.registerHealthCardPreFill(isMiniApp, authCode, name, gender, nation, birthday, idNumber, HCardTypeEnum._01, phone); if (result == null) { return Result.error(); @@ -181,101 +195,77 @@ public class HealthCardAction extends BaseAction { } - /** - * [升级绑定]-->已在HIS绑定-->注册健康卡 - * - * @param wechatCode wechatCode - * @param id id - * @param idCardNo idCardNo - * @param cardType cardType - * @param openid openid - * @param tel tel - * @param name name - * @param nation nation - * @param patientId patientId - * @param address address - */ - @Action("upBindCard") - public Result upBindCard(String wechatCode, Integer id, @AesDecode String idCardNo, @AesDecode String patientId, String cardType, String openid, String tel, String name, String nation, String address) { - log.info("[电子健康卡]升级绑定 id={}, name={}, address={}, nation={}, patientId={}, tel={}, idType={}, wechatCode={}", id, name, address, nation, patientId, tel, cardType, wechatCode); - if (wechatCode == null || openid == null || patientId == null || name == null || idCardNo == null || tel == null || address == null || nation == null) { - return Result.error(ResultEnum.PARAM_IS_DEFECT); - } - if (cardType == null) cardType = HCardTypeEnum._01.WX_CODE; - HCardTypeEnum cardTypeEnum = HCardTypeEnum.toTypeByWxCode(cardType); - if (cardTypeEnum == null) { - return Result.error(ResultEnum.CARD_TYPE_NOT_FOUNT); - } - - if (!ValidHelper.isValidNation(nation)) { - return Result.error(ResultEnum.NATION_ERROR); + @Action("getCardOrderId") + public Result getCardOrderId(Boolean isMiniApp, @AesDecode String idCardNo, String healthCardId) { + log.info("[电子健康卡]获取卡包订单ID healthCardId={}, idCardNo={}", healthCardId, idCardNo); + if (healthCardId == null || idCardNo == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数缺失 } - String sex = IDNumberHelper.getSex(idCardNo); - String birthday = IDNumberHelper.getBirthday(idCardNo); - if (sex == null || birthday == null) { // 身份证解析数据错误 - log.info("[电子健康卡]升级绑失败,身份证解析数据错误 sex={} birthday={}", sex, birthday); - return Result.error(ResultEnum.PARAM_TYPE_ERROR); + String qrCodeText = HealthCardHelper.getQRCodeText(isMiniApp, healthCardId, idCardNo); + if (qrCodeText == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); // qrCodeText参数缺失 } - - // 先注册,后修改-->先获取健康卡ID - JSONObject rspObj = HealthCardHelper.registerHealthCard(false, patientId, wechatCode, birthday, cardTypeEnum, address, null, sex, nation, name, idCardNo, tel); - if (rspObj == null) { - log.info("[电子健康卡]升级绑定失败, 响应内容为空"); - return Result.error("[电子健康卡]升级绑定失败, 响应内容为空"); + JSONObject result = HealthCardHelper.getOrderIdByOutAppId(isMiniApp, qrCodeText); + if (result == null) { + return Result.error(); } + return Result.success(result); + } - String healthCardId = rspObj.getString("healthCardId"); - if (healthCardId == null) { - // 响应处理 - String errMsg = rspObj.getString("errMsg"); - String resultCode = rspObj.getString("resultCode"); - HealthCardRespCodeEnum healthCardRespCodeEnum = HealthCardRespCodeEnum.findEnumByResultCode(resultCode); - log.info("[电子健康卡]升级绑定失败原因 resultCode={}, errMsg={}, statusMsg={}", resultCode, errMsg, healthCardRespCodeEnum.MESSAGE); - return Result.error(healthCardRespCodeEnum.MESSAGE); + @Action("registerUniformVerifyOrder") + public Result registerUniformVerifyOrder(Boolean isMiniApp, String wechatCode, String sceneCode, String name, String idCardNo) { + log.info("[电子健康卡]实人认证生成orderId isMiniApp={}, wechatCode={}, sceneCode={}, name={}, idCardNo={}", isMiniApp, wechatCode, sceneCode, name, idCardNo); + if (idCardNo == null || name == null || wechatCode == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数为空 + } + HealthCardSceneEnum sceneEnum = HealthCardSceneEnum.findEnum(sceneCode); + if (sceneEnum == null) { + return Result.error(ResultEnum.PARAM_IS_INVALID); } - 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, id); - if (isUpdate) { - Cache cache = WxCacheHelper.getUserCacheManager(); - cache.remove(openid); - return Result.success(); + JSONObject dataJson = HealthCardHelper.registerUniformVerifyOrder(isMiniApp, wechatCode, sceneEnum, name, idCardNo); + if (ObjectUtils.isEmpty(dataJson)) { + return Result.error(); } - return Result.error(); + return Result.success(dataJson); } + @Action("checkUniformVerifyResult") + public Result checkUniformVerifyResult(Boolean isMiniApp, String orderId, String registerOrderId) { + log.info("[电子健康卡]实人认证结果查询 isMiniApp={}, orderId={}, registerOrderId={}", isMiniApp, orderId, registerOrderId); + if (orderId == null || registerOrderId == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数为空 + } + return Result.isOK(HealthCardHelper.checkUniformVerifyResult(isMiniApp, orderId, registerOrderId)); + } /** - * [电子健康卡]获取卡包订单ID + * 健康卡[上报数据] + * + * @param scene 上报类型编码 + * @param openid openid + * @param idCardNo 身份证 + * @param healthCardId 健康卡id */ - @Action("getCardOrderId") - public Result getCardOrderId(Boolean isMiniApp, @AesDecode String idCardNo, String healthCardId) { - log.info("[电子健康卡]获取卡包订单ID healthCardId={}, idCardNo={}", healthCardId, idCardNo); - if (healthCardId == null || idCardNo == null) { - return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数缺失 + @Action("reportHISData") + public Result reportHISData(String scene, @AesDecode String openid, @AesDecode String idCardNo, String healthCardId) { + if (scene == null || openid == null || healthCardId == null || idCardNo == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); } - String qrCodeText = HealthCardHelper.getQRCodeText(isMiniApp, healthCardId, idCardNo); + String qrCodeText = HealthCardHelper.getQRCodeText(false, healthCardId, idCardNo); if (qrCodeText == null) { - return Result.error(ResultEnum.PARAM_IS_DEFECT); // qrCodeText参数缺失 + return Result.error(ResultEnum.INTERFACE_OUTER_INVOKE_ERROR); } - JSONObject result = HealthCardHelper.getOrderIdByOutAppId(isMiniApp, qrCodeText); - if (result == null) { + + JSONObject dataJson = HealthCardHelper.reportHISData(qrCodeText, null, scene, HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, null); + if (dataJson == null) { return Result.error(); } - return Result.success(result); + return Result.success(); } } diff --git a/src/main/java/com/ynxbd/common/action/HealthCodeAction.java b/src/main/java/com/ynxbd/common/action/HealthCodeAction.java index 0c5b7ab..62ece96 100644 --- a/src/main/java/com/ynxbd/common/action/HealthCodeAction.java +++ b/src/main/java/com/ynxbd/common/action/HealthCodeAction.java @@ -12,6 +12,7 @@ import com.ynxbd.common.config.HealthCardConfig; import com.ynxbd.common.config.interceptor.AesDecode; import com.ynxbd.common.dao.PatientDao; import com.ynxbd.common.dao.his.HisPatientDao; +import com.ynxbd.common.helper.HealthCardHelper; import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.helper.common.IDNumberHelper; import com.ynxbd.common.helper.common.ValidHelper; @@ -135,7 +136,7 @@ public class HealthCodeAction extends BaseAction { return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数缺失 } - JSONObject result = HCodeService.getDynamicQRCode(isMiniApp, healthCardId, idCardNo, "0"); + JSONObject result = HealthCardHelper.getDynamicQRCode(isMiniApp, healthCardId, idCardNo, "0"); return result == null ? Result.error() : Result.success(result); } @@ -149,11 +150,11 @@ public class HealthCodeAction extends BaseAction { return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数缺失 } - String qrCodeText = HCodeService.getQRCodeText(isMiniApp, healthCardId, idCardNo); + String qrCodeText = HealthCardHelper.getQRCodeText(isMiniApp, healthCardId, idCardNo); if (qrCodeText == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); // qrCodeText参数缺失 } - JSONObject result = HCodeService.getCardOrderId(isMiniApp, qrCodeText); + JSONObject result = HealthCardHelper.getOrderIdByOutAppId(isMiniApp, qrCodeText); return result == null ? Result.error() : Result.success(result); } @@ -172,12 +173,12 @@ public class HealthCodeAction extends BaseAction { return Result.error(ResultEnum.PARAM_IS_DEFECT); } - String qrCodeText = HCodeService.getQRCodeText(false, healthCardId, idCardNo); + String qrCodeText = HealthCardHelper.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 = HealthCardHelper.reportHISData(qrCodeText, null, scene, HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, null); if (jsonObject == null) { return Result.error(); } @@ -201,7 +202,7 @@ public class HealthCodeAction extends BaseAction { } if (isHealthCard && isFace) { // 实名认证 - if (!HCodeService.checkUniformVerifyResult(isMiniApp, orderId, registerOrderId)) { + if (!HealthCardHelper.checkUniformVerifyResult(isMiniApp, orderId, registerOrderId)) { return Result.error(ResultEnum.FACE_VERIFY_ERROR); } } @@ -299,44 +300,26 @@ public class HealthCodeAction extends BaseAction { } - /** - * 获取健康卡用户信息 - * - * @param openid openid - * @param healthCode 健康卡授权码-->用来获取健康卡用户信息 - */ @Action("getHealthCardInfo") 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 = HCodeService.getHealthCardByHealthCode(isMiniApp, healthCode); - if (patient == null) { - log.info("[电子健康卡]获取健康卡用户信息-失败"); - return Result.error("[电子健康卡]获取健康卡用户信息-失败"); + try { + log.info("[电子健康卡]健康卡授权码获取健康卡信息 isMiniApp={}, openid={}, 健康卡授权码={}", isMiniApp, openid, healthCode); + Patient patient = HealthCardHelper.getHealthCardByHealthCode(isMiniApp, healthCode); + return Result.success(patient); + } catch (Exception e) { + return Result.error(e); } - return Result.success(patient); } /** * [升级绑定]-->已在HIS绑定-->注册健康卡 * - * @param wechatCode wechatCode - * @param id id - * @param idCardNo idCardNo - * @param cardType cardType - * @param openid openid - * @param tel tel - * @param name name - * @param nation nation - * @param patientId patientId - * @param address address */ @Action("upBind") - public Result upBind(String wechatCode, Integer id, @AesDecode String idCardNo, @AesDecode String patientId, String cardType, String openid, String tel, String name, String nation, String address) { - log.info("[电子健康卡]升级绑定 id={}, name={}, address={}, nation={}, patientId={}, tel={}, idType={}, wechatCode={}", id, name, address, nation, patientId, tel, cardType, wechatCode); - if (wechatCode == null || openid == null || patientId == null || name == null || idCardNo == null || tel == null || address == null || nation == null) { + public Result upBind(String wechatCode, Integer id, @AesDecode String openid, @AesDecode String idCardNo, @AesDecode String hisPatientId, @AesDecode String epId, String cardType, String tel, String name, String nation, String address) { + log.info("[电子健康卡]升级绑定 id={}, name={}, address={}, nation={}, epId={}, hisPatientId={}, tel={}, idType={}, wechatCode={}", id, name, address, nation, epId, hisPatientId, tel, cardType, wechatCode); + if (wechatCode == null || openid == null || epId == null || hisPatientId == null || name == null || idCardNo == null || tel == null || address == null || nation == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } @@ -358,7 +341,7 @@ public class HealthCodeAction extends BaseAction { } // 先注册,后修改-->先获取健康卡ID - JSONObject rspObj = HCodeService.registerHealthCard(false, patientId, wechatCode, birthday, cardTypeEnum, address, null, sex, nation, name, idCardNo, tel); + JSONObject rspObj = HCodeService.registerHealthCard(false, hisPatientId, wechatCode, birthday, cardTypeEnum, address, null, sex, nation, name, idCardNo, tel); if (rspObj == null) { log.info("[电子健康卡]升级绑定失败, 响应内容为空"); return Result.error("[电子健康卡]升级绑定失败, 响应内容为空"); @@ -377,7 +360,8 @@ public class HealthCodeAction extends BaseAction { Patient bindInfo = new Patient(); bindInfo.setOpenid(openid); - bindInfo.setPatientId(patientId); + bindInfo.setPatientId(hisPatientId); + bindInfo.setEmpiId(epId); bindInfo.setIdCardNo(idCardNo); bindInfo.setHealthCardId(healthCardId); bindInfo.setName(name); @@ -399,46 +383,38 @@ public class HealthCodeAction extends BaseAction { * 身份证识别 */ @Action("orcInfo") - public Result orcInfo(Boolean isMiniApp, String image) { - log.info("身份证识别"); - if (image == null) { - return Result.error(ResultEnum.PARAM_IS_DEFECT); + public Result orcInfo(String image) { + try { + log.info("身份证识别"); + if (image == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + Patient patient = HealthCardHelper.orcInfo(image); + return Result.success(patient); + } catch (Exception e) { + return Result.error(e); } - Patient patient = HCodeService.orcInfo(isMiniApp, image); - return Result.success(patient); } - /** - * 实人认证生成orderId - * - * @param idCardNo idCardNo - * @param name name - * @param wechatCode wechatCode - */ @Action("registerUniformVerifyOrder") - public Result registerUniformVerifyOrder(String idCardNo, String name, String wechatCode) { - log.info("[电子健康卡]实人认证生成orderId idCardNo={}, name={}", idCardNo, name); - if (idCardNo == null || name == null || wechatCode == null) { + public Result registerUniformVerifyOrder(String wechatCode, String name, String idCardNo) { + log.info("[电子健康卡]实人认证生成orderId wechatCode={}, name={}, idCardNo={}", wechatCode, name, idCardNo); + if (wechatCode == null || name == null || idCardNo == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); // 参数为空 } - String orderId = HCodeService.bindUniformVerifyOrder(idCardNo, name, wechatCode); + String orderId = HCodeService.bindUniformVerifyOrder(wechatCode, name, idCardNo); return ObjectUtils.isEmpty(orderId) ? Result.error() : Result.success(orderId); } - /** - * 实人认证结果查询接口 - * - * @param orderId orderId - * @param registerOrderId registerOrderId - */ + @Action("checkUniformVerifyResult") 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(HCodeService.checkUniformVerifyResult(isMiniApp, orderId, registerOrderId)); + return Result.isOK(HealthCardHelper.checkUniformVerifyResult(isMiniApp, orderId, registerOrderId)); } diff --git a/src/main/java/com/ynxbd/common/bean/enums/HealthCardSceneEnum.java b/src/main/java/com/ynxbd/common/bean/enums/HealthCardSceneEnum.java index 4a44f59..180f59e 100644 --- a/src/main/java/com/ynxbd/common/bean/enums/HealthCardSceneEnum.java +++ b/src/main/java/com/ynxbd/common/bean/enums/HealthCardSceneEnum.java @@ -3,6 +3,7 @@ package com.ynxbd.common.bean.enums; // 查报告等需要验证的场景 import lombok.ToString; +import org.apache.commons.lang3.ObjectUtils; @ToString public enum HealthCardSceneEnum { @@ -34,4 +35,17 @@ public enum HealthCardSceneEnum { this.NAME = NAME; } + + public static HealthCardSceneEnum findEnum(String code) { + if (ObjectUtils.isEmpty(code)) { + return null; + } + for (HealthCardSceneEnum item : values()) { + if (code.equals(item.CODE)) { + return item; + } + } + return null; + } + } diff --git a/src/main/java/com/ynxbd/common/dao/PatientDao.java b/src/main/java/com/ynxbd/common/dao/PatientDao.java index a788b95..d6f6a77 100644 --- a/src/main/java/com/ynxbd/common/dao/PatientDao.java +++ b/src/main/java/com/ynxbd/common/dao/PatientDao.java @@ -206,6 +206,7 @@ public class PatientDao { if (id == null) { return false; } + String sql = "update patientBase set deletedState=0, healthCardId=?, name=?, nation=?, tel=?, address=?, uuid=?, areaCode=?, areaAddress=?, patientId=?, empiId=?, gmcBindState=?, " + " uniqueId=if(uniqueId is null or uniqueId = '', ?, uniqueId), " + " gmcUniqueId=if(gmcUniqueId is null or gmcUniqueId = '', ?, gmcUniqueId) " + diff --git a/src/main/java/com/ynxbd/common/helper/HealthCardHelper.java b/src/main/java/com/ynxbd/common/helper/HealthCardHelper.java index 0c1f142..251050a 100644 --- a/src/main/java/com/ynxbd/common/helper/HealthCardHelper.java +++ b/src/main/java/com/ynxbd/common/helper/HealthCardHelper.java @@ -3,8 +3,11 @@ package com.ynxbd.common.helper; import com.alibaba.fastjson.JSONObject; import com.tencent.healthcard.model.CommonIn; import com.tencent.healthcard.model.HealthCardInfo; +import com.tencent.healthcard.model.ReportHISData; import com.ynxbd.common.bean.Patient; import com.ynxbd.common.bean.enums.HCardTypeEnum; +import com.ynxbd.common.bean.enums.HealthCardEnum; +import com.ynxbd.common.bean.enums.HealthCardSceneEnum; import com.ynxbd.common.config.HealthCardConfig; import com.ynxbd.common.helper.common.ErrorHelper; import com.ynxbd.common.helper.common.JsonHelper; @@ -14,6 +17,8 @@ import com.ynxbd.wx.config.WeChatConfig; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.UUID; @Slf4j @@ -24,73 +29,72 @@ public class HealthCardHelper { * * @param wechatCode 微信身份码 */ - public static JSONObject registerHealthCardPreAuth(Boolean isMiniApp, Boolean isHCBindUI, String wechatCode) { - try { - if (isMiniApp == null) { - isMiniApp = false; - } - CommonIn commonIn = HealthCardConfig.createCommonIn(isMiniApp); - if (commonIn == null) { - return null; - } - - String domain = WeChatConfig.getDomain(false); - String webURL = WeChatConfig.getWebReqURL(); - - // 授权成功回调页 - String successRedirectUrl = isMiniApp ? "mini:/path/to/isvpage?healthCode=${healthCode}" : (webURL + "health-card-form.html?healthCode=${healthCode}"); - // 授权失败回调 - String failRedirectUrl = isMiniApp ? "/path/to/isvpage?regInfoCode=${regInfoCode}" : (webURL + "health-card-form.html?regInfoCode=${regInfoCode}"); - /* - * 用户手动填写信息建卡可选两种方式(二选一): - * 一、服务商自行提供建卡页(可以是H5或小程序),需增加authCode占位符,示例如下: - * H5: https://xxx.xxx.xx/path/to/isvpage?authCode=${authCode} |小程序: mini:/path/to/isvpage?authCode=${authCode} - * 二、使用开放平台的H5绑卡组件页,需增加authCode占位符,示例如下: - * https://h5-health.tengmed.com/h5/tencent/open/card/regist?hospitalId=${hospitalId}&redirect_uri=${redirect_uri}&fail_redirect_uri=${fail_redirect_uri}&authCode=${authCode}小程序需修改该域名地址为已配置的业务域名 - * ${hospitalId},必传,为开放平台分配的医院ID(hospitalId); - * ${redirect_uri},必传,为建卡成功后的回跳服务商页面,必须要对该URL进行UrlEncode编码。 - * ${fail_redirect_uri},必传,为建卡失败后的回跳服务商页面,必须要对该URL进行UrlEncode编码。 - * 小程序内嵌,仍以 mini 协议开头,且需要UrlEncode编码。 - */ - - String hcBindUIUrl = String.format("%s/h5/tencent/open/card/regist?hospitalId=%s&redirect_uri=%s&fail_redirect_uri=%s&authCode=%s", - (isMiniApp ? domain : "https://h5-health.tengmed.com"), - HealthCardConfig.H_HOSPITAL_ID, - URLHelper.encodeURL(successRedirectUrl), - URLHelper.encodeURL(failRedirectUrl), - wechatCode); - - String userFormPageUrl = isHCBindUI - ? hcBindUIUrl - : (webURL + "health-card-form.html?authCode=${authCode}"); - - // 小程序内嵌必传(固定为小程序路径,不需要加“mini:”前缀)示例: /path/to/facePage - String faceUrl = isMiniApp ? "/path/to/facePage" : null; - // 放弃验证回调页 - String verifyFailRedirectUrl = isMiniApp ? "mini:/path/to/isvpage" : (webURL + "health-card-fail.html?code=-1"); + public static JSONObject registerHealthCardPreAuth(Boolean isMiniApp, Boolean isHCBindUI, Integer patientType, String wechatCode, String enHisPatientId) throws ServiceException { + if (isMiniApp == null) { + isMiniApp = false; + } + CommonIn commonIn = HealthCardConfig.createCommonIn(isMiniApp); + if (commonIn == null) { + throw new ServiceException("[电子健康卡]健康卡授权码获取健康卡信息-请求参数缺失"); + } - int patientType = 0; // 0-新患者 1-老患者(针对就诊卡升级健康卡);不传默认为0 + String domain = WeChatConfig.getDomain(false); + String webURL = WeChatConfig.getWebReqURL(); + + // 授权成功回调页 + String successRedirectUrl = isMiniApp ? "mini:/path/to/isvpage?healthCode=${healthCode}" : (webURL + "health-card-form.html?healthCode=${healthCode}"); + // 授权失败回调 + String failRedirectUrl = isMiniApp ? "/path/to/isvpage?regInfoCode=${regInfoCode}" : (webURL + "health-card-form.html?regInfoCode=${regInfoCode}"); + /* + * 用户手动填写信息建卡可选两种方式(二选一): + * 一、服务商自行提供建卡页(可以是H5或小程序),需增加authCode占位符,示例如下: + * H5: https://xxx.xxx.xx/path/to/isvpage?authCode=${authCode} |小程序: mini:/path/to/isvpage?authCode=${authCode} + * 二、使用开放平台的H5绑卡组件页,需增加authCode占位符,示例如下: + * https://h5-health.tengmed.com/h5/tencent/open/card/regist?hospitalId=${hospitalId}&redirect_uri=${redirect_uri}&fail_redirect_uri=${fail_redirect_uri}&authCode=${authCode}小程序需修改该域名地址为已配置的业务域名 + * ${hospitalId},必传,为开放平台分配的医院ID(hospitalId); + * ${redirect_uri},必传,为建卡成功后的回跳服务商页面,必须要对该URL进行UrlEncode编码。 + * ${fail_redirect_uri},必传,为建卡失败后的回跳服务商页面,必须要对该URL进行UrlEncode编码。 + * 小程序内嵌,仍以 mini 协议开头,且需要UrlEncode编码。 + */ + + String hcBindUIUrl = String.format("%s/h5/tencent/open/card/regist?hospitalId=%s&redirect_uri=%s&fail_redirect_uri=%s&authCode=%s", + (isMiniApp ? domain : "https://h5-health.tengmed.com"), + HealthCardConfig.H_HOSPITAL_ID, + URLHelper.encodeURL(successRedirectUrl), + URLHelper.encodeURL(failRedirectUrl), + wechatCode); + + + enHisPatientId = ObjectUtils.isEmpty(enHisPatientId) ? "" : "&enHisPatientId=" + enHisPatientId; + + String userFormPageUrl = isHCBindUI + ? hcBindUIUrl + : (webURL + "health-card-form.html?authCode=${authCode}" + enHisPatientId); + + // 小程序内嵌必传(固定为小程序路径,不需要加“mini:”前缀)示例: /path/to/facePage + String faceUrl = isMiniApp ? "/path/to/facePage" : null; + // 放弃验证回调页 + String verifyFailRedirectUrl = isMiniApp ? "mini:/path/to/isvpage" : (webURL + "health-card-fail.html?code=-1"); + + if (patientType == null || patientType != 1) { + patientType = 0;// 0-新患者 1-老患者(针对就诊卡升级健康卡);不传默认为0 + } - JSONObject resultJson = HealthCardConfig.createHealthCardService().registerHealthCardPreAuth(commonIn, - wechatCode, - patientType, - successRedirectUrl, - failRedirectUrl, - userFormPageUrl, - faceUrl, - verifyFailRedirectUrl, - HealthCardConfig.DOMAIN_CHANNEL); - log.info("[电子健康卡]绑卡验证授权 resp={}", JsonHelper.toJsonString(resultJson)); - HealthCardConfig.HCardResult result = new HealthCardConfig.HCardResult(resultJson); - if (!result.isOk) { - log.info("[电子健康卡]绑卡验证授权-失败: {}", result.getErrMsg()); - return result.getCommonOut(); - } - return result.getRsp(); - } catch (Exception e) { - ErrorHelper.println(e); + JSONObject resultJson = HealthCardConfig.createHealthCardService().registerHealthCardPreAuth(commonIn, + wechatCode, + patientType, + successRedirectUrl, + failRedirectUrl, + userFormPageUrl, + faceUrl, + verifyFailRedirectUrl, + HealthCardConfig.DOMAIN_CHANNEL); + log.info("[电子健康卡]绑卡验证授权 resp: {}", JsonHelper.toJsonString(resultJson)); + HealthCardConfig.HCardResult result = new HealthCardConfig.HCardResult(resultJson); + if (!result.isOk) { + throw new ServiceException("[电子健康卡]绑卡验证授权-失败:" + result.getJsonCommon()); } - return null; + return result.getRsp(); } @@ -99,7 +103,7 @@ public class HealthCardHelper { * */ public static JSONObject registerHealthCardPreFill(Boolean isMiniApp, String authCode, String name, String gender, String nation, String birthday, - String idNumber, HCardTypeEnum cardTypeEnum, String phone1) { + String idNumber, HCardTypeEnum cardTypeEnum, String phone1) { try { if (isMiniApp == null) { isMiniApp = false; @@ -262,8 +266,8 @@ public class HealthCardHelper { * @param phone1 联系方式1 */ public static JSONObject registerHealthCard(Boolean isMiniApp, String patientId, String wechatCode, - String birthday, HCardTypeEnum cardTypeEnum, String address, String areaAddress, - String sex, String nation, String name, String idCardNo, String phone1) { + String birthday, HCardTypeEnum cardTypeEnum, String address, String areaAddress, + String sex, String nation, String name, String idCardNo, String phone1) { try { CommonIn commonIn = HealthCardConfig.createCommonIn(isMiniApp); if (commonIn == null) { @@ -423,4 +427,143 @@ public class HealthCardHelper { } return null; } + + + /** + * 实人认证生成orderId + */ + public static JSONObject registerUniformVerifyOrder(Boolean isMiniApp, String wechatCode, HealthCardSceneEnum sceneEnum, String name, String idCardNo) { + try { + log.info("[电子健康卡]实人认证生成orderId idCardNo={}, name={}", idCardNo, name); + if (ObjectUtils.isEmpty(idCardNo) || ObjectUtils.isEmpty(name)) { + return null; + } + CommonIn commonIn = HealthCardConfig.createCommonIn(isMiniApp); + if (commonIn == null) { + return null; + } + + String webURL = WeChatConfig.getWebReqURL(); + String verifySuccessRedirectUrl = webURL + "hc-ok.html?registerOrderId=${registerOrderId}"; + String verifyFailRedirectUrl = webURL + "health-card-fail.html?code=-3"; + + JSONObject resultJson = HealthCardConfig.createHealthCardService().registerUniformVerifyOrder(commonIn, + idCardNo, + "01", + name, + wechatCode, + null, + (sceneEnum == null ? null : sceneEnum.CODE), + null, + HealthCardEnum.CARD_TYPE_ID_CARD.STATUS, + null, + verifySuccessRedirectUrl, + verifyFailRedirectUrl, + null, + 0); + HealthCardConfig.HCardResult result = new HealthCardConfig.HCardResult(resultJson); +// JSONObject resultJson = new HealthCardServerImpl(H_APP_SECRET).registerUniformVerifyOrder(commonIn, idCardNo, "01", name, wechatCode); + if (!result.isOk) { + log.info("[电子健康卡]实人认证生成orderId接口失败: {}", resultJson); + return null; + } + JSONObject respJson = result.getRsp(); + if (respJson == null) { + return null; + } + return respJson; + } catch (Exception e) { + ErrorHelper.println(e); + } + return null; + } + + /** + * [电子健康卡]实人认证结果查询 + */ + public static boolean checkUniformVerifyResult(Boolean isMiniApp, String verifyOrderId, String registerOrderId) { + try { + log.info("[电子健康卡]实人认证结果查询 verifyOrderId={}, registerOrderId={}", verifyOrderId, registerOrderId); + if (ObjectUtils.isEmpty(verifyOrderId) || ObjectUtils.isEmpty(registerOrderId)) { + return false; + } + CommonIn commonIn = HealthCardConfig.createCommonIn(isMiniApp); + if (commonIn == null) { + return false; + } + + JSONObject resultJson = HealthCardConfig.createHealthCardService().checkUniformVerifyResult(commonIn, verifyOrderId, registerOrderId); + HealthCardConfig.HCardResult result = new HealthCardConfig.HCardResult(resultJson); + if (!result.isOk) { + log.info("[电子健康卡]实人认证结果查询失败: {}", resultJson); + return false; + } + JSONObject respJson = result.getRsp(); + if (respJson == null) { + return false; + } + return respJson.getBoolean("suc"); + } catch (Exception e) { + ErrorHelper.println(e); + } + return false; + } + + /** + * 电子健康卡用卡数据监测接口 + * + * @param qrCodeText 动态二维码 + * @param deptName 科室名 + * @param scene 上报类型 scene + * @param cardType 卡类型 + * @return JSONObject + */ + public static JSONObject reportHISData(String qrCodeText, String deptName, String scene, String cardType, String cardCostType) { + if (!HealthCardConfig.IS_UPLOAD_DATA) { // 禁止数据上传 + return null; + } + + if (ObjectUtils.isEmpty(qrCodeText) || scene == null || cardType == null) { + log.info("[电子健康卡]用卡数据监测接口,参数为空"); + return null; + } + + try { + CommonIn commonIn = HealthCardConfig.createCommonIn(false); + if (commonIn == null) { + return null; + } + + ReportHISData req = new ReportHISData(); + req.setQrCodeText(qrCodeText); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + req.setTime(format.format(new Date())); + + req.setHospitalCode(HealthCardConfig.H_HOSPITAL_ID); + // 010101 挂号 + req.setScene(scene); + req.setDepartment(deptName); // 科室代码 + req.setCardChannel(HealthCardEnum.CARD_CHANNEL_WX_CHANNEL.STATUS); // 微信渠道 + + req.setCardType(cardType); + + // 自费:0100,医保:0200,公费:0300,其他:0000 + req.setCardCostTypes(cardCostType); + //调用接口 + JSONObject resultJson = HealthCardConfig.createHealthCardService().reportHISData(commonIn, req); + HealthCardConfig.HCardResult result = new HealthCardConfig.HCardResult(resultJson); + if (HealthCardConfig.IS_LOG_REPORT) { + log.info("[电子健康卡]用卡数据监测接口 req={}, resp={}", JsonHelper.toJsonString(req), JsonHelper.toJsonString(resultJson)); + } + if (!result.isOk) { + log.info("[电子健康卡]用卡数据监测接口 {}", resultJson); + return null; + } + return result.getRsp(); + } catch (Exception e) { + ErrorHelper.println(e); + } + return null; + } + } diff --git a/src/main/java/com/ynxbd/common/service/HCodeService.java b/src/main/java/com/ynxbd/common/service/HCodeService.java index d649b4a..f1146b5 100644 --- a/src/main/java/com/ynxbd/common/service/HCodeService.java +++ b/src/main/java/com/ynxbd/common/service/HCodeService.java @@ -4,23 +4,19 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.tencent.healthcard.model.CommonIn; import com.tencent.healthcard.model.HealthCardInfo; -import com.tencent.healthcard.model.ReportHISData; import com.ynxbd.common.bean.Patient; import com.ynxbd.common.bean.enums.HCardTypeEnum; import com.ynxbd.common.bean.enums.HealthCardEnum; import com.ynxbd.common.bean.enums.HealthCardSceneEnum; import com.ynxbd.common.config.HealthCardConfig; +import com.ynxbd.common.helper.HealthCardHelper; import com.ynxbd.common.helper.common.ErrorHelper; -import com.ynxbd.common.helper.common.JsonHelper; import com.ynxbd.wx.config.WeChatConfig; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; import java.util.List; -import java.util.UUID; @Slf4j public class HCodeService { @@ -81,53 +77,6 @@ public class HCodeService { return null; } - - /** - * 健康卡授权码获取健康卡信息 - * - * @param healthCode 健康卡授权码 - */ - public static Patient getHealthCardByHealthCode(Boolean isMiniApp, String healthCode) { - try { - CommonIn commonIn = HealthCardConfig.createCommonIn(isMiniApp); - if (commonIn == null) { - return null; - } - JSONObject resultJson = HealthCardConfig.createHealthCardService().getHealthCardByHealthCode(commonIn, healthCode); - HealthCardConfig.HCardResult result = new HealthCardConfig.HCardResult(resultJson); - JSONObject respJson = result.getRsp(); - if (!result.isOk || respJson == null) { - log.info("[电子健康卡]健康卡授权码获取健康卡信息-失败: {}", resultJson); - return null; - } - JSONObject card = respJson.getJSONObject("card"); - if (card == null) { - log.info("[电子健康卡]健康卡授权码获取健康卡信息-Json解析失败"); - return null; - } - - Patient patient = new Patient(); - String phone1 = card.getString("phone1"); - patient.setTel(ObjectUtils.isEmpty(phone1) ? card.getString("phone2") : phone1); - - patient.setIsMyself(card.getBoolean("isSelf")); - patient.setName(card.getString("name")); - patient.setCardType(card.getString("idType")); - patient.setIdCardNo(card.getString("idNumber")); - patient.setSex(card.getString("gender")); - patient.setNation(card.getString("nation")); - patient.setAddress(card.getString("address")); - patient.setBirthday(card.getString("birthday")); - patient.setHealthCardId(card.getString("healthCardId")); - log.info("[电子健康卡]健康卡授权码获取健康卡信息: {}", JsonHelper.toJsonString(patient)); - return patient; - } catch (Exception e) { - ErrorHelper.println(e); - } - return null; - } - - /** * [电子健康卡]通过二维码获取健康卡数据 * @@ -177,14 +126,14 @@ public class HCodeService { } - public static String bindUniformVerifyOrder(String idCardNo, String name, String wechatCode) { - return registerUniformVerifyOrder(false, idCardNo, name, wechatCode, null); // HealthCardSceneEnum._0201091 + public static String bindUniformVerifyOrder(String wechatCode, String name, String idCardNo) { + return registerUniformVerifyOrder(false, wechatCode, null, name, idCardNo); // HealthCardSceneEnum._0201091 } /** - * 实人认证生成orderId接口 + * [旧版]实人认证生成orderId接口 */ - public static String registerUniformVerifyOrder(Boolean isMiniApp, String idCardNo, String name, String wechatCode, HealthCardSceneEnum sceneEnum) { + public static String registerUniformVerifyOrder(Boolean isMiniApp, String wechatCode, HealthCardSceneEnum sceneEnum, String name, String idCardNo) { try { log.info("[电子健康卡]实人认证生成orderId idCardNo={}, name={}", idCardNo, name); if (ObjectUtils.isEmpty(idCardNo) || ObjectUtils.isEmpty(name)) { @@ -195,8 +144,6 @@ public class HCodeService { return null; } - String okURL = WeChatConfig.getWebReqURL() + "/health-card-bind.html"; - JSONObject resultJson = HealthCardConfig.createHealthCardService().registerUniformVerifyOrder(commonIn, idCardNo, "01", @@ -229,97 +176,6 @@ public class HCodeService { } - /** - * 实人认证结果查询 - */ - public static boolean checkUniformVerifyResult(Boolean isMiniApp, String verifyOrderId, String registerOrderId) { - try { - log.info("[电子健康卡]实人认证结果查询 verifyOrderId={}, registerOrderId={}", verifyOrderId, registerOrderId); - if (ObjectUtils.isEmpty(verifyOrderId) || ObjectUtils.isEmpty(registerOrderId)) { - return false; - } - CommonIn commonIn = HealthCardConfig.createCommonIn(isMiniApp); - if (commonIn == null) { - return false; - } - - JSONObject resultJson = HealthCardConfig.createHealthCardService().checkUniformVerifyResult(commonIn, verifyOrderId, registerOrderId); - HealthCardConfig.HCardResult result = new HealthCardConfig.HCardResult(resultJson); - if (!result.isOk) { - log.info("[电子健康卡]实人认证结果查询失败: {}", resultJson); - return false; - } - JSONObject respJson = result.getRsp(); - if (respJson == null) { - return false; - } - return respJson.getBoolean("suc"); - } catch (Exception e) { - ErrorHelper.println(e); - } - return false; - } - - - /** - * 获取卡包订单ID - * - * @param qrCodeText 二维码编码 - */ - public static JSONObject getCardOrderId(Boolean isMiniApp, String qrCodeText) { - try { - CommonIn commonIn = HealthCardConfig.createCommonIn(isMiniApp); - if (commonIn == null) { - return null; - } - //调用接口 - JSONObject resultJson = HealthCardConfig.createHealthCardService().getOrderIdByOutAppId(commonIn, WeChatConfig.APP_ID, qrCodeText); - HealthCardConfig.HCardResult result = new HealthCardConfig.HCardResult(resultJson); - if (!result.isOk) { - log.info("[电子健康卡]获取卡包订单ID 失败: {}", resultJson); - return null; - } - return result.getRsp(); - } catch (Exception e) { - ErrorHelper.println(e); - } - return null; - } - - - /** - * 获取健康卡二维码 - * - * @param healthCardId 健康卡ID - * @param idCardNo 证件号码 - * @param codeType 传0或者1,0返回动态码,1返回静态码 - */ - public static JSONObject getDynamicQRCode(Boolean isMiniApp, String healthCardId, String idCardNo, String codeType) { - if (healthCardId == null || idCardNo == null || codeType == null) { - log.info("[电子健康卡]获取健康卡二维码-参数缺失 healthCardId={}, idCardNo={}, codeType={}", healthCardId, idCardNo, codeType); - return null; - } - - try { - CommonIn commonIn = HealthCardConfig.createCommonIn(isMiniApp); - if (commonIn == null) { - return null; - } - - JSONObject resultJson = HealthCardConfig.createHealthCardService().getDynamicQRCode(commonIn, healthCardId, "01", idCardNo, codeType); - HealthCardConfig.HCardResult result = new HealthCardConfig.HCardResult(resultJson); - if (!result.isOk) { - log.info("[电子健康卡]获取健康卡二维码失败: {}", resultJson); - return null; - } - return result.getRsp(); - } catch (Exception e) { - ErrorHelper.println(e); - } - return null; - } - - /** * 绑定健康卡和医院关系 * @@ -350,85 +206,6 @@ public class HCodeService { } - /** - * 根据健康卡ID获取动态二维码 - * - * @param healthCardId 健康卡ID - * @param idCardNo 身份证号 - * @return 动态二维码 - */ - public static String getQRCodeText(Boolean isMiniApp, String healthCardId, String idCardNo) { - JSONObject QRResult = getDynamicQRCode(isMiniApp, healthCardId, idCardNo, "0"); - if (QRResult == null) { - log.info("[电子健康卡]用卡数据监测接口-获取二维码失败"); - return null; - } - - String qrCodeText = QRResult.getString("qrCodeText"); - if (ObjectUtils.isEmpty(qrCodeText)) { - log.info("[电子健康卡]用卡数据监测接口-获取qrCodeText失败"); - return null; - } - return qrCodeText; - } - - - /** - * 身份证识别 - * - * @param imageContent 身份证正面照片的base64编码数据,头部信息需要删除,如image/png;base64、image/jpeg/png;base64等,并且数据量建议压缩到百K级别上传。 - * @return 身份证信息 - */ - public static Patient orcInfo(Boolean isMiniApp, String imageContent) { - if (imageContent == null) { - return null; - } - - int index = imageContent.indexOf(","); - if (index != -1) { - imageContent = imageContent.substring(index + 1); - } - - Patient patient = new Patient(); - try { - if (!HealthCardConfig.isEnable()) { // 判断是否禁用电子健康卡 - return null; - } - CommonIn commonIn = new CommonIn(HealthCardConfig.getAppToken(false, false), UUID.randomUUID().toString().replaceAll("-", ""), HealthCardConfig.H_HOSPITAL_ID, 0, null, null); - JSONObject resultJson = HealthCardConfig.createHealthCardService().ocrInfo(commonIn, imageContent); - HealthCardConfig.HCardResult result = new HealthCardConfig.HCardResult(resultJson); - if (!result.isOk) { - log.info("[电子健康卡]身份证识别失败: {}", resultJson); - return null; - } - JSONObject rsp = result.getRsp(); - if (rsp == null) { - return null; - } - JSONObject cardInfo = rsp.getJSONObject("cardInfo"); - if (cardInfo == null) { - return null; - } - // 读取信息 - String idNumber = cardInfo.getString("id"); - - patient.setIdCardNo(idNumber); - patient.setName(cardInfo.getString("name")); - patient.setSex(cardInfo.getString("gender")); - patient.setAddress(cardInfo.getString("address")); - patient.setNation(cardInfo.getString("nation")); - patient.setBirthday(cardInfo.getString("birth")); - -// if (!"".equals(idNumber)) { -// FileHelper.saveBase64Image("data:image/png;base64," + imageContent, "idCard", (idNumber + ".png"), true, false); -// } - } catch (Exception e) { - ErrorHelper.println(e); - return null; - } - return patient; - } - /** * 批量领卡 */ @@ -471,108 +248,4 @@ public class HCodeService { } return rspItems; } - - /** - * 电子健康卡用卡数据监测接口 - * - * @param qrCodeText 动态二维码 - * @param deptName 科室名 - * @param scene 上报类型 scene - * @param cardType 卡类型 - * @return JSONObject - */ - public static JSONObject reportHISData(String qrCodeText, String deptName, String scene, String cardType, String cardCostType) { - if (!HealthCardConfig.IS_UPLOAD_DATA) { // 禁止数据上传 - return null; - } - - if (ObjectUtils.isEmpty(qrCodeText) || scene == null || cardType == null) { - log.info("[电子健康卡]用卡数据监测接口,参数为空"); - return null; - } - - try { - CommonIn commonIn = HealthCardConfig.createCommonIn(false); - if (commonIn == null) { - return null; - } - - ReportHISData req = new ReportHISData(); - req.setQrCodeText(qrCodeText); - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - req.setTime(format.format(new Date())); - - req.setHospitalCode(HealthCardConfig.H_HOSPITAL_ID); - // 010101 挂号 - req.setScene(scene); - req.setDepartment(deptName); // 科室代码 - req.setCardChannel(HealthCardEnum.CARD_CHANNEL_WX_CHANNEL.STATUS); // 微信渠道 - - req.setCardType(cardType); - - // 自费:0100,医保:0200,公费:0300,其他:0000 - req.setCardCostTypes(cardCostType); - //调用接口 - JSONObject resultJson = HealthCardConfig.createHealthCardService().reportHISData(commonIn, req); - HealthCardConfig.HCardResult result = new HealthCardConfig.HCardResult(resultJson); - if (HealthCardConfig.IS_LOG_REPORT) { - log.info("[电子健康卡]用卡数据监测接口 req={}, resp={}", JsonHelper.toJsonString(req), JsonHelper.toJsonString(resultJson)); - } - if (!result.isOk) { - log.info("[电子健康卡]用卡数据监测接口 {}", resultJson); - return null; - } - return result.getRsp(); - } catch (Exception e) { - ErrorHelper.println(e); - } - return null; - } - - - /** - * 获取建档信息 - * - * @param code 建档授权码[获取信息失败时返回]-填写regInfoCode - */ - public Patient getRegInfoByCode(Boolean isMiniApp, String code) { - try { - CommonIn commonIn = HealthCardConfig.createCommonIn(isMiniApp); - if (commonIn == null) { - return null; - } - JSONObject resultJson = HealthCardConfig.createHealthCardService().getRegInfoByCode(commonIn, code); - HealthCardConfig.HCardResult result = new HealthCardConfig.HCardResult(resultJson); - JSONObject respJsonObj = result.getRsp(); - if (!result.isOk || respJsonObj == null) { - log.info("[电子健康卡]获取建档信息-失败: {}", resultJson); - return null; - } - JSONObject card = respJsonObj.getJSONObject("card"); - if (card == null) { - log.info("[电子健康卡]获取建档信息-Json解析失败"); - return null; - } - - Patient patient = new Patient(); - String phone1 = card.getString("phone1"); - patient.setTel(ObjectUtils.isEmpty(phone1) ? card.getString("phone2") : phone1); - - patient.setIsMyself(card.getBoolean("isSelf")); - patient.setCardType(card.getString("idType")); - patient.setIdCardNo(card.getString("idNumber")); - patient.setName(card.getString("name")); - patient.setSex(card.getString("gender")); - patient.setNation(card.getString("nation")); - patient.setAddress(card.getString("address")); - patient.setBirthday(card.getString("birthday")); - patient.setHealthCardId(card.getString("healthCardId")); - log.info("[电子健康卡]获取建档信息: {}", JsonHelper.toJsonString(patient)); - return patient; - } catch (Exception e) { - ErrorHelper.println(e); - } - return null; - } - } diff --git a/src/main/java/com/ynxbd/common/service/HealthUploadService.java b/src/main/java/com/ynxbd/common/service/HealthUploadService.java index b1766ec..c6993ee 100644 --- a/src/main/java/com/ynxbd/common/service/HealthUploadService.java +++ b/src/main/java/com/ynxbd/common/service/HealthUploadService.java @@ -5,6 +5,7 @@ import com.ynxbd.common.bean.Patient; import com.ynxbd.common.bean.enums.HealthCardEnum; import com.ynxbd.common.config.HealthCardConfig; import com.ynxbd.common.dao.PatientDao; +import com.ynxbd.common.helper.HealthCardHelper; import lombok.extern.slf4j.Slf4j; import java.text.SimpleDateFormat; @@ -50,12 +51,12 @@ public class HealthUploadService { return; } - String qrCodeText = HCodeService.getQRCodeText(false, healthCardId, idCardNo); + String qrCodeText = HealthCardHelper.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); + JSONObject jsonObject = HealthCardHelper.reportHISData(qrCodeText, deptName, scene, HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, HealthCardEnum.CARD_COST_TYPE_OWN_EXPENSE.STATUS); if (jsonObject == null) { log.info("[电子健康卡][挂号缴费]数据上报失败"); } @@ -95,12 +96,12 @@ public class HealthUploadService { return; } - String qrCodeText = HCodeService.getQRCodeText(false, healthCardId, idCardNo); + String qrCodeText = HealthCardHelper.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); + JSONObject jsonObject = HealthCardHelper.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("[电子健康卡][门诊缴费]数据上报失败"); }