Browse Source

清洗头条素材数据

yumeng 5 năm trước cách đây
mục cha
commit
7b99586702
20 tập tin đã thay đổi với 604 bổ sung11 xóa
  1. 248 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceCleanMaterialReportController.java
  2. 107 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ByteDanceCleanMaterialReport.java
  3. 50 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/ByteDanceCleanMaterialJob.java
  4. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/CleanMaterialJob.java
  5. 15 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/ByteDanceCleanMaterialReportMapper.java
  6. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/CleanMaterialMapper.java
  7. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ByteDanceCleanMaterialReportMapper.xml
  8. 25 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/CleanMaterialMapper.xml
  9. 15 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IByteDanceCleanMaterialReportService.java
  10. 18 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/ICleanMaterialService.java
  11. 19 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ByteDanceCleanMaterialReportServiceImpl.java
  12. 38 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CleanMaterialServiceImpl.java
  13. 1 0
      module-report/src/main/java/cn/com/ctop/bytedance/entity/BytedanceCreativeDailyReport.java
  14. 1 1
      module-report/src/main/java/cn/com/ctop/bytedance/mapper/BytedanceCreativeDailyReportMapper.java
  15. 5 1
      module-report/src/main/java/cn/com/ctop/bytedance/mapper/BytedanceCreativeHourlyReportMapper.java
  16. 6 4
      module-report/src/main/java/cn/com/ctop/bytedance/mapper/xml/BytedanceCreativeDailyReportMapper.xml
  17. 19 3
      module-report/src/main/java/cn/com/ctop/bytedance/mapper/xml/BytedanceCreativeHourlyReportMapper.xml
  18. 2 0
      module-report/src/main/java/cn/com/ctop/bytedance/service/IBytedanceCreativeHourlyReportService.java
  19. 15 0
      module-report/src/main/java/cn/com/ctop/bytedance/service/impl/BytedanceCreativeHourlyReportServiceImpl.java
  20. 9 0
      module-report/src/main/java/cn/com/ctop/bytedance/service/impl/ReportServiceImpl.java

+ 248 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceCleanMaterialReportController.java

@@ -0,0 +1,248 @@
+package org.jeecg.modules.ctop.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.ctop.entity.ByteDanceCleanMaterialReport;
+import org.jeecg.modules.ctop.service.IByteDanceCleanMaterialReportService;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 头条-数据清洗
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-02-25
+ */
+@Slf4j
+@Api(tags = "头条-数据清洗")
+@RestController
+@RequestMapping("/ctop/byteDanceCleanMaterialReport")
+public class ByteDanceCleanMaterialReportController {
+    @Autowired
+    private IByteDanceCleanMaterialReportService byteDanceCleanMaterialReportService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param byteDanceCleanMaterialReport
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "头条-数据清洗-分页列表查询")
+    @ApiOperation(value = "头条-数据清洗-分页列表查询", notes = "头条-数据清洗-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<ByteDanceCleanMaterialReport>> queryPageList(ByteDanceCleanMaterialReport byteDanceCleanMaterialReport,
+                                                                     @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                                     @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                                     HttpServletRequest req) {
+        Result<IPage<ByteDanceCleanMaterialReport>> result = new Result<IPage<ByteDanceCleanMaterialReport>>();
+        QueryWrapper<ByteDanceCleanMaterialReport> queryWrapper = QueryGenerator.initQueryWrapper(byteDanceCleanMaterialReport, req.getParameterMap());
+        Page<ByteDanceCleanMaterialReport> page = new Page<ByteDanceCleanMaterialReport>(pageNo, pageSize);
+        IPage<ByteDanceCleanMaterialReport> pageList = byteDanceCleanMaterialReportService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param byteDanceCleanMaterialReport
+     * @return
+     */
+    @AutoLog(value = "头条-数据清洗-添加")
+    @ApiOperation(value = "头条-数据清洗-添加", notes = "头条-数据清洗-添加")
+    @PostMapping(value = "/add")
+    public Result<ByteDanceCleanMaterialReport> add(@RequestBody ByteDanceCleanMaterialReport byteDanceCleanMaterialReport) {
+        Result<ByteDanceCleanMaterialReport> result = new Result<ByteDanceCleanMaterialReport>();
+        try {
+            byteDanceCleanMaterialReportService.save(byteDanceCleanMaterialReport);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param byteDanceCleanMaterialReport
+     * @return
+     */
+    @AutoLog(value = "头条-数据清洗-编辑")
+    @ApiOperation(value = "头条-数据清洗-编辑", notes = "头条-数据清洗-编辑")
+    @PutMapping(value = "/edit")
+    public Result<ByteDanceCleanMaterialReport> edit(@RequestBody ByteDanceCleanMaterialReport byteDanceCleanMaterialReport) {
+        Result<ByteDanceCleanMaterialReport> result = new Result<ByteDanceCleanMaterialReport>();
+        ByteDanceCleanMaterialReport byteDanceCleanMaterialReportEntity = byteDanceCleanMaterialReportService.getById(byteDanceCleanMaterialReport.getId());
+        if (byteDanceCleanMaterialReportEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = byteDanceCleanMaterialReportService.updateById(byteDanceCleanMaterialReport);
+            if (ok) {
+                result.success("修改成功!");
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "头条-数据清洗-通过id删除")
+    @ApiOperation(value = "头条-数据清洗-通过id删除", notes = "头条-数据清洗-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        try {
+            byteDanceCleanMaterialReportService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "头条-数据清洗-批量删除")
+    @ApiOperation(value = "头条-数据清洗-批量删除", notes = "头条-数据清洗-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<ByteDanceCleanMaterialReport> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<ByteDanceCleanMaterialReport> result = new Result<ByteDanceCleanMaterialReport>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.byteDanceCleanMaterialReportService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "头条-数据清洗-通过id查询")
+    @ApiOperation(value = "头条-数据清洗-通过id查询", notes = "头条-数据清洗-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<ByteDanceCleanMaterialReport> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<ByteDanceCleanMaterialReport> result = new Result<ByteDanceCleanMaterialReport>();
+        ByteDanceCleanMaterialReport byteDanceCleanMaterialReport = byteDanceCleanMaterialReportService.getById(id);
+        if (byteDanceCleanMaterialReport == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(byteDanceCleanMaterialReport);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<ByteDanceCleanMaterialReport> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                ByteDanceCleanMaterialReport byteDanceCleanMaterialReport = JSON.parseObject(deString, ByteDanceCleanMaterialReport.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(byteDanceCleanMaterialReport, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<ByteDanceCleanMaterialReport> pageList = byteDanceCleanMaterialReportService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "头条-数据清洗列表");
+        mv.addObject(NormalExcelConstants.CLASS, ByteDanceCleanMaterialReport.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("头条-数据清洗列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<ByteDanceCleanMaterialReport> listByteDanceCleanMaterialReports = ExcelImportUtil.importExcel(file.getInputStream(), ByteDanceCleanMaterialReport.class, params);
+                byteDanceCleanMaterialReportService.saveBatch(listByteDanceCleanMaterialReports);
+                return Result.ok("文件导入成功!数据行数:" + listByteDanceCleanMaterialReports.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.ok("文件导入失败!");
+    }
+
+}

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

@@ -0,0 +1,107 @@
+package org.jeecg.modules.ctop.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 头条-数据清洗
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-02-25
+ */
+@Data
+@TableName("ctop_bytedance_clean_material_report")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_bytedance_clean_material_report对象", description = "头条-数据清洗")
+public class ByteDanceCleanMaterialReport {
+
+    /**
+     * md5 为id
+     */
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "md5 为id")
+    private String id;
+    /**
+     * 花费(元)
+     */
+    @Excel(name = "花费(元)", width = 15)
+    @ApiModelProperty(value = "花费(元)")
+    private java.math.BigDecimal cost;
+    /**
+     * 展示量
+     */
+    @Excel(name = "展示量", width = 15)
+    @ApiModelProperty(value = "展示量")
+    private Integer showNum;
+    /**
+     * 点击量
+     */
+    @Excel(name = "点击量", width = 15)
+    @ApiModelProperty(value = "点击量")
+    private Integer click;
+    /**
+     * 转化量
+     */
+    @Excel(name = "转化量", width = 15)
+    @ApiModelProperty(value = "转化量")
+    private Integer convertNum;
+    /**
+     * 激活
+     */
+    @Excel(name = "激活", width = 15)
+    @ApiModelProperty(value = "激活")
+    private Integer active;
+    /**
+     * 下载-注册
+     */
+    @Excel(name = "下载-注册", width = 15)
+    @ApiModelProperty(value = "下载-注册")
+    private Integer register;
+    /**
+     * 表单提交
+     */
+    @Excel(name = "表单提交", width = 15)
+    @ApiModelProperty(value = "表单提交")
+    private Integer form;
+    /**
+     * 视频-总播放
+     */
+    @Excel(name = "视频-总播放", width = 15)
+    @ApiModelProperty(value = "视频-总播放")
+    private Integer totalPlay;
+    /**
+     * 视频-有效播放
+     */
+    @Excel(name = "视频-有效播放", width = 15)
+    @ApiModelProperty(value = "视频-有效播放")
+    private Integer validPlay;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}

+ 50 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/ByteDanceCleanMaterialJob.java

@@ -0,0 +1,50 @@
+package org.jeecg.modules.ctop.job;
+
+import cn.com.ctop.common.module.utils.Check;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.ctop.service.ICleanMaterialService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * 清洗素材报表
+ */
+@Slf4j
+public class ByteDanceCleanMaterialJob implements Job {
+    @Autowired
+    private ICleanMaterialService cleanMaterialService;
+    static ExecutorService executorService = null;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) {
+        Thread thread = new Thread() {
+            @Override
+            public void run() {
+                List<String> signatureList = cleanMaterialService.getByteDanceSignature();
+                if (Check.isNull(signatureList)) {
+                    log.error("头条素材数据获取为空");
+                    return;
+                }
+                executorService = Executors.newFixedThreadPool(3);
+                for (int i = 0; i < signatureList.size(); i++) {
+                    String signature = signatureList.get(i);
+                    executorService.submit(new Runnable() {
+                        @Override
+                        public void run() {
+                            cleanMaterialService.calculationByteDanceReport(signature);
+                        }
+                    });
+                }
+
+
+            }
+        };
+        thread.start();
+
+    }
+}

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

@@ -15,7 +15,7 @@ import java.util.concurrent.Executors;
  * 清洗素材报表
  */
 @Slf4j
-public class CleanMaterialJob implements Job {
+public class KuaiShouCleanMaterialJob implements Job {
     @Autowired
     private ICleanMaterialService cleanMaterialService;
     static ExecutorService executorService = null;

+ 15 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/ByteDanceCleanMaterialReportMapper.java

@@ -0,0 +1,15 @@
+package org.jeecg.modules.ctop.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.ctop.entity.ByteDanceCleanMaterialReport;
+
+/**
+ * 头条-数据清洗
+ *
+ * @author: jeecg-boot
+ * @date: 2020-02-25
+ * @cersion: V1.0
+ */
+public interface ByteDanceCleanMaterialReportMapper extends BaseMapper<ByteDanceCleanMaterialReport> {
+
+}

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/CleanMaterialMapper.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.ctop.mapper;
 
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.ctop.entity.ByteDanceCleanMaterialReport;
 import org.jeecg.modules.ctop.entity.KuaiShouCleanMaterialReport;
 
 import java.util.List;
@@ -9,4 +10,8 @@ public interface CleanMaterialMapper {
     List<String> getSignatureList();
 
     KuaiShouCleanMaterialReport calculationMaterialReport(@Param("signature") String signature);
+
+    List<String> getByteDanceSignatureList();
+
+    ByteDanceCleanMaterialReport calculationByteDanceMaterialReport(String signature);
 }

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ByteDanceCleanMaterialReportMapper.xml

@@ -0,0 +1,5 @@
+<?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="org.jeecg.modules.ctop.mapper.ByteDanceCleanMaterialReportMapper">
+
+</mapper>

+ 25 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/CleanMaterialMapper.xml

@@ -23,4 +23,29 @@
         signature = #{signature}
     </select>
 
+
+    <select id="getByteDanceSignatureList" resultType="java.lang.String">
+    SELECT
+      DISTINCT(signature)
+      from ctop_bytedance_report_creative_daily
+      WHERE signature !=''
+    </select>
+
+    <select id="calculationByteDanceMaterialReport" resultType="org.jeecg.modules.ctop.entity.ByteDanceCleanMaterialReport">
+        select
+        signature id,
+        sum(cost) cost,
+        sum(show_num) showNum,
+        sum(click) click,
+        sum(convert_num) convertNum,
+        sum(active) active,
+        sum(register) register,
+        sum(form) form,
+        sum(total_play) totalPlay,
+        sum(valid_play) validPlay
+        from ctop_bytedance_report_creative_daily
+        where
+        signature = #{signature}
+    </select>
+
 </mapper>

+ 15 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IByteDanceCleanMaterialReportService.java

@@ -0,0 +1,15 @@
+package org.jeecg.modules.ctop.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.ctop.entity.ByteDanceCleanMaterialReport;
+
+/**
+ * 头条-数据清洗
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-02-25
+ */
+public interface IByteDanceCleanMaterialReportService extends IService<ByteDanceCleanMaterialReport> {
+
+}

+ 18 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/ICleanMaterialService.java

@@ -3,12 +3,29 @@ package org.jeecg.modules.ctop.service;
 import java.util.List;
 
 public interface ICleanMaterialService {
+    /**
+     * 快手 唯一素材MD5标识
+     * @return
+     */
     List<String> getSignature();
 
     /**
-     * 计算素材报表
+     * 计算快手素材报表
      *
      * @param signature
      */
     void calculationReport(String signature);
+
+    /**
+     * 头条 唯一素材MD5标识
+     * @return
+     */
+    List<String> getByteDanceSignature();
+
+    /**
+     * 计算头条素材报表
+     *
+     * @param signature
+     */
+    void calculationByteDanceReport(String signature);
 }

+ 19 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ByteDanceCleanMaterialReportServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.ctop.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.ctop.entity.ByteDanceCleanMaterialReport;
+import org.jeecg.modules.ctop.mapper.ByteDanceCleanMaterialReportMapper;
+import org.jeecg.modules.ctop.service.IByteDanceCleanMaterialReportService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 头条-数据清洗
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-02-25
+ */
+@Service
+public class ByteDanceCleanMaterialReportServiceImpl extends ServiceImpl<ByteDanceCleanMaterialReportMapper, ByteDanceCleanMaterialReport> implements IByteDanceCleanMaterialReportService {
+
+}

+ 38 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CleanMaterialServiceImpl.java

@@ -2,8 +2,10 @@ package org.jeecg.modules.ctop.service.impl;
 
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.kuaishou.modules.report.service.IKuaishouReportDailyCreativeService;
+import org.jeecg.modules.ctop.entity.ByteDanceCleanMaterialReport;
 import org.jeecg.modules.ctop.entity.KuaiShouCleanMaterialReport;
 import org.jeecg.modules.ctop.mapper.CleanMaterialMapper;
+import org.jeecg.modules.ctop.service.IByteDanceCleanMaterialReportService;
 import org.jeecg.modules.ctop.service.ICleanMaterialService;
 import org.jeecg.modules.ctop.service.IKuaiShouCleanMaterialReportService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,8 +21,15 @@ public class CleanMaterialServiceImpl implements ICleanMaterialService {
     IKuaishouReportDailyCreativeService kuaishouReportDailyCreativeService;
     @Autowired
     private IKuaiShouCleanMaterialReportService cleanMaterialReportService;
+    @Autowired
+    private IByteDanceCleanMaterialReportService byteDanceCleanMaterialReportService;
 
 
+    /**
+     * 快手 MD5集合
+     *
+     * @return
+     */
     @Override
     public List<String> getSignature() {
         return cleanMaterialMapper.getSignatureList();
@@ -33,9 +42,38 @@ public class CleanMaterialServiceImpl implements ICleanMaterialService {
      */
     @Override
     public void calculationReport(String signature) {
+        if (Check.isNull(signature)) {
+            return;
+        }
         KuaiShouCleanMaterialReport calculationMaterialReport = cleanMaterialMapper.calculationMaterialReport(signature);
         if (!Check.isNull(calculationMaterialReport)) {
             cleanMaterialReportService.saveOrUpdate(calculationMaterialReport);
         }
     }
+
+    /**
+     * 头条MD5 集合
+     *
+     * @return
+     */
+    @Override
+    public List<String> getByteDanceSignature() {
+        return cleanMaterialMapper.getByteDanceSignatureList();
+    }
+
+    /**
+     * 头条素材报表
+     *
+     * @param signature
+     */
+    @Override
+    public void calculationByteDanceReport(String signature) {
+        if (Check.isNull(signature)) {
+            return;
+        }
+        ByteDanceCleanMaterialReport calculationMaterialReport = cleanMaterialMapper.calculationByteDanceMaterialReport(signature);
+        if (!Check.isNull(calculationMaterialReport)) {
+            byteDanceCleanMaterialReportService.saveOrUpdate(calculationMaterialReport);
+        }
+    }
 }

+ 1 - 0
module-report/src/main/java/cn/com/ctop/bytedance/entity/BytedanceCreativeDailyReport.java

@@ -401,6 +401,7 @@ public class BytedanceCreativeDailyReport {
     private Date updateTime;
 
     private String videoUrl;
+    private String signature;
 
     public String getVideoUrl() {
         return videoUrl;

+ 1 - 1
module-report/src/main/java/cn/com/ctop/bytedance/mapper/BytedanceCreativeDailyReportMapper.java

@@ -19,5 +19,5 @@ public interface BytedanceCreativeDailyReportMapper extends BaseMapper<Bytedance
     List<BytedanceCreativeDailyReport> bytedanceCreativeAccountReport(Map<String, Object> paramsMap);
 
 
-    void replaceBatch(@Param(value = "report") List<BytedanceCreativeDailyReport> dailyReports);
+    void replaceBatch(@Param(value = "reports") List<BytedanceCreativeDailyReport> reports);
 }

+ 5 - 1
module-report/src/main/java/cn/com/ctop/bytedance/mapper/BytedanceCreativeHourlyReportMapper.java

@@ -14,5 +14,9 @@ import java.util.List;
  */
 public interface BytedanceCreativeHourlyReportMapper extends BaseMapper<BytedanceCreativeHourlyReport> {
 
-    void replaceBatch(@Param(value = "reports") List<BytedanceCreativeHourlyReport> hourlyReports);
+    void replaceBatch(@Param(value = "reports") List<BytedanceCreativeHourlyReport> reports);
+
+    String getVideoIdByCreativeId(@Param("creativeId") Long creativeId);
+
+    String selectSignatureByVideoId(@Param("videoId") String videoId);
 }

+ 6 - 4
module-report/src/main/java/cn/com/ctop/bytedance/mapper/xml/BytedanceCreativeDailyReportMapper.xml

@@ -94,7 +94,7 @@
     </select>
 
     <insert id="replaceBatch">
-        replace into ctop_bytedance_report_plan_daily(
+        replace into ctop_bytedance_report_creative_daily(
         id,
         advertiser_id ,
         stat_datetime,
@@ -156,7 +156,8 @@
         campaign_id,
         create_time,
         update_time,
-        creative_id)
+        creative_id,
+        signature)
         values
         <foreach collection="reports" item="report" separator=",">
             (
@@ -170,7 +171,7 @@
             #{report.active},
             #{report.downloadFinish},
             #{report.downloadStart},
-            #{report.click_install},
+            #{report.clickInstall},
             #{report.installFinish},
             #{report.register},
             #{report.payCount},
@@ -221,7 +222,8 @@
             #{report.campaignId},
             #{report.createTime},
             #{report.updateTime},
-            #{report.creativeId
+            #{report.creativeId},
+            #{report.signature}
             )
         </foreach>
     </insert>

+ 19 - 3
module-report/src/main/java/cn/com/ctop/bytedance/mapper/xml/BytedanceCreativeHourlyReportMapper.xml

@@ -2,7 +2,7 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cn.com.ctop.bytedance.mapper.BytedanceCreativeHourlyReportMapper">
     <insert id="replaceBatch">
-        replace into ctop_bytedance_report_plan_hourly(
+        replace into ctop_bytedance_report_creative_hourly(
         id,
         advertiser_id ,
         stat_datetime,
@@ -81,7 +81,7 @@
             #{report.active},
             #{report.downloadFinish},
             #{report.downloadStart},
-            #{report.click_install},
+            #{report.clickInstall},
             #{report.installFinish},
             #{report.register},
             #{report.payCount},
@@ -132,8 +132,24 @@
             #{report.campaignId},
             #{report.createTime},
             #{report.updateTime},
-            #{report.creativeId
+            #{report.creativeId}
             )
         </foreach>
     </insert>
+    <select id="getVideoIdByCreativeId" resultType="java.lang.String">
+        select
+        video_id
+        from
+        ctop_bytedance_creative
+        where
+        id = #{creativeId}
+    </select>
+
+    <select id="selectSignatureByVideoId" resultType="java.lang.String">
+      select
+      signature
+       from ctop_bytedance_video_info
+       where
+       id = #{videoId}
+    </select>
 </mapper>

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

@@ -14,4 +14,6 @@ import java.util.List;
 public interface IBytedanceCreativeHourlyReportService extends IService<BytedanceCreativeHourlyReport> {
 
     void replaceBatch(List<BytedanceCreativeHourlyReport> hourlyReports);
+
+    String getSignatureByCreativeId(Long creativeId);
 }

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

@@ -3,6 +3,7 @@ package cn.com.ctop.bytedance.service.impl;
 import cn.com.ctop.bytedance.entity.BytedanceCreativeHourlyReport;
 import cn.com.ctop.bytedance.mapper.BytedanceCreativeHourlyReportMapper;
 import cn.com.ctop.bytedance.service.IBytedanceCreativeHourlyReportService;
+import cn.com.ctop.common.module.utils.Check;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -24,4 +25,18 @@ public class BytedanceCreativeHourlyReportServiceImpl extends ServiceImpl<Byteda
     public void replaceBatch(List<BytedanceCreativeHourlyReport> hourlyReports) {
         reportMapper.replaceBatch(hourlyReports);
     }
+
+    @Override
+    public String getSignatureByCreativeId(Long creativeId) {
+        String videoId = reportMapper.getVideoIdByCreativeId(creativeId);
+        if (!Check.isNull(videoId)) {
+            String signature = reportMapper.selectSignatureByVideoId(videoId);
+            if (!Check.isNull(signature)) {
+                return signature;
+
+            }
+        }
+
+        return null;
+    }
 }

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

@@ -309,6 +309,7 @@ public class ReportServiceImpl implements IReportService {
         return conditions;
     }
 
+
     private void getCreativeReportByPage(CtopOauthToken token, ByteDanceAdvertiserReportDTO conditions, int page) {
         conditions.setPage(page);
         var config = new SerializeConfig();
@@ -337,6 +338,14 @@ public class ReportServiceImpl implements IReportService {
             } else {
                 var dailyReport = new BytedanceCreativeDailyReport(data, token.getAccountId());
 //                creativeDailyReportService.saveOrUpdate(dailyReport);
+                if (!Check.isNull(dailyReport)) {
+                    Long creativeId = dailyReport.getCreativeId();
+                    String signature = creativeHourlyReportService.getSignatureByCreativeId(creativeId);
+                    if (!Check.isNull(signature)) {
+                        dailyReport.setSignature(signature);
+                    }
+                }
+
                 dailyReports.add(dailyReport);
             }
         }