Kaynağa Gözat

Merge branch 'master' of http://git.tjyourong.com.cn/ctop/adsp-cloud

# Conflicts:
#	jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/material/controller/FirstDeliveryValidController.java
#	jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/material/mapper/FirstDeliveryValidMapper.java
#	jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/material/service/FirstDeliveryValidService.java
#	jeecg-boot-module-system/src/main/java/cn/com/ctop/toutiao/modules/material/service/impl/FirstDeliveryValidServiceImpl.java
yumeng 1 yıl önce
ebeveyn
işleme
c219bfa79d

+ 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();

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

@@ -1,15 +1,27 @@
 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.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 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;
 
 /**
@@ -85,4 +97,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());
+        }
+    }
+
 }

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

@@ -24,4 +24,10 @@ public interface FirstDeliveryValidMapper {
     Integer getTotalDataSum(@Param("year") String year, @Param("month") String month);
 
     List<JSONObject> getTotalData(String year, String month);
+
+    void replaceEtl();
+
+    List<JSONObject> getDataForProject(@Param("year") String year,@Param("month") String month);
+
+    List<JSONObject> getDataForClip(@Param("year") String year,@Param("month") String month);
 }

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

@@ -154,5 +154,95 @@
         </foreach>
     </insert>
 
+    <insert id="replaceEtl">
+        replace
+        into `jeecg-boot`.`etl_first_delivery_valid_materials`
+        select `delivery_month`,
+               `operation_label`,
+               a.`material_id`,
+               e.signature,
+               `shot_leader_id`,
+               `shot_leader_name`,
+               f.`shot_id`,
+               f.`plan_id`,
+               f.`leader_id`,
+               f.`clip_name`,
+               f.`shot_name`,
+               f.`plan_name`,
+               f.`leader_name`,
+               c.id                    as `project_id`,
+               c.project_name,
+               c.responsible_id           project_leader_id,
+               d.realname              as project_leader_name,
+               `stat_date`,
+               `customer_name`,
+               `rebate_type`,
+               `settlement_1l`,
+               `settlement_2l`,
+               `first_valid`,
+               `cost_7day`,
+               `cost`,
+               `delivery_year`,
+               c.design_responsible_id as project_design_leader_id,
+               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
+                 left join `jeecg-boot`.ctop_project c
+                           on b.project_id = c.id
+                 left join `jeecg-boot`.sys_user d
+                           on c.responsible_id = d.id
+                 left join application.bytedance_video_get e
+                           on a.material_id = e.material_id
+                 left join application.app_bytedance_material_info f
+                           on e.signature = f.material_id
+                 left join `jeecg-boot`.ctop_material_ascription g
+                           on e.signature = g.material_id
+                 left join `jeecg-boot`.sys_user h
+                           on c.design_responsible_id = h.id
+        where c.id is not null
+        group by a.delivery_month, a.material_id, signature, b.project_id, settlement_2l, a.delivery_year
+    </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

@@ -15,4 +15,8 @@ public interface FirstDeliveryValidService {
     Result<Object> projectData(String date, Integer pageSize, Integer pageNo);
 
     Result<Object> getTotalData(String date, Integer pageSize, Integer pageNo);
+
+    List<JSONObject> getDataForProject(String year, String month);
+
+    List<JSONObject> getDataForClip(String year, String month);
 }

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

@@ -64,6 +64,8 @@ public class FirstDeliveryValidServiceImpl implements FirstDeliveryValidService
                 deliveryValidMapper.replaceBatchMaterials(dataList);
             }
         }
+        //执行宇鹏提供的sql
+        deliveryValidMapper.replaceEtl();
         return Result.successMsg("导入成功", null);
     }
 
@@ -102,6 +104,16 @@ public class FirstDeliveryValidServiceImpl implements FirstDeliveryValidService
     }
 
     @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);
+    }
+
+    @Override
     public Result<Object> projectData(String date, Integer pageSize, Integer pageNo) {
         String[] split = date.split("-");
         String year = split[0];