package com.moral.api.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.moral.api.config.mybatis.wrapper.NullFilterWrapper;
|
import com.moral.api.entity.Group;
|
import com.moral.api.entity.Organization;
|
import com.moral.api.entity.User;
|
import com.moral.api.entity.UserGroup;
|
import com.moral.api.mapper.*;
|
import com.moral.api.pojo.dto.user.UserDTO;
|
import com.moral.api.pojo.dto.user.UserQueryDTO;
|
import com.moral.api.pojo.form.user.UserDeleteForm;
|
import com.moral.api.pojo.form.user.UserInsertForm;
|
import com.moral.api.pojo.form.user.UserQueryForm;
|
import com.moral.api.pojo.form.user.UserUpdateForm;
|
import com.moral.api.service.UserService;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.moral.constant.Constants;
|
import com.moral.constant.ResponseCodeEnum;
|
import com.moral.util.ConvertUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.ObjectUtils;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* <p>
|
* 用户表 服务实现类
|
* </p>
|
*
|
* @author moral
|
* @since 2021-03-09
|
*/
|
@Service
|
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
|
|
@Autowired
|
UserMapper userMapper;
|
@Autowired
|
OrganizationMapper organizationMapper;
|
@Autowired
|
GroupMapper groupMapper;
|
@Autowired
|
UserGroupMapper userGroupMapper;
|
@Autowired
|
GroupMenuMapper groupMenuMapper;
|
|
@Override
|
public UserQueryDTO queryUsers(UserQueryForm form) {
|
//创建返回对象
|
UserQueryDTO dto = new UserQueryDTO();
|
//取参
|
Integer page = form.getPage();
|
Integer size = form.getSize();
|
String email = form.getEmail();
|
String mobile = form.getMobile();
|
String wechat = form.getWechat();
|
String order = form.getOrder();
|
String orderType = form.getOrderType();
|
Integer organizationId = form.getOrganizationId();
|
Date exipreStartTime = form.getExpireStartTime();
|
Date exipreEndTime = form.getExpireEndTime();
|
Date createStartTime = form.getCreateStartTime();
|
Date createEndTime = form.getCreateEndTime();
|
Integer isDelete = form.getIsDelete();
|
|
//组装查询条件
|
Page<User> queryPage = new Page<>(page, size);
|
NullFilterWrapper<User> wrapper = new NullFilterWrapper<>();
|
wrapper.like("email", email);
|
wrapper.like("wechat", wechat);
|
wrapper.like("mobile", mobile);
|
wrapper.eq("is_admin", 1);
|
wrapper.eq("organization_id", organizationId);
|
wrapper.between("create_time", createStartTime, createEndTime);
|
wrapper.between("expire_time", exipreStartTime, exipreEndTime);
|
//排序顺序条件构造
|
if (!ObjectUtils.isEmpty(order) && !ObjectUtils.isEmpty(orderType)) {
|
if (orderType.equals(Constants.ORDER_ASC))
|
wrapper.orderByAsc(ConvertUtils.toLine(order));
|
else
|
wrapper.orderByDesc(ConvertUtils.toLine(order));
|
}
|
//逻辑删除条件构造
|
if (!ObjectUtils.isEmpty(isDelete))
|
wrapper.eq("is_delete", isDelete);
|
else
|
wrapper.eq("is_delete", Constants.NOT_DELETE);
|
|
//查询结果
|
Page<User> resultPage = userMapper.selectPage(queryPage, wrapper);
|
List<User> users = resultPage.getRecords();
|
|
//查询用户对应组织
|
List<UserDTO> userDTOS = new ArrayList<>();
|
for (User user : users) {
|
UserDTO userDTO = new UserDTO();
|
Organization organization = new Organization();
|
organization.setId(user.getOrganizationId());
|
organization.setIsDelete(Constants.NOT_DELETE);
|
QueryWrapper<Organization> organizationWrapper = new QueryWrapper<>();
|
organizationWrapper.setEntity(organization);
|
organization = organizationMapper.selectOne(organizationWrapper);
|
userDTO.setUser(user);
|
userDTO.setOrganization(organization);
|
userDTOS.add(userDTO);
|
}
|
|
//封装返回结果
|
dto.setUserDTOS(userDTOS);
|
dto.setCurrent(resultPage.getCurrent());
|
dto.setPages(resultPage.getPages());
|
dto.setSize(resultPage.getSize());
|
dto.setTotal(resultPage.getTotal());
|
dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
|
dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
|
|
return dto;
|
}
|
|
@Override
|
@Transactional
|
public UserDTO updateUser(UserUpdateForm form) {
|
//创建返回对象
|
UserDTO dto = new UserDTO();
|
|
//取参
|
User user = form.formConvertEntity();
|
|
//查找要更新的用户 用于插入日志
|
QueryWrapper<User> oldUserWrapper = new QueryWrapper<>();
|
User oldUser = new User();
|
oldUser.setId(user.getId());
|
oldUser.setIsDelete(Constants.NOT_DELETE);
|
oldUserWrapper.setEntity(oldUser);
|
oldUser = userMapper.selectOne(oldUserWrapper);
|
if (ObjectUtils.isEmpty(oldUser)) {
|
dto.setCode(ResponseCodeEnum.USER_NOT_EXIST.getCode());
|
dto.setMsg(ResponseCodeEnum.USER_NOT_EXIST.getMsg());
|
return dto;
|
}
|
|
//更新
|
userMapper.updateById(user);
|
|
//封装返回结果
|
dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
|
dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
|
|
return dto;
|
}
|
|
@Override
|
@Transactional
|
public UserDTO insertUser(UserInsertForm form) {
|
//创建返回对象
|
UserDTO dto = new UserDTO();
|
//取参
|
User user = form.formConvertEntity();
|
//判断账号是否存在
|
User existUser = new User();
|
existUser.setAccount(user.getAccount());
|
existUser.setIsDelete(Constants.NOT_DELETE);
|
QueryWrapper<User> wrapper = new QueryWrapper<>();
|
wrapper.setEntity(existUser);
|
User existUserResult = userMapper.selectOne(wrapper);
|
if (!ObjectUtils.isEmpty(existUserResult)) {
|
dto.setCode(ResponseCodeEnum.USER_EXIST.getCode());
|
dto.setMsg(ResponseCodeEnum.USER_EXIST.getMsg());
|
return dto;
|
}
|
//判断组织是否已经存在管理员账号
|
Integer organizationId = user.getOrganizationId();
|
User organizationUser = new User();
|
organizationUser.setIsAdmin(true);
|
organizationUser.setIsDelete(Constants.NOT_DELETE);
|
organizationUser.setOrganizationId(organizationId);
|
QueryWrapper<User> organizationUserWrapper = new QueryWrapper<>();
|
organizationUserWrapper.setEntity(organizationUser);
|
organizationUser = userMapper.selectOne(organizationUserWrapper);
|
if (!ObjectUtils.isEmpty(organizationUser)) {
|
dto.setCode(ResponseCodeEnum.ORGANIZATION_USER_EXIST.getCode());
|
dto.setMsg(ResponseCodeEnum.ORGANIZATION_USER_EXIST.getMsg());
|
return dto;
|
}
|
//插入用户表
|
userMapper.insert(user);
|
//创建组织admin角色
|
Group group = new Group();
|
group.setOrganizationId(organizationId);
|
group.setGroupName("admin");
|
groupMapper.insert(group);
|
//插入账号角色关联表
|
UserGroup userGroup = new UserGroup();
|
userGroup.setUserId(user.getId());
|
userGroup.setGroupId(group.getId());
|
userGroup.setOrganizationId(organizationId);
|
userGroupMapper.insert(userGroup);
|
//更新组织
|
Organization organization = new Organization();
|
organization.setAdminUserId(user.getId());
|
organization.setId(organizationId);
|
organizationMapper.updateById(organization);
|
//封装返回结果
|
dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
|
dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
|
return dto;
|
}
|
|
|
@Override
|
@Transactional
|
public UserDTO deleteUsersByOrganizationId(Integer organizationId) {
|
//创建返回对象
|
UserDTO dto = new UserDTO();
|
//逻辑删除,删除账号以及该组织下的所有账号
|
UpdateWrapper<User> deleteUserChildrenWrapper = new UpdateWrapper<>();
|
deleteUserChildrenWrapper.eq("organization_id", organizationId);
|
deleteUserChildrenWrapper.set("is_delete", Constants.DELETE);
|
userMapper.update(null, deleteUserChildrenWrapper);
|
//逻辑删除,groupMenu
|
UpdateWrapper deleteGroupMenuWrapper = new UpdateWrapper();
|
deleteGroupMenuWrapper.eq("organization_id", organizationId);
|
deleteGroupMenuWrapper.set("is_delete", Constants.DELETE);
|
groupMenuMapper.update(null, deleteGroupMenuWrapper);
|
//逻辑删除,userGroup
|
UpdateWrapper deleteUserGroupWrapper = new UpdateWrapper();
|
deleteUserGroupWrapper.eq("organization_id", organizationId);
|
deleteUserGroupWrapper.set("is_delete", Constants.DELETE);
|
userGroupMapper.update(null, deleteUserGroupWrapper);
|
//逻辑删除,group
|
UpdateWrapper deleteGroupWrapper = new UpdateWrapper();
|
deleteGroupWrapper.eq("organization_id", organizationId);
|
deleteGroupWrapper.set("is_delete", Constants.DELETE);
|
groupMapper.update(null, deleteGroupWrapper);
|
//返回结果
|
dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
|
dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
|
return dto;
|
}
|
|
}
|