<?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="related_order_code" jdbcType="VARCHAR" property="relatedOrderCode" />
    <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, related_order_code, create_by, 
    create_time
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    <!--@mbg.generated-->
    select 
    <include refid="Base_Column_List" />
    from member_wallet_log
    where id = #{id,jdbcType=INTEGER}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    <!--@mbg.generated-->
    delete from member_wallet_log
    where id = #{id,jdbcType=INTEGER}
  </delete>
  <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.jsowell.pile.domain.MemberWalletLog" useGeneratedKeys="true">
    <!--@mbg.generated-->
    insert into member_wallet_log (member_id, `type`, sub_type, 
      amount, category, related_order_code, 
      create_by, create_time)
    values (#{memberId,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, #{subType,jdbcType=VARCHAR}, 
      #{amount,jdbcType=DECIMAL}, #{category,jdbcType=CHAR}, #{relatedOrderCode,jdbcType=VARCHAR}, 
      #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP})
  </insert>
  <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.jsowell.pile.domain.MemberWalletLog" useGeneratedKeys="true">
    <!--@mbg.generated-->
    insert into member_wallet_log
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="memberId != null">
        member_id,
      </if>
      <if test="type != null">
        `type`,
      </if>
      <if test="subType != null">
        sub_type,
      </if>
      <if test="amount != null">
        amount,
      </if>
      <if test="category != null">
        category,
      </if>
      <if test="relatedOrderCode != null">
        related_order_code,
      </if>
      <if test="createBy != null">
        create_by,
      </if>
      <if test="createTime != null">
        create_time,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="memberId != null">
        #{memberId,jdbcType=VARCHAR},
      </if>
      <if test="type != null">
        #{type,jdbcType=VARCHAR},
      </if>
      <if test="subType != null">
        #{subType,jdbcType=VARCHAR},
      </if>
      <if test="amount != null">
        #{amount,jdbcType=DECIMAL},
      </if>
      <if test="category != null">
        #{category,jdbcType=CHAR},
      </if>
      <if test="relatedOrderCode != null">
        #{relatedOrderCode,jdbcType=VARCHAR},
      </if>
      <if test="createBy != null">
        #{createBy,jdbcType=VARCHAR},
      </if>
      <if test="createTime != null">
        #{createTime,jdbcType=TIMESTAMP},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.jsowell.pile.domain.MemberWalletLog">
    <!--@mbg.generated-->
    update member_wallet_log
    <set>
      <if test="memberId != null">
        member_id = #{memberId,jdbcType=VARCHAR},
      </if>
      <if test="type != null">
        `type` = #{type,jdbcType=VARCHAR},
      </if>
      <if test="subType != null">
        sub_type = #{subType,jdbcType=VARCHAR},
      </if>
      <if test="amount != null">
        amount = #{amount,jdbcType=DECIMAL},
      </if>
      <if test="category != null">
        category = #{category,jdbcType=CHAR},
      </if>
      <if test="relatedOrderCode != null">
        related_order_code = #{relatedOrderCode,jdbcType=VARCHAR},
      </if>
      <if test="createBy != null">
        create_by = #{createBy,jdbcType=VARCHAR},
      </if>
      <if test="createTime != null">
        create_time = #{createTime,jdbcType=TIMESTAMP},
      </if>
    </set>
    where id = #{id,jdbcType=INTEGER}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.jsowell.pile.domain.MemberWalletLog">
    <!--@mbg.generated-->
    update member_wallet_log
    set member_id = #{memberId,jdbcType=VARCHAR},
      `type` = #{type,jdbcType=VARCHAR},
      sub_type = #{subType,jdbcType=VARCHAR},
      amount = #{amount,jdbcType=DECIMAL},
      category = #{category,jdbcType=CHAR},
      related_order_code = #{relatedOrderCode,jdbcType=VARCHAR},
      create_by = #{createBy,jdbcType=VARCHAR},
      create_time = #{createTime,jdbcType=TIMESTAMP}
    where id = #{id,jdbcType=INTEGER}
  </update>

    <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 close=")" collection="list" item="memberId" open="(" separator=",">
                    #{memberId,jdbcType=VARCHAR}
                </foreach>
            </if>
    </select>

  <select id="getOrderRecord" resultMap="BaseResultMap">
      select
      <include refid="Base_Column_List" />
      from member_wallet_log
      where related_order_code = #{orderCode,jdbcType=VARCHAR}
      and type = #{type,jdbcType=VARCHAR}
    </select>
</mapper>