0
点赞
收藏
分享

微信扫一扫

动态复杂标题头

晚熟的猫 2022-02-05 阅读 11


动态复杂标题头_java


package com.hisense.iam800;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.math.BigDecimal;

import java.util.ArrayList;

import java.util.Date;

import java.util.HashMap;

import java.util.HashSet;

import java.util.List;

import java.util.Map;

import java.util.Set;

import org.apache.log4j.Logger;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFFont;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.ss.usermodel.FillPatternType;

import org.apache.poi.ss.usermodel.IndexedColors;

import org.apache.poi.ss.usermodel.Workbook;

import com.ibm.wsdl.util.StringUtils;

import cn.afterturn.easypoi.excel.ExcelExportUtil;

import cn.afterturn.easypoi.excel.entity.ExportParams;

import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;

public class DailyFzExcel {

    private static Logger logger = Logger.getLogger(DailyFzExcel.class);

    // 时间处理类

    static DataUtils dataUtils = new DataUtils();

    public static  Map<String, String> exportToKV(Map<String, Object> dataMap, Map<String, Object> ruleMap, String email, boolean isOpen,

            boolean isTest) {

        //大品类---大品类下各个基地附件路径

        Map<String, String> fileMap = new HashMap<>();

        //小品类-基地集合

        Map<String, Object> kVMap = new HashMap<>();

        // 大品类集合

        List<String> types = new ArrayList<>();

        types.add("冰箱");

        types.add("空调");

        // 大品类--小品类集合

        for (String t : types) {

            List<DailyDto> tList = new ArrayList<>();

            tList = (List<DailyDto>) dataMap.get(t);

            // 小品类集合

            Set<String> smalls = new HashSet();

            // 基地集合

            Set<String> bases = new HashSet();

            tList.forEach(tt -> {

                if(org.apache.commons.lang3.StringUtils.isNotEmpty(tt.getGoods_type_name())) {

                    smalls.add(tt.getGoods_type_name());

                }

                if(org.apache.commons.lang3.StringUtils.isNotEmpty(tt.getStorage_base())) {

                    bases.add(tt.getStorage_base());

                } 

            });

            kVMap.put(t + "small", smalls);// 大品类--小品类数据集合

            kVMap.put(t + "base", bases);// 大品类---基地数据集合

        }

        // 导出

        for (String t : types) {

            // 全部数据汇总

            List<DailyDto> allInitData = (List<DailyDto>) dataMap.get(t);

            // 获取基地数据

            Set<String> base = (Set<String>) kVMap.get(t + "base");

            // 获取小品类数据

            Set<String> small = (Set<String>) kVMap.get(t + "small");

            // 【不区分基地合计】全部数据--遍历汇总成按照大品类总数,大品类线上总数。线下总数,-小品类基地线上,线下,汇总数

            Map<String, Object> allKV = getAllKV(allInitData, small);

            // 【区分基地合计】全部数据--遍历汇总成按照大品类总数,大品类线上总数。线下总数,-小品类基地线上,线下,汇总数

            Map<String, Object> baseKV = getBaseKV(allInitData, base, small);

            try {

                List<ExcelExportEntity> colList = new ArrayList<ExcelExportEntity>();

                ExcelExportEntity colEntity = new ExcelExportEntity("基地", "base");

                colEntity.setNeedMerge(true);

                colList.add(colEntity);

                colEntity = new ExcelExportEntity("总计", "total");

                colEntity.setNeedMerge(true);

                colList.add(colEntity);

                ExcelExportEntity deliColGroup = new ExcelExportEntity("线上下", "lineTotal");

                List<ExcelExportEntity> deliColList = new ArrayList<ExcelExportEntity>();

                deliColList.add(new ExcelExportEntity("线上", "up"));

                deliColList.add(new ExcelExportEntity("线下", "down"));

                deliColGroup.setList(deliColList);

                colList.add(deliColGroup);

                for (String sm : small) {

                    ExcelExportEntity jdColGroup = new ExcelExportEntity(sm, sm + "smallName");

                    List<ExcelExportEntity> jdColList = new ArrayList<ExcelExportEntity>();

                    jdColList.add(new ExcelExportEntity("线上", sm + "up"));

                    jdColList.add(new ExcelExportEntity("线下", sm + "down"));

                    jdColList.add(new ExcelExportEntity("汇总", sm + "total"));

                    jdColGroup.setList(jdColList);

                    colList.add(jdColGroup);

                }

                // List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

                // 【不区分基地】合计汇总

                List<Map<String, Object>> list = getAllTotal(t, dataMap, ruleMap, allKV, small);

                // 【区分基地】逐行合计

                list = getBaseTotal(list, t, dataMap, ruleMap, baseKV, small, base);

                String day=dataUtils.getYesterday(new Date(), 0) ;

                String date =day+ "-total-" + new Date().getTime();

                Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(day+"-大品类-【" + t + "】-各基地下单情况", "数据汇总"),

                        colList, list);

                // 设置颜色

                HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(0);

                HSSFRow row = sheet.getRow(0);// 第1行

                HSSFCell cell = row.getCell(1);// 2,1格

                HSSFCellStyle cellStyle = (HSSFCellStyle) workbook.createCellStyle();

                cellStyle.setFillForegroundColor((short) 13);// 设置背景色

                cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

                cellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());

                // cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 设置字体居中

                cell.setCellStyle(cellStyle);

                // 文件附件地址

                FileOutputStream fos = null;

                String path="";

                if (isTest) {

                    // 本地测试地址

                    //path=Thread.currentThread().getContextClassLoader().getResource("").getPath().substring(1);

                    path= "D:/" + date + ".xls";

                    fos = new FileOutputStream(path);

                } else {

                    // 云端生产地址

                    path= "/mnt/"+ date + ".xls";

                    fos = new FileOutputStream(path);

                }

                logger.info(">>>>大品类下各个基地数据汇总附件path>>>>"+path);

                workbook.write(fos);

                fos.close(); 

                fileMap.put(t, path); 

            } catch (FileNotFoundException e) {

                logger.info(">>>>大品类下各个基地数据汇总附件FileNotFoundException>>>>");

                e.printStackTrace();

            } catch (IOException e) {

                logger.info(">>>>大品类下各个基地数据汇总附件IOException>>>>");

                e.printStackTrace();

            }

        }

        logger.info("【大品类下各个基地数据汇总附件fileMap】"+fileMap);

        return fileMap;

    }

    // 【基地汇总-业务逻辑】逐条显示加载

    private static List<Map<String, Object>> getBaseTotal(List<Map<String, Object>> list, String t,

            Map<String, Object> dataMap, Map<String, Object> ruleMap, Map<String, Object> baseKV, Set<String> small,

            Set<String> bases) {

        // List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        for (String base : bases) {

            Map<String, Object> valMap = new HashMap<String, Object>();

            valMap.put("base", base);// 基地名称

            valMap.put("total", baseKV.get(base + "total"));// 合计=全线上+全线下

            List<Map<String, Object>> deliDetailList = new ArrayList<Map<String, Object>>();

            Map<String, Object> deliValMap = new HashMap<String, Object>();

            deliValMap.put("up", baseKV.get(base + "up"));// 线上

            deliValMap.put("down", baseKV.get(base + "down"));// 线下

            deliDetailList.add(deliValMap);

            valMap.put("lineTotal", deliDetailList);

            for (String sm : small) {

                List<Map<String, Object>> jdDetailList = new ArrayList<Map<String, Object>>();

                Map<String, Object> jdValMap = new HashMap<String, Object>();

                jdValMap.put(sm + "up", baseKV.get(base + sm + "up"));

                jdValMap.put(sm + "down", baseKV.get(base + sm + "down"));

                jdValMap.put(sm + "total", baseKV.get(base + sm + "total"));

                jdDetailList.add(jdValMap);

                valMap.put(sm + "smallName", jdDetailList);

            }

            list.add(valMap);

        }

        return list;

    }

    // 【基地汇总APi】

    private static Map<String, Object> getBaseKV(List<DailyDto> allInitData, Set<String> base, Set<String> small) {

        Map<String, Object> kvMap = new HashMap<>();

        for (String ba : base) {

            // 【1】///基地合计,线上合计,线下合计汇总/

            // 基地总计

            BigDecimal total = new BigDecimal("0");

            // 基地线上总计

            BigDecimal up = new BigDecimal("0");

            // 基地线下总计

            BigDecimal down = new BigDecimal("0");

            for (DailyDto dto : allInitData) {

                // 是一个基地时

                if (org.apache.commons.lang3.StringUtils.isNotEmpty(dto.getStorage_base())

                        &&ba.equals(dto.getStorage_base())) {

                    if (dto.getBe_online().equals("线上")) {

                        up = up.add(dto.getQuantity());

                    } else {

                        down = down.add(dto.getQuantity());

                    }

                } else {

                    continue;

                }

            }

            total = up.add(down);

            logger.info(">>>总数total." + total + "....线上总数up." + up + "....线下总数down." + down);

            kvMap.put(ba + "total", total);// 基地汇总合计

            kvMap.put(ba + "up", up);// 基地线上合计

            kvMap.put(ba + "down", down);// 基地线下合计

            // 【2】基地-小品类汇总/

            for (String sm : small) {

                // 基地小品类总计

                BigDecimal jdTotal = new BigDecimal("0");

                // 基地小品类线上总计

                BigDecimal jdUp = new BigDecimal("0");

                // 基地小品类线下总计

                BigDecimal jdDown = new BigDecimal("0");

                for (DailyDto dto : allInitData) {

                    String baseSmall = ba + sm;// 基地-小品类

                    String baseSmall2 = dto.getStorage_base() + dto.getGoods_type_name();// 基地-小品类

                    if (baseSmall.equals(baseSmall2)) {

                        if (dto.getBe_online().equals("线上")) {

                            jdUp = jdUp.add(dto.getQuantity());

                        } else {

                            jdDown = jdDown.add(dto.getQuantity());

                        }

                    } else {

                        continue;

                    }

                }

                jdTotal = jdUp.add(jdDown);

                logger.info(ba + sm + ">>>总数total." + jdTotal + "....线上总数up." + jdUp + "....线下总数down." + jdDown);

                kvMap.put(ba + sm + "total", jdTotal);// 基地汇总合计

                kvMap.put(ba + sm + "up", jdUp);// 基地线上合计

                kvMap.put(ba + sm + "down", jdDown);// 基地线下合计

            }

        }

        return kvMap;

    }

    // 【合计汇总API】全部数据--遍历汇总成按照大品类总数,大品类线上总数。线下总数,-小品类基地线上,线下,汇总数

    private static Map<String, Object> getAllKV(List<DailyDto> allInitData, Set<String> small) {

        Map<String, Object> kvMap = new HashMap<>();

        // 总计

        BigDecimal total = new BigDecimal("0");

        // 线上总计

        BigDecimal up = new BigDecimal("0");

        // 线下总计

        BigDecimal down = new BigDecimal("0");

        for (DailyDto dto : allInitData) {

            if (dto.getBe_online().equals("线上")) {

                up = up.add(dto.getQuantity());

            } else {

                down = down.add(dto.getQuantity());

            }

        }

        total = up.add(down);

        logger.info(">>>总数total." + total + "....线上总数up." + up + "....线下总数down." + down);

        kvMap.put("total", total);

        kvMap.put("up", up);

        kvMap.put("down", down);

        // 各个小品类汇总--不区分基地

        for (String s : small) {

            // 小品类汇总

            BigDecimal smTotal = new BigDecimal("0");

            // 小品类线上总计

            BigDecimal smUp = new BigDecimal("0");

            // 小品类线下总计

            BigDecimal smDown = new BigDecimal("0");

            for (DailyDto dt : allInitData) {

                // 小品类包含

                if (org.apache.commons.lang3.StringUtils.isNotEmpty(dt.getGoods_type_name())

                        &&dt.getGoods_type_name().equals(s)) {

                    if (dt.getBe_online().equals("线上")) {

                        smUp = smUp.add(dt.getQuantity());

                    } else {

                        smDown = smDown.add(dt.getQuantity());

                    }

                }

            }

            kvMap.put(s + "up", smUp);// 小品类--线上

            kvMap.put(s + "down", smDown);// 小品类--线下

            kvMap.put(s + "total", smUp.add(smDown));// 小品类--汇总

            logger.info(">>>小品类" + s + "stotal." + kvMap.get(s + "total") + "....线上总数up." + kvMap.get(s + "up")

                    + "....线下总数down." + kvMap.get(s + "down"));

        }

        return kvMap;

    }

    // 【合计汇总--业务逻辑】

    private static List<Map<String, Object>> getAllTotal(String daType, Map<String, Object> dataMap,

            Map<String, Object> ruleMap, Map<String, Object> allKV, Set<String> small) {

        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        Map<String, Object> valMap = new HashMap<String, Object>();

        valMap.put("base", "合计");// 基地名称

        valMap.put("total", allKV.get("total"));// 合计=全线上+全线下

        List<Map<String, Object>> deliDetailList = new ArrayList<Map<String, Object>>();

        Map<String, Object> deliValMap = new HashMap<String, Object>();

        deliValMap.put("up", allKV.get("up"));// 线上

        deliValMap.put("down", allKV.get("down"));// 线下

        deliDetailList.add(deliValMap);

        valMap.put("lineTotal", deliDetailList);

        for (String sm : small) {

            List<Map<String, Object>> jdDetailList = new ArrayList<Map<String, Object>>();

            Map<String, Object> jdValMap = new HashMap<String, Object>();

            jdValMap.put(sm + "up", allKV.get(sm + "up"));

            jdValMap.put(sm + "down", allKV.get(sm + "down"));

            jdValMap.put(sm + "total", allKV.get(sm + "total"));

            jdDetailList.add(jdValMap);

            valMap.put(sm + "smallName", jdDetailList);

        }

        list.add(valMap);

        return list;

    }

    // 【汇总逻辑】--大品类下,各个基地小品类文件附件集合,k-v(大品类名称--大品类下各个小品类汇总文件附件)

    public static Map<String, String> exportKV(Map<String, Object> dataMap, Map<String, Object> ruleMap, String email,

            boolean isOpen, boolean isTest) {

        DailyFzExcel.exportTest(dataMap, ruleMap, email, isOpen, isTest);

        return null;

    }

    //本地测试

    public static void exportTest(Map<String, Object> dataMap, Map<String, Object> ruleMap, String email,

            boolean isOpen, boolean isTest) {

        //大品类---大品类下各个基地附件路径

                Map<String, Object> fileMap = new HashMap<>();

                //小品类-基地集合

                Map<String, Object> kVMap = new HashMap<>();

                // 大品类集合

                List<String> types = new ArrayList<>();

                types.add("冰箱");

                types.add("空调");

                // 大品类--小品类集合

                for (String t : types) {

                    List<DailyDto> tList = new ArrayList<>();

                    tList = (List<DailyDto>) dataMap.get(t);

                    // 小品类集合

                    Set<String> smalls = new HashSet();

                    // 基地集合

                    Set<String> bases = new HashSet();

                    tList.forEach(tt -> {

                        if(org.apache.commons.lang3.StringUtils.isNotEmpty(tt.getGoods_type_name())) {

                            smalls.add(tt.getGoods_type_name());

                        }

                        if(org.apache.commons.lang3.StringUtils.isNotEmpty(tt.getStorage_base())) {

                            bases.add(tt.getStorage_base());

                        } 

                    });

                    kVMap.put(t + "small", smalls);// 大品类--小品类数据集合

                    kVMap.put(t + "base", bases);// 大品类---基地数据集合

                }

                // 导出

                for (String t : types) {

                    // 全部数据汇总

                    List<DailyDto> allInitData = (List<DailyDto>) dataMap.get(t);

                    // 获取基地数据

                    Set<String> base = (Set<String>) kVMap.get(t + "base");

                    // 获取小品类数据

                    Set<String> small = (Set<String>) kVMap.get(t + "small");

                    // 【不区分基地合计】全部数据--遍历汇总成按照大品类总数,大品类线上总数。线下总数,-小品类基地线上,线下,汇总数

                    Map<String, Object> allKV = getAllKV(allInitData, small);

                    // 【区分基地合计】全部数据--遍历汇总成按照大品类总数,大品类线上总数。线下总数,-小品类基地线上,线下,汇总数

                    Map<String, Object> baseKV = getBaseKV(allInitData, base, small);

                    try {

                        List<ExcelExportEntity> colList = new ArrayList<ExcelExportEntity>();

                        ExcelExportEntity colEntity = new ExcelExportEntity("基地", "base");

                        colEntity.setNeedMerge(true);

                        colList.add(colEntity);

                        colEntity = new ExcelExportEntity("总计", "total");

                        colEntity.setNeedMerge(true);

                        colList.add(colEntity);

                        ExcelExportEntity deliColGroup = new ExcelExportEntity("线上下", "lineTotal");

                        List<ExcelExportEntity> deliColList = new ArrayList<ExcelExportEntity>();

                        deliColList.add(new ExcelExportEntity("线上", "up"));

                        deliColList.add(new ExcelExportEntity("线下", "down"));

                        deliColGroup.setList(deliColList);

                        colList.add(deliColGroup);

                        for (String sm : small) {

                            ExcelExportEntity jdColGroup = new ExcelExportEntity(sm, sm + "smallName");

                            List<ExcelExportEntity> jdColList = new ArrayList<ExcelExportEntity>();

                            jdColList.add(new ExcelExportEntity("线上", sm + "up"));

                            jdColList.add(new ExcelExportEntity("线下", sm + "down"));

                            jdColList.add(new ExcelExportEntity("汇总", sm + "total"));

                            jdColGroup.setList(jdColList);

                            colList.add(jdColGroup);

                        }

                        // List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

                        // 【不区分基地】合计汇总

                        List<Map<String, Object>> list = getAllTotal(t, dataMap, ruleMap, allKV, small);

                        // 【区分基地】逐行合计

                        list = getBaseTotal(list, t, dataMap, ruleMap, baseKV, small, base);

                        String day=dataUtils.getYesterday(new Date(), 0) ;

                        String date =day+ "-DailyPlanTotal-" + new Date().getTime();

                        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(day+"-大品类-【" + t + "】-各基地下单情况", "数据汇总"),

                                colList, list);

                        // 设置颜色

                        HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(0);

                        HSSFRow row = sheet.getRow(0);// 第1行

                        HSSFCell cell = row.getCell(1);// 2,1格

                        HSSFCellStyle cellStyle = (HSSFCellStyle) workbook.createCellStyle();

                        cellStyle.setFillForegroundColor((short) 13);// 设置背景色

                        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

                        cellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());

                        // cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 设置字体居中

                        cell.setCellStyle(cellStyle);

                        // 文件附件地址

                        FileOutputStream fos = null;

                        String path="";

                        if (isTest) {

                            // 本地测试地址

                            //path=Thread.currentThread().getContextClassLoader().getResource("").getPath().substring(1);

                            path= "D:/" + t + date + ".xls";

                            fos = new FileOutputStream(path);

                        } else {

                            // 云端生产地址

                            path= "/mnt/" + t + date + ".xls";

                            fos = new FileOutputStream("D:/" + t + date + ".xls");

                        }

                        logger.info(">>>>大品类下各个基地数据汇总附件path>>>>"+path);

                        workbook.write(fos);

                        fos.close();  

                    } catch (FileNotFoundException e) {

                        logger.info(">>>>大品类下各个基地数据汇总附件FileNotFoundException>>>>");

                        e.printStackTrace();

                    } catch (IOException e) {

                        logger.info(">>>>大品类下各个基地数据汇总附件IOException>>>>");

                        e.printStackTrace();

                    }

                }


    }

}




举报

相关推荐

0 条评论