<?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.yudao.module.reward.dal.mysql.redeem.RewardRedeemMapper">

    <!--
        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
     -->

    <select id="pageInfo" resultType="cn.iocoder.yudao.module.reward.vo.reward.RewardRedeemPageRespVO">
        select
        <include refid="columns"/>
        from ecw_reward_redeem err
        left join ecw_reward er on err.reward_id = er.id
        left join member_user mu on mu.id = err.member_id
        left join ecw_node en on er.node_id = en.id
        left join system_user suc on suc.id = er.creator
        left join system_user suu on suu.id = er.updater
        left join ecw_currency cc on err.currency = cc.id
        left join ecw_express ee on err.courier_company = ee.id
        where 1=1
        <include refid="pageCondition"/>
        order by err.create_time desc
        limit #{start}, #{size}
    </select>
    <select id="pageCount" resultType="java.lang.Integer">
        select count(*)
        from ecw_reward_redeem err
        left join ecw_reward er on err.reward_id = er.id
        left join member_user mu on mu.id = err.member_id
        left join ecw_node en on er.node_id = en.id
        left join system_user suc on suc.id = er.creator
        left join system_user suu on suu.id = er.updater
        left join ecw_express ee on err.courier_company = ee.id
        where 1=1
        <include refid="pageCondition"/>
    </select>
    <select id="detail" resultType="cn.iocoder.yudao.module.reward.vo.reward.RewardRedeemPageRespVO">
        select
        mus.hold_score as holdScore,
        er.points_require as pointsRequire,
        er.start_time as startTime,
        er.end_time as endTime,
        er.img_zh as imgZh,
        er.img_en as imgEn,
        er.points_require as oncePointsRequire,
        <include refid="columns"/>
        from ecw_reward_redeem err
        left join ecw_reward er on err.reward_id = er.id
        left join member_user mu on mu.id = err.member_id
        left join member_user_score mus on mu.id = mus.member_id
        left join ecw_node en on er.node_id = en.id
        left join system_user suc on suc.id = er.creator
        left join system_user suu on suu.id = er.updater
        left join ecw_currency cc on err.currency = cc.id
        left join ecw_express ee on err.courier_company = ee.id
        where err.id = #{id}
    </select>
    <select id="exportList" resultType="cn.iocoder.yudao.module.reward.vo.reward.RewardRedeemPageRespVO">
        select
        <include refid="columns"/>
        from ecw_reward_redeem err
        left join ecw_reward er on err.reward_id = er.id
        left join member_user mu on mu.id = err.member_id
        left join ecw_node en on er.node_id = en.id
        left join system_user suc on suc.id = er.creator
        left join system_user suu on suu.id = er.updater
        left join ecw_currency cc on err.currency = cc.id
        left join ecw_express ee on err.courier_company = ee.id
        where 1=1
        <include refid="pageCondition"/>
        order by er.create_time desc
    </select>

    <sql id="columns">
        err.id ,
        err.member_id as memberId,
        err.reward_id as rewardId,
        err.status,
        err.reward_count as rewardCount,
        err.redeem_type as redeemType,
        err.entrance,
        err.expenses,
        err.currency,
        err.recipient_name as recipientName,
        err.recipient_phone_num as recipientPhoneNum,
        err.recipient_address as recipientAddress,
        err.redeemer,
        err.redemption_time as redemptionTime,
        err.courier_company as courierCompany,
        ee.company_name as courierCompanyName,
        err.express_no as expressNo,
        err.express_date as expressDate,
        err.express_sender as expressSender,
        err.annex as annex,
        err.remark as remark,
        err.create_time as createTime,
        err.update_time as updateTime,
        err.creator as creator,
        err.updater as updater,
        err.deleted as deleted,
        err.verify_user as verifyUser,
        err.verify_time as verifyTime,
        mu.nickname as memberNameZh,
        mu.english_name as memberNameEn,
        er.code as rewardCode,
        er.title_zh as rewardTitleZh,
        er.title_en as rewardTitleEn,
        er.title_fr as rewardTitleFr,
        en.title_zh as nodeTitleZh,
        en.title_en as nodeTitleEn,
        err.score_count as totalCount,
        suc.username as creatorName,
        suu.username as updaterName,
        cc.title_zh as currencyTitleZh,
        cc.title_en as currencyTitleEn,
        (select username from system_user where id = er.updater) as updaterName
    </sql>

    <sql id="pageCondition">
        <if test="req.rewardTitle != null and req.rewardTitle !=''">
            and (er.title_zh like '%${req.rewardTitle}%' or er.title_en like '%${req.rewardTitle}%' or er.title_fr like '%${req.rewardTitle}%')
        </if>
        <if test="req.memberName != null and req.memberName !=''">
            and mu.nickname like '%${req.memberName}%'
        </if>
        <if test="req.rewardCode != null and req.rewardCode !=''">
            and er.code like '%${req.rewardCode}%'
        </if>
        <if test="req.redeemType != null">
            and err.redeem_type = #{req.redeemType}
        </if>
        <if test="req.status != null">
            and err.status = #{req.status}
        </if>
        <if test="req.entrance != null">
            and err.entrance = #{req.entrance}
        </if>
        <if test="req.nodeId != null">
            and er.node_id = #{req.nodeId}
        </if>
        <if test="req.rewardCount != null and req.rewardCountOperate != null">
            <!--1:大于 2:等于 3:小于-->
            <if test="req.rewardCountOperate == 1">
                and err.reward_count &gt; #{req.rewardCount}
            </if>
            <if test="req.rewardCountOperate == 2">
                and err.reward_count = #{req.rewardCount}
            </if>
            <if test="req.rewardCountOperate == 3">
                and err.reward_count &lt; #{req.rewardCount}
            </if>
        </if>
        <if test="req.startTime != null ">
            and err.create_time &gt;= #{req.startTime}
        </if>
        <if test="req.endTime != null ">
            and err.create_time &lt;= #{req.endTime}
        </if>
        <if test="req.memberId != null">
            and err.member_id = #{req.memberId}
        </if>
    </sql>
</mapper>