package com.ruoyi.cs.service.impl;

import java.util.List;

import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.cs.domain.dto.CsResApplySoftwareInfoADDDTO;
import com.ruoyi.cs.domain.dto.CsResApplySoftwareItemAddDTO;
import com.ruoyi.cs.domain.vo.CsResApplySoftwareInfoVO;
import com.ruoyi.cs.domain.vo.CsResApplySoftwareItemVO;
import com.ruoyi.cs.service.ICsResApplySoftwareItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.cs.mapper.CsResApplySoftwareInfoMapper;
import com.ruoyi.cs.domain.CsResApplySoftwareInfo;
import com.ruoyi.cs.service.ICsResApplySoftwareInfoService;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;

import javax.annotation.Resource;

/**
 * 资源申请单软件信息Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-04-29
 */
@Service
public class CsResApplySoftwareInfoServiceImpl implements ICsResApplySoftwareInfoService
{
    @Autowired
    private CsResApplySoftwareInfoMapper csResApplySoftwareInfoMapper;

    @Resource
    private ICsResApplySoftwareItemService csResApplySoftwareItemService;

    /**
     * 查询资源申请单软件信息
     * 
     * @param applySoftwareId 资源申请单软件信息主键
     * @return 资源申请单软件信息
     */
    @Override
    public CsResApplySoftwareInfo selectCsApplySoftwareInfoByApplySoftwareId(String applySoftwareId)
    {
        return csResApplySoftwareInfoMapper.selectCsApplySoftwareInfoByApplySoftwareId(applySoftwareId);
    }

    /**
     * 查询资源申请单软件信息列表
     * 
     * @param csResApplySoftwareInfo 资源申请单软件信息
     * @return 资源申请单软件信息
     */
    @Override
    public List<CsResApplySoftwareInfo> selectCsApplySoftwareInfoList(CsResApplySoftwareInfo csResApplySoftwareInfo)
    {
        return csResApplySoftwareInfoMapper.selectCsApplySoftwareInfoList(csResApplySoftwareInfo);
    }

    /**
     * 新增资源申请单软件信息
     * 
     * @param adddto 资源申请单软件信息
     * @return 结果
     */
    @Override
    public int insertCoverCsApplySoftwareInfo(CsResApplySoftwareInfoADDDTO adddto, String applyId)
    {
        //删除原有softwareInfo 和 softwareItem
        int delOldSoftwareInfo = csResApplySoftwareInfoMapper.deleteCsApplySoftwareInfoByApplyId(applyId);
        int delOldSoftItem = csResApplySoftwareItemService.deleteItemListByApplyId(applyId);

        CsResApplySoftwareInfo csResApplySoftwareInfo = BeanUtil.toBean(adddto, CsResApplySoftwareInfo.class);
        csResApplySoftwareInfo.setApplySoftwareId(IdUtils.fastSimpleUUID());
        csResApplySoftwareInfo.setApplyId(applyId);
        csResApplySoftwareInfo.setCreateAt(DateUtils.getNowDate());
        csResApplySoftwareInfo.setDelFlag("0");
        ///新增软件版本列表
        List<CsResApplySoftwareItemAddDTO> itemList = adddto.getItemList();
        if(!CollectionUtils.isEmpty(itemList)){
            int insertItem = csResApplySoftwareItemService.batchInsertCsResApplySoftwareItem(itemList, csResApplySoftwareInfo);
        }
        return csResApplySoftwareInfoMapper.insertCsApplySoftwareInfo(csResApplySoftwareInfo);
    }

    /**
     * 修改资源申请单软件信息
     * 
     * @param csResApplySoftwareInfo 资源申请单软件信息
     * @return 结果
     */
    @Override
    public int updateCsApplySoftwareInfo(CsResApplySoftwareInfo csResApplySoftwareInfo)
    {
        return csResApplySoftwareInfoMapper.updateCsApplySoftwareInfo(csResApplySoftwareInfo);
    }

    /**
     * 批量删除资源申请单软件信息
     * 
     * @param applySoftwareIds 需要删除的资源申请单软件信息主键
     * @return 结果
     */
    @Override
    public int deleteCsApplySoftwareInfoByApplySoftwareIds(String[] applySoftwareIds)
    {
        return csResApplySoftwareInfoMapper.deleteCsApplySoftwareInfoByApplySoftwareIds(applySoftwareIds);
    }

    /**
     * 删除资源申请单软件信息信息
     * 
     * @param applySoftwareId 资源申请单软件信息主键
     * @return 结果
     */
    @Override
    public int deleteCsApplySoftwareInfoByApplySoftwareId(String applySoftwareId)
    {
        return csResApplySoftwareInfoMapper.deleteCsApplySoftwareInfoByApplySoftwareId(applySoftwareId);
    }

    /**
     * 获取申请单软件信息详情
     * @param applyId 申请ID
     * @return
     */
    @Override
    public CsResApplySoftwareInfoVO selectVO(String applyId) {
        CsResApplySoftwareInfo csResApplySoftwareInfo = csResApplySoftwareInfoMapper.selectSoftwareInfoByApplyId(applyId);
        CsResApplySoftwareInfoVO result = BeanUtil.toBean(csResApplySoftwareInfo,CsResApplySoftwareInfoVO.class);
        //查询itemList
        if(!ObjectUtils.isEmpty(result)){
            List<CsResApplySoftwareItemVO> csResApplySoftwareItemVOS = csResApplySoftwareItemService.selectItemVoList(result.getApplySoftwareId());
            if(!CollectionUtils.isEmpty(csResApplySoftwareItemVOS)){
                result.setItemList(csResApplySoftwareItemVOS);
            }
        }
        return result;
    }
}
