分步
需求
需要写一个接口,输入是一组id,返回根据id获取到的event,并且要对event进行判定,如果在它之前该event已经出现过了则给定状态为0,否则为1
该题的问题在于,要对同一批次进行过滤,即同批次如果也出现了相同的event,给定一个event为1就可以了,其他为0。之前的思路老是想到随机取一个,没有想过遍历
思路
去遍历这组id,如果event第一次出现的话那肯定就是最早的给定为1,同批次后来的肯定就是0了,这样回避了同批次的问题,也兼顾了历史数据的问题。根据是否为第一次出现的时间去判定状态,需要用到两组SQL。(要记住是可以这样写的)
通过两层循环,第一层遍历taskId,第二层遍历id获取到的crash
// 1. 遍历id获取event
List<Map<String, Object>> list = mtbfMapper.getBtpCrashByTaskid(request); // 获取 id, event, triggerTime
// 2. 判定有无之前的记录
int count=mtbfMapper.getBtpCrashIdCountBeforeTime(map); // SELECT COUNT(1) FROM table where event = #{event} and #{triggerTime}>triggerTime
// 3. 设置状态
if(count > 1) {
...
} else {
...
}
分页
需求
分页+总数
需要给出记录总条数并且一次性返回部分数据,根据页码和设置的条数
思路一
LIMIT和OFFSET,需要再通过一个SQL来返回total。
思路二
一次性返回所有结果,通过一个新的对象来存储返回的部分数据(根据偏移量和条数来确定)
List<Map<String, Object>> reports=bvpMapper.getReports(params);
List<Map<String, Object>> subList = reports.subList((page-1)*limit,page*limit>reports.size()?reports.size():page*limit);
List.subList()
方法,该方法接收两个参数,一个是开始索引(包含),另一个是结束索引(不包含)。