趋势图表

需求:

  达系统添加趋势统计图,要求所有马达在一定时间锻内的数据进行分析,以趋势图的形式展现再页面。

难点:

//如果本次有个别马达的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);
                }
            }
        }

 



posted @ 2020-05-13 11:36  迸发图强  阅读(462)  评论(0编辑  收藏  举报