package com.hrms.dao.impl; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.LinkedList; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Repository; import com.hrms.dao.IModuleDao; import com.hrms.dao.IRoleModuleDao; import com.hrms.dao.IUserDao; import com.hrms.dao.IUserModuleDao; import com.hrms.model.Module; import com.hrms.model.Role; import com.hrms.model.User; import com.hrms.model.UserModule; @Repository("userModuleDao") public class UserModuleDaoImpl extends GenericDaoImpl<UserModule, Integer> implements IUserModuleDao { private IRoleModuleDao roleModuleDao; private IModuleDao moduleDao; private IUserDao userDao; public boolean addToUser(Integer userId,String moduleIdSum) { if (userId!=null && userId>0 && moduleIdSum!=null && !moduleIdSum.equals("")) { UserModule userModule = getUserModuleByUserId(userId); if (userModule!=null) { String[] moduleIdSumArray = moduleIdSum.split(","); List<String> list = new LinkedList<String>(); String[] sIdSum = getUserModuleId(userId); if (sIdSum!=null&&sIdSum.length>0) { for (int i = 0; i < sIdSum.length; i++) { if(!list.contains(sIdSum[i])) { list.add(sIdSum[i]); } } } for (int j = 0; j < moduleIdSumArray.length; j++) { if(!list.contains(moduleIdSumArray[j])) { list.add(moduleIdSumArray[j]); } } if (list.size()>sIdSum.length) { String[] newrIdSumArray = (String[])list.toArray(new String[list.size()]); String newrIdSum="1"; for (int i = 0; i < newrIdSumArray.length; i++) { newrIdSum = newrIdSum + "," +newrIdSumArray[i]; } newrIdSum = newrIdSum.substring(2); userModule.setModuleSum(newrIdSum); return this.update(userModule); } }else { userModule = new UserModule(); User user = userDao.findById(userId); userModule.setUser(user); userModule.setModuleSum(moduleIdSum); return this.save(userModule); } } return false; } public boolean removeFromUser(Integer userId, String moduleIdSum) { if (userId!=null && userId>0 && moduleIdSum!=null && !moduleIdSum.equals("")) { UserModule userModule = getUserModuleByUserId(userId); if (userModule!=null) { List<String> list = new LinkedList<String>(); String[] userModuleIdSum = getUserModuleId(userId); String[] moduleIdSumArray = moduleIdSum.split(","); if (userModuleIdSum!=null && userModuleIdSum.length>0) { for (int i = 0; i < userModuleIdSum.length; i++) { if(!list.contains(userModuleIdSum[i])) { list.add(userModuleIdSum[i]); } } } for (int j = 0; j < moduleIdSumArray.length; j++) { if (list.contains(moduleIdSumArray[j])) { list.remove(moduleIdSumArray[j]); } } if (list.size()<userModuleIdSum.length) { String[] newrIdSumArray = (String[])list.toArray(new String[list.size()]); String newrIdSum="1"; for (int i = 0; i < newrIdSumArray.length; i++) { newrIdSum = newrIdSum + "," +newrIdSumArray[i]; } if (newrIdSum.length()>2) { newrIdSum = newrIdSum.substring(2); } userModule.setModuleSum(newrIdSum); return this.update(userModule); } } } return false; } public boolean userModuleTreeInXml(String fileName,Integer userId) { File file = new File(fileName); try { PrintWriter out = new PrintWriter(file,"UTF-8"); out.println("<?xml version='1.0' encoding='UTF-8'?>"); out.println("<tree id=\"0\">"); out.println("<item text=\""+moduleDao.getRootModule().getModuleName()+"\" id=\""+moduleDao.getRootModule().getModuleId()+"\" open=\"1\" im0=\"tombs.gif\" im1=\"tombs.gif\" im2=\"iconSafe.gif\" call=\"1\" select=\"1\">"); if (userId!=null && userId>=0) { List<Module> userModuleList = getUserModule(userId); if (userModuleList!=null && userModuleList.size()>0) { for (int i = 0; i < userModuleList.size(); i++) { moduleDao.moduleTreeInXml(userModuleList.get(i).getModuleId(),userModuleList, out); } } } out.println("</item>"); out.println("</tree>"); out.flush(); out.close(); if (file.exists()) { return true; }else { return false; } } catch (IOException e) { System.out.println("moduleTree to xml got a exception!"); e.printStackTrace(); return false; } } public List<Module> getUserModule(Integer userId) { String[] s = getUserModuleId(userId); if (s!=null && s.length>0) { return moduleDao.getModule(s); } return null; } @SuppressWarnings("unchecked") public UserModule getUserModuleByUserId(Integer userId) { List<UserModule> list = getHibernateTemplate().find("from UserModule where userId=?",userId); if (list!=null && list.size()>0) { return list.get(0); } return null; } public String[] getUserModuleIdSum(Integer userId) { String[] userModuleCount = getUserModuleCount(userId); List<Role> roles = userDao.findRoles(userId); String[] roleModuleIdCount = roleModuleDao.getRoleModuleIdCount(roles); StringBuffer sb = new StringBuffer(); if(userModuleCount != null && userModuleCount.length>0) { for(int i=0;i<userModuleCount.length;i++) { sb.append(userModuleCount[i]+","); } } if(roleModuleIdCount != null && roleModuleIdCount.length>0) { for(int i=0;i<roleModuleIdCount.length;i++) { sb.append(roleModuleIdCount[i]+","); } } if(sb.length()>0) { String[] userModuleIdSum = sb.toString().split(","); if(userModuleIdSum != null && userModuleIdSum.length>0) { List<String> list = new LinkedList<String>(); for(int i = 0; i < userModuleIdSum.length; i++) { if(userModuleIdSum[i] != null) { if(!list.contains(userModuleIdSum[i])) { list.add(userModuleIdSum[i]); } } } return (String[])list.toArray(new String[list.size()]); }else { return null; } }else { return null; } } public String getUserModuleTree(String[] userModuleIdSum) { if(userModuleIdSum != null && userModuleIdSum.length>0) { StringBuffer leftModuleTree = new StringBuffer(); leftModuleTree.append("<script type=text/javascript>") .append("var tree = null;") .append("var root = new TreeNode('" + moduleDao.getRootModule().getModuleName() + "');"); for(int i=0;i<userModuleIdSum.length;i++){ leftModuleTree.append(moduleDao.getModules(Integer.valueOf(userModuleIdSum[i]))); } leftModuleTree.append("tree = new Tree(root);") .append("tree.show('menuTree');") .append("</script>"); return leftModuleTree.toString(); } else { return "你尚未分配功能菜单,请与管理员联系!"; } } @SuppressWarnings("unchecked") public String[] getUserModuleCount(Integer userId) { List<UserModule> list = this.getHibernateTemplate().find("from " + this.getPersistentClass().getName() + " where userId = ?",userId); if(list != null && list.size() >= 1){ return list.get(0).getModuleSum().split(","); } else { return null; } } @SuppressWarnings("unchecked") public String[] getUserModuleId(Integer userId) { if (userId!=null) { List<UserModule> list = this.getHibernateTemplate().find("from " + this.getPersistentClass().getName() + " where userId = ?",userId); if(list != null && list.size() >= 1){ return list.get(0).getModuleSum().split(","); } } return null; } public IUserDao getUserDao() { return userDao; } @Resource public void setUserDao(IUserDao userDao) { this.userDao = userDao; } public IModuleDao getModuleDao() { return moduleDao; } @Resource public void setModuleDao(IModuleDao moduleDao) { this.moduleDao = moduleDao; } public IRoleModuleDao getRoleModuleDao() { return roleModuleDao; } @Resource public void setRoleModuleDao(IRoleModuleDao roleModuleDao) { this.roleModuleDao = roleModuleDao; } }