| 
					
				 | 
			
			
				@ -1,28 +1,29 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.jw.patient.service.personal_Info; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.alibaba.fastjson.JSONArray; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.alibaba.fastjson.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.patient.BasePatientFamilyMemberDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.patient.PatientMedicareCardDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.exception.business.patient.PatientCardAlreadyExistException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.exception.business.patient.PatientCardFormatInvalidException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.exception.business.patient.PatientCardNotFoundException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.exception.business.patient.PatientNotFoundException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.patient.dao.BasePatientMedicareCardDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.patient.service.BasePatientMedicardCardService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.patient.util.JavaBeanUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.patient.util.PinYinUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import netscape.javascript.JSObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.jdbc.core.JdbcTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.util.Assert; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.util.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.util.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.validation.constraints.NotNull; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.HashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.regex.Matcher; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.regex.Pattern; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -42,6 +43,22 @@ public class PatientMedicareCardService extends BasePatientMedicardCardService<P 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private JdbcTemplate jdbcTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 校验卡号是否正确,长度不小于6并且只支持数字、字母、下划线 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param cardNumber 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void checkCardNumber(String cardNumber){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Assert.notNull(cardNumber,"卡号不可为空!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Assert.state(cardNumber.length() > 6,"卡号长度不能小于6位数!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String regex = "^\\w+"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Pattern pattern = Pattern.compile(regex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Matcher matcher = pattern.matcher(cardNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (!matcher.matches()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new RuntimeException("卡号格式不正确,请输入数字或数字与字母的组合!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 绑定医保卡,需要密码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -53,8 +70,8 @@ public class PatientMedicareCardService extends BasePatientMedicardCardService<P 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void bindMedicareCard(String patientCode, String idcard,String medicareCardNumber,String cityCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Assert.notNull(patientCode,"居民code不可为空!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Assert.notNull(idcard,"身份证号不可为空!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Assert.notNull(medicareCardNumber,"医(社)保卡号不可为空!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Assert.notNull(medicareCardNumber,"城市code不可为空!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        checkCardNumber(medicareCardNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        PatientMedicareCardDO card = makeCardInfo(patientCode,idcard,medicareCardNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        card.setParentType(PatientMedicareCardDO.ParentType.CareCard.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        card.setType(PatientMedicareCardDO.Type.MedicareCard.getType()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -75,6 +92,7 @@ public class PatientMedicareCardService extends BasePatientMedicardCardService<P 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 绑定就诊卡,需要机构和备注 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 同一个医院同一个居民只能存在一张就诊卡。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param patientCode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param idcard 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -84,7 +102,17 @@ public class PatientMedicareCardService extends BasePatientMedicardCardService<P 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void bindPatientIDCard(String patientCode, String idcard,String medicareCardNumber,String orgCode,String remark) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Assert.notNull(patientCode,"居民code不可为空!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Assert.notNull(idcard,"身份证号不可为空!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Assert.notNull(medicareCardNumber,"就诊卡号不可为空!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 校验卡号格式 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        checkCardNumber(medicareCardNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 校验就诊卡号是否存在 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        boolean exist = basePatientMedicareCardDao.existsByCodeAndOrgCodeAndDel(medicareCardNumber,orgCode,"1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(exist){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new PatientCardAlreadyExistException("当前医院就诊卡号已存在,请更改!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        boolean isOneCardOnly = basePatientMedicareCardDao.existsByPatientCodeAndOrgCodeAndDel(patientCode,orgCode,"1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(isOneCardOnly){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new PatientCardAlreadyExistException("同一家医院一个居民只能拥有一张就诊卡,请更改!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        PatientMedicareCardDO card = makeCardInfo(patientCode,idcard,medicareCardNumber); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        card.setParentType(PatientMedicareCardDO.ParentType.CareCard.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        card.setType(PatientMedicareCardDO.Type.PatientIDCard.getType()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -221,4 +249,24 @@ public class PatientMedicareCardService extends BasePatientMedicardCardService<P 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.put("sorted", PinYinUtil.pingYinSortReturnJSON(citylist)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 判断卡号是否存在,就诊卡除外 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param card 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean isCardExist(String card){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Assert.notNull(card,"卡号不可为空!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String sql = "SELECT " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " count(id) " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " FROM " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " patient_medicare_card " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " WHERE " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " !(parent_type = '"+PatientMedicareCardDO.ParentType.CareCard.getType()+"' AND type = '"+ PatientMedicareCardDO.Type.PatientIDCard.getType() +"') and code = '"+ card + "'"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Integer count = jdbcTemplate.queryForObject(sql,Integer.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(count > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |