package com.ruoyi.app.service.impl;

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

import com.ruoyi.app.model.StaffPost;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.app.mapper.StaffMapper;
import com.ruoyi.app.model.Staff;
import com.ruoyi.app.service.IStaffService;

/**
 * 人员Service业务层处理
 * 
 * @author coede
 * @date 2025-03-20
 */
@Service
public class StaffServiceImpl implements IStaffService 
{
    @Autowired
    private StaffMapper staffMapper;

    /**
     * 查询人员
     * 
     * @param id 人员主键
     * @return 人员
     */
    @Override
    public Staff selectStaffById(Long id)
    {
        return staffMapper.selectStaffById(id);
    }

    /**
     * 查询人员列表
     * 
     * @param staff 人员
     * @return 人员
     */
    @Override
    public List<Staff> selectStaffList(Staff staff)
    {
        return staffMapper.selectStaffList(staff);
    }

    /**
     * 新增人员
     * 
     * @param staff 人员
     * @return 结果
     */
    @Override
    public int insertStaff(Staff staff)
    {
        staff.setCreateTime(DateUtils.getNowDate());
        // 新增用户信息
        int rows = staffMapper.insertStaff(staff);
        // 新增用户与角色管理
        insertStaffPost(staff);
        return rows;
    }

    /**
     * 新增人员岗位信息
     *
     * @param staff 人员对象
     */
    public void insertStaffPost(Staff staff)
    {
        Long[] postIds = staff.getPostIds();
        if (StringUtils.isNotEmpty(postIds))
        {
            // 新增用户与角色管理
            List<StaffPost> list = new ArrayList<>(postIds.length);
            for (Long postId : postIds)
            {
                StaffPost sp = new StaffPost();
                sp.setPostId(postId);
                sp.setStaffId(staff.getId());
                list.add(sp);
            }
            staffMapper.batchStaffPost(list);
        }
    }

    /**
     * 修改人员
     * 
     * @param staff 人员
     * @return 结果
     */
    @Override
    public int updateStaff(Staff staff)
    {
        Long staffId = staff.getId();
        // 删除人员与岗位关联
        staffMapper.deleteStaffPostByStaffId(staffId);
        // 新增人员与岗位管理
        insertStaffPost(staff);
        staff.setUpdateTime(DateUtils.getNowDate());
        return staffMapper.updateStaff(staff);

    }

    /**
     * 批量删除人员
     * 
     * @param ids 需要删除的人员主键
     * @return 结果
     */
    @Override
    public int deleteStaffByIds(Long[] ids)
    {
        return staffMapper.deleteStaffByIds(ids);
    }

    /**
     * 删除人员信息
     * 
     * @param id 人员主键
     * @return 结果
     */
    @Override
    public int deleteStaffById(Long id)
    {
        return staffMapper.deleteStaffById(id);
    }
}
