前言

最近在项目中,需要后端提供扇形图的接口,因为业务比较复杂,有的数据不只是在一张表,需要我们自己组装后返给前端,其实扇形图的接口就是一个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后端扇形图实现相关推荐

  1. java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题

    文章目录 先看成品 前言 一.项目目录结构 一.海报制作PosterUtil.java工具类 1. 描述 2. 代码 二.测试生成海报 1. 描述 2. 直接上代码 四.其他测试 1. Test1_C ...

  2. 我的Java后端书架 (2016年暖冬4.0版)

    书架主要针对Java后端开发. 3.0版把一些后来买的.看的书添补进来,又或删掉或降级一些后来没有再翻开过的书. 更偏爱那些能用简短流畅的话,把少壮不努力的程序员所需的基础补回来的薄书,而有些教课书可 ...

  3. java 后端 验证码逻辑_Java后端产生验证码后台验证功能的实现代码

    直接跳severlet在java后台生成验证码: @RequestMapping(value="yzm.action") public void Yzm(HttpSession s ...

  4. 我的Java后端书架

    这位大侠,这是我的公众号:程序员江湖.  分享程序员面试与技术的那些事. 干货满满,关注就送.  我的Java后端书架 (2016年暖冬4.0版) 原文出处: 江南白衣 书架主要针对Java后端开 ...

  5. Android工程师转型Java后端开发之路,自己选的路,跪着也要走下去!

    本文是公众号读者jianfeng投稿的面试经验 恭喜该同学成功转型 目录: 毅然转型,没头苍蝇 制定目标,系统学习 面试经历 毅然转岗,没头苍蝇 首先,介绍一下我的背景.本人坐标广州,2016年毕业于 ...

  6. Java后端 + 百度SDK实现人脸识别

    Java后端 + 百度SDK实现人脸识别 人工智能越来越贴近我们的生活,相信大家也经常接触到人脸识别,手机付款.app注册验证.门禁等等. 如果要用Java后台使用这些功能,那么需要怎么做呢?请看完下 ...

  7. JAVA后端常用框架SSM,redis,dubbo等

    JAVA后端常用框架SSM,redis,dubbo等 一.SpringMVC http://blog.csdn.net/evankaka/article/details/45501811 spring ...

  8. vue+Java后端进行调试时如何解决跨域问题

    今天在开发过程中遇到一个问题,拿到了一套vue代码,计划对这套代码的部分样式进行调整,Java后端代码已经写好并且部署到了线上.这时命令行运行vue项目时访问会受限,取不下数据来,遇到了跨域访问失败的 ...

  9. vue 解决跨域 调试_vue+Java后端进行调试时解决跨域问题的方式

    今天在开发过程中遇到一个问题,拿到了一套vue代码,计划对这套代码的部分样式进行调整,Java后端代码已经写好并且部署到了线上.这时命令行运行vue项目时访问会受限,取不下数据来,遇到了跨域访问失败的 ...

最新文章

  1. 网页设计制作必须知道的10个秘诀
  2. ubuntu安装搜狗输入法-全面版
  3. CMarkup类在VC中的使用
  4. 两天学会css基础(一)
  5. 在Linux下锁住键盘和鼠标而不锁屏
  6. 助AI研究社群发出内建18种预先训练模型工具
  7. 东莞计算机应用能力报名,2017广东职称计算机考试报名:东莞职称计算机报名入口...
  8. 局域网共享工具_win10一键共享工具免费版(快速解决局域网文件共享问题)官方版...
  9. Linux:下载和安装
  10. Android Studio 下载ndk
  11. 定时 监控 shell 服务宕机自动重启,并发送短信通知
  12. Hyper-V安装lede软路由历程及注意事项
  13. 神经网络发展的三个阶段,人工神经网络的发展
  14. 【VBox】解决复制VBox虚拟机后提示硬盘UUID 已经存在的问题
  15. qq显示下线通知什么意思_qq最近登录设备显示其他设备,但我手机没有下线通知,怎么回事...
  16. 九爷带你了解 zabbix 报警机制
  17. 手写一个java爬虫,获取网页信息。
  18. 【JavaScript】懒加载
  19. Linux shell 的ss
  20. 【力扣】数据结构入门【7天32题数据结构入门】

热门文章

  1. 多重条件结构(知识就是力量!)
  2. 1001 害死人不偿命的(3n+1)猜想
  3. Type mismatch affecting row number 0 and column type 'BIGINT': Value [7] is of type [Integer] and c
  4. Android 笔记 ImageView 显示大图遇到的问题 以及 无损显示大图 的解决方案
  5. 如何设置STM32 IO端口输入输出
  6. [JZOJ6093]【GDOI2019模拟2019.3.30】星辰大海【计算几何】【半平面交】
  7. 笔记本电脑属于个人计算机吗,黄真真:笔记本电脑属于个人计算机的一种形式莫?...
  8. 洛谷P2455 [SDOI2006]线性方程组
  9. 曲速未来 揭秘:以太坊区块链和ERC20代币的技术挑战
  10. Flutter淘宝App之首页聚划算倒计时的实现