1、实现的效果

2、前端代码

<template>
<div>
<h3 style="color: black;text-align: left">汽车租赁情况数据分析</h3>
<hr>
<div ref="chart2" style="width:50%;height:376px; float: left"></div>
<div style="width:50%;height:376px;float: right" ref="chart"></div> <div style="width:100%;height:376px;float: left">
<div style="margin-top: 5px">
<hr>
<h1 style="float: left">友情提示:</h1><br><br><br><br>
<span style="float: left">1、商家可以根据租赁汽车的排名情况、加大对热门汽车的推广和上新</span>
<br><br>
<span style="float: left">2、根据各类汽车租赁情况的总体展示,及时调整汽车商品的管理</span>
<br><br>
<span style="float: left">3、商家可以及时了解用户对租赁汽车商品的租赁情况</span> </div>
</div>
</div>
</template> <script>
//局部引用
const echarts = require('echarts');
export default{
data(){
return { }
},
methods: { initCharts2(){
const _this = this
// 基于准备好的dom,初始化echarts实例
let myChart2 = echarts.init(this.$refs.chart2);
var values =[]; //请求后台数据
axios.get('/static/getcarranking').then(function (resp) {
if(resp.data.code==200){
console.log(resp.data.data.carRank.length)
console.log(resp)
for( var i =0;i<resp.data.data.carRank.length;i++){
var test={"value":resp.data.data.carRank[i].value,"name":resp.data.data.carRank[i].name}
values.push(test); } // 绘制图表
myChart2.setOption({
title: {
text: '汽车租赁排名前六展示',
left:'center'
},
tooltip: {
trigger: 'item'
},
legend: {
orient:'vertical',
left: 'left',
data:values
},
series: [
{
name: '数据来源',
type: 'pie',
radius:'60%',
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: true,
fontSize: '40',
fontWeight: 'bold'
}
},
labelLine: {
show: false
},
data: values
}
] }); }
}) },
initCharts(){
const _this =this
// 基于准备好的dom,初始化echarts实例
let myChart = echarts.init(this.$refs.chart);
var names=[]; //横坐标数组
var values =[]; //纵坐标数组 //请求后台数据
axios.get('/static/getcartypenum').then(function (resp) {
if(resp.data.code==200){
console.log(resp.data.data.carTypeNum.length)
console.log(resp)
for( var i =0;i<resp.data.data.carTypeNum.length;i++){
names.push(resp.data.data.carTypeNum[i].name);
values.push(resp.data.data.carTypeNum[i].value); } // 绘制图表
myChart.setOption({
title: { text: '不同类型汽车租赁情况' },
tooltip: {},
xAxis: {
data: names
},
yAxis: {},
series: [{
name: '租赁数量',
type: 'bar',
data: values
}]
}); }
}) }
},
//一加载页面就调用
mounted () {
this.initCharts();
this.initCharts2();
}
}
</script>
<style>
</style>

3、后端controller代码

package com.zheng.yu.controller;

import com.zheng.yu.config.response.Result;
import com.zheng.yu.pojo.Wallet;
import com.zheng.yu.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import java.util.HashMap;
import java.util.List;
import java.util.Map; @Api(value = "数据分析", tags = "数据分析")
@ApiModel
@RestController
public class DataStatisticsController { @Autowired
DataStatisticsService dataStatisticsService; @Autowired
UserService userService; @Autowired
OrderService orderService; @Autowired
CarService carService; @Autowired
WalletService walletService; //查询汽车租赁情况
@RequestMapping(value = "/static/getcarranking", method = RequestMethod.GET)
public Result getCarRanking(){
List<HashMap<String, Object>> list = dataStatisticsService.getCarRanking();
System.out.println(list);
return Result.ok().data("carRank",list); } //不同类型的汽车的销量
@RequestMapping(value = "/static/getcartypenum", method = RequestMethod.GET)
public Result getCarTypeNum(){
Map<String, String> map = new HashMap<String, String>();
// List<HashMap<String, String>> list = mapper.getRentAmountMonthDetail(startTime, endTime); List<HashMap<String, Object>> list = dataStatisticsService.getCarTypeNum();
System.out.println(list);
return Result.ok().data("carTypeNum",list); } }

4、servie层代码

package com.zheng.yu.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map; public interface DataStatisticsService { //查询各种汽车的租赁数量
public List<HashMap<String, Object>> getCarTypeNum(); //查询汽车的租赁排行情况
public List<HashMap<String,Object>> getCarRanking();
}

5、serviceImpl层代码

package com.zheng.yu.service.Impl;

import com.zheng.yu.mapper.DataStatisticsMapper;
import com.zheng.yu.service.DataStatisticsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.HashMap;
import java.util.List;
import java.util.Map; @Service
public class DataStatisticsServiceImpl implements DataStatisticsService { @Autowired
DataStatisticsMapper dataStatisticsMapper; // 查询各种汽车的租赁数量
public List<HashMap<String, Object>> getCarTypeNum() {
return dataStatisticsMapper.getCarTypeNum();
} //查询汽车的租赁排行情况
public List<HashMap<String, Object>> getCarRanking() {
return dataStatisticsMapper.getCarRanking();
} }

6、mapper层代码

package com.zheng.yu.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository; import java.util.HashMap;
import java.util.List;
import java.util.Map; @Mapper
@Repository
public interface DataStatisticsMapper { //查询各种汽车的租赁数量
public List<HashMap<String, Object>> getCarTypeNum(); //查询汽车的租赁排行情况
public List<HashMap<String,Object>> getCarRanking();
}

7、xml中的sql语句

<?xml version="1.0" encoding="UTF8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zheng.yu.mapper.DataStatisticsMapper"> <!-- 查询汽车类型总的租赁情况-->
<select id="getCarTypeNum" resultType="java.util.HashMap">
select type as name ,count(type) as value from carshop.order_item group by type
</select> <select id="getCarRanking" resultType="java.util.HashMap">
select name ,count(name) as value from carshop.order_item
group by name
order by count(name) desc limit 6
</select> </mapper>

8、遇到的问题

8.1 怎样将查询的结果封装成map ?

解决方法:resultType=“java.util.HashMap”
接收查询出来的结果 : List<HashMap<String,Object>>

8.2 怎样在一个页面中同时设置几个表格?

直接写在方法里进行,有几个表格就写几个方法
基本流程:

  • 1、基于准备好的dom,初始化echarts实例(自己设置的div,就是图表放置的位置)
  • 2、方法的调用,将后端的数据拿到,赋予给前端的数据集合
  • 3、绘制图标、将数据替换(数据库中的数据替换假数据)
  • 4、加载页面调用,进行方法的初始化

在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作的更多相关文章

  1. 当vue页面异步加载的数据想在页面上渲染怎么办

    <template> <div class="test"> <div v-for="(item, index) in arr" : ...

  2. vue页面引入外部js文件遇到的问题

    问题一:vue文件中引入外部js文件的方法 //在vue文件中 <script> import * as funApi from '../../../publicJavaScript/pu ...

  3. 在vue中的form表单中下拉框中的数据来自数据库查询到的数据

    文章目录 1.实现的效果: 2.前端html代码 3.js中的代码 4.后端的方法 1.实现的效果: 增加一个新的类型到数据库 2.前端html代码 需要注意的部分:prop后边是表单中的字段 v-m ...

  4. echarts地图边界数据的实时获取与应用,省市区县多级联动【附最新geoJson文件下载】

    首先,来看下效果图 在线体验地址:https://hxkj.vip/demo/echartsMap/,并提供实时geoJson数据文件下载 echarts官方社区链接地址(可在线编辑):https:/ ...

  5. Echarts 获取后台数据 使用后台数据展示 柱形图

    后台数据要以json格式返回 页面:引用echarts.js , 然后data以ajax的数据请求并返回 <%@ page language="java" import=&q ...

  6. Vue父子组件通信(父级向子级传递数据、子级向父级传递数据、Vue父子组件存储到data数据的访问)

    Vue父子组件通信(父级向子级传递数据.子级向父级传递数据.Vue父子组件存储到data数据的访问) 一.父级向子级传递数据[Prop]: ● Prop:子组件在自身标签上,使用自定义的属性来接收外界 ...

  7. Vue页面间传值,以及客户端数据存储

    初学Vue,遇到了页面传值的问题,大概网上学习了解了一下,在此跟大家分享一下学习心得,欢迎批评指正. 一.参数传值 如果是简单的页面传值,比如传一个id到详情页等等,推荐使用参数传值. 这里页面是通过 ...

  8. vue单页面引入CDN链接

    不想在index.html文件中全局引入CDN资源,那么如何在Vue单文件组件中引入?下面来瞅瞅~ 虚拟DOM创建 Vue 通过创建一个虚拟 DOM 来追踪自己要改变的真实 DOM 什么是虚拟DOM? ...

  9. ECharts图表中级入门之formatter:夜谈关于ECharts图表内的数据格式化方法

    来源于:http://www.ithao123.cn/content-3751220.html 格式化之所以存在,主要是因为我们想把一些不够人性化的内容通过某种处理让其变得人性化,便于用户更好地理解内 ...

随机推荐

  1. 臭名远扬之 goto 语句

    C 语言自学之 goto 语句 Dome1:以下程序实现从控制台输出1-10,使用goto语句,实现当输出完3之后跳出循环体. 1 #include <stdio.h> 2 3 int m ...

  2. 羽夏看Linux内核——引导启动(上)

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...

  3. HDU4348 To the moon (主席树)

    标记永久化,除非想\(MLE\) 忽然感到主席树不过是函数式的树套树 #include <iostream> #include <cstdio> #include <cs ...

  4. (防坑)Alphafold 非docker 安装指南

    本指南适用于Linux系统.Alphafold官方也强调尽量使用Linux系统!官方提供了docker版安装步骤. Alphafold简介: 强大的蛋白质结构预测. 开源地址:https://gith ...

  5. linux scsi相关的一些学习笔记

      最近看scsi相关处理的一些备忘,比较零碎,仅作参考. 先从最显而易见的打印入手: [0:0:0:0] disk ATA INTEL SSDSC2BX20 0150 - [0:0:1:0] dis ...

  6. C++11实现的数据库连接池

    它什么是? 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:类似的还有线程池. 为什么要用? 一个数据库连接对象均对应一个物理数据库连接, ...

  7. 未来的可再生能源电网!FREEDM 论文阅读

    全文主旨[省时间快读] 背景: 论文标题:The Future Renewable Electric Energy Delivery and Management (FREEDM) System: T ...

  8. 避免jquery多次监听事件

    jQuery.event.dispatch 事件分发监听源码简单理解是将绑定的事件放入队列后进行监听,如果对一个事件多次绑定(on或者bind),事件会重复添加到队列等待jq监听,这样会导致很大资源消 ...

  9. KingbaseES V8R6C6备份恢复案例之---单实例sys_baackup.sh备份

    案例说明: KingbaseES V8R6C6中sys_backup.sh在通用机单实例环境,默认需要通过securecmdd工具以及kingbase和root用户之间的ssh互信,执行备份初始化(i ...

  10. KingbaseES 如何查看应用执行的SQL的执行计划

    通过explain ,我们可以获取特定SQL 的执行计划.但对于同一条SQL,不同的变量.不同的系统负荷,其执行计划可能不同.我们要如何取得SQL执行时间点的执行计划?KingbaseES 提供了 a ...