feat: Enhance department management with parent ID validation and department scope handling
This commit is contained in:
@@ -4,6 +4,7 @@ import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.common.annotation.DataScope;
|
||||
@@ -211,7 +212,17 @@ public class SysDeptServiceImpl implements ISysDeptService
|
||||
@Override
|
||||
public int insertDept(SysDept dept)
|
||||
{
|
||||
if (StringUtils.isNull(dept.getParentId()))
|
||||
{
|
||||
throw new ServiceException("上级部门不能为空");
|
||||
}
|
||||
|
||||
SysDept info = deptMapper.selectDeptById(dept.getParentId());
|
||||
if (StringUtils.isNull(info) || !"0".equals(info.getDelFlag()))
|
||||
{
|
||||
throw new ServiceException("上级部门不存在");
|
||||
}
|
||||
|
||||
// 如果父节点不为正常状态,则不允许新增子节点
|
||||
if (!UserConstants.DEPT_NORMAL.equals(info.getStatus()))
|
||||
{
|
||||
@@ -230,13 +241,36 @@ public class SysDeptServiceImpl implements ISysDeptService
|
||||
@Override
|
||||
public int updateDept(SysDept dept)
|
||||
{
|
||||
if (StringUtils.isNull(dept.getDeptId()))
|
||||
{
|
||||
throw new ServiceException("部门编号不能为空");
|
||||
}
|
||||
if (StringUtils.isNull(dept.getParentId()))
|
||||
{
|
||||
throw new ServiceException("上级部门不能为空");
|
||||
}
|
||||
|
||||
SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId());
|
||||
SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId());
|
||||
if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept))
|
||||
if (StringUtils.isNull(oldDept))
|
||||
{
|
||||
throw new ServiceException("部门不存在");
|
||||
}
|
||||
if (StringUtils.isNull(newParentDept) || !"0".equals(newParentDept.getDelFlag()))
|
||||
{
|
||||
throw new ServiceException("上级部门不存在");
|
||||
}
|
||||
if (dept.getDeptId().equals(newParentDept.getDeptId())
|
||||
|| ArrayUtils.contains(StringUtils.split(newParentDept.getAncestors(), ","), dept.getDeptId().toString()))
|
||||
{
|
||||
throw new ServiceException("不能选择当前部门或其下级部门作为上级部门");
|
||||
}
|
||||
|
||||
String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId();
|
||||
String oldAncestors = oldDept.getAncestors();
|
||||
dept.setAncestors(newAncestors);
|
||||
if (!StringUtils.equals(newAncestors, oldAncestors))
|
||||
{
|
||||
String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId();
|
||||
String oldAncestors = oldDept.getAncestors();
|
||||
dept.setAncestors(newAncestors);
|
||||
updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors);
|
||||
}
|
||||
int result = deptMapper.updateDept(dept);
|
||||
|
||||
@@ -59,7 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</select>
|
||||
|
||||
<select id="selectDeptById" parameterType="Long" resultMap="SysDeptResult">
|
||||
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status,
|
||||
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag,
|
||||
(select dept_name from sys_dept where dept_id = d.parent_id) parent_name
|
||||
from sys_dept d
|
||||
where d.dept_id = #{deptId}
|
||||
@@ -156,4 +156,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
update sys_dept set del_flag = '2' where dept_id = #{deptId}
|
||||
</delete>
|
||||
|
||||
</mapper>
|
||||
</mapper>
|
||||
|
||||
@@ -83,7 +83,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
AND date_format(u.create_time,'%Y%m%d') <= date_format(#{params.endTime},'%Y%m%d')
|
||||
</if>
|
||||
<if test="deptId != null and deptId != 0">
|
||||
AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) ))
|
||||
AND (
|
||||
u.dept_id = #{deptId}
|
||||
<if test="params.deptScope != null and params.deptScope == 'CHILDREN'">
|
||||
OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) )
|
||||
</if>
|
||||
)
|
||||
</if>
|
||||
<if test="idCard != null and idCard != ''">
|
||||
AND u.id_card = #{idCard}
|
||||
@@ -266,4 +271,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
where ur.user_id = #{userId}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user