现在有这么场景:服务A要分页显示一些数据,而这些数据是先显示服务A(它本身的),如果数据不够,就再显示服务B的。
例如:服务A有11条数据,服务B有23条数据,这样总条数是34条;前台每页显示10条,共4页。具体是:
第1页,只显示服务A的前10条;
第2页,显示服务A的1条,显示服务B的9条(共10条);
第3页,只显示服务B的第10-19条(共10条);
第4页,只显示服务B的第20-23条(共4条)
现在开始进行代码流程梳理:
第1页,前台传过来pageNum:1 和pageSize:10,服务A先查自己的,取10条,判断结果集是否小于10条,发现等于10条,那就说明服务A的数据已经够了,不用再取服务B的数据了,但要获取服务B的记录数,所以还是要调用服务B,只是参数是pageNum:1 和pageSize:0,这样服务B会返回它自己的记录数,这样要显示的数据和总记录数就都有了;
第2页,前台传过来pageNum:2 和pageSize:10,服务A先查自己的,取10条,判断结果集是否小于10条,发现只查出1条,那还差10-1=9条,那就要调用服务B取前9条,所以参数是pageNum:1 和pageSize:9,这样服务B会返回它自己的记录数,服务A的1条和服务B的9条合并成10条,这样要显示的数据和总记录数就都有了;
第3页:前台传过来pageNum:3 和pageSize:10,服务A先查自己的,取10条,判断结果集是否小于10条,发现只查出0条,那还差10-0=10条,那就要调用服务B取第10-19条,如果传参是pageNum:2和pageSize:10,的话,服务B就是取11-20条,这样第10条就被跳过了,所以我这时传参数为:pageNum:1 和pageSize:3*10-11=19,这样取到了19条,但只取第10-19条,所以需要把前((3-1)*10-11)=9删掉,这样就剩服务B的10-19条了,这样要显示的数据和总记录数就都有了;
第4页:前台传过来pageNum:4 和pageSize:10,服务A先查自己的,取10条,判断结果集是否小于10条,发现只查出0条,那还差10-0=10条,所以传参数为:pageNum:1 和pageSize:4*10-11=29,这样取到了23条,但只取第20-23条,所以需要把前((4-1)*10-11)=19删掉,这样就剩服务B的20-23条了,这样要显示的数据和总记录数就都有了;
总结:
前台传过来pageNum:N 和pageSize:10,
(1)服务A先查自己的,查出结果,
(2)再调用服务B,传参数pageNum:1 和pageSize:N*10-服务B的总记录数(如果为负,则取值为0),取到服务B的数据要进行裁剪,裁剪掉前(N-1)*10-服务B的总记录数(如果为负,则取值为0,或者不裁剪),
(3)把服务A和服务B的结果集合并,把服务A和服务B的总记录数相加,
这样就OK了。