<?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.com.ctop.toutiao.modules.report.mapper.BytedanceReportMapper">


    <select id="selectDayReport" resultType="com.alibaba.fastjson.JSONObject">
        select
         sum(charge) cost,
         sum(photo_show) photoShow,
         sum(photo_click) photoClick,
         sum(aclick) aclick,
         max(stat_hour) maxHour
       from
        ctop_kuaishou_report_hourly_account
        where stat_date = #{date}
      </select>


    <select id="selectByDate" resultType="com.alibaba.fastjson.JSONObject">
      select
       sum(charge) cost,
       sum(photo_show) photoShow,
       sum(photo_click) photoClick,
       sum(aclick) aclick
     from
      ctop_kuaishou_report_daily_account
      where stat_date &lt;= #{startDate}
      and  stat_date &gt;= #{endDate}
    </select>

    <select id="selectAllAccount" resultType="com.alibaba.fastjson.JSONObject">
      select
       sum(charge) cost,
       sum(photo_show) photoShow,
       sum(photo_click) photoClick,
       sum(aclick) aclick
     from
      ctop_kuaishou_report_daily_account
    </select>


    <select id="selectReportDetail" resultType="com.alibaba.fastjson.JSONObject">
      select
       sum(charge) cost,
       sum(photo_show) photoShow,
       sum(photo_click) photoClick,
       sum(aclick) aclick,
       stat_hour statHour,
       stat_date statDate
     from
      ctop_kuaishou_report_hourly_account
      where stat_date = #{date}
      group by stat_hour
      order by stat_hour asc
    </select>


    <select id="selectDayHourlyByHourAndDate" resultType="com.alibaba.fastjson.JSONObject">
      select
       sum(charge) cost,
       sum(photo_show) photoShow,
       sum(photo_click) photoClick,
       sum(aclick) aclick
     from
      ctop_kuaishou_report_hourly_account
      where stat_date = #{date}
      and stat_hour = #{statHour}
    </select>

    <select id="selectSumDayHourlyByHourAndDate" resultType="com.alibaba.fastjson.JSONObject">
      select
       sum(charge) cost,
       sum(photo_show) photoShow,
       sum(photo_click) photoClick,
       sum(aclick) aclick
     from
      ctop_kuaishou_report_hourly_account
      where stat_date = #{date}
      and stat_hour &lt;= #{statHour}
    </select>


    <select id="selectDayDetailByDate" resultType="com.alibaba.fastjson.JSONObject">
      select
       sum(charge) cost,
       sum(photo_show) photoShow,
       sum(photo_click) photoClick,
       sum(aclick) aclick,
       stat_date statDate
     from
      ctop_kuaishou_report_daily_account
      where stat_date &lt;= #{startDate}
      and  stat_date &gt;= #{endDate}
      group by stat_date
      order by stat_date asc
    </select>


    <select id="selectDayDetailByMonth" resultType="com.alibaba.fastjson.JSONObject">
      select
       sum(charge) cost,
       sum(photo_show) photoShow,
       sum(photo_click) photoClick,
       sum(aclick) aclick,
       DATE_FORMAT(stat_date,'%Y-%m') statDate
     from
      ctop_kuaishou_report_daily_account
      where stat_date &lt;= #{startDate}
      and  stat_date &gt;= #{endDate}
      group by DATE_FORMAT(stat_date,'%Y-%m')
      order by stat_date asc
    </select>

    <select id="selectAllDayDetailByMonth" resultType="com.alibaba.fastjson.JSONObject">
      select
       sum(charge) cost,
       sum(photo_show) photoShow,
       sum(photo_click) photoClick,
       sum(aclick) aclick,
       DATE_FORMAT(stat_date,'%Y-%m') statDate
     from
      ctop_kuaishou_report_daily_account
      group by DATE_FORMAT(stat_date,'%Y-%m')
      order by stat_date asc
    </select>


    <select id="selectMonthReportByDate" resultType="com.alibaba.fastjson.JSONObject">
      select
       sum(charge) cost,
       sum(photo_show) photoShow,
       sum(photo_click) photoClick,
       sum(aclick) aclick,
       DATE_FORMAT(stat_date,'%Y-%m') statDate
     from
      ctop_kuaishou_report_daily_account
      where DATE_FORMAT(stat_date,'%Y-%m') = #{date}
    </select>


    <select id="selectDayDetailsByMonth" resultType="com.alibaba.fastjson.JSONObject">
      select
       sum(charge) cost,
       sum(photo_show) photoShow,
       sum(photo_click) photoClick,
       sum(aclick) aclick,
       stat_date statDate
     from
      ctop_kuaishou_report_daily_account
      where DATE_FORMAT(stat_date,'%Y-%m') = #{date}
      group by stat_date
      order by stat_date asc
    </select>


    <select id="selectDayDailyByDate" resultType="com.alibaba.fastjson.JSONObject">
      select
       sum(charge) cost,
       sum(photo_show) photoShow,
       sum(photo_click) photoClick,
       sum(aclick) aclick,
       stat_date statDate
     from
      ctop_kuaishou_report_daily_account
      where stat_date = #{statDate}
      group by stat_date
    </select>


    <select id="selectDayReportByDate" resultType="com.alibaba.fastjson.JSONObject">
      select
       sum(charge) cost,
       sum(photo_show) photoShow,
       sum(photo_click) photoClick,
       sum(aclick) aclick,
       stat_date statDate
     from
      ctop_kuaishou_report_daily_account
      where stat_date = #{date}
      group by stat_date
    </select>


    <select id="selectHourlyDetailsByDate" resultType="com.alibaba.fastjson.JSONObject">
      select
       sum(charge) cost,
       sum(photo_show) photoShow,
       sum(photo_click) photoClick,
       sum(aclick) aclick,
       stat_hour statHour,
       stat_date statDate
     from
      ctop_kuaishou_report_hourly_account
      where stat_date = #{date}
      group by stat_hour
      order by stat_hour asc
    </select>





    <select id="videoInfoListWeek" resultType="cn.com.ctop.toutiao.modules.report.entity.ByteDanceVideoReportDaily">
        select
        --  a.material_id as materialId,
        --         a.account_id as accountId,
        --         b.auth_name as authName,
        a.project_id                             as projectId,
        a.project_name                           as projectName,
        a.advertiser_id                          as advertiserId,
        a.advertiser_name                        as advertiserName,
        a.stat_datetime                          as statDatetime,
        sum(a.cost)                              as cost,                           -- 消耗
        a.signature                              as signature,
        a.video_url                              as videoUrl,
        '-'                                      as materialDesc,
        (select info.url from ctop_material_info info where info.code = a.signature limit 1)                                    as url,
        1                                        as appType,
        sum(a.click)                             as clickMaterial,                  -- 点击数

        case
        when sum(a.total_play) != 0
        then sum(a.play25_feed_break) / sum(a.total_play)
        else 0 end                           as play25FeedBreakRate,            -- 25%进度播放率

        case
        when sum(a.total_play) != 0
        then sum(a.play_over) / sum(a.total_play)
        else 0 end                           as playOverRate,                   -- 整体完播率

        case
        when sum(a.click) != 0
        then sum(a.convert_material) / sum(a.click)
        else 0 end                           as convertRate,                    -- 转化率  转化数/点击数*100% !
        sum(a.active)                            as active,                         -- 应用下载-激活
        sum(a.download_finish)                   as downloadFinish,                 -- 应用下载-安卓下载完成
        sum(a.download_start)                    as downloadStart,                  -- 应用下载-安卓下载开始
        sum(a.install_finish)                    as installFinish,                  -- 应用下载-安卓安装完成
        sum(a.register)                          as register,                       -- 应用下载-注册
        sum(a.pay_count)                         as payCount,                       -- 应用下载-付费数
        sum(a.form)                              as form,                           --  表单提交数
        sum(a.total_play)                        as totalPlay,                      -- 视频-总播放
        sum(a.valid_play)                        as validPlay,                      -- 视频-有效播放
        sum(a.wifi_play)                         as wifiPlay,                       -- 视频-wifi播放
        sum(a.play25_feed_break)                 as play25FeedBreak,                -- 视频-播放25%进度总数
        sum(a.play50_feed_break)                 as play50FeedBreak,                -- 视频-播放50%进度总数
        sum(a.play75_feed_break)                 as play75FeedBreak,                -- 视频-播放75%进度总数
        sum(a.play100_feed_break)                as play100FeedBreak,               -- 视频-播放100%进度总数
        sum(a.share_material)                    as shareMaterial,                  -- 互动数据-分享数
        sum(a.follow)                            as follow,                         -- 互动数据-新增关注数
        sum(a.next_day_open)                     as nextDayOpen,                    -- 次留数
        case
        when sum(a.active) != 0
        then sum(a.next_day_open) / sum(a.active)
        else 0 end                           as nextDayOpenRate,                -- 次留率 = 次留数/激活数

        case
        when sum(a.next_day_open) != 0
        then sum(a.cost) / sum(a.next_day_open)
        else 0 end                           as nextDayOpenCost,                -- 次留成本 = 消耗/次留数

        sum(a.active_pay_amount)                 as activePayAmount,                -- 应用下载广告数据-付费次数

        case
        when sum(a.valid_play) != 0
        then sum(a.cost) / sum(a.valid_play)
        else 0 end                              validPlayCost,                  -- 视频数据-有效播放成本  计算公式：总花费/有效播放数，当天数据可能会有波动，次日早8点后稳定。
        sum(a.convert_material)                  as convertMaterial,                -- 转化数据-转化数

        case
        when sum(a.active_pay_amount) != 0
        then sum(a.cost) / sum(a.active_pay_amount)
        else 0 end                           as activePayCost,                  -- 应用下载广告数据-付费成本 = 消耗/付费次数

        case
        when sum(a.click) != 0
        then sum(a.cost) / sum(a.click)
        else 0 end                           as cpc,                            -- 平均点击单价
        sum(a.play_over_rate)                    as playOverRate,                   -- 视频数据-播完率

        case
        when sum(a.show_material) != 0
        then sum(a.click) / sum(a.show_material)
        else 0 end                           as ctr,                            -- 展现数据-点击率   广告被点击的次数占展示次数的百分比。计算方法：点击数/展示数*100%

        case
        when sum(a.show_material) != 0
        then sum(a.cost) / sum(a.show_material) * 1000
        else 0 end                              cpm,                            -- 平均千次展现费用  广告平均每一千次展现所付出的费用，计算公式是：总花费/展示数*1000。
        sum(a.wifi_play_rate)                    as wifiPlayRate,                   -- 视频数据-WiFi播放占比
        sum(a.like_material)                     as likeMaterial,                   -- 互动数据-点赞数


        case
        when sum(a.active) != 0
        then sum(a.cost) / sum(a.active)
        else 0 end                              activeCost,                     -- 应用下载广告数据-激活成本  计算方式：总花费/激活数。

        case
        when sum(a.game_addiction) != 0
        then sum(a.cost) / sum(a.game_addiction)
        else 0 end                           as gameAddictionCost,              -- 应用下载广告数据-关键行为成本  广告主为每个有APP内关键行为的用户所付出的成本，计算公式是总花费/关键行为数。当天数据可能会有波动，次日早8点后稳定。
        sum(a.game_addiction)                    as gameAddiction,                  -- 应用下载广告数据-关键行为数

        case
        when sum(a.click) != 0
        then sum(a.active) / sum(a.click)
        else 0 end                           as activeRate,                     -- 应用下载广告数据-激活率   计算方式：激活数/点击数*100%


        case
        when sum(a.active) != 0
        then sum(a.game_addiction) / sum(a.active)
        else 0 end                            as  gameAddictionRate,              -- 应用下载广告数据-关键行为率  关键行为用户占激活用户的比例

        case
        when sum(a.active) != 0
        then sum(a.register) / sum(a.active)
        else 0 end                           as activeRegisterRate,             -- 应用下载广告数据-注册率   注册用户占激活用户的比例


        case
        when sum(a.download_finish) != 0
        then sum(a.cost) / sum(a.download_finish)
        else 0 end                           as downloadFinishCost,             -- 应用下载广告数据-安卓下载完成成本 计算方式：总花费/安卓下载完成数。


        case
        when sum(a.register) != 0
        then sum(a.cost) / sum(a.register)
        else 0 end                           as activeRegisterCost,             -- 应用下载广告数据-注册成本  总花费/注册数，当天数据可能会有波动，次日早8点后稳定。
        sum(a.show_material)                     as showMaterial,                   -- 展现数据-展示数


        case
        when sum(a.download_start) != 0
        then sum(a.download_finish) / sum(a.download_start)
        else 0 end                           as downloadFinishRate,             -- 应用下载广告数据-安卓下载完成率  计算方式：安卓下载完成数/安卓下载开始数

        case
        when sum(a.download_finish) != 0
        then sum(a.install_finish) / sum(a.download_finish)
        else 0 end                           as installFinishRate,              -- 应用下载广告数据-安卓安装完成率  计算方式：安卓安装完成数/安卓下载完成数
        sum(a.play_over)                         as playOver,                       -- 完播数

        case
        when sum(a.download_start) != 0
        then sum(a.cost) / sum(a.download_start)
        else 0 end                           as downloadStartCost,              -- 应用下载广告数据-安卓下载开始成本  计算方法：总花费/安卓下载开始数。

        case
        when sum(a.show_material) != 0
        then sum(a.valid_play) / sum(a.show_material)
        else 0 end                           as validPlayRate,                  -- 视频数据-有效播放率  有效播放数/展示数
        case
        when sum(a.valid_play) != 0
        then sum(a.average_play_time_per_play*a.valid_play)/sum(a.valid_play)
        else 0 end as averagePlayTimePerPlay,         -- 视频数据-平均单次播放时长
        case
        when sum(a.convert_material) != 0
        then sum(a.cost) / sum(a.convert_material)
        else 0 end                           as convertCost,                    --  转化数据-转化成本=总花费/转化数

        case
        when sum(a.install_finish) != 0
        then sum(a.cost) / sum(a.install_finish)
        else 0 end                           as installFinishCost,              --  应用下载广告数据-安卓安装完成成本  计算方式：总花费/安卓安装完成数

        case
        when sum(a.click) != 0
        then sum(a.download_start) / sum(a.click)
        else 0 end                           as downloadStartRate               --  应用下载广告数据-安卓下载开始率  计算方法：安卓下载开始数/点击数

        from ctop_bytedance_video_report_daily a
        left join (select material_id,clip_id,shot_id,plan_id,plane_id from ctop_material_ascription group by material_id) f on a.signature = f.material_id
        where stat_datetime &gt;= #{startDate}
        and stat_datetime &lt;= #{endDate}

        <if test=" role != 'admin' ">
            and a.company_id = #{companyId}
        </if>

        and f.material_id is not null

        <choose>   <!-- 编导、剪辑、拍摄、平面只能查看自己本职工作制作的视频，设计组长和管理员能查看所有的-->
            <when test="role == 'plan'">
                and f.plan = #{userId}
            </when>
            <when test="role == 'clip'">
                and f.clip = #{userId}
            </when>
            <when test="role == 'shot' ">
                and f.shot = #{userId}
            </when>
            <when test="role == 'plane'  or role == 'planeLeader' ">
                and f.plan = #{userId}
            </when>
            <when test="role == 'admin' or role == 'designTeamLeader'">
                and 1=1
            </when>
            <otherwise>F
                and a.id = 0
            </otherwise>
        </choose>

        <if test="signature != null and signature != '' ">
            and a.signature = #{signature}
        </if>

        group by a.signature
        <if test="cost != null">
            having sum(a.cost) &gt;= #{cost}
        </if>
        order by sum(a.cost)
    </select>


</mapper>
