<?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.pay.biz.dao.PayTransactionMapper">

    <sql id="FIELDS">
        id, app_id, create_ip, order_id, order_subject,
        order_description, order_memo, price, status, expire_time,
        finish_time, notify_url, extension_id, pay_channel, payment_time,
        notify_time, trade_no, create_time
    </sql>

    <insert id="insert" parameterType="PayTransactionDO" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        INSERT INTO transaction (
            app_id, create_ip, order_id, order_subject,
            order_description, order_memo, price, status, expire_time,
            finish_time, notify_url, extension_id, pay_channel, payment_time,
            notify_time, trade_no, create_time
        ) VALUES (
            #{appId}, #{createIp}, #{orderId}, #{orderSubject},
            #{orderDescription}, #{orderMemo}, #{price}, #{status}, #{expireTime},
            #{finishTime}, #{notifyUrl}, #{extensionId}, #{payChannel}, #{paymentTime},
            #{notifyTime}, #{tradeNo}, #{createTime}
        )
    </insert>

    <update id="update">
        UPDATE transaction
        <set>
            <if test="entity.status != null">
                , status = #{entity.status}
            </if>
            <if test="entity.extensionId != null">
                , extension_id = #{entity.extensionId}
            </if>
            <if test="entity.payChannel != null">
                , pay_channel = #{entity.payChannel}
            </if>
            <if test="entity.paymentTime != null">
                , payment_time = #{entity.paymentTime}
            </if>
            <if test="entity.finishTime != null">
                , finish_time = #{entity.finishTime}
            </if>
            <if test="entity.notifyTime != null">
                , notify_time = #{entity.notifyTime}
            </if>
            <if test="entity.tradeNo != null">
                , trade_no = #{entity.tradeNo}
            </if>
        </set>
        WHERE id = #{entity.id}
        <if test="whereStatus != null">
            AND status = #{whereStatus}
        </if>
    </update>

    <select id="selectByAppIdAndOrderId" resultType="PayTransactionDO">
        SELECT
            <include refid="FIELDS"/>
        FROM transaction
        WHERE app_id = #{appId}
        AND order_id = #{orderId}
    </select>

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

</mapper>