package com.zehong.system.service.impl.baseinfo;

import com.zehong.common.utils.DateUtils;
import com.zehong.common.utils.StringUtils;
import com.zehong.system.domain.system.SysUserRole;
import com.zehong.system.domain.baseinfo.TStaff;
import com.zehong.system.domain.form.TStaffForm;
import com.zehong.system.domain.vo.TStaffVo;
import com.zehong.system.mapper.system.SysUserRoleMapper;
import com.zehong.system.mapper.baseinfo.TStaffMapper;
import com.zehong.system.service.baseinfo.ITStaffService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 员工信息管理Service业务层处理
 *
 * @author zehong
 * @date 2022-06-17
 */
@Service
public class TStaffServiceImpl implements ITStaffService
{
    @Autowired
    private TStaffMapper tStaffMapper;

    @Autowired
    private SysUserRoleMapper userRoleMapper;


    /**
     * 查询员工信息管理
     *
     * @param staffId 员工信息管理ID
     * @return 员工信息管理
     */
    @Override
    public TStaffVo selectTStaffById(Long staffId)
    {
        return tStaffMapper.selectTStaffById(staffId);
    }

    /**
     * 查询员工信息管理列表
     *
     * @param tStaff 员工信息管理
     * @return 员工信息管理
     */
    @Override
    public List<TStaffVo> selectTStaffList(TStaffForm tStaff)
    {
        return tStaffMapper.selectTStaffList(tStaff);
    }
    @Override
    public List<TStaffVo> allList(TStaffForm tStaff)
    {
        return tStaffMapper.allList(tStaff);
    }

    /**
     * 新增员工信息管理
     *
     * @param tStaff 员工信息管理
     * @return 结果
     */
    @Override
    public int insertTStaff(TStaff tStaff)
    {
        String staffCode = tStaffMapper.getStaffCode();
        tStaff.setStaffCode(staffCode);
        tStaff.setCreateTime(DateUtils.getNowDate());
        tStaffMapper.insertTStaff(tStaff);
        // 新增用户与角色管理
        insertUserRole(tStaff);
        return tStaff.getStaffId();
    }

    /**
     * 修改员工信息管理
     *
     * @param tStaff 员工信息管理
     * @return 结果
     */
    @Override
    public int updateTStaff(TStaff tStaff)
    {
        // 删除用户与角色关联
        userRoleMapper.deleteUserRoleByUserId(Long.valueOf(tStaff.getStaffId()));
        // 新增用户与角色管理
        insertUserRole(tStaff);
        tStaff.setUpdateTime(DateUtils.getNowDate());
        return tStaffMapper.updateTStaff(tStaff);
    }

    /**
     * 批量删除员工信息管理
     *
     * @param staffIds 需要删除的员工信息管理ID
     * @return 结果
     */
    @Override
    public int deleteTStaffByIds(Long[] staffIds)
    {
        return tStaffMapper.deleteTStaffByIds(staffIds);
    }

    /**
     * 删除员工信息管理信息
     *
     * @param staffId 员工信息管理ID
     * @return 结果
     */
    @Override
    public int deleteTStaffById(Long staffId)
    {
        return tStaffMapper.deleteTStaffById(staffId);
    }

    /**
     * 新增用户角色信息
     *
     * @param user 用户对象
     */
    public void insertUserRole(TStaff user)
    {
        Long[] roles = user.getRoleIds();
        if (StringUtils.isNotNull(roles))
        {
            // 新增用户与角色管理
            List<SysUserRole> list = new ArrayList<SysUserRole>();
            for (Long roleId : roles)
            {
                SysUserRole ur = new SysUserRole();
                ur.setUserId(Long.valueOf(user.getStaffId()));
                ur.setRoleId(roleId);
                list.add(ur);
            }
            if (list.size() > 0)
            {
                userRoleMapper.batchUserRole(list);
            }
        }
    }
}
