package com.ots.project.system.dept.service; import com.ots.common.constant.UserConstants; import com.ots.common.exception.BusinessException; import com.ots.common.utils.StringUtils; import com.ots.common.utils.security.ShiroUtils; import com.ots.framework.aspectj.lang.annotation.DataScope; import com.ots.framework.web.domain.Ztree; import com.ots.project.system.dept.domain.Dept; import com.ots.project.system.dept.mapper.DeptMapper; import com.ots.project.system.role.domain.Role; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; @Service public class DeptServiceImpl implements IDeptService { @Autowired private DeptMapper deptMapper; @Override @DataScope(deptAlias = "d") public List selectDeptList(Dept dept) { return deptMapper.selectDeptList(dept); } @Override @DataScope(deptAlias = "d") public List selectDeptTree(Dept dept) { List deptList = deptMapper.selectDeptList(dept); List ztrees = initZtree(deptList); return ztrees; } @Override public List roleDeptTreeData(Role role) { Long roleId = role.getRoleId(); List ztrees = new ArrayList(); List deptList = selectDeptList(new Dept()); if (StringUtils.isNotNull(roleId)) { List roleDeptList = deptMapper.selectRoleDeptTree(roleId); ztrees = initZtree(deptList, roleDeptList); } else { ztrees = initZtree(deptList); } return ztrees; } public List initZtree(List deptList) { return initZtree(deptList, null); } public List initZtree(List deptList, List roleDeptList) { List ztrees = new ArrayList(); boolean isCheck = StringUtils.isNotNull(roleDeptList); for (Dept dept : deptList) { if (UserConstants.DEPT_NORMAL.equals(dept.getStatus())) { Ztree ztree = new Ztree(); ztree.setId(dept.getDeptId()); ztree.setpId(dept.getParentId()); ztree.setName(dept.getDeptName()); ztree.setTitle(dept.getDeptName()); if (isCheck) { ztree.setChecked(roleDeptList.contains(dept.getDeptId() + dept.getDeptName())); } ztrees.add(ztree); } } return ztrees; } @Override public int selectDeptCount(Long parentId) { Dept dept = new Dept(); dept.setParentId(parentId); return deptMapper.selectDeptCount(dept); } @Override public boolean checkDeptExistUser(Long deptId) { int result = deptMapper.checkDeptExistUser(deptId); return result > 0 ? true : false; } @Override public int deleteDeptById(Long deptId) { return deptMapper.deleteDeptById(deptId); } @Override public int insertDept(Dept dept) { Dept info = deptMapper.selectDeptById(dept.getParentId()); if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) { throw new BusinessException("部门停用,不允许新增"); } dept.setCreateBy(ShiroUtils.getLoginName()); dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); return deptMapper.insertDept(dept); } @Override @Transactional public int updateDept(Dept dept) { Dept newParentDept = deptMapper.selectDeptById(dept.getParentId()); Dept oldDept = selectDeptById(dept.getDeptId()); if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept)) { String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId(); String oldAncestors = oldDept.getAncestors(); dept.setAncestors(newAncestors); updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); } dept.setUpdateBy(ShiroUtils.getLoginName()); int result = deptMapper.updateDept(dept); if (UserConstants.DEPT_NORMAL.equals(dept.getStatus())) { updateParentDeptStatus(dept); } return result; } private void updateParentDeptStatus(Dept dept) { String updateBy = dept.getUpdateBy(); dept = deptMapper.selectDeptById(dept.getDeptId()); dept.setUpdateBy(updateBy); deptMapper.updateDeptStatus(dept); } public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) { List children = deptMapper.selectChildrenDeptById(deptId); for (Dept child : children) { child.setAncestors(child.getAncestors().replace(oldAncestors, newAncestors)); } if (children.size() > 0) { deptMapper.updateDeptChildren(children); } } public void updateDeptChildren(Long deptId, String ancestors) { Dept dept = new Dept(); dept.setParentId(deptId); List childrens = deptMapper.selectDeptList(dept); for (Dept children : childrens) { children.setAncestors(ancestors + "," + dept.getParentId()); } if (childrens.size() > 0) { deptMapper.updateDeptChildren(childrens); } } @Override public Dept selectDeptById(Long deptId) { return deptMapper.selectDeptById(deptId); } @Override public String checkDeptNameUnique(Dept dept) { Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId(); Dept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId()); if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) { return UserConstants.DEPT_NAME_NOT_UNIQUE; } return UserConstants.DEPT_NAME_UNIQUE; } }