1. 程式人生 > >Java前端引入echart外掛

Java前端引入echart外掛

前端HTML檔案中引入外掛:

 <div class="row">
     <div class="col-md-5 col-md-offset-1">
         <div class="float-e-margins">
              <div class="echarts" id="proGrade">
              </div>
         </div>
      </div>
      <div class="col-md-5 ">
             <div class="ibox float-e-margins">
                 <div class="echarts" id="backup">
                 </div>
            </div>
      </div>
 </div>

因為引入了echart外掛,所以要引入echart

<script src="/js/plugins/echarts/echarts-all.js"></script>

還要引入成各種圖的js檔案

var prefix = "/nsmp/dept";
$(function () {
    $('#myTab li:eq(0) a').tab('show');
    pie("sysCount","各單位系統總數情況","/nsmp/analysis/info_sys/count_dept");
    bar("deptTime","系統等保評估時間","/nsmp/analysis/info_sys/count_create_date");
    pie("proGrade","系統等級分佈情況","/nsmp/analysis/info_sys/pro_grade");
    pie("backup","系統是否備案情況","/nsmp/analysis/info_sys/backup");
    pie("revise","系統是否整改情況","/nsmp/analysis/info_sys/revise");
    pie("dept_result","系統是否測評情況","/nsmp/analysis/info_sys/dept_result");
    load();
});

function pie(id,title,url){
    var allData=[];
    var legendData=[];
    $.ajax({
        type : "post",
        url : url,
        contentType: "application/json; charset=utf-8",
        async : false,
        dataType: 'json',
        success : function(datas) {
            $.each(datas, function(index,value) {
                var data = {value:value.cnt, name:value.name}
                allData.push(data);
                legendData.push(value.name);
            })
        }
    });
    var pieChart = echarts.init(document.getElementById(id));
    var pieoption = {
        title : {
            text: title,
            x:'center'
        },
        tooltip : {
            trigger: 'item',
            formatter: "{a} <br/>{b} : {c} ({d}%)"
        },
        toolbox: {
            show : true,
            feature : {
                restore : {show: true},
                saveAsImage : {show: true}
            }
        },
        legend: {
            orient : 'vertical',
            x : 'left',
            data: legendData
        },
        calculable : true,
        series : [
            {
                name:title,
                type:'pie',
                radius : '55%',
                center: ['50%', '60%'],
                data:allData
            }
        ]
    };
    pieChart.setOption(pieoption);
    // window.onresize = barChart.resize;  寫在外面
}
function bar(id,title,url){
    var seriesData =[];
    var x_Data =[];
    $.ajax({
        type : "post",
        url : url,
        contentType: "application/json; charset=utf-8",
        async : false,
        dataType: 'json',
        success : function(datas) {
            $.each(datas, function(index,value) {
                x_Data.push(value.createDate);
                seriesData.push(value.cnt);
            })
        }
    });
    var barChart = echarts.init(document.getElementById(id));
    var baroption = {
        title : {
            text: title,
            x:'center'
        },
        tooltip : {
            trigger: 'axis'
        },
        toolbox: {
            show : true,
            feature : {
                restore : {show: true},
                magicType: {show: true, type: ['line', 'bar']},
                saveAsImage : {show: true}
            }
        },
        grid:{
            x:30,
            x2:40,
            y2:24
        },
        calculable : true,
        xAxis : [
            {
                type : 'category',
                //data : ['1月','2月','3月','4月','4月','6月','7月','8月','9月','10月','11月','12月']
                data :x_Data
            }
        ],
        yAxis : [
            {
                type : 'value'
            }
        ],
        series : [
            {
                name:title,
                type:'bar',
                //data:[2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
                data:seriesData,
                markPoint : {//最大值最小值標識
                    data : [
                        {type : 'max', name: '最大值'},
                        {type : 'min', name: '最小值'}
                    ]
                },
                markLine : {//平均值
                    data : [
                        {type : 'average', name: '平均值'}
                    ]
                }
            }
        ]
    };
    barChart.setOption(baroption);
}


在js層中往後端controller層裡邊傳送請求

有一段程式碼不知道有沒有用,檔案中注掉了,所以我就單獨拿出來放到這裡了。

/*function load() {
    $('#departTable')
        .bootstrapTable(
            {
                method : 'get', // 伺服器資料的請求方式 get or post
                url : prefix + "/list", // 伺服器資料的載入地址
                striped : true, // 設定為true會有隔行變色效果
                dataType : "json", // 伺服器返回的資料型別
                pagination : true, // 設定為true會在底部顯示分頁條
                // queryParamsType : "limit",
                // //設定為limit則會發送符合RESTFull格式的引數
                singleSelect : false, // 設定為true將禁止多選
                iconSize : 'outline',
                pageSize : 10, // 如果設定了分頁,每頁資料條數
                pageNumber : 1, // 如果設定了分佈,首頁頁碼
                search : true, // 是否顯示搜尋框
                showColumns : true, // 是否顯示內容下拉框(選擇顯示的列)
                sidePagination : "server",// 設定在哪裡進行分頁,可選值為"client" 或者
                // "server"
                // queryParams : queryParams,
                // //請求伺服器資料時,你可以通過重寫引數的方式新增一些額外的引數,例如 toolbar 中的引數 如果
                // queryParamsType = 'limit' ,返回引數必須包含
                // limit, offset, search, sort, order 否則, 需要包含:
                // pageSize, pageNumber, searchText, sortName,
                // sortOrder.
                // 返回false將會終止請求
                columns : [
                    {
                        field : 'id', // 列欄位名
                        title : '序號' // 列標題
                    },
                    {
                        field : 'deptNamee',
                        title : '單位名稱'
                    },
                    {
                        field : 'detailAddress',
                        title : '單位地址'
                    },
                    {
                        field : 'postalcode',
                        title : '郵政編碼'
                    },
                    {
                        field : 'adminDivision',
                        title : '行政區劃程式碼'
                    },
                    {
                        field : 'principalName',
                        title : '單位負責人'
                    },
                    {
                        field : 'principalJob',
                        title : '職務'
                    },
                    {
                        field : 'principalPhone',
                        title : '辦公電話'
                    },
                    {
                        field : 'principalCellPhone',
                        title : '行動電話'
                    },
                    {
                        field : 'principalEmail',
                        title : '電子郵件'
                    },
                    {
                        field : 'subjection',
                        title : '隸屬關係'
                    },
                    {
                        field : 'unitType',
                        title : '單位型別'
                    },
                    {
                        field : 'industryType',
                        title : '行業類別'
                    },
                    {
                        field : 'count',
                        title : '資訊系統總數總數'
                    }]
            });
}
function reLoad() {
    $('#departTable').bootstrapTable('refresh');
}*/

然後是去controller層裡邊去寫介面:

/**
	 * 統計圖按照時間查詢資訊系統個數
	 * @return
	 */
	@Log("統計圖單位下的資訊系統個數")
	@PostMapping("/info_sys/pro_grade")
	@ResponseBody
	public List<Map<String,Object>> getInfoSysByProGrade() {
		List<Map<String,Object>> analysisList = analysisService.getInfoSysByProGrade();
		return analysisList;
	}


	/**
	 * 統計圖按照備案民警查詢備案稽核情況
	 * @return
	 */
	@Log("統計圖單位下的備案稽核情況")
	@PostMapping("/info_sys/backup")
	@ResponseBody
	public List<Map<String,Object>> getInfoSysByBackup() {
		List<Map<String,Object>> analysisList = analysisService.getInfoSysByBackup();
		return analysisList;
	}

這是controller層裡邊對應的兩個介面

後邊就是service層了:

 List<Map<String,Object>> getInfoSysByProGrade();

        /**
         * 備案稽核情況分析
         * @return
         */
List<Map<String,Object>> getInfoSysByBackup();

接著是service層的實現類:

@Override
    public List<Map<String, Object>> getInfoSysByProGrade() {
        return analysisDao.getInfoSysByProGrade();
    }

    /**
     * 備案稽核情況分析
     * @return
     */
    @Override
    public List<Map<String, Object>> getInfoSysByBackup() {
        return analysisDao.getInfoSysByBackup();
    }

dao層,因為要調取後端的xml層去操作資料庫:

 List<Map<String,Object>> getInfoSysByProGrade();

    /**
     * 備案稽核情況分分析
     * @return
     */
 List<Map<String,Object>> getInfoSysByBackup();

最後邊了,就是xml層了。

第一個xml檔案的SQL語句:

<!--getInfoSysByProGrade-->
	<select id="getInfoSysByProGrade" resultType="java.util.Map">
		SELECT
			count(g.id) AS cnt,
			CONCAT(g.pro_grade,'級')   AS name
		FROM
			info_sys AS info
		LEFT JOIN grade g ON info.id = g.info_sys_id
		WHERE
			g.pro_grade != ""
		GROUP BY
			g.pro_grade;
	</select>

第二個檔案的xml檔案的SQL語句:

<!--getInfoSysByPolicName備案稽核情況分析-->
	<select id="getInfoSysByBackup" resultType="java.util.Map">
		SELECT
			count(g.id) AS cnt,
			IF(g.`backup`=1,'是','否') AS name
		FROM
			grade g
		GROUP BY
			g. BACKUP;
	</select>

好了,大概就是這樣子,讓我們回憶一下這個過程。

首先是HTML檔案——>其次是引用echart的外掛和自己本身的js檔案(用於和後端進行互動的)——>controller層開始寫介面——>service 層寫介面——>serviceImpl寫介面的實現類——>dao層需要和後端進行互動——>最後了,就是xml檔案中的SQL語句了。

告成。。。