微信后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

821 lines
32 KiB

package com.ynxbd.common.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.tencent.healthcard.impl.HealthCardServerImpl;
import com.tencent.healthcard.model.CommonIn;
import com.tencent.healthcard.model.HealthCardInfo;
import com.tencent.healthcard.model.ReportHISData;
import com.ynxbd.common.bean.enums.HCardTypeEnum;
import com.ynxbd.common.bean.enums.HealthCardEnum;
import com.ynxbd.common.bean.Patient;
import com.ynxbd.common.bean.enums.HealthCardRespCodeEnum;
import com.ynxbd.common.helper.ProperHelper;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.common.dao.PatientDao;
import com.ynxbd.common.config.EhCacheConfig;
import com.ynxbd.common.helper.common.ErrorHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.ehcache.Cache;
import java.text.SimpleDateFormat;
import java.util.*;
@Slf4j
public class HCodeService {
final private static boolean IS_ENABLE; // 是否启用电子健康看(true:启用, false:禁用)
// 健康码
final private static String H_APP_ID;
final private static String H_APP_SECRET;
final private static String H_HOSPITAL_ID; // 医院ID(每家医院不一样)
// 万达
final private static String CARD_URL;
final private static String CARD_APP_ID;
final private static String CARD_PUBLIC_KEY;
final private static String CARD_PRIVATE_KEY;
// 缓存
private static Cache<String, String> CACHE;
// 离线WeChartCode 批量领取健康卡用
final private static String WE_CHART_CODE = "73EFA6796D3869FF82FAE7E81E9814B7";
static {
ProperHelper config = new ProperHelper().read("hcode.properties");
IS_ENABLE = config.getBoolean("is_enable", false);
config.setIsEnable(IS_ENABLE);
H_APP_ID = config.getString("h.app_id");
H_APP_SECRET = config.getString("h.app_secret");
CARD_APP_ID = config.getString("h.card_app_id");
CARD_PUBLIC_KEY = config.getString("h.card_public_key");
CARD_PRIVATE_KEY = config.getString("h.card_private_key");
CARD_URL = config.getString("h.card_url");
H_HOSPITAL_ID = config.getString("h.hospital_id");
if ("0".equals(H_HOSPITAL_ID)) {
log.info("[电子健康卡]医院id异常");
}
initCache();
}
public static synchronized void initCache() {
if (CACHE == null) {
// 创建一个缓存实例(7000s最大存活时间)
CACHE = EhCacheConfig.createCache(String.class, String.class, "health_card_cache", 1L, 3L, 10L, false, 7000L, null);
}
}
/**
* 判断是否使用电子健康卡
*
* @return 是否使用
*/
public static boolean isEnableHealthCard() {
if (!IS_ENABLE) {
log.info("hcode.properties中禁用电子健康卡isEnable={}", IS_ENABLE);
}
return IS_ENABLE;
}
/**
* 获取token
*
* @return token
*/
public static String getAppToken() {
if (!isEnableHealthCard()) {
return null;
}
String appToken = null;
if (CACHE == null) {
initCache();
}
if (CACHE != null) {
appToken = CACHE.get("appToken");
if (appToken != null) {
return appToken;
}
}
try {
HealthCardServerImpl healthCard = new HealthCardServerImpl(H_APP_SECRET, 5, 10);
String requestId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
int channelNum = 0;
CommonIn commonIn = new CommonIn("", requestId, H_HOSPITAL_ID, channelNum);
//调用接口
JSONObject appTokenObj = healthCard.getAppToken(commonIn, H_APP_ID);
//调用接口
JSONObject resultObj = healthCard.getAppToken(commonIn, H_APP_ID);
JSONObject commonOut = resultObj.getJSONObject("commonOut");
if (!"0".equals(commonOut.getString("resultCode"))) {
log.info("[电子健康卡]获取appToken失败-" + resultObj);
return null;
}
JSONObject respJson = appTokenObj.getJSONObject("rsp");
appToken = respJson.getString("appToken");
if (CACHE != null && appToken != null && !"".equals(appToken)) {
CACHE.put("appToken", appToken);
}
} catch (Exception e) {
ErrorHelper.println(e);
}
if (StringUtils.isEmpty(appToken)) {
log.info("[电子健康卡]获取appToken为空");
}
return appToken;
}
public static Patient appBindHealthCard(String healthCode){
if(healthCode==null){
return null;
}
String appToken = getAppToken();
if (appToken == null) {
return null;
}
HealthCardServerImpl healthCard = new HealthCardServerImpl(H_APP_SECRET);
String requestId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
CommonIn commonIn = new CommonIn(appToken, requestId, H_HOSPITAL_ID, 0);
JSONObject resultObj = healthCard.getHealthCardByHealthCode(commonIn,healthCode);
JSONObject rspObj = resultObj.getJSONObject("rsp");
JSONObject cardJson = rspObj.getJSONObject("card");
Patient patient = new Patient();
patient.setSex(cardJson.getString("gender")); // 性别
patient.setName(cardJson.getString("name"));
patient.setNation(cardJson.getString("nation"));
patient.setCardType(cardJson.getString("idType"));
patient.setIdCardNo(cardJson.getString("idNumber"));
patient.setBirthday(cardJson.getString("birthday"));
patient.setAddress(cardJson.getString("address"));
String phone1 = cardJson.getString("phone1");
String phone2 = cardJson.getString("phone2");
patient.setTel(ObjectUtils.isEmpty(phone1) ? phone2 : phone1);
return patient;
}
/**
* 注册健康卡
*
* @param weChatCode 微信身份码
* @param birthday 出生年月日
* @param cardTypeEnum 证件类型(01-居民身份证,其他参考证件类型表)
* @param address 地址
* @param sex 性别
* @param nation 民族
* @param name 姓名
* @param idCardNo 证件号码
* @param phone1 联系方式1
*/
public static JSONObject registerHealthCard(String patientId, String weChatCode,
String birthday, HCardTypeEnum cardTypeEnum, String address,
String sex, String nation, String name, String idCardNo, String phone1) {
try {
String appToken = getAppToken();
if (appToken == null) {
return null;
}
if (cardTypeEnum == null) {
cardTypeEnum = HCardTypeEnum._01; // 居民身份证
}
HealthCardServerImpl healthCard = new HealthCardServerImpl(H_APP_SECRET);
// 构造公共输入参数commonIn
String requestId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
CommonIn commonIn = new CommonIn(appToken, requestId, H_HOSPITAL_ID, 0);
HealthCardInfo healthCardInfoReq = new HealthCardInfo();
healthCardInfoReq.setAddress(address);
healthCardInfoReq.setBirthday(birthday);
healthCardInfoReq.setGender(sex);
healthCardInfoReq.setIdNumber(idCardNo);
healthCardInfoReq.setIdType(cardTypeEnum.WX_CODE);
healthCardInfoReq.setNation(nation);
healthCardInfoReq.setName(name);
healthCardInfoReq.setPhone1(phone1);
healthCardInfoReq.setWechatCode(weChatCode);
healthCardInfoReq.setPatid(patientId);
//调用接口
JSONObject resultObj = healthCard.registerHealthCard(commonIn, healthCardInfoReq);
JSONObject commonOut = resultObj.getJSONObject("commonOut");
if (!"0".equals(commonOut.getString("resultCode"))) {
log.info("[电子健康卡]注册失败-" + resultObj);
return commonOut;
}
return resultObj.getJSONObject("rsp");
} catch (Exception e) {
ErrorHelper.println(e);
}
return null;
}
/**
* 授权码获取健康卡
*
* @param healthCode 健康卡授权码
*/
public static Patient getInfoByHealthCode(String healthCode) {
try {
String appToken = getAppToken();
if (appToken == null) {
return null;
}
HealthCardServerImpl healthCard = new HealthCardServerImpl(H_APP_SECRET);
String requestId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
CommonIn commonIn = new CommonIn(appToken, requestId, H_HOSPITAL_ID, 0);
//调用接口
JSONObject resultObj = healthCard.getHealthCardByHealthCode(commonIn, healthCode);
JSONObject commonOut = resultObj.getJSONObject("commonOut");
JSONObject rspObj = resultObj.getJSONObject("rsp");
if (!"0".equals(commonOut.getString("resultCode")) || rspObj == null) {
log.info("[电子健康卡]授权码获取健康卡失败:" + resultObj);
return null;
}
JSONObject card = rspObj.getJSONObject("card");
if (card == null) {
log.info("[电子健康卡]一键绑定 解析json失败");
return null;
}
Patient patient = new Patient();
String phone1 = card.getString("phone1");
if (phone1 == null || "".equals(phone1)) {
patient.setTel(card.getString("phone2"));
} else {
patient.setTel(phone1);
}
patient.setName(card.getString("name"));
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"));
patient.setCardType(card.getString("idType"));
log.info("[一键绑定]获取用户信息 patient={}", patient);
return patient;
} catch (Exception e) {
ErrorHelper.println(e);
}
return null;
}
/**
* [电子健康卡]通过二维码获取健康卡数据
*
* @param qrCode 二维码
*/
public static Patient getHealthCardByQrCode(String qrCode) {
try {
log.info("[电子健康卡]查询健康卡信息 qrCode={}", qrCode);
if (ObjectUtils.isEmpty(qrCode)) {
return null;
}
String appToken = getAppToken();
if (appToken == null) {
return null;
}
HealthCardServerImpl healthCard = new HealthCardServerImpl(H_APP_SECRET);
String requestId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
CommonIn commonIn = new CommonIn(appToken, requestId, H_HOSPITAL_ID, 0);
//调用接口
JSONObject resultObj = healthCard.getHealthCardByQRCode(commonIn, qrCode);
JSONObject commonOut = resultObj.getJSONObject("commonOut");
if (!"0".equals(commonOut.getString("resultCode"))) {
log.info("[电子健康卡]二维码获取健康卡失败:" + resultObj);
return null;
}
JSONObject respJson = resultObj.getJSONObject("rsp");
if (respJson == null) {
return null;
}
JSONObject cardJson = respJson.getJSONObject("card");
if (cardJson == null) {
return null;
}
Patient patient = new Patient();
patient.setSex(cardJson.getString("gender")); // 性别
patient.setName(cardJson.getString("name"));
patient.setNation(cardJson.getString("nation"));
patient.setCardType(cardJson.getString("idType"));
patient.setIdCardNo(cardJson.getString("idNumber"));
patient.setBirthday(cardJson.getString("birthday"));
patient.setAddress(cardJson.getString("address"));
String phone1 = cardJson.getString("phone1");
String phone2 = cardJson.getString("phone2");
patient.setTel(ObjectUtils.isEmpty(phone1) ? phone2 : phone1);
return patient;
} catch (Exception e) {
ErrorHelper.println(e);
}
return null;
}
/**
* 实人认证生成orderId接口
*/
public static String registerUniformVerifyOrder(String idCardNo, String name, String wechatCode) {
try {
log.info("[电子健康卡]实人认证生成orderId idCardNo={}, name={}", idCardNo, name);
if (ObjectUtils.isEmpty(idCardNo) || ObjectUtils.isEmpty(name)) {
return null;
}
String appToken = getAppToken();
if (appToken == null) {
return null;
}
HealthCardServerImpl healthCard = new HealthCardServerImpl(H_APP_SECRET);
String requestId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
CommonIn commonIn = new CommonIn(appToken, requestId, H_HOSPITAL_ID, 0);
//调用接口
JSONObject resultJson = healthCard.registerUniformVerifyOrder(commonIn, idCardNo, "01", name, wechatCode);
JSONObject commonOut = resultJson.getJSONObject("commonOut");
if (!"0".equals(commonOut.getString("resultCode"))) {
log.info("[电子健康卡]实人认证生成orderId接口失败:" + resultJson);
return null;
}
JSONObject respJson = resultJson.getJSONObject("rsp");
if (respJson == null) {
return null;
}
return respJson.getString("verifyOrderId");
} catch (Exception e) {
ErrorHelper.println(e);
}
return null;
}
/**
* 实人认证结果查询接口
*/
public static boolean checkUniformVerifyResult(String verifyOrderId, String registerOrderId) {
try {
log.info("[电子健康卡]实人认证结果查询 verifyOrderId={}, registerOrderId={}", verifyOrderId, registerOrderId);
if (ObjectUtils.isEmpty(verifyOrderId) || ObjectUtils.isEmpty(registerOrderId)) {
return false;
}
String appToken = getAppToken();
if (appToken == null) {
return false;
}
HealthCardServerImpl healthCard = new HealthCardServerImpl(H_APP_SECRET);
String requestId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
CommonIn commonIn = new CommonIn(appToken, requestId, H_HOSPITAL_ID, 0);
//调用接口
JSONObject resultJson = healthCard.checkUniformVerifyResult(commonIn, verifyOrderId, registerOrderId);
JSONObject commonOut = resultJson.getJSONObject("commonOut");
if (!"0".equals(commonOut.getString("resultCode"))) {
log.info("[电子健康卡]实人认证结果查询失败:" + resultJson);
return false;
}
JSONObject respJson = resultJson.getJSONObject("rsp");
if (respJson == null) {
return false;
}
return respJson.getBoolean("suc");
} catch (Exception e) {
ErrorHelper.println(e);
}
return false;
}
/**
* 获取卡包订单ID
*
* @param qrCodeText 二维码编码
*/
public static JSONObject getCardOrderId(String qrCodeText) {
try {
String appToken = getAppToken();
if (appToken == null) {
log.info("获取卡包订单ID-appToken为空");
return null;
}
HealthCardServerImpl healthCard = new HealthCardServerImpl(H_APP_SECRET);
String requestId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
CommonIn commonIn = new CommonIn(appToken, requestId, H_HOSPITAL_ID, 0);
//调用接口
JSONObject resultObj = healthCard.getOrderIdByOutAppId(commonIn, WeChatConfig.APP_ID, qrCodeText);
JSONObject commonOut = resultObj.getJSONObject("commonOut");
if (!"0".equals(commonOut.getString("resultCode"))) {
log.info("[电子健康卡]获取卡包订单ID 失败:" + resultObj);
return null;
}
return resultObj.getJSONObject("rsp");
} catch (Exception e) {
ErrorHelper.println(e);
}
return null;
}
/**
* 电子健康卡用卡数据监测接口
*
* @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 ("".equals(qrCodeText) || scene == null || cardType == null) {
log.info("[电子健康卡]用卡数据监测接口,参数为空");
return null;
}
try {
String appToken = getAppToken();
if (appToken == null) {
return null;
}
HealthCardServerImpl healthCard = new HealthCardServerImpl(H_APP_SECRET);
String requestId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
CommonIn commonIn = new CommonIn(appToken, requestId, H_HOSPITAL_ID, 0);
//构造请求参数req
ReportHISData reportHISData = new ReportHISData();
reportHISData.setQrCodeText(qrCodeText);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
reportHISData.setTime(format.format(new Date()));
reportHISData.setHospitalCode(H_HOSPITAL_ID);
// 010101 挂号
reportHISData.setScene(scene);
reportHISData.setDepartment(deptName); // 科室代码
reportHISData.setCardChannel(HealthCardEnum.CARD_CHANNEL_WX_CHANNEL.STATUS); // 微信渠道
reportHISData.setCardType(cardType);
// 自费:0100,医保:0200,公费:0300,其他:0000
reportHISData.setCardCostTypes(cardCostType);
//调用接口
JSONObject resultObj = healthCard.reportHISData(commonIn, reportHISData);
JSONObject commonOut = resultObj.getJSONObject("commonOut");
if (!"0".equals(commonOut.getString("resultCode"))) {
log.info("用卡数据监测接口-" + resultObj);
return null;
}
return resultObj.getJSONObject("rsp");
} catch (Exception e) {
ErrorHelper.println(e);
}
return null;
}
/**
* 获取健康卡二维码
*
* @param healthCardId 健康卡ID
* @param idCardNo 证件号码
* @param codeType 传0或者1,0返回动态码,1返回静态码
*/
public static JSONObject getDynamicQRCode(String healthCardId, String idCardNo, String codeType) {
if (healthCardId == null || idCardNo == null || codeType == null) {
log.info("[电子健康卡]获取健康卡二维码参数缺失 healthCardId={}, idCardNo={}, codeType={}", healthCardId, idCardNo, codeType);
return null;
}
try {
String appToken = getAppToken();
if (appToken == null) {
return null;
}
HealthCardServerImpl healthCard = new HealthCardServerImpl(H_APP_SECRET);
String requestId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
CommonIn commonIn = new CommonIn(appToken, requestId, H_HOSPITAL_ID, 0);
//调用接口
JSONObject resultObj = healthCard.getDynamicQRCode(commonIn, healthCardId, "01", idCardNo, codeType);
JSONObject commonOut = resultObj.getJSONObject("commonOut");
if (!"0".equals(commonOut.getString("resultCode"))) {
log.info("获取健康卡二维码失败, resp-{}",resultObj);
return null;
}
return resultObj.getJSONObject("rsp");
} catch (Exception e) {
ErrorHelper.println(e);
}
return null;
}
/**
* 一键绑定,绑定健康卡和医院关系
*
* @param patientId 患者ID
* @param qrCodeText 标识ID(healthCardId = qrCodeText)
*/
public static JSONObject bindCardRelation(String patientId, String qrCodeText) {
if (patientId == null || "".equals(qrCodeText)) {
log.info("[电子健康卡]一键绑定绑定健康卡和医院关系参数缺失 patientId={}, qrCodeText={}", patientId, qrCodeText);
return null;
}
try {
String appToken = getAppToken();
if (appToken == null) {
return null;
}
HealthCardServerImpl healthCard = new HealthCardServerImpl(H_APP_SECRET);
//构造公共输入参数commonIn
String requestId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
CommonIn commonIn = new CommonIn(appToken, requestId, H_HOSPITAL_ID, 0);
JSONObject resultObj = healthCard.bindCardRelation(commonIn, patientId, qrCodeText);
JSONObject commonOut = resultObj.getJSONObject("commonOut");
if (!"0".equals(commonOut.getString("resultCode"))) {
log.info("[电子健康卡]绑定健康卡和医院关系-" + resultObj);
return null;
}
return resultObj.getJSONObject("rsp");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 根据健康卡ID获取动态二维码
*
* @param healthCardId 健康卡ID
* @param idCardNo 身份证号
* @return 动态二维码
*/
public static String getQRCodeText(String healthCardId, String idCardNo) {
JSONObject QRResult = getDynamicQRCode(healthCardId, idCardNo, "0");
if (QRResult == null) {
log.info("用卡数据监测接口,获取二维码失败");
return null;
}
String qrCodeText = QRResult.getString("qrCodeText");
if ("".equals(qrCodeText)) {
log.info("用卡数据监测接口,获取qrCodeText失败");
return null;
}
return qrCodeText;
}
/**
* 健康卡数据上报-->挂号支付
*
* @param openid openid
* @param patientId 患者ID
* @param deptName 科室名
* @param regDate 挂号日期
* @return 是否上报成功
*/
public static boolean regPayReportHISData(String openid, String patientId, String deptName, String regDate) {
try {
if (!HCodeService.isEnableHealthCard()) { // 判断是否禁用电子健康卡
return false;
}
if (deptName == null || openid == null || patientId == null || regDate == null) {
return false;
}
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String today = format.format(new Date());
String scene = regDate.equals(today) ? HealthCardEnum.SCENE_REGISTER_SITE.STATUS : HealthCardEnum.SCENE_REGISTER_RESERVE.STATUS;
Patient patient = new PatientDao().selectByOpenidAndPatientId(openid, patientId);
if (patient == null) {
return false;
}
String healthCardId = patient.getHealthCardId();
String idCardNo = patient.getIdCardNo();
if (healthCardId == null || idCardNo == null) {
return false;
}
String qrCodeText = getQRCodeText(healthCardId, idCardNo);
if (qrCodeText == null) {
return false;
}
// 挂号,自费
JSONObject jsonObject = reportHISData(qrCodeText, deptName, scene, HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, HealthCardEnum.CARD_COST_TYPE_OWN_EXPENSE.STATUS);
if (jsonObject == null) {
log.info("挂号数据上报失败");
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 健康卡数据上报-->挂号支付
*
* @param imageContent 身份证正面照片的base64编码数据,头部信息需要删除,如image/png;base64、image/jpeg/png;base64等,并且数据量建议压缩到百K级别上传。
* @return 身份证信息
*/
public static Patient orcInfo(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 (!HCodeService.isEnableHealthCard()) { // 判断是否禁用电子健康卡
return null;
}
String appToken = getAppToken();
if (appToken == null) {
return null;
}
HealthCardServerImpl healthCard = new HealthCardServerImpl(H_APP_SECRET);
//构造公共输入参数commonIn
String requestId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
int channelNum = 0;
CommonIn commonIn = new CommonIn(appToken, requestId, H_HOSPITAL_ID, channelNum);
//调用接口
JSONObject resultObj = healthCard.ocrInfo(commonIn, imageContent);
JSONObject commonOut = resultObj.getJSONObject("commonOut");
if (!"0".equals(commonOut.getString("resultCode"))) {
log.info("[电子健康卡]身份证识别失败-" + resultObj);
return null;
}
JSONObject rsp = resultObj.getJSONObject("rsp");
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) {
e.printStackTrace();
return null;
}
return patient;
}
/**
* 健康卡数据上报-->处方缴费
*
* @param openid openid
* @param patientId patientId
* @return 是否成功
*/
public static boolean payNotifyReportHISData(String openid, String patientId) {
try {
if (!HCodeService.isEnableHealthCard()) { // 判断是否禁用电子健康卡
return false;
}
if (patientId == null || openid == null) {
return false;
}
Patient patient = new PatientDao().selectByOpenidAndPatientId(openid, patientId);
if (patient == null) {
return false;
}
String healthCardId = patient.getHealthCardId();
String idCardNo = patient.getIdCardNo();
if (healthCardId == null || idCardNo == null) {
return false;
}
String qrCodeText = getQRCodeText(healthCardId, idCardNo);
if (qrCodeText == null) {
return false;
}
// 门诊缴费
JSONObject jsonObject = HCodeService.reportHISData(qrCodeText, null, HealthCardEnum.SCENE_TOLL_OUTPATIENT_PAYMENT.STATUS, HealthCardEnum.CARD_TYPE_HEALTH_CARD.STATUS, HealthCardEnum.CARD_COST_TYPE_OWN_EXPENSE.STATUS);
if (jsonObject == null) {
log.info("挂号数据上报失败");
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 批量领卡
*
* @return json
*/
public static JSONArray batchUpdate(List<Patient> lstPatient) {
HealthCardServerImpl healthCard = new HealthCardServerImpl(H_APP_SECRET);
//构造公共输入参数commonIn
String appToken = getAppToken();
String requestId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
int channelNum = 0;
CommonIn commonIn = new CommonIn(appToken, requestId, H_HOSPITAL_ID, channelNum);
List<HealthCardInfo> lstHealthCard = new ArrayList<>();
for (Patient patient : lstPatient) {
HealthCardInfo healthCardInfo = new HealthCardInfo();
healthCardInfo.setAddress(patient.getAddress());
healthCardInfo.setBirthday(patient.getBirthday());
healthCardInfo.setGender(patient.getSex());
healthCardInfo.setIdNumber(patient.getIdCardNo());
healthCardInfo.setIdType("01");
healthCardInfo.setNation(patient.getNation());
healthCardInfo.setName(patient.getName());
healthCardInfo.setPhone1(patient.getTel());
healthCardInfo.setWechatCode(WE_CHART_CODE);
healthCardInfo.setPatid(patient.getPatientId());
healthCardInfo.setOpenId(patient.getOpenid());
healthCardInfo.setWechatUrl("http://www.ynxbdkj.cn");
lstHealthCard.add(healthCardInfo);
}
JSONObject healthCardInfosRsp = healthCard.registerBatchHealthCard(commonIn, lstHealthCard);
JSONObject commonOut = healthCardInfosRsp.getJSONObject("commonOut");
JSONObject rspObj = healthCardInfosRsp.getJSONObject("rsp");
if (!"0".equals(commonOut.getString("resultCode")) || rspObj == null) {
log.info("批量领取健康卡-" + healthCardInfosRsp);
return null;
}
JSONArray rspItems = rspObj.getJSONArray("rspItems");
if (rspItems == null) {
log.info("[批量领取健康卡]解析json失败");
return null;
}
return rspItems;
}
/**
* 响应码处理
*
* @param resultCode 响应码
* @return 返回响应码对应的消息
*/
public static HealthCardRespCodeEnum resultCodeHandle(String resultCode) {
HealthCardRespCodeEnum healthCardRespCodeEnum = HealthCardRespCodeEnum.CONTINUE;
for (HealthCardRespCodeEnum e : HealthCardRespCodeEnum.values()) {
if (e.STATUS.equals(resultCode)) {
if (e.IS_RESULT) { // 是否返回枚举中的信息
healthCardRespCodeEnum = e;
} else {
log.info("[电子健康卡]异常信息:{}", e.MESSAGE);
healthCardRespCodeEnum = e.IS_CONTINUE ? HealthCardRespCodeEnum.CONTINUE : e;
}
break;
}
}
return healthCardRespCodeEnum;
}
}