开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):统计分析-生成统计数据接口完善】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11506
统计分析-生成统计数据接口完善
目录:
一、问题
二、解决方法
一、问题
目前我们这个接口有一个问题:统计了3月9号的注册人数。
3月9号人数的查询,在早晨10点和晚上10点的注册人数可能不一样。
比如说可能早晨10点人刚起床,只有两人注册。到晚上10点,人开始活跃,注册人数可能就变成100个人。
按照我们目前的流程,会有一个问题。给大家做个演示,先把数据改一下,把问题演示出来。
假如现在在早晨8点,3月9号有两个注册人数,然后晚上,它的人数增加,或者可能不变。
但是到现在我们增加了三个,那这个时候有问题。把这个程序3月9号的再执行一次。
在执行成功并刷新后,统计表中3月9号又加了一条新的记录。也就是说每次执行程序,都会加一条相应记录,假如第一次是两个人,第二次可能是三个人,之后可能变成十个人,可能变成100个人。那么会出现问题,最终要统计哪条记录,要选取最新的记录。
而有多个相同日期的数据,且数据每个值还不一样,只能再去判断它,去找最新数据再操作。
所以这种存储方式一定是有问题的。如何解决呢?即现在在统计表中,每个日期只能存一条记录。
而且永远是最新的记录,假如现在第一次早晨10点是两人注册,而到晚上10点变成三个,日期不变。值变成三。
让统计表中每个日期的数据只能有一条,没有多条。多条的话,最终无法统计,只能再去判断最新的记录。如果按照我们目前的程序,相同日期会有多条记录。
要让每个日期在统计表中只有一条记录,比如说第一次是十人的人数,增加数据后,在晚上10点变成20个,而日期变成20是我们要改善的效果。
二,解决方法
(1)当我们向表中添加数据时,先做个判断,看表里有没有相同日期的数据。
如果有的话,把数据更新成最新值,如果没有的话直接添加。也就是在添加之前先做判断,看表里边有没有相同日期数据。有的话把数据更新,没有的话做添加。
(2)在向表中添加数据前,先把相同日期数据删掉,删掉之后再添加,如我现在加一个3月9号的日期数据,先把表中相同时期数据删掉,然后再添加,这么做保证每次加的都是最新的,它不需要修改,先删再加,下面就按照该过程进行完善。
代码:
//添加记录之前删除表相同日期的数据
QueryWrapper<StatisticsDaily> wrapper = new QueryWrapper<>();
//创建条件对象,依赖引入。
wrapper.eq(column”data_calculated”,day);
//设置条件,要根据日期删除。
baseMapper.delete(wrapper);
//添加之前先删除表里面相同日期数据。
删完之后再添加值,如果表里有相同日期会删掉,没日期就不用删,是先删再添加的思路。做完之后,把这服务器重新启动,看最终结果。
表的数据先都删掉,一会重新添加,刚才没有加时,日期相同会有多条记录,但现在日期相同,是加最后一条的最新数据。
进入 swagger ,打开之后找到/staservice/sta/registerCount/{day}方法,
传入要查询的信息:2020年3月9号。
然后点 try it out!表中现在的记录,它的注册人数是二,现在把日期2019改成2020年3月9号,目前3月9号有三条记录。
现在把这个日期的方法再进一次 swagger,再执行一次。
刷新后,表中3月9号还是一条记录。但值变成了三。
即最新的数据,它在添加之前把相同日期数据先删掉,然后再添加,这种思路在实际中也经常用。