<?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="phone_" property="phone"/>
        <result column="username_" property="username"/>
        <result column="subject_name_" property="subjectName"/>
        <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="organ_name_" property="organName"/>
        <result column="platform_account_no_" property="platformAccountNo"/>
        <result column="group_id_" property="groupId"/>
        <result column="tenant_id_" property="tenantId"/>
    </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 where tenant_id_ = #{tenantId}
        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="groupId!=null">group_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>
            tenant_id_
        </trim>
        VALUES
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id!=null">#{id},</if>
            <if test="groupId!=null">#{groupId},</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>
            #{tenantId}
        </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_,group_id_,tenant_id_)
        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},#{sysUserCashAccountDetail.groupId},#{sysUserCashAccountDetail.tenantId})
        </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} and tenant_id_ = #{tenantId}
    </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>
        	tenant_id_ = #{tenantId}
            <if test="userId != null">
                and 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_ DESC
        <include refid="global.limit"/>
    </select>

    <!-- 查询当前表的总记录数 -->
    <select id="queryCount" resultType="int">
        SELECT COUNT(*) FROM sys_user_cash_account_detail
        <where>
        	tenant_id_ = #{tenantId}
            <if test="userId != null">
                and 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)
            AND FIND_IN_SET(u.organ_id_,#{organId})
    </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>

    <sql id="queryAccountDetailCondition">
        <where>
        	tenant_id_ = #{tenantId}
            <if test="userId!=null">
                and user_id_=#{userId}
            </if>
        </where>
    </sql>
    <select id="queryAccountDetail" resultMap="SysUserCashAccountDetail">
        SELECT * FROM (
            SELECT create_time_,amount_,balance_,status_,type_,description_,comment_ FROM	sys_user_cash_account_detail
            <include refid="queryAccountDetailCondition"/>
            UNION ALL
            SELECT create_time_,amount_,balance_,status_,type_,description_,comment_ FROM sys_user_courses_account_detail
            <include refid="queryAccountDetailCondition"/>
        ) t ORDER BY t.create_time_
        <include refid="global.limit"/>
    </select>
    <select id="countAccountDetails" resultType="int">
        SELECT COUNT(t.id_) FROM (
            SELECT id_,create_time_,amount_,balance_,status_,type_,description_,comment_ FROM	sys_user_cash_account_detail
            <include refid="queryAccountDetailCondition"/>
            UNION ALL
            SELECT id_,create_time_,amount_,balance_,status_,type_,description_,comment_ FROM sys_user_courses_account_detail
            <include refid="queryAccountDetailCondition"/>
        ) t
    </select>
    <select id="exportDetail" resultMap="SysUserCashAccountDetail">
        SELECT o.name_ organ_name_,su.username_,su.phone_,GROUP_CONCAT(sb.name_ ORDER BY sb.name_) subject_name_,cad.* FROM sys_user_cash_account_detail cad
        LEFT JOIN sys_user su ON su.id_ = cad.user_id_
        LEFT JOIN organization o ON o.id_ = su.organ_id_
        LEFT JOIN student s ON s.user_id_ = su.id_
        LEFT JOIN `subject` sb ON FIND_IN_SET(sb.id_,s.subject_id_list_)
        <where>
        	cad.tenant_id_ = #{queryInfo.tenantId}
            <if test="queryInfo.userId != null">
                AND cad.user_id_ = #{queryInfo.userId}
            </if>
            <if test="queryInfo.organId != null">
                AND FIND_IN_SET(su.organ_id_,#{queryInfo.organId})
            </if>
            <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
                AND DATE_FORMAT(cad.create_time_,'%Y-%m-%d') >= #{queryInfo.startTime}
            </if>
            <if test="queryInfo.endTime != null and queryInfo.startTime != ''">
                AND DATE_FORMAT(cad.create_time_,'%Y-%m-%d') &lt;= #{queryInfo.endTime}
            </if>
        </where>
        GROUP BY cad.id_
        ORDER BY cad.user_id_,cad.id_ DESC
    </select>
</mapper>
