package com.shlanbao.tzsc.pms.sys.org.service.impl; import java.util.ArrayList; import java.util.List; 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.SysOrganizationDaoI; import com.shlanbao.tzsc.base.dao.SysOrganizationResourceDaoI; import com.shlanbao.tzsc.base.dao.SysResourceDaoI; import com.shlanbao.tzsc.base.dao.SysUserDaoI; import com.shlanbao.tzsc.base.dao.SysUserOrganizationDaoI; import com.shlanbao.tzsc.base.mapping.SysOrganization; import com.shlanbao.tzsc.base.mapping.SysOrganizationResource; import com.shlanbao.tzsc.base.mapping.SysResource; import com.shlanbao.tzsc.base.mapping.SysUser; import com.shlanbao.tzsc.base.mapping.SysUserOrganization; import com.shlanbao.tzsc.base.model.Tree; import com.shlanbao.tzsc.base.service.BaseService; import com.shlanbao.tzsc.pms.sys.org.beans.OrgBean; import com.shlanbao.tzsc.pms.sys.org.service.OrgServiceI; import com.shlanbao.tzsc.pms.sys.resource.beans.ResourceBean; import com.shlanbao.tzsc.pms.sys.user.beans.UserBean; 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:41:43 */ @Service public class OrgServiceImpl extends BaseService implements OrgServiceI { @Autowired private SysOrganizationDaoI sysOrganizationDao; @Autowired private SysOrganizationResourceDaoI sysOrganizationResourceDao; @Autowired private SysResourceDaoI sysResourceDao; @Autowired private SysUserDaoI sysUserDao; @Autowired private SysUserOrganizationDaoI sysUserOrganizationDao; @Autowired private HttpServletRequest request; @Override public List getAllUnDelOrgs() throws Exception { String hql="from SysOrganization o where o.del=0 order by o.seq asc"; List sysOrganizations=sysOrganizationDao.query(hql); List orgBeans= new ArrayList(); for (SysOrganization sysOrganization : sysOrganizations) { OrgBean orgBean=BeanConvertor.copyProperties(sysOrganization, OrgBean.class); if(sysOrganization.getSysOrganization()!=null){ orgBean.setPid(sysOrganization.getSysOrganization().getId()); orgBean.setPname(sysOrganization.getSysOrganization().getName()); } orgBeans.add(orgBean); } return orgBeans; } @Override public List getAllEnableOrgs() throws Exception { String hql="from SysOrganization o where o.del=0 and enable=1 order by o.seq asc"; List sysOrganizations=sysOrganizationDao.query(hql); List orgBeans= new ArrayList(); for (SysOrganization sysOrganization : sysOrganizations) { OrgBean orgBean=BeanConvertor.copyProperties(sysOrganization, OrgBean.class); if(sysOrganization.getSysOrganization()!=null){ orgBean.setPid(sysOrganization.getSysOrganization().getId()); orgBean.setPname(sysOrganization.getSysOrganization().getName()); } orgBeans.add(orgBean); } return orgBeans; } @Override public List getAllOrgsSelfNotIn(String id) throws Exception { String hql="from SysOrganization o where o.del=0 and o.enable=1 and o.id<>? order by o.seq asc"; List sysOrganizations=sysOrganizationDao.query(hql,id); List trees= new ArrayList(); for (SysOrganization sysOrganization : sysOrganizations) { Tree tree= new Tree(); tree.setIconCls(sysOrganization.getIconCls()); tree.setId(sysOrganization.getId()); tree.setText(sysOrganization.getName()); if(sysOrganization.getSysOrganization()!=null){ tree.setPid(sysOrganization.getSysOrganization().getId()); /*orgBean.setPname(sysOrganization.getSysOrganization().getName());*/ } trees.add(tree); } return trees; } @Override public List getAllOrgsTree() { String hql="from SysOrganization o where o.del=0 and o.enable=1 order by o.seq asc"; List sysOrganizations=sysOrganizationDao.query(hql); List trees = new ArrayList(); for (SysOrganization sysOrganization : sysOrganizations) { Tree tree = new Tree(); tree.setText(sysOrganization.getName()); tree.setIconCls(sysOrganization.getIconCls()); tree.setId(sysOrganization.getId()); if(sysOrganization.getSysOrganization()!=null){ tree.setPid(sysOrganization.getSysOrganization().getId()); } trees.add(tree); } return trees; } @LogAnno(operateType = "新增组织机构") @Override public Long addOrg(OrgBean OrgBean) throws Exception { if(!StringUtil.notNull(OrgBean.getPid())&&sysOrganizationDao.unique("from SysOrganization o where o.del=0 and o.enable=1 and o.sysOrganization=null") !=null){ //查询到未禁用,未删除,父级别为空的机构即为根机构 return 1L; } SysOrganization sysOrganization=BeanConvertor.copyProperties(OrgBean, SysOrganization.class); if(StringUtil.notNull(OrgBean.getPid())){ sysOrganization.setSysOrganization(new SysOrganization(OrgBean.getPid())); } FillUserInfoUtil.fillCreateUserInfo(sysOrganization,request); sysOrganizationDao.save(sysOrganization); return 0L; } @LogAnno(operateType = "删除组织机构") @Override public void deleteOrg(String id) throws Exception { sysOrganizationDao.findById(SysOrganization.class, id).setDel(1L); } @Override public void batchDeleteOrg(String ids) throws Exception { for (String id : StringUtil.splitToStringList(ids, ",")) { this.deleteOrg(id); } } @LogAnno(operateType = "编辑组织机构") @Override public void editOrg(OrgBean OrgBean) throws Exception { SysOrganization sysOrganization=sysOrganizationDao.findById(SysOrganization.class, OrgBean.getId()); BeanConvertor.copyProperties(OrgBean, sysOrganization); if(StringUtil.notNull(OrgBean.getPid())){ sysOrganization.setSysOrganization(new SysOrganization(OrgBean.getPid())); } FillUserInfoUtil.fillUpdateUserInfo(sysOrganization,request); } @Override public OrgBean getOrgById(String id) throws Exception { SysOrganization sysOrganization = sysOrganizationDao.findById(SysOrganization.class, id); OrgBean orgBean=BeanConvertor.copyProperties(sysOrganization,OrgBean.class); if(sysOrganization.getSysOrganization()!=null){ orgBean.setPid(sysOrganization.getSysOrganization().getId()); orgBean.setPname(sysOrganization.getSysOrganization().getName()); } return orgBean; } @LogAnno(operateType = "给组织机构配权限") @Override public void assignResourceToOrg(String id, String ids) throws Exception { //清除 sysOrganizationResourceDao.deleteByParams("delete from SysOrganizationResource o where o.sysOrganization.id = ?",id); for (String resid : StringUtil.splitToStringList(ids, ",")) { SysOrganizationResource o = new SysOrganizationResource(new SysResource(resid), new SysOrganization(id)); FillUserInfoUtil.fillCreateUserInfo(o,request); sysOrganizationResourceDao.save(o); } } @Override public List getResourcesByOrg(String id) throws Exception { //查询所有目录资源 List menuResources = sysResourceDao.query("from SysResource o where o.del=0 and o.enable=1 and o.typ=1 order by o.seq asc"); //查询所有功能资源 List funcResources = sysResourceDao.query("from SysResource o where o.del=0 and o.enable=1 and o.typ=2 order by o.seq asc"); //查询当前机构拥有目录资源 List orgOwnMenuResources = sysResourceDao.query( "select o.sysResource from SysOrganizationResource o where o.sysResource.typ=1 and o.sysOrganization.id = ?",id); //查询当前机构拥有目录资源 List orgOwnFuncResources = sysResourceDao.query( "select o.sysResource from SysOrganizationResource o where o.sysResource.typ=2 and o.sysOrganization.id = ?",id); List resourceBeans = new ArrayList(); for (SysResource sysResource : menuResources) { ResourceBean resourceBean = BeanConvertor.copyProperties(sysResource, ResourceBean.class); if(sysResource.getSysResource() != null){ resourceBean.setPid(sysResource.getSysResource().getId()); resourceBean.setPname(sysResource.getSysResource().getText()); } //判断当前机构是否拥有这个目录权限,如果有checked=true resourceBean.setChecked(isAssignedResource(orgOwnMenuResources,sysResource.getId())); //设置该目录下面的功能,并判断是否拥有该权限 resourceBean.setFunctions(fmtFuncsToMenus(sysResource.getId(),funcResources,orgOwnFuncResources)); resourceBeans.add(resourceBean); } // return resourceBeans; } private List fmtFuncsToMenus(String menuId,List funcResources,List roleOwnFuncResources) throws Exception{ if(funcResources == null){ return null; } List functions = new ArrayList(); for(SysResource func:funcResources){ if(func.getSysResource().getId().equals(menuId)){//该功能属于这个模块 ResourceBean funcBean = BeanConvertor.copyProperties(func, ResourceBean.class); //判断当前角色是否拥有这个功能权限 funcBean.setChecked(isOwnFunc(roleOwnFuncResources,func.getId())); functions.add(funcBean); } } return functions; } /** * 判断角色是否拥有该功能权限 * @author Leejean * @create 2014年8月26日上午9:44:25 * @param roleOwnFuncResources 用户拥有的功能列表 * @param id 功能id * @return */ private boolean isOwnFunc(List roleOwnFuncResources, String id) { for (SysResource sysResource : roleOwnFuncResources) { if(sysResource.getId().equals(id)){ return true; } } return false; } /** * 判断角色是否拥有此目录权限 * @author Leejean * @create 2014年8月26日上午9:40:16 * @param sysResources 目录s * @param id * @return */ private boolean isAssignedResource(List roleOwnMenuResources, String id) { for (SysResource sysResource : roleOwnMenuResources) { if(sysResource.getId().equals(id)){ return true; } } return false; } /*@Override public List getOrgUsers(String id) throws Exception { //获得所有用户 List allUsers = sysUserDao.query("from SysUser o where o.del=0 and o.enable=1 "); //获得属于该机构的用户 List assignedUsers =sysUserDao.query("select o.sysUser from SysUserOrganization o where o.sysOrganization.id=? ",id); List userBeans = new ArrayList(); for (SysUser sysUser : allUsers) { UserBean userBean = new UserBean(); String uid=sysUser.getId(); userBean.setId(id); userBean.setGender(sysUser.getGender()); userBean.setEno(sysUser.getEno()); userBean.setName(sysUser.getName()); userBean.setAssigned(userIsAssigned(assignedUsers,uid)); userBeans.add(userBean); } return userBeans; }*/ @Override public List getOrgUnAssignedUsers(String oid,String name) throws Exception { if(name==null)name=""; String hql= "from SysUser o where o.del=0 and o.enable=1 and (o.name like '%"+name+"%' or o.loginName like '%"+name+"%' or o.eno like '%"+name+"%' ) and o.id not in (select oo.sysUser.id from SysUserOrganization oo where oo.sysOrganization.id=?)"; //获得所有用户 List rows = sysUserDao.query(hql,oid); return BeanConvertor.copyList(rows,UserBean.class); } /** * 辨别用户是否属于某个机构 * @author Leejean * @create 2014年8月28日下午6:47:48 * @param assignedUsers * @param id 用户id * @return */ /*private boolean userIsAssigned(List assignedUsers, String id) { for (SysUser sysUser : assignedUsers) { if(sysUser.getId().equals(id)){ return true; } } return false; }*/ @Override public List getOrgAssignedUsers(String oid) throws Exception { String hql= "from SysUserOrganization o where o.sysOrganization.id=?"; //获得所有用户 List rows = sysUserDao.query("select o.sysUser ".concat(hql), oid); return BeanConvertor.copyList(rows,UserBean.class); } @LogAnno(operateType = "给机构分配用户") @Override public void assignUsersToOrg(String id, String ids) throws Exception { //清除 sysUserOrganizationDao.deleteByParams("delete from SysUserOrganization o where o.sysOrganization.id = ?",id); for (String uid : StringUtil.splitToStringList(ids, ",")) { SysUserOrganization o = new SysUserOrganization(new SysUser(uid), new SysOrganization(id)); FillUserInfoUtil.fillCreateUserInfo(o,request); sysUserOrganizationDao.save(o); } } @Override public List getOrgsByUser(String id) throws Exception { //查询所有组织机构 List sysOrganizations= sysOrganizationDao.query("from SysOrganization o where o.del=0 and o.enable=1 order by o.seq asc"); //查询当前用户拥有的组织机构 List organizations = sysOrganizationDao.query("select o.sysOrganization from SysUserOrganization o where o.sysUser.id = ?",id); List trees = new ArrayList(); for (SysOrganization organization : sysOrganizations) { Tree tree = new Tree(); tree.setText(organization.getName()); tree.setId(organization.getId()); tree.setIconCls(organization.getIconCls()); tree.setChecked(isAssignedOrg(organizations,organization.getId())); if(organization.getSysOrganization()!=null){ tree.setPid(organization.getSysOrganization().getId()); } trees.add(tree); } return trees; } /** * 是否拥有此组织机构 * @author Leejean * @create 2014-8-19下午06:36:21 * @param sysUserRoles * @param id * @return */ private boolean isAssignedOrg(List organizations, String id) { for (SysOrganization organization : organizations) { if(organization.getId().equals(id)){ return true; } } return false; } @LogAnno(operateType = "给用户分配组织机构") @Override public void assignOrg(String id, String ids) { //清除用户所有组织机构 sysUserOrganizationDao.deleteByParams("delete from SysUserOrganization o where o.sysUser.id = ?",id); //批量添加 for (String oid : StringUtil.splitToStringList(ids, ",")) { SysUserOrganization o = new SysUserOrganization(new SysUser(id), new SysOrganization(oid)); FillUserInfoUtil.fillCreateUserInfo(o,request); sysUserOrganizationDao.save(o); } } @LogAnno(operateType = "用户组织机构批量分配") @Override public void batchAssignOrg(String uids, String oids) { //清除用户所有组织机构 //批量添加 for (String uid : StringUtil.splitToStringList(uids, ",")) { sysUserOrganizationDao.deleteByParams("delete from SysUserOrganization o where o.sysUser.id = ?",uid); for (String oid : StringUtil.splitToStringList(oids, ",")) { SysUserOrganization o = new SysUserOrganization(new SysUser(uid), new SysOrganization(oid)); FillUserInfoUtil.fillCreateUserInfo(o,request); sysUserOrganizationDao.save(o); } } } }