<?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.example.his.api.db.dao.AppointmentDao">

    <resultMap id="BaseResultMap" type="com.example.his.api.db.pojo.AppointmentEntity">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="uuid" column="uuid" jdbcType="CHAR"/>
        <result property="orderId" column="order_id" jdbcType="INTEGER"/>
        <result property="date" column="date" jdbcType="DATE"/>
        <result property="name" column="name" jdbcType="VARCHAR"/>
        <result property="sex" column="sex" jdbcType="CHAR"/>
        <result property="pid" column="pid" jdbcType="CHAR"/>
        <result property="birthday" column="birthday" jdbcType="DATE"/>
        <result property="tel" column="tel" jdbcType="CHAR"/>
        <result property="mailingAddress" column="mailing_address" jdbcType="VARCHAR"/>
        <result property="company" column="company" jdbcType="VARCHAR"/>
        <result property="status" column="status" jdbcType="TINYINT"/>
        <result property="checkinTime" column="checkin_time" jdbcType="TIMESTAMP"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
    </resultMap>

    <!-- 体检预约-查询订单体检预约记录 -->
    <select id="searchAppointmentList" parameterType="int" resultType="HashMap">
        SELECT id,
               name,
               sex,
               tel,
               TIMESTAMPDIFF(YEAR, birthday, NOW()) AS age,
               date,
               status
        FROM tb_appointment
        WHERE order_id = #{orderId}
        ORDER BY id DESC
    </select>

    <!-- 体检预约-新增 -->
    <insert id="insertFrontAppointment" parameterType="hashmap">
        INSERT INTO tb_appointment
        SET uuid= #{uuid},
            order_id = #{orderId},
            date = #{date},
            name = #{name},
            sex = #{sex},
            pid = #{pid},
            birthday = #{birthday},
            tel = #{tel},
            mailing_address = #{mailingAddress},
            company = #{company},
            status = 1
    </insert>

    <!-- 体检预约-业务端分页查询 -->
    <select id="searchFrontAppointmentByPage" parameterType="Map" resultType="HashMap">
        SELECT a.id,
        o.goods_title AS goodsTitle,
        a.name,
        a.date,
        a.status,
        r.file_path AS filePath
        FROM tb_appointment a
        JOIN tb_order o ON a.order_id = o.id
        LEFT JOIN tb_checkup_report r ON a.id = r.appointment_id
        WHERE o.customer_id = #{customerId}
        <if test="status!=null">
            AND a.status = #{status}
        </if>
        <if test="date!=null">
            AND a.date = #{date}
        </if>
        <if test="keyword!=null">
            AND (
            o.goods_title LIKE CONCAT( "%", #{keyword}, "%" ) OR
            a.`name` = #{keyword} OR
            a.tel = #{keyword}
            )
        </if>
        ORDER BY a.id DESC
    </select>

    <!-- 体检预约-mis端分页查询 -->
    <select id="searchMisAppointmentByPage" parameterType="Map" resultType="HashMap">
        SELECT a.id,
        a.name,
        a.sex,
        CONCAT(SUBSTRING(a.tel,1,3),"****",SUBSTRING(a.tel,8,4)) AS tel,
        CONCAT(SUBSTRING(a.pid,1,3),"***********",SUBSTRING(a.pid,15,4)) AS pid,
        TIMESTAMPDIFF(YEAR,a.birthday,NOW()) AS age,
        a.company,
        a.status,
        a.date,
        o.goods_title AS title,
        o.snapshot_id AS snapshotId
        FROM tb_appointment a
        JOIN tb_order o ON a.order_id = o.id
        <where>
            <if test="date!=null">
                AND a.date = #{date}
            </if>
            <if test="name!=null">
                AND a.name LIKE CONCAT("%",#{name},"%")
            </if>
            <if test="tel!=null">
                AND a.tel = #{tel}
            </if>
            <if test="status!=null">
                AND a.status = #{status}
            </if>
        </where>
        ORDER BY a.id DESC
    </select>

    <!-- 体检预约-删除 -->
    <delete id="deleteAppointmentById">
        delete from tb_appointment where id in
        <foreach collection="ids" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>

    <!-- 体检签到-核验体检人身份 -->
    <select id="hasAppointInToday" parameterType="Map" resultType="HashMap">
        SELECT id, status
        FROM tb_appointment
        WHERE date = CURRENT_DATE()
          AND pid = #{pid}
          AND name = #{name}
          AND sex = #{sex}
        LIMIT 1
    </select>

    <!-- 体检签到-更新体检状态  -->
    <update id="checkin" parameterType="Map">
        UPDATE tb_appointment
        SET `status`     = 2,
            checkin_time = NOW()
        WHERE date = CURRENT_DATE()
          AND `status` = 1
          AND pid = #{pid}
    </update>

    <!-- 体检签到-查询体检流水号和快照编号  -->
    <select id="searchUuidAndSnapshotId" parameterType="Map" resultType="HashMap">
        SELECT a.uuid,
               o.snapshot_id AS snapshotId
        FROM tb_appointment a
                 JOIN tb_order o ON a.order_id = o.id
        WHERE a.date = CURRENT_DATE()
          AND a.pid = #{pid}
    </select>

    <!-- 体检签到-查询体检预约信息 -->
    <select id="searchSummaryById" parameterType="int" resultType="HashMap">
        SELECT a.uuid,
               a.order_id                             AS orderId,
               o.snapshot_id                          AS snapshotId,
               a.name,
               a.sex,
               TIMESTAMPDIFF(YEAR, a.birthday, NOW()) AS age,
               a.pid,
               a.tel,
               a.date,
               a.company
        FROM tb_appointment a
                 JOIN tb_order o ON a.order_id = o.id
        WHERE a.id = #{id}
    </select>

    <!-- 体检签到-更新体检预约记录状态 -->
    <update id="updateStatusByUuid" parameterType="Map">
        UPDATE tb_appointment
        SET status = #{status}
        WHERE uuid = #{uuid}
          AND status != 3
    </update>

    <!-- 医生体检-查询体检人信息 -->
    <select id="searchByUuid" parameterType="String" resultType="HashMap">
        SELECT a.order_id                             AS orderId,
               a.`name`,
               a.sex,
               TIMESTAMPDIFF(YEAR, a.birthday, NOW()) AS age,
               a.tel,
               a.uuid,
               a.date,
               a.`status`,
               o.snapshot_id                          AS snapshotId
        FROM tb_appointment a
                 JOIN tb_order o ON a.order_id = o.id
        WHERE a.uuid = #{uuid}
    </select>

    <!-- 体检报告-查询体检人信息、体检套餐名称和商品快照编号 -->
    <select id="searchDataForReport" parameterType="int" resultType="HashMap">
        SELECT a.uuid,
               a.`name`,
               a.sex,
               a.tel,
               a.birthday,
               TIMESTAMPDIFF(YEAR, a.birthday, NOW()) AS age,
               IFNULL(a.company,'个人体检') AS company,
               a.date,
               o.goods_title AS goods
        FROM tb_appointment a
                 JOIN tb_order o ON a.order_id = o.id
        WHERE a.id = #{id};
    </select>

</mapper>
