<?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.jsowell.pile.mapper.MemberWalletLogMapper">
    <resultMap id="BaseResultMap" type="com.jsowell.pile.domain.MemberWalletLog">
        <!--@mbg.generated-->
        <!--@Table member_wallet_log-->
        <id column="id" jdbcType="INTEGER" property="id"/>
        <result column="member_id" jdbcType="VARCHAR" property="memberId"/>
        <result column="type" jdbcType="VARCHAR" property="type"/>
        <result column="sub_type" jdbcType="VARCHAR" property="subType"/>
        <result column="amount" jdbcType="DECIMAL" property="amount"/>
        <result column="category" jdbcType="CHAR" property="category"/>
        <result column="create_by" jdbcType="VARCHAR" property="createBy"/>
        <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
    </resultMap>
    <sql id="Base_Column_List">
        <!--@mbg.generated-->
        id,
        member_id,
        `type`,
        sub_type,
        amount,
        category,
        create_by,
        create_time
    </sql>

    <insert id="batchInsert">
        insert into member_wallet_log (member_id, `type`,
                                       sub_type, amount, category, related_order_code, create_by)
        values
        <foreach collection="list" item="item" separator=",">
            (#{item.memberId,jdbcType=VARCHAR}, #{item.type,jdbcType=VARCHAR}, #{item.subType,jdbcType=VARCHAR},
             #{item.amount,jdbcType=DECIMAL}, #{item.category,jdbcType=CHAR}, #{item.relatedOrderCode,jdbcType=VARCHAR},
             #{item.createBy,jdbcType=VARCHAR})
        </foreach>
    </insert>

    <select id="getMemberBalanceChanges" resultType="com.jsowell.pile.vo.uniapp.MemberWalletLogVO">
        SELECT t1.member_id   as memberId,
               t1.type,
               t1.sub_type    as subType,
               t1.amount,
               t1.category,
               t1.create_time as transactionTime
        from member_wallet_log t1
        where t1.member_id = #{memberId,jdbcType=VARCHAR}
        <if test="type != null and type != ''">
            and t1.type = #{type,jdbcType=VARCHAR}
        </if>
        order by t1.create_time DESC
    </select>

    <select id="getMemberWalletDetail" resultType="com.jsowell.pile.vo.uniapp.MemberWalletLogVO">
        SELECT t1.member_id          as memberId,
               t1.type,
               t1.sub_type           as subType,
               t1.amount,
               t1.category,
               t1.related_order_code as relatedOrderCode,
               t2.pay_amount         as payAmount,
               t2.order_amount       as orderAmount,
               t2.refund_amount      as refundAmount,
               t1.create_time        as transactionTime
        from member_wallet_log t1
                 left join order_basic_info t2
                           on t1.related_order_code = t2.order_code
        where t1.member_id = #{dto.memberId,jdbcType=VARCHAR}
          and t1.create_time <![CDATA[ >= ]]> #{dto.tradeDate,jdbcType=VARCHAR}
          and t1.create_time <![CDATA[ < ]]> #{dto.endDate,jdbcType=VARCHAR}
          and t1.sub_type != '12'
        order by t1.create_time desc
    </select>

    <select id="getMemberRefundAmount" resultType="com.jsowell.pile.vo.uniapp.MemberBalanceVO">
        select
            member_id as memberId,
            principal_balance as principalAmount
        from
            member_wallet_info
        where
            <if test="list != null and list.size() != 0">
                member_id in
                <foreach collection="list" item="memberId" open="(" separator="," close=")">
                    #{memberId,jdbcType=VARCHAR}
                </foreach>
            </if>
    </select>
</mapper>