趋势图表
需求:
达系统添加趋势统计图,要求所有马达在一定时间锻内的数据进行分析,以趋势图的形式展现再页面。
难点:
//如果本次有个别马达的PLC状态为关,则无法进行统计
//处理方法1:
//get到所有没有统计到的马达,给予新增,类型为0 -表示为自定义
//实现1.获取所有正在使用的马达
解决方案:
//创建一个map 将获取的图表信息(可能有缺失[部分马达plc可能未开启]) 放入其中
//再获取到所有马达,循环图表信息 ,将所有图表对象中马达外键Id作为map集合的Key。
//在循环遍历马达
//判断map中是否已经纯在相同得key
//如果纯在continue,如果不纯在则新增 - -(添加记录为保证图表有好展现)
添加数据
List<MoMotors> motor = moMotorsMapper.getAeraMotors(); Map<Integer, MoTrendChartVO> map = new HashMap<>(); for (MoTrendChartVO vo : trend) { map.put(vo.getMoId(), vo); } for (MoMotors mt : motor) { if (map.get(mt.getMoId()) == null) { //该数据是为了防止图表挑格插入的无效数据 MoTrendChartVO vo = new MoTrendChartVO(); vo.setAvgOrigData(null); vo.setMoName(mt.getMoName()); vo.setTroughId(mt.getTroughId()); vo.setMoId(mt.getMoId()); vo.setChartType(type); vo.setIncreaseLv(BigDecimal.ZERO); trend.add(vo); } } chartMapper.insertTrendChart(trend, timeInterval);
查询数据:
难点:时趋势图 x轴 为 0点~~23点,也就是说 0点对应N条数据、23点对应N条数据(简单来说就是要以时间分组,将所有数据分配到对应时间上)
解决方案:获取到指定时间段内的图表数据,声明一个map,循环遍历图表数据,获取到时间用来作为map的key(分组)
创建双重for循环 首先遍历map集合 然后遍历图表数据集合
判断map的key是否与图表数据中的日期相同
如果哦相同则保存到新建的List集合当中
最后将新建的List集合添加到map集合中
List<MoTrendChart> charts = chartMapper.getTrendChart(parameter); Map<String, List<MoTrendChart>> groups = new HashMap<String, List<MoTrendChart>>(); for (MoTrendChart pd : charts) { groups.put(pd.getAddTime(), null);//这里并没有将该组的数据存入,看自己的需求吧 } for (String rawTypeId : groups.keySet()) { List<MoTrendChart> c = new ArrayList(); for (MoTrendChart pd : charts) { if (rawTypeId.equals(pd.getAddTime())) { //处理该组的数据 c.add(pd); groups.put(pd.getAddTime(), c); } } }