package com.norteksoft.bs.rank.dao;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Repository;
import com.norteksoft.acs.entity.organization.Department;
import com.norteksoft.product.orm.Page;
import com.norteksoft.product.orm.hibernate.HibernateDao;
import com.norteksoft.bs.rank.enumeration.SubordinateType;
import com.norteksoft.bs.rank.entity.Superior;
@Repository
public class RankDao extends HibernateDao<Superior, Long> {
public void getDataDictRanksPage(Page<Superior> dictRankPage, Long companyId){
searchPageByHql(dictRankPage, "from Superior dict where dict.companyId=? order by dict.name asc",companyId);
}
public List<Superior> getDirectLeader(Long userId, Long companyId){
return find("select dd from Superior dd join dd.dataDictionaryRankUser du where du.subordinateType=? and du.targetId=? and du.companyId=? ",
SubordinateType.USER, userId, companyId);
}
public List<Superior> getDirectLeader(String loginName, Long companyId){
return find("select dd from Superior dd join dd.dataDictionaryRankUser du where du.subordinateType=? and du.loginName=? and du.companyId=? ",
SubordinateType.USER, loginName, companyId);
}
public List<Superior> getDirectLeader(List<Department> depts, Long companyId){
StringBuilder hql = new StringBuilder("select dd from Superior dd join dd.dataDictionaryRankUser du ");
hql.append("where du.subordinateType=? and du.companyId=? and (");
Object[] paras = new Object[depts.size()+2];
paras[0] = SubordinateType.DEPARTMENT;
paras[1] = companyId;
for(int i = 0; i < depts.size(); i++){
if(i != 0) hql.append(" or ");
hql.append("du.targetId=?");
paras[i + 2] = depts.get(i).getId();
}
hql.append(")");
return find(hql.toString(), paras);
}
public List<Superior> getDataDictRanks(Long companyId,String value){
StringBuilder hql = new StringBuilder("select dd from Superior dd where dd.companyId=?");
if(!StringUtils.isEmpty(value)){
hql.append(" and dd.name like '%");
hql.append(value);
hql.append("%'");
}
return find(hql.toString(), companyId);
}
public List<Superior> getDataDictRanksByDictId(Long dictId){
return find("select dd from Superior dd where dd.dataDictionary.id=?",
dictId);
}
public List<Superior> getRanks(Long companyId){
return find("from Superior dd where dd.companyId=?",
companyId);
}
public Superior getRankByTitle(String rankTitle){
List<Superior> ranks=find("from Superior dd where dd.title=?",
rankTitle);
if(ranks.size()>0)return ranks.get(0);
return null;
}
}