瀏覽代碼

快手报表接口逻辑修改

syh 5 年之前
父節點
當前提交
2e7a868932
共有 26 個文件被更改,包括 2361 次插入282 次删除
  1. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceTemplateController.java
  2. 17 20
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CustomerPlanStatisticInfoController.java
  3. 253 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/PlatformCampaignStatisticInfoController.java
  4. 50 7
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ReportController.java
  5. 0 24
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java
  6. 115 107
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/CustomerPlanStatisticInfo.java
  7. 230 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/PlatformCampaignStatisticInfo.java
  8. 2 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/CustomerPlanStatisticInfoMapper.java
  9. 20 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/PlatformCampaignStatisticInfoMapper.java
  10. 163 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/PlatformCampaignStatisticInfoMapper.xml
  11. 2 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/ICustomerPlanStatisticInfoService.java
  12. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IPlatformCampaignStatisticInfoService.java
  13. 5 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IReportService.java
  14. 2 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CustomerPlanStatisticInfoServiceImpl.java
  15. 19 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/PlatformCampaignStatisticInfoServiceImpl.java
  16. 393 7
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ReportServiceImpl.java
  17. 451 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/vo/StatisticCampaignVo.java
  18. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaishouInterfaceServiceImpl.java
  19. 3 1
      jeecg-boot-module-system/src/main/resources/application-dev.yml
  20. 0 38
      jeecg-boot-module-system/src/main/resources/effect_unit_2019-08-02-00_2019-08-02-00.csv
  21. 136 0
      jeecg-boot-module-system/src/main/resources/借条后台数据.csv
  22. 29 0
      jeecg-boot-module-system/src/main/resources/快手后台数据-户1.csv
  23. 13 0
      jeecg-boot-module-system/src/main/resources/快手后台数据-户4.csv
  24. 395 67
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  25. 3 3
      module-common/src/main/java/cn/com/ctop/common/utils/CsvUtils.java
  26. 44 0
      module-common/src/main/java/cn/com/ctop/common/utils/OSSUtils.java

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

@@ -36,7 +36,7 @@ public class ByteDanceTemplateController {
     }
 
     /**
-     * 能封面
+     * 能封面
      *
      * @param accountId
      * @param videoId

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

@@ -8,16 +8,13 @@ import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.ctop.entity.CustomerPlanStatisticInfo;
 import org.jeecg.modules.ctop.service.ICustomerPlanStatisticInfoService;
-
 import java.util.Date;
-
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -39,13 +36,13 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
 /**
- * @Description: 用户广告计划信息统计
+ * @Description: 用户平台广告计划信息
  * @Author: jeecg-boot
- * @Date: 2019-08-21
+ * @Date: 2019-08-23
  * @Version: V1.0
  */
 @Slf4j
-@Api(tags = "用户广告计划信息统计")
+@Api(tags = "用户平台广告计划信息")
 @RestController
 @RequestMapping("/ctop/customerPlanStatisticInfo")
 public class CustomerPlanStatisticInfoController {
@@ -61,8 +58,8 @@ public class CustomerPlanStatisticInfoController {
      * @param req
      * @return
      */
-    @AutoLog(value = "用户广告计划信息统计-分页列表查询")
-    @ApiOperation(value = "用户广告计划信息统计-分页列表查询", notes = "用户广告计划信息统计-分页列表查询")
+    @AutoLog(value = "用户平台广告计划信息-分页列表查询")
+    @ApiOperation(value = "用户平台广告计划信息-分页列表查询", notes = "用户平台广告计划信息-分页列表查询")
     @GetMapping(value = "/list")
     public Result<IPage<CustomerPlanStatisticInfo>> queryPageList(CustomerPlanStatisticInfo customerPlanStatisticInfo,
                                                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@@ -83,8 +80,8 @@ public class CustomerPlanStatisticInfoController {
      * @param customerPlanStatisticInfo
      * @return
      */
-    @AutoLog(value = "用户广告计划信息统计-添加")
-    @ApiOperation(value = "用户广告计划信息统计-添加", notes = "用户广告计划信息统计-添加")
+    @AutoLog(value = "用户平台广告计划信息-添加")
+    @ApiOperation(value = "用户平台广告计划信息-添加", notes = "用户平台广告计划信息-添加")
     @PostMapping(value = "/add")
     public Result<CustomerPlanStatisticInfo> add(@RequestBody CustomerPlanStatisticInfo customerPlanStatisticInfo) {
         Result<CustomerPlanStatisticInfo> result = new Result<CustomerPlanStatisticInfo>();
@@ -104,8 +101,8 @@ public class CustomerPlanStatisticInfoController {
      * @param customerPlanStatisticInfo
      * @return
      */
-    @AutoLog(value = "用户广告计划信息统计-编辑")
-    @ApiOperation(value = "用户广告计划信息统计-编辑", notes = "用户广告计划信息统计-编辑")
+    @AutoLog(value = "用户平台广告计划信息-编辑")
+    @ApiOperation(value = "用户平台广告计划信息-编辑", notes = "用户平台广告计划信息-编辑")
     @PutMapping(value = "/edit")
     public Result<CustomerPlanStatisticInfo> edit(@RequestBody CustomerPlanStatisticInfo customerPlanStatisticInfo) {
         Result<CustomerPlanStatisticInfo> result = new Result<CustomerPlanStatisticInfo>();
@@ -129,8 +126,8 @@ public class CustomerPlanStatisticInfoController {
      * @param id
      * @return
      */
-    @AutoLog(value = "用户广告计划信息统计-通过id删除")
-    @ApiOperation(value = "用户广告计划信息统计-通过id删除", notes = "用户广告计划信息统计-通过id删除")
+    @AutoLog(value = "用户平台广告计划信息-通过id删除")
+    @ApiOperation(value = "用户平台广告计划信息-通过id删除", notes = "用户平台广告计划信息-通过id删除")
     @DeleteMapping(value = "/delete")
     public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
         try {
@@ -148,8 +145,8 @@ public class CustomerPlanStatisticInfoController {
      * @param ids
      * @return
      */
-    @AutoLog(value = "用户广告计划信息统计-批量删除")
-    @ApiOperation(value = "用户广告计划信息统计-批量删除", notes = "用户广告计划信息统计-批量删除")
+    @AutoLog(value = "用户平台广告计划信息-批量删除")
+    @ApiOperation(value = "用户平台广告计划信息-批量删除", notes = "用户平台广告计划信息-批量删除")
     @DeleteMapping(value = "/deleteBatch")
     public Result<CustomerPlanStatisticInfo> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
         Result<CustomerPlanStatisticInfo> result = new Result<CustomerPlanStatisticInfo>();
@@ -168,8 +165,8 @@ public class CustomerPlanStatisticInfoController {
      * @param id
      * @return
      */
-    @AutoLog(value = "用户广告计划信息统计-通过id查询")
-    @ApiOperation(value = "用户广告计划信息统计-通过id查询", notes = "用户广告计划信息统计-通过id查询")
+    @AutoLog(value = "用户平台广告计划信息-通过id查询")
+    @ApiOperation(value = "用户平台广告计划信息-通过id查询", notes = "用户平台广告计划信息-通过id查询")
     @GetMapping(value = "/queryById")
     public Result<CustomerPlanStatisticInfo> queryById(@RequestParam(name = "id", required = true) String id) {
         Result<CustomerPlanStatisticInfo> result = new Result<CustomerPlanStatisticInfo>();
@@ -208,9 +205,9 @@ public class CustomerPlanStatisticInfoController {
         ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
         List<CustomerPlanStatisticInfo> pageList = customerPlanStatisticInfoService.list(queryWrapper);
         //导出文件名称
-        mv.addObject(NormalExcelConstants.FILE_NAME, "用户广告计划信息统计列表");
+        mv.addObject(NormalExcelConstants.FILE_NAME, "用户平台广告计划信息列表");
         mv.addObject(NormalExcelConstants.CLASS, CustomerPlanStatisticInfo.class);
-        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("用户广告计划信息统计列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("用户平台广告计划信息列表数据", "导出人:Jeecg", "导出信息"));
         mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
         return mv;
     }

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

@@ -0,0 +1,253 @@
+package org.jeecg.modules.ctop.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.ctop.entity.PlatformCampaignStatisticInfo;
+import org.jeecg.modules.ctop.service.IPlatformCampaignStatisticInfoService;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+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 com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * @Description: 快手平台广告组信息
+ * @Author: jeecg-boot
+ * @Date: 2019-08-23
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags = "快手平台广告组信息")
+@RestController
+@RequestMapping("/ctop/platformCampaignStatisticInfo")
+public class PlatformCampaignStatisticInfoController {
+    @Autowired
+    private IPlatformCampaignStatisticInfoService platformCampaignStatisticInfoService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param platformCampaignStatisticInfo
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "快手平台广告组信息-分页列表查询")
+    @ApiOperation(value = "快手平台广告组信息-分页列表查询", notes = "快手平台广告组信息-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<PlatformCampaignStatisticInfo>> queryPageList(PlatformCampaignStatisticInfo platformCampaignStatisticInfo,
+                                                                      @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                                      @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                                      HttpServletRequest req) {
+        Result<IPage<PlatformCampaignStatisticInfo>> result = new Result<IPage<PlatformCampaignStatisticInfo>>();
+        QueryWrapper<PlatformCampaignStatisticInfo> queryWrapper = QueryGenerator.initQueryWrapper(platformCampaignStatisticInfo, req.getParameterMap());
+        Page<PlatformCampaignStatisticInfo> page = new Page<PlatformCampaignStatisticInfo>(pageNo, pageSize);
+        IPage<PlatformCampaignStatisticInfo> pageList = platformCampaignStatisticInfoService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param platformCampaignStatisticInfo
+     * @return
+     */
+    @AutoLog(value = "快手平台广告组信息-添加")
+    @ApiOperation(value = "快手平台广告组信息-添加", notes = "快手平台广告组信息-添加")
+    @PostMapping(value = "/add")
+    public Result<PlatformCampaignStatisticInfo> add(@RequestBody PlatformCampaignStatisticInfo platformCampaignStatisticInfo) {
+        Result<PlatformCampaignStatisticInfo> result = new Result<PlatformCampaignStatisticInfo>();
+        try {
+            platformCampaignStatisticInfoService.save(platformCampaignStatisticInfo);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param platformCampaignStatisticInfo
+     * @return
+     */
+    @AutoLog(value = "快手平台广告组信息-编辑")
+    @ApiOperation(value = "快手平台广告组信息-编辑", notes = "快手平台广告组信息-编辑")
+    @PutMapping(value = "/edit")
+    public Result<PlatformCampaignStatisticInfo> edit(@RequestBody PlatformCampaignStatisticInfo platformCampaignStatisticInfo) {
+        Result<PlatformCampaignStatisticInfo> result = new Result<PlatformCampaignStatisticInfo>();
+        PlatformCampaignStatisticInfo platformCampaignStatisticInfoEntity = platformCampaignStatisticInfoService.getById(platformCampaignStatisticInfo.getId());
+        if (platformCampaignStatisticInfoEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = platformCampaignStatisticInfoService.updateById(platformCampaignStatisticInfo);
+            //TODO 返回false说明什么?
+            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 {
+            platformCampaignStatisticInfoService.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<PlatformCampaignStatisticInfo> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<PlatformCampaignStatisticInfo> result = new Result<PlatformCampaignStatisticInfo>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.platformCampaignStatisticInfoService.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<PlatformCampaignStatisticInfo> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<PlatformCampaignStatisticInfo> result = new Result<PlatformCampaignStatisticInfo>();
+        PlatformCampaignStatisticInfo platformCampaignStatisticInfo = platformCampaignStatisticInfoService.getById(id);
+        if (platformCampaignStatisticInfo == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(platformCampaignStatisticInfo);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<PlatformCampaignStatisticInfo> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                PlatformCampaignStatisticInfo platformCampaignStatisticInfo = JSON.parseObject(deString, PlatformCampaignStatisticInfo.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(platformCampaignStatisticInfo, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<PlatformCampaignStatisticInfo> pageList = platformCampaignStatisticInfoService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "快手平台广告组信息列表");
+        mv.addObject(NormalExcelConstants.CLASS, PlatformCampaignStatisticInfo.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<PlatformCampaignStatisticInfo> listPlatformCampaignStatisticInfos = ExcelImportUtil.importExcel(file.getInputStream(), PlatformCampaignStatisticInfo.class, params);
+                platformCampaignStatisticInfoService.saveBatch(listPlatformCampaignStatisticInfos);
+                return Result.ok("文件导入成功!数据行数:" + listPlatformCampaignStatisticInfos.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("文件导入失败!");
+    }
+
+}

+ 50 - 7
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ReportController.java

@@ -2,16 +2,18 @@ package org.jeecg.modules.ctop.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import org.jeecg.common.util.DateUtils;
+import org.jeecg.common.util.ResultMapUtils;
+import org.jeecg.common.util.StatusCode;
 import org.jeecg.modules.ctop.entity.CTopOauthToken;
 import org.jeecg.modules.ctop.service.ICTopOauthTokenService;
 import org.jeecg.modules.ctop.service.IReportService;
 import org.jeecg.modules.kuaishou.service.IKuaishouInterfaceService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -67,16 +69,57 @@ public class ReportController {
     private IKuaishouInterfaceService kuaishouInterfaceService;
 
     /**
-     * 360借条报表数据
+     * 360借条报表客户后台数据
      */
     @GetMapping("jietiao/customer/insert")
     public Map<String, Object> jietiaoCustomerInsert() {
         Map<String, Object> result = new HashMap<>();
-        String csvPath = "D:\\工作文件\\360借条\\effect_unit_2019-08-02-00_2019-08-02-00.csv";
-        reportService.insertCustomerInfo(csvPath);
+        String csvPath = "D:\\工作文件\\360借条\\测试数据\\客户后台数据.csv";
+        reportService.insertCustomerInfo(csvPath, "utf8");
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
+        return result;
+    }
+
+    /**
+     * 360借条报表平台数据
+     */
+    @GetMapping("jietiao/plateform/insert")
+    public Map<String, Object> jietiaoPlatformInsert() {
+        Map<String, Object> result = new HashMap<>();
+        String csvPath = "D:\\工作文件\\360借条\\测试数据\\快手后台数据.csv";
+        reportService.insertPlatformInfo(csvPath, "gb2312", 4L);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
         return result;
     }
 
+    @PostMapping("debitAuto")
+    Map<String, Object> debitAuto(@RequestBody JSONObject data) {
+        return reportService.debitAuto(data);
+    }
+
+    @GetMapping("download/file")
+    public void downLoadFile(String path, HttpServletResponse response) {
+        try {
+            File file = new File(path);
+            InputStream fis = new BufferedInputStream(new FileInputStream(file));
+            byte[] buffer = new byte[fis.available()];
+            fis.read(buffer);
+            fis.close();
+            response.reset();
+            // 设置response的Header
+            response.addHeader("Content-Length", "" + file.length());
+            response.setContentType("text/csv");
+            response.setHeader("Content-Disposition", "attachment;fileName=template.xlsx");
+
+            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
+            toClient.write(buffer);
+            toClient.flush();
+            toClient.close();
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+    }
+
     @Autowired
     private IReportService reportService;
 }

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

@@ -29,28 +29,4 @@ public class TestController {
         System.err.println(json);
         createInternalService.createInternal(json);
     }
-
-    public static void main(String[] args) throws Exception {
-        File f = new File("D:\\upload\\excel\\template.xlsx");
-        InputStream inputStream = new FileInputStream(f);
-        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream);
-//        //获取第一个sheet
-        XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
-        for (int i = 1; i < 6; i++) {
-            System.out.println("i:" + i);
-            Row row = xssfSheet.getRow(i);
-            for (int j = 1; j < 4; j++) {
-                Cell cell = row.createCell(j);
-                if (j == 3) {
-                    cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
-                    cell.setCellFormula("B2*C2");
-                } else {
-                    cell.setCellValue(i);
-                }
-            }
-        }
-        FileOutputStream fileOutputStream = new FileOutputStream("D:\\upload\\excel\\get.xlsx");
-        xssfWorkbook.write(fileOutputStream);
-        fileOutputStream.close();
-    }
 }

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

@@ -1,9 +1,7 @@
 package org.jeecg.modules.ctop.entity;
 
 import java.io.Serializable;
-import java.math.BigDecimal;
 import java.util.Date;
-
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -18,16 +16,16 @@ import org.springframework.format.annotation.DateTimeFormat;
 import org.jeecgframework.poi.excel.annotation.Excel;
 
 /**
- * @Description: 用户广告计划信息统计
+ * @Description: 用户平台广告计划信息
  * @Author: jeecg-boot
- * @Date: 2019-08-21
+ * @Date: 2019-08-23
  * @Version: V1.0
  */
 @Data
 @TableName("ctop_kuaishou_customer_plan_statistic_info")
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
-@ApiModel(value = "ctop_kuaishou_customer_plan_statistic_info对象", description = "用户广告计划信息统计")
+@ApiModel(value = "ctop_kuaishou_customer_plan_statistic_info对象", description = "用户平台广告计划信息")
 public class CustomerPlanStatisticInfo {
 
     /**
@@ -37,107 +35,113 @@ public class CustomerPlanStatisticInfo {
     @ApiModelProperty(value = "id")
     private Long id;
     /**
-     * 渠道类型
+     * 统计时间
      */
-    @Excel(name = "渠道类型", width = 15)
-    @ApiModelProperty(value = "渠道类型")
-    private String media;
+    @Excel(name = "统计时间", width = 15)
+    @ApiModelProperty(value = "统计时间")
+    private String statisticDate;
     /**
-     * 统计日期
+     * 结算方
      */
-    @Excel(name = "统计日期", width = 15)
-    @ApiModelProperty(value = "统计日期")
-    private String statisticDate;
+    @Excel(name = "结算方", width = 15)
+    @ApiModelProperty(value = "结算方")
+    private String settler;
     /**
-     * planInfo
+     * 合同编号
      */
-    @Excel(name = "planInfo", width = 15)
-    @ApiModelProperty(value = "planInfo")
-    private String planInfo;
+    @Excel(name = "合同编号", width = 15)
+    @ApiModelProperty(value = "合同编号")
+    private String contractNo;
     /**
-     * campaignInfo
+     * 账户名称
      */
-    @Excel(name = "campaignInfo", width = 15)
-    @ApiModelProperty(value = "campaignInfo")
-    private String campaignInfo;
+    @Excel(name = "账户名称", width = 15)
+    @ApiModelProperty(value = "账户名称")
+    private String accountName;
     /**
-     * 广告组code
+     * 三级分类
      */
-    @Excel(name = "广告组code", width = 15)
-    @ApiModelProperty(value = "广告组code")
-    private String campaignCode;
+    @Excel(name = "三级分类", width = 15)
+    @ApiModelProperty(value = "三级分类")
+    private String thirdCategory;
     /**
-     * 花费
+     * 渠道
      */
-    @Excel(name = "花费", width = 15)
-    @ApiModelProperty(value = "花费")
-    private java.math.BigDecimal cost;
+    @Excel(name = "渠道", width = 15)
+    @ApiModelProperty(value = "渠道")
+    private String channelName;
     /**
-     * 曝光数
+     * 渠道id
      */
-    @Excel(name = "曝光数", width = 15)
-    @ApiModelProperty(value = "曝光数")
-    private Long exposure;
+    @Excel(name = "渠道id", width = 15)
+    @ApiModelProperty(value = "渠道id")
+    private String channnelId;
     /**
-     * 点击数
+     * 子渠道
      */
-    @Excel(name = "点击数", width = 15)
-    @ApiModelProperty(value = "点击数")
-    private Integer click;
+    @Excel(name = "子渠道", width = 15)
+    @ApiModelProperty(value = "子渠道")
+    private String childChannel;
     /**
-     * 行为数
+     * childChannelId
      */
-    @Excel(name = "行为数", width = 15)
-    @ApiModelProperty(value = "行为数")
-    private Integer action;
+    @Excel(name = "childChannelId", width = 15)
+    @ApiModelProperty(value = "childChannelId")
+    private String childChannelId;
     /**
-     * 点击率
+     * 活动
      */
-    @Excel(name = "点击率", width = 15)
-    @ApiModelProperty(value = "点击率")
-    private String clickRate;
+    @Excel(name = "活动", width = 15)
+    @ApiModelProperty(value = "活动")
+    private String action;
     /**
-     * 行为率
+     * 广告内容
      */
-    @Excel(name = "行为率", width = 15)
-    @ApiModelProperty(value = "行为率")
-    private String actionRate;
+    @Excel(name = "广告内容", width = 15)
+    @ApiModelProperty(value = "广告内容")
+    private String advertiserInfo;
     /**
-     * 平均千次曝光花费
+     * 广告关键字
      */
-    @Excel(name = "平均千次曝光花费", width = 15)
-    @ApiModelProperty(value = "平均千次曝光花费")
-    private java.math.BigDecimal thousandsExposureCost;
+    @Excel(name = "广告关键字", width = 15)
+    @ApiModelProperty(value = "广告关键字")
+    private String advertiserKeywords;
     /**
-     * 平均点击单价
+     * 广告组代码
      */
-    @Excel(name = "平均点击单价", width = 15)
-    @ApiModelProperty(value = "平均点击单价")
-    private java.math.BigDecimal averageClickCost;
+    @Excel(name = "广告组代码", width = 15)
+    @ApiModelProperty(value = "广告组代码")
+    private String campaignCode;
     /**
-     * 平均行为单价
+     * 注册用户数
      */
-    @Excel(name = "平均行为单价", width = 15)
-    @ApiModelProperty(value = "平均行为单价")
-    private java.math.BigDecimal averageActionCost;
+    @Excel(name = "注册用户数", width = 15)
+    @ApiModelProperty(value = "注册用户数")
+    private Integer registAccountNum;
     /**
-     * 提交按钮点击
+     * 完件用户
      */
-    @Excel(name = "提交按钮点击", width = 15)
-    @ApiModelProperty(value = "提交按钮点击")
-    private Integer submitButtonClick;
+    @Excel(name = "完件用户", width = 15)
+    @ApiModelProperty(value = "完件用户")
+    private Integer completeUser;
     /**
-     * 表单提交率
+     * 预估授信人数
      */
-    @Excel(name = "表单提交率", width = 15)
-    @ApiModelProperty(value = "表单提交率")
-    private String formSubmissionRate;
+    @Excel(name = "预估授信人数", width = 15)
+    @ApiModelProperty(value = "预估授信人数")
+    private Integer estimatedCreditNumber;
     /**
-     * 表单提交单价
+     * 当日注册且完件数
      */
-    @Excel(name = "表单提交单价", width = 15)
-    @ApiModelProperty(value = "表单提交单价")
-    private java.math.BigDecimal formSubmissionPrice;
+    @Excel(name = "当日注册且完件数", width = 15)
+    @ApiModelProperty(value = "当日注册且完件数")
+    private Integer registComplateNumber;
+    /**
+     * estimatedRegistCreditNumber
+     */
+    @Excel(name = "estimatedRegistCreditNumber", width = 15)
+    @ApiModelProperty(value = "estimatedRegistCreditNumber")
+    private Integer estimatedRegistCreditNumber;
     /**
      * createTime
      */
@@ -149,41 +153,45 @@ public class CustomerPlanStatisticInfo {
     @ApiModelProperty(value = "updateTime")
     private Date updateTime;
 
-    public CustomerPlanStatisticInfo() {
-    }
-
     public CustomerPlanStatisticInfo(String[] record) {
-        this.media = "2";
         String date = record[0];
         this.statisticDate = date;
-        String plan = record[1];
-        this.planInfo = plan;
-        String campaign = record[2];
-        this.campaignInfo = campaign;
-        this.campaignCode = campaign.substring(0, campaign.indexOf("-"));
-        String cost = record[3];
-        this.cost = new BigDecimal(cost);
-        String bg = record[4];
-        this.exposure = Long.parseLong(bg);
-        String click = record[5];
-        this.click = Integer.parseInt(click);
-        String action = record[6];
-        this.action = Integer.parseInt(action);
-        String clickRate = record[7];
-        this.clickRate = clickRate;
-        String actionRate = record[8];
-        this.actionRate = actionRate;
-        String tbgrate = record[9];
-        this.thousandsExposureCost = new BigDecimal(tbgrate);
-        String averageClickCost = record[10];
-        this.averageClickCost = new BigDecimal(averageClickCost);
-        String averageActionCost = record[11];
-        this.averageActionCost = new BigDecimal(averageActionCost);
-        String submitButtonClick = record[12];
-        this.submitButtonClick = Integer.parseInt(submitButtonClick);
-        String formSubmmitRate = record[13];
-        this.formSubmissionRate = formSubmmitRate;
-        String formSubmitCost = record[14];
-        this.formSubmissionPrice = new BigDecimal(formSubmitCost);
-    }
+        String settler = record[1];
+        this.settler = settler;
+        String contractNo = record[2];
+        this.contractNo = contractNo;
+        String accountName = record[3];
+        this.accountName = accountName;
+        String thirdCategory = record[4];
+        this.thirdCategory = thirdCategory;
+        String channelName = record[5];
+        this.channelName = channelName;
+        String channelId = record[6];
+        this.channnelId = channelId;
+        this.childChannel = record[7];
+        this.childChannelId = record[8];
+        this.action = record[9];
+        this.advertiserInfo = record[10];
+        String campaignCode = advertiserInfo.replace("xyk-", "").replace("kswj-", "");
+        if (null != campaignCode && !"".equals(campaignCode)) {
+            if (campaignCode.indexOf("-") >= 0) {
+                this.campaignCode = campaignCode.substring(0, campaignCode.indexOf("-"));
+            } else {
+                this.campaignCode = campaignCode;
+            }
+        } else {
+            this.campaignCode = "";
+        }
+        this.advertiserKeywords = record[11];
+        this.registAccountNum = Integer.parseInt(record[12]);
+        this.completeUser = Integer.parseInt(record[13]);
+        this.estimatedCreditNumber = Integer.parseInt(record[14]);
+		this.registComplateNumber = Integer.parseInt(record[15]);
+		this.estimatedRegistCreditNumber = Integer.parseInt(record[16]);
+		this.createTime = new Date();
+		this.updateTime = new Date();
+	}
+
+	public CustomerPlanStatisticInfo() {
+	}
 }

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

@@ -0,0 +1,230 @@
+package org.jeecg.modules.ctop.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * @Description: 快手平台广告组信息
+ * @Author: jeecg-boot
+ * @Date: 2019-08-23
+ * @Version: V1.0
+ */
+@Data
+@TableName("ctop_kuaishou_platform_campaign_statistic_info")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_platform_campaign_statistic_info对象", description = "快手平台广告组信息")
+public class PlatformCampaignStatisticInfo {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 用户id
+     */
+    @Excel(name = "用户id", width = 15)
+    @ApiModelProperty(value = "用户id")
+    private Long accountId;
+    /**
+     * 统计日期
+     */
+    @Excel(name = "统计日期", width = 15)
+    @ApiModelProperty(value = "统计日期")
+    private String statisticDate;
+    /**
+     * 广告计划
+     */
+    @Excel(name = "广告计划", width = 15)
+    @ApiModelProperty(value = "广告计划")
+    private String planInfo;
+    /**
+     * 广告组
+     */
+    @Excel(name = "广告组", width = 15)
+    @ApiModelProperty(value = "广告组")
+    private String campaignInfo;
+    /**
+     * 广告组code
+     */
+    @Excel(name = "广告组code", width = 15)
+    @ApiModelProperty(value = "广告组code")
+    private String campaignCode;
+    /**
+     * 花费
+     */
+    @Excel(name = "花费", width = 15)
+    @ApiModelProperty(value = "花费")
+    private java.math.BigDecimal cost;
+    /**
+     * 封面曝光数
+     */
+    @Excel(name = "封面曝光数", width = 15)
+    @ApiModelProperty(value = "封面曝光数")
+    private Integer coverExposure;
+    /**
+     * 封面点击数
+     */
+    @Excel(name = "封面点击数", width = 15)
+    @ApiModelProperty(value = "封面点击数")
+    private Integer coverClick;
+    /**
+     * 素材曝光数
+     */
+    @Excel(name = "素材曝光数", width = 15)
+    @ApiModelProperty(value = "素材曝光数")
+    private Integer metarialExposure;
+    /**
+     * 行为数
+     */
+    @Excel(name = "行为数", width = 15)
+    @ApiModelProperty(value = "行为数")
+    private Integer action;
+    /**
+     * 封面点击率
+     */
+    @Excel(name = "封面点击率", width = 15)
+    @ApiModelProperty(value = "封面点击率")
+    private String coverClickRate;
+    /**
+     * 行为率
+     */
+    @Excel(name = "行为率", width = 15)
+    @ApiModelProperty(value = "行为率")
+    private String actionRate;
+    /**
+     * 平均千次封面曝光花费
+     */
+    @Excel(name = "平均千次封面曝光花费", width = 15)
+    @ApiModelProperty(value = "平均千次封面曝光花费")
+    private java.math.BigDecimal thousandsCoverExposureCost;
+    /**
+     * 平均封面点击单价
+     */
+    @Excel(name = "平均封面点击单价", width = 15)
+    @ApiModelProperty(value = "平均封面点击单价")
+    private java.math.BigDecimal averageCoverClickCost;
+    /**
+     * 平均行为单价
+     */
+    @Excel(name = "平均行为单价", width = 15)
+    @ApiModelProperty(value = "平均行为单价")
+    private java.math.BigDecimal averageActionCost;
+    /**
+     * 提交按钮点击
+     */
+    @Excel(name = "提交按钮点击", width = 15)
+    @ApiModelProperty(value = "提交按钮点击")
+    private Integer submitButtonClick;
+    /**
+     * 表单提交率
+     */
+    @Excel(name = "表单提交率", width = 15)
+    @ApiModelProperty(value = "表单提交率")
+    private String formSubmissionRate;
+    /**
+     * 表单提交单价
+     */
+    @Excel(name = "表单提交单价", width = 15)
+    @ApiModelProperty(value = "表单提交单价")
+    private java.math.BigDecimal formSubmissionPrice;
+    /**
+     * 落地页完成件数
+     */
+    @Excel(name = "落地页完成件数", width = 15)
+    @ApiModelProperty(value = "落地页完成件数")
+    private Integer pageCompleteNum;
+    /**
+     * 落地页完件成本
+     */
+    @Excel(name = "落地页完件成本", width = 15)
+    @ApiModelProperty(value = "落地页完件成本")
+    private java.math.BigDecimal pageCompleteCost;
+    /**
+     * 落地页授信数
+     */
+    @Excel(name = "落地页授信数", width = 15)
+    @ApiModelProperty(value = "落地页授信数")
+    private Integer pageCreditNum;
+
+    @Excel(name = "落地页授信成本", width = 15)
+    @ApiModelProperty(value = "落地页授信成本")
+    private BigDecimal pageCreditCost;
+    /**
+     * 落地页授信率
+     */
+    @Excel(name = "落地页授信率", width = 15)
+    @ApiModelProperty(value = "落地页授信率")
+    private String pageCreditRate;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+
+    public PlatformCampaignStatisticInfo() {
+    }
+
+    public PlatformCampaignStatisticInfo(String[] record, Long accountId) {
+
+        this.accountId = accountId;
+        if (null != record[0] && !"".equals(record[0])) {
+
+            this.statisticDate = record[0];
+            this.planInfo = record[1];
+            String campaignInfo = record[2];
+            this.campaignInfo = campaignInfo;
+            if (null != campaignInfo && !"".equals(campaignInfo)) {
+                if (campaignInfo.indexOf("-") >= 0) {
+                    this.campaignCode = campaignInfo.substring(0, campaignInfo.indexOf("-"));
+                } else {
+                    this.campaignCode = campaignCode;
+                }
+            } else {
+                this.campaignCode = "";
+            }
+
+            this.cost = new BigDecimal(record[3]);
+            this.coverExposure = Integer.parseInt(record[4]);
+            this.coverClick = Integer.parseInt(record[5]);
+            this.metarialExposure = Integer.parseInt(record[6]);
+            this.action = Integer.parseInt(record[7]);
+            this.coverClickRate = record[8];
+            this.actionRate = record[9];
+            this.thousandsCoverExposureCost = new BigDecimal(record[10]);
+            this.averageCoverClickCost = new BigDecimal(record[11]);
+            this.averageActionCost = new BigDecimal(record[12]);
+            this.submitButtonClick = Integer.parseInt(record[13]);
+            this.formSubmissionRate = record[14];
+            this.formSubmissionPrice = new BigDecimal(record[15]);
+            this.pageCompleteNum = Integer.parseInt(record[16]);
+            this.pageCompleteCost = new BigDecimal(record[17]);
+            this.pageCreditNum = Integer.parseInt(record[18]);
+            this.pageCreditCost = new BigDecimal(record[19]);
+            this.pageCreditRate = record[20];
+            this.createTime = new Date();
+            this.updateTime = new Date();
+        }
+    }
+}

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/CustomerPlanStatisticInfoMapper.java

@@ -7,9 +7,9 @@ import org.jeecg.modules.ctop.entity.CustomerPlanStatisticInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
- * @Description: 用户广告计划信息统计
+ * @Description: 用户平台广告计划信息
  * @Author: jeecg-boot
- * @Date: 2019-08-21
+ * @Date: 2019-08-23
  * @Version: V1.0
  */
 public interface CustomerPlanStatisticInfoMapper extends BaseMapper<CustomerPlanStatisticInfo> {

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

@@ -0,0 +1,20 @@
+package org.jeecg.modules.ctop.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.ctop.entity.PlatformCampaignStatisticInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.ctop.vo.StatisticCampaignVo;
+
+/**
+ * @Description: 快手平台广告组信息
+ * @Author: jeecg-boot
+ * @Date: 2019-08-23
+ * @Version: V1.0
+ */
+public interface PlatformCampaignStatisticInfoMapper extends BaseMapper<PlatformCampaignStatisticInfo> {
+    List<StatisticCampaignVo> getVoByParams(@Param("statisticDate") String statisticDate, @Param("accountId") Long accountId);
+
+    StatisticCampaignVo getTotalStatisticVoByparams(@Param("statisticDate") String statisticDate, @Param("accountId") Long accountId);
+}

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

@@ -0,0 +1,163 @@
+<?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.PlatformCampaignStatisticInfoMapper">
+    <resultMap id="voMap" type="org.jeecg.modules.ctop.vo.StatisticCampaignVo">
+        <result column="statisticDate" property="statisticDate"/>
+        <result column="proxy" property="proxy"/>
+        <result column="deliverySystem" property="deliverySystem"/>
+        <result column="channelName" property="channelName"/>
+        <result column="content" property="content"/>
+        <result column="meterial" property="meterial"/>
+        <result column="priceType" property="priceType"/>
+        <result column="directCondition" property="directCondition"/>
+        <result column="basicDirect" property="basicDirect"/>
+        <result column="cost" property="cost"/>
+        <result column="coverViews" property="coverViews"/>
+        <result column="coverClick" property="coverClick"/>
+        <result column="creditRegistRateDay" property="creditRegistRateDay"/>
+        <result column="creditRateDay" property="creditRateDay"/>
+        <result column="completeRateDay" property="completeRateDay"/>
+        <result column="registCreditRate" property="registCreditRate"/>
+        <result column="registCompleteRate" property="registCompleteRate"/>
+        <result column="creditRate" property="creditRate"/>
+        <result column="completeRate" property="completeRate"/>
+        <result column="materialViews" property="materialViews"/>
+        <result column="actions" property="actions"/>
+        <result column="clickRate" property="clickRate"/>
+        <result column="actionClickRate" property="actionClickRate"/>
+        <result column="abctr" property="abctr"/>
+        <result column="clickPrice" property="clickPrice"/>
+        <result column="actionPrice" property="actionPrice"/>
+        <result column="registUserNum" property="registUserNum"/>
+        <result column="complateUserNum" property="complateUserNum"/>
+        <result column="creditUserNum" property="creditUserNum"/>
+        <result column="registCompleteNum" property="registCompleteNum"/>
+        <result column="registCreditNum" property="registCreditNum"/>
+        <result column="registPrice" property="registPrice"/>
+        <result column="completePrice" property="completePrice"/>
+        <result column="creditPrice" property="creditPrice"/>
+        <result column="registCompletePrice" property="registCompletePrice"/>
+        <result column="registCreditPrice" property="registCreditPrice"/>
+        <result column="clickRegistRate" property="clickRegistRate"/>
+        <result column="actionRegistRate" property="actionRegistRate"/>
+    </resultMap>
+
+    <select id="getTotalStatisticVoByparams" resultMap="voMap">
+        SELECT
+	SUM(a.cost) AS 'cost',
+	SUM(a.coverViews) AS 'coverViews',
+	SUM(a.coverClick) AS 'coverClick',
+	SUM(a.materialViews) AS 'materialViews',
+	SUM(a.actions) AS'actions',
+	SUM(a.coverClick) / SUM(a.coverViews) * 100 AS 'clickRate',
+	SUM(a.actions) / SUM(a.coverClick) * 100 AS 'actionClickRate',
+	SUM(a.actions) / SUM(a.coverClick) * SUM(a.coverClick) / SUM(a.coverViews) * 10000 AS 'abctr',
+	SUM(a.cost) / SUM(a.coverClick) 'clickPrice',
+	SUM(a.cost) / SUM(a.actions) 'actionPrice',
+	sum(a.registUserNum) AS 'registUserNum',
+	sum(a.complateUserNum) AS 'complateUserNum',
+	sum(a.creditUserNum) AS 'creditUserNum',
+	sum(a.registCompleteNum) AS 'registCompleteNum',
+	sum(a.registCreditNum) AS 'registCreditNum',
+	SUM(a.cost) / sum(a.registUserNum) AS 'registPrice',
+	SUM(a.cost) / sum(a.complateUserNum) AS 'completePrice',
+	SUM(a.cost) / sum(a.creditUserNum) AS 'creditPrice',
+	SUM(a.cost) / sum(a.registCompleteNum) AS 'registCompletePrice',
+	SUM(a.cost) / sum(a.registCreditNum) AS 'registCreditPrice',
+	sum(a.registUserNum) / SUM(a.coverClick) * 100 AS 'clickRegistRate',
+	sum(a.registUserNum) / SUM(a.actions) * 100 AS 'actionRegistRate',
+	sum(a.complateUserNum) / sum(a.registUserNum) * 100 AS 'completeRate',
+	sum(a.creditUserNum) / sum(a.complateUserNum) * 100 AS 'creditRate',
+	sum(a.registCompleteNum) / sum(a.registUserNum) * 100 AS 'registCompleteRate',
+	sum(a.creditUserNum) / sum(a.complateUserNum) * 100 AS 'registCreditRate',
+	sum(a.registCompleteNum) / sum(a.complateUserNum) * 100 AS 'completeRateDay',
+	sum(a.registCreditNum) / sum(a.creditUserNum) * 100 AS 'creditRateDay',
+	sum(a.registCreditNum) / sum(a.registUserNum) * 100 AS 'creditRegistRateDay'
+FROM
+	(
+		SELECT
+			campaign.statistic_date AS 'statisticDate',
+			plan.settler AS 'proxy',
+			plan.child_channel AS 'channelName',
+			campaign.campaign_info AS 'content',
+			campaign.cost AS 'cost',
+			campaign.cover_exposure AS 'coverViews',
+			campaign.cover_click AS 'coverClick',
+			campaign.metarial_exposure AS 'materialViews',
+			campaign.action AS 'actions',
+			campaign.cover_click / campaign.cover_exposure * 100 AS 'clickRate',
+			campaign.action / campaign.cover_click * 100 AS 'actionClickRate',
+			campaign.action / campaign.cover_click * campaign.cover_click / campaign.cover_exposure * 10000 AS 'abctr',
+			campaign.cost / campaign.cover_click 'clickPrice',
+			campaign.cost / campaign.action 'actionPrice',
+			sum(plan.regist_account_num) AS 'registUserNum',
+			sum(plan.complete_user) AS 'complateUserNum',
+			sum(plan.estimated_credit_number) AS 'creditUserNum',
+			sum(plan.regist_complate_number) AS 'registCompleteNum',
+			sum(plan.estimated_regist_credit_number) AS 'registCreditNum',
+			campaign.cost / sum(plan.regist_account_num) AS 'registPrice',
+			campaign.cost / sum(plan.complete_user) AS 'completePrice',
+			campaign.cost / sum(plan.estimated_credit_number) AS 'creditPrice',
+			campaign.cost / sum(plan.regist_complate_number) AS 'registCompletePrice',
+			campaign.cost / sum(plan.estimated_regist_credit_number) AS 'registCreditPrice',
+			sum(plan.regist_account_num) / campaign.cover_click * 100 AS 'clickRegistRate',
+			sum(plan.regist_account_num) / campaign.action * 100 AS 'actionRegistRate',
+			sum(plan.complete_user) / sum(plan.regist_account_num) * 100 AS 'completeRate',
+			sum(plan.estimated_credit_number) / sum(plan.complete_user) * 100 AS 'creditRate',
+			sum(plan.regist_complate_number) / sum(plan.regist_account_num) * 100 AS 'registCompleteRate',
+			sum(plan.estimated_credit_number) / sum(plan.complete_user) * 100 AS 'registCreditRate',
+			sum(plan.regist_complate_number) / sum(plan.complete_user) * 100 AS 'completeRateDay',
+			sum(plan.estimated_regist_credit_number) / sum(plan.estimated_credit_number) * 100 AS 'creditRateDay',
+			sum(plan.estimated_regist_credit_number) / sum(plan.regist_account_num) * 100 AS 'creditRegistRateDay'
+		FROM
+			ctop_kuaishou_customer_plan_statistic_info plan
+		LEFT JOIN ctop_kuaishou_platform_campaign_statistic_info campaign ON plan.campaign_code = campaign.campaign_code
+		WHERE
+			campaign.account_id = #{accountId}
+		AND campaign.statistic_date =  #{statisticDate}
+		GROUP BY
+			plan.campaign_code
+	) AS a
+    </select>
+    <select id="getVoByParams" resultMap="voMap">
+        SELECT
+       campaign.statistic_date as 'statisticDate',
+       plan.settler as 'proxy',
+       plan.child_channel as 'channelName',
+       campaign.campaign_info as 'content',
+       campaign.cost as 'cost',
+       campaign.cover_exposure as 'coverViews',
+       campaign.cover_click as 'coverClick',
+       campaign.metarial_exposure as 'materialViews',
+       campaign.action as 'actions',
+       campaign.cover_click/campaign.cover_exposure*100 as 'clickRate',
+       campaign.action/campaign.cover_click*100 as 'actionClickRate',
+       campaign.action/campaign.cover_click*campaign.cover_click/campaign.cover_exposure*10000 as 'abctr',
+       campaign.cost/campaign.cover_click 'clickPrice',
+       campaign.cost/campaign.action 'actionPrice',
+       sum(plan.regist_account_num)as 'registUserNum',
+       sum(plan.complete_user) as 'complateUserNum',
+       sum(plan.estimated_credit_number) as 'creditUserNum',
+       sum(plan.regist_complate_number)as 'registCompleteNum',
+       sum(plan.estimated_regist_credit_number) as 'registCreditNum',
+       campaign.cost/sum(plan.regist_account_num) as 'registPrice',
+       campaign.cost/sum(plan.complete_user) as 'completePrice',
+       campaign.cost/sum(plan.estimated_credit_number) as 'creditPrice',
+       campaign.cost/sum(plan.regist_complate_number) as 'registCompletePrice',
+       campaign.cost/sum(plan.estimated_regist_credit_number) as 'registCreditPrice',
+       sum(plan.regist_account_num)/campaign.cover_click*100 as 'clickRegistRate',
+       sum(plan.regist_account_num)/campaign.action*100 as 'actionRegistRate',
+       sum(plan.complete_user)/sum(plan.regist_account_num)*100 as 'completeRate',
+       sum(plan.estimated_credit_number)/sum(plan.complete_user)*100 as 'creditRate',
+       sum(plan.regist_complate_number)/sum(plan.regist_account_num)*100 as 'registCompleteRate',
+       sum(plan.estimated_credit_number)/sum(plan.complete_user)*100 as 'registCreditRate',
+       sum(plan.regist_complate_number)/sum(plan.complete_user)*100 as 'completeRateDay',
+       sum(plan.estimated_regist_credit_number)/sum(plan.estimated_credit_number)*100 as 'creditRateDay',
+       sum(plan.estimated_regist_credit_number)/sum(plan.regist_account_num)*100 as 'creditRegistRateDay'
+FROM ctop_kuaishou_customer_plan_statistic_info plan
+         LEFT JOIN ctop_kuaishou_platform_campaign_statistic_info campaign
+                   ON plan.campaign_code = campaign.campaign_code
+        where campaign.account_id = #{accountId} and campaign.statistic_date = #{statisticDate}
+group by plan.campaign_code
+    </select>
+</mapper>

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/ICustomerPlanStatisticInfoService.java

@@ -4,9 +4,9 @@ import org.jeecg.modules.ctop.entity.CustomerPlanStatisticInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
- * @Description: 用户广告计划信息统计
+ * @Description: 用户平台广告计划信息
  * @Author: jeecg-boot
- * @Date: 2019-08-21
+ * @Date: 2019-08-23
  * @Version: V1.0
  */
 public interface ICustomerPlanStatisticInfoService extends IService<CustomerPlanStatisticInfo> {

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

@@ -0,0 +1,14 @@
+package org.jeecg.modules.ctop.service;
+
+import org.jeecg.modules.ctop.entity.PlatformCampaignStatisticInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 快手平台广告组信息
+ * @Author: jeecg-boot
+ * @Date: 2019-08-23
+ * @Version: V1.0
+ */
+public interface IPlatformCampaignStatisticInfoService extends IService<PlatformCampaignStatisticInfo> {
+
+}

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

@@ -15,5 +15,9 @@ public interface IReportService {
 
     Map<String, Object> getAgentReport(JSONObject conditions);
 
-    void insertCustomerInfo(String csvPath);
+    void insertCustomerInfo(String csvPath, String charset);
+
+    void insertPlatformInfo(String excelPath, String charset, Long accountId);
+
+    Map<String, Object> debitAuto(JSONObject data);
 }

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CustomerPlanStatisticInfoServiceImpl.java

@@ -8,9 +8,9 @@ import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 /**
- * @Description: 用户广告计划信息统计
+ * @Description: 用户平台广告计划信息
  * @Author: jeecg-boot
- * @Date: 2019-08-21
+ * @Date: 2019-08-23
  * @Version: V1.0
  */
 @Service

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

@@ -0,0 +1,19 @@
+package org.jeecg.modules.ctop.service.impl;
+
+import org.jeecg.modules.ctop.entity.PlatformCampaignStatisticInfo;
+import org.jeecg.modules.ctop.mapper.PlatformCampaignStatisticInfoMapper;
+import org.jeecg.modules.ctop.service.IPlatformCampaignStatisticInfoService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 快手平台广告组信息
+ * @Author: jeecg-boot
+ * @Date: 2019-08-23
+ * @Version: V1.0
+ */
+@Service
+public class PlatformCampaignStatisticInfoServiceImpl extends ServiceImpl<PlatformCampaignStatisticInfoMapper, PlatformCampaignStatisticInfo> implements IPlatformCampaignStatisticInfoService {
+
+}

+ 393 - 7
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ReportServiceImpl.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.ctop.service.impl;
 
 import cn.com.ctop.common.utils.CsvUtils;
+import cn.com.ctop.common.utils.OSSUtils;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -9,18 +10,32 @@ import org.apache.http.entity.ContentType;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.poi.hssf.usermodel.HSSFDataFormat;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.jeecg.common.util.ResultMapUtils;
+import org.jeecg.common.util.StatusCode;
 import org.jeecg.modules.ctop.entity.CTopOauthToken;
 import org.jeecg.modules.ctop.entity.CustomerPlanStatisticInfo;
+import org.jeecg.modules.ctop.entity.PlatformCampaignStatisticInfo;
 import org.jeecg.modules.ctop.mapper.CustomerPlanStatisticInfoMapper;
+import org.jeecg.modules.ctop.mapper.PlatformCampaignStatisticInfoMapper;
 import org.jeecg.modules.ctop.service.ICTopOauthTokenService;
 import org.jeecg.modules.ctop.service.IReportService;
+import org.jeecg.modules.ctop.vo.StatisticCampaignVo;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
+import java.io.*;
+import java.net.HttpURLConnection;
 import java.net.URI;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -147,14 +162,14 @@ public class ReportServiceImpl implements IReportService {
     }
 
     @Override
-    public void insertCustomerInfo(String csvPath) {
+    public void insertCustomerInfo(String csvPath, String charset) {
         try {
-            List<String[]> data = CsvUtils.ReadCSV(csvPath);
+            List<String[]> data = CsvUtils.ReadCSV(csvPath, charset);
             if (null != data && data.size() > 1) {
                 for (int i = 1; i < data.size(); i++) {
                     String[] record = data.get(i);
                     CustomerPlanStatisticInfo statisticInfo = new CustomerPlanStatisticInfo(record);
-                    statisticInfoMapper.insert(statisticInfo);
+                    customerPlanStatisticInfoMapper.insert(statisticInfo);
                 }
             }
         } catch (IOException e) {
@@ -162,8 +177,379 @@ public class ReportServiceImpl implements IReportService {
         }
     }
 
+    @Override
+    public void insertPlatformInfo(String csvPath, String charset, Long accountId) {
+        try {
+            List<String[]> data = CsvUtils.ReadCSV(csvPath, charset);
+            if (null != data && data.size() > 1) {
+                for (int i = 1; i < data.size(); i++) {
+                    String[] record = data.get(i);
+                    PlatformCampaignStatisticInfo statisticInfo = new PlatformCampaignStatisticInfo(record, accountId);
+                    platformCampaignStatisticInfoMapper.insert(statisticInfo);
+                }
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Value("${jeecg.path.csv-upload}")
+    private String csvUploadPath;
+
+    @Override
+    public Map<String, Object> debitAuto(JSONObject data) {
+        Map<String, Object> resultMap = new HashMap<>();
+        String accountOneKsDataUrl = data.getString("accountOneKsDataUrl");
+        String accountFourKsDataUrl = data.getString("accountFourKsDataUrl");
+        String debitDataUrl = data.getString("debitDataUrl");
+        //1:文件下载入库
+        String accountOneKsDataPath = downLoadByURL(accountOneKsDataUrl);
+        String accountFourKsDataPath = downLoadByURL(accountFourKsDataUrl);
+        String debitDataPath = downLoadByURL(debitDataUrl);
+        //2:文件入库
+        this.insertPlatformInfo(accountOneKsDataPath, "gb2312", 1L);
+        this.insertPlatformInfo(accountFourKsDataPath, "gb2312", 4L);
+        this.insertCustomerInfo(debitDataPath, "gb2312");
+        //3:根据模板生成相应的excel模板文件
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/M/dd");
+        try {
+            String platformReportPath = getExcelDataPath(simpleDateFormat.format(new Date()), 1L, 4L);
+//            //4:同步上传到oss文件服务器
+//            String ossPath = OSSUtils.uploadFile2Oss(new File(platformReportPath));
+//            //5: 返回文件服务器访问链接
+            ResultMapUtils.setResultMap(resultMap, StatusCode.COMMON_SUCCESS.getCode());
+            resultMap.put("path", platformReportPath);
+            return resultMap;
+        } catch (Exception e) {
+            e.printStackTrace();
+            ResultMapUtils.setResultMap(resultMap, StatusCode.COMMON_SERVER_ERROR.getCode());
+            return resultMap;
+        }
+    }
+
+    public String getExcelDataPath(String date, Long accountId1, Long accountId4) throws Exception {
+
+        List<StatisticCampaignVo> statisticCampaign4Vos = statisticInfoMapper.getVoByParams(date, accountId4);
+        List<StatisticCampaignVo> statisticCampaign1Vos = statisticInfoMapper.getVoByParams(date, accountId1);
+
+        File f = new File(csvUploadPath + "template.xlsx");
+        InputStream inputStream = new FileInputStream(f);
+        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream);
+//        //获取第一个sheet
+        XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
+        CellStyle numbericCellStyle = xssfWorkbook.createCellStyle();
+        numbericCellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
+        int index;
+        for (index = 1; index < statisticCampaign1Vos.size() + 1; index++) {
+            StatisticCampaignVo vo = statisticCampaign1Vos.get(index - 1);
+            System.out.println(vo.toString());
+            String content = vo.getContent();
+            String[] contents = content.split("-");
+            Row row = xssfSheet.getRow(index);
+            setExcelRow(numbericCellStyle, vo, contents, row, "single");
+        }
+        Row totalRow1 = xssfSheet.getRow(index);
+        StatisticCampaignVo total = statisticInfoMapper.getTotalStatisticVoByparams(date, accountId1);
+        if (null != total) {
+            setExcelRow(numbericCellStyle, total, new String[]{}, totalRow1, "total1");
+        }
+        index++;
+        for (int j = 0; j < statisticCampaign4Vos.size(); j++) {
+            index++;
+            StatisticCampaignVo vo = statisticCampaign4Vos.get(j);
+            System.out.println(vo.toString());
+            String content = vo.getContent();
+            String[] contents = content.split("-");
+            Row row = xssfSheet.getRow(index);
+            setExcelRow(numbericCellStyle, vo, contents, row, "single");
+        }
+        index++;
+        Row totalRow4 = xssfSheet.getRow(index);
+        StatisticCampaignVo total1 = statisticInfoMapper.getTotalStatisticVoByparams(date, accountId4);
+        if (null != total1) {
+            setExcelRow(numbericCellStyle, total1, new String[]{}, totalRow4, "total4");
+        }
+
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-m-dd");
+        String path = csvUploadPath + "report_" + dateFormat.format(new Date()) + ".xlsx";
+        FileOutputStream fileOutputStream = new FileOutputStream(path);
+        xssfWorkbook.write(fileOutputStream);
+        fileOutputStream.close();
+        return path;
+
+    }
+
+    @Autowired
+    private PlatformCampaignStatisticInfoMapper statisticInfoMapper;
+
+    private void setExcelRow(CellStyle numbericCellStyle, StatisticCampaignVo vo, String[] contents, Row row, String type) {
+        for (int j = 0; j < 38; j++) {
+            Cell cell = row.createCell(j);
+            if (j == 0) {
+                //日期
+                if (null != type && type.equals("single")) {
+                    cell.setCellValue(vo.getStatisticDate());
+                } else if (null != type && type.equals("total1")) {
+                    cell.setCellValue("户一总计");
+                } else {
+                    cell.setCellValue("户四总计");
+                }
+            } else if (j == 1) {
+                //代理
+                cell.setCellValue(vo.getProxy());
+            } else if (j == 2) {
+                //投放系统
+                if (null != contents && contents.length > 3) {
+                    cell.setCellValue(contents[2]);
+                } else {
+                    cell.setCellValue("");
+                }
+            } else if (j == 3) {
+                //渠道号
+                if (null != contents && contents.length > 2) {
+                    cell.setCellValue(contents[1]);
+                } else {
+                    cell.setCellValue("");
+                }
+            } else if (j == 4) {
+                //content
+                if (null != contents && contents.length > 0) {
+                    cell.setCellValue(contents[0]);
+                } else {
+                    cell.setCellValue("");
+                }
+//                cell.setCellValue(vo.getContent());
+            } else if (j == 5) {
+                if (null != contents && contents.length > 5) {
+                    cell.setCellValue(contents[4]);
+                } else {
+                    cell.setCellValue("");
+                }
+            } else if (j == 6) {
+                //出价方式
+                if (null != contents && contents.length > 6) {
+                    cell.setCellValue(contents[5]);
+                } else {
+                    cell.setCellValue("");
+                }
+            } else if (j == 7) {
+                //定向条件
+                if (null != contents && contents.length > 4) {
+                    cell.setCellValue(contents[3]);
+                } else {
+                    cell.setCellValue("");
+                }
+            } else if (j == 8) {
+                //定向条件
+                if (null != contents && contents.length > 7) {
+                    cell.setCellValue(contents[6]);
+                } else {
+                    cell.setCellValue("");
+                }
+            } else if (j == 9) {
+                //花费
+                if (null != vo.getCost() && !"".equals(vo.getCost())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCost()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 10) {
+                //封面曝光数
+                if (null != vo.getCoverViews() && !"".equals(vo.getCoverViews())) {
+                    cell.setCellValue(Integer.parseInt(vo.getCoverViews()));
+                }
+            } else if (j == 11) {
+                //封面点击数
+                if (null != vo.getCoverClick() && !"".equals(vo.getCoverClick())) {
+                    cell.setCellValue(Integer.parseInt(vo.getCoverClick()));
+                }
+            } else if (j == 12) {
+                //素材曝光数
+                if (null != vo.getMaterialViews() && !"".equals(vo.getMaterialViews())) {
+                    cell.setCellValue(Integer.parseInt(vo.getMaterialViews()));
+                }
+            } else if (j == 13) {
+                //行为数
+                if (null != vo.getActions() && !"".equals(vo.getActions())) {
+                    cell.setCellValue(Integer.parseInt(vo.getActions()));
+                }
+            } else if (j == 14) {
+                //点击率
+                if (null != vo.getClickRate() && !"".equals(vo.getClickRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getClickRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 15) {
+                //行为点击率
+                if (null != vo.getActionClickRate() && !"".equals(vo.getActionClickRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getActionClickRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 16) {
+                //ACTR*BCTR
+                if (null != vo.getAbctr() && !"".equals(vo.getAbctr())) {
+                    cell.setCellValue(Float.parseFloat(vo.getAbctr()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 17) {
+                //点击成本
+                if (null != vo.getClickPrice() && !"".equals(vo.getClickPrice())) {
+                    cell.setCellValue(Float.parseFloat(vo.getClickPrice()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 18) {
+                //行为成本
+                if (null != vo.getActionPrice() && !"".equals(vo.getActionPrice())) {
+                    cell.setCellValue(Float.parseFloat(vo.getActionPrice()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 19) {
+                //注册用户
+                if (null != vo.getRegistUserNum() && !"".equals(vo.getRegistUserNum())) {
+                    cell.setCellValue(Integer.parseInt(vo.getRegistUserNum()));
+                }
+            } else if (j == 20) {
+                //完件用户
+                if (null != vo.getComplateUserNum() && !"".equals(vo.getComplateUserNum())) {
+                    cell.setCellValue(Integer.parseInt(vo.getComplateUserNum()));
+                }
+            } else if (j == 21) {
+                //授信用户
+                if (null != vo.getCreditUserNum() && !"".equals(vo.getCreditUserNum())) {
+                    cell.setCellValue(Integer.parseInt(vo.getCreditUserNum()));
+                }
+            } else if (j == 22) {
+                //当日注册且完件数
+                if (null != vo.getRegistCompleteNum() && !"".equals(vo.getRegistCompleteNum())) {
+                    cell.setCellValue(Integer.parseInt(vo.getRegistCompleteNum()));
+                }
+            } else if (j == 23) {
+                //当日注册且授信数
+                if (null != vo.getRegistCreditNum() && !"".equals(vo.getRegistCreditNum())) {
+                    cell.setCellValue(Integer.parseInt(vo.getRegistCreditNum()));
+                }
+            } else if (j == 25) {
+                //注册成本
+                if (null != vo.getRegistPrice() && !"".equals(vo.getRegistPrice())) {
+                    cell.setCellValue(Float.parseFloat(vo.getRegistPrice()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 26) {
+                //完件成本
+                if (null != vo.getCompletePrice() && !"".equals(vo.getCompletePrice())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCompletePrice()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 27) {
+                //授信成本
+                if (null != vo.getCreditPrice() && !"".equals(vo.getCreditPrice())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCreditPrice()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 28) {
+                //当日注册且完件成本
+                if (null != vo.getRegistCompletePrice() && !"".equals(vo.getRegistCompletePrice())) {
+                    cell.setCellValue(Float.parseFloat(vo.getRegistCompletePrice()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 29) {
+                //当日注册且授信成本
+                if (null != vo.getRegistCreditPrice() && !"".equals(vo.getRegistCreditPrice())) {
+                    cell.setCellValue(Float.parseFloat(vo.getRegistCreditPrice()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 30) {
+                //点击注册率
+                if (null != vo.getClickRegistRate() && !"".equals(vo.getClickRegistRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getClickRegistRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 31) {
+                //行为注册率
+                if (null != vo.getActionRegistRate() && !"".equals(vo.getActionRegistRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getActionRegistRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 32) {
+                //完件率
+                if (null != vo.getCompleteRate() && !"".equals(vo.getCompleteRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCompleteRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 33) {
+                //授信率
+                if (null != vo.getCreditRate() && !"".equals(vo.getCreditRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCreditRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 34) {
+                //当日完件率
+                if (null != vo.getRegistCompleteRate() && !"".equals(vo.getRegistCompleteRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getRegistCompleteRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 35) {
+                //当日授信率
+                if (null != vo.getRegistCreditRate() && !"".equals(vo.getRegistCreditRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getRegistCreditRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 36) {
+                //当日完件/完件
+                if (null != vo.getCompleteRateDay() && !"".equals(vo.getCompleteRateDay())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCompleteRateDay()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 37) {
+                //当日授信/授信
+                if (null != vo.getCreditRateDay() && !"".equals(vo.getCreditRateDay())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCreditRateDay()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 38) {
+                //当日授信/注册
+                if (null != vo.getCreditRegistRateDay() && !"".equals(vo.getCreditRegistRateDay())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCreditRegistRateDay()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            }
+        }
+    }
+
+    public String downLoadByURL(String fileUrl) {
+        //获取文件名,文件名实际上在URL中可以找到
+        String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
+        //这里服务器上要将此图保存的路径
+        String savePath = this.csvUploadPath + fileName;
+        try {
+            URL url = new URL("https:" + fileUrl);/*将网络资源地址传给,即赋值给url*/
+            /*此为联系获得网络资源的固定格式用法,以便后面的in变量获得url截取网络资源的输入流*/
+            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+            DataInputStream in = new DataInputStream(connection.getInputStream());
+            /*此处也可用BufferedInputStream与BufferedOutputStream*/
+            DataOutputStream out = new DataOutputStream(new FileOutputStream(savePath));
+            /*将参数savePath,即将截取的图片的存储在本地地址赋值给out输出流所指定的地址*/
+            byte[] buffer = new byte[4096];
+            int count = 0;
+            /*将输入流以字节的形式读取并写入buffer中*/
+            while ((count = in.read(buffer)) > 0) {
+                out.write(buffer, 0, count);
+            }
+            out.close();/*后面三行为关闭输入输出流以及网络资源的固定格式*/
+            in.close();
+            connection.disconnect();
+            //返回内容是保存后的完整的URL
+            return savePath;/*网络资源截取并存储本地成功返回true*/
+
+        } catch (Exception e) {
+            System.out.println(e + fileUrl + savePath);
+            return null;
+        }
+    }
+
+    @Autowired
+    private CustomerPlanStatisticInfoMapper customerPlanStatisticInfoMapper;
     @Autowired
-    private CustomerPlanStatisticInfoMapper statisticInfoMapper;
+    private PlatformCampaignStatisticInfoMapper platformCampaignStatisticInfoMapper;
 
     public JSONObject getAgentStat(CTopOauthToken token, JSONObject conditions) {
         // 请求地址

+ 451 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/vo/StatisticCampaignVo.java

@@ -0,0 +1,451 @@
+package org.jeecg.modules.ctop.vo;
+
+import java.io.Serializable;
+
+/**
+ * @author 宋英豪
+ */
+public class StatisticCampaignVo implements Serializable {
+    //日期
+    private String statisticDate;
+    /**
+     * 代理
+     */
+    private String proxy;
+    /**
+     * 投放系统
+     */
+    private String deliverySystem;
+    /**
+     * 渠道名称
+     */
+    private String channelName;
+    /**
+     * 广告组名称
+     */
+    private String content;
+    /**
+     * 投放素材
+     */
+    private String meterial;
+    /**
+     * 出价方式
+     */
+    private String priceType;
+    /**
+     * 定向条件
+     */
+    private String directCondition;
+    /**
+     * 基础定向
+     */
+    private String basicDirect;
+    /**
+     * 花费
+     */
+    private String cost;
+    //封面曝光数
+    private String coverViews;
+    //封面点击数
+    private String coverClick;
+    //素材曝光数
+    private String materialViews;
+    //行为数
+    private String actions;
+    //点击率
+    private String clickRate;
+    //行为点击率
+    private String actionClickRate;
+    //ACTR*BCTR
+    private String abctr;
+    //点击成本
+    private String clickPrice;
+    //行为成本
+    private String actionPrice;
+    //注册用户
+    private String registUserNum;
+    //完件用户
+    private String complateUserNum;
+    //授信用户
+    private String creditUserNum;
+    //当日注册且完件数
+    private String registCompleteNum;
+    //当日注册且授信数
+    private String registCreditNum;
+    //注册成本
+    private String registPrice;
+    //完件成本
+    private String completePrice;
+    //授信成本
+    private String creditPrice;
+    //当日注册且完件成本
+    private String registCompletePrice;
+    //当日注册且授信成本
+    private String registCreditPrice;
+    //点击注册率
+    private String clickRegistRate;
+    //行为注册率
+    private String actionRegistRate;
+    //完件率
+    private String completeRate;
+    //授信率
+    private String creditRate;
+    //当日完件率
+    private String registCompleteRate;
+    //当日授信率
+    private String registCreditRate;
+    //当日完件百分比
+    private String completeRateDay;
+    //当日授信百分比
+    private String creditRateDay;
+    //当日授信注册百分比
+    private String creditRegistRateDay;
+
+    @Override
+    public String toString() {
+        return "StatisticCampaignVo{" +
+                "statisticDate='" + statisticDate + '\'' +
+                ", proxy='" + proxy + '\'' +
+                ", deliverySystem='" + deliverySystem + '\'' +
+                ", channelName='" + channelName + '\'' +
+                ", content='" + content + '\'' +
+                ", meterial='" + meterial + '\'' +
+                ", priceType='" + priceType + '\'' +
+                ", directCondition='" + directCondition + '\'' +
+                ", basicDirect='" + basicDirect + '\'' +
+                ", cost='" + cost + '\'' +
+                ", coverViews='" + coverViews + '\'' +
+                ", coverClick='" + coverClick + '\'' +
+                ", materialViews='" + materialViews + '\'' +
+                ", actions='" + actions + '\'' +
+                ", clickRate='" + clickRate + '\'' +
+                ", actionClickRate='" + actionClickRate + '\'' +
+                ", abctr='" + abctr + '\'' +
+                ", clickPrice='" + clickPrice + '\'' +
+                ", actionPrice='" + actionPrice + '\'' +
+                ", registUserNum='" + registUserNum + '\'' +
+                ", complateUserNum='" + complateUserNum + '\'' +
+                ", creditUserNum='" + creditUserNum + '\'' +
+                ", registCompleteNum='" + registCompleteNum + '\'' +
+                ", registCreditNum='" + registCreditNum + '\'' +
+                ", registPrice='" + registPrice + '\'' +
+                ", completePrice='" + completePrice + '\'' +
+                ", creditPrice='" + creditPrice + '\'' +
+                ", registCompletePrice='" + registCompletePrice + '\'' +
+                ", registCreditPrice='" + registCreditPrice + '\'' +
+                ", clickRegistRate='" + clickRegistRate + '\'' +
+                ", actionRegistRate='" + actionRegistRate + '\'' +
+                ", completeRate='" + completeRate + '\'' +
+                ", creditRate='" + creditRate + '\'' +
+                ", registCompleteRate='" + registCompleteRate + '\'' +
+                ", registCreditRate='" + registCreditRate + '\'' +
+                ", completeRateDay='" + completeRateDay + '\'' +
+                ", creditRateDay='" + creditRateDay + '\'' +
+                ", creditRegistRateDay='" + creditRegistRateDay + '\'' +
+                '}';
+    }
+
+    public String getStatisticDate() {
+        return statisticDate;
+    }
+
+    public void setStatisticDate(String statisticDate) {
+        this.statisticDate = statisticDate;
+    }
+
+    public String getProxy() {
+        return proxy;
+    }
+
+    public void setProxy(String proxy) {
+        this.proxy = proxy;
+    }
+
+    public String getDeliverySystem() {
+        return deliverySystem;
+    }
+
+    public void setDeliverySystem(String deliverySystem) {
+        this.deliverySystem = deliverySystem;
+    }
+
+    public String getChannelName() {
+        return channelName;
+    }
+
+    public void setChannelName(String channelName) {
+        this.channelName = channelName;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getMeterial() {
+        return meterial;
+    }
+
+    public void setMeterial(String meterial) {
+        this.meterial = meterial;
+    }
+
+    public String getPriceType() {
+        return priceType;
+    }
+
+    public void setPriceType(String priceType) {
+        this.priceType = priceType;
+    }
+
+    public String getDirectCondition() {
+        return directCondition;
+    }
+
+    public void setDirectCondition(String directCondition) {
+        this.directCondition = directCondition;
+    }
+
+    public String getBasicDirect() {
+        return basicDirect;
+    }
+
+    public void setBasicDirect(String basicDirect) {
+        this.basicDirect = basicDirect;
+    }
+
+    public String getCost() {
+        return cost;
+    }
+
+    public void setCost(String cost) {
+        this.cost = cost;
+    }
+
+    public String getCoverViews() {
+        return coverViews;
+    }
+
+    public void setCoverViews(String coverViews) {
+        this.coverViews = coverViews;
+    }
+
+    public String getCoverClick() {
+        return coverClick;
+    }
+
+    public void setCoverClick(String coverClick) {
+        this.coverClick = coverClick;
+    }
+
+    public String getMaterialViews() {
+        return materialViews;
+    }
+
+    public void setMaterialViews(String materialViews) {
+        this.materialViews = materialViews;
+    }
+
+    public String getActions() {
+        return actions;
+    }
+
+    public void setActions(String actions) {
+        this.actions = actions;
+    }
+
+    public String getClickRate() {
+        return clickRate;
+    }
+
+    public void setClickRate(String clickRate) {
+        this.clickRate = clickRate;
+    }
+
+    public String getActionClickRate() {
+        return actionClickRate;
+    }
+
+    public void setActionClickRate(String actionClickRate) {
+        this.actionClickRate = actionClickRate;
+    }
+
+    public String getAbctr() {
+        return abctr;
+    }
+
+    public void setAbctr(String abctr) {
+        this.abctr = abctr;
+    }
+
+    public String getClickPrice() {
+        return clickPrice;
+    }
+
+    public void setClickPrice(String clickPrice) {
+        this.clickPrice = clickPrice;
+    }
+
+    public String getActionPrice() {
+        return actionPrice;
+    }
+
+    public void setActionPrice(String actionPrice) {
+        this.actionPrice = actionPrice;
+    }
+
+    public String getRegistUserNum() {
+        return registUserNum;
+    }
+
+    public void setRegistUserNum(String registUserNum) {
+        this.registUserNum = registUserNum;
+    }
+
+    public String getComplateUserNum() {
+        return complateUserNum;
+    }
+
+    public void setComplateUserNum(String complateUserNum) {
+        this.complateUserNum = complateUserNum;
+    }
+
+    public String getCreditUserNum() {
+        return creditUserNum;
+    }
+
+    public void setCreditUserNum(String creditUserNum) {
+        this.creditUserNum = creditUserNum;
+    }
+
+    public String getRegistCompleteNum() {
+        return registCompleteNum;
+    }
+
+    public void setRegistCompleteNum(String registCompleteNum) {
+        this.registCompleteNum = registCompleteNum;
+    }
+
+    public String getRegistCreditNum() {
+        return registCreditNum;
+    }
+
+    public void setRegistCreditNum(String registCreditNum) {
+        this.registCreditNum = registCreditNum;
+    }
+
+    public String getRegistPrice() {
+        return registPrice;
+    }
+
+    public void setRegistPrice(String registPrice) {
+        this.registPrice = registPrice;
+    }
+
+    public String getCompletePrice() {
+        return completePrice;
+    }
+
+    public void setCompletePrice(String completePrice) {
+        this.completePrice = completePrice;
+    }
+
+    public String getCreditPrice() {
+        return creditPrice;
+    }
+
+    public void setCreditPrice(String creditPrice) {
+        this.creditPrice = creditPrice;
+    }
+
+    public String getRegistCompletePrice() {
+        return registCompletePrice;
+    }
+
+    public void setRegistCompletePrice(String registCompletePrice) {
+        this.registCompletePrice = registCompletePrice;
+    }
+
+    public String getRegistCreditPrice() {
+        return registCreditPrice;
+    }
+
+    public void setRegistCreditPrice(String registCreditPrice) {
+        this.registCreditPrice = registCreditPrice;
+    }
+
+    public String getClickRegistRate() {
+        return clickRegistRate;
+    }
+
+    public void setClickRegistRate(String clickRegistRate) {
+        this.clickRegistRate = clickRegistRate;
+    }
+
+    public String getActionRegistRate() {
+        return actionRegistRate;
+    }
+
+    public void setActionRegistRate(String actionRegistRate) {
+        this.actionRegistRate = actionRegistRate;
+    }
+
+    public String getCompleteRate() {
+        return completeRate;
+    }
+
+    public void setCompleteRate(String completeRate) {
+        this.completeRate = completeRate;
+    }
+
+    public String getCreditRate() {
+        return creditRate;
+    }
+
+    public void setCreditRate(String creditRate) {
+        this.creditRate = creditRate;
+    }
+
+    public String getRegistCompleteRate() {
+        return registCompleteRate;
+    }
+
+    public void setRegistCompleteRate(String registCompleteRate) {
+        this.registCompleteRate = registCompleteRate;
+    }
+
+    public String getRegistCreditRate() {
+        return registCreditRate;
+    }
+
+    public void setRegistCreditRate(String registCreditRate) {
+        this.registCreditRate = registCreditRate;
+    }
+
+    public String getCompleteRateDay() {
+        return completeRateDay;
+    }
+
+    public void setCompleteRateDay(String completeRateDay) {
+        this.completeRateDay = completeRateDay;
+    }
+
+    public String getCreditRateDay() {
+        return creditRateDay;
+    }
+
+    public void setCreditRateDay(String creditRateDay) {
+        this.creditRateDay = creditRateDay;
+    }
+
+    public String getCreditRegistRateDay() {
+        return creditRegistRateDay;
+    }
+
+    public void setCreditRegistRateDay(String creditRegistRateDay) {
+        this.creditRegistRateDay = creditRegistRateDay;
+    }
+}

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaishouInterfaceServiceImpl.java

@@ -132,6 +132,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
         KuaishouResult<KuaishouReportDailyCampaign> kuaishouResult = null;
         try {
             String result = HttpUtils.httpPostRequest(url, param, headers);
+            System.out.println(result);
             ObjectMapper mapper = new ObjectMapper();
             mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
             kuaishouResult = mapper.readValue(result, new TypeReference<KuaishouResult<KuaishouReportDailyCampaign>>() {

+ 3 - 1
jeecg-boot-module-system/src/main/resources/application-dev.yml

@@ -94,7 +94,8 @@ spring:
         connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
       datasource:
         master:
-          url: jdbc:mysql://192.168.0.23:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+          #          url: jdbc:mysql://192.168.0.23:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+          url: jdbc:mysql://192.168.1.200:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
           username: hcst
           password: 123456
           driver-class-name: com.mysql.jdbc.Driver
@@ -141,3 +142,4 @@ jeecg:
     video-upload: D://upFiles//video//
     image-upload: D://upFiles//image//
     chrome-driver: D://chromedriver.exe
+    csv-upload: D://upFiles//csv//

+ 0 - 38
jeecg-boot-module-system/src/main/resources/effect_unit_2019-08-02-00_2019-08-02-00.csv

@@ -1,38 +0,0 @@
-"日期","广告计划","广告组","花费","曝光数","点击数","行为数","点击率","行为率","平均千次曝光花费","平均点击单价","平均行为单价","提交按钮点击","表单提交率","表单提交单价"
-"总计","","","28509.09","1683407","188298","4149","11.19%","2.20%","16.94","0.15","6.87","441","10.63%","64.65"
-"2019-08-02","信息流1-安卓-掰手腕(支付)-表单131-190802","HC1908021311-信息流1-安卓-银行APP-掰手腕(支付)-表单131-190802","180.52","14979","1039","31","6.94%","2.98%","12.05","0.17","5.82","5","16.13%","36.10"
-"2019-08-02","信息流1-安卓-8万-表单130-190802","HC1908021301-信息流1-安卓-借贷-8万-表单130-190802","5408.43","352928","45954","616","13.02%","1.34%","15.32","0.12","8.78","87","14.12%","62.17"
-"2019-08-02","信息流1-安卓-鹏哥-表单129-190802","HC1908021291-信息流1-安卓-银行APP-鹏哥-表单129-190802","1779.89","112512","7382","261","6.56%","3.54%","15.82","0.24","6.82","34","13.03%","52.35"
-"2019-08-02","信息流1-安卓-掰手腕(支付)-表单128-190801","HC1908011281-信息流1-安卓-持卡优质-掰手腕(支付)-表单128-190801","749.71","42904","5203","132","12.13%","2.54%","17.47","0.14","5.68","6","4.55%","124.95"
-"2019-08-02","信息流1-安卓-农村2-表单126-190731","HC1907311261-信息流1-安卓-优质关键词人群-农村2-表单126-190731","6891.15","432146","46790","1397","10.83%","2.99%","15.95","0.15","4.93","128","9.16%","53.84"
-"2019-08-02","信息流1-安卓-8万-表单125-190730","HC1907271251-信息流1-安卓-信用卡借贷-8万-表单125-190730","1331.80","80180","7418","164","9.25%","2.21%","16.61","0.18","8.12","13","7.93%","102.45"
-"2019-08-02","信息流1-安卓-吵架分手-表单124-190729","HC1907271241-信息流1-安卓-信用卡优质-吵架分手-表单124-190729","519.93","29310","3238","91","11.05%","2.81%","17.74","0.16","5.71","6","6.59%","86.65"
-"2019-08-02","信息流1-安卓-农村2-表单121-190727","HC1907271212-信息流1-安卓-银行APP-农村2-表单121-190729","3658.12","211000","19889","507","9.43%","2.55%","17.34","0.18","7.22","60","11.83%","60.97"
-"2019-08-02","信用卡持有人群-早点-表单-安卓","HC19072918-信息流1-安卓-信用卡优质组合(完件)-早点-表单18-7.29","415.57","17749","2081","72","11.72%","3.46%","23.41","0.20","5.77","5","6.94%","83.11"
-"2019-08-02","信息流1-安卓-农村2-表单121-190727","HC1907271211-信息流1-安卓-信用卡(完件)-农村2-表单121-190727","0.06","4","1","0","25.00%","0.00%","14.25","0.06","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-老妹-表单118-190724","HC1907221181-信息流1-安卓-持卡优质人群(完件)-老妹-表单118-190724","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-ios-快递员-表单117-190723-品牌","HC1907221171-信息流1-ios-排除-快递员-表单117-190723-品牌","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-项圈-表单116-190723-品牌","HC1907231161-信息流1-安卓-信用卡优质人群-项圈-表单116-190723-品牌","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-光头强-表单115-190722-品牌","HC1907221152-信息流1-安卓-银行APP关键词(完件)-光头强-表单115-190722","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-光头强-表单115-190722-品牌","HC1907221151-信息流1-安卓-银行APP关键词(完件)-光头强-表单115-190722-品牌-双出价","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-光头强-表单110-190715-品牌","HC1907151101-信息流1-安卓-信用卡借贷组合-光头强-表单110-190718-品牌","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-ios-吃饭租房买车(支付)-表单108-190714","HC1907141081-信息流1-ios-排除(完件)-吃饭租房买车(支付)-表单108-190714","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-农村 -完件-表单105-20190708","HC1907081052-信息流1-安卓-信用卡&贷款(完件)-农村 -表单105-20190712","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-手机额度-表单106-20190711-品牌","HC1907111064-信息流1-安卓-排除(完件)-手机额度-表单106-20190711-品牌-短时长","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-老妹-表单96-190629","HC190629964-信息流1-安卓-支付(完件)-老妹-表单96-190703","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-早点-表单98-20190701-P","HC190701981-信息流1-安卓-信用卡-早点-表单98-20190701-P","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-额度-表单97-190630","HC190630972-信息流1-安卓-排除-额度-表单97-190630","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-老妹-表单96-190629","HC190629962-信息流1-安卓-银行APP-老妹-表单96-190629","0.20","34","3","0","8.82%","0.00%","5.82","0.07","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-没钱了怎么办2-表单78-190606","HC190606788-信息流1-安卓-支付-没钱了怎么办2-表单78-190622-cpm","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-买单(支付场景)-表单88-190621","HC190621881-信息流1-安卓-信用卡-买单(支付场景)-表单88-190621","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-支付场景(吃饭租房买车)-表单82-190613","HC190613823-信息流1-安卓-排除-支付场景(吃饭租房买车)-表单82-190614","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-ios-采访黄衣女-表单81-190609","HC190610811-信息流1-ios-排除-采访黄衣女-表单81-190609","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-采访黄衣女-表单55-190514","HC19051556-信息流1-安卓-支付人群-采访黄衣女-表单55-190521","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-采访黄衣女-表单55-190514","HC19051553-信息流1-安卓-信用卡人群-采访黄衣女-表单55-190515","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信息流1-安卓-排除定向-灵动街坊-表单-190420(43-老素材)","HC19042002-信息流1-安卓-排除定向-灵动街坊-表单-190420","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信用卡持有人群-早点-表单-安卓","biaodan-7-早点","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","信用卡持有人群-早点-表单-安卓","biaodan-1-早点","7573.72","389661","49300","878","12.65%","1.78%","19.44","0.15","8.63","97","11.05%","78.08"
-"2019-08-02","信息流1-安卓-信用卡持有人群-灵动街坊-ecpc-190402","HC19040201-信息流1-安卓-信用卡持有人群-早点-ecpc-190402","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","新-OCPX-男(22-45岁)-IOS","ocpx10-灵动(君悦)-街访-1-1.21","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","H5-OCPX3-男(22-45岁)-IOS","ocpx3-买早点-3-1.10","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"
-"2019-08-02","DMP-CPC-男(22-45)-IOS","cpc2-ios-工资不够花-02-1.3-复用","0.00","0","0","0","0.00%","0.00%","0.00","0.00","0.00","0","0.00%","0.00"

+ 136 - 0
jeecg-boot-module-system/src/main/resources/借条后台数据.csv

@@ -0,0 +1,136 @@
+时间,结算方,合同编号,账户名称,三级分类,渠道,渠道ID,子渠道,子渠道ID,活动,广告内容,广告关键字,注册用户数,完件用户,预估授信人数,当日注册且完件数,预估当日注册且授信数
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),ceshi-cpc-tongtou-And,cpc-2,0,2,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),ocpx3-nan-IOS,ocpx-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),kswj-HC1908211482-h1-jdyhzh-guijianpan-biaodan148-And,biaoda1482,5,0,0,0,0
+2019/8/27,汇创,HT_01373,17116890601(户4),快手,汇创快手户4h5,H5_CH_16900,,,,,,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),ocpx2-nan-And,ocpx-1,0,2,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—h5,H5_CH_16192,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),jiedai-cpc-tongtou,cpc-2,0,0,0,0,0
+2019/8/27,汇创,HT_00418,,今日头条,今日头条-汇创-安卓-户1,H5_CH_912,信息流2,xinxiliu2,12期免首期H5-活动(12mianshouqi_201708),toutiao,27,0,1,0,0,0
+2019/8/27,汇创,HT_01373,17116890601(户4),快手,汇创快手户4h5,H5_CH_16900,信息流1,xinxiliu1,外44_小贷_紫色4万_挽留_H5简化(12msq_zs4wwljh_xd),HC1908164282-h4-And-yhqczh-saolian-biaodan428-And,biaodan4282,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,xinyongka-ecpc-And,ecpc-2,0,2,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),xinyongka-ecpc-And,ecpc-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,17116890601(户4),快手,汇创快手户4h5,H5_CH_16900,信息流1,xinxiliu1,外44_小贷_紫色4万_挽留_H5简化(12msq_zs4wwljh_xd),kswj-HC190723482-h4-and-xykjiedai-maidan-biaodan48-And,biaodan482,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),xin-DMP-ocpx-nan-And,ocpx-4,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,,,,,,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),DMP-ocpx-nan-IOS,ocpx-2,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),DMP-ocpx2-nan-And,ocpx-2,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),CPC-nan-And,cpc-9,0,0,0,0,0
+2019/8/27,汇创,HT_01373,17130977597(户2),快手,快手—汇创亿起联户2—安卓h5,H5_CH_16292,信息流1,xinxiliu1,外2_小贷_紫色4万_返回IVR(12mianshouqi_201708_xdzmb),h2-DMP-ocpx-nan-And,ocpx-3,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),ceshi-cpc-tongtou-And,cpc-2,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),ceshi-ocpx-tongtou-And,ocpx-2,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12免首期_经典返回抽奖_201812(12msq_jdfhcj_201812),,,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),DMP-ocpx-nan-IOS,ocpx-3,0,3,1,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,HC19051557-h1-paichu-cfhuangyi-biaodan55-And,biaoda557,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,xyk-biaodan-And,biaodan-6,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,DMP-ocpx-nan-And,ocpx-4,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),HC1907081054-h1-paichu-nongcun-biaodan105-And,biaoda1054,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,xinyongka1-ecpc-And,ecpc-1,0,1,1,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),ocpx2-nan-And,ocpx-3,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12免首期_经典返回抽奖_201812(12msq_jdfhcj_201812),CPC-nan-And,cpc-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),HC1908061351-h1-youzhi-8w-biaodan135-And,biaoda1351,3,0,0,0,0
+2019/8/27,汇创,HT_01373,17170804062(户3),快手,快手—汇创亿起联户3—安卓h5,H5_CH_16531,信息流1,xinxiliu1,外7_淇毓_紫色4万_IVR测试/外8_小贷_紫色4万_IVR测试(12mxq_jdivr40_201811),h3-chengshi-zhuti-biaodan-And,biaodan-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,17130977597(户2),快手,快手—汇创亿起联户2—安卓h5,H5_CH_16292,信息流1,xinxiliu1,外63_小贷_红色20万_返回IVR_快手精简(12msq_hs20w_xdksjj),15-xinlianjie-biaodan-And,biaodan-15,0,1,1,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),CPC-nan-IOS,cpc-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—h5,H5_CH_16192,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),jiedai-cpc-tongtou,cpc-5,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),CPC-nan-And,cpc-2,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),DMP-cpc-nan-IOS,cpc-3,0,1,1,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),DMP-ocpx-nan-And,ocpx-4,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,,,合伙人12期免首期(12mianshouqi_mgm_hehuoren),,,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),DMP-cpc-nan-And,cpc-2,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),DMP-ocpx-nan-IOS,ocpx-3,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),xin-ocpx-nan-And,ocpx-1,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12免首期_经典返回抽奖_201812(12msq_jdfhcj_201812),xin-DMP-cpc-tongtou-And,cpc-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),DMP-ocpx-nan-And,ocpx-1,0,2,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),HC1908051331-h1-youzhi-nongcun2-biaodan133-And,biaoda1331,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,HC19050601-45-paichu-biaodan-And,biaodan-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),xyk-biaodan-IOS,biaodan-2,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),xyk-biaodan-And,biaodan-7,0,1,0,0,0
+2019/8/27,汇创,HT_01373,17170804062(户3),快手,快手—汇创亿起联户3—安卓h5,H5_CH_16531,信息流1,xinxiliu1,外7_淇毓_紫色4万_IVR测试/外8_小贷_紫色4万_IVR测试(12mxq_jdivr30_201811),HC19061401-h3-pc-dp-biaodan24-And,biaodan-24,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),HC190629962-h1-zf-laomei-biaodan96-And,biaoda962,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,HC19051502-h1-xyk-cfhuangyi-biaodan55-And,biaoda553,0,0,0,0,0
+2019/8/27,汇创,HT_01373,17170804062(户3),快手,快手—汇创亿起联户3—安卓h5,H5_CH_16531,信息流1,xinxiliu1,外7_淇毓_紫色4万_IVR测试/外8_小贷_紫色4万_IVR测试(12mxq_jdivr0_201811),HC19061401-h3-pc-dp-biaodan24-And,biaodan-24,0,1,0,0,0
+2019/8/27,汇创,HT_01373,17116890601(户4),快手,汇创快手户4h5,H5_CH_16900,信息流1,xinxiliu1,外44_小贷_紫色4万_挽留_H5简化(12msq_zs4wwljh_xd),kswj-HC1908204321-h4-And-xykzh-jiefang-biaodan432-And,biaodan4321,4,1,0,1,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),DMP-ocpx-nan-And,ocpx-6,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,ceshi-xyk+xed-biaodan-And,biaodan-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),HC1907311261-h1-youzhi-nongcun-biaodan126-And,biaoda1261,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,xinyongka-ecpc-And,ecpc-6,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,xyk-biaodan-And,biaodan-1,0,4,2,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),CPC-nan-And,cpc-3,0,5,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),ocpx2-nan-IOS,ocpx-2,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),xinyongka-ecpc-And,ecpc-3,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12免首期_经典返回抽奖_201812(12msq_jdfhcj_201812),ocpx2-nan-And,ocpx-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),tuozhan-OCPX-And,ocpx-2,0,1,0,0,0
+2019/8/27,汇创,HT_01373,17116890601(户4),快手,汇创快手户4h5,H5_CH_16900,信息流1,xinxiliu1,外44_小贷_紫色4万_挽留_H5简化(12msq_zs4wwljh_xd),HC1908154281-h4-And-xydkzh-saolian-biaodan428-And,biaodan4281,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,22-youzhi-biaodan-And,biaodan-1,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),kswj-HC1907141081-h1-paichu-chifan-biaodan108-IOS,biaoda1081,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,,,12期免首期H5-活动(12mianshouqi_201708),sucai149,shiping,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,HC190613823-h1-paichu-chifan-biaodan82-And,biaoda823,0,0,0,0,0
+2019/8/27,汇创,HT_01373,17170804062(户3),快手,快手—汇创亿起联户3—安卓h5,H5_CH_16531,信息流1,xinxiliu1,外7_淇毓_紫色4万_IVR测试/外8_小贷_紫色4万_IVR测试(12mxq_jdivr40_201811),HC19050809-h3-paichu-jiefang-biaodan-And,biaodan-4,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),kswj-HC1908221502-h1-xykzh-tingchechang-biaodan150-And,biaoda1502,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),kswj-HC1908221491-h1-yhkzh-yaoqian-biaodan149-And,biaoda1491,21,1,0,1,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),ocpx2-nan-IOS,ocpx-6,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),HC1908221451-h1-paichu-tingchechang-biaodan145-IOS,biaoda1451,12,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),xin-ocpx-nan-IOS,ocpx-10,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,HC19051556-h1-zfrq-cfhuangyi-biaodan55-And,biaoda556,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),zhuti-CPC-And,cpc-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),HC1908061352-h1-youzhi-8w-biaodan135-And,biaoda1352,44,8,2,6,1
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,,,12期免首期H5-活动(12mianshouqi_201708),sms,360jie002018122965,0,0,0,0,0
+2019/8/27,汇创,HT_01373,17170804062(户3),快手,快手—汇创亿起联户3—安卓h5,H5_CH_16531,信息流1,xinxiliu1,外7_淇毓_紫色4万_IVR测试/外8_小贷_紫色4万_IVR测试(12mxq_jdivr30_201811),kswj-HC19070301-h3-pcwj-dp-biaodan24-And,biaodan-24,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—h5,H5_CH_16192,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),jiedai-cpc-tongtou,cpc-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),HC1908201471-h1-xyhzh-mailiwu-biaodan147-And,biaoda1471,0,0,0,0,0
+2019/8/27,汇创,HT_01373,17116890601(户4),快手,汇创快手户4h5,H5_CH_16900,信息流1,xinxiliu1,外44_小贷_紫色4万_挽留_H5简化(12msq_zs4wwljh_xd),HC1908164301-h4-And-xyknx-zhuangxiu-biaodan430-And,biaodan4301,6,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),ceshi-cpc-tongtou-And,cpc-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),xin-ocpx-nan-And,ocpx-11,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,xinyongka-ecpc-And,ecpc-3,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,18-daikuan-nan-biaodan-And,biaodan-1,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),DMP-ocpx-nan-And,ocpx-10,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),ocpx2-nan-IOS,ocpx-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,xinyongka-ecpc-And,ecpc-1,0,2,1,0,0
+2019/8/27,汇创,HT_01373,17116890601(户4),快手,汇创快手户4h5,H5_CH_16900,信息流1,xinxiliu1,外44_小贷_紫色4万_挽留_H5简化(12msq_zs4wwljh_xd),HC1908014171-h4-And-daikuanyouzhi-xiangqin-biaodan417-And,biaodan4171,0,1,1,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),DMP-cpc2-nan-And,cpc-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),xin-DMP-cpc-tongtou-And,cpc-3,0,0,0,0,0
+2019/8/27,汇创,HT_01373,17116890601(户4),快手,汇创快手户4h5,H5_CH_16900,信息流1,xinxiliu1,外44_小贷_紫色4万_挽留_H5简化(12msq_zs4wwljh_xd),kswj-HC1908074222-h4-And-xyk-shoutoujin-biaodan422-And,biaodan4222,26,9,2,6,2
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),kswj-HC1908221501-h1-xykzh-tingchechang-biaodan150-And,biaoda1501,41,8,1,7,1
+2019/8/27,汇创,HT_01373,17130977597(户2),快手,快手—汇创亿起联户2—安卓h5,H5_CH_16292,信息流1,xinxiliu1,外2_小贷_紫色4万_返回IVR(12mianshouqi_201708_xdzmb),h2-DMP-ocpx-nan-And,ocpx-4,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),kswj-HC1908201481-h1-jdyhzh-guijianpan-biaodan148-And,biaoda1481,10,2,0,1,0
+2019/8/27,汇创,HT_01373,17116890601(户4),快手,汇创快手户4h5,H5_CH_16900,信息流1,xinxiliu1,外44_小贷_紫色4万_挽留_H5简化(12msq_zs4wwljh_xd),kswj-HC1908074221-h4-And-xyk-shoutoujin-biaodan422-And,biaodan4221,7,1,1,1,1
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,35-paichu-biaodan-And,biaodan-5,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,,,外7_淇毓_紫色4万_IVR测试/外8_小贷_紫色4万_IVR测试(12mxq_jdivr0_201811),sucai560,shiping,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),xin-ocpx-nan-And,ocpx-4,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),ceshi-cpc-tongtou-And,cpc-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),CPC-nan-And,cpc-1,0,3,1,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,,,外70_淇毓_仿点点888元红包(12msq_diandian888_qy),biaoge6-1,,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),ocpx2-nan-IOS,ocpx-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),HC1907271212-h1-yinhangapp-nongcun2-biaodan121-And,biaoda1212,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,xyk-biaodan-And,biaodan-7,0,4,1,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,,,合伙人12期免首期(12mianshouqi_mgm_hehuoren),,,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),kswj-HC190629964-h1-zf-laomei-biaodan96-And,biaoda964,0,0,0,0,0
+2019/8/27,汇创,HT_01373,17170804062(户3),快手,快手—汇创亿起联户3—iosh5,H5_CH_16532,信息流1,xinxiliu1,外2_小贷_紫色4万_返回IVR(12mianshouqi_201708_xdzmb),HC005-H3-chengshi-paichu-biaodan-zaodian-IOS,biaodan-2,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),DMP-ocpx-nan-IOS,ocpx-2,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,HC19051559-h1-paichu-cfhuangyi-biaodan55-And,biaoda559,0,1,0,0,0
+2019/8/27,汇创,HT_01373,17170804062(户3),快手,快手—汇创亿起联户3—安卓h5,H5_CH_16531,信息流1,xinxiliu1,外7_淇毓_紫色4万_IVR测试/外8_小贷_紫色4万_IVR测试(12mxq_jdivr30_201811),HC19061404-h3-xyk-dp-biaodan29-And,biaodan-29,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),xyk-biaodan-IOS,biaodan-1,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),xin-DMP-ocpx-nan-And,ocpx-1,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,HC190517561-h1-yinhangapp-520-biaodan56-And,biaoda561,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—IOSh5,H5_CH_16191,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),xyk-biaodan-IOS,biaodan-3,33,7,2,5,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),ceshi-cpc-tongtou-And,cpc-5,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),xin-ocpx-nan-And,ocpx-4,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,43-paichu-biaodan-And,biaodan-2,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),ocpx2-nan-And,ocpx-3,0,2,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),CPC-nan-And,cpc-3,0,1,0,0,0
+2019/8/27,汇创,HT_01373,17170804062(户3),快手,快手—汇创亿起联户3—iosh5,H5_CH_16532,信息流1,xinxiliu1,外2_小贷_紫色4万_返回IVR(12mianshouqi_201708_xdzmb),h3-chengshi-DMP-biaodan-IOS,biaodan-1,0,1,1,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,maiche-CPC-And,cpc-2,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),DMP-ocpx-nan-And,ocpx-10,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),wanghong-cpc-nan-And,cpc-3,0,2,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),DMP-ocpx-nan-And,ocpx-4,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),xin-DMP-cpc-tongtou-And,cpc-8,0,1,0,0,0
+2019/8/27,汇创,HT_01373,17170804062(户3),快手,快手—汇创亿起联户3—安卓h5,H5_CH_16531,信息流1,xinxiliu1,外7_淇毓_紫色4万_IVR测试/外8_小贷_紫色4万_IVR测试(12mxq_jdivr0_201811),h3-chengshi-zhuti-biaodan-And,biaodan-1,0,1,0,0,0
+2019/8/27,汇创,HT_01373,17170804062(户3),快手,快手—汇创亿起联户3—安卓h5,H5_CH_16531,信息流1,xinxiliu1,外7_淇毓_紫色4万_IVR测试/外8_小贷_紫色4万_IVR测试(12mxq_jdivr40_201811),HC19061401-h3-pc-dp-biaodan24-And,biaodan-24,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),ceshi-xyk+xed-biaodan-And,biaodan-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),ocpx2-nan-And,ocpx-1,0,0,0,0,0
+2019/8/27,汇创,HT_01373,17116890601(户4),快手,汇创快手户4h5,H5_CH_16900,,,外1_淇毓_紫色4万_返回IVR(12mianshouqi_201708_qyzmb),ttxxl,H5_2019_0319_2152,0,0,0,0,0
+2019/8/27,汇创,LHT_01146,morenzhanghao(默认账号),汇创cpa,汇创cpa,H5_CH_15870,汇创免息cpa1,hccpamx1,外127_淇毓_紫色4万_头条合规(w127_qy_zs4w_tthg),,,1,1,0,1,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外6_小贷_紫色4万_返回测试(12msq_zs4wfh_xd),xin-CPC-nan-And,cpc-3,0,1,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,12期免首期_经典返回_201811(12msq_jdfh_201811),DMP-ocpx-nan-And,ocpx-7,0,2,0,0,0
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,外46_小贷_紫色4万_返回测试_H5简化(12msq_zs4wfhjh_xd),xyk-biaodan-And,biaodan-1,107,14,5,13,4
+2019/8/27,汇创,HT_01373,13552374039(户1),快手,快手—汇创亿起联户1—安卓h5,H5_CH_16190,信息流1,xinxiliu1,,xinyongka-ecpc-And,ecpc-5,0,1,0,0,0

+ 29 - 0
jeecg-boot-module-system/src/main/resources/快手后台数据-户1.csv

@@ -0,0 +1,29 @@
+日期,广告计划,广告组,花费,封面曝光数,封面点击数,素材曝光数,行为数,封面点击率,行为率,平均千次封面曝光花费,平均封面点击单价,平均行为单价,提交按钮点击,表单提交率,表单提交单价,落地页完件数,落地页完件成本,落地页授信数,落地页授信成本,落地页授信率
+总计,,,19969.537,1088297,72622,103631,1667,6.67%,1.61%,18.349,0.275,11.979,247,14.82%,80.848,84,237.733,13,1536.118,15.48%
+2019/8/27,信息流1-IOS-停车收费-表单145-190822,HC1908221451-信息流1-ios-排除(完件)-停车场-表单145-190822,1028.766,52581,5060,5100,45,9.62%,0.88%,19.565,0.203,22.861,11,24.44%,93.524,1,1028.766,0,0,0.00%
+2019/8/27,信息流1-安卓-停车收费-表单150-190822,HC1908221501-信息流1-安卓-信用卡组合-停车收费-表单150-190822,3029.86,213281,18447,18661,263,8.65%,1.41%,14.206,0.164,11.52,37,14.07%,81.888,9,336.651,1,3029.86,11.11%
+2019/8/27,信息流1-安卓-找爸要钱-表单149-190822,HC1908221491-信息流1-安卓-银行组合(完件)-找爸要钱-表单149-190822,1031.255,96524,7150,7193,139,7.41%,1.93%,10.684,0.144,7.419,18,12.95%,57.292,1,1031.255,0,0,0.00%
+2019/8/27,信息流1-安卓-跪键盘-表单148-190820,HC1908211482-信息流1-安卓-银行借贷组合男(完件)-跪键盘-表单148-190821,189.181,13306,1414,1421,24,10.63%,1.69%,14.218,0.134,7.883,5,20.83%,37.836,1,189.181,0,0,0.00%
+2019/8/27,信息流1-安卓-跪键盘-表单148-190820,HC1908201481-信息流1-安卓-银行借贷组合(完件)-跪键盘-表单148-190820,1370.254,54089,3863,3942,68,7.14%,1.73%,25.333,0.355,20.151,9,13.24%,152.25,2,685.127,0,0,0.00%
+2019/8/27,信息流1-安卓-偷买礼物-表单147-190820,HC1908201471-信息流1-安卓-信用卡组合(完件)-买礼物-表单147-190820,0.36,19,2,3,0,10.53%,0.00%,18.947,0.18,0,0,0.00%,0,0,0,0,0,0.00%
+2019/8/27,信息流1-ios-情侣-表单144-190810,HC1908101441-信息流1-ios-排除-情侣-表单144-190810,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,0,0,0,0,0.00%
+2019/8/27,信息流1-安卓-8万-表单135-190806,HC1908061352-信息流1-安卓-银行APP-8万-表单135-190806,2443.341,165269,14884,15012,253,9.01%,1.69%,14.784,0.164,9.657,42,16.60%,58.175,10,244.334,2,1221.671,20.00%
+2019/8/27,信息流1-安卓-8万-表单135-190806,HC1908061351-信息流1-安卓-银行APP-8万-表单135-190806,59.503,4513,440,442,8,9.75%,1.81%,13.185,0.135,7.438,3,37.50%,19.834,0,0,0,0,0.00%
+2019/8/27,信息流1-安卓-鹏哥-表单134-190805,HC1908051341-信息流1-安卓-信用卡优质人群-鹏哥-表单134-190805,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,0,0,0,0,0.00%
+2019/8/27,信息流1-安卓-农村2-表单133-190805,HC1908051331-信息流1-安卓-信用卡优质人群-农村2-表单133-190805,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,1,0,0,0,0.00%
+2019/8/27,信息流1-安卓-农村2-表单126-190731,HC1907311261-信息流1-安卓-优质关键词人群-农村2-表单126-190731,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,1,0,0,0,0.00%
+2019/8/27,信息流1-安卓-8万-表单125-190730,HC1907271251-信息流1-安卓-信用卡借贷-8万-表单125-190730,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,0,0,0,0,0.00%
+2019/8/27,信息流1-安卓-农村2-表单121-190727,HC1907271212-信息流1-安卓-银行APP-农村2-表单121-190729,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,1,0,0,0,0.00%
+2019/8/27,信息流1-安卓-农村 -完件-表单105-20190708,HC1907081054-信息流1-安卓-信用卡银行组合-农村 -表单105-20190716,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,1,0,0,0,0.00%
+2019/8/27,信息流1-ios-吃饭租房买车(支付)-表单108-190714,HC1907141081-信息流1-ios-排除(完件)-吃饭租房买车(支付)-表单108-190714,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,1,0,0,0,0.00%
+2019/8/27,信息流1-安卓-老妹-表单96-190629,HC190629962-信息流1-安卓-银行APP-老妹-表单96-190629,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,2,0,0,0,0.00%
+2019/8/27,信息流1-安卓-买单(支付场景)-表单88-190621,HC190621881-信息流1-安卓-信用卡-买单(支付场景)-表单88-190621,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,1,0,0,0,0.00%
+2019/8/27,信息流1-安卓-支付场景(吃饭租房买车)-表单82-190613,HC190613823-信息流1-安卓-排除-支付场景(吃饭租房买车)-表单82-190614,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,2,0,0,0,0.00%
+2019/8/27,信息流1-安卓-采访黄衣女-表单55-190514,HC19051559-信息流1-安卓-排除-采访黄衣女-表单55-190613,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,1,0,0,0,0.00%
+2019/8/27,信息流1-安卓-采访黄衣女-表单55-190514,HC19051557-信息流1-安卓-排除-采访黄衣女-表单55-190522,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,1,0,0,0,0.00%
+2019/8/27,信息流1-安卓-采访黄衣女-表单55-190514,HC19051556-信息流1-安卓-支付人群-采访黄衣女-表单55-190521,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,1,0,0,0,0.00%
+2019/8/27,信用卡持有人群-早点-表单-IOS,biaodan-3-早点,3380.422,191011,4689,6718,161,2.45%,2.40%,17.698,0.721,20.996,30,18.63%,112.681,11,307.311,2,1690.211,18.18%
+2019/8/27,信用卡持有人群-早点-表单-IOS,biaodan-2-早点,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,0,0,0,0,0.00%
+2019/8/27,信用卡持有人群-早点-表单-安卓,biaodan-7-早点,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,1,0,0,0,0.00%
+2019/8/27,信用卡持有人群-早点-表单-安卓,biaodan-1-早点,7436.595,297704,16673,45139,706,5.60%,1.56%,24.98,0.446,10.533,92,13.03%,80.833,35,212.474,8,929.574,22.86%
+2019/8/27,信息流1-安卓-信用卡持有人群-灵动街坊-ecpc-190402,HC19040201-信息流1-安卓-信用卡持有人群-早点-ecpc-190402,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,0,0,0,0,0.00%

+ 13 - 0
jeecg-boot-module-system/src/main/resources/快手后台数据-户4.csv

@@ -0,0 +1,13 @@
+日期,广告计划,广告组,花费,封面曝光数,封面点击数,素材曝光数,行为数,封面点击率,行为率,平均千次封面曝光花费,平均封面点击单价,平均行为单价,提交按钮点击,表单提交率,表单提交单价,落地页完件数,落地页完件成本,落地页授信数,落地页授信成本,落地页授信率
+总计,,,5901.18,304856,20852,21075,302,6.84%,1.43%,19.357,0.283,19.54,43,14.24%,137.237,17,347.128,4,1475.295,23.53%
+2019/8/27,信息流1-安卓-街坊-表单432-190821,HC1908214321-信息流1-安卓-信用卡组合-街坊-表单432-190821,1000,42738,3624,3658,36,8.48%,0.98%,23.398,0.276,27.778,4,11.11%,250,1,1000,0,0,0.00%
+2019/8/27,信息流1-安卓-前男友-表单431-190821,HC1908204311-信息流1-安卓-信用银行组合-前男友-表单431-190820,0.235,5,3,3,0,60.00%,0.00%,47,0.078,0,0,0.00%,0,0,0,0,0,0.00%
+2019/8/27,信息流1-IOS-扫脸-表单145-190818,HC1908181451-信息流1-ios-排除-扫脸-表单145-190818,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,0,0,0,0,0.00%
+2019/8/27,信息流1-安卓-装修-表单430-190816,HC1908164301-信息流1-安卓-信用卡男性-装修-表单430-190816,630.522,51808,6083,6092,55,11.74%,0.90%,12.17,0.104,11.464,6,10.91%,105.087,0,0,0,0,0.00%
+2019/8/27,信息流1-安卓-扫脸-表单428-190815,HC1908164282-信息流1-安卓-银行组合-扫脸-表单428-190816,0,1,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,1,0,0,0,0.00%
+2019/8/27,信息流1-安卓-扫脸-表单428-190815,HC1908154281-信息流1-安卓-信用贷款组合-扫脸-表单428-190815,0.094,3,1,1,0,33.33%,0.00%,31.333,0.094,0,0,0.00%,0,0,0,0,0,0.00%
+2019/8/27,信息流1-安卓-手头紧-表单422-190807,HC1908074222-信息流1-安卓-银行APP-手头紧-表单422-190810,3888.801,187457,9550,9710,168,5.09%,1.73%,20.745,0.407,23.148,26,15.48%,149.569,11,353.527,2,1944.401,18.18%
+2019/8/27,信息流1-安卓-旅游-表单425-190808,HC1908084251-信息流1-安卓-信用卡优质人群-旅游-表单425-190809,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,0,0,0,0,0.00%
+2019/8/27,信息流1-安卓-手头紧-表单422-190807,HC1908074221-信息流1-安卓-信用卡优质人群-手头紧-表单422-190807,381.528,22844,1591,1611,43,6.96%,2.67%,16.701,0.24,8.873,7,16.28%,54.504,2,190.764,1,381.528,50.00%
+2019/8/27,信息流1-安卓-相亲-表单417-190801,HC1908014171-信息流1-安卓-贷款优质人群-相亲-表单417-190801,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,1,0,1,0,100.00%
+2019/8/27,信息流1-安卓-鹏哥-表单48-190724,HC190723482-信息流1-安卓-信用卡借贷-鹏哥-表单48-190726,0,0,0,0,0,0.00%,0.00%,0,0,0,0,0.00%,0,1,0,0,0,0.00%

+ 395 - 67
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -1,67 +1,395 @@
-//package org.jeecg;
-//
-//import java.util.List;
-//
-//import javax.annotation.Resource;
-//
-//import org.jeecg.modules.demo.mock.MockController;
-//import org.jeecg.modules.demo.test.entity.JeecgDemo;
-//import org.jeecg.modules.demo.test.mapper.JeecgDemoMapper;
-//import org.jeecg.modules.demo.test.service.IJeecgDemoService;
-//import org.jeecg.modules.system.service.ISysDataLogService;
-//import org.junit.Assert;
-//import org.junit.Test;
-//import org.junit.runner.RunWith;
-//import org.springframework.boot.test.context.SpringBootTest;
-//import org.springframework.test.context.junit4.SpringRunner;
-//
-//@RunWith(SpringRunner.class)
-//@SpringBootTest
-//public class SampleTest {
-//
-//	@Resource
-//	private JeecgDemoMapper jeecgDemoMapper;
-//	@Resource
-//	private IJeecgDemoService jeecgDemoService;
-//	@Resource
-//	private ISysDataLogService sysDataLogService;
-//	@Resource
-//	private MockController mock;
-//
-//	@Test
-//	public void testSelect() {
-//		System.out.println(("----- selectAll method test ------"));
-//		List<JeecgDemo> userList = jeecgDemoMapper.selectList(null);
-//		Assert.assertEquals(5, userList.size());
-//		userList.forEach(System.out::println);
-//	}
-//
-//	@Test
-//	public void testXmlSql() {
-//		System.out.println(("----- selectAll method test ------"));
-//		List<JeecgDemo> userList = jeecgDemoMapper.getDemoByName("Sandy12");
-//		userList.forEach(System.out::println);
-//	}
-//
-//	/**
-//	 * 测试事务
-//	 */
-//	@Test
-//	public void testTran() {
-//		jeecgDemoService.testTran();
-//	}
-//
-//	//author:lvdandan-----date:20190315---for:添加数据日志测试----
-//	/**
-//	 * 测试数据日志添加
-//	 */
-//	@Test
-//	public void testDataLogSave() {
-//		System.out.println(("----- datalog test ------"));
-//		String tableName = "jeecg_demo";
-//		String dataId = "4028ef81550c1a7901550c1cd6e70001";
-//		String dataContent = mock.sysDataLogJson();
-//		sysDataLogService.addDataLog(tableName, dataId, dataContent);
-//	}
-//	//author:lvdandan-----date:20190315---for:添加数据日志测试----
-//}
+package org.jeecg;
+
+import java.io.*;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import cn.com.ctop.common.utils.OSSUtils;
+import org.apache.ibatis.annotations.Param;
+import org.apache.poi.hssf.usermodel.HSSFDataFormat;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFDataFormat;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.jeecg.common.util.ResultMapUtils;
+import org.jeecg.common.util.StatusCode;
+import org.jeecg.modules.ctop.mapper.PlatformCampaignStatisticInfoMapper;
+import org.jeecg.modules.ctop.service.IReportService;
+import org.jeecg.modules.ctop.vo.StatisticCampaignVo;
+import org.jeecg.modules.demo.mock.MockController;
+import org.jeecg.modules.demo.test.entity.JeecgDemo;
+import org.jeecg.modules.demo.test.mapper.JeecgDemoMapper;
+import org.jeecg.modules.demo.test.service.IJeecgDemoService;
+import org.jeecg.modules.system.service.ISysDataLogService;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class SampleTest {
+
+    @Resource
+    private JeecgDemoMapper jeecgDemoMapper;
+    @Resource
+    private IJeecgDemoService jeecgDemoService;
+    @Resource
+    private ISysDataLogService sysDataLogService;
+    @Resource
+    private MockController mock;
+
+    @Autowired
+    private IReportService reportService;
+
+    @Test
+    public void loadCustomerData() {
+        Map<String, Object> result = new HashMap<>();
+        String csvPath = "D:\\工作文件\\360借条\\借条后台数据实时.csv";
+        reportService.insertCustomerInfo(csvPath, "utf8");
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
+    }
+
+    @Test
+    public void loadPlatformData() {
+        Map<String, Object> result = new HashMap<>();
+        String csvPath4 = "D:\\工作文件\\360借条\\快手后台数据-户4.csv";
+        reportService.insertPlatformInfo(csvPath4, "GBK", 4L);
+        String csvPath1 = "D:\\工作文件\\360借条\\快手后台数据-户1.csv";
+        reportService.insertPlatformInfo(csvPath1, "GBK", 1L);
+    }
+
+    @Test
+    public void getExcelData() throws Exception {
+        String statisticDate = "2019-08-23";
+        Long accountId = 4L;
+        Long secondId = 1L;
+        List<StatisticCampaignVo> statisticCampaign4Vos = statisticInfoMapper.getVoByParams(statisticDate, accountId);
+        List<StatisticCampaignVo> statisticCampaign1Vos = statisticInfoMapper.getVoByParams(statisticDate, secondId);
+
+        File f = new File("D:\\upload\\excel\\template.xlsx");
+        InputStream inputStream = new FileInputStream(f);
+        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream);
+//        //获取第一个sheet
+        XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
+        CellStyle numbericCellStyle = xssfWorkbook.createCellStyle();
+        numbericCellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
+        int index;
+        for (index = 1; index < statisticCampaign4Vos.size() + 1; index++) {
+            StatisticCampaignVo vo = statisticCampaign4Vos.get(index - 1);
+            System.out.println(vo.toString());
+            String content = vo.getContent();
+            String[] contents = content.split("-");
+            Row row = xssfSheet.getRow(index);
+            setExcelRow(numbericCellStyle, vo, contents, row, "single");
+        }
+        Row totalRow = xssfSheet.getRow(index);
+        StatisticCampaignVo total = statisticInfoMapper.getTotalStatisticVoByparams(statisticDate, accountId);
+        if (null != total) {
+            setExcelRow(numbericCellStyle, total, new String[]{}, totalRow, "total4");
+        }
+        index++;
+        for (int j = 0; j < statisticCampaign1Vos.size(); j++) {
+            index++;
+            StatisticCampaignVo vo = statisticCampaign1Vos.get(j);
+            System.out.println(vo.toString());
+            String content = vo.getContent();
+            String[] contents = content.split("-");
+            Row row = xssfSheet.getRow(index);
+            setExcelRow(numbericCellStyle, vo, contents, row, "single");
+        }
+        index++;
+        Row totalRow1 = xssfSheet.getRow(index);
+        StatisticCampaignVo total1 = statisticInfoMapper.getTotalStatisticVoByparams(statisticDate, secondId);
+        if (null != total1) {
+            setExcelRow(numbericCellStyle, total1, new String[]{}, totalRow1, "total1");
+        }
+
+        FileOutputStream fileOutputStream = new FileOutputStream("D:\\upload\\excel\\get.xlsx");
+        xssfWorkbook.write(fileOutputStream);
+        fileOutputStream.close();
+
+
+    }
+
+    @Test
+    public void testFileType() {
+        File file = new File("D:\\工作文件\\360借条\\快手后台数据-户1.csv");
+        System.out.println(file);
+    }
+
+    private void setExcelRow(CellStyle numbericCellStyle, StatisticCampaignVo vo, String[] contents, Row row, String type) {
+        for (int j = 0; j < 38; j++) {
+            Cell cell = row.createCell(j);
+            if (j == 0) {
+                //日期
+                if (null != type && type.equals("single")) {
+                    cell.setCellValue(vo.getStatisticDate());
+                } else if (null != type && type.equals("total1")) {
+                    cell.setCellValue("户一总计");
+                } else {
+                    cell.setCellValue("户四总计");
+                }
+            } else if (j == 1) {
+                //代理
+                cell.setCellValue(vo.getProxy());
+            } else if (j == 2) {
+                //投放系统
+                if (null != contents && contents.length > 3) {
+                    cell.setCellValue(contents[2]);
+                } else {
+                    cell.setCellValue("");
+                }
+            } else if (j == 3) {
+                //渠道号
+                if (null != contents && contents.length > 2) {
+                    cell.setCellValue(contents[1]);
+                } else {
+                    cell.setCellValue("");
+                }
+            } else if (j == 4) {
+                //content
+                if (null != contents && contents.length > 0) {
+                    cell.setCellValue(contents[0]);
+                } else {
+                    cell.setCellValue("");
+                }
+//                cell.setCellValue(vo.getContent());
+            } else if (j == 5) {
+                if (null != contents && contents.length > 5) {
+                    cell.setCellValue(contents[4]);
+                } else {
+                    cell.setCellValue("");
+                }
+            } else if (j == 6) {
+                //出价方式
+                if (null != contents && contents.length > 6) {
+                    cell.setCellValue(contents[5]);
+                } else {
+                    cell.setCellValue("");
+                }
+            } else if (j == 7) {
+                //定向条件
+                if (null != contents && contents.length > 4) {
+                    cell.setCellValue(contents[3]);
+                } else {
+                    cell.setCellValue("");
+                }
+            } else if (j == 8) {
+                //定向条件
+                if (null != contents && contents.length > 7) {
+                    cell.setCellValue(contents[6]);
+                } else {
+                    cell.setCellValue("");
+                }
+            } else if (j == 9) {
+                //花费
+                if (null != vo.getCost() && !"".equals(vo.getCost())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCost()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 10) {
+                //封面曝光数
+                if (null != vo.getCoverViews() && !"".equals(vo.getCoverViews())) {
+                    cell.setCellValue(Integer.parseInt(vo.getCoverViews()));
+                }
+            } else if (j == 11) {
+                //封面点击数
+                if (null != vo.getCoverClick() && !"".equals(vo.getCoverClick())) {
+                    cell.setCellValue(Integer.parseInt(vo.getCoverClick()));
+                }
+            } else if (j == 12) {
+                //素材曝光数
+                if (null != vo.getMaterialViews() && !"".equals(vo.getMaterialViews())) {
+                    cell.setCellValue(Integer.parseInt(vo.getMaterialViews()));
+                }
+            } else if (j == 13) {
+                //行为数
+                if (null != vo.getActions() && !"".equals(vo.getActions())) {
+                    cell.setCellValue(Integer.parseInt(vo.getActions()));
+                }
+            } else if (j == 14) {
+                //点击率
+                if (null != vo.getClickRate() && !"".equals(vo.getClickRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getClickRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 15) {
+                //行为点击率
+                if (null != vo.getActionClickRate() && !"".equals(vo.getActionClickRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getActionClickRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 16) {
+                //ACTR*BCTR
+                if (null != vo.getAbctr() && !"".equals(vo.getAbctr())) {
+                    cell.setCellValue(Float.parseFloat(vo.getAbctr()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 17) {
+                //点击成本
+                if (null != vo.getClickPrice() && !"".equals(vo.getClickPrice())) {
+                    cell.setCellValue(Float.parseFloat(vo.getClickPrice()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 18) {
+                //行为成本
+                if (null != vo.getActionPrice() && !"".equals(vo.getActionPrice())) {
+                    cell.setCellValue(Float.parseFloat(vo.getActionPrice()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 19) {
+                //注册用户
+                if (null != vo.getRegistUserNum() && !"".equals(vo.getRegistUserNum())) {
+                    cell.setCellValue(Integer.parseInt(vo.getRegistUserNum()));
+                }
+            } else if (j == 20) {
+                //完件用户
+                if (null != vo.getComplateUserNum() && !"".equals(vo.getComplateUserNum())) {
+                    cell.setCellValue(Integer.parseInt(vo.getComplateUserNum()));
+                }
+            } else if (j == 21) {
+                //授信用户
+                if (null != vo.getCreditUserNum() && !"".equals(vo.getCreditUserNum())) {
+                    cell.setCellValue(Integer.parseInt(vo.getCreditUserNum()));
+                }
+            } else if (j == 22) {
+                //当日注册且完件数
+                if (null != vo.getRegistCompleteNum() && !"".equals(vo.getRegistCompleteNum())) {
+                    cell.setCellValue(Integer.parseInt(vo.getRegistCompleteNum()));
+                }
+            } else if (j == 23) {
+                //当日注册且授信数
+                if (null != vo.getRegistCreditNum() && !"".equals(vo.getRegistCreditNum())) {
+                    cell.setCellValue(Integer.parseInt(vo.getRegistCreditNum()));
+                }
+            } else if (j == 25) {
+                //注册成本
+                if (null != vo.getRegistPrice() && !"".equals(vo.getRegistPrice())) {
+                    cell.setCellValue(Float.parseFloat(vo.getRegistPrice()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 26) {
+                //完件成本
+                if (null != vo.getCompletePrice() && !"".equals(vo.getCompletePrice())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCompletePrice()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 27) {
+                //授信成本
+                if (null != vo.getCreditPrice() && !"".equals(vo.getCreditPrice())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCreditPrice()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 28) {
+                //当日注册且完件成本
+                if (null != vo.getRegistCompletePrice() && !"".equals(vo.getRegistCompletePrice())) {
+                    cell.setCellValue(Float.parseFloat(vo.getRegistCompletePrice()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 29) {
+                //当日注册且授信成本
+                if (null != vo.getRegistCreditPrice() && !"".equals(vo.getRegistCreditPrice())) {
+                    cell.setCellValue(Float.parseFloat(vo.getRegistCreditPrice()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 30) {
+                //点击注册率
+                if (null != vo.getClickRegistRate() && !"".equals(vo.getClickRegistRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getClickRegistRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 31) {
+                //行为注册率
+                if (null != vo.getActionRegistRate() && !"".equals(vo.getActionRegistRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getActionRegistRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 32) {
+                //完件率
+                if (null != vo.getCompleteRate() && !"".equals(vo.getCompleteRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCompleteRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 33) {
+                //授信率
+                if (null != vo.getCreditRate() && !"".equals(vo.getCreditRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCreditRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 34) {
+                //当日完件率
+                if (null != vo.getRegistCompleteRate() && !"".equals(vo.getRegistCompleteRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getRegistCompleteRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 35) {
+                //当日授信率
+                if (null != vo.getRegistCreditRate() && !"".equals(vo.getRegistCreditRate())) {
+                    cell.setCellValue(Float.parseFloat(vo.getRegistCreditRate()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 36) {
+                //当日完件/完件
+                if (null != vo.getCompleteRateDay() && !"".equals(vo.getCompleteRateDay())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCompleteRateDay()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 37) {
+                //当日授信/授信
+                if (null != vo.getCreditRateDay() && !"".equals(vo.getCreditRateDay())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCreditRateDay()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            } else if (j == 38) {
+                //当日授信/注册
+                if (null != vo.getCreditRegistRateDay() && !"".equals(vo.getCreditRegistRateDay())) {
+                    cell.setCellValue(Float.parseFloat(vo.getCreditRegistRateDay()));
+                    cell.setCellStyle(numbericCellStyle);
+                }
+            }
+        }
+    }
+
+    @Test
+    public void toPlateform() throws IOException {
+        File f = new File("D:\\upload\\excel\\template.xlsx");
+        InputStream inputStream = new FileInputStream(f);
+        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream);
+//        //获取第一个sheet
+        XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
+        for (int i = 1; i < 6; i++) {
+            System.out.println("i:" + i);
+            Row row = xssfSheet.getRow(i);
+            for (int j = 1; j < 4; j++) {
+                Cell cell = row.createCell(j);
+                if (j == 3) {
+                    cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
+                    cell.setCellFormula("B2*C2");
+                } else {
+                    cell.setCellValue(i);
+                }
+            }
+        }
+        FileOutputStream fileOutputStream = new FileOutputStream("D:\\upload\\excel\\get.xlsx");
+        xssfWorkbook.write(fileOutputStream);
+        fileOutputStream.close();
+    }
+
+    @Test
+    public void testFileUpload() {
+        OSSUtils.uploadObject2Oss(new File("D:\\upload\\excel\\template.xlsx"));
+    }
+
+    @Autowired
+    private PlatformCampaignStatisticInfoMapper statisticInfoMapper;
+
+}

+ 3 - 3
module-common/src/main/java/cn/com/ctop/common/utils/CsvUtils.java

@@ -24,9 +24,9 @@ public class CsvUtils {
         }
     }
 
-    public static List<String[]> ReadCSV(String inPath) throws IOException {
+    public static List<String[]> ReadCSV(String inPath, String charset) throws IOException {
         List<String[]> list = new ArrayList<>();
-        CsvReader reader = new CsvReader(inPath, ',', Charset.forName("gb2312"));
+        CsvReader reader = new CsvReader(inPath, ',', Charset.forName(charset));
         reader.readHeaders();
         while (reader.readRecord()) {
             list.add(reader.getValues());
@@ -61,7 +61,7 @@ public class CsvUtils {
         String[] header = new String[]{"日期", "plan", "广告组", "花费", "曝光数", "点击数", "行为数", "点击率", "行为率", "平均千次曝光花费", "平均点击单价", "平均行为单价", "提交按钮点击", "表单提交率", "表单提交单价"};
         String inPath = "D:\\工作文件\\360借条\\effect_unit_2019-08-02-00_2019-08-02-00.csv";
         String outPath = "D:\\工作文件\\360借条\\effect_unit_2019-08-02-00_2019-08-02-00_bak.csv";
-        List<String[]> list = CsvUtils.ReadCSV(inPath);
+        List<String[]> list = CsvUtils.ReadCSV(inPath, "utf8");
         CsvUtils.WriteCSV(outPath, list);
 
     }

+ 44 - 0
module-common/src/main/java/cn/com/ctop/common/utils/OSSUtils.java

@@ -17,6 +17,7 @@ import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
+import java.util.Date;
 
 @Configuration
 @PropertySource("classpath:config.properties")
@@ -153,6 +154,9 @@ public class OSSUtils {
             metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");
             // 上传文件 (上传文件流的形式)
             PutObjectResult putResult = ossClient.putObject(bucketName, folder + fileName, is, metadata);
+            Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
+            String url = ossClient.generatePresignedUrl(bucketName, folder + fileName, expiration).toString();
+            System.out.println(url);
             System.out.println(putResult.toString());
             // 解析结果
             resultStr = putResult.getETag();
@@ -164,6 +168,46 @@ public class OSSUtils {
     }
 
     /**
+     * 上传文件至OSS
+     *
+     * @param file 上传文件(文件全路径如:D:\\image\\cake.jpg)
+     * @return String 返回访问链接
+     */
+    public static String uploadFile2Oss(File file) {
+        String resultStr = null;
+        try {
+            OSS ossClient = OSSUtils.getOssClient();
+            // 以输入流的形式上传文件
+            InputStream is = new FileInputStream(file);
+            // 文件名
+            String fileName = file.getName();
+            // 文件大小
+            Long fileSize = file.length();
+            // 创建上传Object的Metadata
+            ObjectMetadata metadata = new ObjectMetadata();
+            // 上传的文件的长度
+            metadata.setContentLength(is.available());
+            // 指定该Object被下载时的网页的缓存行为
+            metadata.setCacheControl("no-cache");
+            // 指定该Object下设置Header
+            metadata.setHeader("Pragma", "no-cache");
+            // 指定该Object被下载时的内容编码格式
+            metadata.setContentEncoding("utf-8");
+            // 文件的MIME,定义文件的类型及网页编码,决定浏览器将以什么形式、什么编码读取文件。如果用户没有指定则根据Key或文件名的扩展名生成,
+            // 如果没有扩展名则填默认值application/octet-stream
+            metadata.setContentType(getContentType(fileName));
+            // 指定该Object被下载时的名称(指示MINME用户代理如何显示附加的文件,打开或下载,及文件名称)
+            metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");
+            Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
+            resultStr = ossClient.generatePresignedUrl(bucketName, folder + fileName, expiration).toString();
+        } catch (Exception e) {
+            e.printStackTrace();
+            logger.error("上传阿里云OSS服务器异常." + e.getMessage(), e);
+        }
+        return resultStr;
+    }
+
+    /**
      * 通过文件名判断并获取OSS服务文件上传时文件的contentType
      *
      * @param fileName 文件名