package com.ruoyi.mall.service.impl;

import java.util.List;

import cn.hutool.crypto.SmUtil;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mall.mapper.MallCompanyUserMapper;
import com.ruoyi.mall.domain.MallCompanyUser;
import com.ruoyi.mall.service.IMallCompanyUserService;

import javax.annotation.Resource;

/**
 * 公司基站管理员Service业务层处理
 *
 * @author LCL
 * @date 2024-03-12
 */
@Service
public class MallCompanyUserServiceImpl implements IMallCompanyUserService
{
    @Resource
    private MallCompanyUserMapper mallCompanyUserMapper;
    @Resource
    private SysUserMapper sysUserMapper;
    @Resource
    private SysUserRoleMapper sysUserRoleMapper;
    @Resource
    private SysRoleMapper sysRoleMapper;

    /**
     * 查询公司基站管理员
     *
     * @param companyUserId 公司基站管理员主键
     * @return 公司基站管理员
     */
    @Override
    public MallCompanyUser selectMallCompanyUserByCompanyUserId(Long companyUserId)
    {
        return mallCompanyUserMapper.selectMallCompanyUserByCompanyUserId(companyUserId);
    }

    /**
     * 查询公司基站管理员列表
     *
     * @param mallCompanyUser 公司基站管理员
     * @return 公司基站管理员
     */
    @Override
    public List<MallCompanyUser> selectMallCompanyUserList(MallCompanyUser mallCompanyUser)
    {
        return mallCompanyUserMapper.selectMallCompanyUserList(mallCompanyUser);
    }

    /**
     * 新增公司基站管理员
     *
     * @param mallCompanyUser 公司基站管理员
     * @return 结果
     */
    @Override
    public int insertMallCompanyUser(MallCompanyUser mallCompanyUser)
    {
        //账号
        String account = mallCompanyUser.getCompanyUserAccount();
        //密码
        String password = mallCompanyUser.getCompanyUserPassword();

        mallCompanyUser.setCompanyUserPassword(SecurityUtils.encryptPassword(password));

        // 新增系统用户
        SysUser sysUser = new SysUser();
        sysUser.setUserName(account);
        sysUser.setNickName(mallCompanyUser.getCompanyUserName());
        sysUser.setPassword(SecurityUtils.encryptPassword(password));
        sysUserMapper.insertUser(sysUser);

        // 新增用户与角色管理
        SysUserRole ur = new SysUserRole();
        ur.setUserId(sysUser.getUserId());
        ur.setRoleId(101L);// 账号类型（101-基站管理员
        sysUserRoleMapper.insertUserRole(ur);

        mallCompanyUser.setSysUserId(sysUser.getUserId());
        mallCompanyUser.setCreateAt(DateUtils.getTime());
        return mallCompanyUserMapper.insertMallCompanyUser(mallCompanyUser);
    }

    /**
     * 修改公司基站管理员
     *
     * @param mallCompanyUser 公司基站管理员
     * @return 结果
     */
    @Override
    public int updateMallCompanyUser(MallCompanyUser mallCompanyUser)
    {
        mallCompanyUser.setUpdateAt(DateUtils.getTime());
        return mallCompanyUserMapper.updateMallCompanyUser(mallCompanyUser);
    }

    /**
     * 批量删除公司基站管理员
     *
     * @param companyUserIds 需要删除的公司基站管理员主键
     * @return 结果
     */
    @Override
    public int deleteMallCompanyUserByCompanyUserIds(Long[] companyUserIds)
    {
        return mallCompanyUserMapper.deleteMallCompanyUserByCompanyUserIds(companyUserIds);
    }

    /**
     * 删除公司基站管理员信息
     *
     * @param companyUserId 公司基站管理员主键
     * @return 结果
     */
    @Override
    public int deleteMallCompanyUserByCompanyUserId(Long companyUserId)
    {
        return mallCompanyUserMapper.deleteMallCompanyUserByCompanyUserId(companyUserId);
    }

    /**
     * 根据ID判断公司基站管理员状态
     *
     * @param companyUserId 公司基站管理员主键ID
     * @return AjaxResult
     */
    @Override
    public AjaxResult determineCompanyUser(Long companyUserId) {
        // 管理员信息
        MallCompanyUser mallCompanyUser = mallCompanyUserMapper.selectMallCompanyUserByCompanyUserId(companyUserId);
        if (ObjectUtils.isNotEmpty(mallCompanyUser)) {
            if ("1".equals(mallCompanyUser.getCompanyUserStatus())) {
                return AjaxResult.error("此账号已停用");
            }
        } else {
            return AjaxResult.error("账号不存在");
        }
        return AjaxResult.success();
    }

    /**
     * 根据公司基站管理员账号查询公司基站管理员
     *
     * @param companyUserAccount 公司基站管理员账号
     * @return 公司基站管理员
     */
    @Override
    public MallCompanyUser selectMallCompanyUserByCompanyUserAccount(String companyUserAccount) {
        return mallCompanyUserMapper.selectMallCompanyUserByCompanyUserAccount(companyUserAccount);
    }

    /**
     * 根据系统用户ID查询公司基站管理员
     *
     * @param sysUserId 系统用户ID
     * @return 公司基站管理员
     */
    @Override
    public MallCompanyUser selectMallCompanyUserByCompanySysUserId(Long sysUserId) {
        return mallCompanyUserMapper.selectMallCompanyUserByCompanySysUserId(sysUserId);
    }
}
