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(0); 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())&&org.getChildType()!=null){ if(org.getOrgType().equals("department") &&orgType.getChildType().equals("company")){ return -2; }else if(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(-1); 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,orgIds); return trees; } public static List getOrgTree(List list, Integer id, Integer level, Set set) { 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,set); OrgTree temPermission = new OrgTree(); BeanUtils.copyProperties(orgTree, temPermission); temPermission.setOrgs(chidren); temList.add(temPermission); level--; } } } if (temList.size() > 0) { return temList; } else { return null; } } }