<?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.ruoyi.manage.mapper.BookMapper">
    <!--
      模块：图书（示例）
      说明：
        - 由生成器产生的基础 CRUD；分页由 PageHelper 注入。
    -->

    <resultMap type="Book" id="BookResult">
        <result property="id" column="id"/>
        <result property="categoryId" column="category_id"/>
        <result property="categoryName" column="category_name"/>
        <result property="bookName" column="book_name"/>
        <result property="cover" column="cover"/>
        <result property="author" column="author"/>
        <result property="publisher" column="publisher"/>
        <result property="publishDate" column="publish_date"/>
        <result property="price" column="price"/>
        <result property="quantity" column="quantity"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="status" column="status"/>
    </resultMap>

    <sql id="selectBookVo">
        select id,
               category_id,
               book_name,
               cover,
               author,
               publisher,
               publish_date,
               price,
               quantity,
               create_by,
               create_time,
               status
        from tb_book
    </sql>

    <select id="selectBookList" parameterType="Book" resultMap="BookResult">
        select tb_book.id, category_id,category_name, book_name,category_name, cover, author, publisher, publish_date,
        price, quantity, create_by, create_time,status from tb_book
        left join tb_category on tb_book.category_id = tb_category.id
        <where>
            <if test="categoryId != null ">and category_id = #{categoryId}</if>
            <if test="bookName != null  and bookName != ''">and book_name like concat('%', #{bookName}, '%')</if>
            <if test="author != null  and author != ''">and author like concat('%', #{author}, '%')</if>
            <if test="publisher != null  and publisher != ''">and publisher = #{publisher}</if>
            <if test="createBy != null  and createBy != ''">and create_by = #{createBy}</if>
            <if test="status != null">and status = #{status}</if>
        </where>
        order by id desc
    </select>

    <select id="selectBookById" parameterType="Long" resultMap="BookResult">
        <include refid="selectBookVo"/>
        where id = #{id}
    </select>

    <insert id="insertBook" parameterType="Book" useGeneratedKeys="true" keyProperty="id">
        insert into tb_book
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="categoryId != null">category_id,</if>
            <if test="bookName != null and bookName != ''">book_name,</if>
            <if test="cover != null">cover,</if>
            <if test="author != null and author != ''">author,</if>
            <if test="publisher != null and publisher != ''">publisher,</if>
            <if test="publishDate != null">publish_date,</if>
            <if test="price != null">price,</if>
            <if test="quantity != null">quantity,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="categoryId != null">#{categoryId},</if>
            <if test="bookName != null and bookName != ''">#{bookName},</if>
            <if test="cover != null">#{cover},</if>
            <if test="author != null and author != ''">#{author},</if>
            <if test="publisher != null and publisher != ''">#{publisher},</if>
            <if test="publishDate != null">#{publishDate},</if>
            <if test="price != null">#{price},</if>
            <if test="quantity != null">#{quantity},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
        </trim>
    </insert>

    <update id="updateBook" parameterType="Book">
        update tb_book
        <trim prefix="SET" suffixOverrides=",">
            <if test="categoryId != null">category_id = #{categoryId},</if>
            <if test="bookName != null and bookName != ''">book_name = #{bookName},</if>
            <if test="cover != null">cover = #{cover},</if>
            <if test="author != null and author != ''">author = #{author},</if>
            <if test="publisher != null and publisher != ''">publisher = #{publisher},</if>
            <if test="publishDate != null">publish_date = #{publishDate},</if>
            <if test="price != null">price = #{price},</if>
            <if test="quantity != null">quantity = #{quantity},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="status != null">status = #{status},</if>
        </trim>
        where id = #{id}
    </update>


    <delete id="deleteBookById" parameterType="Long">
        delete
        from tb_book
        where id = #{id}
    </delete>

    <delete id="deleteBookByIds" parameterType="String">
        delete from tb_book where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>

    <update id="batchAuditByIds">
        UPDATE tb_book
        SET status = #{status}
        WHERE id IN
        <foreach collection="ids" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
    </update>

    <select id="countBookDataByCategoryId" resultType="Integer">
        select count(1)
        from tb_book
        where category_id = #{categoryId}
    </select>
</mapper>
