<?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.ym.mec.biz.dal.dao.SysUserCashAccountDetailDao">

    <resultMap type="com.ym.mec.biz.dal.entity.SysUserCashAccountDetail" id="SysUserCashAccountDetail">
        <result column="id_" property="id"/>
        <result column="user_id_" property="userId"/>
        <result column="trans_no_" property="transNo"/>
        <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
        <result column="trans_type_" property="transType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
        <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
        <result column="amount_" property="amount"/>
        <result column="com_amount_" property="comAmount"/>
        <result column="per_amount_" property="perAmount"/>
        <result column="balance_" property="balance"/>
        <result column="description_" property="description"/>
        <result column="comment_" property="comment"/>
        <result column="create_time_" property="createTime"/>
        <result column="update_time_" property="updateTime"/>
        <result column="attribute1_" property="attribute"/>
        <result column="channel_" property="channel"/>
        <result column="platform_account_no_" property="platformAccountNo"/>
    </resultMap>

    <!-- 根据主键查询一条记录 -->
    <select id="get" resultMap="SysUserCashAccountDetail">
        SELECT * FROM sys_user_cash_account_detail WHERE id_ = #{id}
    </select>

    <!-- 全查询 -->
    <select id="findAll" resultMap="SysUserCashAccountDetail">
        SELECT *
        FROM sys_user_cash_account_detail
        ORDER BY id_
    </select>

    <!-- 向数据库增加一条记录 -->
    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysUserCashAccountDetail" useGeneratedKeys="true"
            keyColumn="id" keyProperty="id">
        INSERT INTO sys_user_cash_account_detail
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id!=null">id_,</if>
            <if test="userId!=null">user_id_,</if>
            <if test="transNo!=null">trans_no_,</if>
            <if test="type!=null">type_,</if>
            <if test="transType!=null">trans_type_,</if>
            <if test="status!=null">status_,</if>
            <if test="amount!=null">amount_,</if>
            <if test="comAmount!=null">com_amount_,</if>
            <if test="perAmount!=null">per_amount_,</if>
            <if test="balance!=null">balance_,</if>
            <if test="description!=null">description_,</if>
            <if test="comment!=null">comment_,</if>
            create_time_,
            update_time_,
            <if test="attribute!=null">attribute1_,</if>
            <if test="channel!=null">channel_,</if>
            <if test="platformAccountNo!=null">platform_account_no_,</if>
        </trim>
        VALUES
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id!=null">#{id},</if>
            <if test="userId!=null">#{userId},</if>
            <if test="transNo!=null">#{transNo},</if>
            <if test="type!=null">#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},</if>
            <if test="transType!=null">#{transType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},</if>
            <if test="status!=null">#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},</if>
            <if test="amount!=null">#{amount},</if>
            <if test="comAmount!=null">#{comAmount},</if>
            <if test="perAmount!=null">#{perAmount},</if>
            <if test="balance!=null">#{balance},</if>
            <if test="description!=null">#{description},</if>
            <if test="comment!=null">#{comment},</if>
            NOW(),
            NOW(),
            <if test="attribute!=null">#{attribute},</if>
            <if test="channel!=null">#{channel},</if>
            <if test="platformAccountNo!=null">#{platformAccountNo},</if>
        </trim>
    </insert>

    <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.SysUserCashAccountDetail" useGeneratedKeys="true"
            keyColumn="id" keyProperty="id">
        INSERT INTO sys_user_cash_account_detail
        (user_id_,trans_no_,type_,trans_type_,status_,amount_,balance_,description_,comment_,create_time_,update_time_,attribute1_,channel_,platform_account_no_)
        VALUE
        <foreach collection="sysUserCashAccountDetails" item="sysUserCashAccountDetail" separator=",">
            (#{sysUserCashAccountDetail.userId},#{sysUserCashAccountDetail.transNo},#{sysUserCashAccountDetail.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{sysUserCashAccountDetail.transType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{sysUserCashAccountDetail.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{sysUserCashAccountDetail.amount},#{sysUserCashAccountDetail.balance},#{sysUserCashAccountDetail.description},#{sysUserCashAccountDetail.comment},now(),now(),#{sysUserCashAccountDetail.attribute},#{sysUserCashAccountDetail.channel},#{sysUserCashAccountDetail.platformAccountNo})
        </foreach>
    </insert>

    <!-- 根据主键查询一条记录 -->
    <update id="update" parameterType="com.ym.mec.biz.dal.entity.SysUserCashAccountDetail">
        UPDATE sys_user_cash_account_detail
        <set>
            <if test="status != null">
                status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
            </if>
            <if test="userId != null">
                user_id_ = #{userId},
            </if>
            <if test="balance != null">
                balance_ = #{balance},
            </if>
            <if test="comment != null">
                comment_ = #{comment},
            </if>
                update_time_ = NOW(),
            <if test="amount != null">
                amount_ = #{amount},
            </if>
            <if test="comAmount != null">
                com_amount_ = #{comAmount},
            </if>
            <if test="perAmount != null">
                per_amount_ = #{perAmount},
            </if>
            <if test="description != null">
                description_ = #{description},
            </if>
            <if test="transNo != null">
                trans_no_ = #{transNo},
            </if>
            <if test="type != null">
                type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
            </if>
            <if test="transType != null">
                trans_type_ = #{transType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
            </if>
            <if test="attribute != null">
                attribute1_ = #{attribute},
            </if>
            <if test="channel != null">
                channel_ = #{channel},
            </if>
            <if test="platformAccountNo != null">
                platform_account_no_ = #{platformAccountNo},
            </if>
        </set>
        WHERE id_ = #{id}
    </update>

    <!-- 根据主键删除一条记录 -->
    <delete id="delete">
        DELETE FROM sys_user_cash_account_detail WHERE id_ = #{id}
    </delete>

    <!-- 分页查询 -->
    <select id="queryPage" resultMap="SysUserCashAccountDetail" parameterType="map">
        SELECT * FROM sys_user_cash_account_detail
        <where>
            <if test="userId != null">
                user_id_ = #{userId}
            </if>
            <if test="search != null and search != ''">
                AND create_time_ LIKE CONCAT(#{search},'%')
            </if>
            <if test="channel != null ">
                AND channel_ NOT IN (#{channel}) OR channel_ IS NULL
            </if>
        </where>
        ORDER BY id_
        <include refid="global.limit"/>
    </select>

    <!-- 查询当前表的总记录数 -->
    <select id="queryCount" resultType="int">
        SELECT COUNT(*) FROM sys_user_cash_account_detail
        <where>
            <if test="userId != null">
                user_id_ = #{userId}
            </if>
            <if test="search != null and search != ''">
                AND create_time_ LIKE CONCAT(#{search},'%')
            </if>
            <if test="channel != null ">
                AND channel_ NOT IN (#{channel}) OR channel_ IS NULL
            </if>
        </where>
    </select>

    <select id="selectDetailByTransNo" resultMap="SysUserCashAccountDetail">
        SELECT * FROM sys_user_cash_account_detail WHERE trans_no_ = #{transNo}
    </select>

    <select id="queryStatisticsWithCurrentMonth" resultType="map">
        select sum(case when sucad.type_ = 'RECHARGE' then 1 else 0 end) income_num_,sum(case when sucad.type_ =
        'RECHARGE' then sucad.amount_ else 0 end) income_total_,sum(case when (sucad.type_ = 'WITHDRAW' or sucad.type_ =
        'REWARDS' or sucad.type_ = 'WAGE') then 1 else 0 end) expend_num_,sum(case when (sucad.type_ = 'WITHDRAW' or
        sucad.type_ = 'REWARDS' or sucad.type_ = 'WAGE') then sucad.amount_ else 0 end) expend_total_ from
        sys_user_cash_account_detail sucad
        left join sys_user u on sucad.user_id_ = u.id_
        where sucad.status_ = 'SUCCESS' and DATE_FORMAT(sucad.create_time_, '%Y%m' ) = DATE_FORMAT( CURDATE() , '%Y%m' ) and u.organ_id_ not in (36,38)
        <if test="organId != null">
            AND FIND_IN_SET(u.organ_id_,#{organId})
        </if>
    </select>
    <select id="countByTypeAndTime" resultType="java.lang.Integer">
      SELECT COUNT(s.id_) FROM sys_user_cash_account_detail s
      WHERE s.type_ = 'REWARDS' AND DATE_FORMAT(s.create_time_,'%Y-%m') = #{currentMonth}
      AND s.user_id_ = #{teacherId} AND s.description_ = #{activeId}
    </select>
</mapper>
