package com.ruoyi.cs.service.impl;

import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.cs.domain.dto.CsUserInfoDTO;
import com.ruoyi.cs.domain.vo.CsUserInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.cs.mapper.CsUserInfoMapper;
import com.ruoyi.cs.domain.CsUserInfo;
import com.ruoyi.cs.service.ICsUserInfoService;

/**
 * 使用人员信息Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-04-25
 */
@Service
public class CsUserInfoServiceImpl implements ICsUserInfoService 
{
    @Autowired
    private CsUserInfoMapper csUserInfoMapper;

    /**
     * 查询使用人员信息
     * 
     * @param userInfoId 使用人员信息主键
     * @return 使用人员信息
     */
    @Override
    public CsUserInfo selectCsUserInfoByUserInfoId(String userInfoId)
    {
        return csUserInfoMapper.selectCsUserInfoByUserInfoId(userInfoId);
    }

    /**
     * 查询使用人员信息列表
     * 
     * @param csUserInfo 使用人员信息
     * @return 使用人员信息
     */
    @Override
    public List<CsUserInfo> selectCsUserInfoList(CsUserInfo csUserInfo)
    {
        return csUserInfoMapper.selectCsUserInfoList(csUserInfo);
    }

    /**
     * 新增使用人员信息
     * 
     * @param csUserInfo 使用人员信息
     * @return 结果
     */
    @Override
    public int insertCsUserInfo(CsUserInfo csUserInfo)
    {
        return csUserInfoMapper.insertCsUserInfo(csUserInfo);
    }



    /**
     * 修改使用人员信息
     * 
     * @param csUserInfo 使用人员信息
     * @return 结果
     */
    @Override
    public int updateCsUserInfo(CsUserInfo csUserInfo)
    {
        return csUserInfoMapper.updateCsUserInfo(csUserInfo);
    }

    /**
     * 批量删除使用人员信息
     * 
     * @param userInfoIds 需要删除的使用人员信息主键
     * @return 结果
     */
    @Override
    public int deleteCsUserInfoByUserInfoIds(String[] userInfoIds)
    {
        return csUserInfoMapper.deleteCsUserInfoByUserInfoIds(userInfoIds);
    }

    /**
     * 删除使用人员信息信息
     * 
     * @param userInfoId 使用人员信息主键
     * @return 结果
     */
    @Override
    public int deleteCsUserInfoByUserInfoId(String userInfoId)
    {
        return csUserInfoMapper.deleteCsUserInfoByUserInfoId(userInfoId);
    }

    /**
     * 批量新增使用人员信息
     * @param list 人员信息列表
     * @param applyId 申请资源id
     * @param createAt 创建时间
     * @return
     */
    @Override
    public int batchInsertCsUserInfo(List<CsUserInfoDTO> list, String applyId, Date createAt) {
        List<CsUserInfo> userList = list.stream()
                .map(person ->{
                    CsUserInfo add = new CsUserInfo();
                    add = BeanUtil.toBean(person,CsUserInfo.class);
                    add.setUserInfoId(IdUtils.fastSimpleUUID());
                    add.setResourceApplyId(applyId);
                    add.setCreateAt(createAt);
                    add.setDelFlag("0");
                    return add;
                }) // 转换对象类型
                .collect(Collectors.toList());

        //批量新增batchInsertCsUserInfo
        return csUserInfoMapper.batchInsertCsUserInfo(userList);
    }

    /**
     * 查询资源申请使用人员列表
     * @param applyId
     * @return
     */
    @Override
    public List<CsUserInfoVO> selectApplyUserInfoList(String applyId) {
        List<CsUserInfo> csUserInfos = csUserInfoMapper.selectCsUserInfoListByApplyId(applyId);
        List<CsUserInfoVO> userInfoList = csUserInfos.stream()
                .map( user ->{
                    CsUserInfoVO userVo = new CsUserInfoVO();
                    userVo = BeanUtil.toBean(user, CsUserInfoVO.class);
                    return userVo;
                })
                .collect(Collectors.toList());
        return userInfoList;
    }

    /**
     * 批量删除使用人员信息
     * @param applyId 申请资源id
     * @return
     */
    @Override
    public int batchCoverCsUserInfo(List<CsUserInfoDTO> list, String applyId, Date createAt){
        int delUser = csUserInfoMapper.batchDeleteCsUserInfo(applyId);
        return batchInsertCsUserInfo(list, applyId, createAt);
    }
}
