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
			
		
		
			
		
	
	
					821 lines
				
				32 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								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;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |