echarts饼图前后端代码SpringCloud+Vue3

news2024/11/29 4:00:07

♥️作者:小宋1021
🤵‍♂️个人主页:小宋1021主页
♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!!
🎈🎈加油! 加油! 加油! 加油
🎈欢迎评论 💬点赞👍🏻 收藏 📂加关注+!


展示:

前端:

 //饼图
  var chartDom = document.getElementById('barsEchart')
  var myChart = echarts.init(chartDom)
  var option

  option = {
  title: {
    text: '成绩人数占比',
    left: 'center'
  },
  tooltip: {
    trigger: 'item'
  },
  legend: {
    orient: 'vertical',
    left: 'left'
  },
  series: [
    {
     
      type: 'pie',
      radius: '50%',
      data: listPie.value.test,
      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)'
        }
      }
    }
  ]
};

  option && myChart.setOption(option)
  window.addEventListener('resize', function() {
    myChart.resize();
});

赋值语句:

 const dataKPI = await TeacherMonthExamApi.teacherExamAnalysisKPI(queryParams)
 listKPI.value = dataKPI.list[0]

后端向前端返回的结果:

我们要与echarts官网的数据格式相对应,value和name也要一一对应

后端:

我为了返回的时候返回value和name,所以提前定义了一个实体类,用于定义和接收数据:

package com.todod.education.module.study.controller.admin.data.vo;

import lombok.Data;

@Data
public class TeacherData {
    private int value;
    private String name;
    public TeacherData(int value, String name) {
        this.value = value;
        this.name = name;
    }
}

XML文件(可忽略):

  <!--    教师成绩分析表KPI-->
    <select id="teacherExamAnalysisKPI" resultType="java.util.Map">
        SELECT
            COUNT(CASE WHEN htme.exam_score::integer = 150 THEN 1 END) AS perfect_score_count,
            (SELECT MAX(htme_inner.exam_score::integer) FROM hr_teacher_month_exam htme_inner) AS highest_score,
            COUNT(CASE WHEN htme.exam_score::integer BETWEEN 0 AND 60 THEN 1 ELSE NULL END) AS score_0_60_count,
            COUNT(CASE WHEN htme.exam_score::integer BETWEEN 61 AND 120 THEN 1 ELSE NULL END) AS score_61_120_count,
            COUNT(CASE WHEN htme.exam_score::integer BETWEEN 121 AND 150 THEN 1 ELSE NULL END) AS score_121_150_count

        FROM
            hr_teacher_month_exam htme
                JOIN
            hr_teacher_manage htm ON htm.id = htme.teacher_id
        WHERE
        htme.deleted = 0
        AND
        htm.deleted = 0
        <if test=" dataPageReqVO.years != null ">
            AND EXTRACT(YEAR FROM (htme.exam_date)) =  CAST(#{dataPageReqVO.years} AS numeric)
        </if>
        <if test=" dataPageReqVO.months != null ">
            AND EXTRACT(MONTH FROM (htme.exam_date)) =  CAST(#{dataPageReqVO.months} AS numeric)
        </if>
    </select>

Mapper:

 //教师成绩分析表KPI
    IPage<Map> teacherExamAnalysisKPI(IPage page,@Param("dataPageReqVO") DataPageReqVO dataPageReqVO);

Service:

 //教师成绩分析表KPI
    PageResult<Map> teacherExamAnalysisKPI(DataPageReqVO dataPageReqVO);

实现类:

  //教师成绩分析表KPI
    @Override
    public PageResult<Map> teacherExamAnalysisKPI(DataPageReqVO dataPageReqVO) {
        IPage<Map> page = new Page<>(dataPageReqVO.getPageNo(), dataPageReqVO.getPageSize());
        if (dataPageReqVO.getYears() != null && !dataPageReqVO.getYears().isEmpty()) {
            dataPageReqVO.setYears(dataPageReqVO.getYears().substring(0, 4));
        }
        if (dataPageReqVO.getMonths() != null && !dataPageReqVO.getMonths().isEmpty() ){
            dataPageReqVO.setMonths(dataPageReqVO.getMonths().substring(6, 7));
        }
        dataMapper.teacherExamAnalysisKPI(page,dataPageReqVO);
        // 获取查询结果的记录
        List<Map> records = page.getRecords();
        // 对每条记录进行操作
        for (Map<String, Object> record : records) {

            HashMap<Integer,String > teacherExam = new HashMap<>();
            List<Object> pieData = new ArrayList<>();
            TeacherData item1 = new TeacherData(Integer.parseInt(record.get("score_0_60_count").toString()), "0~60分人数");
            TeacherData item2 = new TeacherData(Integer.parseInt(record.get("score_61_120_count").toString()), "61~120分人数");
            TeacherData item3 = new TeacherData(Integer.parseInt(record.get("score_121_150_count").toString()), "121~150分人数");
            pieData.add(item1);
            pieData.add(item2);
            pieData.add(item3);
            record.put("test", pieData);
        }


        return new PageResult<>(page.getRecords(), page.getTotal());
    }

由于我这个是通过map结果集直接从数据库返回的,并没有对应的DO实体类,所以我要在实现类里做一步操作:

// 获取查询结果的记录
        List<Map> records = page.getRecords();
        // 对每条记录进行操作
        for (Map<String, Object> record : records) {}

获取查询出来的map集合在对每一条进行操作

 List<Object> pieData = new ArrayList<>();
            TeacherData item1 = new TeacherData(Integer.parseInt(record.get("score_0_60_count").toString()), "0~60分人数");
            TeacherData item2 = new TeacherData(Integer.parseInt(record.get("score_61_120_count").toString()), "61~120分人数");
            TeacherData item3 = new TeacherData(Integer.parseInt(record.get("score_121_150_count").toString()), "121~150分人数");
            pieData.add(item1);
            pieData.add(item2);
            pieData.add(item3);
            record.put("test", pieData);

定义一个对象的集合与前端想要接受的数据类型匹配,再用我们之前定义的TeacherData,定义三个对象,再依次插入到对象集合pieData中,最后put到record集合中,也就是我们的返回集合,就大功告成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2215925.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络通信基础与实践第五讲】由浅入深了解路由器的结构设计

我们要实现网络互连&#xff0c;需要一个设备&#xff0c;这个设备可以实现将数据从一个端口转发到另外一个端口&#xff0c;从而实现信息的交换&#xff0c;这个设备就是路由器。 知道了路由器的功能需求&#xff0c;我们就要设计对应的结构来满足这样的需求从而实现相应的功…

【数据结构笔记】图Graph

目录 物理结构 邻接矩阵 矩阵压缩 关联矩阵 邻接表 邻接多重表 图搜索 广度优先搜索BFS 边分类 连通域分解 无权最短路径 深度优先搜索DFS 边分类 双连通分量 优先级优先搜索PFS 单源最短路径问题 Dijkstra算法 Bellman-Ford算法 所有结点对最短路径问题 Fl…

Python语言核心12个必知语法细节

1. 变量和数据类型 Python是动态类型的&#xff0c;变量不需要声明类型。 python复制代码 a 10 # 整数 b 3.14 # 浮点数 c "Hello" # 字符串 d [1, 2, 3] # 列表 2. 条件语句 使用if, elif, else进行条件判断。 python复制代码 x 10 if x > 5: print(&q…

获取首日涨停封盘后第二次交易日上涨/下跌的概率

有许多投资者喜欢在股票涨停封盘后&#xff0c;跟进买入。普通股民会认为一个能在今日涨停封盘的股票&#xff0c;证明其上市公司正有十分重大的利好信息&#xff0c;只需要跟进购买便可以获取短期利益。 我们用数据来看一下在当日涨停封盘后&#xff0c;第二次交易日是上涨还…

JavaWeb——Vue:打包部署(Nginx、目录介绍、部署及启动、访问 )

目录 打包 部署 Nginx 目录介绍 部署及启动 访问 前端 Vue 项目的最后一步是打包部署。在当前前后端分离的开发模式中&#xff0c;前端开发人员开发前端代码&#xff0c;后端开发人员开发后端代码。最终要将开发及测试完毕的前端 Vue 代码和后端代码分开部署在对应的服…

pulsar mq 单体验证demo, docker启动pulsar mq验证生产者消费者命令

1. 进入pulsar # 进入容器 docker exec -it xxx /bin/bash # 进入脚本 cd bin 2. 消费命令&#xff1a; ./pulsar-client consume my-topic -s "fist-subscription" 3. 新增一个创建&#xff0c;重复上述操作&#xff0c;进入bin文件夹&#xff0c;输入生产者命令…

JavaSE——集合9:Map接口实现类—HashTable

目录 一、HashTable基本介绍 二、HashTable底层源码解析 1.初始化数组长度为11&#xff0c;临界值为8(0.75*11)&#xff0c;加载因子是0.75 2.对存放的值进行自动装箱 3.执行put方法 4.计算key的hash值 5.计算索引值&#xff0c;放入table数组中 6.插入重复的key会被替…

VMware安装Ubuntu虚拟系统

1、准备工作 1&#xff09;下载并安装好VMware虚拟软件&#xff1b; 2&#xff09;下载Ubuntu系统镜像文件。建议下载LTS长期支持版本&#xff0c;下载地址&#xff1a; Ubuntu系统下载 | Ubuntu 2、安装Ubuntux系统 2.1、新建虚拟机 打开VMware软件&#xff0c;在右侧“…

住房公积金 计算器-java方法

计算了一下房贷压力&#xff0c;以全额公积金贷款为例&#xff0c;贷款四十万&#xff0c;等额本金方式还款&#xff0c;房贷利率为2.85%&#xff0c;基本情况就是如下&#xff1a; 还款总额达到 提前还款的好处 按三十年计算&#xff0c;如果第一年借用亲朋好友的钱&#x…

无mac通过iOS Dev Center生成打包证书完整流程

很多人第一次使用uniapp打包ios APP应用的时候&#xff0c;都会遇到一个问题&#xff0c;就是如何生成打包证书。 看了uniapp官网的教程&#xff0c;教程上看到是在iOS Dev Center上创建证书&#xff0c;但是过程中却要求我们使用macOS系统来创建csr文件和p12文件。但是我们没…

【ChatGLM4系列】入门介绍以及API调用

目录 前言一、ChatGLM41-1、模型介绍1-2、关键概念1-3、场景示例1-4、模型概览 二、快速开始2-1、安装2-2、Demo案例2-3、请求参数2-4、异步调用 三、模型工具3-1、通用Web搜索3-2、函数调用3-3、增强检索3-4、文件问答 总结 前言 GLM 全名 General Language Model &#xff0c…

数据可视化-使用python制作词云图(附代码)

想象一下&#xff0c;当你写完一篇日记或者一篇文章后&#xff0c;想要知道里面哪些词语出现得最多。这时候&#xff0c;词云图就能派上用场了。它会统计出文章里每个词语出现的次数&#xff0c;然后把这些词语以不同大小的字体展示出来&#xff0c;出现次数越多的词语&#xf…

免费打工人必备工具箱

下载地址&#xff1a;https://pan.quark.cn/s/356d7f201d7a 图片处理工具 格式转换&#xff1a;轻松转换图片格式&#xff0c;满足不同需求。 ICO转换&#xff1a;将图片转换为ICO格式&#xff0c;适用于图标设计。 图片压缩&#xff1a;无损压缩图片&#xff0c;减小文件大小…

Oracle中解决select into值集为空的报错情况

先看为空的情况 procedure test is n number; begin select 1 into n from CUX_2_OM_RELEASE_LIMIT_V cov where cov.Customer_Idnull; end; CUX_2_OM_RELEASE_LIMIT_V中没有id是空的&#xff0c;因此返回的结果一定是空集 运行结果: 有时候我…

Excel使用技巧:筛选2组数据;条件格式突出显示数据

Excel的正确用法&#xff1a; Excel是个数据库&#xff0c;不要随意合并单元格。 数据输入的时候一定要按照行列输入&#xff0c;中间不要留空&#xff0c;不然就没有关联。 筛选2组数据 相信大家已经知道如何筛选1组数据&#xff0c;有时候我们需要同时筛选2组数据。有2步&…

探秘盒子浮动,破解高度塌陷与文字环绕难题,清除浮动成关键!

目录 一、浮动 1、为什么使用浮动&#xff1f; 2、浮动的概念 3、语法 4、浮动的特性 &#xff08;3&#xff09;浮动的元素会具有行内块元素的特性 5、浮动元素经常和标准流父级搭配使用 6、浮层的弊端 &#xff08;1&#xff09;高度塌陷 &#xff08;2&#xff09;…

无人机之声学识别技术篇

一、声学识别技术的原理 无人机在飞行过程中&#xff0c;其电机工作、旋翼震动以及气流扰动等都会产生一定程度的噪声。这些噪声具有独特的声学特征&#xff0c;如频率范围、时域和频域特性等&#xff0c;可以用于无人机的检测与识别。声学识别技术主要通过以下步骤实现&#x…

浙大数据结构:11-散列2 Hashing

这道题主要是小细节要把握&#xff0c;实际难度不大 机翻 1、条件准备 表大小&#xff0c;输入数据数 #include <iostream> #include<vector> #include<cmath> using namespace std; #define endl \nint Size,n;2、主函数 先输入数据&#xff0c;用ispr…

目前web浏览器播放rtsp视频流,h5播放rtmp监控方案比较,代码测试

在web上实现播放rtsp/rtmp视频流&#xff0c;由于浏览器不 能自定义协议&#xff0c;不能直接播放&#xff0c;市面上充满各种方案&#xff0c;鱼龙混杂&#xff0c;主要方案有两种&#xff1a; 1&#xff0c;浏览器插件方案&#xff0c;vlc浏览器控件&#xff08;已过期&…

远翔原厂芯片设计开发软件:降压恒流共阳极无频闪调光芯片FP7126/7127/7128,舞台灯磁吸轨道灯智能家居应用方案

FP7126 FP7127 FP7128是平均电流模式控制的 LED 驱动 IC&#xff0c;具有稳定输出恒流的能力&#xff0c;优秀的负载调整率与高精度的电流控制。不用额外增加外部补偿元件&#xff0c;简化 PCB 板设计。FP7126 FP7127 FP7128可接受 PWM 数位调光&#xff0c;建议调光频率 0.1kH…