package com.engine.salary.report.service.impl;

import com.engine.core.impl.Service;
import com.engine.salary.report.service.SubTableExportService;


public class SubTableExportServiceImpl extends Service implements SubTableExportService {

//    private Logger logger = LoggerFactory.getLogger(this.getClass());
//
//    
//    private SalaryBatchService salaryBatchService;
//
//    @Override
//    public Map<String, String> exportCommon(ExportCommonParam param, User currentUser, String tenantKey) {
//        Map<String, String> map = new HashMap<>(3);
//        map.put("biz", String.valueOf(IdGenerator.generate()));
//        map.put("module", EntityType.hrsa.name());
//        map.put("function", "welfareCommonExcel");
//        String eteamsId = TenantRpcContext.getEteamsId();
//        LocalRunnable localRunnable = new LocalRunnable() {
//            @Override
//            public void execute() {
//                try {
//                    DSTenantKeyThreadVar.tenantKey.set(tenantKey);
//                    exportTask(param, map, eteamsId, currentUser.getUsername(), currentUser.getEmployeeId(), tenantKey);
//                } finally {
//                    DSTenantKeyThreadVar.tenantKey.remove();
//                }
//            }
//        };
//        ThreadPoolUtil.execute(localRunnable);
//        return map;
//    }
//
//    public Map<String, Object> exportTask(ExportCommonParam param, Map<String, String> exportMap, String eteamsId, String operateName, Long employeeId, String tenantKey) {
//        List<ExcelSheetData> sheetList = new LinkedList<>();
//        // 工作簿
//        ExcelSheetData excelSheetData = new ExcelSheetData();
//        // 工作簿名称
//        excelSheetData.setSheetName(param.getSheetName());
//        // 报表头
//        excelSheetData.setHeaders(buildHeader(param.getColumns(), new ArrayList<>(), param.getDimensionName()));
//        // 报表数据
//        excelSheetData.setRows(buildCommonData(param));
//        // 报表表头合并
//        excelSheetData.setMergedRegions(buildMergedRegions(param.getColumns()));
//        // 塞进工作簿list
//        sheetList.add(excelSheetData);
//        // 发送
//        Map<String, Object> map = salaryBatchService.simpleExportExcel(ExportExcelInfo.builder()
//                .bizId(exportMap.get("biz"))
//                .sharePassword(param.getSharePassword())
//                .flag(true)
//                .module(exportMap.get("module"))
//                .userId(employeeId)
//                .eteamsId(eteamsId)
//                .tenantKey(tenantKey)
//                .operator(operateName)
//                .fileName(param.getSheetName() + ReportTimeUtil.getFormatLocalDateTime(LocalDateTime.now()))
//                .handlerName("welfareCommonExcelExportHandler")
//                .dataType(param.getSheetName())
//                .function("welfareCommonExcel").build(), sheetList);
//        return map;
//
//    }
//
//    @BatchExportHandler("welfareCommonExcelExportHandler")
//    public void welfareCommonExcelExportHandler() {
//        BatchCallbackMessage message = BatchExportContext.getBatchCallbackMessage();
//        logger.info(SalaryI18nUtil.getI18nLabel(100292, "接受到导出的结果") + JSONObject.toJSONString(message));
//    }
//
//    public int getHigh(ExportColumn column) {
//        int tempHign = 1;
//        if (column.getChildren() != null) {
//            tempHign++;
//            List<ExportColumn> children = column.getChildren();
//            for (ExportColumn exportColumn : children) {
//                getHigh(exportColumn);
//            }
//        }
//        return tempHign;
//    }
//
//    public List<Integer[]> buildMergedRegions(List<ExportColumn> columns) {
//        List<Integer[]> merges = new ArrayList<>();
//        if (CollectionUtils.isEmpty(columns)) {
//            return merges;
//        }
//        int start = 0;
//        int high = 0;
//        for (int i = 0; i < columns.size(); i++) {
//            int columnHigh = getHigh(columns.get(i));
//            high = Math.max(high, columnHigh);
//        }
//        if (high == 1) {
//            return null;
//        }
//
//        for (int i = 0; i < columns.size(); i++) {
//            if (columns.get(i).getChildren() == null) {
//                merges.add(new Integer[]{start, 1, 0, 0});
//                start++;
//            } else if (columns.get(i).getChildren().size() == 1) {
//                start++;
//            } else {
//                int end = start + columns.get(i).getChildren().size() - 1;
//                merges.add(new Integer[]{0, 0, start, end});
//                end++;
//                start = end;
//            }
//        }
//        return merges;
//    }
//
//    public List<List<Object>> buildCommonData(ExportCommonParam param) {
//        List<String> keyIndexOrder = new ArrayList<>();
//        buildCommonKeyIndex(param.getColumns(), keyIndexOrder);
//        List<List<Object>> result = new ArrayList<>();
//        param.getData().forEach(dataMap -> {
//            List<Object> temp = new ArrayList<>();
//            keyIndexOrder.forEach(key -> {
//                temp.add(dataMap.get(key));
//            });
//            result.add(temp);
//        });
//        return result;
//    }
//
//    public void buildCommonKeyIndex(List<ExportColumn> list, List<String> keyIndexOrder) {
//        List<ExportColumn> children = new ArrayList<>();
//        if (CollectionUtils.isEmpty(list)) {
//            return;
//        }
//        list.forEach(column -> {
//            if (column.getChildren() == null) {
//                keyIndexOrder.add(column.getKeyIndex());
//            } else {
//                children.addAll(column.getChildren());
//            }
//        });
//        buildCommonKeyIndex(children, keyIndexOrder);
//    }
//
//    public List<String[]> buildHeader(List<ExportColumn> list, List<String[]> result, String dimensionName) {
//        List<String[]> headers = buildCommonHeader(list, result);
//        int size = headers.size();
//        List<String> header = new ArrayList<>(Arrays.asList(headers.get(size - 1)));
//        header.add(0, dimensionName);
//        result.set(size - 1, header.toArray(new String[0]));
//        return result;
//    }
//
//    /**
//     * 多层级表头
//     *
//     * @param list
//     * @param result
//     * @return
//     */
//    public List<String[]> buildCommonHeader(List<ExportColumn> list, List<String[]> result) {
//        List<ExportColumn> childList = new ArrayList<>();
//        if (CollectionUtils.isEmpty(list)) {
//            return result;
//        }
//        List<String> temp = new ArrayList<>();
//        list.forEach(column -> {
//            if (column.getChildren() != null) {
//                childList.addAll(column.getChildren());
//                column.getChildren().forEach(x -> temp.add(column.getValue()));
//            } else {
//                temp.add(column.getValue());
//            }
//        });
//        result.add(temp.toArray(new String[0]));
//        if (CollectionUtils.isNotEmpty(childList)) {
//            buildCommonHeader(childList, result);
//        }
//        return result;
//    }
}
