kaiyu
2021-05-06 52d8cf200d7a54890845d4c468c24b6ab97a4762
screen-manage/src/main/java/com/moral/api/service/impl/UserServiceImpl.java
@@ -1,10 +1,33 @@
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.Organization;
import com.moral.api.entity.User;
import com.moral.api.mapper.OrganizationMapper;
import com.moral.api.mapper.UserMapper;
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>
@@ -17,4 +40,186 @@
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Autowired
    UserMapper userMapper;
    @Autowired
    OrganizationMapper organizationMapper;
    @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 deleteUser(UserDeleteForm form) {
        //创建返回对象
        UserDTO dto = new UserDTO();
        //取参
        Integer id = form.getId();
        //查询要删除的用户 用于插入日志
        User oldUser = new User();
        oldUser.setIsDelete(Constants.NOT_DELETE);
        oldUser.setId(id);
        QueryWrapper<User> oldWrapper = new QueryWrapper<>();
        oldWrapper.setEntity(oldUser);
        oldUser = userMapper.selectOne(oldWrapper);
        if(ObjectUtils.isEmpty(oldUser)){
            dto.setCode(ResponseCodeEnum.USER_NOT_EXIST.getCode());
            dto.setMsg(ResponseCodeEnum.USER_NOT_EXIST.getMsg());
            return dto;
        }
        //逻辑删除,删除账号以及该组织下的所有账号
        UpdateWrapper<User> deleteWrapper = new UpdateWrapper<>();
        deleteWrapper.eq("organization_id",oldUser.getOrganizationId());
        deleteWrapper.set("is_delete",Constants.DELETE);
        userMapper.update(null,deleteWrapper);
        //返回结果
        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);
        //封装返回结果
        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        return dto;
    }
}