mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-11-26 17:21:53 +08:00
完成部门模块的迁移
This commit is contained in:
parent
7f171d14a4
commit
e4fd022ce1
@ -1,163 +0,0 @@
|
|||||||
package com.ruoyi.web.controller.system;
|
|
||||||
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PutMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import com.ruoyi.common.annotation.Log;
|
|
||||||
import com.ruoyi.common.constant.UserConstants;
|
|
||||||
import com.ruoyi.common.core.controller.BaseController;
|
|
||||||
import com.ruoyi.common.core.domain.AjaxResult;
|
|
||||||
import com.ruoyi.common.core.domain.entity.SysDept;
|
|
||||||
import com.ruoyi.common.enums.BusinessType;
|
|
||||||
import com.ruoyi.common.utils.SecurityUtils;
|
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
|
||||||
import com.ruoyi.system.service.ISysDeptService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 部门信息
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
*/
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/system/dept")
|
|
||||||
public class SysDeptController extends BaseController
|
|
||||||
{
|
|
||||||
@Autowired
|
|
||||||
private ISysDeptService deptService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取部门列表
|
|
||||||
*/
|
|
||||||
@PreAuthorize("@ss.hasPermi('system:dept:list')")
|
|
||||||
@GetMapping("/list")
|
|
||||||
public AjaxResult list(SysDept dept)
|
|
||||||
{
|
|
||||||
List<SysDept> depts = deptService.selectDeptList(dept);
|
|
||||||
return AjaxResult.success(depts);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询部门列表(排除节点)
|
|
||||||
*/
|
|
||||||
@PreAuthorize("@ss.hasPermi('system:dept:list')")
|
|
||||||
@GetMapping("/list/exclude/{deptId}")
|
|
||||||
public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId)
|
|
||||||
{
|
|
||||||
List<SysDept> depts = deptService.selectDeptList(new SysDept());
|
|
||||||
Iterator<SysDept> it = depts.iterator();
|
|
||||||
while (it.hasNext())
|
|
||||||
{
|
|
||||||
SysDept d = (SysDept) it.next();
|
|
||||||
if (d.getDeptId().intValue() == deptId
|
|
||||||
|| ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + ""))
|
|
||||||
{
|
|
||||||
it.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return AjaxResult.success(depts);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据部门编号获取详细信息
|
|
||||||
*/
|
|
||||||
@PreAuthorize("@ss.hasPermi('system:dept:query')")
|
|
||||||
@GetMapping(value = "/{deptId}")
|
|
||||||
public AjaxResult getInfo(@PathVariable Long deptId)
|
|
||||||
{
|
|
||||||
return AjaxResult.success(deptService.selectDeptById(deptId));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取部门下拉树列表
|
|
||||||
*/
|
|
||||||
@GetMapping("/treeselect")
|
|
||||||
public AjaxResult treeselect(SysDept dept)
|
|
||||||
{
|
|
||||||
List<SysDept> depts = deptService.selectDeptList(dept);
|
|
||||||
return AjaxResult.success(deptService.buildDeptTreeSelect(depts));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 加载对应角色部门列表树
|
|
||||||
*/
|
|
||||||
@GetMapping(value = "/roleDeptTreeselect/{roleId}")
|
|
||||||
public AjaxResult roleDeptTreeselect(@PathVariable("roleId") Long roleId)
|
|
||||||
{
|
|
||||||
List<SysDept> depts = deptService.selectDeptList(new SysDept());
|
|
||||||
AjaxResult ajax = AjaxResult.success();
|
|
||||||
ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
|
|
||||||
ajax.put("depts", deptService.buildDeptTreeSelect(depts));
|
|
||||||
return ajax;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增部门
|
|
||||||
*/
|
|
||||||
@PreAuthorize("@ss.hasPermi('system:dept:add')")
|
|
||||||
@Log(title = "部门管理", businessType = BusinessType.INSERT)
|
|
||||||
@PostMapping
|
|
||||||
public AjaxResult add(@Validated @RequestBody SysDept dept)
|
|
||||||
{
|
|
||||||
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
|
|
||||||
{
|
|
||||||
return AjaxResult.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
|
|
||||||
}
|
|
||||||
dept.setCreateBy(SecurityUtils.getUsername());
|
|
||||||
return toAjax(deptService.insertDept(dept));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改部门
|
|
||||||
*/
|
|
||||||
@PreAuthorize("@ss.hasPermi('system:dept:edit')")
|
|
||||||
@Log(title = "部门管理", businessType = BusinessType.UPDATE)
|
|
||||||
@PutMapping
|
|
||||||
public AjaxResult edit(@Validated @RequestBody SysDept dept)
|
|
||||||
{
|
|
||||||
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
|
|
||||||
{
|
|
||||||
return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
|
|
||||||
}
|
|
||||||
else if (dept.getParentId().equals(dept.getDeptId()))
|
|
||||||
{
|
|
||||||
return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
|
|
||||||
}
|
|
||||||
else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus())
|
|
||||||
&& deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0)
|
|
||||||
{
|
|
||||||
return AjaxResult.error("该部门包含未停用的子部门!");
|
|
||||||
}
|
|
||||||
dept.setUpdateBy(SecurityUtils.getUsername());
|
|
||||||
return toAjax(deptService.updateDept(dept));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除部门
|
|
||||||
*/
|
|
||||||
@PreAuthorize("@ss.hasPermi('system:dept:remove')")
|
|
||||||
@Log(title = "部门管理", businessType = BusinessType.DELETE)
|
|
||||||
@DeleteMapping("/{deptId}")
|
|
||||||
public AjaxResult remove(@PathVariable Long deptId)
|
|
||||||
{
|
|
||||||
if (deptService.hasChildByDeptId(deptId))
|
|
||||||
{
|
|
||||||
return AjaxResult.error("存在下级部门,不允许删除");
|
|
||||||
}
|
|
||||||
if (deptService.checkDeptExistUser(deptId))
|
|
||||||
{
|
|
||||||
return AjaxResult.error("部门存在用户,不允许删除");
|
|
||||||
}
|
|
||||||
return toAjax(deptService.deleteDeptById(deptId));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
package com.ruoyi.common.core.domain;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tree基类
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
*/
|
|
||||||
public class TreeEntity extends BaseEntity
|
|
||||||
{
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/** 父菜单名称 */
|
|
||||||
private String parentName;
|
|
||||||
|
|
||||||
/** 父菜单ID */
|
|
||||||
private Long parentId;
|
|
||||||
|
|
||||||
/** 显示顺序 */
|
|
||||||
private Integer orderNum;
|
|
||||||
|
|
||||||
/** 祖级列表 */
|
|
||||||
private String ancestors;
|
|
||||||
|
|
||||||
/** 子部门 */
|
|
||||||
private List<?> children = new ArrayList<>();
|
|
||||||
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
package com.ruoyi.common.core.domain;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
|
||||||
import com.ruoyi.common.core.domain.entity.SysDept;
|
|
||||||
import com.ruoyi.common.core.domain.entity.SysMenu;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Treeselect树结构实体类
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
*/
|
|
||||||
public class TreeSelect implements Serializable {
|
|
||||||
/** 节点ID */
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
/** 节点名称 */
|
|
||||||
private String label;
|
|
||||||
|
|
||||||
/** 子节点 */
|
|
||||||
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
|
||||||
private List<TreeSelect> children;
|
|
||||||
|
|
||||||
}
|
|
@ -1,84 +0,0 @@
|
|||||||
package com.ruoyi.common.core.domain.entity;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import javax.validation.constraints.Email;
|
|
||||||
import javax.validation.constraints.NotBlank;
|
|
||||||
import javax.validation.constraints.Size;
|
|
||||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
|
||||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
|
||||||
import com.ruoyi.common.core.domain.BaseEntity;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 部门表 sys_dept
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
*/
|
|
||||||
public class SysDept extends BaseEntity
|
|
||||||
{
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/** 部门ID */
|
|
||||||
private Long deptId;
|
|
||||||
|
|
||||||
/** 父部门ID */
|
|
||||||
private Long parentId;
|
|
||||||
|
|
||||||
/** 祖级列表 */
|
|
||||||
private String ancestors;
|
|
||||||
|
|
||||||
/** 部门名称 */
|
|
||||||
private String deptName;
|
|
||||||
|
|
||||||
/** 显示顺序 */
|
|
||||||
private String orderNum;
|
|
||||||
|
|
||||||
/** 负责人 */
|
|
||||||
private String leader;
|
|
||||||
|
|
||||||
/** 联系电话 */
|
|
||||||
private String phone;
|
|
||||||
|
|
||||||
/** 邮箱 */
|
|
||||||
private String email;
|
|
||||||
|
|
||||||
/** 部门状态:0正常,1停用 */
|
|
||||||
private String status;
|
|
||||||
|
|
||||||
/** 删除标志(0代表存在 2代表删除) */
|
|
||||||
private String delFlag;
|
|
||||||
|
|
||||||
/** 父部门名称 */
|
|
||||||
private String parentName;
|
|
||||||
|
|
||||||
/** 子部门 */
|
|
||||||
private List<SysDept> children = new ArrayList<SysDept>();
|
|
||||||
|
|
||||||
|
|
||||||
@NotBlank(message = "部门名称不能为空")
|
|
||||||
@Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
|
|
||||||
public String getDeptName()
|
|
||||||
{
|
|
||||||
return deptName;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotBlank(message = "显示顺序不能为空")
|
|
||||||
public String getOrderNum()
|
|
||||||
{
|
|
||||||
return orderNum;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符")
|
|
||||||
public String getPhone()
|
|
||||||
{
|
|
||||||
return phone;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Email(message = "邮箱格式不正确")
|
|
||||||
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
|
|
||||||
public String getEmail()
|
|
||||||
{
|
|
||||||
return email;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,109 +0,0 @@
|
|||||||
package com.ruoyi.system.service;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import com.ruoyi.common.core.domain.TreeSelect;
|
|
||||||
import com.ruoyi.common.core.domain.entity.SysDept;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 部门管理 服务层
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
*/
|
|
||||||
public interface ISysDeptService
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* 查询部门管理数据
|
|
||||||
*
|
|
||||||
* @param dept 部门信息
|
|
||||||
* @return 部门信息集合
|
|
||||||
*/
|
|
||||||
public List<SysDept> selectDeptList(SysDept dept);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 构建前端所需要树结构
|
|
||||||
*
|
|
||||||
* @param depts 部门列表
|
|
||||||
* @return 树结构列表
|
|
||||||
*/
|
|
||||||
public List<SysDept> buildDeptTree(List<SysDept> depts);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 构建前端所需要下拉树结构
|
|
||||||
*
|
|
||||||
* @param depts 部门列表
|
|
||||||
* @return 下拉树结构列表
|
|
||||||
*/
|
|
||||||
public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据角色ID查询部门树信息
|
|
||||||
*
|
|
||||||
* @param roleId 角色ID
|
|
||||||
* @return 选中部门列表
|
|
||||||
*/
|
|
||||||
public List<Integer> selectDeptListByRoleId(Long roleId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据部门ID查询信息
|
|
||||||
*
|
|
||||||
* @param deptId 部门ID
|
|
||||||
* @return 部门信息
|
|
||||||
*/
|
|
||||||
public SysDept selectDeptById(Long deptId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据ID查询所有子部门(正常状态)
|
|
||||||
*
|
|
||||||
* @param deptId 部门ID
|
|
||||||
* @return 子部门数
|
|
||||||
*/
|
|
||||||
public int selectNormalChildrenDeptById(Long deptId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 是否存在部门子节点
|
|
||||||
*
|
|
||||||
* @param deptId 部门ID
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public boolean hasChildByDeptId(Long deptId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询部门是否存在用户
|
|
||||||
*
|
|
||||||
* @param deptId 部门ID
|
|
||||||
* @return 结果 true 存在 false 不存在
|
|
||||||
*/
|
|
||||||
public boolean checkDeptExistUser(Long deptId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 校验部门名称是否唯一
|
|
||||||
*
|
|
||||||
* @param dept 部门信息
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public String checkDeptNameUnique(SysDept dept);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增保存部门信息
|
|
||||||
*
|
|
||||||
* @param dept 部门信息
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public int insertDept(SysDept dept);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改保存部门信息
|
|
||||||
*
|
|
||||||
* @param dept 部门信息
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public int updateDept(SysDept dept);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除部门管理信息
|
|
||||||
*
|
|
||||||
* @param deptId 部门ID
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
public int deleteDeptById(Long deptId);
|
|
||||||
}
|
|
@ -1,306 +0,0 @@
|
|||||||
package com.ruoyi.system.service.impl;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import com.ruoyi.common.annotation.DataScope;
|
|
||||||
import com.ruoyi.common.constant.UserConstants;
|
|
||||||
import com.ruoyi.common.core.domain.TreeSelect;
|
|
||||||
import com.ruoyi.common.core.domain.entity.SysDept;
|
|
||||||
import com.ruoyi.common.core.domain.entity.SysRole;
|
|
||||||
import com.ruoyi.common.exception.CustomException;
|
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
|
||||||
import com.ruoyi.system.mapper.SysDeptMapper;
|
|
||||||
import com.ruoyi.system.mapper.SysRoleMapper;
|
|
||||||
import com.ruoyi.system.service.ISysDeptService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 部门管理 服务实现
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class SysDeptServiceImpl implements ISysDeptService
|
|
||||||
{
|
|
||||||
@Autowired
|
|
||||||
private SysDeptMapper deptMapper;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private SysRoleMapper roleMapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询部门管理数据
|
|
||||||
*
|
|
||||||
* @param dept 部门信息
|
|
||||||
* @return 部门信息集合
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
@DataScope(deptAlias = "d")
|
|
||||||
public List<SysDept> selectDeptList(SysDept dept)
|
|
||||||
{
|
|
||||||
return deptMapper.selectDeptList(dept);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 构建前端所需要树结构
|
|
||||||
*
|
|
||||||
* @param depts 部门列表
|
|
||||||
* @return 树结构列表
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public List<SysDept> buildDeptTree(List<SysDept> depts)
|
|
||||||
{
|
|
||||||
List<SysDept> returnList = new ArrayList<SysDept>();
|
|
||||||
List<Long> tempList = new ArrayList<Long>();
|
|
||||||
for (SysDept dept : depts)
|
|
||||||
{
|
|
||||||
tempList.add(dept.getDeptId());
|
|
||||||
}
|
|
||||||
for (Iterator<SysDept> iterator = depts.iterator(); iterator.hasNext();)
|
|
||||||
{
|
|
||||||
SysDept dept = (SysDept) iterator.next();
|
|
||||||
// 如果是顶级节点, 遍历该父节点的所有子节点
|
|
||||||
if (!tempList.contains(dept.getParentId()))
|
|
||||||
{
|
|
||||||
recursionFn(depts, dept);
|
|
||||||
returnList.add(dept);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (returnList.isEmpty())
|
|
||||||
{
|
|
||||||
returnList = depts;
|
|
||||||
}
|
|
||||||
return returnList;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 构建前端所需要下拉树结构
|
|
||||||
*
|
|
||||||
* @param depts 部门列表
|
|
||||||
* @return 下拉树结构列表
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts)
|
|
||||||
{
|
|
||||||
List<SysDept> deptTrees = buildDeptTree(depts);
|
|
||||||
return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据角色ID查询部门树信息
|
|
||||||
*
|
|
||||||
* @param roleId 角色ID
|
|
||||||
* @return 选中部门列表
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public List<Integer> selectDeptListByRoleId(Long roleId)
|
|
||||||
{
|
|
||||||
SysRole role = roleMapper.selectRoleById(roleId);
|
|
||||||
return deptMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据部门ID查询信息
|
|
||||||
*
|
|
||||||
* @param deptId 部门ID
|
|
||||||
* @return 部门信息
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public SysDept selectDeptById(Long deptId)
|
|
||||||
{
|
|
||||||
return deptMapper.selectDeptById(deptId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据ID查询所有子部门(正常状态)
|
|
||||||
*
|
|
||||||
* @param deptId 部门ID
|
|
||||||
* @return 子部门数
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int selectNormalChildrenDeptById(Long deptId)
|
|
||||||
{
|
|
||||||
return deptMapper.selectNormalChildrenDeptById(deptId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 是否存在子节点
|
|
||||||
*
|
|
||||||
* @param deptId 部门ID
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public boolean hasChildByDeptId(Long deptId)
|
|
||||||
{
|
|
||||||
int result = deptMapper.hasChildByDeptId(deptId);
|
|
||||||
return result > 0 ? true : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询部门是否存在用户
|
|
||||||
*
|
|
||||||
* @param deptId 部门ID
|
|
||||||
* @return 结果 true 存在 false 不存在
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public boolean checkDeptExistUser(Long deptId)
|
|
||||||
{
|
|
||||||
int result = deptMapper.checkDeptExistUser(deptId);
|
|
||||||
return result > 0 ? true : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 校验部门名称是否唯一
|
|
||||||
*
|
|
||||||
* @param dept 部门信息
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public String checkDeptNameUnique(SysDept dept)
|
|
||||||
{
|
|
||||||
Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId();
|
|
||||||
SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId());
|
|
||||||
if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue())
|
|
||||||
{
|
|
||||||
return UserConstants.NOT_UNIQUE;
|
|
||||||
}
|
|
||||||
return UserConstants.UNIQUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增保存部门信息
|
|
||||||
*
|
|
||||||
* @param dept 部门信息
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int insertDept(SysDept dept)
|
|
||||||
{
|
|
||||||
SysDept info = deptMapper.selectDeptById(dept.getParentId());
|
|
||||||
// 如果父节点不为正常状态,则不允许新增子节点
|
|
||||||
if (!UserConstants.DEPT_NORMAL.equals(info.getStatus()))
|
|
||||||
{
|
|
||||||
throw new CustomException("部门停用,不允许新增");
|
|
||||||
}
|
|
||||||
dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
|
|
||||||
return deptMapper.insertDept(dept);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改保存部门信息
|
|
||||||
*
|
|
||||||
* @param dept 部门信息
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int updateDept(SysDept dept)
|
|
||||||
{
|
|
||||||
SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId());
|
|
||||||
SysDept oldDept = deptMapper.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);
|
|
||||||
}
|
|
||||||
int result = deptMapper.updateDept(dept);
|
|
||||||
if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()))
|
|
||||||
{
|
|
||||||
// 如果该部门是启用状态,则启用该部门的所有上级部门
|
|
||||||
updateParentDeptStatus(dept);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改该部门的父级部门状态
|
|
||||||
*
|
|
||||||
* @param dept 当前部门
|
|
||||||
*/
|
|
||||||
private void updateParentDeptStatus(SysDept dept)
|
|
||||||
{
|
|
||||||
String updateBy = dept.getUpdateBy();
|
|
||||||
dept = deptMapper.selectDeptById(dept.getDeptId());
|
|
||||||
dept.setUpdateBy(updateBy);
|
|
||||||
deptMapper.updateDeptStatus(dept);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改子元素关系
|
|
||||||
*
|
|
||||||
* @param deptId 被修改的部门ID
|
|
||||||
* @param newAncestors 新的父ID集合
|
|
||||||
* @param oldAncestors 旧的父ID集合
|
|
||||||
*/
|
|
||||||
public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors)
|
|
||||||
{
|
|
||||||
List<SysDept> children = deptMapper.selectChildrenDeptById(deptId);
|
|
||||||
for (SysDept child : children)
|
|
||||||
{
|
|
||||||
child.setAncestors(child.getAncestors().replace(oldAncestors, newAncestors));
|
|
||||||
}
|
|
||||||
if (children.size() > 0)
|
|
||||||
{
|
|
||||||
deptMapper.updateDeptChildren(children);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除部门管理信息
|
|
||||||
*
|
|
||||||
* @param deptId 部门ID
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int deleteDeptById(Long deptId)
|
|
||||||
{
|
|
||||||
return deptMapper.deleteDeptById(deptId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 递归列表
|
|
||||||
*/
|
|
||||||
private void recursionFn(List<SysDept> list, SysDept t)
|
|
||||||
{
|
|
||||||
// 得到子节点列表
|
|
||||||
List<SysDept> childList = getChildList(list, t);
|
|
||||||
t.setChildren(childList);
|
|
||||||
for (SysDept tChild : childList)
|
|
||||||
{
|
|
||||||
if (hasChild(list, tChild))
|
|
||||||
{
|
|
||||||
recursionFn(list, tChild);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 得到子节点列表
|
|
||||||
*/
|
|
||||||
private List<SysDept> getChildList(List<SysDept> list, SysDept t)
|
|
||||||
{
|
|
||||||
List<SysDept> tlist = new ArrayList<SysDept>();
|
|
||||||
Iterator<SysDept> it = list.iterator();
|
|
||||||
while (it.hasNext())
|
|
||||||
{
|
|
||||||
SysDept n = (SysDept) it.next();
|
|
||||||
if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue())
|
|
||||||
{
|
|
||||||
tlist.add(n);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return tlist;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 判断是否有子节点
|
|
||||||
*/
|
|
||||||
private boolean hasChild(List<SysDept> list, SysDept t)
|
|
||||||
{
|
|
||||||
return getChildList(list, t).size() > 0 ? true : false;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,85 +0,0 @@
|
|||||||
package com.ruoyi.system.service.impl;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
import com.ruoyi.common.annotation.DataScope;
|
|
||||||
import com.ruoyi.common.constant.UserConstants;
|
|
||||||
import com.ruoyi.common.core.domain.entity.SysRole;
|
|
||||||
import com.ruoyi.common.exception.CustomException;
|
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
|
||||||
import com.ruoyi.common.utils.spring.SpringUtils;
|
|
||||||
import com.ruoyi.system.domain.SysRoleDept;
|
|
||||||
import com.ruoyi.system.domain.SysRoleMenu;
|
|
||||||
import com.ruoyi.system.mapper.SysRoleDeptMapper;
|
|
||||||
import com.ruoyi.system.mapper.SysRoleMapper;
|
|
||||||
import com.ruoyi.system.mapper.SysRoleMenuMapper;
|
|
||||||
import com.ruoyi.system.mapper.SysUserRoleMapper;
|
|
||||||
import com.ruoyi.system.service.ISysRoleService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 角色 业务层处理
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class SysRoleServiceImpl implements ISysRoleService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据条件分页查询角色数据
|
|
||||||
*
|
|
||||||
* @param role 角色信息
|
|
||||||
* @return 角色数据集合信息
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
@DataScope(deptAlias = "d")
|
|
||||||
public List<SysRole> selectRoleList(SysRole role) {
|
|
||||||
return roleMapper.selectRoleList(role);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改数据权限信息
|
|
||||||
*
|
|
||||||
* @param role 角色信息
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public int authDataScope(SysRole role) {
|
|
||||||
// 修改角色信息
|
|
||||||
roleMapper.updateRole(role);
|
|
||||||
// 删除角色与部门关联
|
|
||||||
roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId());
|
|
||||||
// 新增角色和部门信息(数据权限)
|
|
||||||
return insertRoleDept(role);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除角色信息
|
|
||||||
*
|
|
||||||
* @param roleIds 需要删除的角色ID
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public int deleteRoleByIds(Long[] roleIds) {
|
|
||||||
for (Long roleId : roleIds) {
|
|
||||||
checkRoleAllowed(new SysRole(roleId));
|
|
||||||
SysRole role = selectRoleById(roleId);
|
|
||||||
if (countUserRoleByRoleId(roleId) > 0) {
|
|
||||||
throw new CustomException(String.format("%1$s已分配,不能删除", role.getRoleName()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 删除角色与菜单关联
|
|
||||||
roleMenuMapper.deleteRoleMenu(roleIds);
|
|
||||||
// 删除角色与部门关联
|
|
||||||
roleDeptMapper.deleteRoleDept(roleIds);
|
|
||||||
return roleMapper.deleteRoleByIds(roleIds);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,331 +0,0 @@
|
|||||||
package com.ruoyi.system.service.impl;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
import com.ruoyi.common.annotation.DataScope;
|
|
||||||
import com.ruoyi.common.constant.UserConstants;
|
|
||||||
import com.ruoyi.common.core.domain.entity.SysRole;
|
|
||||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
|
||||||
import com.ruoyi.common.exception.CustomException;
|
|
||||||
import com.ruoyi.common.utils.SecurityUtils;
|
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
|
||||||
import com.ruoyi.system.domain.SysPost;
|
|
||||||
import com.ruoyi.system.domain.SysUserPost;
|
|
||||||
import com.ruoyi.system.domain.SysUserRole;
|
|
||||||
import com.ruoyi.system.mapper.SysPostMapper;
|
|
||||||
import com.ruoyi.system.mapper.SysRoleMapper;
|
|
||||||
import com.ruoyi.system.mapper.SysUserMapper;
|
|
||||||
import com.ruoyi.system.mapper.SysUserPostMapper;
|
|
||||||
import com.ruoyi.system.mapper.SysUserRoleMapper;
|
|
||||||
import com.ruoyi.system.service.ISysConfigService;
|
|
||||||
import com.ruoyi.system.service.ISysUserService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 用户 业务层处理
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class SysUserServiceImpl implements ISysUserService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据条件分页查询用户列表
|
|
||||||
*
|
|
||||||
* @param user 用户信息
|
|
||||||
* @return 用户信息集合信息
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
@DataScope(deptAlias = "d", userAlias = "u")
|
|
||||||
public List<SysUser> selectUserList(SysUser user) {
|
|
||||||
return userMapper.selectUserList(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询用户所属角色组
|
|
||||||
*
|
|
||||||
* @param userName 用户名
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public String selectUserRoleGroup(String userName) {
|
|
||||||
List<SysRole> list = roleMapper.selectRolesByUserName(userName);
|
|
||||||
StringBuffer idsStr = new StringBuffer();
|
|
||||||
for (SysRole role : list) {
|
|
||||||
idsStr.append(role.getRoleName()).append(",");
|
|
||||||
}
|
|
||||||
if (StringUtils.isNotEmpty(idsStr.toString())) {
|
|
||||||
return idsStr.substring(0, idsStr.length() - 1);
|
|
||||||
}
|
|
||||||
return idsStr.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询用户所属岗位组
|
|
||||||
*
|
|
||||||
* @param userName 用户名
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public String selectUserPostGroup(String userName) {
|
|
||||||
List<SysPost> list = postMapper.selectPostsByUserName(userName);
|
|
||||||
StringBuffer idsStr = new StringBuffer();
|
|
||||||
for (SysPost post : list) {
|
|
||||||
idsStr.append(post.getPostName()).append(",");
|
|
||||||
}
|
|
||||||
if (StringUtils.isNotEmpty(idsStr.toString())) {
|
|
||||||
return idsStr.substring(0, idsStr.length() - 1);
|
|
||||||
}
|
|
||||||
return idsStr.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 校验email是否唯一
|
|
||||||
*
|
|
||||||
* @param user 用户信息
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public String checkEmailUnique(SysUser user) {
|
|
||||||
Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
|
|
||||||
SysUser info = userMapper.checkEmailUnique(user.getEmail());
|
|
||||||
if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
|
|
||||||
return UserConstants.NOT_UNIQUE;
|
|
||||||
}
|
|
||||||
return UserConstants.UNIQUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 校验用户是否允许操作
|
|
||||||
*
|
|
||||||
* @param user 用户信息
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void checkUserAllowed(SysUser user) {
|
|
||||||
if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) {
|
|
||||||
throw new CustomException("不允许操作超级管理员用户");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增保存用户信息
|
|
||||||
*
|
|
||||||
* @param user 用户信息
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public int insertUser(SysUser user) {
|
|
||||||
// 新增用户信息
|
|
||||||
int rows = userMapper.insertUser(user);
|
|
||||||
// 新增用户岗位关联
|
|
||||||
insertUserPost(user);
|
|
||||||
// 新增用户与角色管理
|
|
||||||
insertUserRole(user);
|
|
||||||
return rows;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改保存用户信息
|
|
||||||
*
|
|
||||||
* @param user 用户信息
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public int updateUser(SysUser user) {
|
|
||||||
Long userId = user.getUserId();
|
|
||||||
// 删除用户与角色关联
|
|
||||||
userRoleMapper.deleteUserRoleByUserId(userId);
|
|
||||||
// 新增用户与角色管理
|
|
||||||
insertUserRole(user);
|
|
||||||
// 删除用户与岗位关联
|
|
||||||
userPostMapper.deleteUserPostByUserId(userId);
|
|
||||||
// 新增用户与岗位管理
|
|
||||||
insertUserPost(user);
|
|
||||||
return userMapper.updateUser(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改用户基本信息
|
|
||||||
*
|
|
||||||
* @param user 用户信息
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int updateUserProfile(SysUser user) {
|
|
||||||
return userMapper.updateUser(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改用户头像
|
|
||||||
*
|
|
||||||
* @param userName 用户名
|
|
||||||
* @param avatar 头像地址
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public boolean updateUserAvatar(String userName, String avatar) {
|
|
||||||
return userMapper.updateUserAvatar(userName, avatar) > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 重置用户密码
|
|
||||||
*
|
|
||||||
* @param user 用户信息
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int resetPwd(SysUser user) {
|
|
||||||
return userMapper.updateUser(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 重置用户密码
|
|
||||||
*
|
|
||||||
* @param userName 用户名
|
|
||||||
* @param password 密码
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int resetUserPwd(String userName, String password) {
|
|
||||||
return userMapper.resetUserPwd(userName, password);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增用户角色信息
|
|
||||||
*
|
|
||||||
* @param user 用户对象
|
|
||||||
*/
|
|
||||||
public void insertUserRole(SysUser user) {
|
|
||||||
Long[] roles = user.getRoleIds();
|
|
||||||
if (StringUtils.isNotNull(roles)) {
|
|
||||||
// 新增用户与角色管理
|
|
||||||
List<SysUserRole> list = new ArrayList<SysUserRole>();
|
|
||||||
for (Long roleId : roles) {
|
|
||||||
SysUserRole ur = new SysUserRole();
|
|
||||||
ur.setUserId(user.getUserId());
|
|
||||||
ur.setRoleId(roleId);
|
|
||||||
list.add(ur);
|
|
||||||
}
|
|
||||||
if (list.size() > 0) {
|
|
||||||
userRoleMapper.batchUserRole(list);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增用户岗位信息
|
|
||||||
*
|
|
||||||
* @param user 用户对象
|
|
||||||
*/
|
|
||||||
public void insertUserPost(SysUser user) {
|
|
||||||
Long[] posts = user.getPostIds();
|
|
||||||
if (StringUtils.isNotNull(posts)) {
|
|
||||||
// 新增用户与岗位管理
|
|
||||||
List<SysUserPost> list = new ArrayList<SysUserPost>();
|
|
||||||
for (Long postId : posts) {
|
|
||||||
SysUserPost up = new SysUserPost();
|
|
||||||
up.setUserId(user.getUserId());
|
|
||||||
up.setPostId(postId);
|
|
||||||
list.add(up);
|
|
||||||
}
|
|
||||||
if (list.size() > 0) {
|
|
||||||
userPostMapper.batchUserPost(list);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 通过用户ID删除用户
|
|
||||||
*
|
|
||||||
* @param userId 用户ID
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public int deleteUserById(Long userId) {
|
|
||||||
// 删除用户与角色关联
|
|
||||||
userRoleMapper.deleteUserRoleByUserId(userId);
|
|
||||||
// 删除用户与岗位表
|
|
||||||
userPostMapper.deleteUserPostByUserId(userId);
|
|
||||||
return userMapper.deleteUserById(userId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除用户信息
|
|
||||||
*
|
|
||||||
* @param userIds 需要删除的用户ID
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public int deleteUserByIds(Long[] userIds) {
|
|
||||||
for (Long userId : userIds) {
|
|
||||||
checkUserAllowed(new SysUser(userId));
|
|
||||||
}
|
|
||||||
// 删除用户与角色关联
|
|
||||||
userRoleMapper.deleteUserRole(userIds);
|
|
||||||
// 删除用户与岗位关联
|
|
||||||
userPostMapper.deleteUserPost(userIds);
|
|
||||||
return userMapper.deleteUserByIds(userIds);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 导入用户数据
|
|
||||||
*
|
|
||||||
* @param userList 用户数据列表
|
|
||||||
* @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
|
|
||||||
* @param operName 操作用户
|
|
||||||
* @return 结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) {
|
|
||||||
if (StringUtils.isNull(userList) || userList.size() == 0) {
|
|
||||||
throw new CustomException("导入用户数据不能为空!");
|
|
||||||
}
|
|
||||||
int successNum = 0;
|
|
||||||
int failureNum = 0;
|
|
||||||
StringBuilder successMsg = new StringBuilder();
|
|
||||||
StringBuilder failureMsg = new StringBuilder();
|
|
||||||
String password = configService.selectConfigByKey("sys.user.initPassword");
|
|
||||||
for (SysUser user : userList) {
|
|
||||||
try {
|
|
||||||
// 验证是否存在这个用户
|
|
||||||
SysUser u = userMapper.selectUserByUserName(user.getUserName());
|
|
||||||
if (StringUtils.isNull(u)) {
|
|
||||||
user.setPassword(SecurityUtils.encryptPassword(password));
|
|
||||||
user.setCreateBy(operName);
|
|
||||||
this.insertUser(user);
|
|
||||||
successNum++;
|
|
||||||
successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
|
|
||||||
} else if (isUpdateSupport) {
|
|
||||||
user.setUpdateBy(operName);
|
|
||||||
this.updateUser(user);
|
|
||||||
successNum++;
|
|
||||||
successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
|
|
||||||
} else {
|
|
||||||
failureNum++;
|
|
||||||
failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在");
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
failureNum++;
|
|
||||||
String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:";
|
|
||||||
failureMsg.append(msg + e.getMessage());
|
|
||||||
log.error(msg, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (failureNum > 0) {
|
|
||||||
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
|
|
||||||
throw new CustomException(failureMsg.toString());
|
|
||||||
} else {
|
|
||||||
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
|
|
||||||
}
|
|
||||||
return successMsg.toString();
|
|
||||||
}
|
|
||||||
}
|
|
@ -20,7 +20,7 @@ export function listDeptExcludeChild(deptId) {
|
|||||||
// 查询部门详细
|
// 查询部门详细
|
||||||
export function getDept(deptId) {
|
export function getDept(deptId) {
|
||||||
return request({
|
return request({
|
||||||
url: '/system/dept/' + deptId,
|
url: '/system/dept/get?id=' + deptId,
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -36,7 +36,7 @@ export function listSimpleDepts() {
|
|||||||
// 新增部门
|
// 新增部门
|
||||||
export function addDept(data) {
|
export function addDept(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/system/dept',
|
url: '/system/dept/create',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
@ -45,19 +45,16 @@ export function addDept(data) {
|
|||||||
// 修改部门
|
// 修改部门
|
||||||
export function updateDept(data) {
|
export function updateDept(data) {
|
||||||
return request({
|
return request({
|
||||||
url: '/system/dept',
|
url: '/system/dept/update',
|
||||||
method: 'put',
|
method: 'post',
|
||||||
data: data
|
data: data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除部门
|
// 删除部门
|
||||||
export function delDept(deptId) {
|
export function delDept(id) {
|
||||||
return request({
|
return request({
|
||||||
url: '/system/dept/' + deptId,
|
url: '/system/dept/delete?id=' + id,
|
||||||
method: 'delete'
|
method: 'post'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export class treeselect {
|
|
||||||
}
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
|
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
|
||||||
<el-form-item label="部门名称" prop="deptName">
|
<el-form-item label="部门名称" prop="name">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.deptName"
|
v-model="queryParams.name"
|
||||||
placeholder="请输入部门名称"
|
placeholder="请输入部门名称"
|
||||||
clearable
|
clearable
|
||||||
size="small"
|
size="small"
|
||||||
@ -11,12 +11,12 @@
|
|||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="状态" prop="status">
|
<el-form-item label="状态" prop="status">
|
||||||
<el-select v-model="queryParams.status" placeholder="部门状态" clearable size="small">
|
<el-select v-model="queryParams.status" placeholder="菜单状态" clearable size="small">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in statusOptions"
|
v-for="dict in statusDictDatas"
|
||||||
:key="dict.dictValue"
|
:key="parseInt(dict.value)"
|
||||||
:label="dict.dictLabel"
|
:label="dict.label"
|
||||||
:value="dict.dictValue"
|
:value="parseInt(dict.value)"
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -42,12 +42,12 @@
|
|||||||
<el-table
|
<el-table
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
:data="deptList"
|
:data="deptList"
|
||||||
row-key="deptId"
|
row-key="id"
|
||||||
default-expand-all
|
default-expand-all
|
||||||
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
|
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
|
||||||
>
|
>
|
||||||
<el-table-column prop="deptName" label="部门名称" width="260"></el-table-column>
|
<el-table-column prop="name" label="部门名称" width="260"></el-table-column>
|
||||||
<el-table-column prop="orderNum" label="排序" width="200"></el-table-column>
|
<el-table-column prop="sort" label="排序" width="200"></el-table-column>
|
||||||
<el-table-column prop="status" label="状态" :formatter="statusFormat" width="100"></el-table-column>
|
<el-table-column prop="status" label="状态" :formatter="statusFormat" width="100"></el-table-column>
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="200">
|
<el-table-column label="创建时间" align="center" prop="createTime" width="200">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
@ -71,7 +71,7 @@
|
|||||||
v-hasPermi="['system:dept:add']"
|
v-hasPermi="['system:dept:add']"
|
||||||
>新增</el-button>
|
>新增</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="scope.row.parentId != 0"
|
v-if="scope.row.parentId !== 0"
|
||||||
size="mini"
|
size="mini"
|
||||||
type="text"
|
type="text"
|
||||||
icon="el-icon-delete"
|
icon="el-icon-delete"
|
||||||
@ -92,13 +92,13 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="部门名称" prop="deptName">
|
<el-form-item label="部门名称" prop="name">
|
||||||
<el-input v-model="form.deptName" placeholder="请输入部门名称" />
|
<el-input v-model="form.name" placeholder="请输入部门名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="显示排序" prop="orderNum">
|
<el-form-item label="显示排序" prop="sort">
|
||||||
<el-input-number v-model="form.orderNum" controls-position="right" :min="0" />
|
<el-input-number v-model="form.sort" controls-position="right" :min="0" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
@ -117,13 +117,13 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="部门状态">
|
<el-form-item label="部门状态" prop="status">
|
||||||
<el-radio-group v-model="form.status">
|
<el-radio-group v-model="form.status">
|
||||||
<el-radio
|
<el-radio
|
||||||
v-for="dict in statusOptions"
|
v-for="dict in statusDictDatas"
|
||||||
:key="dict.dictValue"
|
:key="parseInt(dict.value)"
|
||||||
:label="dict.dictValue"
|
:label="parseInt(dict.value)"
|
||||||
>{{dict.dictLabel}}</el-radio>
|
>{{dict.label}}</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -138,10 +138,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from "@/api/system/dept";
|
import { listDept, getDept, delDept, addDept, updateDept } from "@/api/system/dept";
|
||||||
import Treeselect from "@riophae/vue-treeselect";
|
import Treeselect from "@riophae/vue-treeselect";
|
||||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||||
|
|
||||||
|
import {SysCommonStatusEnum, SysMenuTypeEnum} from '@/utils/constants'
|
||||||
|
import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Dept",
|
name: "Dept",
|
||||||
components: { Treeselect },
|
components: { Treeselect },
|
||||||
@ -163,7 +166,7 @@ export default {
|
|||||||
statusOptions: [],
|
statusOptions: [],
|
||||||
// 查询参数
|
// 查询参数
|
||||||
queryParams: {
|
queryParams: {
|
||||||
deptName: undefined,
|
name: undefined,
|
||||||
status: undefined
|
status: undefined
|
||||||
},
|
},
|
||||||
// 表单参数
|
// 表单参数
|
||||||
@ -173,10 +176,10 @@ export default {
|
|||||||
parentId: [
|
parentId: [
|
||||||
{ required: true, message: "上级部门不能为空", trigger: "blur" }
|
{ required: true, message: "上级部门不能为空", trigger: "blur" }
|
||||||
],
|
],
|
||||||
deptName: [
|
name: [
|
||||||
{ required: true, message: "部门名称不能为空", trigger: "blur" }
|
{ required: true, message: "部门名称不能为空", trigger: "blur" }
|
||||||
],
|
],
|
||||||
orderNum: [
|
sort: [
|
||||||
{ required: true, message: "显示排序不能为空", trigger: "blur" }
|
{ required: true, message: "显示排序不能为空", trigger: "blur" }
|
||||||
],
|
],
|
||||||
email: [
|
email: [
|
||||||
@ -192,22 +195,27 @@ export default {
|
|||||||
message: "请输入正确的手机号码",
|
message: "请输入正确的手机号码",
|
||||||
trigger: "blur"
|
trigger: "blur"
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
status: [
|
||||||
|
{ required: true, message: "状态不能为空", trigger: "blur" }
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
|
||||||
|
// 枚举
|
||||||
|
CommonStatusEnum: SysCommonStatusEnum,
|
||||||
|
// 数据字典
|
||||||
|
statusDictDatas: getDictDatas(DICT_TYPE.SYS_COMMON_STATUS)
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.getList();
|
this.getList();
|
||||||
this.getDicts("sys_normal_disable").then(response => {
|
|
||||||
this.statusOptions = response.data;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
/** 查询部门列表 */
|
/** 查询部门列表 */
|
||||||
getList() {
|
getList() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
listDept(this.queryParams).then(response => {
|
listDept(this.queryParams).then(response => {
|
||||||
this.deptList = this.handleTree(response.data, "deptId");
|
this.deptList = this.handleTree(response.data, "id");
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -217,14 +225,14 @@ export default {
|
|||||||
delete node.children;
|
delete node.children;
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
id: node.deptId,
|
id: node.id,
|
||||||
label: node.deptName,
|
label: node.name,
|
||||||
children: node.children
|
children: node.children
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
// 字典状态字典翻译
|
// 字典状态字典翻译
|
||||||
statusFormat(row, column) {
|
statusFormat(row, column) {
|
||||||
return this.selectDictLabel(this.statusOptions, row.status);
|
return getDictDataLabel(DICT_TYPE.SYS_COMMON_STATUS, row.status)
|
||||||
},
|
},
|
||||||
// 取消按钮
|
// 取消按钮
|
||||||
cancel() {
|
cancel() {
|
||||||
@ -234,10 +242,10 @@ export default {
|
|||||||
// 表单重置
|
// 表单重置
|
||||||
reset() {
|
reset() {
|
||||||
this.form = {
|
this.form = {
|
||||||
deptId: undefined,
|
id: undefined,
|
||||||
parentId: undefined,
|
parentId: undefined,
|
||||||
deptName: undefined,
|
name: undefined,
|
||||||
orderNum: undefined,
|
sort: undefined,
|
||||||
leader: undefined,
|
leader: undefined,
|
||||||
phone: undefined,
|
phone: undefined,
|
||||||
email: undefined,
|
email: undefined,
|
||||||
@ -257,32 +265,32 @@ export default {
|
|||||||
/** 新增按钮操作 */
|
/** 新增按钮操作 */
|
||||||
handleAdd(row) {
|
handleAdd(row) {
|
||||||
this.reset();
|
this.reset();
|
||||||
if (row != undefined) {
|
if (row !== undefined) {
|
||||||
this.form.parentId = row.deptId;
|
this.form.parentId = row.id;
|
||||||
}
|
}
|
||||||
this.open = true;
|
this.open = true;
|
||||||
this.title = "添加部门";
|
this.title = "添加部门";
|
||||||
listDept().then(response => {
|
listDept().then(response => {
|
||||||
this.deptOptions = this.handleTree(response.data, "deptId");
|
this.deptOptions = this.handleTree(response.data, "id");
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
/** 修改按钮操作 */
|
/** 修改按钮操作 */
|
||||||
handleUpdate(row) {
|
handleUpdate(row) {
|
||||||
this.reset();
|
this.reset();
|
||||||
getDept(row.deptId).then(response => {
|
getDept(row.id).then(response => {
|
||||||
this.form = response.data;
|
this.form = response.data;
|
||||||
this.open = true;
|
this.open = true;
|
||||||
this.title = "修改部门";
|
this.title = "修改部门";
|
||||||
});
|
});
|
||||||
listDeptExcludeChild(row.deptId).then(response => {
|
listDept(row.id).then(response => {
|
||||||
this.deptOptions = this.handleTree(response.data, "deptId");
|
this.deptOptions = this.handleTree(response.data, "id");
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
/** 提交按钮 */
|
/** 提交按钮 */
|
||||||
submitForm: function() {
|
submitForm: function() {
|
||||||
this.$refs["form"].validate(valid => {
|
this.$refs["form"].validate(valid => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
if (this.form.deptId != undefined) {
|
if (this.form.id !== undefined) {
|
||||||
updateDept(this.form).then(response => {
|
updateDept(this.form).then(response => {
|
||||||
this.msgSuccess("修改成功");
|
this.msgSuccess("修改成功");
|
||||||
this.open = false;
|
this.open = false;
|
||||||
@ -300,12 +308,12 @@ export default {
|
|||||||
},
|
},
|
||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
handleDelete(row) {
|
handleDelete(row) {
|
||||||
this.$confirm('是否确认删除名称为"' + row.deptName + '"的数据项?', "警告", {
|
this.$confirm('是否确认删除名称为"' + row.name + '"的数据项?', "警告", {
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
type: "warning"
|
type: "warning"
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
return delDept(row.deptId);
|
return delDept(row.id);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.getList();
|
this.getList();
|
||||||
this.msgSuccess("删除成功");
|
this.msgSuccess("删除成功");
|
||||||
|
@ -164,8 +164,9 @@
|
|||||||
<el-radio-group v-model="form.status">
|
<el-radio-group v-model="form.status">
|
||||||
<el-radio
|
<el-radio
|
||||||
v-for="dict in statusDictDatas"
|
v-for="dict in statusDictDatas"
|
||||||
:key="dict.value"
|
:key="parseInt(dict.value)"
|
||||||
:label="parseInt(dict.value)"
|
:label="dict.label"
|
||||||
|
:value="parseInt(dict.value)"
|
||||||
>{{dict.label}}</el-radio>
|
>{{dict.label}}</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -223,6 +224,9 @@ export default {
|
|||||||
],
|
],
|
||||||
path: [
|
path: [
|
||||||
{ required: true, message: "路由地址不能为空", trigger: "blur" }
|
{ required: true, message: "路由地址不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
status: [
|
||||||
|
{ required: true, message: "状态不能为空", trigger: "blur" }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -2,17 +2,15 @@ package cn.iocoder.dashboard.modules.system.controller.dept;
|
|||||||
|
|
||||||
import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
|
import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.dashboard.common.pojo.CommonResult;
|
import cn.iocoder.dashboard.common.pojo.CommonResult;
|
||||||
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptListReqVO;
|
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.*;
|
||||||
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptRespVO;
|
|
||||||
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptSimpleRespVO;
|
|
||||||
import cn.iocoder.dashboard.modules.system.convert.dept.SysDeptConvert;
|
import cn.iocoder.dashboard.modules.system.convert.dept.SysDeptConvert;
|
||||||
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO;
|
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO;
|
||||||
import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService;
|
import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
@ -49,4 +47,39 @@ public class SysDeptController {
|
|||||||
return success(SysDeptConvert.INSTANCE.convertList02(list));
|
return success(SysDeptConvert.INSTANCE.convertList02(list));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("获得部门信息")
|
||||||
|
@ApiImplicitParam(name = "id", value = "编号", readOnly = true, example = "1024")
|
||||||
|
// @PreAuthorize("@ss.hasPermi('system:dept:query')")
|
||||||
|
@GetMapping("/get")
|
||||||
|
public CommonResult<SysDeptRespVO> getDept(@RequestParam("id") Long id) {
|
||||||
|
return success(SysDeptConvert.INSTANCE.convert(deptService.getDept(id)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("新增部门")
|
||||||
|
@PostMapping("create")
|
||||||
|
// @PreAuthorize("@ss.hasPermi('system:dept:add')")
|
||||||
|
// @Log(title = "部门管理", businessType = BusinessType.INSERT)
|
||||||
|
public CommonResult<Long> createDept(@Validated @RequestBody SysDeptCreateReqVO reqVO) {
|
||||||
|
Long deptId = deptService.createDept(reqVO);
|
||||||
|
return success(deptId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("修改部门")
|
||||||
|
@PostMapping("update")
|
||||||
|
// @PreAuthorize("@ss.hasPermi('system:dept:edit')")
|
||||||
|
// @Log(title = "部门管理", businessType = BusinessType.UPDATE)
|
||||||
|
public CommonResult<Boolean> updateDept(@Validated @RequestBody SysDeptUpdateReqVO reqVO) {
|
||||||
|
deptService.updateDept(reqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("删除部门")
|
||||||
|
@ApiImplicitParam(name = "id", value = "编号", readOnly = true, example = "1024")
|
||||||
|
@PostMapping("delete")
|
||||||
|
// @PreAuthorize("@ss.hasPermi('system:dept:remove')")
|
||||||
|
// @Log(title = "部门管理", businessType = BusinessType.DELETE)
|
||||||
|
public CommonResult<Boolean> deleteDept(@RequestParam("id") Long id) {
|
||||||
|
deptService.deleteDept(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,4 +40,9 @@ public class SysDeptBaseVO {
|
|||||||
@Size(max = 50, message = "邮箱长度不能超过50个字符")
|
@Size(max = 50, message = "邮箱长度不能超过50个字符")
|
||||||
private String email;
|
private String email;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "状态", required = true, example = "1", notes = "见 SysCommonStatusEnum 枚举")
|
||||||
|
@NotNull(message = "状态不能为空")
|
||||||
|
// @InEnum(value = SysCommonStatusEnum.class, message = "修改状态必须是 {value}")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,12 +3,10 @@ package cn.iocoder.dashboard.modules.system.controller.dept.vo.dept;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
|
|
||||||
@ApiModel("部门列表 Request VO")
|
@ApiModel("部门列表 Request VO")
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
public class SysDeptListReqVO {
|
||||||
public class SysDeptListReqVO extends SysDeptBaseVO {
|
|
||||||
|
|
||||||
@ApiModelProperty(value = "部门名称", example = "芋道", notes = "模糊匹配")
|
@ApiModelProperty(value = "部门名称", example = "芋道", notes = "模糊匹配")
|
||||||
private String name;
|
private String name;
|
||||||
|
@ -15,9 +15,6 @@ public class SysDeptRespVO extends SysDeptBaseVO {
|
|||||||
@ApiModelProperty(value = "部门编号", required = true, example = "1024")
|
@ApiModelProperty(value = "部门编号", required = true, example = "1024")
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|
||||||
@ApiModelProperty(value = "祖级列表", required = true, example = "0,100")
|
|
||||||
private String ancestors;
|
|
||||||
|
|
||||||
@ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 SysCommonStatusEnum 枚举类")
|
@ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 SysCommonStatusEnum 枚举类")
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|
||||||
|
@ -14,6 +14,6 @@ public class SysDeptUpdateReqVO extends SysDeptBaseVO {
|
|||||||
|
|
||||||
@ApiModelProperty(value = "部门编号", required = true, example = "1024")
|
@ApiModelProperty(value = "部门编号", required = true, example = "1024")
|
||||||
@NotNull(message = "部门编号不能为空")
|
@NotNull(message = "部门编号不能为空")
|
||||||
private Integer id;
|
private Long id;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package cn.iocoder.dashboard.modules.system.convert.dept;
|
package cn.iocoder.dashboard.modules.system.convert.dept;
|
||||||
|
|
||||||
|
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptCreateReqVO;
|
||||||
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptRespVO;
|
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptRespVO;
|
||||||
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptSimpleRespVO;
|
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptSimpleRespVO;
|
||||||
|
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO;
|
||||||
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO;
|
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
@ -17,4 +19,10 @@ public interface SysDeptConvert {
|
|||||||
|
|
||||||
List<SysDeptSimpleRespVO> convertList02(List<SysDeptDO> list);
|
List<SysDeptSimpleRespVO> convertList02(List<SysDeptDO> list);
|
||||||
|
|
||||||
|
SysDeptRespVO convert(SysDeptDO bean);
|
||||||
|
|
||||||
|
SysDeptDO convert(SysDeptCreateReqVO bean);
|
||||||
|
|
||||||
|
SysDeptDO convert(SysDeptUpdateReqVO bean);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -21,4 +21,13 @@ public interface SysDeptMapper extends BaseMapper<SysDeptDO> {
|
|||||||
.eqIfPresent("status", reqVO.getStatus()));
|
.eqIfPresent("status", reqVO.getStatus()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default SysDeptDO selectByParentIdAndName(Long parentId, String name) {
|
||||||
|
return selectOne(new QueryWrapper<SysDeptDO>().eq("parent_id", parentId)
|
||||||
|
.eq("name", name));
|
||||||
|
}
|
||||||
|
|
||||||
|
default Integer selectCountByParentId(Long parentId) {
|
||||||
|
return selectCount(new QueryWrapper<SysDeptDO>().eq("parent_id", parentId));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -32,10 +32,6 @@ public class SysDeptDO extends BaseDO {
|
|||||||
* 外键 {@link #id}
|
* 外键 {@link #id}
|
||||||
*/
|
*/
|
||||||
private Long parentId;
|
private Long parentId;
|
||||||
/**
|
|
||||||
* 祖级列表
|
|
||||||
*/
|
|
||||||
private String ancestors;
|
|
||||||
/**
|
/**
|
||||||
* 显示顺序
|
* 显示顺序
|
||||||
*/
|
*/
|
||||||
|
@ -43,9 +43,10 @@ public interface SysErrorCodeConstants {
|
|||||||
ErrorCode DEPT_PARENT_NOT_EXITS = new ErrorCode(1002004002,"父级部门不存在");
|
ErrorCode DEPT_PARENT_NOT_EXITS = new ErrorCode(1002004002,"父级部门不存在");
|
||||||
ErrorCode DEPT_NOT_FOUND = new ErrorCode(1002004003, "当前部门不存在");
|
ErrorCode DEPT_NOT_FOUND = new ErrorCode(1002004003, "当前部门不存在");
|
||||||
ErrorCode DEPT_EXITS_CHILDREN = new ErrorCode(1002004004, "存在子部门,无法删除");
|
ErrorCode DEPT_EXITS_CHILDREN = new ErrorCode(1002004004, "存在子部门,无法删除");
|
||||||
ErrorCode DEPT_PARENT_ERROR = new ErrorCode(1002004005, "不能设置自己为父资源");
|
ErrorCode DEPT_PARENT_ERROR = new ErrorCode(1002004005, "不能设置自己为父部门");
|
||||||
ErrorCode DEPT_EXISTS_USER = new ErrorCode(1002004006, "部门中存在员工,无法删除");
|
ErrorCode DEPT_EXISTS_USER = new ErrorCode(1002004006, "部门中存在员工,无法删除");
|
||||||
ErrorCode DEPT_NOT_ENABLE = new ErrorCode(1002004007, "部门不处于开启状态,不允许选择");
|
ErrorCode DEPT_NOT_ENABLE = new ErrorCode(1002004007, "部门不处于开启状态,不允许选择");
|
||||||
|
ErrorCode DEPT_PARENT_IS_CHILD = new ErrorCode(1002004008, "不能设置自己的子部门为父部门");
|
||||||
|
|
||||||
// ========== 岗位模块 1002005000 ==========
|
// ========== 岗位模块 1002005000 ==========
|
||||||
ErrorCode POST_NOT_FOUND = new ErrorCode(1002005001, "当前岗位不存在");
|
ErrorCode POST_NOT_FOUND = new ErrorCode(1002005001, "当前岗位不存在");
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
package cn.iocoder.dashboard.modules.system.enums.dept;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门编号枚举
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum DeptIdEnum {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根节点
|
||||||
|
*/
|
||||||
|
ROOT(0L);
|
||||||
|
|
||||||
|
private final Long id;
|
||||||
|
|
||||||
|
}
|
@ -1,6 +1,8 @@
|
|||||||
package cn.iocoder.dashboard.modules.system.service.dept;
|
package cn.iocoder.dashboard.modules.system.service.dept;
|
||||||
|
|
||||||
|
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptCreateReqVO;
|
||||||
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptListReqVO;
|
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptListReqVO;
|
||||||
|
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO;
|
||||||
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO;
|
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -58,4 +60,26 @@ public interface SysDeptService {
|
|||||||
*/
|
*/
|
||||||
SysDeptDO getDept(Long id);
|
SysDeptDO getDept(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建部门
|
||||||
|
*
|
||||||
|
* @param reqVO 部门信息
|
||||||
|
* @return 部门编号
|
||||||
|
*/
|
||||||
|
Long createDept(SysDeptCreateReqVO reqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新部门
|
||||||
|
*
|
||||||
|
* @param reqVO 部门信息
|
||||||
|
*/
|
||||||
|
void updateDept(SysDeptUpdateReqVO reqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除部门
|
||||||
|
*
|
||||||
|
* @param id 部门编号
|
||||||
|
*/
|
||||||
|
void deleteDept(Long id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,15 @@
|
|||||||
package cn.iocoder.dashboard.modules.system.service.dept.impl;
|
package cn.iocoder.dashboard.modules.system.service.dept.impl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
|
||||||
|
import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil;
|
||||||
|
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptCreateReqVO;
|
||||||
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptListReqVO;
|
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptListReqVO;
|
||||||
|
import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO;
|
||||||
|
import cn.iocoder.dashboard.modules.system.convert.dept.SysDeptConvert;
|
||||||
import cn.iocoder.dashboard.modules.system.dal.mysql.dao.dept.SysDeptMapper;
|
import cn.iocoder.dashboard.modules.system.dal.mysql.dao.dept.SysDeptMapper;
|
||||||
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO;
|
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO;
|
||||||
|
import cn.iocoder.dashboard.modules.system.enums.dept.DeptIdEnum;
|
||||||
import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService;
|
import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.ImmutableMultimap;
|
import com.google.common.collect.ImmutableMultimap;
|
||||||
@ -18,6 +24,8 @@ import java.util.Collection;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 部门 Service 实现类
|
* 部门 Service 实现类
|
||||||
*
|
*
|
||||||
@ -119,4 +127,105 @@ public class SysDeptServiceImpl implements SysDeptService {
|
|||||||
return deptMapper.selectById(id);
|
return deptMapper.selectById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long createDept(SysDeptCreateReqVO reqVO) {
|
||||||
|
// 校验正确性
|
||||||
|
checkCreateOrUpdate(null, reqVO.getParentId(), reqVO.getName());
|
||||||
|
// 插入部门
|
||||||
|
SysDeptDO dept = SysDeptConvert.INSTANCE.convert(reqVO);
|
||||||
|
deptMapper.insert(dept);
|
||||||
|
return dept.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateDept(SysDeptUpdateReqVO reqVO) {
|
||||||
|
// 校验正确性
|
||||||
|
checkCreateOrUpdate(reqVO.getId(), reqVO.getParentId(), reqVO.getName());
|
||||||
|
// 更新部门
|
||||||
|
SysDeptDO updateObj = SysDeptConvert.INSTANCE.convert(reqVO);
|
||||||
|
deptMapper.updateById(updateObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteDept(Long id) {
|
||||||
|
// 校验是否存在
|
||||||
|
checkDeptExists(id);
|
||||||
|
// 校验是否有子部门
|
||||||
|
if (deptMapper.selectCountByParentId(id) > 0) {
|
||||||
|
throw ServiceExceptionUtil.exception(DEPT_EXITS_CHILDREN);
|
||||||
|
}
|
||||||
|
// 删除部门
|
||||||
|
deptMapper.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkCreateOrUpdate(Long id, Long parentId, String name) {
|
||||||
|
// 校验自己存在
|
||||||
|
checkDeptExists(id);
|
||||||
|
// 校验父部门的有效性
|
||||||
|
checkParentDeptEnable(id, parentId);
|
||||||
|
// 校验部门名的唯一性
|
||||||
|
checkDeptNameUnique(id, parentId, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkParentDeptEnable(Long id, Long parentId) {
|
||||||
|
if (parentId == null || DeptIdEnum.ROOT.getId().equals(parentId)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 不能设置自己为父部门
|
||||||
|
if (parentId.equals(id)) {
|
||||||
|
throw ServiceExceptionUtil.exception(DEPT_PARENT_ERROR);
|
||||||
|
}
|
||||||
|
// 父菜单不存在
|
||||||
|
SysDeptDO dept = deptMapper.selectById(parentId);
|
||||||
|
if (dept == null) {
|
||||||
|
throw ServiceExceptionUtil.exception(DEPT_PARENT_NOT_EXITS);
|
||||||
|
}
|
||||||
|
// 父部门被禁用
|
||||||
|
if (!CommonStatusEnum.ENABLE.getStatus().equals(dept.getStatus())) {
|
||||||
|
throw ServiceExceptionUtil.exception(DEPT_NOT_ENABLE);
|
||||||
|
}
|
||||||
|
// 父部门不能是原来的子部门
|
||||||
|
List<SysDeptDO> children = this.listDeptsByParentIdFromCache(id, true);
|
||||||
|
if (children.stream().anyMatch(dept1 -> dept1.getId().equals(parentId))) {
|
||||||
|
throw ServiceExceptionUtil.exception(DEPT_PARENT_IS_CHILD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkDeptExists(Long id) {
|
||||||
|
if (id == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SysDeptDO dept = deptMapper.selectById(id);
|
||||||
|
if (dept == null) {
|
||||||
|
throw ServiceExceptionUtil.exception(DEPT_NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkDeptNameUnique(Long id, Long parentId, String name) {
|
||||||
|
SysDeptDO menu = deptMapper.selectByParentIdAndName(parentId, name);
|
||||||
|
if (menu == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 如果 id 为空,说明不用比较是否为相同 id 的菜单
|
||||||
|
if (id == null) {
|
||||||
|
throw ServiceExceptionUtil.exception(DEPT_NAME_DUPLICATE);
|
||||||
|
}
|
||||||
|
if (!menu.getId().equals(id)) {
|
||||||
|
throw ServiceExceptionUtil.exception(DEPT_NAME_DUPLICATE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * 查询部门管理数据
|
||||||
|
// *
|
||||||
|
// * @param dept 部门信息
|
||||||
|
// * @return 部门信息集合
|
||||||
|
// */
|
||||||
|
// @Override
|
||||||
|
// @DataScope(deptAlias = "d")
|
||||||
|
// public List<SysDept> selectDeptList(SysDept dept)
|
||||||
|
// {
|
||||||
|
// return deptMapper.selectDeptList(dept);
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -206,4 +206,16 @@ public class SysRoleServiceImpl implements SysRoleService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * 根据条件分页查询角色数据
|
||||||
|
// *
|
||||||
|
// * @param role 角色信息
|
||||||
|
// * @return 角色数据集合信息
|
||||||
|
// */
|
||||||
|
// @Override
|
||||||
|
// @DataScope(deptAlias = "d")
|
||||||
|
// public List<SysRole> selectRoleList(SysRole role) {
|
||||||
|
// return roleMapper.selectRoleList(role);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
@ -253,33 +253,6 @@ public class SysUserServiceImpl implements SysUserService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * 新增用户角色信息
|
|
||||||
// *
|
|
||||||
// * @param user 用户对象
|
|
||||||
// */
|
|
||||||
// public void insertUserRole(SysUser user)
|
|
||||||
// {
|
|
||||||
// Long[] roles = user.getRoleIds();
|
|
||||||
// if (StringUtils.isNotNull(roles))
|
|
||||||
// {
|
|
||||||
// // 新增用户与角色管理
|
|
||||||
// List<SysUserRole> list = new ArrayList<SysUserRole>();
|
|
||||||
// for (Long roleId : roles)
|
|
||||||
// {
|
|
||||||
// SysUserRole ur = new SysUserRole();
|
|
||||||
// ur.setUserId(user.getUserId());
|
|
||||||
// ur.setRoleId(roleId);
|
|
||||||
// list.add(ur);
|
|
||||||
// }
|
|
||||||
// if (list.size() > 0)
|
|
||||||
// {
|
|
||||||
// userRoleMapper.batchUserRole(list);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// /**
|
// /**
|
||||||
// * 导入用户数据
|
// * 导入用户数据
|
||||||
// *
|
// *
|
||||||
@ -347,4 +320,15 @@ public class SysUserServiceImpl implements SysUserService {
|
|||||||
// return successMsg.toString();
|
// return successMsg.toString();
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * 根据条件分页查询用户列表
|
||||||
|
// *
|
||||||
|
// * @param user 用户信息
|
||||||
|
// * @return 用户信息集合信息
|
||||||
|
// */
|
||||||
|
// @Override
|
||||||
|
// @DataScope(deptAlias = "d", userAlias = "u")
|
||||||
|
// public List<SysUser> selectUserList(SysUser user) {
|
||||||
|
// return userMapper.selectUserList(user);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user