| 
					
				 | 
			
			
				@ -0,0 +1,196 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.wlyy.service.app.ehc; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.alibaba.fastjson.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.entity.patient.Patient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.entity.ylz.EHCConfigura; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.entity.ylz.EHCLog; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.repository.patient.PatientDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.repository.ylz.EHCConfiguraDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.repository.ylz.EHCLogDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.service.BaseService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.util.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.ylzinfo.ehc.EhcHandler; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.ylzinfo.ehc.trans.TransRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.ylzinfo.ehc.utils.DateUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.slf4j.Logger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.text.SimpleDateFormat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.Date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.UUID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Created by Reece on 2017/10/25/025. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 居民电子健康卡业务处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				@Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				public class PatientEHCService extends BaseService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private static Logger logger = LoggerFactory.getLogger(PatientEHCService.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Value("${wechat.accId}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String accId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private EHCConfiguraDao ehcConfiguraDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private PatientDao patientDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private EHCLogDao ehcLogDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String EHCRedirecturl(String getUid) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String result = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String format = "yyyyMMddHHmmss"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String currentTime = DateUtils.getOutTradeTime(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String uuid = DateUtil.getUidNo(4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            EHCConfigura config = ehcConfiguraDao.findWorkConfigura(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String api = config.getEhcApi(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String appId = config.getAppId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String termId = config.getTermId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String appKey = config.getAppKey(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String signType = config.getSignType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String encType = config.getEncType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String version = config.getVersion(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String redirecturl = config.getEhcRedirecturl(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Patient patient = patientDao.findByCode(getUid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String openId = patient.getOpenid(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String idcard = patient.getIdcard(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String name = patient.getName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Integer sex = patient.getSex();//1男,2女 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (StringUtils.isEmpty(openId)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return "-1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (StringUtils.isEmpty(idcard)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return "-1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (StringUtils.isEmpty(name)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return "-1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (sex == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return "-1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Date birthday = patient.getBirthday(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String mobile = patient.getMobile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String phone = patient.getPhone(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String provinceName = patient.getProvinceName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String cityName = patient.getCityName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String townName = patient.getTownName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String streetName = patient.getStreetName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String address = patient.getAddress(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            JSONObject bizContent = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            bizContent.put("open_id", openId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            bizContent.put("account_id", accId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            bizContent.put("out_trade_no", uuid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            bizContent.put("out_trade_time", currentTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            bizContent.put("id_type", "01"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            bizContent.put("id_no", idcard); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            bizContent.put("user_name", name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            bizContent.put("user_sex", "" + sex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            bizContent.put("birthday", DateUtil.dateToStr(birthday, format)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            bizContent.put("mobile_phone", mobile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            bizContent.put("telephone", phone); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            bizContent.put("address", address); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            bizContent.put("work_unit", provinceName + cityName + townName + streetName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result = httpUtils(getUid, api, appId, termId, appKey, signType, encType, version, redirecturl, bizContent); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * http发送请求工具类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param api      网关地址 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param appId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param termId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param appKey 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param signType 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param encType 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param version 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param url      接口路径 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String httpUtils(String patient, String api, String appId, String termId, String appKey, String signType, String encType, String version, String url, JSONObject bizContent) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String params = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String encParams = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String response = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String error = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            TransRequest request = new TransRequest(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            request.setMethod(url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            request.setApp_id(appId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            request.setTerm_id(termId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            request.setVersion(version); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            request.setTimestamp(DateUtils.getOutTradeTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            request.setSign_type(signType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            request.setEnc_type(encType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            request.setBiz_content(JSONObject.toJSONString(bizContent)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            params = JSONObject.toJSONString(request); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            EhcHandler ehcHandler = new EhcHandler(api, appId, termId, appKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String result = ehcHandler.buildGet(request); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            System.out.println(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            encParams = JSONObject.toJSONString(request); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            response = result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            error = e.getMessage(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //保存日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        getLog(patient, url, params, response, error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        logger.info("**************** EHC LOG START **********************"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        logger.info("EHC API " + url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        logger.info("EHC PARAMS " + encParams); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        logger.info("EHC RESPONSE " + response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        logger.info("EHC ERROR " + error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        logger.info("**************** EHC LOG END **********************"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return response; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void getLog(String patient, String api, String params, String response, String error) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String type = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String content = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String method = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            EHCLog ehcLog = ehcLogDao.findByPatient(patient); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (ehcLog == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                ehcLog = new EHCLog(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            switch (api) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                case "ehc.ehealthcode.redirecturl": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    type = "0"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    content = "获取电子健康卡链接"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    method = "GET"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ehcLog.setPatient(patient); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ehcLog.setApi(api); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ehcLog.setType(type); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ehcLog.setContent(content); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ehcLog.setMethod(method); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ehcLog.setParams(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ehcLog.setResponse(response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ehcLog.setStatus("1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ehcLog.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ehcLog.setError(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (StringUtils.isNotEmpty(error)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                ehcLog.setStatus("0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ehcLogDao.save(ehcLog); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |