yumeng 5 gadi atpakaļ
vecāks
revīzija
8a983f729b

+ 109 - 108
jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java

@@ -28,20 +28,20 @@ import java.util.Map;
 @Configuration
 public class ShiroConfig {
 
-	/**
-	 * Filter Chain定义说明
-	 *
-	 * 1、一个URL可以配置多个Filter,使用逗号分隔
-	 * 2、当设置多个过滤器时,全部验证通过,才视为通过
-	 * 3、部分过滤器可指定参数,如perms,roles
-	 */
-	@Bean("shiroFilter")
-	public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
-		ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
-		shiroFilterFactoryBean.setSecurityManager(securityManager);
-		// 拦截器
-		Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
-		// 配置不会被拦截的链接 顺序判断
+    /**
+     * Filter Chain定义说明
+     * <p>
+     * 1、一个URL可以配置多个Filter,使用逗号分隔
+     * 2、当设置多个过滤器时,全部验证通过,才视为通过
+     * 3、部分过滤器可指定参数,如perms,roles
+     */
+    @Bean("shiroFilter")
+    public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
+        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
+        shiroFilterFactoryBean.setSecurityManager(securityManager);
+        // 拦截器
+        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
+        // 配置不会被拦截的链接 顺序判断
         //登录接口排除
         filterChainDefinitionMap.put("/sys/login", "anon");
 
@@ -69,122 +69,123 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/sys/common/download/**", "anon");
         //pdf预览
         filterChainDefinitionMap.put("/sys/common/pdf/**", "anon");
-		filterChainDefinitionMap.put("/ctop/bytedanceAreaInfo/**", "anon");
-		filterChainDefinitionMap.put("/ctop/bytedanceInterestCategory/**", "anon");
-		filterChainDefinitionMap.put("/template/creative/words/get", "anon");
+        filterChainDefinitionMap.put("/ctop/bytedanceAreaInfo/**", "anon");
+        filterChainDefinitionMap.put("/ctop/bytedanceInterestCategory/**", "anon");
+        filterChainDefinitionMap.put("/template/creative/words/get", "anon");
         filterChainDefinitionMap.put("/appium/crawler/startJob", "anon");
 
         filterChainDefinitionMap.put("/generic/**", "anon");
-		filterChainDefinitionMap.put("/", "anon");
-		filterChainDefinitionMap.put("/doc.html", "anon");
-		filterChainDefinitionMap.put("/**/*.js", "anon");
-		filterChainDefinitionMap.put("/**/*.css", "anon");
-		filterChainDefinitionMap.put("/**/*.html", "anon");
-		filterChainDefinitionMap.put("/**/*.svg", "anon");
-		filterChainDefinitionMap.put("/**/*.jpg", "anon");
-		filterChainDefinitionMap.put("/**/*.png", "anon");
-		filterChainDefinitionMap.put("/**/*.ico", "anon");
-		filterChainDefinitionMap.put("/druid/**", "anon");
-		filterChainDefinitionMap.put("/swagger-ui.html", "anon");
-		filterChainDefinitionMap.put("/swagger**/**", "anon");
-		filterChainDefinitionMap.put("/webjars/**", "anon");
-		filterChainDefinitionMap.put("/v2/**", "anon");
+        filterChainDefinitionMap.put("/", "anon");
+        filterChainDefinitionMap.put("/doc.html", "anon");
+        filterChainDefinitionMap.put("/**/*.js", "anon");
+        filterChainDefinitionMap.put("/**/*.css", "anon");
+        filterChainDefinitionMap.put("/**/*.html", "anon");
+        filterChainDefinitionMap.put("/**/*.svg", "anon");
+        filterChainDefinitionMap.put("/**/*.jpg", "anon");
+        filterChainDefinitionMap.put("/**/*.png", "anon");
+        filterChainDefinitionMap.put("/**/*.ico", "anon");
+        filterChainDefinitionMap.put("/druid/**", "anon");
+        filterChainDefinitionMap.put("/swagger-ui.html", "anon");
+        filterChainDefinitionMap.put("/swagger**/**", "anon");
+        filterChainDefinitionMap.put("/webjars/**", "anon");
+        filterChainDefinitionMap.put("/v2/**", "anon");
         filterChainDefinitionMap.put("/kuaishou", "anon");
         filterChainDefinitionMap.put("/kuaishou/report", "anon");
-		filterChainDefinitionMap.put("/ctop/bindAccount/**", "anon");
-		filterChainDefinitionMap.put("/**/*.mp4", "anon");
+        filterChainDefinitionMap.put("/ctop/bindAccount/**", "anon");
+        filterChainDefinitionMap.put("/**/*.mp4", "anon");
 
 
-		//性能监控
-		filterChainDefinitionMap.put("/actuator/metrics/**", "anon");
-		filterChainDefinitionMap.put("/actuator/httptrace/**", "anon");
-		filterChainDefinitionMap.put("/actuator/redis/**", "anon");
+        //性能监控
+        filterChainDefinitionMap.put("/actuator/metrics/**", "anon");
+        filterChainDefinitionMap.put("/actuator/httptrace/**", "anon");
+        filterChainDefinitionMap.put("/actuator/redis/**", "anon");
         //消息队列
         filterChainDefinitionMap.put("/mq/**", "anon");
         //模板测试
         filterChainDefinitionMap.put("/test/**", "anon");
-		//oauth接口
+        //oauth接口
         filterChainDefinitionMap.put("/auth/**", "anon");
-		filterChainDefinitionMap.put("/ctop/syncdata/**", "anon");
-		//头条接口
+        filterChainDefinitionMap.put("/ctop/syncdata/**", "anon");
+        //头条接口
         filterChainDefinitionMap.put("/bytedance", "anon");
-		filterChainDefinitionMap.put("/toutiao/dictitem/list", "anon");
+        filterChainDefinitionMap.put("/toutiao/dictitem/list", "anon");
         filterChainDefinitionMap.put("/toutiao/loadAllData", "anon");
         filterChainDefinitionMap.put("/toutiao/loadSingleData", "anon");
-		filterChainDefinitionMap.put("/kuaishou/getReport/historyData", "anon");
-		filterChainDefinitionMap.put("/toutiao/advertiser/**", "anon");
+        filterChainDefinitionMap.put("/kuaishou/getReport/historyData", "anon");
+        filterChainDefinitionMap.put("/toutiao/advertiser/**", "anon");
         filterChainDefinitionMap.put("/toutiao/industry/list", "anon");
         filterChainDefinitionMap.put("/template/bytedance/industry/list", "anon");
         filterChainDefinitionMap.put("/template/convert/list", "anon");
-		filterChainDefinitionMap.put("/template/convert/list/url", "anon");
+        filterChainDefinitionMap.put("/template/convert/list/url", "anon");
         //文件上传接口
-		filterChainDefinitionMap.put("/upload/**", "anon");
+        filterChainDefinitionMap.put("/upload/**", "anon");
         filterChainDefinitionMap.put("/appium/appiumTask/run", "anon");
 
 
         filterChainDefinitionMap.put("/system/userCompany/**", "anon");
-
-
-
-		filterChainDefinitionMap.put("/appium/appiumTask/run/login", "anon");
-		//爬虫接口
-		filterChainDefinitionMap.put("/graphql/video", "anon");
-		filterChainDefinitionMap.put("/ks/web/test", "anon");
-		// 添加自己的过滤器并且取名为jwt
-		Map<String, Filter> filterMap = new HashMap<String, Filter>(1);
-		filterMap.put("jwt", new JwtFilter());
-		shiroFilterFactoryBean.setFilters(filterMap);
-		// <!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边
-		filterChainDefinitionMap.put("/**", "jwt");
-
-		// 未授权界面返回JSON
-		shiroFilterFactoryBean.setUnauthorizedUrl("/sys/common/403");
-		shiroFilterFactoryBean.setLoginUrl("/sys/common/403");
-		shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
-		return shiroFilterFactoryBean;
-	}
-
-	@Bean("securityManager")
-	public DefaultWebSecurityManager securityManager(ShiroRealm myRealm) {
-		DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
-		securityManager.setRealm(myRealm);
-
-		/*
-		 * 关闭shiro自带的session,详情见文档
-		 * http://shiro.apache.org/session-management.html#SessionManagement-
-		 * StatelessApplications%28Sessionless%29
-		 */
-		DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO();
-		DefaultSessionStorageEvaluator defaultSessionStorageEvaluator = new DefaultSessionStorageEvaluator();
-		defaultSessionStorageEvaluator.setSessionStorageEnabled(false);
-		subjectDAO.setSessionStorageEvaluator(defaultSessionStorageEvaluator);
-		securityManager.setSubjectDAO(subjectDAO);
-
-		return securityManager;
-	}
-
-	/**
-	 * 下面的代码是添加注解支持
-	 * @return
-	 */
-	@Bean
-	@DependsOn("lifecycleBeanPostProcessor")
-	public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
-		DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
-		defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
-		return defaultAdvisorAutoProxyCreator;
-	}
-
-	@Bean
-	public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
-		return new LifecycleBeanPostProcessor();
-	}
-
-	@Bean
-	public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
-		AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
-		advisor.setSecurityManager(securityManager);
-		return advisor;
-	}
+        filterChainDefinitionMap.put("/test/getGroupData/**", "anon");
+
+
+        filterChainDefinitionMap.put("/appium/appiumTask/run/login", "anon");
+        //爬虫接口
+        filterChainDefinitionMap.put("/graphql/video", "anon");
+        filterChainDefinitionMap.put("/ks/web/test", "anon");
+        // 添加自己的过滤器并且取名为jwt
+        Map<String, Filter> filterMap = new HashMap<String, Filter>(1);
+        filterMap.put("jwt", new JwtFilter());
+        shiroFilterFactoryBean.setFilters(filterMap);
+        // <!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边
+        filterChainDefinitionMap.put("/**", "jwt");
+
+        // 未授权界面返回JSON
+        shiroFilterFactoryBean.setUnauthorizedUrl("/sys/common/403");
+        shiroFilterFactoryBean.setLoginUrl("/sys/common/403");
+        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
+        return shiroFilterFactoryBean;
+    }
+
+    @Bean("securityManager")
+    public DefaultWebSecurityManager securityManager(ShiroRealm myRealm) {
+        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
+        securityManager.setRealm(myRealm);
+
+        /*
+         * 关闭shiro自带的session,详情见文档
+         * http://shiro.apache.org/session-management.html#SessionManagement-
+         * StatelessApplications%28Sessionless%29
+         */
+        DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO();
+        DefaultSessionStorageEvaluator defaultSessionStorageEvaluator = new DefaultSessionStorageEvaluator();
+        defaultSessionStorageEvaluator.setSessionStorageEnabled(false);
+        subjectDAO.setSessionStorageEvaluator(defaultSessionStorageEvaluator);
+        securityManager.setSubjectDAO(subjectDAO);
+
+        return securityManager;
+    }
+
+    /**
+     * 下面的代码是添加注解支持
+     *
+     * @return
+     */
+    @Bean
+    @DependsOn("lifecycleBeanPostProcessor")
+    public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
+        DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
+        defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
+        return defaultAdvisorAutoProxyCreator;
+    }
+
+    @Bean
+    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
+        return new LifecycleBeanPostProcessor();
+    }
+
+    @Bean
+    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
+        AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
+        advisor.setSecurityManager(securityManager);
+        return advisor;
+    }
 
 }

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

@@ -1,12 +1,19 @@
 package org.jeecg.modules.ctop.controller;
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.mapper.CtopOauthTokenMapper;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
 import cn.com.ctop.kuaishou.modules.graphql.service.IKuaishouWebInterfaceService;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.ctop.service.ICreateInternalService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Date;
+import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
@@ -46,4 +53,47 @@ public class TestController {
     }
 
 
+    @Autowired
+    private CtopOauthTokenMapper tokenMapper;
+    @Autowired
+    private IKuaishouInterfaceService kuaishouInterfaceService;
+
+    @GetMapping(value = "/getGroupData")
+    public String getGroupData() {
+
+
+        Date endDate = new Date();
+        QueryWrapper<CtopOauthToken> tokenQueryWrapper = new QueryWrapper<>();
+        tokenQueryWrapper.eq("media_id", 2);
+        List<CtopOauthToken> ctopOauthTokens = tokenMapper.selectList(tokenQueryWrapper);
+        for (CtopOauthToken token : ctopOauthTokens) {
+
+
+            for (int i = 0; i < 7; i++) {
+                Date getStartDate = DateUtils.addDay(endDate, -i);
+
+                //3:获取广告组信息数据
+                kuaishouInterfaceService.getAdvertiserGroupReportHourly(token, getStartDate, getStartDate);
+
+            }
+            for (int i = 0; i < 6; i++) {
+                Date getStartDate = new Date();
+                Date getEndDate = new Date();
+                if (i == 0) {
+                    getStartDate = DateUtils.addDay(endDate, -175 + i * 30);
+                    getEndDate = DateUtils.addDay(endDate, -150 + i * 30);
+                } else {
+                    getStartDate = DateUtils.addDay(endDate, -180 + i * 30);
+                    getEndDate = DateUtils.addDay(endDate, -150 + i * 30);
+                }
+
+                //3:获取广告组信息数据
+                kuaishouInterfaceService.getAdvertiserGroupReportDaily(token, getStartDate, getEndDate);
+
+            }
+
+
+        }
+        return "Success";
+    }
 }

+ 55 - 0
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -1,10 +1,15 @@
 package org.jeecg;
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.mapper.CtopOauthTokenMapper;
 import cn.com.ctop.common.module.utils.HttpUtils2;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumJobService;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumTaskService;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.impl.client.BasicCookieStore;
+import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.ctop.service.ICreateInternalService;
 import org.jeecg.modules.mq.Sender;
 import org.junit.Test;
@@ -19,6 +24,9 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.util.Date;
+import java.util.List;
+
 @RunWith(SpringRunner.class)
 @SpringBootTest
 @Slf4j
@@ -31,6 +39,7 @@ public class SampleTest {
     private ICreateInternalService createInternalService;
     @Autowired
     private IAppiumTaskService appiumTaskService;
+
     @Test
     public void testKs() throws InterruptedException {
         String url = "https://ad.e.kuaishou.com/#/welcome?redirectUrl=https%3A%2F%2Fad.e.kuaishou.com%2F%23%2Findex";
@@ -103,4 +112,50 @@ public class SampleTest {
         Sender sender = new Sender();
         sender.send();
     }
+
+    @Autowired
+    private IKuaishouInterfaceService kuaishouInterfaceService;
+    @Autowired
+    private CtopOauthTokenMapper tokenMapper;
+
+    @Test
+    public void loadKuaishouDataSingle() {
+
+
+        Date endDate = new Date();
+        QueryWrapper<CtopOauthToken> tokenQueryWrapper = new QueryWrapper<>();
+        tokenQueryWrapper.eq("media_id", 2);
+        List<CtopOauthToken> ctopOauthTokens = tokenMapper.selectList(tokenQueryWrapper);
+        for (CtopOauthToken token : ctopOauthTokens) {
+
+
+            for (int i = 0; i < 7; i++) {
+                Date getStartDate = DateUtils.addDay(endDate, -i);
+
+                //3:获取广告组信息数据
+                kuaishouInterfaceService.getAdvertiserGroupReportHourly(token, getStartDate, getStartDate);
+
+            }
+            for (int i = 0; i < 6; i++) {
+                Date getStartDate = new Date();
+                Date getEndDate = new Date();
+                if (i == 0) {
+                    getStartDate = DateUtils.addDay(endDate, -175 + i * 30);
+                    getEndDate = DateUtils.addDay(endDate, -150 + i * 30);
+                } else {
+                    getStartDate = DateUtils.addDay(endDate, -180 + i * 30);
+                    getEndDate = DateUtils.addDay(endDate, -150 + i * 30);
+                }
+
+                //3:获取广告组信息数据
+                kuaishouInterfaceService.getAdvertiserGroupReportDaily(token, getStartDate, getEndDate);
+
+            }
+
+
+        }
+
+
+    }
+
 }

+ 0 - 101
module-common/src/main/java/cn/com/ctop/common/module/utils/ExcelUtils.java

@@ -1,101 +0,0 @@
-package cn.com.ctop.common.module.utils;
-
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-public class ExcelUtils {
-    /**
-     * @param response
-     * @param fileName excel文件名
-     * @param headMap  表头map
-     * @param dataList 表格数据
-     */
-    public static void exportXlsx(HttpServletResponse response, String fileName,
-                                  Map<String, String> headMap, List<Map<String, Object>> dataList) {
-
-        Workbook workbook = exportXlsx(fileName, headMap, dataList);
-        response.setContentType("application/binary;charset=ISO8859_1");
-
-        OutputStream outputStream = null;
-
-        try {
-            outputStream = response.getOutputStream();
-            String fn = new String(fileName.getBytes(), "ISO8859_1");
-            response.setHeader("Content-disposition", "attachment; filename=" + fn + ".xlsx");
-            workbook.write(outputStream);
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            if (outputStream != null) {
-                try {
-                    outputStream.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-
-    }
-
-    /**
-     * 导出数据
-     *
-     * @param headMap
-     * @param dataList
-     */
-    public static Workbook exportXlsx(String sheetName, Map<String, String> headMap, List<Map<String, Object>> dataList) {
-
-        Workbook workbook = new XSSFWorkbook();
-
-        Sheet sheet = workbook.createSheet(sheetName);
-
-
-        int rowIndex = 0, columnIndex = 0;
-        Set<String> keys = headMap.keySet();
-
-        //表头
-        Row row = sheet.createRow(rowIndex++);
-        for (String key : keys) {
-            Cell cell = row.createCell(columnIndex++);
-            cell.setCellValue(headMap.get(key));
-        }
-
-        //内容
-        if (dataList != null && !dataList.isEmpty()) {
-            for (Map<String, Object> map : dataList) {
-                row = sheet.createRow(rowIndex++);
-                columnIndex = 0;
-                for (String key : keys) {
-                    Cell cell = row.createCell(columnIndex++);
-                    setCellValue(cell, map.get(key));
-                }
-            }
-        }
-
-        return workbook;
-    }
-
-    private static void setCellValue(Cell cell, Object obj) {
-        if (obj == null) {
-            return;
-        }
-        if (obj instanceof String) {
-            cell.setCellValue((String) obj);
-        } else if (obj instanceof Double) {
-            cell.setCellValue((Double) obj);
-        } else {
-            cell.setCellValue(obj.toString());
-        }
-    }
-
-}

+ 2 - 13
module-common/src/main/java/cn/com/ctop/common/module/utils/ExportExcelUtils.java

@@ -6,10 +6,6 @@ import org.apache.poi.hssf.usermodel.HSSFRichTextString;
 import org.apache.poi.hssf.util.HSSFColor;
 import org.apache.poi.xssf.usermodel.*;
 
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.text.SimpleDateFormat;
-import java.util.Date;
 import java.util.List;
 
 public class ExportExcelUtils {
@@ -21,16 +17,14 @@ public class ExportExcelUtils {
      * @param sheetTitle (sheet的名称)
      * @param headers    (表格的标题)
      * @param result     (表格的数据)
-     * @param out        (输出流)
+     * @return
      * @throws Exception
      * @Title: exportExcel
      * @Description: 导出Excel的方法
      * @author: evan @ 2014-01-09
-     * @return
      */
     public void exportExcel(XSSFWorkbook workbook, int sheetNum,
-                                    String sheetTitle, String[] headers, List<List<String>> result,
-                                    OutputStream out) throws Exception {
+                            String sheetTitle, String[] headers, List<List<String>> result) throws Exception {
         // 生成一个表格
         XSSFSheet sheet = workbook.createSheet();
         workbook.setSheetName(sheetNum, sheetTitle);
@@ -80,11 +74,6 @@ public class ExportExcelUtils {
                 index++;
             }
         }
-
-        out = new FileOutputStream("D:\\file" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString() +".xls");
-
-
-
     }
 
 }

+ 8 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouReportHourlyGroupMapper.xml

@@ -5,7 +5,11 @@
         replace into ctop_kuaishou_report_hourly_group(
         id,
         account_id,
+        campaign_id,
+        campaign_name,
         unit_id,
+        unit_name,
+        status,
         stat_date,
         stat_hour,
         charge,
@@ -59,7 +63,11 @@
         <foreach collection="groups" item="campaign" separator=",">
             (#{campaign.id},
             #{campaign.accountId},
+            #{campaign.campaignId},
+            #{campaign.campaignName},
             #{campaign.unitId},
+            #{campaign.unitName},
+            #{campaign.status},
             #{campaign.statDate},
             #{campaign.statHour},
             #{campaign.charge},

+ 92 - 43
module-report/src/main/java/cn/com/ctop/bytedance/controller/DailyReportController.java

@@ -1,28 +1,23 @@
 package cn.com.ctop.bytedance.controller;
 
 import cn.com.ctop.bytedance.service.IDailyReportService;
+import cn.com.ctop.bytedance.vo.DailyAccountReportVO;
+import cn.com.ctop.bytedance.vo.DailyGroupReportVO;
 import cn.com.ctop.bytedance.vo.DailyReportVO;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.ExportExcelUtils;
 import com.alibaba.fastjson.JSONObject;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.hssf.usermodel.HSSFCell;
-import org.apache.poi.hssf.usermodel.HSSFRow;
-import org.apache.poi.hssf.usermodel.HSSFSheet;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.jeecg.common.api.vo.Result;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-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.BufferedOutputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
 import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -54,44 +49,98 @@ public class DailyReportController {
 
     }
 
-    @RequestMapping("/exportDailyReport")
-    public void exportAllyScoreCount(HttpServletRequest request, HttpServletResponse response, @RequestBody JSONObject requestJson) {
 
+    /**
+     * 导出报表
+     *
+     * @return
+     */
+    @RequestMapping(value = "/exportDailyReport")
+    @ResponseBody
+    public void export(HttpServletRequest request, HttpServletResponse response, @RequestBody JSONObject requestJson) throws Exception {
+        DailyReportVO dailyReport = dailyReportService.getDailyReport(requestJson);
+
+        List<List<String>> accountData = new ArrayList<>();
+        if (!Check.isNull(dailyReport)) {
+            DailyAccountReportVO dailyAccountReport = dailyReport.getDailyAccountReport();
+            if (!Check.isNull(dailyAccountReport)) {
+                List rowData = new ArrayList();
+                rowData.add(requestJson.getString("date")); // 时间
+                rowData.add(String.valueOf(dailyAccountReport.getCost())); // 消耗
+                rowData.add(String.valueOf(dailyAccountReport.getContractRebateRealCharged())); // 激励花费
+                rowData.add(String.valueOf(dailyAccountReport.getActualCost())); // 实际花费
+                rowData.add(String.valueOf(dailyAccountReport.getPhotoShow())); // 展示数
+                rowData.add(String.valueOf(dailyAccountReport.getPhotoClick())); // 点击数
+                rowData.add(String.valueOf(dailyAccountReport.getPhotoClickRatio())); // 点击率
+                rowData.add(String.valueOf(dailyAccountReport.getPhotoClickCost())); // 平均点击花费
+                rowData.add(String.valueOf(dailyAccountReport.getBclick())); // 行为数
+                rowData.add(String.valueOf(dailyAccountReport.getActionRatio())); // 行为率
+                rowData.add(String.valueOf(dailyAccountReport.getImpression1kCost())); // 平均千次展现花费
+                rowData.add(String.valueOf(dailyAccountReport.getConversions())); // 转化数
+                rowData.add(String.valueOf(dailyAccountReport.getConversionPrice())); // 转化单价
+                rowData.add(String.valueOf(dailyAccountReport.getConversionRate())); // 转化率
+                rowData.add(String.valueOf(dailyAccountReport.getDiscountConversionPrice())); // 折后转化成本
+                accountData.add(rowData);
+            }
+        }
+
+        List<List<String>> group = new ArrayList<>();
+        List<DailyGroupReportVO> dailyGroupReport = dailyReport.getDailyGroupReport();
+        if (!Check.isNull(dailyGroupReport)) {
+            for (DailyGroupReportVO groupReportVO : dailyGroupReport) {
+                List dailyGroup = new ArrayList();
+                dailyGroup.add(String.valueOf(groupReportVO.getAccountId()));
+                dailyGroup.add(String.valueOf(groupReportVO.getAuthName()));
+                dailyGroup.add(String.valueOf(groupReportVO.getStatDate()));
+                dailyGroup.add(String.valueOf(groupReportVO.getCampaignName()));
+                dailyGroup.add(String.valueOf(groupReportVO.getUnitName()));
+                dailyGroup.add(String.valueOf(groupReportVO.getCost()));
+                dailyGroup.add(String.valueOf(groupReportVO.getDisCountCost()));
+                dailyGroup.add(String.valueOf(groupReportVO.getPhotoShow()));
+                dailyGroup.add(String.valueOf(groupReportVO.getPhotoClick()));
+                dailyGroup.add(String.valueOf(groupReportVO.getBclick()));
+                dailyGroup.add(String.valueOf(groupReportVO.getActionRatio()));
+                dailyGroup.add(String.valueOf(groupReportVO.getImpression1kCost()));
+                dailyGroup.add(String.valueOf(groupReportVO.getPhotoClickCost()));
+                dailyGroup.add(String.valueOf(groupReportVO.getConversions()));
+                dailyGroup.add(String.valueOf(groupReportVO.getConversionPrice()));
+                dailyGroup.add(String.valueOf(groupReportVO.getClickConversionRate()));
+                dailyGroup.add(String.valueOf(groupReportVO.getDiscountConversionPrice()));
+                group.add(dailyGroup);
+            }
 
-        try {
-            HSSFWorkbook wb = new HSSFWorkbook();
-            HSSFSheet sheet = wb.createSheet("1213");
-            HSSFRow row = sheet.createRow(0);
-            HSSFCell cell = row.createCell(0);
-            cell.setCellValue("你好,倾城");
-            FileOutputStream outInfo=new FileOutputStream("D:/test.xls");
-            response.reset();
-            response.setHeader("Content-disposition", "attachment; filename=商品.xls");
-            response.setContentType("application/msexcel");
-            wb.write(outInfo);
-            outInfo.close();
-
-
-
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
         }
 
+
+        String[] accountHeaders = {"时间", "消耗", "激励花费", "实际消耗", "展示数", "点击数", "点击率", "平均点击花费", "行为数", "行为率", "平均千次展现花费", "转化数", "转化单价", "转化率", "折后转化成本"};
+        String[] groupHeaders = {"账号", "账号名称", "日期", "计划名称", "广告组名称", "消耗", "折后消耗", "展示数", "点击数", "行为数", "行为率", "平均千次展示花费", "平均点击花费", "转化数", "转化单价", "点击转化率", "折后转化成本"};
+        OutputStream os = response.getOutputStream();
+        ExportExcelUtils eeu = new ExportExcelUtils();
+        XSSFWorkbook workbook = new XSSFWorkbook();
+        eeu.exportExcel(workbook, 0, "分日数据", accountHeaders, accountData);
+        eeu.exportExcel(workbook, 1, "分组数据", groupHeaders, group);
+        this.setResponseHeader(response, "日报.xls");
+        workbook.write(os);
+        os.flush();
+        os.close();
     }
 
-    public static void main(String[] args) {
+    //发送响应流方法
+    public void setResponseHeader(HttpServletResponse response, String fileName) {
         try {
-            HSSFWorkbook wb = new HSSFWorkbook();
-            HSSFSheet sheet = wb.createSheet("1213");
-            HSSFRow row = sheet.createRow(0);
-            HSSFCell cell = row.createCell(0);
-            cell.setCellValue("你好,倾城");
-            FileOutputStream outInfo=new FileOutputStream("D:/test.xls");
-            wb.write(outInfo);
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
+            try {
+                fileName = new String(fileName.getBytes(), "ISO8859-1");
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+            response.setContentType("application/octet-stream;charset=ISO8859-1");
+            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+            response.addHeader("Pargam", "no-cache");
+            response.addHeader("Cache-Control", "no-cache");
+        } catch (Exception ex) {
+            ex.printStackTrace();
         }
     }
+
+
 }

+ 21 - 28
module-report/src/main/java/cn/com/ctop/bytedance/mapper/xml/DailyReportMapper.xml

@@ -5,9 +5,9 @@
     <select id="getDailyReport" parameterType="Map" resultType="cn.com.ctop.bytedance.vo.DailyAccountReportVO">
         SELECT
         t1.*,
-        (t1.conversions / t1.bclick) conversionRate, -- 转化率
+        round((t1.conversions / t1.bclick),2) conversionRate, -- 转化率
 
-        (t1.conversionPrice / #{discount}) discountConversionPrice, -- 折后转化成本
+        round(t1.conversionPrice / #{discount},2) discountConversionPrice, -- 折后转化成本
 
         (SELECT sum(contract_rebate_real_charged)
         from ctop_kuaishou_daily_flows
@@ -36,7 +36,7 @@
         CASE
         WHEN sum(photo_show) != 0 THEN
         (
-        sum(photo_click) / sum(photo_show)
+        round( sum(photo_click) / sum(photo_show),2)
         )
         ELSE
         0
@@ -46,7 +46,7 @@
         CASE
         WHEN sum(charge) != 0 THEN
         (
-        sum(photo_click) / sum(charge)
+        round(sum(photo_click) / sum(charge),2)
         )
         ELSE
         0
@@ -58,7 +58,7 @@
         (
         CASE
         WHEN sum(aclick) != 0 THEN
-        (sum(bclick) / sum(aclick))
+        round(sum(bclick) / sum(aclick),2)
         ELSE
         0
         END
@@ -66,11 +66,8 @@
         (
         CASE
         WHEN sum(photo_show) != 0 THEN
-        (
-        (
-        sum(charge) / sum(photo_show)
-        ) * 1000
-        )
+        round( (sum(charge) / sum(photo_show)
+        ) * 1000,2)
         ELSE
         0
         END
@@ -89,11 +86,11 @@
         CASE
         WHEN sum(form_count) != 0 THEN
         (
-        sum(charge) / sum(form_count)
+        round(sum(charge) / sum(form_count),2)
         )
         WHEN sum(activation) != 0 THEN
         (
-        sum(charge) / sum(activation)
+        round(sum(charge) / sum(activation),2)
         )
         ELSE
         0
@@ -124,8 +121,8 @@
     <select id="getDailyGroupReport" parameterType="Map" resultType="cn.com.ctop.bytedance.vo.DailyGroupReportVO">
         SELECT
         t1.*,
-        (t1.conversions / photoClick) clickConversionRate, -- 点击转化率
-        (t1.conversionPrice / 1) discountConversionPrice-- 折后转化单价
+        round(t1.conversions / photoClick,2) clickConversionRate, -- 点击转化率
+        round(t1.conversionPrice / #{discount},2) discountConversionPrice-- 折后转化单价
         FROM
         (
         SELECT
@@ -142,40 +139,36 @@
         campaign_name campaignName, -- 计划名称
         unit_name unitName, -- 广告组名称
         sum(charge) cost, -- 花费
-        (sum(charge) / 1) disCountCost, -- 折后消费
+        round((sum(charge) / #{discount}),2) disCountCost, -- 折后消费
         sum(photo_show) photoShow, -- 展现数
         sum(photo_click) photoClick, -- 点击数
         sum(bclick) bclick, -- 行为数
         (
         CASE
         WHEN sum(aclick) != 0 THEN
-        (sum(bclick) / sum(aclick))
+        round(sum(bclick) / sum(aclick),2)
         ELSE
         0
         END
         ) actionRatio, -- 行为率
 
 
-
         (
         CASE
         WHEN sum(aclick) != 0 THEN
-        (sum(photo_click) / sum(aclick))
+        round(sum(photo_click) / sum(aclick),2)
         ELSE
         0
         END
         ) photoClickRatio, -- 点击率
 
 
-
         (
         CASE
-        WHEN sum(photo_show) != 0 THEN
-        (
-        (
-        sum(charge) / sum(photo_show)
-        ) * 1000
-        )
+        WHEN sum(photo_show) != 0
+        THEN
+        round((sum(charge) / sum(photo_show)
+        ) * 1000,2)
         ELSE
         0
         END
@@ -184,7 +177,7 @@
         CASE
         WHEN sum(charge) != 0 THEN
         (
-        sum(photo_click) / sum(charge)
+        round(sum(photo_click) / sum(charge),2)
         )
         ELSE
         0
@@ -204,11 +197,11 @@
         CASE
         WHEN sum(form_count) != 0 THEN
         (
-        sum(charge) / sum(form_count)
+        round(sum(charge) / sum(form_count),2)
         )
         WHEN sum(activation) != 0 THEN
         (
-        sum(charge) / sum(activation)
+        round(sum(charge) / sum(activation),2)
         )
         ELSE
         0

+ 0 - 11
module-report/src/main/java/cn/com/ctop/bytedance/service/IDailyReportService.java

@@ -3,9 +3,6 @@ package cn.com.ctop.bytedance.service;
 import cn.com.ctop.bytedance.vo.DailyReportVO;
 import com.alibaba.fastjson.JSONObject;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 /**
  * 日报
  */
@@ -18,12 +15,4 @@ public interface IDailyReportService {
      */
     DailyReportVO getDailyReport(JSONObject requestJson);
 
-    /**
-     * 数据导出
-     *
-     * @param request
-     * @param response
-     * @param requestJson
-     */
-    void exportDailyReport(HttpServletRequest request, HttpServletResponse response, JSONObject requestJson);
 }

+ 2 - 104
module-report/src/main/java/cn/com/ctop/bytedance/service/impl/DailyReportServiceImpl.java

@@ -6,21 +6,14 @@ import cn.com.ctop.bytedance.vo.DailyAccountReportVO;
 import cn.com.ctop.bytedance.vo.DailyGroupReportVO;
 import cn.com.ctop.bytedance.vo.DailyReportVO;
 import cn.com.ctop.common.module.utils.Check;
-import cn.com.ctop.common.module.utils.ExportExcelUtils;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -60,23 +53,16 @@ public class DailyReportServiceImpl implements IDailyReportService {
             if (!Check.isNull(dailyAccountReport)) {
                 BigDecimal cost = dailyAccountReport.getCost();
                 BigDecimal contractRebateRealCharged = dailyAccountReport.getContractRebateRealCharged();
-                if (Check.isNull(cost) && Check.isNull(contractRebateRealCharged)) {
-                    BigDecimal actualCost = (cost.subtract(contractRebateRealCharged)).divide(discount, 2, RoundingMode.HALF_UP);
+                if (Check.isNull(cost)) {
+                    BigDecimal actualCost = ((cost.subtract(contractRebateRealCharged)).divide(discount, 2, RoundingMode.HALF_UP));
                     dailyAccountReport.setActualCost(actualCost);
                 }
 
             }
             List<DailyGroupReportVO> dailyGroupReport = dailyReportMapper.getDailyGroupReport(requestMap);
-
             DailyReportVO dailyReport = new DailyReportVO();
             dailyReport.setDailyAccountReport(dailyAccountReport);
             dailyReport.setDailyGroupReport(dailyGroupReport);
-
-
-            System.err.println(dailyAccountReport);
-
-            System.err.println("------------------");
-            System.err.println(dailyGroupReport);
             log.info("日报统计完成,用时: " + ((System.currentTimeMillis() - startTime) / 1000) + " s");
             return dailyReport;
 
@@ -87,92 +73,4 @@ public class DailyReportServiceImpl implements IDailyReportService {
 
     }
 
-
-    /**
-     * 数据导出
-     *
-     * @param request
-     * @param response
-     * @param requestJson
-     */
-
-    @Override
-    public void exportDailyReport(HttpServletRequest request, HttpServletResponse response, JSONObject requestJson) {
-
-        try {
-            OutputStream outStream = new FileOutputStream("D:\\file");
-            DailyReportVO dailyReport = this.getDailyReport(requestJson);
-            List<List<String>> accountData = new ArrayList<List<String>>();
-            if (!Check.isNull(dailyReport)) {
-                DailyAccountReportVO dailyAccountReport = dailyReport.getDailyAccountReport();
-                if (!Check.isNull(dailyAccountReport)) {
-                    List rowData = new ArrayList();
-                    rowData.add(requestJson.getString("date")); // 时间
-                    rowData.add(String.valueOf(dailyAccountReport.getCost())); // 消耗
-                    rowData.add(String.valueOf(dailyAccountReport.getContractRebateRealCharged())); // 激励花费
-                    rowData.add(String.valueOf(dailyAccountReport.getActualCost())); // 实际花费
-                    rowData.add(String.valueOf(dailyAccountReport.getPhotoShow())); // 展示数
-                    rowData.add(String.valueOf(dailyAccountReport.getPhotoClick())); // 点击数
-                    rowData.add(String.valueOf(dailyAccountReport.getPhotoClickRatio())); // 点击率
-                    rowData.add(String.valueOf(dailyAccountReport.getPhotoClickCost())); // 平均点击花费
-                    rowData.add(String.valueOf(dailyAccountReport.getBclick())); // 行为数
-                    rowData.add(String.valueOf(dailyAccountReport.getActionRatio())); // 行为率
-                    rowData.add(String.valueOf(dailyAccountReport.getImpression1kCost())); // 平均千次展现花费
-                    rowData.add(String.valueOf(dailyAccountReport.getConversions())); // 转化数
-                    rowData.add(String.valueOf(dailyAccountReport.getConversionPrice())); // 转化单价
-                    rowData.add(String.valueOf(dailyAccountReport.getConversionRate())); // 转化率
-                    rowData.add(String.valueOf(dailyAccountReport.getDiscountConversionPrice())); // 折后转化成本
-
-                    accountData.add(rowData);
-                }
-
-
-            }
-
-
-            List<List<String>> groupReport = new ArrayList<List<String>>();
-
-            List<DailyGroupReportVO> dailyGroupReport = dailyReport.getDailyGroupReport();
-          /*  if(!Check.isNull(dailyGroupReport)){
-                for (DailyGroupReportVO groupReport : dailyGroupReport) {
-                    List rowData = new ArrayList();
-                    rowData.add(tIndexDetailDto.getAllyId());
-                    rowData.add(tIndexDetailDto.getProvince());
-                    rowData.add(tIndexDetailDto.getCity());
-                    rowData.add(tIndexDetailDto.getCounty());
-                    rowData.add(tIndexDetailDto.getBureau() + "");
-                    rowData.add(tIndexDetailDto.getFirstTenderYear());
-                    rowData.add(String.valueOf(tIndexDetailDto.getMonthInterestRateScore()));
-                    rowData.add(String.valueOf(tIndexDetailDto.getCapitalRateScore()));
-                    rowData.add(String.valueOf(tIndexDetailDto.getmTwoRateScore()));
-                    rowData.add(String.valueOf(tIndexDetailDto.getYqtzRateScore()));
-                    rowData.add(String.valueOf(tIndexDetailDto.getYearInterestRateScore()));
-                    rowData.add(String.valueOf(tIndexDetailDto.getYearCapitalRateScore()));
-                    rowData.add(String.valueOf(tIndexDetailDto.getYearMTwoRateScore()));
-                    rowData.add(String.valueOf(tIndexDetailDto.getYearYqtzRateScore()));
-                    rowData.add(String.valueOf(tIndexDetailDto.getYearSumScore()));
-                    data1.add(rowData);
-                }
-
-
-
-            }
-*/
-
-
-            String[] headers0 = {"时间", "消耗", "激励花费", "实际消耗", "展示数", "点击数", "点击率", "平均点击花费", "行为数", "行为率", "平均千次展现花费", "转化数", "转化单价", "转化率", "折后转化成本"};
-
-            ExportExcelUtils eeu = new ExportExcelUtils();
-            XSSFWorkbook workbook = new XSSFWorkbook();
-            eeu.exportExcel(workbook, 0, "分日数据", headers0, accountData, outStream);
-
-            //原理就是将所有的数据一起写入,然后再关闭输入流。
-            workbook.write(outStream);
-            outStream.close();
-        } catch (
-                Exception e) {
-            e.printStackTrace();
-
-        }
-    }
 }