共有専門の照会
3069 ワード
共有プロフェッショナルを問合せ、2つのlistの内容を比較して、表示を許可するかどうかを決定します.
public PageList<TeachResource> findProfList(int page, int pageSize, Long profid,String tag) {
User user1 = (User) ServletActionContext.getRequest().getSession().getAttribute("users");
PageList<TeachResource> p=new PageList<TeachResource>();
p.setObjectsPerPage(pageSize);
p.setPageNumber(page);
StringBuilder sb = new StringBuilder();
sb.append("select t from TeachResource t where t.status = 1 and t.rtype = 1 and t.profession.id ="+profid);
sb.append(" order by t.createTime desc");
//
Query query=em.createQuery(sb.toString());
query.setFirstResult((page-1)*pageSize);
query.setMaxResults(pageSize);
List<TeachResource> list = query.getResultList(); //
if(tag.equals("login")){ //
sb.setLength(0);
sb.append("select t from TeachResource t where t.status = 1 and t.rtype = 1 and t.profession.id ="+profid);
if(user1.getUserType() == UserType.TEACHER){ // : id
sb.append(" and (");
sb.append("t.sharepro like '%,"+user1.getProfession().getId()+",%' or t.user.id ="+user1.getId()+" ");
sb.append(")");
}else if(user1.getUserType() == UserType.DEPARTADMIN){ // : id
String proIDs = findDeparrProID(user1.getDepart().getId()); // ids
String[] proids = proIDs.split(",");
sb.append(" and (");
for (int i = 0; i < proids.length; i++) {
if(i < proids.length-1){
sb.append(" find_in_set("+proids[i]+",t.sharepro)>0 or");
}else{
sb.append(" find_in_set("+proids[i]+",t.sharepro)>0 or t.user.id ="+user1.getId()+" ");
}
}
sb.append(")");
}
sb.append(" order by t.createTime desc");
query=em.createQuery(sb.toString());
//query.setFirstResult((page-1)*pageSize);
//query.setMaxResults(pageSize);
List<TeachResource> olist = query.getResultList(); //
Set<TeachResource> olistSet = new HashSet<TeachResource>();
for (TeachResource t1 : olist) {
olistSet.add(t1);
}
for (TeachResource t2 : list) {
if (olistSet.contains(t2)) {
t2.setCanSee("true"); //
}
}
}
p.setList(list);
//
sb.setLength(0);
sb.append("select count(*) from TeachResource t where t.status = 1 and t.rtype = 1 and t.profession.id ="+profid);
query=em.createQuery(sb.toString());
p.setFullListSize(((Long)query.getSingleResult()).intValue());
return p;
}