<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.xinelu.manage.mapper.patientinfo.PatientInfoMapper">
    <resultMap type="com.xinelu.manage.domain.patientinfo.PatientInfo" id="PatientInfoResult">
        <result property="id" column="id"/>
        <result property="residentId" column="resident_id"/>
        <result property="patientName" column="patient_name"/>
        <result property="patientPhone" column="patient_phone"/>
        <result property="familyMemberPhone" column="family_member_phone"/>
        <result property="birthDate" column="birth_date"/>
        <result property="cardNo" column="card_no"/>
        <result property="sex" column="sex"/>
        <result property="address" column="address"/>
        <result property="patientType" column="patient_type"/>
        <result property="signStatus" column="sign_status"/>
        <result property="signPatientRecordId" column="sign_patient_record_id"/>
        <result property="serviceStatus" column="service_status"/>
        <result property="signTime" column="sign_time"/>
        <result property="visitMethod" column="visit_method"/>
        <result property="attendingPhysicianId" column="attending_physician_id"/>
        <result property="attendingPhysicianName" column="attending_physician_name"/>
        <result property="mainDiagnosis" column="main_diagnosis"/>
        <result property="hospitalAgencyId" column="hospital_agency_id"/>
        <result property="hospitalAgencyName" column="hospital_agency_name"/>
        <result property="campusAgencyId" column="campus_agency_id"/>
        <result property="campusAgencyName" column="campus_agency_name"/>
        <result property="departmentId" column="department_id"/>
        <result property="departmentName" column="department_name"/>
        <result property="wardId" column="ward_id"/>
        <result property="wardName" column="ward_name"/>
        <result property="responsibleNurse" column="responsible_nurse"/>
        <result property="patientVisitRecordId" column="patient_visit_record_id"/>
        <result property="visitSerialNumber" column="visit_serial_number"/>
        <result property="admissionTime" column="admission_time"/>
        <result property="dischargeTime" column="discharge_time"/>
	    <result property="patientPreHospitalizationId" column="patient_pre_hospitalization_id"/>
        <result property="appointmentTreatmentGroup" column="appointment_treatment_group"/>
        <result property="registrationNo" column="registration_no"/>
        <result property="registrationDate" column="registration_date"/>
        <result property="appointmentDate" column="appointment_date"/>
        <result property="inHospitalNumber" column="in_hospital_number"/>
        <result property="visitDate" column="visit_date"/>
        <result property="dischargeMethod" column="discharge_method"/>
        <result property="patientSource" column="patient_source"/>
	    <result property="surgicalName" column="surgical_name" />
        <result property="delFlag" column="del_flag"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
    </resultMap>

	<sql id="selectPatientInfoVo">
		select p.id,p.resident_id,
		       p.patient_name,
		       p.patient_phone,
		       p.family_member_phone,
		       p.birth_date,
		       p.card_no,
		       p.sex,
		       p.address,
		       p.patient_type,
		       p.sign_status,p.sign_patient_record_id,p.service_status,
		       p.sign_time,
		       p.visit_method, p.attending_physician_id, p.attending_physician_name, p.main_diagnosis,
		       p.hospital_agency_id, p.hospital_agency_name, p.campus_agency_id, p.campus_agency_name, p.department_id, p.department_name, p.ward_id, p.ward_name,
		       p.responsible_nurse, p.patient_visit_record_id, p.visit_serial_number,
		       p.admission_time, p.patient_pre_hospitalization_id, p.discharge_time, p.patient_pre_hospitalization_id, p.appointment_treatment_group,
		       p.registration_no, p.registration_date, p.appointment_date, p.in_hospital_number, p.visit_date, p.discharge_method,
		       p.patient_source, p.surgical_name, p.del_flag, p.create_by, p.create_time, p.update_by, p.update_time
		from patient_info p
	</sql>

    <select id="selectPatientInfoList" parameterType="com.xinelu.manage.dto.patientinfo.PatientInfoDto"
            resultMap="PatientInfoResult">
        <include refid="selectPatientInfoVo"/>
        <where>
	        p.del_flag = 0
	        <if test="residentId != null">
		        and p.resident_id = #{residentId}
	        </if>
            <if test="patientName != null  and patientName != ''">
                and p.patient_name = #{patientName}
            </if>
            <if test="patientPhone != null  and patientPhone != ''">
                and p.patient_phone like concat('%', #{patientPhone}, '%')
            </if>
            <if test="cardNo != null  and cardNo != ''">
                and p.card_no = #{cardNo}
            </if>
            <if test="patientType != null  and patientType != ''">
                <choose>
                    <when test="patientType == 'OUTPATIENT_DISCHARGE'.toString()">
                        and (p.patient_type = 'OUTPATIENT' or p.patient_type = 'DISCHARGED_PATIENT')
                    </when>
                    <otherwise>
                        and p.patient_type = #{patientType}
                    </otherwise>
                </choose>
            </if>
            <if test="attendingPhysicianId != null">
                and p.attending_physician_id = #{attendingPhysicianId}
            </if>
            <if test="mainDiagnosis != null  and mainDiagnosis != ''">
                and p.main_diagnosis like concat('%', #{mainDiagnosis}, '%')
            </if>
            <if test="hospitalAgencyId != null ">
                and p.hospital_agency_id = #{hospitalAgencyId}
            </if>
            <if test="campusAgencyId != null ">
                and p.campus_agency_id = #{campusAgencyId}
            </if>
            <if test="departmentId != null ">
                and p.department_id = #{departmentId}
            </if>
            <if test="wardId != null ">
                and p.ward_id = #{wardId}
            </if>
            <if test="visitMethod != null  and visitMethod != ''">
                and p.visit_method = #{visitMethod}
            </if>
            <if test="visitDateStart != null ">
                and date_format(p.visit_date, '%y%m%d') >= date_format(#{visitDateStart}, '%y%m%d')
            </if>
            <if test="visitDateEnd != null ">
                and date_format(p.visit_date, '%y%m%d') &lt;= date_format(#{visitDateEnd}, '%y%m%d')
            </if>
            <if test="admissionTimeStart != null ">
                and date_format(p.admission_time,'%y%m%d') >= date_format(#{admissionTimeStart}, '%y%m%d')
            </if>
            <if test="admissionTimeEnd != null ">
                and date_format(p.admission_time,'%y%m%d') &lt;= date_format(#{admissionTimeEnd}, '%y%m%d')
            </if>
	        <if test="dischargeTimeStart != null ">
		        and date_format(p.discharge_time,'%y%m%d') >= date_format(#{dischargeTimeStart}, '%y%m%d')
	        </if>
	        <if test="dischargeTimeEnd != null ">
		        and date_format(p.discharge_time,'%y%m%d') &lt;= date_format(#{dischargeTimeEnd}, '%y%m%d')
	        </if>
            <if test="appointmentDateStart != null ">
                and date_format(p.appointment_date, '%y%m%d') >= date_format(#{appointmentDateStart}, '%y%m%d')
            </if>
            <if test="appointmentDateEnd != null ">
                and date_format(p.appointment_date, '%y%m%d') &lt;= date_format(#{appointmentDateEnd}, '%y%m%d')
            </if>
            <if test="appointmentTreatmentGroup != null  and appointmentTreatmentGroup != ''">
                and p.appointment_treatment_group = #{appointmentTreatmentGroup}
            </if>
            <if test="registrationNo != null  and registrationNo != ''">
                and p.registration_no = #{registrationNo}
            </if>
            <if test="visitSerialNumber != null  and visitSerialNumber != ''">
                and p.visit_serial_number = #{visitSerialNumber}
            </if>
            <if test="responsibleNurse != null  and responsibleNurse != ''">
                and p.responsible_nurse = #{responsibleNurse}
            </if>
            <if test="patientSource != null  and patientSource != ''">
                and p.patient_source = #{patientSource}
            </if>
	        <if test="surgicalName != null  and surgicalName != ''">
		        and p.surgical_name = #{surgicalName}
	        </if>
	        <!-- 数据范围过滤 -->
	        ${params.dataScope}
        </where>
        order by p.id desc
    </select>

	<select id="selectPatientInfoById" parameterType="Long" resultMap="PatientInfoResult">
		<include refid="selectPatientInfoVo" />
		where id = #{id}
	</select>

	<select id="getPatientBaseInfo" parameterType="Long" resultType="com.xinelu.manage.vo.patientinfo.PatientBaseInfoVo">
		select id, resident_id, patient_name, patient_phone, family_member_phone,
		       birth_date, card_no, sex, address
		from patient_info
		where id = #{id}
	</select>

	<insert id="insertPatientInfo" parameterType="com.xinelu.manage.domain.patientinfo.PatientInfo" useGeneratedKeys="true" keyProperty="id">
		insert into patient_info
		<trim prefix="(" suffix=")" suffixOverrides=",">
			<if test="residentId != null">
				resident_id,
			</if>
			<if test="patientName != null">
		    patient_name,
			</if>
			<if test="patientPhone != null">patient_phone,
			</if>
			<if test="familyMemberPhone != null">family_member_phone,
			</if>
			<if test="birthDate != null">birth_date,
			</if>
			<if test="cardNo != null">card_no,
			</if>
			<if test="sex != null">sex,
			</if>
			<if test="address != null">address,
			</if>
			<if test="patientType != null">patient_type,
			</if>
			<if test="signStatus != null">sign_status,
			</if>
			<if test="signPatientRecordId != null">sign_patient_record_id,
			</if>
			<if test="serviceStatus != null">service_status,
			</if>
			<if test="signTime != null">sign_time,
			</if>
			<if test="visitMethod != null">visit_method,
			</if>
			<if test="attendingPhysicianId != null">attending_physician_id,
			</if>
			<if test="attendingPhysicianName != null">attending_physician_name,
			</if>
			<if test="mainDiagnosis != null">main_diagnosis,
			</if>
			<if test="hospitalAgencyId != null">hospital_agency_id,
			</if>
			<if test="hospitalAgencyName != null">hospital_agency_name,
			</if>
			<if test="campusAgencyId != null">campus_agency_id,
			</if>
			<if test="campusAgencyName != null">campus_agency_name,
			</if>
			<if test="departmentId != null">department_id,
			</if>
			<if test="departmentName != null">department_name,
			</if>
			<if test="wardId != null">ward_id,
			</if>
			<if test="wardName != null">ward_name,
			</if>
			<if test="responsibleNurse != null">
		    responsible_nurse,
			</if>
			<if test="patientVisitRecordId != null">
				patient_visit_record_id,
			</if>
			<if test="visitSerialNumber != null">
		    visit_serial_number,
			</if>
			<if test="admissionTime != null">
				admission_time,
			</if>
			<if test="dischargeTime != null">
				discharge_time,
			</if>
			<if test="patientPreHospitalizationId != null">
				patient_pre_hospitalization_id,
			</if>
			<if test="appointmentTreatmentGroup != null">appointment_treatment_group,
			</if>
			<if test="registrationNo != null">registration_no,
			</if>
			<if test="registrationDate != null">registration_date,
			</if>
			<if test="appointmentDate != null">appointment_date,
			</if>
			<if test="inHospitalNumber != null">in_hospital_number,
			</if>
			<if test="visitDate != null">visit_date,
			</if>
			<if test="dischargeMethod != null">discharge_method,
			</if>
			<if test="patientSource != null">patient_source,
			</if>
			<if test="surgicalName != null">surgical_name,
			</if>
			<if test="delFlag != null">del_flag,
			</if>
			<if test="createBy != null">create_by,
			</if>
			<if test="createTime != null">create_time,
			</if>
			<if test="updateBy != null">update_by,
			</if>
			<if test="updateTime != null">update_time,
			</if>
		</trim>
		<trim prefix="values (" suffix=")" suffixOverrides=",">
			<if test="residentId != null">#{residentId},
			</if>
			<if test="patientName != null">#{patientName},
			</if>
			<if test="patientPhone != null">#{patientPhone},
			</if>
			<if test="familyMemberPhone != null">#{familyMemberPhone},
			</if>
			<if test="birthDate != null">#{birthDate},
			</if>
			<if test="cardNo != null">#{cardNo},
			</if>
			<if test="sex != null">#{sex},
			</if>
			<if test="address != null">#{address},
			</if>
			<if test="patientType != null">#{patientType},
			</if>
			<if test="signStatus != null">#{signStatus},
			</if>
			<if test="signPatientRecordId != null">#{signPatientRecordId},
			</if>
			<if test="serviceStatus != null">#{serviceStatus},
			</if>
			<if test="signTime != null">#{signTime},
			</if>
			<if test="visitMethod != null">#{visitMethod},
			</if>
			<if test="attendingPhysicianId != null">#{attendingPhysicianId},
			</if>
			<if test="attendingPhysicianName != null">#{attendingPhysicianName},
			</if>
			<if test="mainDiagnosis != null">#{mainDiagnosis},
			</if>
			<if test="hospitalAgencyId != null">#{hospitalAgencyId},
			</if>
			<if test="hospitalAgencyName != null">#{hospitalAgencyName},
			</if>
			<if test="campusAgencyId != null">#{campusAgencyId},
			</if>
			<if test="campusAgencyName != null">#{campusAgencyName},
			</if>
			<if test="departmentId != null">#{departmentId},
			</if>
			<if test="departmentName != null">#{departmentName},
			</if>
			<if test="wardId != null">#{wardId},
			</if>
			<if test="wardName != null">#{wardName},
			</if>
			<if test="responsibleNurse != null">#{responsibleNurse},
			</if>
			<if test="patientVisitRecordId != null">#{patientVisitRecordId},
			</if>
			<if test="visitSerialNumber != null">#{visitSerialNumber},
			</if>
			<if test="admissionTime != null">#{admissionTime},
			</if>
			<if test="dischargeTime != null">#{dischargeTime},
			</if>
			<if test="patientPreHospitalizationId != null">
				#{patientPreHospitalizationId},
			</if>
			<if test="appointmentTreatmentGroup != null">#{appointmentTreatmentGroup},
			</if>
			<if test="registrationNo != null">#{registrationNo},
			</if>
			<if test="registrationDate != null">#{registrationDate},
			</if>
			<if test="appointmentDate != null">#{appointmentDate},
			</if>
			<if test="inHospitalNumber != null">#{inHospitalNumber},
			</if>
			<if test="visitDate != null">#{visitDate},
			</if>
			<if test="dischargeMethod != null">#{dischargeMethod},
			</if>
			<if test="patientSource != null">#{patientSource},
			</if>
			<if test="surgicalName != null">#{surgicalName},
			</if>
			<if test="delFlag != null">#{delFlag},
			</if>
			<if test="createBy != null">#{createBy},
			</if>
			<if test="createTime != null">#{createTime},
			</if>
			<if test="updateBy != null">#{updateBy},
			</if>
			<if test="updateTime != null">#{updateTime},
			</if>
		</trim>
	</insert>

	<update id="updatePatientInfoSelective" parameterType="com.xinelu.manage.domain.patientinfo.PatientInfo">
		update patient_info
		<trim prefix="SET" suffixOverrides=",">
			<if test="residentId != null">
				resident_id = #{residentId},
			</if>
			<if test="patientName != null">
		    patient_name = #{patientName},
			</if>
			<if test="patientPhone != null">
		    patient_phone = #{patientPhone},
			</if>
			<if test="familyMemberPhone != null">
		    family_member_phone = #{familyMemberPhone},
			</if>
			<if test="birthDate != null">
		    birth_date = #{birthDate},
			</if>
			<if test="cardNo != null">
		    card_no = #{cardNo},
			</if>
			<if test="sex != null">
		    sex = #{sex},
			</if>
			<if test="address != null">
		    address = #{address},
			</if>
			<if test="patientType != null">
		    patient_type = #{patientType},
			</if>
			<if test="signStatus != null">sign_status =
				#{signStatus},
			</if>
			<if test="signPatientRecordId != null">sign_patient_record_id = #{signPatientRecordId},
			</if>
			<if test="serviceStatus != null">service_status = #{serviceStatus},
			</if>
			<if test="signTime != null">sign_time =
				#{signTime},
			</if>
			<if test="visitMethod != null">visit_method =
				#{visitMethod},
			</if>
			<if test="attendingPhysicianId != null">attending_physician_id =
				#{attendingPhysicianId},
			</if>
			<if test="attendingPhysicianName != null">attending_physician_name =
				#{attendingPhysicianName},
			</if>
			<if test="mainDiagnosis != null">main_diagnosis =
				#{mainDiagnosis},
			</if>
			<if test="hospitalAgencyId != null">hospital_agency_id =
				#{hospitalAgencyId},
			</if>
			<if test="hospitalAgencyName != null">hospital_agency_name =
				#{hospitalAgencyName},
			</if>
			<if test="campusAgencyId != null">campus_agency_id =
				#{campusAgencyId},
			</if>
			<if test="campusAgencyName != null">campus_agency_name =
				#{campusAgencyName},
			</if>
			<if test="departmentId != null">department_id =
				#{departmentId},
			</if>
			<if test="departmentName != null">department_name =
				#{departmentName},
			</if>
			<if test="wardId != null">ward_id =
				#{wardId},
			</if>
			<if test="wardName != null">ward_name =
				#{wardName},
			</if>
			<if test="responsibleNurse != null">responsible_nurse =
				#{responsibleNurse},
			</if>
			<if test="patientVisitRecordId != null">patient_visit_record_id =
				#{patientVisitRecordId},
			</if>
			<if test="visitSerialNumber != null">visit_serial_number =
				#{visitSerialNumber},
			</if>
			<if test="admissionTime != null">
				admission_time = #{admissionTime},
			</if>
			<if test="dischargeTime != null">
				discharge_time = #{dischargeTime},
			</if>
			<if test="patientPreHospitalizationId != null">
				patient_pre_hospitalization_id = #{patientPreHospitalizationId},
			</if>
			<if test="appointmentTreatmentGroup != null">appointment_treatment_group =
				#{appointmentTreatmentGroup},
			</if>
			<if test="registrationNo != null">registration_no =
				#{registrationNo},
			</if>
			<if test="registrationDate != null">registration_date =
				#{registrationDate},
			</if>
			<if test="appointmentDate != null">appointment_date =
				#{appointmentDate},
			</if>
			<if test="inHospitalNumber != null">in_hospital_number =
				#{inHospitalNumber},
			</if>
			<if test="visitDate != null">visit_date =
				#{visitDate},
			</if>
			<if test="dischargeMethod != null">discharge_method =
				#{dischargeMethod},
			</if>
			<if test="patientSource != null">patient_source =
				#{patientSource},
			</if>
			<if test="surgicalName != null">surgical_name =
		    	#{surgicalName},
			</if>
			<if test="delFlag != null">del_flag =
				#{delFlag},
			</if>
			<if test="createBy != null">create_by =
				#{createBy},
			</if>
			<if test="createTime != null">create_time =
				#{createTime},
			</if>
			<if test="updateBy != null">update_by =
				#{updateBy},
			</if>
			<if test="updateTime != null">update_time =
				#{updateTime},
			</if>
		</trim>
		where id = #{id}
	</update>

	<update id="updatePatientInfo" parameterType="com.xinelu.manage.domain.patientinfo.PatientInfo">
		update patient_info
		set resident_id                    = #{residentId},
		    patient_name                   = #{patientName},
		    patient_phone                  = #{patientPhone},
		    family_member_phone            = #{familyMemberPhone},
		    birth_date                     = #{birthDate},
		    card_no                        = #{cardNo},
		    sex                            = #{sex},
		    address                        = #{address},
		    patient_type                   = #{patientType},
		    sign_status                    = #{signStatus},
		    sign_patient_record_id         = #{signPatientRecordId},
		    service_status                 = #{serviceStatus},
		    sign_time                      = #{signTime},
		    visit_method                   = #{visitMethod},
		    attending_physician_id         = #{attendingPhysicianId},
		    attending_physician_name       = #{attendingPhysicianName},
		    main_diagnosis                 = #{mainDiagnosis},
		    hospital_agency_id             = #{hospitalAgencyId},
		    hospital_agency_name           = #{hospitalAgencyName},
		    campus_agency_id               = #{campusAgencyId},
		    campus_agency_name             = #{campusAgencyName},
		    department_id                  = #{departmentId},
		    department_name                = #{departmentName},
		    ward_id                        = #{wardId},
		    ward_name                      = #{wardName},
		    responsible_nurse              = #{responsibleNurse},
		    patient_visit_record_id        = #{patientVisitRecordId},
		    visit_serial_number            = #{visitSerialNumber},
		    admission_time                 = #{admissionTime},
		    discharge_time                 = #{dischargeTime},
		    patient_pre_hospitalization_id = #{patientPreHospitalizationId},
		    appointment_treatment_group    = #{appointmentTreatmentGroup},
		    registration_no                = #{registrationNo},
		    registration_date              = #{registrationDate},
		    appointment_date               = #{appointmentDate},
		    in_hospital_number             = #{inHospitalNumber},
		    visit_date                     = #{visitDate},
		    discharge_method               = #{dischargeMethod},
		    patient_source                 = #{patientSource},
		    surgical_name                  = #{surgicalName},
		    del_flag                       = #{delFlag},
		    create_by                      = #{createBy},
		    create_time                    = #{createTime},
		    update_by                      = #{updateBy},
		    update_time                    = #{updateTime}
		where id = #{id}
	</update>
    <update id="deletePatientInfoById" parameterType="Long">
		update patient_info set del_flag = 1
		where id = #{id}
	</update>

    <update id="deletePatientInfoByIds" parameterType="String">
        update patient_info set del_flag = 1 where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </update>

    <select id="getPatientInfoByOpenId" parameterType="string" resultType="ResidentInfo">
        SELECT
        id,
		patient_name,
		patient_phone,
		family_member_phone,
		birth_date,
        card_no,
		sex,
        address,
		open_id,
		union_id,
		official_account_openid,
		avatar_picture_url
        FROM
		resident_info
        <where>
            del_flag = 0
            <if test="openId != null and openId != ''">
                and open_id = #{openId}
            </if>
        </where>
    </select>
</mapper>