Browse Source

Merge branch 'test' into test-upload

# Conflicts:
#	module-report/src/main/java/cn/com/ctop/bytedance/controller/KuaiShouYiCheReportController.java
#	module-report/src/main/java/cn/com/ctop/bytedance/service/impl/KuaiShouYiCheReportServiceImpl.java
yumeng 5 years ago
parent
commit
a58cd2717a

+ 10 - 13
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/DramaInfoController.java

@@ -51,20 +51,17 @@ public class DramaInfoController {
 	public Map<String, Object> getDetail(Long dramaId) {
 		Map<String, Object> result = new HashMap<>();
 		List<DramaItemInfo> itemInfos = dramaItemInfoService.getByDramaId(dramaId);
+        List<DramaItemInfo> getItemInfos = new ArrayList<>();
+        for (DramaItemInfo itemInfo : itemInfos) {
+            if (itemInfo.getType() == 2) {
+                DramaRoleInfo roleInfo = dramaRoleInfoService.getById(itemInfo.getRoleId());
+                itemInfo.setRoleName(roleInfo.getName());
+            }
+            getItemInfos.add(itemInfo);
+        }
 		List<DramaRoleInfo> roleInfos = dramaRoleInfoService.getByDramaId(dramaId);
-		List<DramaRoleInfo> returnRoleInfos = new ArrayList<>();
-		DramaRoleInfo dramaRoleInfo1 = new DramaRoleInfo("情节描述", "scence");
-		returnRoleInfos.add(dramaRoleInfo1);
-		if (null != roleInfos && roleInfos.size() > 0) {
-			for (DramaRoleInfo roleInfo : roleInfos) {
-				roleInfo.setButtonType("dialogue_" + roleInfo.getId());
-				returnRoleInfos.add(roleInfo);
-			}
-		}
-		DramaRoleInfo dramaRoleInfo2 = new DramaRoleInfo("创建角色", "createRole");
-		returnRoleInfos.add(dramaRoleInfo2);
-		result.put("itemInfos", itemInfos);
-		result.put("roleInfos", returnRoleInfos);
+        result.put("itemInfos", getItemInfos);
+        result.put("roleInfos", roleInfos);
 		ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
 		return result;
 	}

+ 1 - 17
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/DramaItemInfoController.java

@@ -51,6 +51,7 @@ public class DramaItemInfoController {
         Result<IPage<DramaItemInfo>> result = new Result<IPage<DramaItemInfo>>();
         QueryWrapper<DramaItemInfo> queryWrapper = QueryGenerator.initQueryWrapper(dramaItemInfo, req.getParameterMap());
         Page<DramaItemInfo> page = new Page<DramaItemInfo>(pageNo, pageSize);
+        queryWrapper.orderByAsc("rank");
         IPage<DramaItemInfo> pageList = dramaItemInfoService.page(page, queryWrapper);
         result.setSuccess(true);
         result.setResult(pageList);
@@ -69,14 +70,6 @@ public class DramaItemInfoController {
     public Result<DramaItemInfo> add(@RequestBody DramaItemInfo dramaItemInfo) {
         Result<DramaItemInfo> result = new Result<>();
         try {
-            String buttonType = dramaItemInfo.getButtonType();
-            if (buttonType.startsWith("dialogue")) {
-                dramaItemInfo.setType("dialogue");
-                String[] infos = buttonType.split("_");
-                dramaItemInfo.setRoleId(Long.parseLong(infos[1]));
-            } else if (buttonType.startsWith("scence")) {
-                dramaItemInfo.setType("scence");
-            }
             dramaItemInfoService.save(dramaItemInfo);
             result.success("添加成功!");
         } catch (Exception e) {
@@ -101,20 +94,11 @@ public class DramaItemInfoController {
         if (dramaItemInfoEntity == null) {
             result.error500("未找到对应实体");
         } else {
-            String buttonType = dramaItemInfo.getButtonType();
-            if (buttonType.startsWith("dialogue")) {
-                dramaItemInfo.setType("dialogue");
-                String[] infos = buttonType.split("_");
-                dramaItemInfo.setRoleId(Long.parseLong(infos[1]));
-            } else if (buttonType.startsWith("scence")) {
-                dramaItemInfo.setType("scence");
-            }
             boolean ok = dramaItemInfoService.updateById(dramaItemInfo);
             if (ok) {
                 result.success("修改成功!");
             }
         }
-
         return result;
     }
 

+ 37 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/DramaInfo.java

@@ -32,6 +32,43 @@ public class DramaInfo {
 	private Integer nonpublic;
 	private String introduction;
 	private Integer status;
+    /**
+     * 场景
+     */
+    private String scnece;
+    /**
+     * 视频类型
+     */
+    private String videoType;
+    /**
+     * 时长
+     */
+    private Long timeLong;
+    /**
+     * 演员id
+     */
+    private String actorId;
+    /**
+     * 卖点
+     */
+    private String usp;
+    /**
+     * 演员/服化道备注
+     */
+    private String actorRemark;
+    /**
+     * 拍摄要求
+     */
+    private String shootReq;
+    /**
+     * 封面文案
+     */
+    private String coverText;
+    /**
+     * 剪辑备注
+     */
+    private String clipRemark;
+
 	private Date createTime;
 	private Date updateTime;
 }

+ 18 - 8
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/DramaItemInfo.java

@@ -36,9 +36,9 @@ public class DramaItemInfo {
     /**
      * 元素类型1:描述 2:对话
      */
-    @Excel(name = "元素类型1:描述 2:对话", width = 15)
+    @Excel(name = "元素类型1:情节描述 2:对话", width = 15)
     @ApiModelProperty(value = "元素类型1:描述 2:对话")
-    private String type;
+    private Integer type;
     /**
      * 剧本id
      */
@@ -52,11 +52,11 @@ public class DramaItemInfo {
     @ApiModelProperty(value = "roleId")
     private Long roleId;
     /**
-     * content
+     * 台词
      */
-    @Excel(name = "content", width = 15)
+    @Excel(name = "line", width = 15)
     @ApiModelProperty(value = "content")
-    private String content;
+    private String line;
     /**
      * 排序号
      */
@@ -80,10 +80,20 @@ public class DramaItemInfo {
     @ApiModelProperty(value = "updateTime")
     private Date updateTime;
 
-    @TableField(exist = false)
-    private String roleName;
+    /**
+     * 场景
+     */
+    private String scene;
+    /**
+     * 剪辑描述
+     */
+    private String clipRemark;
+    /**
+     * 画面内容
+     */
+    private String picContent;
 
     @TableField(exist = false)
-    private String buttonType;
+    private String roleName;
 
 }

+ 178 - 8
module-report/src/main/java/cn/com/ctop/bytedance/controller/KuaiShouYiCheReportController.java

@@ -14,7 +14,6 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
-import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -34,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;
+    }
+
+
     /**
      * 导出报表
      *
@@ -41,19 +49,21 @@ 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");
-        DecimalFormat df = new DecimalFormat("#,###");
+
         // 安卓相关
         List<List<Object>> androidList = new ArrayList<>();
         if (!Check.isNull(androidArr)) {
             for (int i = 0; i < androidArr.size(); i++) {
                 JSONObject jsonObject = androidArr.getJSONObject(i);
+
                 List<Object> android = new ArrayList();
                 android.add(jsonObject.getString("systemType"));
                 android.add(jsonObject.getString("authName"));
-                android.add(df.format(jsonObject.getBigDecimal("charge")));
+                android.add(jsonObject.getBigDecimal("charge"));
                 android.add(jsonObject.getLong("activation"));
                 android.add(jsonObject.getBigDecimal("activationCost"));
                 android.add(jsonObject.getBigDecimal("estimatedCost"));
@@ -69,10 +79,9 @@ public class KuaiShouYiCheReportController {
             for (int i = 0; i < iosArr.size(); i++) {
                 JSONObject jsonObject = iosArr.getJSONObject(i);
                 List<Object> ios = new ArrayList();
-
                 ios.add(jsonObject.getString("systemType"));
                 ios.add(jsonObject.getString("authName"));
-                ios.add(df.format(jsonObject.getBigDecimal("charge")));
+                ios.add(jsonObject.getBigDecimal("charge"));
                 ios.add(jsonObject.getLong("activation"));
                 ios.add(jsonObject.getBigDecimal("activationCost"));
                 ios.add(jsonObject.getBigDecimal("estimatedCost"));
@@ -81,8 +90,8 @@ public class KuaiShouYiCheReportController {
         }
 
 
-        String[] androidHeaders = {"投放设备", "分类", "现金花费(¥)", "账户激活量", "激活成本(¥)", "预估成本(¥)"};
-        String[] iosHeaders = {"投放设备", "分类", "现金花费(¥)", "账户激活量", "激活成本(¥)", "预估成本(¥)"};
+        String[] androidHeaders = {"投放设备", "分类", "现金花费", "账户激活量", "激活成本", "预估成本"};
+        String[] iosHeaders = {"投放设备", "分类", "现金花费", "账户激活量", "激活成本", "预估成本"};
         OutputStream os = response.getOutputStream();
         ExportExcelUtils eeu = new ExportExcelUtils();
         XSSFWorkbook workbook = new XSSFWorkbook();
@@ -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);
 }

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

@@ -66,11 +66,11 @@ public class KuaiShouYiCheReportServiceImpl implements IKuaiShouYiCheReportServi
             // ios
             requestMap.put("systemType", "IOS");
             requestMap.put("statDate", statDate);
-
             // 账号
             List<JSONObject> iosReportArr = kuaiShouYiCheReportMapper.selectReportByMap(requestMap);
 
             // 今日
+
             requestMap.put("dateDesc", statDate + "整体数据");
             JSONObject iosNowJson = kuaiShouYiCheReportMapper.selectSumReportByMap(requestMap);
             iosReportArr.add(iosNowJson);
@@ -93,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;
+    }
 }

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

@@ -224,6 +224,7 @@ public class ReportServiceImpl implements IReportService {
         config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
         var jsonObject = JSONObject.parseObject(JSON.toJSONString(conditions, config));
         JSONObject getObject = getAdStat(token, jsonObject);
+//        log.warn(getObject.toJSONString());
         if (null == getObject) {
             log.error("广告计划报表数据获取异常=》account:{};message:{}", token.getAccountId(), "返回数据异常");
             return;