两张表数据合并显示_还要分页

来源:互联网 发布:伊的家网络销售怎么样 编辑:程序博客网 时间:2024/06/04 18:04
public Map<String, Object> getStudyEventList(Map<String, Object> map) {
// TODO 查询学生学籍意外情况
Map<String, Object> resultMap=new HashMap<String, Object>();
// 转班个数
int changeClassCount=studentChangeclassDao.getChangeClassCount(map);
// 其他意外个数
int studyEventCount=studyEventDao.getStudyEventCount(map);
resultMap.put("total", changeClassCount+studyEventCount);// 把两个表的数据相加
// 转班列表
List<Map<String, Object>> changeClassList=studentChangeclassDao.getChangeClassList(map);
// 合并列表
List<Map<String, Object>> list=studyEventDao.getStudyEvenetList(map);// 请假表数据
if (list!=null) {
// 页面大小
int pageSize=(Integer) map.get("pageSize");
// 页面开始索引
int pageStart=(Integer) map.get("pageStart");
// 请假表数据大小
int count=list.size();
if (count>0&&count<pageSize) {// 请假表有数据,但不足以组成本页数据
int needSize=pageSize-count; 
// 缺少的数据有转班表数据来填补
for (int i = 0; i < changeClassList.size() && i < needSize; i++) {
list.add(changeClassList.get(i));
}
}else if(count==0){// 有两种可能。1-请求的是第一页,请假表一条数据没有,2-不是第一页,请假表中数据已用完
if(pageStart==0){// 第一种可能
for (int i = 0; i < changeClassList.size() && i < pageSize; i++) {
list.add(changeClassList.get(i));
}
}else{// 第二种可能
int page=pageStart/pageSize;// 要取的是第几页数据
int tempPage=page-1;// 上一页
// 获取上一页数据(请假表数据)
List<Map<String, Object>> tempList=new ArrayList<Map<String,Object>>();
boolean first=true;
while(tempPage>=0&&(first||tempList.size()==0)){// 遍历,直到有请假表数据
Map<String, Object> conditionMap=map;
conditionMap.put("pageStart", (tempPage--)*pageSize);
tempList=studyEventDao.getStudyEvenetList(conditionMap);
first=false;// 不是第一次啦
}
// while循环出来以后,要么page==0,要么tempList.size()>0
// 转班表填充几条数据
int hasCount=pageSize-tempList.size();
int i=-1;
if (tempPage<0) {// 说明获取已到第一页,交叉数据在第一页
// 转班表索引开始取数据
i=hasCount+(page-1)*pageSize;
}else{// 交叉数据不在第一页
// 转班表索引开始取数据
i=hasCount+(page-tempPage-2)*pageSize;
}
for (int j=0; i < changeClassList.size()&&j < pageSize; i++,j++) {
list.add(changeClassList.get(i));
}
}
}
}
// list.addAll(changeClassList); // 不用分页时简单
resultMap.put("rows", list);
return resultMap;
}
原创粉丝点击