highchat钻取前后台交互

 @RequestMapping("getScanRateByPiId")
    @ResponseBody
    public ResponseBase getScanRateByPiId(String piId, HttpServletRequest request) {
        ResponseBase responseBase;

        try {
            List<TbScanAmountrec> scanAmountrecList = new ArrayList<>();
            TbSystemAdmin user = (TbSystemAdmin) request.getSession().getAttribute(
                    "user");
            TbUserRole userRole = userRoleService.getRoleById(user.getSaRole());
            if (userRole != null && "经销商".equals(userRole.getUrName())) {
                TbAgencyInfo agencyInfo = agencyService.getAgencyBySrId(user.getSaId());
                if (!StringUtils.isEmpty(agencyInfo.getAiArea())) {
                    TbScanAmountrec amountrec = scanAmountrecService.getScanAmountByPlaceNameAndType(piId, agencyInfo.getAiArea(), 3);
                    if (amountrec != null) {
                        //scanAmountrecList =  scanAmountrecService.getListByTypeAndPiId(piId, null, amountrec.getSaId());
                        scanAmountrecList.add(amountrec);
                    }
                } else if (!StringUtils.isEmpty(agencyInfo.getAiCity())) {
                    TbScanAmountrec amountrec = scanAmountrecService.getScanAmountByPlaceNameAndType(piId, agencyInfo.getAiCity(), 2);
                    if (amountrec != null) {
                        //scanAmountrecList =  scanAmountrecService.getListByTypeAndPiId(piId, null, amountrec.getSaId());
                        scanAmountrecList.add(amountrec);
                    }
                } else if (!StringUtils.isEmpty(agencyInfo.getAiProvince())) {
                    TbScanAmountrec amountrec = scanAmountrecService.getScanAmountByPlaceNameAndType(piId, agencyInfo.getAiProvince(),1);
                    if (amountrec != null) {
                        //scanAmountrecList =  scanAmountrecService.getListByTypeAndPiId(piId, null, amountrec.getSaId());
                        scanAmountrecList.add(amountrec);
                    }
                } else {
                    scanAmountrecList = scanAmountrecService.getListByTypeAndPiId(piId, 1, null);
                }
            } else {
                scanAmountrecList = scanAmountrecService.getListByTypeAndPiId(piId, 1, null);
            }

            Map<String, Object> ansMap = new HashMap<>();
            List<String> xAxis = new ArrayList<>();
            List<Double> data = new ArrayList<>();
            List<ChartData> provinceDataList = new ArrayList<>();
            List<ChartData> nextDataList = new ArrayList<>();
            for (TbScanAmountrec rec : scanAmountrecList) {
                //这是data
                ChartData chartData = new ChartData();
                chartData.setName(rec.getSaScanPlace().substring(rec.getSaScanPlace().indexOf("-") + 1));
                chartData.setY(100 * (double)rec.getSaTotalScanAmount() / (double)rec.getSaTotalAmount());
                chartData.setDrilldown(rec.getSaScanPlace());

                provinceDataList.add(chartData);

                //这是data外一层
                ChartData cityData = new ChartData();
                cityData.setName(rec.getSaScanPlace().substring(rec.getSaScanPlace().indexOf("-") + 1));
                cityData.setId(rec.getSaScanPlace());
                //这是data
                cityData.setData(new ArrayList());

                List<TbScanAmountrec> cityScanAmountrecList = scanAmountrecService.getListByTypeAndPiId(piId, null, rec.getSaId());
                for (TbScanAmountrec cityRec : cityScanAmountrecList) {
                    List<TbScanAmountrec> areaScanAmountrecList = scanAmountrecService.getListByTypeAndPiId(piId, null, cityRec.getSaId());
                    ChartData areaData = new ChartData();
                    areaData.setName(cityRec.getSaScanPlace().substring(cityRec.getSaScanPlace().indexOf("-") + 1));
                    areaData.setId(cityRec.getSaScanPlace());

                    List<ChartData> areaList = new ArrayList<>();
                    for (TbScanAmountrec areaRec : areaScanAmountrecList) {
                        if (areaRec.getSaTotalAmount() == 0) {
                            areaRec.setSaTotalAmount(1);
                        }
                        ChartData minData = new ChartData();
                        minData.setName(areaRec.getSaScanPlace().substring(areaRec.getSaScanPlace().indexOf("-") + 1));
                        minData.setY(100 * (double)areaRec.getSaTotalScanAmount() / (double)areaRec.getSaTotalAmount());
                        areaList.add(minData);
                    }
                    areaData.setData(areaList);
                    if (areaScanAmountrecList.size() > 0) {
                        nextDataList.add(areaData);
                    }

                    //城市-data
                    ChartData cityDataData = new ChartData();
                    cityDataData.setDrilldown(cityRec.getSaScanPlace());
                    cityDataData.setName(cityRec.getSaScanPlace().substring(cityRec.getSaScanPlace().indexOf("-") + 1));
                    if (cityRec.getSaTotalAmount() == 0) {
                        cityRec.setSaTotalAmount(1);
                    }
                    cityDataData.setY(100 * (double)cityRec.getSaTotalScanAmount() / (double)cityRec.getSaTotalAmount());

                    cityData.getData().add(cityDataData);
                }
                if (cityScanAmountrecList.size() > 0) {
                    nextDataList.add(cityData);
                }
            }
          /*  ansMap.put("xAxis",xAxis);
            ansMap.put("data", data);*/
           /* Collections.sort(provinceDataList,new Comparator<ChartData>(){
                @Override
                public int compare(ChartData arg0, ChartData arg1) {
                    return arg0.getY().compareTo(arg1.getY());
                }
            });*/
            ansMap.put("provinceDataList",provinceDataList);
            ansMap.put("nextDataList", nextDataList);

            responseBase = new ResponseBase(1, "", ansMap);
        } catch (Exception e) {
            responseBase = new ResponseBase(0, "");
            e.printStackTrace();
        }

        return responseBase;
    }

    @RequestMapping("getPbCodeScanRateByPiId")
    @ResponseBody
    public ResponseBase getPbCodeScanRateByPiId(String piId) {
        ResponseBase responseBase;
        try {
            List<TbScanAmountrec> scanAmountrecList = scanAmountrecService.getListByTypeAndPiId(piId, 10, null);

            Map<String, Object> ansMap = new HashMap<>();
            List<String> xAxis = new ArrayList<>();
            List<Double> data = new ArrayList<>();
            List<ChartData> provinceDataList = new ArrayList<>();
            for (TbScanAmountrec rec : scanAmountrecList) {
                //这是data
                ChartData chartData = new ChartData();
                chartData.setName(rec.getSaPbCode().substring(rec.getSaPbCode().indexOf("-") + 1));
                chartData.setY(100 * (double)rec.getSaTotalScanAmount() / (double)rec.getSaTotalAmount());
                chartData.setDrilldown(rec.getSaScanPlace());

                provinceDataList.add(chartData);
            }
            ansMap.put("provinceDataList",provinceDataList);

            responseBase = new ResponseBase(1, "", ansMap);
        } catch (Exception e) {
            responseBase = new ResponseBase(0, "");
            e.printStackTrace();
        }

        return responseBase;
    }

    @RequestMapping("getScanAreaByPiId")
    @ResponseBody
    public ResponseBase getScanAreaByPiId(String piId, HttpServletRequest request) {
        ResponseBase responseBase;
        try {
            List<TbScanAmountrec> scanAmountrecList = new ArrayList<>();
            TbSystemAdmin user = (TbSystemAdmin) request.getSession().getAttribute(
                    "user");
            TbUserRole userRole = userRoleService.getRoleById(user.getSaRole());
            if (userRole != null && "经销商".equals(userRole.getUrName())) {
                TbAgencyInfo agencyInfo = agencyService.getAgencyBySrId(user.getSaId());
                if (!StringUtils.isEmpty(agencyInfo.getAiArea())) {
                    TbScanAmountrec amountrec = scanAmountrecService.getScanAmountByPlaceNameAndType(piId, agencyInfo.getAiArea(), 3);
                    if (amountrec != null) {
                        //scanAmountrecList =  scanAmountrecService.getListByTypeAndPiId(piId, null, amountrec.getSaId());
                        scanAmountrecList.add(amountrec);
                    }
                } else if (!StringUtils.isEmpty(agencyInfo.getAiCity())) {
                    TbScanAmountrec amountrec = scanAmountrecService.getScanAmountByPlaceNameAndType(piId, agencyInfo.getAiCity(), 2);
                    if (amountrec != null) {
                        //scanAmountrecList =  scanAmountrecService.getListByTypeAndPiId(piId, null, amountrec.getSaId());
                        scanAmountrecList.add(amountrec);
                    }
                } else if (!StringUtils.isEmpty(agencyInfo.getAiProvince())) {
                    TbScanAmountrec amountrec = scanAmountrecService.getScanAmountByPlaceNameAndType(piId, agencyInfo.getAiProvince(),1);
                    if (amountrec != null) {
                        //scanAmountrecList =  scanAmountrecService.getListByTypeAndPiId(piId, null, amountrec.getSaId());
                        scanAmountrecList.add(amountrec);
                    }
                } else {
                    scanAmountrecList = scanAmountrecService.getListByTypeAndPiId(piId, 1, null);
                }
            } else {
                scanAmountrecList = scanAmountrecService.getListByTypeAndPiId(piId, 1, null);
            }

            Map<String, Object> ansMap = new HashMap<>();
            List<String> xAxis = new ArrayList<>();
            List<Double> data = new ArrayList<>();
            List<ChartData> provinceDataList = new ArrayList<>();
            List<ChartData> nextDataList = new ArrayList<>();
            for (TbScanAmountrec rec : scanAmountrecList) {
                //这是data
                ChartData chartData = new ChartData();
                chartData.setName(rec.getSaScanPlace().substring(rec.getSaScanPlace().indexOf("-") + 1));
                chartData.setY((double)rec.getSaTotalScanAmount());
                chartData.setDrilldown(rec.getSaScanPlace());

                provinceDataList.add(chartData);

                //这是data外一层
                ChartData cityData = new ChartData();
                cityData.setName(rec.getSaScanPlace().substring(rec.getSaScanPlace().indexOf("-") + 1));
                cityData.setId(rec.getSaScanPlace());
                //这是data
                cityData.setData(new ArrayList());

                List<TbScanAmountrec> cityScanAmountrecList = scanAmountrecService.getListByTypeAndPiId(piId, null, rec.getSaId());
                for (TbScanAmountrec cityRec : cityScanAmountrecList) {
                    List<TbScanAmountrec> areaScanAmountrecList = scanAmountrecService.getListByTypeAndPiId(piId, null, cityRec.getSaId());
                    ChartData areaData = new ChartData();
                    areaData.setName(cityRec.getSaScanPlace().substring(cityRec.getSaScanPlace().indexOf("-") + 1));
                    areaData.setId(cityRec.getSaScanPlace());

                    List<ChartData> areaList = new ArrayList<>();
                    for (TbScanAmountrec areaRec : areaScanAmountrecList) {
                        if (areaRec.getSaTotalAmount() == 0) {
                            areaRec.setSaTotalAmount(1);
                        }
                        ChartData minData = new ChartData();
                        minData.setName(areaRec.getSaScanPlace().substring(areaRec.getSaScanPlace().indexOf("-") + 1));
                        minData.setY((double)areaRec.getSaTotalScanAmount());
                        areaList.add(minData);
                    }
                    areaData.setData(areaList);
                    if (areaScanAmountrecList.size() > 0) {
                        nextDataList.add(areaData);
                    }

                    //城市-data
                    ChartData cityDataData = new ChartData();
                    cityDataData.setDrilldown(cityRec.getSaScanPlace());
                    cityDataData.setName(cityRec.getSaScanPlace().substring(cityRec.getSaScanPlace().indexOf("-") + 1));
                    if (cityRec.getSaTotalAmount() == 0) {
                        cityRec.setSaTotalAmount(1);
                    }
                    cityDataData.setY((double)cityRec.getSaTotalScanAmount());

                    cityData.getData().add(cityDataData);
                }
                if (cityScanAmountrecList.size() > 0) {
                    nextDataList.add(cityData);
                }
            }
          /*  ansMap.put("xAxis",xAxis);
            ansMap.put("data", data);*/
            /*Collections.sort(provinceDataList,new Comparator<ChartData>(){
                @Override
                public int compare(ChartData arg0, ChartData arg1) {
                    return arg0.getY().compareTo(arg1.getY());
                }
            });*/
            ansMap.put("provinceDataList",provinceDataList);
            ansMap.put("nextDataList", nextDataList);

            responseBase = new ResponseBase(1, "", ansMap);
        } catch (Exception e) {
            responseBase = new ResponseBase(0, "");
            e.printStackTrace();
        }

        return responseBase;
    }

封装:

public class ChartData {
    private String name;
    private Double y;
    private String drilldown;
    private String id;
    private List data;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getY() {
        return y;
    }

    public void setY(Double y) {
        this.y = y;
    }

    public String getDrilldown() {
        return drilldown;
    }

    public void setDrilldown(String drilldown) {
        this.drilldown = drilldown;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public List getData() {
        return data;
    }

    public void setData(List data) {
        this.data = data;
    }
}



页面:钻取需要引入drilldown.js这个文件

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="ctx" value="${pageContext.request.contextPath}" />

<!doctype html>
<html class="no-js" lang="zh-cn">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="${ctx}/content/css/reset.css" />
    <link rel="stylesheet" href="${ctx }/content/css/right.css" />
    <link rel="stylesheet" href="${ctx }/content/css/info.css" />
    <script type="text/javascript" src="${ctx}/content/js/jquery-1.7.1.min.js"></script>
    <script type="text/javascript" src="${ctx}/content/js/jqeury_extend.js"></script>
    <script type="text/javascript" src="${ctx }/content/layer/layer.js"></script>

    <script src="${ctx }/content/highcharts/highcharts.js"></script>
    <script src="${ctx }/content/highcharts/modules/drilldown.js"></script>
</head>
<body  style="overflow-x: hidden">
<div class="info_main">
    <div style="margin-top: 10px;">
        <form id="query">
            产品名称:
            <select id="piId" class="shuru"  maxlength="32" style="width:200px;">
                <option value="">未选择</option>
                <c:forEach items="${productList }" var="sub" >
                    <option value="${sub.piId }">${sub.piName}</option>
                </c:forEach>
            </select>
            图表类型
            <select id="type" class="shuru"  maxlength="32" style="width:200px;">
                <option value="column">未选择</option>
                <option value="column">柱状图</option>
                <option value="line">折线图</option>
                <option value="pie">饼图</option>
            </select>
            <a style="margin-left:5px;" οnclick="LoadSerie_Ajax()" class="btn_query">查询</a>
        </form>
    </div>
    <div style="width: 100%;margin-top: 10px;">
        <div id="container" style="min-width:400px;width:1200px;height:400px;"></div>
        <div id="container2" style="min-width:400px;width:1200px;height:400px;"></div>
    </div>

</div>
</body >
<script type="text/javascript">
    //定义一个Highcharts的变量,初始值为null
    var oChart = null;

    var oOptions = {
        chart: {
            type: 'column',
            renderTo: 'container'
        },
        title: {
            text: '地区扫码率分析图表'
        },
        xAxis: {
            type: 'category'
        },
        yAxis: {
            title: {
                text: '扫码率百分比(%)'
            }
        },
        legend: {
            enabled: false
        },
        plotOptions: {
            series: {
                borderWidth: 0,
                dataLabels: {
                    enabled: true,
                    format: '{point.y:.1f}%'
                }
            }
        },
        tooltip: {
            headerFormat: '<span style="font-size:11px">{series.name}</span><br>',
            pointFormat: '<span style="color:{point.color}">{point.name}</span>: <b>{point.y:.2f}%</b> of total<br/>'
        },
        series: [{
            name: '扫码率百分比(%)',
            colorByPoint: true,
            data: []
        }],
        drilldown: {
            series: []
        },
        exporting:{
            enabled:false
        },
        credits: {
            enabled: false
        }
    }

    var oChart2 = null;

    var oOptions2 = {
        chart: {
            type: 'column',
            renderTo: 'container2'
        },
        title: {
            text: '批次扫码率分析图表'
        },
        xAxis: {
            type: 'category'
        },
        yAxis: {
            title: {
                text: '扫码率百分比(%)'
            }
        },
        legend: {
            enabled: false
        },
        plotOptions: {
            series: {
                borderWidth: 0,
                dataLabels: {
                    enabled: true,
                    format: '{point.y:.1f}%'
                }
            }
        },
        tooltip: {
            headerFormat: '<span style="font-size:11px">{series.name}</span><br>',
            pointFormat: '<span style="color:{point.color}">{point.name}</span>: <b>{point.y:.2f}%</b> of total<br/>'
        },
        series: [{
            name: '扫码率百分比(%)',
            colorByPoint: true,
            data: []
        }],
        drilldown: {
            series: []
        },
        exporting:{
            enabled:false
        },
        credits: {
            enabled: false
        }
    }
    $(document).ready(function(){
        oChart = new Highcharts.Chart(oOptions);
        oChart2 = new Highcharts.Chart(oOptions2);
        //异步动态加载数据列
       // LoadSerie_Ajax();
    });

    //异步读取数据并加载到图表
    function LoadSerie_Ajax() {
        oChart.showLoading("正在加载数据...");
        $.ajax({
            url : '${ctx }/data/getScanRateByPiId.do?piId='+$("#piId").val(),
            type : 'POST',
            dataType : 'json',
            contentType: "application/x-www-form-urlencoded; charset=utf-8",
            success : function(rntData){
                console.log(rntData.data);

                if (rntData.code == 1) {
                    var oSeries = {
                        name: "扫码率",
                        data: rntData.data.provinceDataList,
                        drilldown: true

                    };


                    oOptions.chart.type = $("#type").val();

                    oOptions = {

                        //设置图表关联显示块和图形样式
                        chart: {
                            renderTo: 'container',  //设置显示的页面块
                            //type:'line'                //设置显示的方式
                            type: $("#type").val(),
                            drilldown: {
                                series: []
                            }
                        },

                        //图标标题
                        title: {
                            text: '地区扫码率分析图表'
                            //text: null, //设置null则不显示标题
                        },

                        //x轴
                        xAxis: {
                            type: 'category'
                        },

                        //y轴
                        yAxis: {
                            title: { text: '扫码率百分比(%)' }
                        },
                        series : [ {
                            name: "扫码率",
                            data: rntData.data.provinceDataList
                        } ],

                        drilldown: {
                            series: rntData.data.nextDataList
                        },
                        exporting:{
                            enabled:false
                        },
                        credits: {
                            enabled: false
                        },
                        tooltip: {
                            headerFormat: '<span style="font-size:11px">{series.name}</span><br>',
                            pointFormat: '<span style="color:{point.color}">{point.name}</span>: <b>{point.y:.2f}%</b> of total<br/>'
                        },
                    };
                    oChart = new Highcharts.Chart(oOptions);
                } else {
                    oChart = new Highcharts.Chart(oOptions);
                    oChart.setTitle("数据读取失败");
                }

            }
        });
        oChart.hideLoading();


        oChart2.showLoading("正在加载数据...");
        $.ajax({
            url : '${ctx }/data/getPbCodeScanRateByPiId.do?piId='+$("#piId").val(),
            type : 'POST',
            dataType : 'json',
            contentType: "application/x-www-form-urlencoded; charset=utf-8",
            success : function(rntData){
                console.log(rntData.data);

                if (rntData.code == 1) {

                    oOptions2 = {

                        //设置图表关联显示块和图形样式
                        chart: {
                            renderTo: 'container2',  //设置显示的页面块
                            //type:'line'                //设置显示的方式
                            type: $("#type").val(),
                            drilldown: {
                                series: []
                            }
                        },

                        //图标标题
                        title: {
                            text: '批次扫码率分析图表'
                            //text: null, //设置null则不显示标题
                        },

                        //x轴
                        xAxis: {
                            type: 'category'
                        },

                        //y轴
                        yAxis: {
                            title: { text: '扫码率百分比(%)' }
                        },
                        series : [ {
                            name: "批次扫码率",
                            data: rntData.data.provinceDataList
                        } ],
                        exporting:{
                            enabled:false
                        },
                        credits: {
                            enabled: false
                        },
                        tooltip: {
                            headerFormat: '<span style="font-size:11px">{series.name}</span><br>',
                            pointFormat: '<span style="color:{point.color}">{point.name}</span>: <b>{point.y:.2f}%</b> of total<br/>'
                        },
                    };
                    oChart2 = new Highcharts.Chart(oOptions2);
                } else {
                    oChart2 = new Highcharts.Chart(oOptions2);
                    oChart2.setTitle("数据读取失败");
                }

            }
        });
        oChart2.hideLoading();
    }
</script>
</html>

获得的json数据形如:

{
    "code":1,
    "msg":"", 
    "data":
    {
        "nextDataList":
        [{
            "name": "河南省",
            "y": null,
            "drilldown": null,
            "id": "河南省",
            "data": [{"name": "河南省下面的市", "y": 2.0, "drilldown": "河南省下面的市", "id": null, "data": null}]
        }, {
            "name": "杭州市",
            "y": null,
            "drilldown": null,
            "id": "杭州市",
            "data": [{"name": "西湖区", "y": 2.0, "drilldown": null, "id": null, "data": null}, {
                "name": "上城区",
                "y": 2.0,
                "drilldown": null,
                "id": null,
                "data": null
            }, {"name": "下城区", "y": 2.0, "drilldown": null, "id": null, "data": null}, {
                "name": "萧山区",
                "y": 2.0,
                "drilldown": null,
                "id": null,
                "data": null
            }, {"name": "余杭区", "y": 2.0, "drilldown": null, "id": null, "data": null}, {
                "name": "滨江区",
                "y": 3.0,
                "drilldown": null,
                "id": null,
                "data": null
            }, {"name": "拱墅区", "y": 1.0, "drilldown": null, "id": null, "data": null}]
        }, {
            "name": "浙江省",
            "y": null,
            "drilldown": null,
            "id": "浙江省",
            "data": [{"name": "嘉兴市", "y": 1.0, "drilldown": "嘉兴市", "id": null, "data": null}, {
                "name": "杭州市",
                "y": 1.0,
                "drilldown": "杭州市",
                "id": null,
                "data": null
            }]
        }], 
            "provinceDataList":
        [{"name": "江苏省", "y": 2.0, "drilldown": "江苏省", "id": null, "data": null}, {
            "name": "河南省",
            "y": 2.0,
            "drilldown": "河南省",
            "id": null,
            "data": null
        }, {"name": "浙江省", "y": 2.0, "drilldown": "浙江省", "id": null, "data": null}]
    }
}


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值