//package org.springblade.etl.controller.bi;
//
//import cn.hutool.core.collection.CollectionUtil;
//import com.alibaba.excel.EasyExcel;
//import com.alibaba.excel.ExcelWriter;
//import com.alibaba.excel.write.metadata.WriteSheet;
//import io.swagger.annotations.ApiOperation;
//import org.springblade.datasource.context.DialectContext;
//import org.springblade.datasource.model.TableColumnDto;
//import org.springblade.datasource.model.TableViewDto;
//import org.springblade.datasource.support.DynamicDataSourceSupport;
//import org.springblade.etl.dto.DatasourceColumnDto;
//import org.springblade.etl.entity.ReportDatasource;
//import org.springblade.etl.service.ReportDatasourcePermissionService;
//import org.springblade.etl.service.ReportDatasourceService;
//import org.springblade.system.client.DataPermClient;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import javax.servlet.http.HttpServletResponse;
//import java.io.UnsupportedEncodingException;
//import java.net.URLEncoder;
//import java.util.*;
//
///**
// * @author hepingguo
// * @version 1.0
// * @description: TODO
// * @date 2023/12/14 13:51
// */
//@RestController
//@RequestMapping("/datasource/column")
//public class DatasourceColumnController {
//
//    @Autowired
//    private ReportDatasourceService reportDatasourceService;
//
//    @Autowired
//    private DialectContext dialectContext;
//
//    @Autowired
//    private DynamicDataSourceSupport dynamicDataSourceSupport;
//
//    @Autowired
//    private ReportDatasourcePermissionService reportDatasourcePermissionService;
//
//    @Autowired
//    private DataPermClient dataPermClient;
//
//    /**
//     * 导出数据
//     */
//    @GetMapping("/download")
//    @ApiOperation(value = "导出数据", notes = "传入参数与明细数据接口一致")
//    public void download(HttpServletResponse response) throws Exception{
//        Map<String,List<DatasourceColumnDto>> map = new HashMap<>();
//        List<Integer> ids = new ArrayList<>();
//        ids.add(50);
//        ids.add(49);
//        List<DatasourceColumnDto> mysqlList = new ArrayList<>();
//        List<DatasourceColumnDto> oracleList = new ArrayList<>();
//        List<DatasourceColumnDto> sqlserverList = new ArrayList<>();
//        List<DatasourceColumnDto> postgresqlList = new ArrayList<>();
//        List<DatasourceColumnDto> clickhouseList = new ArrayList<>();
//        List<DatasourceColumnDto> kingbaseList = new ArrayList<>();
//        List<ReportDatasource> reportDatasources = reportDatasourceService.listDo();
////        List<ReportDatasource> reportDatasources = reportDatasourceService.listByIds(ids);
//
//        if (CollectionUtil.isNotEmpty(reportDatasources)) {
//            for (ReportDatasource datasource : reportDatasources) {
//                List<TableViewDto> tableViews = dialectContext.getDialect(datasource.getDsTypeSyl()).listTableViewsByDatasource(datasource);
//                for (TableViewDto tableView : tableViews) {
//                    List<TableColumnDto> columns = dialectContext.getDialect(datasource.getDsTypeSyl()).listTableColumnsByTableViewName(datasource, tableView.getTableViewName());
//                    for (TableColumnDto column : columns) {
//                        DatasourceColumnDto dto = new DatasourceColumnDto();
//                        String datasourceName = "mysql";
//                        if (datasource.getDsType() == 1) {
//                            datasourceName = "oracle";
//                            dto.setDatasource(datasourceName);
//                            dto.setDataType(column.getDataType());
//                            dto.setColumn(column.getColumnName());
//                            dto.setTableName(tableView.getTableViewName());
//                            oracleList.add(dto);
//                        } else if (datasource.getDsType() == 2) {
//                            datasourceName = "sqlserver";
//                            dto.setDatasource(datasourceName);
//                            dto.setDataType(column.getDataType());
//                            dto.setColumn(column.getColumnName());
//                            dto.setTableName(tableView.getTableViewName());
//                            sqlserverList.add(dto);
//                        } else if (datasource.getDsType() == 3) {
//                            datasourceName = "postgresql";
//                            dto.setDatasource(datasourceName);
//                            dto.setDataType(column.getDataType());
//                            dto.setColumn(column.getColumnName());
//                            dto.setTableName(tableView.getTableViewName());
//                            postgresqlList.add(dto);
//                        } else if (datasource.getDsType() == 4) {
//                            datasourceName = "clickhouse";
//                            dto.setDatasource(datasourceName);
//                            dto.setDataType(column.getDataType());
//                            dto.setColumn(column.getColumnName());
//                            dto.setTableName(tableView.getTableViewName());
//                            clickhouseList.add(dto);
//                        } else if (datasource.getDsType() == 5) {
//                            datasourceName = "kingbase";
//                            dto.setDatasource(datasourceName);
//                            dto.setDataType(column.getDataType());
//                            dto.setColumn(column.getColumnName());
//                            dto.setTableName(tableView.getTableViewName());
//                            kingbaseList.add(dto);
//                        } else {
//                            dto.setDatasource(datasourceName);
//                            dto.setDataType(column.getDataType());
//                            dto.setColumn(column.getColumnName());
//                            dto.setTableName(tableView.getTableViewName());
//                            mysqlList.add(dto);
//                            map.put(datasourceName,mysqlList);
//                        }
//                    }
//                }
//            }
//            if (CollectionUtil.isNotEmpty(mysqlList)) {
//                map.put("mysql", CollectionUtil.distinct(mysqlList,DatasourceColumnDto::getColumn,true));
//            }
//            if (CollectionUtil.isNotEmpty(oracleList)) {
//                map.put("oracle", CollectionUtil.distinct(oracleList,DatasourceColumnDto::getColumn,true));
//            }
//            if (CollectionUtil.isNotEmpty(sqlserverList)) {
//                map.put("sqlserver", CollectionUtil.distinct(sqlserverList,DatasourceColumnDto::getColumn,true));
//            }
//            if (CollectionUtil.isNotEmpty(postgresqlList)) {
//                map.put("postgresql", CollectionUtil.distinct(postgresqlList,DatasourceColumnDto::getColumn,true));
//            }
//            if (CollectionUtil.isNotEmpty(clickhouseList)) {
//                map.put("clickhouse", CollectionUtil.distinct(clickhouseList,DatasourceColumnDto::getColumn,true));
//            }
//            if (CollectionUtil.isNotEmpty(kingbaseList)) {
//                map.put("kingbase", CollectionUtil.distinct(kingbaseList,DatasourceColumnDto::getColumn,true));
//            }
//            if ( CollectionUtil.isEmpty(map)) {
//                throw new RuntimeException("查询无数据");
//            }
//            this.setExcelResponseProp(response, "字段类型");
//            int i = 0;
//            ExcelWriter build = EasyExcel.write(response.getOutputStream(), DatasourceColumnDto.class).build();
//            for (Map.Entry<String, List<DatasourceColumnDto>> entry : map.entrySet()) {
//                WriteSheet writeSheet = EasyExcel.writerSheet(i, entry.getKey()).build();
//                build.write(entry.getValue(),writeSheet);
//                i++;
//            }
//            build.finish();
//        }
//
//    }
//
//    private void setExcelResponseProp(HttpServletResponse response, String rawFileName) throws UnsupportedEncodingException {
//        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
//        response.setCharacterEncoding("utf-8");
//        String fileName = URLEncoder.encode(rawFileName, "UTF-8");
//        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
//    }
//}
