package com.yihu.jw.patient.service;

import com.yihu.jw.entity.base.patient.PatientMedicareCardDO;
import com.yihu.jw.patient.dao.BasePatientMedicareCardDao;
import com.yihu.mysql.query.BaseJpaService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 
 * 居民卡包基础信息服务service
 * 
 * @version 
 * <pre>
 * Author	Version		Date		Changes
 * litaohong    1.0  2018年08月31日 Created
 *
 * </pre>
 * @since 1.
 */
@Service
public class BasePatientMedicardCardService<T, R extends CrudRepository> extends BaseJpaService<PatientMedicareCardDO, BasePatientMedicareCardDao> {

    @Autowired
    private BasePatientMedicareCardDao basePatientMedicareCardDao;

    /**
     * 根据居民标识获取居民医疗相关卡列表
     * @param patientCode
     * @return
     */
    public List<PatientMedicareCardDO> findPatientCardByCode(String patientCode){
        List<PatientMedicareCardDO> result = new ArrayList<>();
        if(StringUtils.isEmpty(patientCode)){
            return result;
        }
        return basePatientMedicareCardDao.findByPatientCode(patientCode);
    }

    /**
     * 根据居民标识获取关联卡id列表
     * @param patientCode
     * @return
     */
    public Set<Object> findIdListByPatientCode(String patientCode){
        Set<Object> result = new HashSet<>();
        if(StringUtils.isEmpty(patientCode)){
            return result;
        }
        return basePatientMedicareCardDao.findIdListByPatientCode(patientCode);
    }

    /**
     * 根据居民标识获取关联卡id列表
     * @param patientCode
     * @return
     */
    public PatientMedicareCardDO findByCode(String patientCode) throws Exception{
        PatientMedicareCardDO patientMedicareCard = basePatientMedicareCardDao.findByCode(patientCode);
        if(patientMedicareCard==null){
            throw new Exception("no PatientMedicareCard entity");
        }
        return patientMedicareCard;
    }

    public PatientMedicareCardDO findByTypeAndPatientCodeAndDel(String Type,String patientCode,String del)throws Exception{

        PatientMedicareCardDO patientMedicareCardDO = basePatientMedicareCardDao.findByTypeAndPatientCodeAndDel(Type,patientCode,del);
        return patientMedicareCardDO;
    }

    public boolean existsByCodeAndDel(String code)throws Exception{
        if(StringUtils.isEmpty(code)){
            throw new Exception("社保卡号不能为空");
        }
        return basePatientMedicareCardDao.existsByCodeAndDel(code,"1");
    }
}
