package com.mindskip.xzs.service.impl;
|
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageInfo;
|
import com.mindskip.xzs.domain.Department;
|
import com.mindskip.xzs.domain.UserDepartment;
|
import com.mindskip.xzs.domain.enums.DeptAdminEnum;
|
import com.mindskip.xzs.domain.vo.BaseSelect;
|
import com.mindskip.xzs.domain.vo.UpdateDeptAdminVO;
|
import com.mindskip.xzs.repository.BaseMapper;
|
import com.mindskip.xzs.repository.DepartmentMapper;
|
import com.mindskip.xzs.repository.UserDepartmentMapper;
|
import com.mindskip.xzs.repository.UserMapper;
|
import com.mindskip.xzs.service.DepartmentService;
|
import com.mindskip.xzs.utility.ModelMapperSingle;
|
import com.mindskip.xzs.viewmodel.admin.department.DepartmentResponseVM;
|
import org.modelmapper.ModelMapper;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.List;
|
import java.util.Objects;
|
|
@Service
|
public class DepartmentServiceImpl extends BaseServiceImpl<Department> implements DepartmentService {
|
|
protected final static ModelMapper modelMapper = ModelMapperSingle.Instance();
|
|
private final DepartmentMapper departmentMapper;
|
private final UserDepartmentMapper userDepartmentMapper;
|
private final UserMapper userMapper;
|
|
public DepartmentServiceImpl(BaseMapper<Department> baseMapper, DepartmentMapper departmentMapper, UserDepartmentMapper userDepartmentMapper, UserMapper userMapper) {
|
super(baseMapper);
|
this.departmentMapper = departmentMapper;
|
this.userDepartmentMapper = userDepartmentMapper;
|
this.userMapper = userMapper;
|
}
|
|
@Override
|
public Integer add(String name) {
|
Department department = new Department();
|
department.setDeleted("0");
|
department.setName(name);
|
return departmentMapper.add(department);
|
}
|
|
@Override
|
public Integer remove(Integer id) {
|
Department department = new Department();
|
department.setId(id);
|
department.setDeleted("1");
|
return departmentMapper.update(department);
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public Integer update(Department department) {
|
// userDepartmentMapper.removeByDepartmentId(department.getId());
|
Department entity = departmentMapper.getById(department.getId());
|
if (Objects.isNull(entity)) {
|
throw new RuntimeException("该部门不存在");
|
}
|
if (Objects.nonNull(department.getAdminId())) {
|
Integer adminNum = departmentMapper.countByAdminId(department.getAdminId(), department.getId());
|
if (adminNum > 0) {
|
throw new RuntimeException("一个用户只能是一个单位的管理员");
|
}
|
if (! Objects.equals(entity.getAdminId(), department.getAdminId())) {
|
// 取消原先的管理员标识
|
userMapper.updateDeptAdmin(entity.getAdminId(), DeptAdminEnum.NO.getValue());
|
}
|
// 标识部门管理员
|
userMapper.updateDeptAdmin(department.getAdminId(), DeptAdminEnum.YES.getValue());
|
}
|
Integer update = departmentMapper.update(department);
|
return update;
|
}
|
|
@Override
|
public PageInfo<DepartmentResponseVM> gets(DepartmentResponseVM departmentResponseVM) {
|
return PageHelper.startPage(departmentResponseVM.getPageIndex(), departmentResponseVM.getPageSize(), "id desc").doSelectPageInfo(() ->
|
departmentMapper.page(departmentResponseVM)
|
);
|
}
|
|
@Override
|
public Department getById(Integer id) {
|
return departmentMapper.getById(id);
|
}
|
|
@Override
|
public List<Department> gets(Integer deptId) {
|
if (deptId == -1) {
|
deptId = null;
|
}
|
return departmentMapper.gets(deptId);
|
}
|
|
@Override
|
public Department getName(String name) {
|
return departmentMapper.getName(name);
|
}
|
|
/**
|
* 获取部门用户下拉列表
|
* @param deptId
|
* @return
|
*/
|
@Override
|
public List<BaseSelect> getDeptUserList(Integer deptId) {
|
return userDepartmentMapper.getDeptUserList(deptId);
|
}
|
|
@Override
|
public void updateAdmin(UpdateDeptAdminVO form) {
|
Department entity = departmentMapper.getById(form.getId());
|
if (Objects.isNull(form)) {
|
throw new RuntimeException("该部门不存在");
|
}
|
if (Objects.nonNull(form.getAdminId())) {
|
Integer adminNum = departmentMapper.countByAdminId(form.getAdminId(), form.getId());
|
if (adminNum > 0) {
|
throw new RuntimeException("一个用户只能是一个单位的管理员");
|
}
|
if (! Objects.equals(entity.getAdminId(), form.getAdminId())) {
|
// 取消原先的管理员标识
|
userMapper.updateDeptAdmin(entity.getAdminId(), DeptAdminEnum.NO.getValue());
|
}
|
// 标识部门管理员
|
userMapper.updateDeptAdmin(form.getAdminId(), DeptAdminEnum.YES.getValue());
|
}
|
entity.setAdminId(form.getAdminId());
|
departmentMapper.update(entity);
|
}
|
}
|