Sfoglia il codice sorgente

返点-首投有效素材_导出

zhaoxian 1 anno fa
parent
commit
3d1ebdb423

+ 90 - 2
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/utils/ExportExcelUtils.java

@@ -5,7 +5,14 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFDateUtil;
-import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.FillPatternType;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.apache.poi.xssf.usermodel.XSSFCell;
 import org.apache.poi.xssf.usermodel.XSSFCellStyle;
 import org.apache.poi.xssf.usermodel.XSSFFont;
@@ -13,7 +20,6 @@ import org.apache.poi.xssf.usermodel.XSSFRichTextString;
 import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.bytedeco.javacpp.presets.opencv_core;
 import org.jeecg.common.util.DateUtils;
 
 import javax.servlet.http.HttpServletResponse;
@@ -376,6 +382,88 @@ public class ExportExcelUtils {
         }
     }
 
+    public void exportExcelForFirstDelivery(XSSFWorkbook workbook, int sheetNum, String sheetTitle, String[] headers, List<List<Object>> result) {
+        // 生成一个表格
+        XSSFSheet sheet = workbook.createSheet();
+        workbook.setSheetName(sheetNum, sheetTitle);
+        // 设置表格默认列宽度为20个字节
+        sheet.setDefaultColumnWidth((short) 20);
+        // 生成一个样式
+        XSSFCellStyle style = workbook.createCellStyle();
+        // 设置这些样式
+        style.setFillForegroundColor(IndexedColors.PALE_BLUE.index);
+        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        style.setBorderBottom(BorderStyle.THIN);
+        style.setBorderLeft(BorderStyle.THIN);
+        style.setBorderRight(BorderStyle.THIN);
+        style.setBorderTop(BorderStyle.THIN);
+        // style.setAlignment(HorizontalAlignment.CENTER);
+        style.setAlignment(HorizontalAlignment.CENTER);
+        style.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
+        // 生成一个字体
+        XSSFFont font = workbook.createFont();
+        font.setColor(IndexedColors.BLACK.index);
+        font.setFontHeightInPoints((short) 12);
+        font.setBold(true);
+        // 把字体应用到当前的样式
+        style.setFont(font);
+        // 指定当单元格内容显示不下时自动换行
+        style.setWrapText(true);
+
+        //有效率<媒体考核有效率 (标绿)
+        XSSFCellStyle style2 = workbook.createCellStyle();
+        XSSFFont font2 = workbook.createFont();
+        font2.setColor(IndexedColors.GREEN.index);
+        style2.setFont(font2);
+
+        // 产生表格标题行
+        XSSFRow row = sheet.createRow(0);
+        for (int i = 0; i < headers.length; i++) {
+            XSSFCell cell = row.createCell((short) i);
+            cell.setCellStyle(style);
+            XSSFRichTextString text = new XSSFRichTextString(headers[i]);
+            cell.setCellValue(text.toString());
+        }
+
+        // 遍历集合数据,产生数据行
+        if (result != null) {
+            int index = 1;
+            for (List<Object> m : result) {
+
+                row = sheet.createRow(index);
+                int cellIndex = 0;
+                for (Object obj : m) {
+                    XSSFCell cell = row.createCell((short) cellIndex);
+                    if (!Check.isNull(obj)) {
+                        if (obj instanceof String) {
+                            String parameter = (String) obj;
+                            if (parameter.contains("-G")) {
+                                String[] val = parameter.split("-");
+                                if (parameter.contains("-GREEN")) {
+                                    cell.setCellStyle(style2);
+                                }
+                                cell.setCellValue(val[0]);
+                            } else {
+                                cell.setCellValue(parameter);
+                            }
+                        } else if (obj instanceof Double) {
+                            cell.setCellValue((Double) obj);
+                        } else if (obj instanceof BigDecimal) {
+                            BigDecimal bigDecimal = (BigDecimal) obj;
+                            cell.setCellValue(bigDecimal.doubleValue());
+                        } else if (obj instanceof Long) {
+                            cell.setCellValue(String.valueOf(obj));
+                        } else {
+                            cell.setCellValue(obj.toString());
+                        }
+                    }
+                    cellIndex++;
+                }
+                index++;
+            }
+        }
+    }
+
     public void exportExcelForMediaReport(XSSFWorkbook workbook, int sheetNum, String sheetTitle, String[] headers, List<List<Object>> result) {
         // 生成一个表格
         XSSFSheet sheet = workbook.createSheet();

+ 87 - 1
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/material/controller/FirstDeliveryValidController.java

@@ -1,12 +1,15 @@
 package cn.com.ctop.toutiao.modules.material.controller;
 
 import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.ExportExcelUtils;
+import cn.com.ctop.common.module.utils.HttpUtils;
 import cn.com.ctop.toutiao.modules.material.service.FirstDeliveryValidService;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.jeecg.common.api.vo.Result;
+import org.springframework.web.bind.annotation.GetMapping;
 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.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -15,6 +18,9 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -66,4 +72,84 @@ public class FirstDeliveryValidController {
         }
     }
 
+
+    /**
+     * 导出数据
+     */
+    @GetMapping("/excel")
+    public void getExcelReport(HttpServletResponse response, String date) {
+        if (Check.isNull(date)) {
+            log.error("缺失参数!");
+            return;
+        }
+        String[] split = date.split("-");
+        String year = split[0];
+        Integer month = Integer.valueOf(split[1]);
+        List<JSONObject> projectInfo = firstDeliveryValidService.getDataForProject(year, month.toString());
+        List<JSONObject> clipInfo = firstDeliveryValidService.getDataForClip(year, month.toString());
+        try {
+            List<List<Object>> projectExcelList = new ArrayList<>();
+            List<List<Object>> clipExcelList = new ArrayList<>();
+            if (!projectInfo.isEmpty()) {
+                projectInfo.forEach(data -> {
+                    List<Object> temp = new ArrayList<>();
+                    temp.add(data.getString("projectName"));
+                    temp.add(data.getString("leaderName"));
+                    temp.add(data.getString("projectLeader"));
+                    temp.add(data.getString("rebateType"));
+                    temp.add(data.getString("settlement1l"));
+                    temp.add(data.getString("settlement2l"));
+                    temp.add(data.getBigDecimal("materialCount"));
+                    temp.add(data.getBigDecimal("validMaterials"));
+                    if (data.getBigDecimal("validRatioValue").compareTo(data.getBigDecimal("materialValidRatioValue")) < 0) {
+                        temp.add(data.getString("validRatio") + "-GREEN");
+                    } else {
+                        temp.add(data.getString("validRatio") + "-G");
+                    }
+                    temp.add(data.getString("materialValidRatio"));
+                    projectExcelList.add(temp);
+                });
+            }
+            if (!clipInfo.isEmpty()) {
+                clipInfo.forEach(data -> {
+                    List<Object> temp = new ArrayList<>();
+                    temp.add(data.getString("projectName"));
+                    temp.add(data.getString("leaderName"));
+                    temp.add(data.getString("projectLeader"));
+                    temp.add(data.getString("clipName"));
+                    temp.add(data.getString("shotName"));
+                    temp.add(data.getString("planName"));
+                    temp.add(data.getString("designLeader"));
+                    temp.add(data.getString("rebateType"));
+                    temp.add(data.getString("settlement1l"));
+                    temp.add(data.getString("settlement2l"));
+                    temp.add(data.getBigDecimal("materialCount"));
+                    temp.add(data.getBigDecimal("validMaterials"));
+                    if (data.getBigDecimal("validRatioValue").compareTo(data.getBigDecimal("materialValidRatioValue")) < 0) {
+                        temp.add(data.getString("validRatio") + "-GREEN");
+                    } else {
+                        temp.add(data.getString("validRatio") + "-G");
+                    }
+                    temp.add(data.getString("materialValidRatio"));
+                    clipExcelList.add(temp);
+                });
+            }
+            OutputStream os = response.getOutputStream();
+            ExportExcelUtils eeu = new ExportExcelUtils();
+            XSSFWorkbook workbook = new XSSFWorkbook();
+            String[] titles = {"项目名称", "项目设计负责人", "项目运营负责人", "政策类型", "一级行业", "二级行业", "素材首投量",
+                    "有效素材首投量", "有效率", "媒体考核有效率"};
+            String[] overtimeTitles = {"项目名称", "项目设计负责人", "项目运营负责人", "剪辑", "拍摄", "编导", "设计leader", "政策类型", "一级行业",
+                    "二级行业", "素材首投量", "有效素材首投量", "有效率", "媒体考核有效率"};
+            eeu.exportExcelForFirstDelivery(workbook, 0, "分项目", titles, projectExcelList);
+            eeu.exportExcelForFirstDelivery(workbook, 1, "分设计", overtimeTitles, clipExcelList);
+            HttpUtils.setResponseHeader(response, "clockIn.xlsx");
+            workbook.write(os);
+            os.flush();
+            os.close();
+        } catch (IOException e) {
+            log.error(e.getMessage());
+        }
+    }
+
 }

+ 5 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/material/mapper/FirstDeliveryValidMapper.java

@@ -2,6 +2,7 @@ package cn.com.ctop.toutiao.modules.material.mapper;
 
 import cn.com.ctop.toutiao.modules.material.entity.FirstDeliveryValidMaterials;
 import cn.com.ctop.toutiao.modules.material.entity.FirstDeliveryValidRatio;
+import com.alibaba.fastjson.JSONObject;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -17,4 +18,8 @@ public interface FirstDeliveryValidMapper {
     void replaceBatchRatio(@Param("list") List<FirstDeliveryValidRatio> materials);
 
     void replaceEtl();
+
+    List<JSONObject> getDataForProject(@Param("year") String year,@Param("month") String month);
+
+    List<JSONObject> getDataForClip(@Param("year") String year,@Param("month") String month);
 }

+ 41 - 1
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/material/mapper/xml/FirstDeliveryValidMapper.xml

@@ -134,7 +134,8 @@
                `cost`,
                `delivery_year`,
                c.design_responsible_id as project_design_leader_id,
-               h.realname              as project_design_leader_name
+               h.realname              as project_design_leader_name,
+               f.clip_id               as clip_id
         from `jeecg-boot`.first_delivery_valid_materials a
                  left join `jeecg-boot`.ctop_user_allocation b
                            on a.account_id = b.account_id
@@ -155,4 +156,43 @@
     </insert>
 
 
+    <select id="getDataForProject" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT t1.*,
+               concat(IFNULL(round(t1.validMaterials / t1.materialCount * 100, 2), 0), '%') AS 'validRatio',
+               IFNULL(round(t1.validMaterials / t1.materialCount * 100, 2), 0) as 'validRatioValue',
+               concat(IFNULL(round(t2.target_value * 100, 2), 0), '%') AS 'materialValidRatio',
+               IFNULL(round(t2.target_value * 100, 2), 0) AS 'materialValidRatioValue'
+        FROM (
+                 SELECT IFNULL(project_name, '-') as 'projectName', IFNULL(REPLACE(leader_name, '(石家庄)', ''), '-') AS 'leaderName', IFNULL(
+                         REPLACE(REPLACE(project_leader_name, '(头条总监)', ''), '(汇创)', ''),
+                         '-') AS 'projectLeader', IFNULL(rebate_type, '-') as 'rebateType', IFNULL(settlement_1l, '-')as 'settlement1l', IFNULL(settlement_2l, '-')as  'settlement2l', count(material_id) AS 'materialCount', sum((CASE WHEN first_valid = '是' THEN 1 ELSE 0 END)) AS 'validMaterials'
+                 FROM etl_first_delivery_valid_materials
+                 WHERE delivery_year = #{year}
+                   AND delivery_month = #{month}
+                 GROUP BY project_id
+             ) t1
+                 LEFT JOIN first_delivery_valid_ratio t2 ON t1.settlement2l = t2.settlement_2l
+        ORDER BY t1.materialCount DESC
+    </select>
+
+    <select id="getDataForClip" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT t1.*,
+               concat(IFNULL(round(t1.validMaterials / t1.materialCount * 100, 2), 0), '%') AS 'validRatio',
+               IFNULL(round(t1.validMaterials / t1.materialCount * 100, 2), 0) as 'validRatioValue',
+               concat(IFNULL(round(t2.target_value * 100, 2), 0), '%') AS 'materialValidRatio',
+               IFNULL(round(t2.target_value * 100, 2), 0) AS 'materialValidRatioValue'
+        FROM (
+                 SELECT IFNULL(project_name, '-') AS 'projectName', IFNULL(REPLACE(leader_name, '(石家庄)', ''), '-') AS 'leaderName', IFNULL(
+                         REPLACE(REPLACE(project_leader_name, '(头条总监)', ''), '(汇创)', ''),
+                         '-') AS 'projectLeader', IFNULL(clip_name, '-') AS 'clipName', IFNULL(shot_name, '-') AS 'shotName', IFNULL(plan_name, '-') AS 'planName', IFNULL(REPLACE(leader_name, '(石家庄)', ''), '-') AS 'designLeader', IFNULL(rebate_type, '-') AS 'rebateType', IFNULL(settlement_1l, '-')as 'settlement1l', IFNULL(settlement_2l, '-')as  'settlement2l', count(material_id) AS 'materialCount', sum((CASE WHEN first_valid = '是' THEN 1 ELSE 0 END)) AS 'validMaterials'
+                 FROM etl_first_delivery_valid_materials
+                 WHERE delivery_year = #{year}
+                   AND delivery_month = #{month}
+                 GROUP BY project_id,
+                          clip_name
+             ) t1
+                 LEFT JOIN first_delivery_valid_ratio t2 ON t1.settlement2l = t2.settlement_2l
+        ORDER BY t1.materialCount DESC
+    </select>
+
 </mapper>

+ 4 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/material/service/FirstDeliveryValidService.java

@@ -11,4 +11,8 @@ public interface FirstDeliveryValidService {
     Result<Object> importExcelMaterials(MultipartFile file) throws Exception;
 
     Result<Object> importExcelRatio(MultipartFile file) throws Exception;
+
+    List<JSONObject> getDataForProject(String year, String month);
+
+    List<JSONObject> getDataForClip(String year, String month);
 }

+ 10 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/material/service/impl/FirstDeliveryValidServiceImpl.java

@@ -101,6 +101,16 @@ public class FirstDeliveryValidServiceImpl implements FirstDeliveryValidService
         return Result.successMsg("导入成功", null);
     }
 
+    @Override
+    public List<JSONObject> getDataForProject(String year, String month) {
+        return deliveryValidMapper.getDataForProject(year, month);
+    }
+
+    @Override
+    public List<JSONObject> getDataForClip(String year, String month) {
+        return deliveryValidMapper.getDataForClip(year, month);
+    }
+
 
     public static List<JSONObject> analysisFile(MultipartFile file, String fileName) throws Exception {
         JSONObject returnJson = new JSONObject();