package com.shlanbao.tzsc.pms.sys.resource.service.impl; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import com.shlanbao.tzsc.utils.tools.FillUserInfoUtil; import com.shlanbao.tzsc.utils.tools.LogAnno; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.shlanbao.tzsc.base.dao.SysFavoriteDaoI; import com.shlanbao.tzsc.base.dao.SysResourceDaoI; import com.shlanbao.tzsc.base.dao.SysRoleResourceDaoI; import com.shlanbao.tzsc.base.mapping.SysFavorite; import com.shlanbao.tzsc.base.mapping.SysResource; import com.shlanbao.tzsc.base.mapping.SysUser; import com.shlanbao.tzsc.base.model.Tree; import com.shlanbao.tzsc.base.service.BaseService; import com.shlanbao.tzsc.pms.sys.resource.beans.FavoriteBean; import com.shlanbao.tzsc.pms.sys.resource.beans.ResourceBean; import com.shlanbao.tzsc.pms.sys.resource.service.ResourceServiceI; import com.shlanbao.tzsc.utils.tools.BeanConvertor; import com.shlanbao.tzsc.utils.tools.StringUtil; import javax.servlet.http.HttpServletRequest; /** * 资源业务实现类 * @author Leejean * @create 2014年9月16日上午10:42:37 */ @Service public class ResourceServiceImpl extends BaseService implements ResourceServiceI{ @Autowired private SysResourceDaoI sysResourceDao; @Autowired private SysRoleResourceDaoI sysRoleResourceDao; @Autowired private SysFavoriteDaoI sysFavoriteDao; @Autowired private HttpServletRequest request; @Override public List getUserMenus(String uid) throws Exception { Map map = new HashMap(); String hql = "select o.sysResource from SysRoleResource o join o.sysRole.sysUserRoles u " + "where o.sysRole.id in (select ur.sysRole.id from SysUserRole ur where ur.sysUser.id=?) " + "and o.sysResource.typ=1 and o.sysResource.securityLevel <= u.sysUser.securityLevel and o.sysResource.del='0' and o.sysResource.enable='1' "; List sysResources = sysResourceDao.query(hql, uid); for (SysResource resource : sysResources) { map.put(resource.getId(), resource); } hql = "select o.sysResource from SysOrganizationResource o join o.sysOrganization.sysUserOrganizations u " + "where o.sysOrganization.id in (select ur.sysOrganization.id from SysUserOrganization ur where ur.sysUser.id=?) " + "and o.sysResource.typ=1 and o.sysResource.securityLevel <= u.sysUser.securityLevel and o.sysResource.del='0' and o.sysResource.enable='1' "; sysResources = sysResourceDao.query(hql, uid); for (SysResource resource : sysResources) { map.put(resource.getId(), resource); } List trees = new ArrayList(); for (String key : map.keySet()) { SysResource resource = map.get(key); Tree tree = new Tree(); tree.setId(resource.getId()); if (resource.getSysResource() != null) { tree.setPid(resource.getSysResource().getId()); } tree.setText(resource.getText()); tree.setIconCls(resource.getIconCls()); Map attr = new HashMap(); attr.put("href", resource.getUrl()); tree.setAttributes(attr); tree.setSeq(resource.getSeq()); trees.add(tree); } Collections.sort(trees); return trees; } @Override public List queryAllResources() throws Exception { List resources=sysResourceDao.query("from SysResource o where o.del=0 order by o.seq asc"); List resourceBeans= new ArrayList(); for (SysResource sysResource : resources) { ResourceBean resourceBean=BeanConvertor.copyProperties(sysResource, ResourceBean.class); try { if(sysResource.getSysResource()!=null){ resourceBean.setPid(sysResource.getSysResource().getId()); resourceBean.setPname(sysResource.getSysResource().getText()); } } catch (Exception e) { //e.printStackTrace(); } FillUserInfoUtil.fillCreateAndUpdateUserInfo(sysResource,resourceBean); resourceBeans.add(resourceBean); } return resourceBeans; } @Override public ResourceBean getResourceById(String id) throws Exception { SysResource sysResource = sysResourceDao.findById(SysResource.class,id); ResourceBean resourceBean=BeanConvertor.copyProperties(sysResource,ResourceBean.class); if(sysResource.getSysResource()!=null){ resourceBean.setPid(sysResource.getSysResource().getId()); resourceBean.setPname(sysResource.getSysResource().getText()); } return resourceBean; } @Override public List getUserFavorites(String id) { List lt = new ArrayList(); List sysFavorites= sysFavoriteDao.query( "from SysFavorite o join fetch o.sysResource res where res.del=0 and res.enable=1 and o.sysUser.id= ? ",id); for (SysFavorite sysFavorite : sysFavorites) { Tree tree = new Tree(); SysResource sysResource=sysFavorite.getSysResource(); tree.setText(sysResource.getText()); tree.setIconCls(sysResource.getIconCls()); tree.setId(sysResource.getId()); if(sysResource.getSysResource()!=null){ tree.setPid(sysResource.getSysResource().getId()); } Map attr = new HashMap(); attr.put("href", sysResource.getUrl()); tree.setAttributes(attr); lt.add(tree); } return lt; } @LogAnno(operateType = "新增资源") @Override public void addResource(ResourceBean resourceBean) throws Exception { SysResource sysResource=BeanConvertor.copyProperties(resourceBean, SysResource.class); if(StringUtil.notNull(resourceBean.getPid())){ sysResource.setSysResource(new SysResource(resourceBean.getPid())); } FillUserInfoUtil.fillCreateUserInfo(sysResource,request); sysResourceDao.save(sysResource); } @LogAnno(operateType = "删除资源") @Override public void deleteResource(String id) throws Exception { sysResourceDao.findById(SysResource.class, id).setDel(1L); } @Override public void batchDeleteResource(String ids) throws Exception { for (String id : StringUtil.splitToStringList(ids, ",")) { this.deleteResource(id); } } @LogAnno(operateType = "编辑资源") @Override public void editResource(ResourceBean resourceBean) throws Exception { SysResource sysResource=sysResourceDao.findById(SysResource.class, resourceBean.getId()); if(StringUtil.notNull(resourceBean.getPid())){ sysResource.setSysResource(new SysResource(resourceBean.getPid())); } BeanConvertor.copyProperties(resourceBean,sysResource); FillUserInfoUtil.fillUpdateUserInfo(sysResource,request); } @Override public void addFavorite(FavoriteBean favoriteBean) throws Exception { sysFavoriteDao.save(new SysFavorite(new SysResource(favoriteBean.getRid()), new SysUser(favoriteBean.getUid()))); } @Override public void deleteFavorite(FavoriteBean favoriteBean) throws Exception { sysFavoriteDao.deleteByParams( "delete from SysFavorite o where o.sysUser.id=? and o.sysResource.id=?", favoriteBean.getUid(), favoriteBean.getRid()); } @Override public List getAllMenuSelfNotIn(String id) throws Exception { List resources=sysResourceDao.query("from SysResource o where o.typ=1 and o.del=0 and o.id<>? order by o.seq asc",id); List resourceBeans= new ArrayList(); for (SysResource sysResource : resources) { ResourceBean resourceBean=BeanConvertor.copyProperties(sysResource, ResourceBean.class); if(sysResource.getSysResource()!=null){ resourceBean.setPid(sysResource.getSysResource().getId()); resourceBean.setPname(sysResource.getSysResource().getText()); } resourceBeans.add(resourceBean); } return resourceBeans; } @Override public List getResByUser(String uid) { List trees = new ArrayList(); Map map = new HashMap(); String hql = "select o.sysResource from SysRoleResource o join o.sysRole.sysUserRoles u " + "where o.sysRole.id in (select ur.sysRole.id from SysUserRole ur where ur.sysUser.id=?) and o.sysResource.securityLevel <= u.sysUser.securityLevel"; List sysResources = sysResourceDao.query(hql, uid); for (SysResource resource : sysResources) { map.put(resource.getId(), resource); } hql = "select o.sysResource from SysOrganizationResource o join o.sysOrganization.sysUserOrganizations u " + "where o.sysOrganization.id in (select ur.sysOrganization.id from SysUserOrganization ur where ur.sysUser.id=?) and o.sysResource.securityLevel <= u.sysUser.securityLevel"; sysResources = sysResourceDao.query(hql, uid); for (SysResource resource : sysResources) { map.put(resource.getId(), resource); } //所有权限 List allResources = sysResourceDao.query("from SysResource o where o.del=0 and o.enable=1"); for (SysResource resource : allResources) { Tree tree = new Tree(); tree.setId(resource.getId()); if (resource.getSysResource() != null) { tree.setPid(resource.getSysResource().getId()); } tree.setText(resource.getText()); tree.setIconCls(resource.getIconCls()); if(resource.getTyp()==2){//只有功能才加checked属性,因为父节点的任意一个子节点选中了 ,父节点即为实心点选中 tree.setChecked(map.containsKey(resource.getId()));//存在checked=true } if(resource.getTyp()==1){//菜单时, tree.setChecked(map.containsKey(resource.getId())&&exsitSubs(map,resource.getId())==0);//存在checked=true } if(resource.getSysResource()!=null&&resource.getTyp()==1){//除根节点外菜单默认关闭 tree.setState("closed"); } tree.setAttributes(resource.getUrl()); trees.add(tree); } return trees; } private int exsitSubs(Map map, String id) { int flag = 0; for (String key : map.keySet()) { SysResource resource = map.get(key); String sid = resource.getId(); if((!sid.equals(id)) &&(resource.getSysResource()!=null) &&resource.getSysResource().getId().equals(id)){ flag += 1; } } return flag; } /** * 是否拥有此资源 * @author Leejean * @create 2014-8-19下午06:36:21 * @param sysUserRoles * @param id * @return */ /*private boolean isAssignedRes(List sysResources, String id) { for (SysResource sysResource : sysResources) { if(sysResource.getId().equals(id)){ return true; } } return false; }*/ }