<?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="cn.iocoder.mall.promotion.biz.dao.CouponTemplateMapper">

    <sql id="FIELDS">
        id, title, description, type, code_type,
        status, quota, total, price_available, range_type,
        range_values, date_type, valid_start_time, valid_end_time, fixed_start_term, fixed_end_term,
        preferential_type, percent_off, price_off, discount_price_limit, stat_fetch_num,
        create_time
    </sql>

<!--    <select id="selectListByPidAndStatusOrderBySort" resultType="CouponTemplateDO">-->
<!--        SELECT-->
<!--            <include refid="FIELDS" />-->
<!--        FROM coupon_template-->
<!--        WHERE pid = #{pid}-->
<!--        AND status = #{status}-->
<!--        AND deleted = 0-->
<!--        ORDER BY sort ASC-->
<!--    </select>-->

<!--    <select id="selectList" resultType="CouponTemplateDO">-->
<!--        SELECT-->
<!--          <include refid="FIELDS" />-->
<!--        FROM coupon_template-->
<!--        WHERE deleted = 0-->
<!--    </select>-->

    <select id="selectById" parameterType="Integer" resultType="CouponTemplateDO">
        SELECT
          <include refid="FIELDS" />
        FROM coupon_template
        WHERE id = #{id}
    </select>

    <select id="selectListByIds" resultType="CouponTemplateDO">
        SELECT
            <include refid="FIELDS"/>
        FROM coupon_template
        WHERE id IN
        <foreach item="id" collection="ids" separator="," open="(" close=")" index="">
            #{id}
        </foreach>
    </select>

    <select id="selectListByPage" resultType="CouponTemplateDO">
        SELECT
          <include refid="FIELDS" />
        FROM coupon_template
        <where>
            <if test="type != null">
                AND type = #{type}
            </if>
            <if test="title != null">
                AND title LIKE "%"#{title}"%"
            </if>
            <if test="status != null">
                AND status = #{status}
            </if>
            <if test="preferentialType != null">
                AND preferential_type = #{preferentialType}
            </if>
        </where>
        LIMIT #{offset}, #{limit}
    </select>

    <select id="selectCountByPage" resultType="Integer">
        SELECT
          COUNT(1)
        FROM coupon_template
        <where>
            <if test="type != null">
                AND type = #{type}
            </if>
            <if test="title != null">
                AND title LIKE "%"#{title}"%"
            </if>
            <if test="status != null">
                AND status = #{status}
            </if>
            <if test="preferentialType != null">
                AND preferential_type = #{preferentialType}
            </if>
        </where>
    </select>

    <insert id="insert" parameterType="CouponTemplateDO" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        INSERT INTO coupon_template (
          title, description, type, code_type,
          status, quota, total, price_available, range_type,
          range_values, date_type, valid_start_time, valid_end_time, fixed_start_term, fixed_end_term,
          preferential_type, percent_off, price_off, discount_price_limit, stat_fetch_num,
          create_time
        ) VALUES (
          #{title}, #{description}, #{type}, #{codeType},
          #{status}, #{quota}, #{total}, #{priceAvailable}, #{rangeType},
          #{rangeValues}, #{dateType}, #{validStartTime}, #{validEndTime}, #{fixedStartTerm}, #{fixedEndTerm}
          #{preferentialType}, #{percentOff}, #{priceOff}, #{discountPriceLimit}, #{statFetchNum},
          #{createTime}
        )
    </insert>

    <update id="update" parameterType="CouponTemplateDO">
        UPDATE coupon_template
        <set>
            <if test="title != null">
                title = #{title},
            </if>
            <if test="description != null">
                description = #{description},
            </if>
            <if test="status != null">
                status = #{status},
            </if>
            <if test="quota != null">
                quota = #{quota},
            </if>
            <if test="total != null">
                total = #{total},
            </if>
            <if test="priceAvailable != null">
                price_available = #{priceAvailable},
            </if>
            <if test="rangeType != null">
                range_type = #{rangeType},
            </if>
            <if test="rangeValues != null">
                range_values = #{rangeValues},
            </if>
            <if test="dateType != null">
                date_type = #{dateType},
            </if>
            <if test="validStartTime != null">
                valid_start_time = #{validStartTime},
            </if>
            <if test="validEndTime != null">
                valid_end_time = #{validEndTime},
            </if>
            <if test="fixedStartTerm != null">
                fixed_start_term = #{fixedStartTerm},
            </if>
            <if test="fixedEndTerm != null">
                fixed_end_term = #{fixedEndTerm},
            </if>
            <if test="preferentialType != null">
                preferential_type = #{preferentialType},
            </if>
            <if test="percentOff != null">
                percent_off = #{percentOff},
            </if>
            <if test="priceOff != null">
                price_off = #{priceOff},
            </if>
            <if test="discountPriceLimit != null">
                discount_price_limit = #{discountPriceLimit},
            </if>
        </set>
        WHERE id = #{id}
    </update>

    <update id="updateStatFetchNumIncr" parameterType="Integer">
        UPDATE coupon_template
        SET stat_fetch_Num = stat_fetch_Num + 1
        WHERE id = #{id}
        AND total > stat_fetch_Num
    </update>

</mapper>
