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 cn.hutool.core.util.IdUtil;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.cs.domain.CsAchievementInfoDetails;
import com.ruoyi.cs.domain.CsResourceOrderApply;
import com.ruoyi.cs.domain.CsUserInfo;
import com.ruoyi.cs.domain.dto.*;
import com.ruoyi.cs.mapper.CsAchievementInfoDetailsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.cs.mapper.CsAchievementInfoMapper;
import com.ruoyi.cs.domain.CsAchievementInfo;
import com.ruoyi.cs.service.ICsAchievementInfoService;

import javax.annotation.Resource;

/**
 * 科研成果信息Service业务层处理
 *
 * @author ruoyi
 * @date 2024-05-08
 */
@Service
public class CsAchievementInfoServiceImpl implements ICsAchievementInfoService
{
    @Resource
    private CsAchievementInfoMapper csAchievementInfoMapper;
    @Resource
    private CsAchievementInfoDetailsMapper csAchievementInfoDetailsMapper;

    /**
     * 查询科研成果信息
     *
     * @param achievementInfoId 科研成果信息主键
     * @return 科研成果信息
     */
    @Override
    public CsAchievementInfo selectCsAchievementInfoByAchievementInfoId(String achievementInfoId)
    {
        CsAchievementInfo csAchievementInfo = csAchievementInfoMapper.selectCsAchievementInfoByAchievementInfoId(achievementInfoId);
        return csAchievementInfo;
    }

    /**
     * 查询科研成果信息列表
     *
     * @param csAchievementInfo 科研成果信息
     * @return 科研成果信息
     */
    @Override
    public List<CsAchievementInfo> selectCsAchievementInfoList(CsAchievementInfo csAchievementInfo)
    {
        return csAchievementInfoMapper.selectCsAchievementInfoList(csAchievementInfo);
    }

    /**
     * 新增科研成果信息
     *
     * @param csAchievementInfo 科研成果信息
     * @return 结果
     */
    @Override
    public int insertCsAchievementInfo(CsAchievementInfo csAchievementInfo)
    {
        csAchievementInfo.setCreateAt(DateUtils.getTime());
        csAchievementInfo.setDelFlag("0");
        return csAchievementInfoMapper.insertCsAchievementInfo(csAchievementInfo);
    }

    /**
     * 修改科研成果信息
     *
     * @param csAchievementInfo 科研成果信息
     * @return 结果
     */
    @Override
    public int updateCsAchievementInfo(CsAchievementInfo csAchievementInfo)
    {
        csAchievementInfo.setUpdateAt(DateUtils.getTime());
        return csAchievementInfoMapper.updateCsAchievementInfo(csAchievementInfo);
    }

    /**
     * 批量删除科研成果信息
     *
     * @param achievementInfoIds 需要删除的科研成果信息主键
     * @return 结果
     */
    @Override
    public int deleteCsAchievementInfoByAchievementInfoIds(String[] achievementInfoIds)
    {
        return csAchievementInfoMapper.deleteCsAchievementInfoByAchievementInfoIds(achievementInfoIds);
    }

    /**
     * 删除科研成果信息信息
     *
     * @param achievementInfoId 科研成果信息主键
     * @return 结果
     */
    @Override
    public int deleteCsAchievementInfoByAchievementInfoId(String achievementInfoId)
    {
        return csAchievementInfoMapper.deleteCsAchievementInfoByAchievementInfoId(achievementInfoId);
    }

    /**
     * 批量新增科研成果-论文成果
     * @param list 论文成果信息列表
     * @param applyId 申请工单id
     * @param createAt 创建时间
     * @return
     */
    @Override
    public int batchInsertPaperAchievementList(List<CsAchievementPaperDetailsDTO> list, String applyId, Date createAt) {
        List<CsAchievementInfoDetails> paperAchievementList = list.stream()
                .map(person ->{
                    CsAchievementInfoDetails add = new CsAchievementInfoDetails();
                    add = BeanUtil.toBean(person,CsAchievementInfoDetails.class);
                    add.setInfoDetailsId(IdUtils.fastSimpleUUID());
                    add.setResId(applyId);
                    add.setAchievementType("0");
                    add.setCreateAt(createAt);
                    add.setDelFlag("0");
                    return add;
                }) // 转换对象类型
                .collect(Collectors.toList());
        return csAchievementInfoDetailsMapper.batchInsertCsAchievementInfoDetailsList(paperAchievementList);
    }

    /**
     * 批量新增科研成果-专利成果
     * @param list 专利成果信息列表
     * @param applyId 申请工单id
     * @param createAt 创建时间
     * @return
     */
    @Override
    public int batchInsertPatentAchievementList(List<CsAchievementPatentDetailsDTO> list, String applyId, Date createAt) {
        List<CsAchievementInfoDetails> patentAchievementList = list.stream()
                .map(person ->{
                    CsAchievementInfoDetails add = new CsAchievementInfoDetails();
                    add = BeanUtil.toBean(person,CsAchievementInfoDetails.class);
                    add.setInfoDetailsId(IdUtils.fastSimpleUUID());
                    add.setResId(applyId);
                    add.setAchievementType("1");
                    add.setCreateAt(createAt);
                    add.setDelFlag("0");
                    return add;
                }) // 转换对象类型
                .collect(Collectors.toList());
        return csAchievementInfoDetailsMapper.batchInsertCsAchievementInfoDetailsList(patentAchievementList);
    }

    /**
     * 批量新增科研成果-奖项成果
     * @param list 奖项成果信息列表
     * @param applyId 申请工单id
     * @param createAt 创建时间
     * @return
     */
    @Override
    public int batchInsertPrizeAchievementList(List<CsAchievementPrizeDetailsDTO> list, String applyId, Date createAt) {
        List<CsAchievementInfoDetails> prizeAchievementList = list.stream()
                .map(person ->{
                    CsAchievementInfoDetails add = new CsAchievementInfoDetails();
                    add = BeanUtil.toBean(person,CsAchievementInfoDetails.class);
                    add.setInfoDetailsId(IdUtils.fastSimpleUUID());
                    add.setResId(applyId);
                    add.setAchievementType("2");
                    add.setCreateAt(createAt);
                    add.setDelFlag("0");
                    return add;
                }) // 转换对象类型
                .collect(Collectors.toList());
        return csAchievementInfoDetailsMapper.batchInsertCsAchievementInfoDetailsList(prizeAchievementList);
    }

    /**
     * 批量新增科研成果-其他成果
     * @param list 其他成果信息列表
     * @param applyId 申请工单id
     * @param createAt 创建时间
     * @return
     */
    @Override
    public int batchInsertOtherAchievementList(List<CsAchievementOtherDetailsDTO> list, String applyId, Date createAt) {
        List<CsAchievementInfoDetails> otherAchievementList = list.stream()
                .map(person ->{
                    CsAchievementInfoDetails add = new CsAchievementInfoDetails();
                    add = BeanUtil.toBean(person,CsAchievementInfoDetails.class);
                    add.setInfoDetailsId(IdUtils.fastSimpleUUID());
                    add.setResId(applyId);
                    add.setAchievementType("3");
                    add.setCreateAt(createAt);
                    add.setDelFlag("0");
                    return add;
                }) // 转换对象类型
                .collect(Collectors.toList());
        return csAchievementInfoDetailsMapper.batchInsertCsAchievementInfoDetailsList(otherAchievementList);
    }

    /**
     * 批量新增科研成果-预约成果
     * @param list 预约成果信息列表
     * @param applyId 申请工单id
     * @param createAt 创建时间
     * @return
     */
    @Override
    public int batchInsertReservationAchievementList(List<CsAchievementReservationDetailsDTO> list, String applyId, Date createAt) {
        List<CsAchievementInfoDetails> reservationAchievementList = list.stream()
                .map(person ->{
                    CsAchievementInfoDetails add = new CsAchievementInfoDetails();
                    add = BeanUtil.toBean(person,CsAchievementInfoDetails.class);
                    add.setInfoDetailsId(IdUtils.fastSimpleUUID());
                    add.setResId(applyId);
                    add.setAchievementType("4");
                    add.setCreateAt(createAt);
                    add.setDelFlag("0");
                    return add;
                }) // 转换对象类型
                .collect(Collectors.toList());
        return csAchievementInfoDetailsMapper.batchInsertCsAchievementInfoDetailsList(reservationAchievementList);
    }

    /**
     * 批量修改科研成果-成果
     * @param list 预约成果信息列表
     * @return
     */
    @Override
    public int batchUpdateAchievementDetailsList(List<CsAchievementInfoDetails> list) {
        return csAchievementInfoDetailsMapper.batchUpdateAchievementDetailsList(list);
    }

    /**
     * 查询科研成果信息
     *
     * @param resId 相关资源ID
     * @return 科研成果信息
     */
    @Override
    public CsAchievementInfo selectCsAchievementInfoByResId(String resId) {
        return csAchievementInfoMapper.selectCsAchievementInfoByResId(resId);
    }

    /**
     * 修改科研成果信息
     *
     * @param csAchievementInfo 科研成果信息
     * @return 结果
     */
    @Override
    public int updateCsAchievementInfoByResId(CsAchievementInfo csAchievementInfo) {
        return csAchievementInfoMapper.updateCsAchievementInfoByResId(csAchievementInfo);
    }
}
