00:00
好,那我们继续来编写数据统计模块的一些服务,对吧?我们现在我们已经写了第一个就是呃,获取总交易额对吧?那么第二个的话呢,就是诶,我们就要编写的是什么呢?编写的是获取不同省份的交易额呃的这样的一个代码,对吧?当然在这的话呢,还是一个public sta这样的一个静态方法对吧?呃,它的返回值呢,是一个generous这样的一个列表。对吧,所以说好,我们接下来我们继续定义这个方法,那就是get province statistics OK,当然它接收参数呢,也是state,好。啊,那么在这儿的话呢。我们还是写一个TRY,然后呢来捕获一下CQ的异常,以及类找不到的这样的一个异常,然后呢把错误站给他打出来,然后呢,我们最后呢,为了防御,我们给他返回一个list对吧?空列表。
01:10
呃,然后接下来的话呢,我们就可以在TRY里边呢,来写一些CQ这样的呃语句对吧?或者说JDBC代码呢,来把数据给它,呃,取出来clickhouse driver好,然后接下来的话呢,Connection等于driver manager.get connection对吧?呃,当然我们获取的连接呢,还是click house的这样的一个连接,呃,当然你不要忘记把这个连接给它关闭掉对吧?也就是我们获取一个连接,要关闭连接,它是配对操作,那么它呃必须一一对应,要不然呢,这样的话呢,嗯。连接对吧,你开了,然后没有关闭,这个实际上就相当于是一种资源泄露的这样的一种操作,好那接下来的话呢,我们来构建查询语句statement,然后connection.prepare statement,好那这样的话就是select,我们第一个要查询的字段呢,是我们省的名字,第二个的话呢,就是交易额,对吧?那当然这个就是order amount,然后呢,我们给他。
02:24
起一个别名叫做order amount,对吧?好,然后呢,我们是从哪张表来进行查询的呢?是从province statistics,当然这张表的话呢,我们在文档里面写了如何?呃,在clickhouse的这张表里面插入一些测试数据,对吧?然后呢,我们where。Two why why why why。MMBD对吧?呃转成年月日,把这个开始时间,然后呢,等于一个问号这样的一个呃占位符,然后group by,呃由于我们这里面有一个sum这样的一个聚合操作,所以说我们呃就可以把它呃分下组,对吧?我们使用什么进行分组呢?当然就是使用呃省的ID对吧,Province ID以及province name来进行分组,好,那这样的话呢,我们就把数据呢给它取了出来,呃当然就是说取出数据来以后呢,呃我们是需要。
03:30
呃,把这个占位符给它写一下对吧?呃,然后呢,哇,Result set等于select statement exte query,然后呢,等于什么呢?等于你有一个list对吧?用来存放我们要返回的结果,那么它是一个general statistic这样的一个呃类型的列表,好,然后呢?我们判断当迭代器不为空的时候呢,我们就不停的去迭代它,对吧?然后获取数据,然后y province sta stat等于new一个general statistic,对吧?然后我们把每个字段都给它附上值,Province stat.set name。
04:21
也就是说我们都知道这个generous的呢,它有两个字段,一个是name,一个是value,那么name我们这里边是什么呢?我们这里边当然取的就是一个province name这样的一个字段,对吧?我们把这个省的名字给它取出来,然后呢,这个就是它name,然后第二个的话呢,就是我们的值是什么呢?那么值的话呢,我们在这里边我们要取出来的就是order_amount对吧?当然你可以看到这里面类型不匹配,所以说我们还需要把这个取出来的数据呢,给它转成字符串好OK。呃,接下来的话呢,我们就把这个省的名字和这个省的呃交易额度对吧,所组成的general statistic这样的一个呃实例给它添加到列表里面去province statistics,好。
05:16
那么添加完以后呢,OK,我们这里边不要忘记把查询语句给它关闭掉,然后呢,我们return这个result,直接把结果返回就可以了啊,那这样的话,我们就编写完了获取不同省份的交易额的这样的一个代码,对吧?好,那接下来的话呢,我们再来编写一个什么呢?获取关键词统计的对吧?获取关键词统计的这样的一个服务对吧?呃,当然就是说那这个服务的话,那实际上也是一个。静态方法,然后它返回值呢,还是一个。Sta的列表,好,Get keywords。
06:05
Keyword statistics。那么它接收的参数呢,还是date好,然后接下来的话呢。我们回车。然后呢,我们还是TRY,不要忘记catchq exception和class not found exception这样的一个异常,把它打出来,然后呢,为了防御的话呢,我们创建一个空列表对吧,然后返回在最后,然后接下来的话呢,我们还是class.for name啊这个实际上都是样板代码对吧?那么来来回回写它都是基本上差不多OK,然后呢,我们在创建一个连接。呃,那么这个连接的话呢,那就是driver manager.get connection对吧,然后呢,data.click click house URL,好不要忘记把它关闭掉。
07:06
啊,当然在这的话呢,我们就开始开始构建这个查询语句了,Select statement等于connect.prepare statement对吧?我们构建呃以下查询语句,那么我们这个查询语句是什么呢?我们这个查询语句就是select,首先把关键词给它取出来,对吧?当然接下来的话呢,可能这个C会稍微有点复杂,但是。其实我们不用管它,主要就是呃,你哪个关键词访问的多对吧,它就是热词对不对,因为我们这里边,我们实际上是要获得一个热词对吧,所以我们在这的话呢,我们首先把关键词给它取出来,然后取出关键词来以后呢,然后我们这是一个sum。对吧,也就是说它是一个累加的这样一个操作,那么它或者说这个累加操作呢,它是累加的是什么呢?Keyword_statistics对吧,这个是我们表的名字,然后点keyword_count,也就是说这个单这个词对吧,这个关键词它被访问的次数对吧?当然这个被访问的次数呢,在数据库里面,因为它量比较少,所以说我们为了可视化,嗯,比较明显一点呢,我们就再给它乘上一些东西,对吧?呃,那我们在这乘什么呢?我们在这里边我们继续乘一个multi if对吧。
08:26
Mount if什么呢?如果它S等于。Search对吧,也就这个关键词,它是搜索过来的一个关键词的话呢,呃,我们就乘以十对吧,它权重呃会更高一点,如果它的S等于。Order。也就是说它是一个。下单这样的一个操作的话,那么它的关键词的比重就小一些,比方我们给他比重给他一个三对吧,如果他是一个加购物车的操作呢?S等于cutt对吧?那我们的权重再给他低一点,那就是二,呃,那如果它的笔它是一个点击事件呢?呃,那么。
09:11
我们的比重呢,就给它为一,然后默认值呢是一个零,对吧,默认值是一个零啊,从这儿的话呢,你就可以看得出来,实际上我们就是搜索的呃这个关键词,它的比重是最高的,对吧?它的比重是最高的,然后呢,我们在这的话呢,我们就给它乘起来以后呢,然后再给它命名一个别名叫做呃,CT吧,给他命一个别名叫CT,然后我们从哪张表进行查询呢?当然我们是从keyword statistics这张表里边来进行查询,然后呢,Y对吧,又是我们的TO4个Y,两个M,两个D。然后呢,Start time等于一个占位符对吧?然后呢,Group by keyword,也就是我们按照呃,关键词呢来进行分组,然后呢,按照什么来进行排序呢?呃,我们这里边我们就按照keyword_statistics,这张表里边的keyword count,也就是说关键词的这个数量呢来进行一个降序排列,DSC,好,这样的话呢,我们的CQ就已经写完了,C select statement set string对吧?把标识符给它填上,然后呢,Va result set,呃,上面这个不应该是标识符啊,就是把站位符呢给它添上,然后呢,Select statement.execute query,然后呢,Va result,这个是用来存放结果的列表,那就是啊,Release的对吧?那么里边的这个。
10:49
案型呢是general statistics,好,General statistic,然后呢,我们使用一个while循环,把这个result set里面的数据呢,给它取出来,对吧,一行一行的取出来。
11:01
啊,那么我们取的时候呢,我们就是定义一个keyword statistics等于new一个general statistic对吧?那keyword statistic there set name,我们的name是什么呢?我们的name当然就是呃关键词了,也就是keyword对吧?然后呢,我们keywordd statistics.set value result set点。Get big daim对吧?我们把CT这个字段给它取出来对吧?也就是它的这个,呃,关键词的浏览数量呢,乘以权重对不对?然后不要忘记来一个to string,然后呢,把这个实例呢给它添加列表里边,好,我们返回这个result就可以了,呃,当然在上面的话呢,你也不要忘记把这个select statement给它关掉,对吧,给它关闭掉。
12:03
好啊,那这样的话呢,我们的关键词的统计呢,就也已经写完了,对吧?呃,关键词统计呢,就也已经写完了,呃,那么实际上呢,我们还有四个服务需要写对吧?因为我们除了大盘数据以外呢,我们还有有关流量的统计,那我们接着啊,把这个大盘的数据呢也给他写完对吧?也给他写完,那接下来的话呢,就是我们继续写,我们要写什么样的一个服务呢?那就是获取。每个品类的商品统计数据的这样的一个呃,服务对吧?那么这个服务呢,它当然也是一个静态方法,它的返回值还是一个general statistic这样的一个类,呃,或者说对象所组成的列表,对吧?然后呢,Get product statistics group by。
13:01
CATEGORY3对吧,这个字段,然后呢,String,然后date。当然的话呢,我们这里边我们还是一个串对吧,你就可以把上面,因为它也是从click house取过来的,所以说你们在这里面的话,就可以直接把它复制过来了,好。OK,那复制过来以后呢,你当然就是,呃,不要忘记括号,然后catchq exception class not found exception e,对吧,1.print,然后呢,防御式的在这里边我们返回一个空列表。好,那接下来的话呢,我们就来构建查询语句对吧?按照品类去进行分组,然后统计它的交易额度对吧?统计这个商品的交易额度,那么就是万select statement等于connect.prepare statement,好,那么这个CQ的话,那就是select,首先我们取出实际上这个是一个三级品类对吧?三级分类呃,把这个品类的ID呢给它取出来,然后呢,除了品类的ID呢,还有一个品类的名称,然后呢,还有就是我们这个交易额的这样的一个总和,对吧?As。
14:26
然后呢,Order amount。对吧?然后呢,从哪张表呢?当然我们是从商品统计信息the takes takes对吧,这张表里面取出来的,那么这张表呢,也是在click house的default数据库里边,然后呢,我们的这个where对吧?又来了一个to,四个Y,两个M,两个D,对不对,然后呢。Start time。然后等于一个问号,然后group by对吧?CATEGORY3下划线ID category3下划线内使用品类的ID和品类的名称呢来进行分组,然后在这里边的话呢,我们having对吧?我们给他一个条件,呃,什么条件呢?那就是order amount必须大于零,也就是交易额度大于零的,我们才会把它取出来,然后呢,我们的排序呢,是根据交易额来进行降序排列的,好,这样的话呢,我们的CQL查询语句也已经写完了,对吧?这些CQL其实都相对来说比较简单,把战内符填上。
15:43
然后呢,当然我们这里面我们还是一个result set等于select statement.execute query对吧,Y result等于new a release general statphistics,好,然后那么还使用一个well循环,然后把它的每一条数据对吧,都给取出来,然后category statistics等于什么呢?你有一个general statistic对吧?然后呢,Category statistics set。
16:22
那这个就是result set get string。对吧,它的名字是什么?当然名称就是我们的katy gr3name,也就是品类ID的名称,对吧?当然你这些字符呢,你肯定不能输错,对吧,你输错的话,那么它的在执行的时候呢,就会报错好,Set value result set.get string。然后在这的话就是all the amount,呃,在这的话呢,其实不应该是get string啊,它应该是get一个big decimal。啊,对吧,就是一个大整数to string,好,然后呢,我们接下来result.add。
17:04
Category statistics,好,那这样就OK了,然后你返回一个result就行了,当然不要忘记把这些语句关闭掉,把连接给它关闭掉,好,那这样的话呢,我们获取每一个商品的,呃。这个或或者说每一个品类里边的交易额度的这个API呢,就已经写完了,呃,那接下来的话呢,我们再来写一个什么样的一个方法呢,那就是。按照品牌分类,然后统计交易额,对吧?我们上面这个实际上是按照品类,呃,针对商品进行分类来统计这个交易额,对吧?呃,那么下面的话呢,我们就是按照品牌进行分类,然后统计交易额,所以说他们的CQ呢,基本上写的是差不多的对吧?基本上写的是差不多的,呃,你甚至呢,你就可以直接把上面这个方法呢,给它复制过来,对不对,复制过来我们改一下CQ就可以了。
18:11
好,我们直接把它复制过来,当然你复制的时候呢,你就要呃修改一下什么呢,对吧,首先你要修改一下这个函数名,因为这个函数名的话呢,上面已经有了,那这是get product。Statistics,对吧,By trade mark好,哎,这个函数名呢,我们已经改了方案名改了,然后接下来的话呢,我们要改一下CQ啊,那在这的话呢,我们是按照品牌的名字来进行分组的,对吧?所以说在这我们要取出TM下来name,这个是品牌名。对吧,那么这个品类名呢,我们不需要了,我们直接给它删除掉好。然后后面这个交易额度我们不需要改,然后表也不需要改,下面这个star time这个也不需要改,然后group by呢,这个我们是要按照t m midd和t m name来进行分组的,OK,那接下来的话呢,还是having order amount大于零,然后order by order amount DC对吧?那这个CQ就不需要进行更改了,呃,那接下来的话呢,那这个名字这里边我们要改成TM下划线内对吧?那这样的话呢,呃,其实就OK了,呃,当然就是说。
19:32
你改的话呢,可能为了代码的这个。可读性的话呢,可能我这个变量名对吧,那这需要改一下,比方说这改成一个trade mark statistics对吧。然后呢,我在这儿CTRLSCTRLC一下,然后把它复制替换一下,替换一下替换一下OK了,好,当然你也可以使用idea的重构功能,对吧,直接把它替换掉。
20:00
那么这个是按照品类品牌分类呢,统计交易额,那么接下来的话呢,我们要写的是什么呢?我们要写的就是流量统计了,对吧?流量统计模块需要的服务,从买CQ中读取数据对不对?哎,我们上面的话呢,实际上都是大盘所用到的数据,也就是说都是从呃c house来来取的数据,对吧?而我们这儿的话呢。呃。我们就要为。流量统计,呃,需要的服务来写一些代码了,对吧,这个流量统计其实就是这。对吧,所以你可以到这样的上面的。呃,就是说各渠道流量统计的话呢,其实C课也比较简单,但这儿的话呢,涉及到一个分页这样的一个呃操作对吧?所以我们就来写一下呃,如何去进行分页,呃,当然你要用MYMYBAT或者说my BAT plus,对吧,或者说使用spring的GPA这样子的orm框架的话呢,它其实有,它实际上是有分页这样的功能的,对吧?当然在这的话呢,我们就自己来实现一个public static,我们返回的是分页数据对吧?分页数据里边的,呃,这个泛型呢是traffic statistic,对吧,也就是流量统计的这样一个并类,然后get traffic。
21:23
对不对,Statistics。然后在这里边的话呢,是inte配置,也就是说我们是第几页对吧?请求的是第几页的数据,呃,第二个的话呢,就是inte limit,就每一页有多少条数据,第三个的话呢,是DT对吧,日期,那么第四个的话呢,就是recent date对吧,也就是说最近多少天的这样的一个数据对吧?好啊,那接下来的话呢,我们就来开始写这个CQ。不要忘记cash CQ的异常,以及类没有找到的这样的异常,对吧,把它打印出来,呃,当然我们在最后的话呢。
22:07
我们防御式的对吧,给它返回一个数据对不对,那么在这的话就是RETURN1NEW一个配置对吧?给它返回就可以了,然后接下来的话呢,我们就可以开始写这个呃,CQ了,当然你写CQ的话,你首先你要确定一下这个驱动类对吧?我们的驱动类的话呢,是MYCQL对不对,这里面我们要用的是MYCQL,因为我们要从MYCQL里边去查找数据,然后呢呢,Connection等于。Driver manager的get connection,然后在这的话呢,我们第一个要输入的是MYCQ的URL,第二个要输入的是买CQ的用户名,第三个要输入的是买CQ的密码,对吧?好,我们现在有了这样的一个连接,有了连接以后呢,我们就可以开始写这个CQL了,然后呢,Va select statement等于什么呢?connection.prepare呃,Statement,然后我们的这个CQL呢,非常简单,Select芯,对吧?把所有的数据都取出来,From as。
23:19
Traffic states。By channel对吧,我们是从这张表里边给它取出来的数据,对不对,这张表里面我们取出来的数据,然后在这的话呢,就是YDT等于问号对吧。当然,你除了呃,DT以外呢,还有and recent days。等于问号,这张表呢,在我的文档里面已经写清楚了它的表结构,以及我们要插入的测试数据,对吧?大家可以去看一下,呃,其实由于大家有了这个大数据,写了很多CQ以后呢,这个其实应该是不在话下的,对吧?应该是不在话下的好,然后limit占位符。
24:10
Offset,对吧,占位符,那么limit的话呢,就是你一页有多少条数据,Offset呢?呃,它实际上就是偏移量,用来做分页的对吧?用来做分页的好,然后接下来的话,接下来的话呢,我们来填充占位符,那么填充的第一个的话呢,那就是呃,当然是DT了,对吧?那么我们填充的第二个占位符是什么呢?呃,是最近多少天的,那就是recent recent date对吧?那么第三个的话呢,我们要填充的占位符是什么呢?我们要填充占位符就是每一页有多少条数据对吧?第四个的话呢,我们要填充的占位符就是分页,你在这里面你要注意我们这儿要配置减一,因为这个opposite set的话,它是个偏移量,也就是你第一页的话,它其实这个偏移量呢,应该是零,对吧?第二页的话,它偏移量,呃,应该才是,呃就是说。
25:08
后面的对吧,呃,应该才是一对不对,这个偏移量应该才是一好。OK,那接下来的话呢,我们现在已经。呃,写好了这个配置,然后呢,我们就开始构造查询集合,那么它等于select statement.execute query,对吧?那么这个result等于什么呢?对吧,或者说我们这个我们在new一个a list里边包装的数据,或者说返回的数据呢,是traffic statistics,然后点Y对吧,诶,这个就是我们要呃返回的数据类型,当然你在这里边的话,你可以给他一个Y对吧,呃,这样就省去了我们自己手写呃这个。
26:02
类型的,呃,一个就是说工作量对吧,好,然后接下来的话呢,我们是int total等于零对吧,那么这个total等于零,这个total是什么意思呢。一共有多少页对吧,实际上这个total就是我们在这的话呢,你看啊traffic呃,我们看到这个配置里面的话,这个total啊,它不应该数据总量应该是总页数对吧,应该是总页数好。啊,我们在这儿int了一个total等于零,然后while循环,然后呢,Result set.next对吧,如果它有数据的话呢,我们就把它一行一行取出来,然后呢。你有一个traffic sta,然后腕好,然后在这的话呢,把它改成一个腕。呃,由我们的Java呢,去推断这个局部变量的类型,然后呢,Traffic stat.set dt。
27:02
当然首先DT的话呢,我们就直接把它set过来就可以了。然后呢,Traffic statistic set channel对吧?那这个是我们从数据库里面查出来的,那么它的列名呢,叫做channel,那么还有就是traffic,呃,Stat,对吧。点set什么呢?我们set一个avg,呃,Duration set吧,那这个也是从数据库里面查出来的,因为我们是select芯嘛,Int,然后呢,它是一个avg duration set好,然后呢,traffic.set avg配置count,对吧,Result set.get。好,那么这个是avg。
28:00
配置count,好,然后呢,还有traffic.set呃,其实这些都是一些样板代码啊,就是我们写起来也相对来讲呢,似乎是有一点枯燥对吧?这是跳出率bounce rate对吧?Bounce rate好,呃,其实正常,唯一要注意的一点就是你不要把这个字段名给它敲错了,或者列名给它敲错了,因为你敲错的话,你就取不出数据来了,对吧,你就取不出数据来了,并且可能还会呃在运行时抛出一些异常啊之类的,好,然后呢,Traffic STa.set u count。然后呢,Result set.get对吧?那这个是UV下划线,呃,Count,然后呢,traffic.set recent days,那么这个recent days呢,我们就直接把这个recent days给它set进来就行了,然后呢,Traffic statistics把它添加进去,对吧?然后traffic statistic把它添加列表里面,然后不要忘记这个total呢,我们要加一,也就是总,总页数呢,你要加一对吧,总页数你要加一,好啊,那现在的话呢,我们把这个数据呢,都已经取出来了,然后把它组成一个分页数据对吧?我们把它组成一个分页数据,那就是one traffic statistic page等于new一个。
29:31
什么呢,配置它的泛型呢,是呃,Traffic staistic,好,然后我们有了这个分页数据以后呢,我们就把它的一些呃字段给填充一下,然后点current等于配置,然后traffic.s等于traffic statistics对吧?那个列表里面的数据呢,呃,我们就直接给它复制到S这里面,对吧?当然你在的话,你会发现呃,它爆红了对吧,你就来处理一下这个错误对吧?那在这的话呢,呃,就是说需要的类型是list traffic,呃,Space这个,但是提供的类型呢,是list object对吧?所以说在这的话,我们就来看一下上面的这个,诶,我在这儿的写这个的时候呢,你可以发现它没有写泛型对吧?所以我们在这儿的话,我们把泛型写一下。
30:25
哎,那这个就没有问题了啊,这个类型错误呢就消除了,然后traffic statistic配置点size等于limit,每页有多少条数据,Traffic statistic配置点current对吧?啊,不应该current,应该是total等于total,好,我们直接采用对这个字段进行赋值的方法呢,来实例化这个类对吧?呃,其实在Java里边的话呢。就是说我用get set,然后所有字段都是私有字段,还是说所有字段都是公有字段,我直接操作这些,直接对这些字段进行赋值,它哪一种更好,其实都是,呃,实际上都是一直是有争议的,对吧?呃,其实Java时期它引入这个record,也就是记录语法,呃,实际上。
31:21
也就是为了避免大家写大量的get对吧?呃,实际上它所有的字段都是公有的对吧?实际上这个记录类型大家可以下来了解一下啊,那这个其实也是扎va社区的一个思考吧,好啊,当然你怎么写都可以对吧,你只要不报错就OK,对吧?或者说团队的编码风格统一就可以traffic sta page好这样的话呢,诶,我们这个分页数据也已经写好了,接下来我们继续来写最后一个服务,那这个服务的话呢,就是呃,用户路径。
32:04
访问服务对吧?啊,当然它也是从一张表里面查出来的数据,Public class啊,不是class,我们这个返回的值呢,是一个map string object对吧?呃,它是一个key为string value是一个object类型的这样的一个,呃,字典结构啊,当然我们在编程的时候呢,你最好不要出现object啊。就是你尽量把你代码的所有的object都把它的类型呢定义清晰,呃,如果你这里面你如果说大量的使用object,那么Java实际上它就退化成了一个呃,动态类型的语言,对吧?你都要通过反射去知道它的类型,呃,所以说这个object呢,你尽量给它定义清楚,对吧?尽量给它定义清楚,我们这边我们就来展示一下说呃,你不定义的话呢,当然也是可以的,对吧,我们就来简单的展示一下这种写法,但是这种写法本身啊,我们是非常不推荐的,对吧?好,我们接收的参数呢是。
33:04
呃,Traffics VI,然后呢,我们在这的话呢,我们当然还是,呃,从MYCQL里边去取数据,对吧,从MYSQL里面取数据,然后我们做一个串,然后在这的话呢,我们写一个发货号,然后cash。CQ exception,然后竖杠,然后呢,Class not found exception e一点print对吧?啊,当然在这的话呢,为了防御我们还是要返回一个空的哈希map return new哈希map,好,我们返回一个空的哈希表,然后在这的话呢,我们就开始呃进行查询操作,实际上这个是要可视化一个,呃,就是说用户的路径,访问的转化率的问题,对吧?当然我们一会儿可视化出来以后呢,呃,你就知道他查出来数据是一个什么样子了,对吧?呃,当然一般来讲的话呢,我们在编写这些服务的时候呢,你都会和前端去讨论清楚,因为前端他要可视化数据嘛,呃,那么他想要什么数据,你就要从数据库里边呢,给他把这个数据取出来,对吧?给他把这个数据取出来,好,我们现在我们就开始做查询,当然这个查询操作呢,本身并不是太复杂哇,Select。
34:21
Statement等于connection点好,那么这个呢,是select。South target。Pass count对吧,访问这个ul或者说路径的它的一个,呃,就是你访问过多少次对吧?Pass hunt,好把它命名成个别名叫做value吧,从哪个里边呢?从ADS配置,当然这个实际上你你看这个ADS你应该知道它就是一个广告的这样一张表,对吧?YDT等于问号。
35:03
And recent date等于一个问号,好,现在呢,我们就来开始填充它的,呃,就是说占位符对吧,Set string1,然后呢,这个是traffic,呃,点get dt,这是日期,然后呢,第二个的话呢,Set string对吧?呃,我们这的set int吧,呃,第二个的话呢,就是traffic。第四个点get recent days对吧,最近几天的,呃,这样的一个数据。然后呢,接下来呢,我们取了,取出这些数据来以后呢,我们就要把它组成可以访问的,这样就是说可以返回的这样一个数据好,第一个的话呢,是配置pass,它等于一个new a list,那么这个泛型呢,是配置pass里边的话呢,是有访问的来源,以及你要访问的目标,对吧?然后呢,Result set等于什么呢?等于select statement.x query好,我们还是把这个result set里面的数据呢都给它取出来,配置pass等于new,一个配置pass好。
36:25
然后呢,配置pass.set s,那我就是result set里边的什么呢?呃,当然就是S字段对吧,然后呢,Set target result set get string target字段,好,那么还有呢,就是配pass.set value对吧,Result set点。Get in,那么这个呢,是value这样的一个字段对吧,这个value就我们上哪,呃,这里命名的别名好,然后接下来呢,配置pass把它添加进去对吧?把添加进去好,这样的话呢,我们就把访问路径的这个数据呢,都给取出来了啊,那取出来以后呢。
37:12
我们再来构建一个顶点集合。Node set等于new一个哈希set,当然这个呃,Set数据结构呢,它是string类型的,对吧,它是string类型的,呃,OK。呃,当然这个应该是一个哈希set啊,哈希set好,那么这是一个哈希set,然后呢,我们。还有一个呢,就是在玩一个node map list,呃,你现在可能看着说这个有点晕,对吧,就是这个逻辑实际上就是我们,呃,打印出他要返回的数据,然后看一下前端它是如何进行,呃,就是说序列化的,呃就是说或者说如何进行可视化的,我们就大概知道,诶这个数据它是用来干嘛的,你刚你光看这段代码的话呢,可能并不是那么好理解,对吧?并不是那么好理解,那它里边的这个列表里边的类型呢,是map,而这个map的话呢,它是key为string value string的这样的字典好。
38:25
OK,那么接下来的话呢,我们就来便利一下这个page pass的集合,也就是说页面访问路径的这样的一个集合,呃,当我们在遍历这个路径的时候呢,S等于配pass.get source,对吧?Target等于配置pass.get target,呃,然后呢,No set.add source。Node set.add target,我们对它进行一个去重,对吧,我们把呃,就是说原顶点和目标顶点呢,都添加到这个node set里面,然后做一个去重,做一个去重啊,那我们去重完了以后呢,我们就可以便利这个node name冒号node set啊,那便利它来干嘛呢?呃,主要是组成一些我们前端要可视化的数据类型对吧?前端要可视化数据类型好,我这玩一个node map等于又一个呃哈希MAP2个字段呢,它的key是string value也是string,对吧?然后node map.put它的name。
39:40
的key呢是no name对吧,然后node map list,然后我们在这的话,我们就直接ADD,然后把这个KV键呢给它放进去,好,然后呢,接下来的话呢,我们就来构建一个返回结果对吧?那么这个构建的返回结果呢,那就是Y。
40:00
Result map等于一个new,一个哈希map,它的key是什么呢?Key是string value是object,哎,这因为这个就是我们要返回值的类型吗?然后result map.put node data no map list result map.put links data。对吧,连接数据,因为我们实际上是要,呃,就是说把它可视化成一个图对吧?好,然后在这的话呢,我们就是把这个语句给它关闭掉,然后呢,把这个result map给它返回,好那么最后一个服务呢,呃,我们就已经写完了,那接下来的话呢,我们该写的就是我们的对吧数据统计模块的控制器了。
我来说两句