<?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.tkdata.dal.mysql.employeehosts.EmployeeHostsMapper">

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



    <!-- 使用 IGNORE 关键字忽略重复插入 -->
    <sql id="Base_Column_List">
        id,
        hosts_id,
        user_id,
        hosts_level,
        hosts_coins,
        invitation_type,
        online_fans,
        fans,
        fllowernum,
        yesterday_coins,
        country,
        hosts_kind,
        operation_status,
        remake,
        `uid`,
        tenant_id,
        flag,
        create_time,
        update_time,
        creator,
        updater,
        deleted
    </sql>
    <resultMap id="BaseResultMap" type="cn.iocoder.yudao.module.tkdata.dal.dataobject.employeehosts.EmployeeHostsDO">
        <result column="id" property="id"/>
        <result column="hosts_id" property="hostsId"/>
        <result column="user_id" property="userId"/>
        <result column="hosts_level" property="hostsLevel"/>
        <result column="hosts_coins" property="hostsCoins"/>
        <result column="invitation_type" property="invitationType"/>
        <result column="online_fans" property="onlineFans"/>
        <result column="fans" property="fans"/>
        <result column="fllowernum" property="fllowernum"/>
        <result column="yesterday_coins" property="yesterdayCoins"/>
        <result column="country" property="country"/>
        <result column="hosts_kind" property="hostsKind"/>
        <result column="operation_status" property="operationStatus"/>
        <result column="remake" property="remake"/>
        <result column="uid" property="uid"/>
        <result column="tenant_id" property="tenantId"/>
        <result column="flag" property="flag"/>
        <result column="create_time" property="createTime"/>
        <result column="update_time" property="updateTime"/>
        <result column="creator" property="creator"/>
        <result column="updater" property="updater"/>
        <result column="deleted" property="deleted"/>
    </resultMap>
    <insert id="insertIgnore" parameterType="cn.iocoder.yudao.module.tkdata.dal.dataobject.employeehosts.EmployeeHostsDO">
        INSERT IGNORE INTO server_employee_hosts
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="hostsId != null">hosts_id,</if>
            <if test="userId != null">user_id,</if>
            <if test="hostsLevel != null">hosts_level,</if>
            <if test="hostsCoins != null">hosts_coins,</if>
            <if test="invitationType != null">Invitation_type,</if>
            <if test="onlineFans != null">online_fans,</if>
            <if test="fans != null">fans,</if>
            <if test="fllowernum != null">fllowernum,</if>
            <if test="yesterdayCoins != null">yesterday_coins,</if>
            <if test="country != null">country,</if>
            <if test="operationStatus != null">operation_status,</if>
            <if test="hostsKind != null">hosts_kind</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="hostsId != null">#{hostsId},</if>
            <if test="userId != null">#{userId},</if>
            <if test="hostsLevel != null">#{hostsLevel},</if>
            <if test="hostsCoins != null">#{hostsCoins},</if>
            <if test="invitationType != null">#{invitationType},</if>
            <if test="onlineFans != null">#{onlineFans},</if>
            <if test="fans != null">#{fans},</if>
            <if test="fllowernum != null">#{fllowernum},</if>
            <if test="yesterdayCoins != null">#{yesterdayCoins},</if>
            <if test="country != null">#{country},</if>
            <if test="operationStatus != null">#{operationStatus},</if>
            <if test="hostsKind != null">#{hostsKind}</if>
        </trim>
    </insert>

    <!-- 批量插入忽略重复 -->
    <insert id="batchInsertIgnore" parameterType="java.util.List">
        INSERT IGNORE INTO server_employee_hosts
        (hosts_id, user_id, hosts_level, hosts_coins, Invitation_type,
        online_fans, fans, fllowernum, yesterday_coins, country,
        operation_status, hosts_kind)
        VALUES
        <foreach collection="list" item="item" separator=",">
            (#{item.hostsId}, #{item.userId}, #{item.hostsLevel}, #{item.hostsCoins}, #{item.invitationType},
            #{item.onlineFans}, #{item.fans}, #{item.fllowernum}, #{item.yesterdayCoins}, #{item.country},
            #{item.operationStatus}, #{item.hostsKind})
        </foreach>
    </insert>



    <select id="selectPageWithXMLWithSelf" resultType="cn.iocoder.yudao.module.tkdata.dal.dataobject.employeehosts.EmployeeHostsDO">
        select ns.id,hosts_id, hosts_level, hosts_coins, Invitation_type, fans, fllowernum,
        yesterday_coins,ns.create_time, country, online_fans,hosts_kind,remake ,
        operation_status,ns.user_id ,ns.update_time,ns.flag,ns.deleted,ns.country_eng
        from server_employee_hosts ns left join server_country_info ci ON ns.country = ci.country_name
        WHERE tenant_id =#{req.tenantId,jdbcType=BIGINT}
        and ns.user_id =#{req.userId,jdbcType=BIGINT}
        <!--  主播国家筛选    -->
        <if test="req.region!= '' and req.region != null">
            and ci.country_group_name =#{req.region,jdbcType=VARCHAR}
        </if>
        <if test="req.country != '' and req.country !=null ">
            and ns.country = #{req.country}
        </if>
        <if test="req.hostsKind != null">
            and ns.hosts_kind = #{req.hostsKind,jdbcType=INTEGER}
        </if>
        <!--  按照入库时间筛选主播    -->
        <if test="req.createTime != null">
            and DATE(ns.create_time) =#{req.createTime}
        </if>
        <!--  按照更新时间筛选主播    -->
        <if test="req.updateTime != null">
            and DATE(ns.update_time) =#{req.updateTime}
        </if>
        <if test="req.operationStatus != null">
            and operation_status =#{req.operationStatus,jdbcType=INTEGER}
        </if>
        <!--  主播 Id 模糊搜索    -->
        <if test="req.hostsId != '' and req.hostsId != null  ">
            and ns.hosts_id like concat(#{req.hostsId,jdbcType=VARCHAR},'%')
        </if>
        <!--  主播旗帜搜索      -->
        <if test="req.flag != null">
            and ns.flag =#{req.flag}
        </if>
        <!--  主播等级筛选      -->
        <if test="req.hostsLevel != null and req.hostsLevel.size() > 0">
            AND ns.hosts_level IN
            <foreach collection="req.hostsLevel" item="level" open="(" separator="," close=")">
                #{level, jdbcType=VARCHAR}
            </foreach>
        </if>
        and deleted = 0
        <!-- 今日主播金币筛选   -->
        <if test="req.hostsCoinsMin != null  and req.hostsCoinsMax == null and req.hostsCoinsMax != '' ">
            and ns.hosts_coins >=#{req.hostsCoinsMin,jdbcType=INTEGER}
        </if>
        <if test="req.hostsCoinsMax != null  and req.hostsCoinsMin == null and req.hostsCoinsMin !='' ">
            and ns.hosts_coins &lt;=#{req.hostsCoinsMax,jdbcType=INTEGER}
        </if>
        <if test="req.hostsCoinsMin != null and req.hostsCoinsMax != null " >
            and ns.hosts_coins between #{req.hostsCoinsMin,jdbcType=INTEGER} and #{req.hostsCoinsMax,jdbcType=INTEGER}
        </if>
        <!--  昨日主播金币筛选  -->
        <if test="req.yesterdayCoinsMin != null  and req.yesterdayCoinsMax == null and req.yesterdayCoinsMax != ''">
            and ns.yesterday_coins >=#{req.yesterdayCoinsMin,jdbcType=INTEGER}
        </if>
        <if test="req.yesterdayCoinsMax != null  and req.yesterdayCoinsMin == null and req.yesterdayCoinsMin != '' ">
            and ns.yesterday_coins &lt;=#{req.yesterdayCoinsMax,jdbcType=INTEGER}
        </if>
        <if test="req.yesterdayCoinsMin != null and req.yesterdayCoinsMax != null " >
            and ns.yesterday_coins between #{req.yesterdayCoinsMin,jdbcType=INTEGER} and #{req.yesterdayCoinsMax,jdbcType=INTEGER}
        </if>
        <!--    主播粉丝数筛选-->
        <if test="req.fansMin != null  and req.fansMax == null  and req.fansMax != ''">
            and ns.fans >=#{req.fansMin,jdbcType=INTEGER}
        </if>
        <if test="req.fansMax != null  and req.fansMin == null and req.fansMin != '' ">
            and ns.fans &lt;=#{req.fansMax,jdbcType=INTEGER}
        </if>
        <if test="req.fansMin != null and req.fansMax != null " >
            and ns.fans between #{req.fansMin,jdbcType=INTEGER} and #{req.fansMax,jdbcType=INTEGER}
        </if>
        <!--    主播关注筛选-->
        <if test="req.fllowernumMin != null  and req.fllowernumMax == null and req.fllowernumMax != ''">
            and ns.fllowernum >=#{req.fllowernumMin,jdbcType=INTEGER}
        </if>
        <if test="req.fllowernumMax != null  and req.fllowernumMin == null  and req.fllowernumMin != ''">
            and ns.fllowernum &lt;=#{req.fllowernumMax,jdbcType=INTEGER}
        </if>
        <if test="req.fllowernumMin != null and req.fllowernumMax != null " >
            and ns.fllowernum between #{req.fllowernumMin,jdbcType=INTEGER} and #{req.fllowernumMax,jdbcType=INTEGER}
        </if>
        <!--    主播在线人数筛选-->
        <if test="req.onlineFansMin != null  and req.onlineFansMax == null and req.onlineFansMax != '' ">
            and ns.online_fans >=#{req.onlineFansMin,jdbcType=INTEGER}
        </if>
        <if test="req.onlineFansMax != null  and req.onlineFansMin == null  and req.onlineFansMin != ''">
            and ns.online_fans &lt;= #{req.onlineFansMax,jdbcType=INTEGER}
        </if>
        <if test="req.onlineFansMin != null and req.onlineFansMax != null " >
            and ns.online_fans between #{req.onlineFansMin,jdbcType=INTEGER} and #{req.onlineFansMax,jdbcType=INTEGER}
        </if>
        <!--  邀请类筛选 -->
        <if test="req.invitationType != null">
            and ns.Invitation_type =#{req.invitationType,jdbcType=INTEGER}
        </if>
        <!-- 排序类型   -->
        group by
        ns.hosts_id
        order by
        <choose>
            <!-- 传空和默认的情况下按照时间降序排序  -->
            <when test="req.sortName == '' or req.sortName == null">
                ns.create_time  desc,ns.id desc
            </when>
            <!-- sortNmae 有值的情况下排序  -->
            <when test="req.sortName != null and req.sort != null ">
                <if test="req.sortName == 'createTime' and req.sort != null">
                    ns.create_time ${req.sort},ns.id ${req.sort}
                </if>
                <!-- 昨日主播金币条件排序  -->
                <if test="req.sortName == 'yesterdayCoins' and req.sort != null">
                    ns.yesterday_coins ${req.sort},ns.id ${req.sort}
                </if>
                <!-- 主播金币条件排序  -->
                <if test="req.sortName == 'hostsCoins' and req.sort != null">
                    ns.hosts_coins ${req.sort},ns.id ${req.sort}
                </if>
                <!-- 主播粉丝条件排序  -->
                <if test="req.sortName == 'fans' and req.sort != null">
                    ns.fans ${req.sort},ns.id ${req.sort}
                </if>
                <!-- 主播关注数量排序  -->
                <if test="req.sortName == 'fllowernum' and req.sort != null">
                    ns.fllowernum ${req.sort},ns.id ${req.sort}
                </if>
                <!-- 主播直播间在线数量排序  -->
                <if test="req.sortName == 'onlineFans' and req.sort != null">
                    ns.online_fans ${req.sort},ns.id ${req.sort}
                </if>
                <if test="req.sortName == 'updateTime' and req.sort != null">
                    ns.update_time ${req.sort},ns.id ${req.sort}
                </if>
            </when>
            <otherwise>
                ns.create_time desc
            </otherwise>
        </choose>
    </select>

    <select id="selectPageWithXML" resultType="cn.iocoder.yudao.module.tkdata.dal.dataobject.employeehosts.EmployeeHostsDO">
        select ns.id,hosts_id, hosts_level, hosts_coins, Invitation_type, fans, fllowernum,
        yesterday_coins,ns.create_time, country, online_fans,hosts_kind,remake ,operation_status,user_id,uid,ns.update_time,ns.flag,ns.country_eng
        from server_employee_hosts ns left join server_country_info ci ON ns.country = ci.country_name
        WHERE tenant_id = #{req.tenantId,jdbcType=BIGINT}
        <if test="req.isDelete == 1">
            and deleted = 1
        </if>
        <if test="req.isDelete == 0">
            and deleted = 0
        </if>
        <if test="req.isDelete == 3">
            and (deleted = 0
            or deleted = 1)
        </if>
        <!--  筛选员工名下主播 -->
        <if test="req.userId != null ">
            and user_id = #{req.userId,jdbcType=BIGINT}
        </if>
        <!--  主播国家筛选    -->
        <if test="req.region!= '' and req.region != null">
            and ci.country_group_name =#{req.region,jdbcType=VARCHAR}
        </if>
        <!--  主播类型筛选    -->
        <if test="req.hostsKind != null">
            and ns.hosts_kind = #{req.hostsKind,jdbcType=INTEGER}
        </if>
        <if test="req.country != '' and req.country !=null ">
            and ns.country = #{req.country}
        </if>
        <!--  按照入库时间筛选主播    -->
        <if test="req.createTime != null">
            and DATE(ns.create_time) =#{req.createTime}
        </if>

        <!--  按照更新时间筛选主播    -->
        <if test="req.updateTime != null">
            and DATE(ns.update_time) =#{req.updateTime}
        </if>
        <if test="req.operationStatus != null">
            and operation_status = #{req.operationStatus,jdbcType=INTEGER}
        </if>
        <!--  主播 Id 模糊搜索    -->
        <if test="req.hostsId != '' and req.hostsId != null  ">
            and ns.hosts_id like concat(#{req.hostsId,jdbcType=VARCHAR},'%')
        </if>
        <!--  主播旗帜搜索      -->
        <if test="req.flag != null">
            and ns.flag =#{req.flag}
        </if>
        <!--  主播等级筛选    -->
        <if test="req.hostsLevel != null and req.hostsLevel.size() > 0">
            AND ns.hosts_level IN
            <foreach collection="req.hostsLevel" item="level" open="(" separator="," close=")">
                #{level, jdbcType=VARCHAR}
            </foreach>
        </if>
        <!-- 今日主播金币筛选   -->
        <if test="req.hostsCoinsMin != null  and req.hostsCoinsMax == null  ">
            and ns.hosts_coins >=#{req.hostsCoinsMin,jdbcType=INTEGER}
        </if>
        <if test="req.hostsCoinsMax != null  and req.hostsCoinsMin == null ">
            and ns.hosts_coins &lt;=#{req.hostsCoinsMax,jdbcType=INTEGER}
        </if>
        <if test="req.hostsCoinsMin != null and req.hostsCoinsMax != null " >
            and ns.hosts_coins between #{req.hostsCoinsMin,jdbcType=INTEGER} and #{req.hostsCoinsMax,jdbcType=INTEGER}
        </if>
        <!--  昨日主播金币筛选  -->
        <if test="req.yesterdayCoinsMin != null  and req.yesterdayCoinsMax == null ">
            and ns.yesterday_coins >=#{req.yesterdayCoinsMin,jdbcType=INTEGER}
        </if>
        <if test="req.yesterdayCoinsMax != null  and req.yesterdayCoinsMin == null  ">
            and ns.yesterday_coins &lt;=#{req.yesterdayCoinsMax,jdbcType=INTEGER}
        </if>
        <if test="req.yesterdayCoinsMin != null and req.yesterdayCoinsMax != null " >
            and ns.yesterday_coins between #{req.yesterdayCoinsMin,jdbcType=INTEGER} and #{req.yesterdayCoinsMax,jdbcType=INTEGER}
        </if>
        <!--    主播粉丝数筛选-->
        <if test="req.fansMin != null  and req.fansMax == null  ">
            and ns.fans >=#{req.fansMin,jdbcType=INTEGER}
        </if>
        <if test="req.fansMax != null  and req.fansMin == null ">
            and ns.fans &lt;=#{req.fansMax,jdbcType=INTEGER}
        </if>
        <if test="req.fansMin != null and req.fansMax != null " >
            and ns.fans between #{req.fansMin,jdbcType=INTEGER} and #{req.fansMax,jdbcType=INTEGER}
        </if>
        <!--    主播关注筛选-->
        <if test="req.fllowernumMin != null  and req.fllowernumMax == null ">
            and ns.fllowernum >=#{req.fllowernumMin,jdbcType=INTEGER}
        </if>
        <if test="req.fllowernumMax != null  and req.fllowernumMin == null  ">
            and ns.fllowernum &lt;=#{req.fllowernumMax,jdbcType=INTEGER}
        </if>
        <if test="req.fllowernumMin != null and req.fllowernumMax != null " >
            and ns.fllowernum between #{req.fllowernumMin,jdbcType=INTEGER} and #{req.fllowernumMax,jdbcType=INTEGER}
        </if>
        <!--    主播在线人数筛选-->
        <if test="req.onlineFansMin != null  and req.onlineFansMax == null  ">
            and ns.online_fans >=#{req.onlineFansMin,jdbcType=INTEGER}
        </if>
        <if test="req.onlineFansMax != null  and req.onlineFansMin == null  ">
            and ns.online_fans &lt;= #{req.onlineFansMax,jdbcType=INTEGER}
        </if>
        <if test="req.onlineFansMin != null and req.onlineFansMax != null " >
            and ns.online_fans between #{req.onlineFansMin,jdbcType=INTEGER} and #{req.onlineFansMax,jdbcType=INTEGER}
        </if>
        <!--  邀请类筛选 -->
        <if test="req.invitationType != null">
            and ns.Invitation_type =#{req.invitationType,jdbcType=INTEGER}
        </if>
        <!-- 排序类型   -->
        group by
        ns.hosts_id
        order by
        <choose>
            <!-- 传空和默认的情况下按照时间降序排序  -->
            <when test="req.sortName == '' or req.sortName == null">
                ns.create_time  desc,ns.id desc
            </when>
            <!-- sortNmae 有值的情况下排序  -->
            <when test="req.sortName != null and req.sort != null ">
                <if test="req.sortName == 'createTime' and req.sort != null">
                    ns.create_time ${req.sort},ns.id ${req.sort}
                </if>
                <!-- 昨日主播金币条件排序  -->
                <if test="req.sortName == 'yesterdayCoins' and req.sort != null">
                    ns.yesterday_coins ${req.sort},ns.id ${req.sort}
                </if>
                <!-- 主播金币条件排序  -->
                <if test="req.sortName == 'hostsCoins' and req.sort != null">
                    ns.hosts_coins ${req.sort},ns.id ${req.sort}
                </if>
                <!-- 主播粉丝条件排序  -->
                <if test="req.sortName == 'fans' and req.sort != null">
                    ns.fans ${req.sort},ns.id ${req.sort}
                </if>
                <!-- 主播关注数量排序  -->
                <if test="req.sortName == 'fllowernum' and req.sort != null">
                    ns.fllowernum ${req.sort},ns.id ${req.sort}
                </if>
                <!-- 主播直播间在线数量排序  -->
                <if test="req.sortName == 'onlineFans' and req.sort != null">
                    ns.online_fans ${req.sort},ns.id ${req.sort}
                </if>
                <if test="req.sortName == 'updateTime' and req.sort != null">
                    ns.update_time ${req.sort},ns.id ${req.sort}
                </if>
            </when>
            <otherwise>
                ns.create_time desc
            </otherwise>
        </choose>
    </select>

    <update id="batchUpdate">
        <foreach collection="list" item="item" separator=";">
            UPDATE server_employee_hosts as seh
            SET
            user_id = #{item.userId,jdbcType=BIGINT},
            operation_status = #{item.operationStatus,jdbcType=INTEGER}
            WHERE
            seh.id = #{item.id}
        </foreach>
    </update>

    <select id="selectEmployeeHostsWithOperationStatus"
            resultType="cn.iocoder.yudao.module.tkdata.controller.admin.employeehosts.vo.CompletedRateVO">
        SELECT
        user_id          AS userId,
        SUM(CASE WHEN operation_status = 1 THEN 1 ELSE 0 END) AS finishedNum,
        SUM(CASE WHEN operation_status = 0 THEN 1 ELSE 0 END) AS unfinishedNum,
        COUNT(*) AS totalNum
        FROM server_employee_hosts
        WHERE deleted = 0
        <if test="userId != null">
            AND user_id = #{userId}
        </if>
        GROUP BY user_id
    </select>

    <select id="selectEmployeeHostsCompleteBarChart"
            resultType="cn.iocoder.yudao.module.tkdata.controller.admin.employeehosts.vo.CompletedRateVO">
        SELECT
        user_id AS userId,
        COUNT(DISTINCT
        CASE WHEN operation_status = 1 THEN hosts_id END) AS finishedNum
        FROM server_employee_hosts
        WHERE deleted = 0
        AND operation_status = 1
        <!-- 日期范围：今天或过去 7 天（含今天） -->
        AND update_time >= DATE_SUB(CURDATE(), INTERVAL #{days,jdbcType=INTEGER} - 1 DAY)
        <if test="list != null and list.size() > 0">
            AND user_id IN
            <foreach collection="list" item="user_id" open="(" separator="," close=")">
                #{user_id}
            </foreach>
        </if>
        GROUP BY user_id
    </select>
</mapper>