Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/test' into test

# Conflicts:
#	module-report/src/main/java/cn/com/ctop/bytedance/service/impl/ReportServiceImpl.java
syh 5 rokov pred
rodič
commit
da8e99248f

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouAppListJob.java

@@ -24,7 +24,7 @@ public class KuaishouAppListJob implements Job {
     @Autowired
     private CtopOauthTokenMapper oauthTokenMapper;
 
-    static ExecutorService executorService = Executors.newFixedThreadPool(3);
+    static ExecutorService executorService = Executors.newFixedThreadPool(2);
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

+ 171 - 1
module-report/src/main/java/cn/com/ctop/bytedance/controller/KuaiShouYiCheReportController.java

@@ -33,6 +33,15 @@ public class KuaiShouYiCheReportController {
     }
 
 
+    @PostMapping("dailyReport")
+    public Result<JSONObject> dailyReport(@RequestBody JSONObject requestJson) {
+        Result<JSONObject> result = new Result<>();
+        JSONObject hourReport = yiCheReportService.getDailyReport(requestJson);
+        result.setResult(hourReport);
+        return result;
+    }
+
+
     /**
      * 导出报表
      *
@@ -40,7 +49,7 @@ public class KuaiShouYiCheReportController {
      */
     @RequestMapping(value = "/exportHourReport")
     @ResponseBody
-    public void export(HttpServletRequest request, HttpServletResponse response, @RequestBody JSONObject requestJson) throws Exception {
+    public void exportHourReport(HttpServletRequest request, HttpServletResponse response, @RequestBody JSONObject requestJson) throws Exception {
 
         JSONObject hourReport = yiCheReportService.getHourReport(requestJson);
         JSONArray androidArr = hourReport.getJSONArray("android");
@@ -94,6 +103,167 @@ public class KuaiShouYiCheReportController {
         os.close();
     }
 
+
+    @RequestMapping(value = "/exportDailyReport")
+    @ResponseBody
+    public void exportDailyReport(HttpServletRequest request, HttpServletResponse response, @RequestBody JSONObject requestJson) throws Exception {
+        JSONObject dailyReport = yiCheReportService.getDailyReport(requestJson);
+        JSONObject androidJson = dailyReport.getJSONObject("android");
+
+        // 安卓相关
+        List<List<Object>> androidList = new ArrayList<>();
+        if (!Check.isNull(androidJson)) {
+            List<Object> android = new ArrayList();
+            android.add(androidJson.getString("agent"));
+            android.add(androidJson.getString("media"));
+            android.add(androidJson.getString("systemType"));
+            android.add(androidJson.getString("statDate"));
+            android.add(androidJson.getBigDecimal("charge"));
+            android.add(androidJson.getBigDecimal("cashCost"));
+            android.add(androidJson.getLong("photoShow"));
+            android.add(androidJson.getLong("photoClick"));
+            android.add(androidJson.getString("clickRate"));
+            android.add(androidJson.getString("impression1kCost"));
+            android.add(androidJson.getLong("bclick"));
+            android.add(androidJson.getString("eventJinJianApp"));
+            android.add(androidJson.getLong("activation"));
+            android.add(androidJson.getLong("youMengactivation"));
+            android.add(androidJson.getLong("tdActivation"));
+            android.add(androidJson.getBigDecimal("activationCost"));
+            android.add(androidJson.getBigDecimal("youMengactivationCost"));
+            android.add(androidJson.getBigDecimal("tdActivationCost"));
+            android.add(androidJson.getBigDecimal("actionCost"));
+            android.add(androidJson.getBigDecimal("clickCost"));
+            android.add(androidJson.getString("actionRatio"));
+            android.add(androidJson.getString("eventJinJianAppRatio"));
+            android.add(androidJson.getString("activationRatio"));
+            androidList.add(android);
+
+        }
+
+
+        JSONObject iosJson = dailyReport.getJSONObject("ios");
+
+        // 安卓相关
+        List<List<Object>> iosList = new ArrayList<>();
+        if (!Check.isNull(iosJson)) {
+            List<Object> ios = new ArrayList();
+            ios.add(iosJson.getString("agent"));
+            ios.add(iosJson.getString("media"));
+            ios.add(iosJson.getString("systemType"));
+            ios.add(iosJson.getString("statDate"));
+            ios.add(iosJson.getBigDecimal("charge"));
+            ios.add(iosJson.getBigDecimal("cashCost"));
+            ios.add(iosJson.getLong("photoShow"));
+            ios.add(iosJson.getLong("photoClick"));
+            ios.add(iosJson.getString("clickRate"));
+            ios.add(iosJson.getString("impression1kCost"));
+            ios.add(iosJson.getLong("bclick"));
+            ios.add(iosJson.getString("eventJinJianApp"));
+            ios.add(iosJson.getLong("activation"));
+            ios.add(iosJson.getLong("youMengactivation"));
+            ios.add(iosJson.getLong("tdActivation"));
+            ios.add(iosJson.getBigDecimal("activationCost"));
+            ios.add(iosJson.getBigDecimal("youMengactivationCost"));
+            ios.add(iosJson.getBigDecimal("tdActivationCost"));
+            ios.add(iosJson.getBigDecimal("actionCost"));
+            ios.add(iosJson.getBigDecimal("clickCost"));
+            ios.add(iosJson.getString("actionRatio"));
+            ios.add(iosJson.getString("eventJinJianAppRatio"));
+            ios.add(iosJson.getString("activationRatio"));
+            iosList.add(ios);
+        }
+
+
+        // 应用直达
+        JSONObject directApplicationJson = dailyReport.getJSONObject("directApplication");
+        List<List<Object>> directApplicationList = new ArrayList<>();
+        if (!Check.isNull(directApplicationJson)) {
+            List<Object> directApplication = new ArrayList();
+            directApplication.add(directApplicationJson.getString("agent"));
+            directApplication.add(directApplicationJson.getString("media"));
+            directApplication.add(directApplicationJson.getString("systemType"));
+            directApplication.add(directApplicationJson.getString("statDate"));
+            directApplication.add(directApplicationJson.getBigDecimal("charge"));
+            directApplication.add(directApplicationJson.getBigDecimal("cashCost"));
+            directApplication.add(directApplicationJson.getLong("photoShow"));
+            directApplication.add(directApplicationJson.getLong("photoClick"));
+            directApplication.add(directApplicationJson.getString("clickRate"));
+            directApplication.add(directApplicationJson.getString("impression1kCost"));
+            directApplication.add(directApplicationJson.getLong("bclick"));
+            directApplication.add(directApplicationJson.getString("eventJinJianApp"));
+            directApplication.add(directApplicationJson.getLong("activation"));
+            directApplication.add(directApplicationJson.getLong("youMengactivation"));
+            directApplication.add(directApplicationJson.getLong("tdActivation"));
+            directApplication.add(directApplicationJson.getBigDecimal("activationCost"));
+            directApplication.add(directApplicationJson.getBigDecimal("youMengactivationCost"));
+            directApplication.add(directApplicationJson.getBigDecimal("tdActivationCost"));
+            directApplication.add(directApplicationJson.getBigDecimal("actionCost"));
+            directApplication.add(directApplicationJson.getBigDecimal("clickCost"));
+            directApplication.add(directApplicationJson.getString("actionRatio"));
+            directApplication.add(directApplicationJson.getString("eventJinJianAppRatio"));
+            directApplication.add(directApplicationJson.getString("activationRatio"));
+            directApplicationList.add(directApplication);
+        }
+
+
+        // 应用直达
+        JSONArray channelSubcontractingArr = dailyReport.getJSONArray("channelSubcontracting");
+        List<List<Object>> channelSubcontractingList = new ArrayList<>();
+        if (!Check.isNull(channelSubcontractingArr)) {
+            for (int i = 0; i < channelSubcontractingArr.size(); i++) {
+                JSONObject channelSubcontractingJson = channelSubcontractingArr.getJSONObject(i);
+                List<Object> channelSubcontracting = new ArrayList();
+                channelSubcontracting.add(channelSubcontractingJson.getString("agent"));
+                channelSubcontracting.add(channelSubcontractingJson.getString("media"));
+                channelSubcontracting.add(channelSubcontractingJson.getString("systemType"));
+                channelSubcontracting.add(channelSubcontractingJson.getString("statDate"));
+                channelSubcontracting.add(channelSubcontractingJson.getString("campaignName"));
+                channelSubcontracting.add(channelSubcontractingJson.getBigDecimal("charge"));
+                channelSubcontracting.add(channelSubcontractingJson.getBigDecimal("cashCost"));
+                channelSubcontracting.add(channelSubcontractingJson.getLong("photoShow"));
+                channelSubcontracting.add(channelSubcontractingJson.getLong("photoClick"));
+                channelSubcontracting.add(channelSubcontractingJson.getString("clickRate"));
+                channelSubcontracting.add(channelSubcontractingJson.getString("impression1kCost"));
+                channelSubcontracting.add(channelSubcontractingJson.getLong("bclick"));
+                channelSubcontracting.add(channelSubcontractingJson.getString("eventJinJianApp"));
+                channelSubcontracting.add(channelSubcontractingJson.getLong("activation"));
+                channelSubcontracting.add(channelSubcontractingJson.getLong("youMengactivation"));
+                channelSubcontracting.add(channelSubcontractingJson.getLong("tdActivation"));
+                channelSubcontracting.add(channelSubcontractingJson.getBigDecimal("activationCost"));
+                channelSubcontracting.add(channelSubcontractingJson.getBigDecimal("youMengactivationCost"));
+                channelSubcontracting.add(channelSubcontractingJson.getBigDecimal("tdActivationCost"));
+                channelSubcontracting.add(channelSubcontractingJson.getBigDecimal("actionCost"));
+                channelSubcontracting.add(channelSubcontractingJson.getBigDecimal("clickCost"));
+                channelSubcontracting.add(channelSubcontractingJson.getString("actionRatio"));
+                channelSubcontracting.add(channelSubcontractingJson.getString("eventJinJianAppRatio"));
+                channelSubcontracting.add(channelSubcontractingJson.getString("activationRatio"));
+                channelSubcontractingList.add(channelSubcontracting);
+            }
+
+        }
+
+        String[] iosHeaders = {"代理商", "媒体", "设备", "日期", "账面花费", "现金花费", "曝光", "点击", "点击率", "千次曝光花费", "行为量", "下载完成数", "账户激活量", "友盟激活量", "TD激活量", "账户激活成本", "友盟激活成本", "TD激活成本", "平均行为单价", "平均点击单价", "行为率", "下载完成行为率", "下载完成激活率"};
+        String[] androidHeaders = {"代理商", "媒体", "设备", "日期", "账面花费", "现金花费", "曝光", "点击", "点击率", "千次曝光花费", "行为量", "下载完成数", "账户激活量", "友盟激活量", "TD激活量", "账户激活成本", "友盟激活成本", "TD激活成本", "平均行为单价", "平均点击单价", "行为率", "下载完成行为率", "下载完成激活率"};
+        String[] directApplicationHeaders = {"代理商", "媒体", "设备", "日期", "账面花费", "现金花费", "曝光", "点击", "点击率", "千次曝光花费", "行为量", "下载完成数", "账户激活量", "友盟激活量", "TD激活量", "账户激活成本", "友盟激活成本", "TD激活成本", "平均行为单价", "平均点击单价", "行为率", "下载完成行为率", "下载完成激活率"};
+        String[] channelSubcontractingHeaders = {"代理商", "媒体", "设备", "日期", "渠道包", "账面花费", "现金花费", "曝光", "点击", "点击率", "千次曝光花费", "行为量", "下载完成数", "账户激活量", "友盟激活量", "TD激活量", "账户激活成本", "友盟激活成本", "TD激活成本", "平均行为单价", "平均点击单价", "行为率", "下载完成行为率", "下载完成激活率"};
+
+        OutputStream os = response.getOutputStream();
+        ExportExcelUtils eeu = new ExportExcelUtils();
+        XSSFWorkbook workbook = new XSSFWorkbook();
+        eeu.exportExcel(workbook, 0, "安卓汇总", androidHeaders, androidList);
+        eeu.exportExcel(workbook, 1, "ios汇总", iosHeaders, iosList);
+        eeu.exportExcel(workbook, 2, "应用直达", directApplicationHeaders, directApplicationList);
+        eeu.exportExcel(workbook, 3, "渠道包分包", channelSubcontractingHeaders, channelSubcontractingList);
+
+
+        this.setResponseHeader(response, "易车日报.xls");
+        workbook.write(os);
+        os.flush();
+        os.close();
+    }
+
+
     //发送响应流方法
     public void setResponseHeader(HttpServletResponse response, String fileName) {
         try {

+ 6 - 0
module-report/src/main/java/cn/com/ctop/bytedance/mapper/KuaiShouYiCheReportMapper.java

@@ -12,4 +12,10 @@ public interface KuaiShouYiCheReportMapper {
     List<JSONObject> selectReportByMap(Map<String, Object> requestMap);
 
     JSONObject selectSumReportByMap(Map<String, Object> requestMap);
+
+    JSONObject getDailyReportByMap(Map<String, Object> requestMap);
+
+    JSONObject getDirectApplicationReportByMap(Map<String, Object> requestMap);
+
+    List<JSONObject> getChannelSubcontractingReportByMap(Map<String, Object> requestMap);
 }

+ 519 - 1
module-report/src/main/java/cn/com/ctop/bytedance/mapper/xml/KuaiShouYiCheReportMapper.xml

@@ -13,7 +13,6 @@
     AND t2.stat_date = #{statDate}
     </select>
 
-
     <select id="selectReportByMap" parameterType="java.util.Map" resultType="com.alibaba.fastjson.JSONObject">
         SELECT
         t1.system_type systemType,
@@ -111,4 +110,523 @@
     </select>
 
 
+    <select id="getDailyReportByMap" parameterType="java.util.Map" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        '汇创' agent, -- 代理商
+        (
+        CASE
+        WHEN t1.media_id = 1 THEN
+        '头条'
+        WHEN t1.media_id = 2 THEN
+        '快手'
+        ELSE
+        '未知'
+        END
+        ) media, -- 媒体
+        t1.system_type systemType, -- 设备
+        t2.stat_date statDate, -- 日期
+        sum(t2.charge) charge, -- 账面花费
+        ROUND(sum(t2.charge) / #{disCount}, 3) cashCost, -- 现金花费
+        sum(t2.photo_show) photoShow, -- 嚗光
+        sum(t2.photo_click) photoClick, -- 点击
+        (
+        CASE
+        WHEN sum(t2.photo_show) != 0 THEN
+        CONCAT(
+        ROUND(
+        (
+        sum(t2.photo_click) / sum(t2.photo_show)
+        ) * 100,
+        3
+        ),
+        '%'
+        )
+        ELSE
+        0
+        END
+        ) clickRate, -- 点击率
+        (
+        CASE
+        WHEN sum(t2.photo_show) != 0 THEN
+        ROUND(
+        (
+        sum(t2.charge) / sum(t2.photo_show)
+        ) * 1000,
+        3
+        )
+        ELSE
+        0
+        END
+        ) impression1kCost, -- 千次嚗光花费
+        sum(t2.bclick) bclick, -- 行为量
+        sum(t2.download_completed) eventJinJianApp, -- 下载完成数
+        sum(t2.activation) activation, -- 账户激活量
+        0 youMengactivation, -- 友盟激活量
+        sum(t2.activation) tdActivation, -- TD激活量
+        (
+        CASE
+        WHEN sum(t2.activation) != 0 THEN
+        ROUND(
+        (sum(t2.charge) / #{disCount}) / sum(t2.activation),
+        3
+        )
+        ELSE
+        0
+        END
+        ) activationCost, -- 账户激活成本
+        0 youMengactivationCost, -- 友盟激活成本
+        (
+        CASE
+        WHEN sum(t2.activation) != 0 THEN
+        ROUND(
+        (sum(t2.charge) / #{disCount}) / sum(t2.activation),
+        3
+        )
+        ELSE
+        0
+        END
+        ) tdActivationCost, -- TD激活成本
+        (
+        CASE
+        WHEN sum(t2.bclick) != 0 THEN
+        ROUND(
+        sum(t2.charge) / sum(t2.bclick),
+        3
+        )
+        ELSE
+        0
+        END
+        ) actionCost, -- 平均行为单价
+        (
+        CASE
+        WHEN sum(t2.photo_click) != 0 THEN
+        ROUND(
+        sum(t2.charge) / sum(t2.photo_click),
+        3
+        )
+        ELSE
+        0
+        END
+        ) clickCost, -- 平均点击单价
+        (
+        CASE
+        WHEN sum(t2.photo_click) != 0 THEN
+        CONCAT(
+        ROUND(
+        sum(t2.bclick) / sum(t2.photo_click),
+        3
+        ) * 100,
+        '%'
+        )
+        ELSE
+        CONCAT(0, '%')
+        END
+        ) actionRatio, -- 行为率
+        (
+        CASE
+        WHEN sum(t2.bclick) != 0 THEN
+        CONCAT(
+        ROUND(
+        sum(t2.download_completed) / sum(t2.bclick),
+        3
+        ) * 100,
+        '%'
+        )
+        ELSE
+        CONCAT(0, '%')
+        END
+        ) eventJinJianAppRatio, -- 下载完成行为率
+        (
+        CASE
+        WHEN sum(t2.download_completed) != 0 THEN
+        CONCAT(
+        ROUND(
+        sum(t2.activation) / sum(t2.download_completed),
+        3
+        ) * 100,
+        '%'
+        )
+        ELSE
+        CONCAT(0, '%')
+        END
+        ) activationRatio -- 下载完成激活率
+        FROM
+        ctop_user_allocation t1
+        LEFT JOIN ctop_kuaishou_report_daily_account t2 ON t1.account_id = t2.account_id
+        where 1 = 1
+        <if test="projectId != null">
+            and t1.project_id = #{projectId}
+        </if>
+        <if test="systemType != null">
+            and t2.stat_date = #{statDate}
+        </if>
+        <if test="systemType != null">
+            and t1.system_type = #{systemType}
+        </if>
+
+    </select>
+
+
+    <select id="getDirectApplicationReportByMap" parameterType="java.util.Map"
+            resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        '汇创' agent, -- 代理商
+        (
+        CASE
+        WHEN t2.media_id = 1 THEN
+        '头条'
+        WHEN t2.media_id = 2 THEN
+        '快手'
+        ELSE
+        '未知'
+        END
+        ) media, -- 媒体
+        t2.system_type systemType, -- 设备
+        t2.stat_date statDate, -- 日期
+        sum(t2.charge) charge, -- 账面花费
+        ROUND(sum(t2.charge) / #{disCount}, 3) cashCost, -- 现金花费
+        sum(t2.photo_show) photoShow, -- 嚗光
+        sum(t2.photo_click) photoClick, -- 点击
+        (
+        CASE
+        WHEN sum(t2.photo_show) != 0 THEN
+        CONCAT(
+        ROUND(
+        (
+        sum(t2.photo_click) / sum(t2.photo_show)
+        ) * 100,
+        3
+        ),
+        '%'
+        )
+        ELSE
+        0
+        END
+        ) clickRate,-- 点击率
+        (
+        CASE
+        WHEN sum(t2.photo_show) != 0 THEN
+        ROUND(
+        (
+        sum(t2.charge) / sum(t2.photo_show)
+        ) * 1000,
+        3
+        )
+        ELSE
+        0
+        END
+        ) impression1kCost, -- 千次嚗光花费
+        sum(t2.bclick) bclick, -- 行为量
+        sum(t2.download_completed) eventJinJianApp, -- 下载完成数
+        sum(t2.activation) activation, -- 账户激活量
+        0 youMengactivation, -- 友盟激活量
+        sum(t2.activation) tdActivation, -- TD激活量
+        (
+        CASE
+        WHEN sum(t2.activation) != 0 THEN
+        ROUND(
+        (sum(t2.charge) / #{disCount}) / sum(t2.activation),
+        3
+        )
+        ELSE
+        0
+        END
+        ) activationCost, -- 账户激活成本
+        0 youMengactivationCost,-- 友盟激活成本
+        (
+        CASE
+        WHEN sum(t2.activation) != 0 THEN
+        ROUND(
+        (sum(t2.charge) / #{disCount}) / sum(t2.activation),
+        3
+        )
+        ELSE
+        0
+        END
+        ) tdActivationCost,-- TD激活成本
+        (
+        CASE
+        WHEN sum(t2.bclick) != 0 THEN
+        ROUND(
+        sum(t2.charge) / sum(t2.bclick),
+        3
+        )
+        ELSE
+        0
+        END
+        ) actionCost,-- 平均行为单价
+        (
+        CASE
+        WHEN sum(t2.photo_click) != 0 THEN
+        ROUND(
+        sum(t2.charge) / sum(t2.photo_click),
+        3
+        )
+        ELSE
+        0
+        END
+        ) clickCost, -- 平均点击单价
+        (
+        CASE
+        WHEN sum(t2.photo_click) != 0 THEN
+        CONCAT(
+        ROUND(
+        sum(t2.bclick) / sum(t2.photo_click),
+        3
+        ) * 100,
+        '%'
+        )
+        ELSE
+        CONCAT(0, '%')
+        END
+        ) actionRatio, -- 行为率
+        (
+        CASE
+        WHEN sum(t2.bclick) != 0 THEN
+        CONCAT(
+        ROUND(
+        sum(t2.download_completed) / sum(t2.bclick),
+        3
+        ) * 100,
+        '%'
+        )
+        ELSE
+        CONCAT(0, '%')
+        END
+        ) eventJinJianAppRatio, -- 下载完成行为率
+        (
+        CASE
+        WHEN sum(t2.download_completed) != 0 THEN
+        CONCAT(
+        ROUND(
+        sum(t2.activation) / sum(t2.download_completed),
+        3
+        ) * 100,
+        '%'
+        )
+        ELSE
+        CONCAT(0, '%')
+        END
+        ) activationRatio -- 下载完成激活率
+        FROM
+        (
+        SELECT
+        t.system_type,
+        t1.*,
+        t.media_id,
+        (
+        CASE
+        WHEN t.system_type = 'android' THEN
+        REPLACE (
+        SUBSTRING_INDEX(t1.campaign_name, '-', 1),
+        'c',
+        ''
+        )
+        WHEN t.system_type = 'ios' THEN
+        REPLACE (
+        SUBSTRING_INDEX(t1.campaign_name, '-', 1),
+        'ks',
+        ''
+        )
+
+        ELSE
+        ''
+        END
+        ) campaignName
+        FROM
+        ctop_user_allocation t
+
+        LEFT JOIN ctop_kuaishou_report_daily_campaign t1 ON t.account_id = t1.account_id
+        WHERE
+        1 = 1
+        <if test="projectId != null">
+            and t.project_id = #{projectId}
+        </if>
+        <if test="systemType != null">
+            and t1.stat_date = #{statDate}
+        </if>
+        ) t2
+        WHERE t2.campaignName &gt;= 845
+        and t2.campaignName &lt;= 850;
+
+    </select>
+
+
+    <select id="getChannelSubcontractingReportByMap" parameterType="java.util.Map"
+            resultType="com.alibaba.fastjson.JSONObject">
+
+
+        SELECT
+        '汇创' agent, -- 代理商
+        (
+        CASE
+        WHEN t2.media_id = 1 THEN
+        '头条'
+        WHEN t2.media_id = 2 THEN
+        '快手'
+        ELSE
+        '未知'
+        END
+        ) media, -- 媒体
+        t2.system_type systemType, -- 设备
+        t2.stat_date statDate, -- 日期
+        t2.campaignName campaignName ,
+        sum(t2.charge) charge, -- 账面花费
+        ROUND(sum(t2.charge) / #{disCount}, 3) cashCost, -- 现金花费
+        sum(t2.photo_show) photoShow, -- 嚗光
+        sum(t2.photo_click) photoClick, -- 点击
+        (
+        CASE
+        WHEN sum(t2.photo_show) != 0 THEN
+        CONCAT(
+        ROUND(
+        (
+        sum(t2.photo_click) / sum(t2.photo_show)
+        ) * 100,
+        3
+        ),
+        '%'
+        )
+        ELSE
+        0
+        END
+        ) clickRate,-- 点击率
+        (
+        CASE
+        WHEN sum(t2.photo_show) != 0 THEN
+        ROUND(
+        (
+        sum(t2.charge) / sum(t2.photo_show)
+        ) * 1000,
+        3
+        )
+        ELSE
+        0
+        END
+        ) impression1kCost, -- 千次嚗光花费
+        sum(t2.bclick) bclick, -- 行为量
+        sum(t2.download_completed) eventJinJianApp, -- 下载完成数
+        sum(t2.activation) activation, -- 账户激活量
+        0 youMengactivation, -- 友盟激活量
+        sum(t2.activation) tdActivation, -- TD激活量
+        (
+        CASE
+        WHEN sum(t2.activation) != 0 THEN
+        ROUND(
+        (sum(t2.charge) / #{disCount}) / sum(t2.activation),
+        3
+        )
+        ELSE
+        0
+        END
+        ) activationCost, -- 账户激活成本
+        0 youMengactivationCost,-- 友盟激活成本
+        (
+        CASE
+        WHEN sum(t2.activation) != 0 THEN
+        ROUND(
+        (sum(t2.charge) / #{disCount}) / sum(t2.activation),
+        3
+        )
+        ELSE
+        0
+        END
+        ) tdActivationCost,-- TD激活成本
+        (
+        CASE
+        WHEN sum(t2.bclick) != 0 THEN
+        ROUND(
+        sum(t2.charge) / sum(t2.bclick),
+        3
+        )
+        ELSE
+        0
+        END
+        ) actionCost,-- 平均行为单价
+        (
+        CASE
+        WHEN sum(t2.photo_click) != 0 THEN
+        ROUND(
+        sum(t2.charge) / sum(t2.photo_click),
+        3
+        )
+        ELSE
+        0
+        END
+        ) clickCost, -- 平均点击单价
+        (
+        CASE
+        WHEN sum(t2.photo_click) != 0 THEN
+        CONCAT(
+        ROUND(
+        sum(t2.bclick) / sum(t2.photo_click),
+        3
+        ) * 100,
+        '%'
+        )
+        ELSE
+        CONCAT(0, '%')
+        END
+        ) actionRatio, -- 行为率
+        (
+        CASE
+        WHEN sum(t2.bclick) != 0 THEN
+        CONCAT(
+        ROUND(
+        sum(t2.download_completed) / sum(t2.bclick),
+        3
+        ) * 100,
+        '%'
+        )
+        ELSE
+        CONCAT(0, '%')
+        END
+        ) eventJinJianAppRatio, -- 下载完成行为率
+        (
+        CASE
+        WHEN sum(t2.download_completed) != 0 THEN
+        CONCAT(
+        ROUND(
+        sum(t2.activation) / sum(t2.download_completed),
+        3
+        ) * 100,
+        '%'
+        )
+        ELSE
+        CONCAT(0, '%')
+        END
+        ) activationRatio -- 下载完成激活率
+        FROM
+        (
+        SELECT
+        t.system_type,
+        t1.*,
+        t.media_id,
+        (
+        CASE
+        WHEN t.system_type = 'android' THEN
+        SUBSTRING_INDEX(t1.campaign_name, '-', 1)
+        WHEN t.system_type = 'ios' THEN
+        SUBSTRING_INDEX(t1.campaign_name, '-', 1)
+        ELSE
+        ''
+        END
+        ) campaignName
+        FROM
+        ctop_user_allocation t
+        LEFT JOIN ctop_kuaishou_report_daily_campaign t1 ON t.account_id = t1.account_id
+        WHERE
+        1 = 1
+        <if test="projectId != null">
+            and t.project_id = #{projectId}
+        </if>
+        <if test="systemType != null">
+            and t1.stat_date = #{statDate}
+        </if>
+        ) t2
+
+        GROUP BY t2.campaignName
+    </select>
+
+
 </mapper>

+ 2 - 0
module-report/src/main/java/cn/com/ctop/bytedance/service/IKuaiShouYiCheReportService.java

@@ -4,4 +4,6 @@ import com.alibaba.fastjson.JSONObject;
 
 public interface IKuaiShouYiCheReportService {
     JSONObject getHourReport(JSONObject requestJson);
+
+    JSONObject getDailyReport(JSONObject requestJson);
 }

+ 33 - 1
module-report/src/main/java/cn/com/ctop/bytedance/service/impl/KuaiShouYiCheReportServiceImpl.java

@@ -65,11 +65,12 @@ public class KuaiShouYiCheReportServiceImpl implements IKuaiShouYiCheReportServi
 
             // ios
             requestMap.put("systemType", "IOS");
+            requestMap.put("statDate", statDate);
             // 账号
             List<JSONObject> iosReportArr = kuaiShouYiCheReportMapper.selectReportByMap(requestMap);
 
             // 今日
-            requestMap.put("statDate", statDate);
+
             requestMap.put("dateDesc", statDate + "整体数据");
             JSONObject iosNowJson = kuaiShouYiCheReportMapper.selectSumReportByMap(requestMap);
             iosReportArr.add(iosNowJson);
@@ -92,4 +93,35 @@ public class KuaiShouYiCheReportServiceImpl implements IKuaiShouYiCheReportServi
 
         return returnJson;
     }
+
+    @Override
+    public JSONObject getDailyReport(JSONObject requestJson) {
+
+        JSONObject returnJson = new JSONObject();
+        try {
+            String statDate = requestJson.getString("statDate");
+            BigDecimal disCount = requestJson.getBigDecimal("disCount");
+            Long projectId = requestJson.getLong("projectId");
+            Map<String, Object> requestMap = new HashMap<>();
+            requestMap.put("disCount", disCount);
+            requestMap.put("projectId", projectId);
+            requestMap.put("statDate", statDate);
+            requestMap.put("systemType", "IOS");
+            JSONObject iosReport = kuaiShouYiCheReportMapper.getDailyReportByMap(requestMap);
+            requestMap.put("systemType", "android");
+            JSONObject androidReport = kuaiShouYiCheReportMapper.getDailyReportByMap(requestMap);
+            returnJson.put("ios", iosReport);
+            returnJson.put("android", androidReport);
+            returnJson.remove("systemType");
+            JSONObject directApplicationReport = kuaiShouYiCheReportMapper.getDirectApplicationReportByMap(requestMap);
+            returnJson.put("directApplication", directApplicationReport); // 应用直达
+            List<JSONObject> channelSubcontractingReport = kuaiShouYiCheReportMapper.getChannelSubcontractingReportByMap(requestMap);
+            returnJson.put("channelSubcontracting", channelSubcontractingReport); // 渠道包分析
+
+        } catch (Exception e) {
+            e.printStackTrace();
+
+        }
+        return returnJson;
+    }
 }