package com.norteksoft.bs.rank.service; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.norteksoft.acs.entity.organization.Department; import com.norteksoft.acs.entity.organization.User; import com.norteksoft.acs.service.organization.UserManager; import com.norteksoft.bs.rank.dao.RankDao; import com.norteksoft.bs.rank.dao.RankUserDao; import com.norteksoft.bs.rank.entity.Superior; import com.norteksoft.bs.rank.entity.Subordinate; import com.norteksoft.bs.rank.enumeration.SubordinateType; import com.norteksoft.product.api.ApiFactory; import com.norteksoft.product.api.utils.BeanUtil; import com.norteksoft.product.orm.Page; import com.norteksoft.product.util.ContextUtils; import com.norteksoft.product.util.ParameterUtils; import com.norteksoft.product.util.ThreadParameters; @Service @Transactional public class RankManager { private Log log = LogFactory.getLog(RankManager.class); private RankDao dataDictionaryRankDao; private RankUserDao dataDictionaryRankuserDao; private UserManager userManager; @Autowired public void setUserManager(UserManager userManager) { this.userManager = userManager; } @Autowired public void setDataDictionaryRankDao(RankDao dataDictionaryRankDao) { this.dataDictionaryRankDao = dataDictionaryRankDao; } @Autowired public void setDataDictionaryRankuserDao( RankUserDao dataDictionaryRankuserDao) { this.dataDictionaryRankuserDao = dataDictionaryRankuserDao; } public Long getSystemId(){ return ContextUtils.getSystemId(); } public Long getCompanyId(){ return ContextUtils.getCompanyId(); } public String getLoginName(){ return ContextUtils.getLoginName(); } public void getDataDictRanksPage(Page<Superior> dictRankPage){ dataDictionaryRankDao.getDataDictRanksPage(dictRankPage,getCompanyId()); } public Superior getDataDictRankById(Long id){ return dataDictionaryRankDao.get(id); } @Transactional(readOnly=false) public void saveDataDictRank(Superior dataDictionaryRank,List<String> userInfos){ dataDictionaryRank.setCompanyId(getCompanyId()); dataDictionaryRank.setSystemId(getSystemId()); dataDictionaryRank.setCreator(getLoginName()); dataDictionaryRankDao.save(dataDictionaryRank); List<Subordinate> ddrus=dataDictionaryRankuserDao.getDataDictRankUsersByRankId(dataDictionaryRank.getId()); for(Subordinate ddru:ddrus){ dataDictionaryRankuserDao.delete(ddru); } for(String info:userInfos){ String[] infos=info.split(";"); String infoName=infos[0]; Long infoId=null; if(!"".equals(infos[1])){ infoId=Long.parseLong(infos[1]); } String loginName=null; if(infos.length==4){ loginName=infos[3]; } Subordinate dataDictRankUser=new Subordinate(); dataDictRankUser.setCompanyId(getCompanyId()); dataDictRankUser.setSystemId(getSystemId()); dataDictRankUser.setName(infoName); dataDictRankUser.setTargetId(infoId); dataDictRankUser.setLoginName(loginName); Integer type=Integer.parseInt(infos[2]); if(type==0){ dataDictRankUser.setSubordinateType(SubordinateType.USER); }else if(type==1){ dataDictRankUser.setSubordinateType(SubordinateType.DEPARTMENT); }else{ dataDictRankUser.setSubordinateType(SubordinateType.WORKGROUP); } dataDictRankUser.setDataDictionaryRank(dataDictionaryRank); dataDictionaryRankuserDao.save(dataDictRankUser); } } @Transactional(readOnly=false) public void deleteDataDictRanks(String dictRankIds){ List<Long> dids=getList(dictRankIds);; for(int i=0;i<dids.size();i++){ List<Subordinate> ddrus=dataDictionaryRankuserDao.getDataDictRankUsersByRankId(dids.get(i)); for(Subordinate ddru:ddrus){ dataDictionaryRankuserDao.delete(ddru); } dataDictionaryRankDao.delete(dids.get(i)); } } public User getDirectLeader(Long userId) { return getDirectLeader(userId, getCompanyId()); } /** * 根据用户ID查询该用户的直属领导 * @param userId * @return */ public User getDirectLeader(Long userId, Long companyId) { if(userId == null) throw new RuntimeException("没有给定查询直属领导的查询条件: 人员ID. "); if(companyId == null) throw new RuntimeException("没有给定查询直属领导的查询条件: 公司ID. "); List<Superior> dicts = dataDictionaryRankDao.getDirectLeader(userId, companyId); Long leaderId = null; if(!dicts.isEmpty()){ leaderId = getLeaderIdFromDict(dicts); }else{ ThreadParameters parameters = new ThreadParameters(companyId); ParameterUtils.setParameters(parameters); List<Department> depts = userManager.getDepartmentsByUserId(userId); dicts = dataDictionaryRankDao.getDirectLeader(depts, companyId); if(!dicts.isEmpty()){ leaderId = getLeaderIdFromDict(dicts); } } if(leaderId == null) return null; else return userManager.getUserById(leaderId); } /** * 根据用户登录名查询该用户的直属领导列表 * @param loginName * @return */ public List<User> getDirectLeaders(String loginName) { return getDirectLeaders(loginName,getCompanyId()); } /** * 根据用户登录名查询该用户的直属领导 * @param loginName * @return */ public List<User> getDirectLeaders(String loginName,Long companyId) { if(loginName == null) throw new RuntimeException("没有给定查询直属领导集合的查询条件: 人员登录名. "); if(companyId == null) throw new RuntimeException("没有给定查询直属领导集合的查询条件: 公司ID. "); List<Superior> dicts = dataDictionaryRankDao.getDirectLeader(loginName,companyId); Long leaderId = null; List<User> directs=new ArrayList<User>(); if(!dicts.isEmpty()){ for(Superior rank:dicts){ leaderId =rank.getUserId(); User user=userManager.getUserById(leaderId); directs.add(user); } }else{ ThreadParameters parameters = new ThreadParameters(companyId); ParameterUtils.setParameters(parameters); List<Department> depts = userManager.getDepartments(loginName); dicts = dataDictionaryRankDao.getDirectLeader(depts, companyId); if(!dicts.isEmpty()){ for(Superior rank:dicts){ leaderId =rank.getUserId(); User user=userManager.getUserById(leaderId); directs.add(user); } } } if(directs.size()<=0) return null; else return directs; } /** * 根据用户登录名查询该用户的直属领导 * @param loginName * @return */ public User getDirectLeader(String loginName) { return getDirectLeader(loginName,getCompanyId()); } /** * 根据用户登录名查询该用户的直属领导 * @param loginName * @return */ public User getDirectLeader(String loginName,Long companyId) { if(loginName == null) throw new RuntimeException("没有给定查询直属领导的查询条件: 人员登录名. "); if(companyId == null) throw new RuntimeException("没有给定查询直属领导的查询条件: 公司ID. "); List<Superior> dicts = dataDictionaryRankDao.getDirectLeader(loginName,companyId); Long leaderId = null; if(!dicts.isEmpty()){ leaderId = getLeaderIdFromDict(dicts); }else{ ThreadParameters parameters = new ThreadParameters(companyId); ParameterUtils.setParameters(parameters); List<Department> depts = userManager.getDepartments(loginName); dicts = dataDictionaryRankDao.getDirectLeader(depts, companyId); if(!dicts.isEmpty()){ leaderId = getLeaderIdFromDict(dicts); } } if(leaderId == null) return null; else return userManager.getUserById(leaderId); } private Long getLeaderIdFromDict(List<Superior> dicts){ Long leaderId = null; if(dicts.size() == 1){ leaderId = dicts.get(0).getUserId(); }else{ log.debug(" *** query direct leader error. DataDictionaryRank num [" + dicts.size() + "] *** "); } return leaderId; } public List<Superior> getDataDictRanks(String value){ return dataDictionaryRankDao.getDataDictRanks(getCompanyId(),value); } public static List<Long> getList(String ids){ String[] dids=ids.split(","); List<Long> id=new ArrayList<Long>(); for(int i=0;i<dids.length;i++){ id.add(Long.parseLong(dids[i])); } return id; } public List<Superior> getRanks(Long companyId){ return dataDictionaryRankDao.getRanks(companyId); } public Superior getRankByTitle(String rankTitle){ return dataDictionaryRankDao.getRankByTitle(rankTitle); } @Transactional(readOnly=false) public void saveDataDictRank(Superior rank){ dataDictionaryRankDao.save(rank); } }