package com.huaxu.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.huaxu.dao.OrgMapper; import com.huaxu.dto.OrgTree; import com.huaxu.entity.Org; import com.huaxu.model.LoginUser; import com.huaxu.model.ProgramItem; import com.huaxu.service.OrgService; import com.huaxu.util.UserUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import static com.google.common.collect.Lists.newArrayList; /** * 组织(Org表)服务实现类 * * @author makejava * @since 2020-10-26 14:55:43 */ @Service("orgService") public class OrgServiceImpl implements OrgService { @Autowired private OrgMapper orgMapper; /** * 通过ID查询单条数据 * * @param id 主键 * @return 实例对象 */ @Override public Org selectById(Integer id) { return this.orgMapper.selectById(id); } /** * 查询所有 * * @return 实例对象的集合 */ @Override public List selectAll() { return this.orgMapper.selectAll(); } /** * 根据条件查询 * * @return 实例对象的集合 */ @Override public List selectList(Org org) { return this.orgMapper.selectList(org); } /** * 新增数据 * * @param org 实例对象 * @return 实例对象 */ @Override public int insert(Org org) { LoginUser currentUser = UserUtil.getCurrentUser(); org.setTenantId(currentUser.getTenantId()); org.setCreateBy(currentUser.getUsername()); org.setDateCreate(new Date()); org.setStatus(1); if(org.getParentOrgId()==null){ org.setParentOrgId(0); } return this.orgMapper.insert(org); } /** * 批量新增 * * @param orgs 实例对象的集合 * @return 生效的条数 */ @Override public int batchInsert(List orgs) { return this.orgMapper.batchInsert(orgs); } /** * 修改数据 * * @param org 实例对象 * @return 实例对象 */ @Override public int update(Org org) { Org orgType = orgMapper.findOrgType(org); if(!orgType.getOrgType().equals(org.getOrgType())){ if(orgType.getChildType()!=null&&org.getOrgType().equals("department") &&orgType.getChildType().equals("company")){ return -2; }else if(orgType.getParentType()!=null&&org.getOrgType().equals("company")&& orgType.getParentType().equals("department")){ return -3; } } //删除前先查询机构下是否还有用户 LoginUser currentUser = UserUtil.getCurrentUser(); org.setUpdateBy(currentUser.getUsername()); return this.orgMapper.update(org); } /** * 通过主键删除数据 * * @param id 主键 * @return 是否成功 */ @Override public int deleteById(Integer id) { return this.orgMapper.deleteById(id); } @Override public List deleteAll(List ids) { Listfail=new ArrayList<>(); ids.forEach(id->{ Org org=new Org(); org.setId(id); Org orgUser = orgMapper.findOrgUser(org); if(orgUser==null){ org.setStatus(0); orgMapper.update(org); }else { fail.add(orgUser.getOrgName()); } }); return fail; } /** * 查询总数据数 * * @return 数据总数 */ @Override public int count() { return this.orgMapper.count(); } /** * 分页查询 * * @return 对象列表 */ @Override public IPage selectPage(Org org, IPage page) { LoginUser currentUser = UserUtil.getCurrentUser(); org.setTenantId(currentUser.getTenantId()); return this.orgMapper.selectPage(page, org); } @Override public List getTrees(Org org) { LoginUser currentUser = UserUtil.getCurrentUser(); org.setTenantId(currentUser.getTenantId()); /* SetorgIds=new HashSet<>(); List programItemList = currentUser.getProgramItemList(); if(programItemList!=null){ programItemList.forEach(programItem -> { orgIds.add(programItem.getOrgId()); }); }*/ List trees=orgMapper.selectTrees(org); trees=getOrgTree(trees,0,1); return trees; } @Override public List getUserTrees(Org org) { LoginUser currentUser = UserUtil.getCurrentUser(); org.setTenantId(currentUser.getTenantId()); /* SetorgIds=new HashSet<>(); List programItemList = currentUser.getProgramItemList(); if(programItemList!=null){ programItemList.forEach(programItem -> { orgIds.add(programItem.getOrgId()); }); }*/ List trees=new ArrayList<>(); if("company".equals(org.getOrgType())){ if(currentUser.getDepartmentId()==null){ trees=orgMapper.selectTrees(org); trees=getOrgTreeByOrg(trees,currentUser.getCompanyId()); }else{ org.setId(currentUser.getCompanyId()); trees=orgMapper.selectTrees(org); } }else{ if(currentUser.getDepartmentId()!=null){ org.setOrgType("department"); trees=orgMapper.selectTrees(org); trees=getOrgTreeByOrg(trees,currentUser.getDepartmentId()); } } return trees; } List getOrgTreeByOrg(List trees,int id){ OrgTree fatherOrgTree=new OrgTree(); for (OrgTree tree : trees) { if(tree.getId()==id){ fatherOrgTree=tree; break; } } trees=getOrgTree(trees,id,1); fatherOrgTree.setOrgs(trees); List result=new ArrayList<>(); result.add(fatherOrgTree); trees=result; return trees; } public List getOrgTree(List list, Integer id, Integer level) { List temList = newArrayList(); if (list != null) { for (OrgTree orgTree : list) { if (id.equals(orgTree.getParentOrgId())) { //拥有权限可以显示 /* if(!set.contains(id)){ orgTree.setDisplay(true); }*/ List chidren = getOrgTree(list, orgTree.getId(), ++level); OrgTree temPermission = new OrgTree(); BeanUtils.copyProperties(orgTree, temPermission); temPermission.setOrgs(chidren); temList.add(temPermission); level--; } } } if (temList.size() > 0) { return temList; } else { return null; } } }