共有専門の照会


共有プロフェッショナルを問合せ、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;
	}