java后端扇形图实现
前言
最近在项目中,需要后端提供扇形图的接口,因为业务比较复杂,有的数据不只是在一张表,需要我们自己组装后返给前端,其实扇形图的接口就是一个map集合的数据。
接口返回数据
接口返回参数Map<String,Object>,而Object里面包含了list+Integer,而list里面由多个map组成的。
{"success": true,"code": 200,"msg": "操作成功","data": {"list": [{"pointType": 2,"idList": [],"sumPoint": 0},{"pointType": 1,"idList": [],"sumPoint": 0},{"idList": false,"pointType": 0,"sumPoint": 5}],"points": 95}
}
具体业务实现
/*** 扇形图** @param companyId 公司id* @param year 年度* @param index* @return*/public Map<String,Object> getPieChart(Integer companyId, Integer year, Integer index) {List<Object> resultList = new ArrayList<>();Map<String, Object> result = new HashMap<>();Map<String, Object> diyMap = new HashMap<>();Map<String, Object> autoMap = new HashMap<>();Map<String, Object> totalMap = new HashMap<>();List<Integer> idList = new ArrayList<>();//存放重大事件id集合List<Integer> pointList = new ArrayList<>();//存放重大事件id集合List<Integer> idList1 = new ArrayList<>();List<Integer> pointList1 = new ArrayList<>();Integer firmId = PrincipalAware.getRelatedId();// 获取周期下标Integer period = periodSettingService.getDataOfPeriod(year, firmId);boolean isNowYear = DateExtendUtil.isNowYear(year);//若周期标志未传,则根据当前period取值if (index == null) {index = period > 0 ? 1 : -1;}//手动扣分项PeriodPoints periodPoints = periodPointsRepository.findByFirmIdAndCompanyIdAndYearAndPeriodIndex(firmId, companyId, year, index);List<DiyPoints> diyPoints = diyPointsRepository.findByFirmIdAndCompanyIdAndYearAndPeriodIndex(firmId, companyId, year, index);if (periodPoints == null) {if (isNowYear) {throw new ResException("当前周期统计结果未完成,请确认!");}return result;}for (DiyPoints diyPoint : diyPoints) {idList.add(diyPoint.getId());pointList.add(diyPoint.getMinusPoints());}String sumPoint = ArrayUtil.getSumData(pointList);diyMap.put("pointType", PointType.MAJOR.getValue());// 扣分项名称diyMap.put("sumPoint", sumPoint == null ? 0 : sumPoint);// 扣除的总分diyMap.put("idList", idList);// 重大扣分事项idresultList.add(diyMap);//站点扣分项List<AutoPortPoints> autoPortPoints = autoPortPointsRepository.findByFirmIdAndCompanyIdAndYearAndPeriodIndex(firmId, companyId, year, index);for (AutoPortPoints autoPortPoint : autoPortPoints) {idList1.add(autoPortPoint.getId());pointList1.add(autoPortPoint.getMinusPoints());}String sumPoint1 = ArrayUtil.getSumData(pointList1);autoMap.put("pointType", PointType.AUTOMATIC.getValue());// 扣分项名称assert sumPoint1 != null;// 自动扣分取平均分autoMap.put("sumPoint", autoPortPoints.size() == 0 ? 0 : (Integer.valueOf(sumPoint1) / autoPortPoints.size()));autoMap.put("idList", idList1);// 自动resultList.add(autoMap);//是否扣分List<AutoPoints> autoPoints = autoPointsRepository.findByFirmIdAndCompanyIdAndYearAndPeriodIndex(firmId, companyId, year, index);autoPoints.stream().filter(x -> PointsType.OPERATION.getValue().equals(x.getPointsType()) && x.getMinusPoints() > 0).map(AutoPoints::getMinusPoints).findFirst().ifPresent(minusPoints -> totalMap.put("sumPoint", minusPoints));result.put("points", periodPoints.getPoints());totalMap.put("idList", periodPoints.getIsOperation());totalMap.put("pointType", PointType.OPERATIONS.getValue());resultList.add(totalMap);result.put("list",resultList);return result;}
java后端扇形图实现相关推荐
- java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
文章目录 先看成品 前言 一.项目目录结构 一.海报制作PosterUtil.java工具类 1. 描述 2. 代码 二.测试生成海报 1. 描述 2. 直接上代码 四.其他测试 1. Test1_C ...
- 我的Java后端书架 (2016年暖冬4.0版)
书架主要针对Java后端开发. 3.0版把一些后来买的.看的书添补进来,又或删掉或降级一些后来没有再翻开过的书. 更偏爱那些能用简短流畅的话,把少壮不努力的程序员所需的基础补回来的薄书,而有些教课书可 ...
- java 后端 验证码逻辑_Java后端产生验证码后台验证功能的实现代码
直接跳severlet在java后台生成验证码: @RequestMapping(value="yzm.action") public void Yzm(HttpSession s ...
- 我的Java后端书架
这位大侠,这是我的公众号:程序员江湖. 分享程序员面试与技术的那些事. 干货满满,关注就送. 我的Java后端书架 (2016年暖冬4.0版) 原文出处: 江南白衣 书架主要针对Java后端开 ...
- Android工程师转型Java后端开发之路,自己选的路,跪着也要走下去!
本文是公众号读者jianfeng投稿的面试经验 恭喜该同学成功转型 目录: 毅然转型,没头苍蝇 制定目标,系统学习 面试经历 毅然转岗,没头苍蝇 首先,介绍一下我的背景.本人坐标广州,2016年毕业于 ...
- Java后端 + 百度SDK实现人脸识别
Java后端 + 百度SDK实现人脸识别 人工智能越来越贴近我们的生活,相信大家也经常接触到人脸识别,手机付款.app注册验证.门禁等等. 如果要用Java后台使用这些功能,那么需要怎么做呢?请看完下 ...
- JAVA后端常用框架SSM,redis,dubbo等
JAVA后端常用框架SSM,redis,dubbo等 一.SpringMVC http://blog.csdn.net/evankaka/article/details/45501811 spring ...
- vue+Java后端进行调试时如何解决跨域问题
今天在开发过程中遇到一个问题,拿到了一套vue代码,计划对这套代码的部分样式进行调整,Java后端代码已经写好并且部署到了线上.这时命令行运行vue项目时访问会受限,取不下数据来,遇到了跨域访问失败的 ...
- vue 解决跨域 调试_vue+Java后端进行调试时解决跨域问题的方式
今天在开发过程中遇到一个问题,拿到了一套vue代码,计划对这套代码的部分样式进行调整,Java后端代码已经写好并且部署到了线上.这时命令行运行vue项目时访问会受限,取不下数据来,遇到了跨域访问失败的 ...
最新文章
- 网页设计制作必须知道的10个秘诀
- ubuntu安装搜狗输入法-全面版
- CMarkup类在VC中的使用
- 两天学会css基础(一)
- 在Linux下锁住键盘和鼠标而不锁屏
- 助AI研究社群发出内建18种预先训练模型工具
- 东莞计算机应用能力报名,2017广东职称计算机考试报名:东莞职称计算机报名入口...
- 局域网共享工具_win10一键共享工具免费版(快速解决局域网文件共享问题)官方版...
- Linux:下载和安装
- Android Studio 下载ndk
- 定时 监控 shell 服务宕机自动重启,并发送短信通知
- Hyper-V安装lede软路由历程及注意事项
- 神经网络发展的三个阶段,人工神经网络的发展
- 【VBox】解决复制VBox虚拟机后提示硬盘UUID 已经存在的问题
- qq显示下线通知什么意思_qq最近登录设备显示其他设备,但我手机没有下线通知,怎么回事...
- 九爷带你了解 zabbix 报警机制
- 手写一个java爬虫,获取网页信息。
- 【JavaScript】懒加载
- Linux shell 的ss
- 【力扣】数据结构入门【7天32题数据结构入门】
热门文章
- 多重条件结构(知识就是力量!)
- 1001 害死人不偿命的(3n+1)猜想
- Type mismatch affecting row number 0 and column type 'BIGINT': Value [7] is of type [Integer] and c
- Android 笔记 ImageView 显示大图遇到的问题 以及 无损显示大图 的解决方案
- 如何设置STM32 IO端口输入输出
- [JZOJ6093]【GDOI2019模拟2019.3.30】星辰大海【计算几何】【半平面交】
- 笔记本电脑属于个人计算机吗,黄真真:笔记本电脑属于个人计算机的一种形式莫?...
- 洛谷P2455 [SDOI2006]线性方程组
- 曲速未来 揭秘:以太坊区块链和ERC20代币的技术挑战
- Flutter淘宝App之首页聚划算倒计时的实现