|
|
|
|
@ -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; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|