//package digital.laboratory.platform.inspection.test;
//
//import com.google.common.collect.Lists;
//import digital.laboratory.platform.inspection.utils.jfreechart.GenerateChartUtil;
//import digital.laboratory.platform.inspection.utils.jfreechart.GeneratePieChartUtil;
//import digital.laboratory.platform.inspection.utils.jfreechart.JFreeChartUtil;
//import org.jfree.chart.ChartFactory;
//import org.jfree.chart.ChartPanel;
//import org.jfree.chart.ChartUtils;
//import org.jfree.chart.JFreeChart;
//import org.jfree.chart.axis.*;
//import org.jfree.chart.labels.ItemLabelAnchor;
//import org.jfree.chart.labels.ItemLabelPosition;
//import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
//import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
//import org.jfree.chart.plot.CategoryPlot;
//import org.jfree.chart.plot.DatasetRenderingOrder;
//import org.jfree.chart.plot.PlotOrientation;
//import org.jfree.chart.renderer.category.LineAndShapeRenderer;
//import org.jfree.chart.renderer.category.StackedBarRenderer;
//import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
//import org.jfree.chart.ui.TextAnchor;
//import org.jfree.data.category.CategoryDataset;
//import org.jfree.data.category.DefaultCategoryDataset;
//import org.jfree.data.xy.XYSeries;
//import org.jfree.data.xy.XYSeriesCollection;
//import org.junit.jupiter.api.Test;
//import org.springframework.test.context.TestPropertySource;
//
//import javax.swing.*;
//import java.awt.*;
//import java.awt.geom.Ellipse2D;
//import java.awt.geom.Line2D;
//import java.awt.geom.Rectangle2D;
//import java.awt.image.BufferedImage;
//import java.io.File;
//import java.io.IOException;
//import java.text.NumberFormat;
//import java.time.LocalDate;
//import java.time.format.DateTimeFormatter;
//import java.util.*;
//import java.util.List;
//
//public class JFreeChartTest {
//
//    // 图片存放地址
//    String filePath = "F:\\ProjectFile\\WorkFile\\LianChuang\\project\\DLP\\dlp-drugtesting\\dlp-drugtesting-biz\\src\\test\\resources\\image" + "\\" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
//
//    @Test
//    void testPie() throws Exception {
//        // 图例名称
//        List<String> list = Lists.newArrayList("海洛因", "冰毒", "氯胺酮");
//        // 数据比例列表
//        List dataList = Lists.newArrayList(86, 12, 2);
//        // 图表背景
//        List<Color> colorList = Lists.newArrayList(new Color(11, 144, 232), new Color(232, 188, 11), new Color(161, 84, 234));
//        // 偏离百分比数据
//        List<Double> explodePercentList = Lists.newArrayList(0.01, 0.01, 0.01);
//        JFreeChart chart = GeneratePieChartUtil.createPieChart("", list, dataList, JFreeChartUtil.createChartTheme("宋体"),
//                colorList, explodePercentList);
//
//        File file = new File(filePath);
//        if (!file.exists()) {
//            file.mkdirs();
//        }
//        String fileName = System.currentTimeMillis() + "测试图片" + ".jpeg";
//        File file1 = new File(file.getPath() + "/" + fileName);
//
//        try {
//            if(file1.exists()) {
//                file1.delete();
//            }
//            ChartUtils.saveChartAsJPEG(file1, chart, 800, 600);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 层叠柱状图
//     */
//    @Test
//    public void stackedBarChart() throws Exception {
//        //x轴名称列表
//        List<String> xAxisNameList = new ArrayList<>(Arrays.asList("西安市", "咸阳市", "宝鸡市", "渭南市", "铜川市", "榆林市", "延安市", "汉中市", "商洛市", "安康市", "杨凌区"));
//        //图例名称列表
//        List<String> legendNameList = new ArrayList<>(Arrays.asList("海洛因", "冰毒", "氯胺酮"));
//        //数据列表
//        List<List<Object>> dataList = new ArrayList<>();
//        dataList.add(new ArrayList<>(Arrays.asList(17.0, 60.9, 31.2, 19.5, 15.6, 13.6, 19.0, 32.4, 26.8, 21.8, 54.7)));
//        dataList.add(new ArrayList<>(Arrays.asList(3.8, 3.1, 0.7, 1.0, 0.7, 0.3, 0.4, 5.6, 0.5, 0.5, 1.0)));
//        dataList.add(new ArrayList<>(Arrays.asList(0.6, 0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0., 0.0)));
//
//        // 图表背景
//        List<Color> colorList = Lists.newArrayList(new Color(72, 161, 250), new Color(255, 192, 0), new Color(152, 102, 202));
//
//        // 返回outputStream
//        //GenerateChartUtil.createStackedBarChart(response.getOutputStream(), "各级变化图", legendNameList, xAxisNameList
//        // , dataList, JFreeChartUtil.createChartTheme("宋体"), "y轴", "x轴", 600, 400);
//
//        // 返回JFreeChart
//        JFreeChart chart = GenerateChartUtil.createStackedBarChart("", legendNameList, xAxisNameList
//                , dataList, colorList, JFreeChartUtil.createChartTheme("宋体"), "千人均消费量（毫克/千人/天）", "城市名");
//        //在D盘目录下生成图片
//        File p = new File(filePath);
//        if (!p.exists()) {
//            p.mkdirs();
//        }
//        String imageName = System.currentTimeMillis() + "_层叠柱状图" + ".jpeg";
//        File file = new File(p.getPath() + "/" + imageName);
//        try {
//            if(file.exists()) {
//                file.delete();
//            }
//            ChartUtils.saveChartAsJPEG(file, chart, 1200, 1000);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 生成折线图
//     */
//    @Test
//    public void lineChart() throws Exception {
//
//        //x轴名称列表
//        List<String> xAxisNameList = new ArrayList<>(Arrays.asList("2022-03", "2022-06", "2022-09", "2022-12", "2023-02"));
//        //图例名称列表
//        List<String> legendNameList = new ArrayList<>(Arrays.asList("综合"));
//        //数据列表
//        List<List<Object>> dataList = new ArrayList<>();
//        dataList.add(new ArrayList<>(Arrays.asList(27.5, 22.7, 13.2, 47.6, 20.5)));
//        //x轴名称列表
//        /*List<String> xAxisNameList = new ArrayList<>(Arrays.asList("一级", "二级", "三级", "四级", "五级"));
//        //图例名称列表
//        List<String> legendNameList = new ArrayList<>(Arrays.asList("李四", "张三","王五"));
//        //数据列表
//        List<List<Object>> dataList = new ArrayList<>();
//        dataList.add(new ArrayList<>(Arrays.asList(1, 3, 5, 6, 2)));
//        dataList.add(new ArrayList<>(Arrays.asList(2, 1, 3, 4, 5)));
//        dataList.add(new ArrayList<>(Arrays.asList(5, 8, 4, 6, 4)));*/
//
//        // 返回outputStream
//        //GenerateChartUtil.createLineChart(response.getOutputStream(), "各级变化图", legendNameList, xAxisNameList
//        // , dataList, JFreeChartUtil.createChartTheme("宋体"), "y轴", "x轴", 600, 400);
//
//        JFreeChart chart = GenerateChartUtil.createLineChart("各级变化图", legendNameList, xAxisNameList
//                , dataList, JFreeChartUtil.createChartTheme("宋体"), "y轴", "x轴");
//        //在D盘目录下生成图片
//        File p = new File(filePath);
//        if (!p.exists()) {
//            p.mkdirs();
//        }
//        String imageName = System.currentTimeMillis() + "_折线图" + ".jpeg";
//        File file = new File(p.getPath() + "/" + imageName);
//        try {
//            if(file.exists()) {
//                file.delete();
//            }
//            ChartUtils.saveChartAsJPEG(file, chart, 800, 600);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 生成综合图表 -- 折线层叠图
//     */
//    @Test
//    void combinedChartExample() throws Exception {
//
//        //x轴名称列表
//        List<String> xAxisNameList = new ArrayList<>(Arrays.asList("2022-03", "2022-06", "2022-09", "2022-12", "2023-02"));
//        //图例名称列表
//        List<String> legendNameList = new ArrayList<>(Arrays.asList("海洛因", "冰毒", "氯胺酮"));
//        // 图表背景
//        List<Color> colorList = Lists.newArrayList(new Color(72, 161, 250), new Color(221, 61, 61), new Color(146, 210, 80)); // , new Color(152,102,202));
//
//        //数据列表
//        List<List<Object>> dataList = new ArrayList<>();
//        dataList.add(new ArrayList<>(Arrays.asList(24.5, 19.5, 12.1, 46.5, 18)));
//        dataList.add(new ArrayList<>(Arrays.asList(3, 3.3, 1.1, 1.1, 2.5)));
//        dataList.add(new ArrayList<>(Arrays.asList(0.0, 0.0, 0.0, 0.0, 0.3)));
//
//        JFreeChart stackedBarChart = GenerateChartUtil.createStackedBarChart("", legendNameList, xAxisNameList
//                , dataList, colorList, JFreeChartUtil.createChartTheme("宋体"), "千人均消费量（毫克/千人/天）", "");
//
//        // 折线图
//        //图例名称列表
//        List<String> legendNameList2 = new ArrayList<>(Arrays.asList("综合"));
//        //数据列表
//        List<Double> dataList2 = new ArrayList<>(Arrays.asList(27.5, 22.7, 13.2, 47.6, 20.5));
//
//
//        CategoryDataset dataset2 = createDataset2(xAxisNameList, legendNameList2, dataList2);
//
//        // 获取图表绘图区域对象
//        CategoryPlot plot = stackedBarChart.getCategoryPlot();
////        plot.setBackgroundPaint(new Color(0xEE, 0xEE, 0xFF));
////        plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
//
//
//        // 将折线图添加到层叠柱状图上
//        plot.setDataset(1, dataset2);
//        plot.mapDatasetToRangeAxis(1, 1);
//
//        final CategoryAxis domainAxis = plot.getDomainAxis();
//        domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);
//        final ValueAxis axis2 = new NumberAxis("综合千人均消费量（毫克/千人/天）");
//        axis2.setLabelFont(new Font("新宋体", Font.BOLD, 20));
//        plot.setRangeAxis(1, axis2);
//
//        final LineAndShapeRenderer renderer2 = getLineAndShapeRenderer();
//        plot.setRenderer(1, renderer2);
//        plot.setDatasetRenderingOrder(DatasetRenderingOrder.REVERSE);
//
//        //在D盘目录下生成图片
//        File p = new File(filePath);
//        if (!p.exists()) {
//            p.mkdirs();
//        }
//        String imageName = System.currentTimeMillis() + "_组合图" + ".jpeg";
//        File file = new File(p.getPath() + "/" + imageName);
//        try {
//            if(file.exists()) {
//                file.delete();
//            }
//            ChartUtils.saveChartAsJPEG(file, stackedBarChart, 1200, 1000);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    private static LineAndShapeRenderer getLineAndShapeRenderer() {
//        final LineAndShapeRenderer renderer2 = new LineAndShapeRenderer(); //setToolTipGenerator
//        renderer2.setDefaultToolTipGenerator(new StandardCategoryToolTipGenerator());
//        /// 数据标签的设置
//        renderer2.setDefaultItemLabelsVisible(true);
//        renderer2.setDefaultItemLabelGenerator(new StandardCategoryItemLabelGenerator(StandardCategoryItemLabelGenerator.DEFAULT_LABEL_FORMAT_STRING,
//                NumberFormat.getInstance()));
//        renderer2.setDefaultItemLabelFont(new Font("SansSerif", Font.PLAIN, 20)); // 数据标签的字体大小
//        // 位置
//        renderer2.setDefaultPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE1, TextAnchor.BOTTOM_CENTER));
//        renderer2.setSeriesStroke(0, new BasicStroke(5.0f));  // 设置第一条折线的宽度为2.0
//        // 设置第一条折线的折线点大小
//        renderer2.setSeriesShapesVisible(0, true); // 设置显示折现点
//        renderer2.setSeriesShape(0, new Ellipse2D.Double(-15.0, -15.0, 15.0, 15.0)); // 设置折线点的大小
//        // 设置折线的颜色
//        renderer2.setSeriesPaint(0, new Color(152,102,202));
//        renderer2.setLegendShape(0, new Rectangle2D.Double(0, 0, 60.0, 20.0)); // 设置图例项的大小
//        return renderer2;
//    }
//
//    @Test
//    void combinedChartExample2() throws Exception {
//        // 获取柱状图数据
//        List<String> xAxisNameList = Arrays.asList("2022-03", "2022-06", "2022-09", "2022-12", "2023-02");
//        List<String> legendNameList = Arrays.asList("海洛因", "冰毒", "氯胺酮", "综合");
//        List<Color> colorList = Arrays.asList(new Color(146, 210, 80), new Color(221, 61, 61), new Color(72, 161, 250), new Color(152, 102, 202));
//        List<List<Object>> dataList = new ArrayList<>();
//        dataList.add(Arrays.asList(24.5, 19.5, 12.1, 46.5, 18.0));
//        dataList.add(Arrays.asList(0.0, 0.0, 0.0, 0.0, 0.0));
//        dataList.add(Arrays.asList(3.0, 3.3, 1.1, 1.1, 2.5));
//
//        JFreeChart stackedBarChart = GenerateChartUtil.createStackedBarChart("", legendNameList, xAxisNameList, dataList, colorList, JFreeChartUtil.createChartTheme("宋体"), "千人均消费量（毫克/千人/天）", "");
//
//        // 折线图数据
//        List<List<Object>> dataList2 = new ArrayList<>();
//        dataList2.add(Arrays.asList(27.5, 22.7, 13.2, 47.6, 20.5));
//
//        JFreeChart lineChart = GenerateChartUtil.createLineChart("", legendNameList, xAxisNameList, dataList2, JFreeChartUtil.createChartTheme("宋体"), "千人均消费量（毫克/千人/天）", "");
//
//        // 创建组合图表
//        /*CategoryPlot plot = stackedBarChart.getCategoryPlot();
//        plot.setDataset(1, lineChart.getCategoryPlot().getDataset());
//        plot.mapDatasetToRangeAxis(1, 1);
//
//        LineAndShapeRenderer lineRenderer = new LineAndShapeRenderer();
//        plot.setRenderer(1, lineRenderer);*/
//
//        // 在指定目录下生成图片
//        File p = new File(filePath);
//        if (!p.exists()) {
//            p.mkdirs();
//        }
//        String imageName = System.currentTimeMillis() + "_组合图" + ".jpeg";
//        File file = new File(p.getPath() + "/" + imageName);
//        try {
//            if (file.exists()) {
//                file.delete();
//            }
//            ChartUtils.saveChartAsJPEG(file, stackedBarChart, 1200, 1000);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//
//    private CategoryDataset createDataset2(List<String> xAxisNameList, List<String> legendNameList, List<Double> dataList) {
//
//        // row keys...
//        final String series1 = "Fourth";
//
//        // column keys...
//        final String category1 = "Category 1";
//        final String category2 = "Category 2";
//        final String category3 = "Category 3";
//        final String category4 = "Category 4";
//        final String category5 = "Category 5";
//        final String category6 = "Category 6";
//        final String category7 = "Category 7";
//        final String category8 = "Category 8";
//
//        // create the dataset...
//        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
//        for (int i = 0; i < dataList.size(); i++) {
//            dataset.addValue(dataList.get(i), legendNameList.get(0), xAxisNameList.get(i));
//        }
////        dataset.addValue(15.0, series1, category1);
////        dataset.addValue(24.0, series1, category2);
////        dataset.addValue(31.0, series1, category3);
////        dataset.addValue(25.0, series1, category4);
////        dataset.addValue(56.0, series1, category5);
////        dataset.addValue(37.0, series1, category6);
////        dataset.addValue(77.0, series1, category7);
////        dataset.addValue(18.0, series1, category8);
//
//        return dataset;
//
//    }
//    @Test
//    void testFHTOJT() {
//        // 创建层叠柱状图数据集
//        DefaultCategoryDataset barDataset = new DefaultCategoryDataset();
//        barDataset.addValue(24.5, "海洛因", "2022-03");
//        barDataset.addValue(19.5, "海洛因", "2022-06");
//        barDataset.addValue(12.1, "海洛因", "2022-09");
//        barDataset.addValue(46.5, "海洛因", "2022-12");
//        barDataset.addValue(18.0, "海洛因", "2023-02");
//
//        barDataset.addValue(0.0, "冰毒", "2022-03");
//        barDataset.addValue(0.0, "冰毒", "2022-06");
//        barDataset.addValue(0.0, "冰毒", "2022-09");
//        barDataset.addValue(0.0, "冰毒", "2022-12");
//        barDataset.addValue(0.3, "冰毒", "2023-02");
//
//        barDataset.addValue(3.0, "氯胺酮", "2022-03");
//        barDataset.addValue(3.3, "氯胺酮", "2022-06");
//        barDataset.addValue(1.1, "氯胺酮", "2022-09");
//        barDataset.addValue(1.1, "氯胺酮", "2022-12");
//        barDataset.addValue(2.5, "氯胺酮", "2023-02");
//
//        // 创建折线图数据集
//        DefaultCategoryDataset lineDataset = new DefaultCategoryDataset();
//        lineDataset.addValue(27.5, "综合", "2022-03");
//        lineDataset.addValue(22.7, "综合", "2022-06");
//        lineDataset.addValue(13.2, "综合", "2022-09");
//        lineDataset.addValue(47.6, "综合", "2022-12");
//        lineDataset.addValue(20.5, "综合", "2023-02");
//
//        // 创建层叠柱状图
//        JFreeChart barChart = ChartFactory.createStackedBarChart(
//                "千人均消费量（毫克/千人/天）",
//                "时间",
//                "消费量",
//                barDataset,
//                PlotOrientation.VERTICAL,
//                true,
//                true,
//                false
//        );
//
//        // 创建折线图
//        JFreeChart lineChart = ChartFactory.createLineChart(
//                "",
//                "时间",
//                "消费量",
//                lineDataset,
//                PlotOrientation.VERTICAL,
//                true,
//                true,
//                false
//        );
//
//        // 将折线图数据集和渲染器添加到层叠柱状图中
//        CategoryPlot plot = barChart.getCategoryPlot();
//        plot.setDataset(1, lineChart.getCategoryPlot().getDataset());
//        plot.mapDatasetToRangeAxis(1, 1);
//
//        LineAndShapeRenderer lineRenderer = new LineAndShapeRenderer();
//        plot.setRenderer(1, lineRenderer);
//
//        // 保存图表为 JPEG 文件
//        File file = new File(filePath + "\\"+ "CombinedChart.jpeg");
//        try {
//            ChartUtils.saveChartAsJPEG(file, barChart, 1200, 1000);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    @Test
//    void randomGetColor() {
//        Random random = new Random();
//
//        Set<Color> colors = new HashSet<>();
//        int count = 10; // 生成 10 种不同的颜色
//
//        while (colors.size() < count) {
//            int red = random.nextInt(256);
//            int green = random.nextInt(256);
//            int blue = random.nextInt(256);
//
//            Color color = new Color(red, green, blue);
//            colors.add(color);
//        }
//
//        for (Color color : colors) {
//            System.out.println("RGB: " + color.getRed() + ", " + color.getGreen() + ", " + color.getBlue());
//        }
//    }
//
//}
