套餐预约占比饼形图
需求分析#
会员可以通过移动端自助进行体检预约,在预约时需要选择预约的体检套餐。本章节我们需要通过饼形图直观的展示出会员预约的各个套餐占比情况。展示效果如下图:
完善页面#
套餐预约占比饼形图对应的页面为/pages/report_setmeal.html。
导入ECharts库#
<script src="../plugins/echarts/echarts.js"></script>
参照官方实例导入饼形图#
<div class="box">
<!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
<div id="chart1" style="height:600px;"></div>
</div>

<script type="text/javascript"> // 基于准备好的dom,初始化echarts实例 var myChart1 = echarts.init(document.getElementById('chart1')); //发送ajax请求获取动态数据 axios.get("/report/getSetmealReport.do").then((res)=>{ myChart1.setOption({ title : { text: '套餐预约占比', subtext: '', x:'center' }, tooltip : {//提示框组件 trigger: 'item',//触发类型,在饼形图中为item formatter: "{a} <br/>{b} : {c} ({d}%)"//提示内容格式 }, legend: { orient: 'vertical', left: 'left', data: res.data.data.setmealNames }, series : [ { name: '套餐预约占比', type: 'pie', radius : '55%', center: ['50%', '60%'], data:res.data.data.setmealCount, itemStyle: { emphasis: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ] }); }); </script>
根据饼形图对数据格式的要求,我们发送ajax请求,服务端需要返回如下格式的数据:
{ "data":{ "setmealNames":["套餐1","套餐2","套餐3"], "setmealCount":[ {"name":"套餐1","value":10}, {"name":"套餐2","value":30}, {"name":"套餐3","value":25} ] }, "flag":true, "message":"获取套餐统计数据成功" }
后台代码#
Controller#
在health_backend工程的ReportController中提供getSetmealReport方法
@Reference private SetmealService setmealService; /** * 套餐占比统计 * @return */ @RequestMapping("/getSetmealReport") public Result getSetmealReport(){ List<Map<String, Object>> list = setmealService.findSetmealCount(); Map<String,Object> map = new HashMap<>(); map.put("setmealCount",list); List<String> setmealNames = new ArrayList<>(); for(Map<String,Object> m : list){ String name = (String) m.get("name"); setmealNames.add(name); } map.put("setmealNames",setmealNames); return new Result(true, MessageConstant.GET_SETMEAL_COUNT_REPORT_SUCCESS,map); }
服务接口#
在SetmealService服务接口中扩展方法findSetmealCount
public List<Map<String,Object>> findSetmealCount();
服务实现类#
在SetmealServiceImpl服务实现类中实现findSetmealCount方法
public List<Map<String, Object>> findSetmealCount() { return setmealDao.findSetmealCount(); }
Dao接口#
在SetmealDao接口中扩展方法findSetmealCount
public List<Map<String,Object>> findSetmealCount();
Mapper映射文件#
在SetmealDao.xml映射文件中提供SQL语句
<select id="findSetmealCount" resultType="map"> select s.name,count(o.id) as value from t_order o ,t_setmeal s where o.setmeal_id = s.id group by s.name </select>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2019-07-15 迭代器、生成器、send方法、send与return的异同点、生成器表达式、常用的内置方法