package com.ruoyi.system.service.impl;

import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.PoUser;
import com.ruoyi.system.mapper.PoUserMapper;
import com.ruoyi.system.service.IPoUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 用户Service业务层处理
 *
 * @author ruoyi
 * @date 2023-01-17
 */
@Service
public class PoUserServiceImpl implements IPoUserService {
    @Autowired
    private PoUserMapper poUserMapper;

    /**
     * 查询用户
     *
     * @param userId 用户主键
     * @return 用户
     */
    @Override
    public PoUser selectPoUserByUserId(Long userId) {
        return poUserMapper.selectPoUserByUserId(userId);
    }

    /**
     * 查询用户列表
     *
     * @param poUser 用户
     * @return 用户
     */
    @Override
    public List<PoUser> selectPoUserList(PoUser poUser) {
        return poUserMapper.selectPoUserList(poUser);
    }

    /**
     * 新增用户
     *
     * @param poUser 用户
     * @return 结果
     */
    @Override
    public int insertPoUser(PoUser poUser) {
        poUser.setCreateTime(DateUtils.getNowDate());
        return poUserMapper.insertPoUser(poUser);
    }

    /**
     * 修改用户
     *
     * @param poUser 用户
     * @return 结果
     */
    @Override
    public int updatePoUser(PoUser poUser) {
        poUser.setUpdateTime(DateUtils.getNowDate());
        return poUserMapper.updatePoUser(poUser);
    }

    /**
     * 批量删除用户
     *
     * @param userIds 需要删除的用户主键
     * @return 结果
     */
    @Override
    public int deletePoUserByUserIds(Long[] userIds) {
        return poUserMapper.deletePoUserByUserIds(userIds);
    }

    /**
     * 删除用户信息
     *
     * @param userId 用户主键
     * @return 结果
     */
    @Override
    public int deletePoUserByUserId(Long userId) {
        return poUserMapper.deletePoUserByUserId(userId);
    }

    /**
     * 检验用户账号是否存在
     *
     * @param poUser
     * @return
     */
    @Override
    public String checkUserNameUnique(PoUser poUser) {

        return poUserMapper.checkUserNameUnique(poUser);
    }

    /**
     * 检验用户手机号是否存在
     *
     * @param poUser
     * @return
     */
    @Override
    public String checkPhoneUnique(PoUser poUser) {

        return poUserMapper.checkPhoneUnique(poUser);
    }

    /**
     * 检验邮箱是否存在
     *
     * @param poUser
     * @return
     */
    @Override
    public String checkEmailUnique(PoUser poUser) {

        return poUserMapper.checkEmailUnique(poUser);
    }

    /**
     * 检验用户是否有操作权限
     *
     * @param poUser
     */
    @Override
    public void checkUserAllowed(PoUser poUser) {
        if (StringUtils.isNotNull(poUser.getUserId()) && poUser.isAdmin()) {
            throw new ServiceException("不允许操作超级管理员用户");
        }

    }

    /**
     * 检验用户是否有数据权限
     *
     * @param userId
     */
    @Override
    public void checkUserDataScope(Long userId) {
        {
            if (!PoUser.isAdmin(SecurityUtils.getUserId())) {
                PoUser poUser = new PoUser();
                poUser.setUserId(userId);
                List<PoUser> poUsers = SpringUtils.getAopProxy(this).selectPoUserList(poUser);
                if (StringUtils.isEmpty(poUsers)) {
                    throw new ServiceException("没有权限访问用户数据！");
                }
            }
        }
    }

    /**
     * 重置密码
     * @param poUser
     * @return
     */
    @Override
    public int resetPwd(PoUser poUser) {
        return poUserMapper.updatePoUser(poUser);
    }

    /**
     * 状态修改
     * @param poUser
     * @return
     */
    @Override
    public int updateUserStatus(PoUser poUser) {
        return poUserMapper.updatePoUser(poUser);
    }
}
