package com.ruoyi.cs.service.impl;

import java.util.Arrays;
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.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.cs.domain.dto.CsApprovalCarbonCopyDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.cs.mapper.CsApprovalCarbonCopyMapper;
import com.ruoyi.cs.domain.CsApprovalCarbonCopy;
import com.ruoyi.cs.service.ICsApprovalCarbonCopyService;

/**
 * 审核抄送记录Service业务层处理
 * 
 * @author cc
 * @date 2024-04-30
 */
@Service
public class CsApprovalCarbonCopyServiceImpl implements ICsApprovalCarbonCopyService 
{
    @Autowired
    private CsApprovalCarbonCopyMapper csApprovalCarbonCopyMapper;

    /**
     * 查询审核抄送记录
     * 
     * @param carbonCopyId 审核抄送记录主键
     * @return 审核抄送记录
     */
    @Override
    public CsApprovalCarbonCopy selectCsApprovalCarbonCopyByCarbonCopyId(String carbonCopyId)
    {
        return csApprovalCarbonCopyMapper.selectCsApprovalCarbonCopyByCarbonCopyId(carbonCopyId);
    }

    /**
     * 查询审核抄送记录列表
     * 
     * @param csApprovalCarbonCopy 审核抄送记录
     * @return 审核抄送记录
     */
    @Override
    public List<CsApprovalCarbonCopy> selectCsApprovalCarbonCopyList(CsApprovalCarbonCopy csApprovalCarbonCopy)
    {
        return csApprovalCarbonCopyMapper.selectCsApprovalCarbonCopyList(csApprovalCarbonCopy);
    }

    /**
     * 新增审核抄送记录
     * 
     * @param csApprovalCarbonCopy 审核抄送记录
     * @return 结果
     */
    @Override
    public int insertCsApprovalCarbonCopy(CsApprovalCarbonCopy csApprovalCarbonCopy)
    {
        csApprovalCarbonCopy.setCreateTime(DateUtils.getNowDate());
        return csApprovalCarbonCopyMapper.insertCsApprovalCarbonCopy(csApprovalCarbonCopy);
    }

    /**
     * 修改审核抄送记录
     * 
     * @param csApprovalCarbonCopy 审核抄送记录
     * @return 结果
     */
    @Override
    public int updateCsApprovalCarbonCopy(CsApprovalCarbonCopy csApprovalCarbonCopy)
    {
        return csApprovalCarbonCopyMapper.updateCsApprovalCarbonCopy(csApprovalCarbonCopy);
    }

    /**
     * 批量删除审核抄送记录
     * 
     * @param carbonCopyIds 需要删除的审核抄送记录主键
     * @return 结果
     */
    @Override
    public int deleteCsApprovalCarbonCopyByCarbonCopyIds(String[] carbonCopyIds)
    {
        return csApprovalCarbonCopyMapper.deleteCsApprovalCarbonCopyByCarbonCopyIds(carbonCopyIds);
    }

    /**
     * 删除审核抄送记录信息
     * 
     * @param carbonCopyId 审核抄送记录主键
     * @return 结果
     */
    @Override
    public int deleteCsApprovalCarbonCopyByCarbonCopyId(String carbonCopyId)
    {
        return csApprovalCarbonCopyMapper.deleteCsApprovalCarbonCopyByCarbonCopyId(carbonCopyId);
    }

    /**
     * 批量新增抄送
     * @param dto
     * @return
     */
    @Override
    public int batchInsertCopy(CsApprovalCarbonCopyDTO dto) {
        String uids = dto.getUids();
        Date approverTime = dto.getApproverTime();

        List<String> cpoyUidList = Arrays.asList(uids.split(","));
        List<CsApprovalCarbonCopy> collect = cpoyUidList.stream().map(uid ->
        {
            CsApprovalCarbonCopy carbonCopy = new CsApprovalCarbonCopy();
            carbonCopy = BeanUtil.toBean(dto, CsApprovalCarbonCopy.class);
            carbonCopy.setCarbonCopyId(IdUtil.getSnowflakeNextIdStr());
            carbonCopy.setUserId(uid);
            carbonCopy.setCreateTime(approverTime);
            carbonCopy.setRead(0);
            carbonCopy.setDelFlag("0");
            return carbonCopy;
        }).collect(Collectors.toList());
        return csApprovalCarbonCopyMapper.batchInsert(collect);
    }

    /**
     * 批量删除审核抄送
     * @param formId
     * @param formType 类型（0资源、1工单）
     * @return
     */
    @Override
    public int deleteCopys(String formId, String formType) {
        return csApprovalCarbonCopyMapper.deleteCopys(formId, formType);
    }

    /**
     *  xcx_用户消息全部已读
     * @return
     */
    @Override
    public int updateReadForXcx() {
        return csApprovalCarbonCopyMapper.updateReadByUid(SecurityUtils.getUserId());
    }
}
