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.cs.domain.CsBusinessMapping;
import com.ruoyi.cs.domain.dto.CsUserNetworkInfoAddDTO;
import com.ruoyi.cs.domain.vo.CsUserNetworkInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.cs.mapper.CsUserNetworkInfoMapper;
import com.ruoyi.cs.domain.CsUserNetworkInfo;
import com.ruoyi.cs.service.ICsUserNetworkInfoService;

import javax.annotation.Resource;

/**
 * 用户端网络信息Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-04-27
 */
@Service
public class CsUserNetworkInfoServiceImpl implements ICsUserNetworkInfoService 
{
    @Resource
    private CsUserNetworkInfoMapper csUserNetworkInfoMapper;

    /**
     * 查询用户端网络信息
     * 
     * @param networkInfoId 用户端网络信息主键
     * @return 用户端网络信息
     */
    @Override
    public CsUserNetworkInfo selectCsUserNetworkInfoByNetworkInfoId(String networkInfoId)
    {
        return csUserNetworkInfoMapper.selectCsUserNetworkInfoByNetworkInfoId(networkInfoId);
    }

    /**
     * 查询用户端网络信息列表
     * 
     * @param csUserNetworkInfo 用户端网络信息
     * @return 用户端网络信息
     */
    @Override
    public List<CsUserNetworkInfo> selectCsUserNetworkInfoList(CsUserNetworkInfo csUserNetworkInfo)
    {
        return csUserNetworkInfoMapper.selectCsUserNetworkInfoList(csUserNetworkInfo);
    }

    /**
     * 新增用户端网络信息
     * 
     * @param csUserNetworkInfo 用户端网络信息
     * @return 结果
     */
    @Override
    public int insertCsUserNetworkInfo(CsUserNetworkInfo csUserNetworkInfo)
    {
        return csUserNetworkInfoMapper.insertCsUserNetworkInfo(csUserNetworkInfo);
    }

    /**
     * 修改用户端网络信息
     * 
     * @param csUserNetworkInfo 用户端网络信息
     * @return 结果
     */
    @Override
    public int updateCsUserNetworkInfo(CsUserNetworkInfo csUserNetworkInfo)
    {
        return csUserNetworkInfoMapper.updateCsUserNetworkInfo(csUserNetworkInfo);
    }

    /**
     * 批量删除用户端网络信息
     * 
     * @param networkInfoIds 需要删除的用户端网络信息主键
     * @return 结果
     */
    @Override
    public int deleteCsUserNetworkInfoByNetworkInfoIds(String[] networkInfoIds)
    {
        return csUserNetworkInfoMapper.deleteCsUserNetworkInfoByNetworkInfoIds(networkInfoIds);
    }

    /**
     * 删除用户端网络信息信息
     * 
     * @param networkInfoId 用户端网络信息主键
     * @return 结果
     */
    @Override
    public int deleteCsUserNetworkInfoByNetworkInfoId(String networkInfoId)
    {
        return csUserNetworkInfoMapper.deleteCsUserNetworkInfoByNetworkInfoId(networkInfoId);
    }

    /**
     * 批量新增用户端网络信息
     * @param list 映射信息列表
     * @param applyId 申请资源id
     * @param createAt 创建时间
     * @param resType 资源类型：0-资源，1-工单
     * @return
     */
    @Override
    public int batchCoverUserNetwork(List<CsUserNetworkInfoAddDTO> list, String applyId, Date createAt, String resType) {
        //删除原有用户端网络信息
        int delete = csUserNetworkInfoMapper.batchDeleteCsUserNetworkInfoForCover(applyId, resType);
        List<CsUserNetworkInfo> netWorkList = list.stream()
                .map(mapping ->{
                    CsUserNetworkInfo add = new CsUserNetworkInfo();
                    add = BeanUtil.toBean(mapping,CsUserNetworkInfo.class);
                    add.setNetworkInfoId(IdUtil.getSnowflakeNextIdStr());
                    add.setResId(applyId);
                    add.setResType(resType);
                    add.setStatus("0");
                    add.setCreateAt(createAt);
                    add.setDelFlag("0");
                    return add;
                }) // 转换对象类型
                .collect(Collectors.toList());

        //批量新增
        return csUserNetworkInfoMapper.batchInsertCsUserNetworkInfo(netWorkList);
    }

    /**
     * 获取工单相关的用户网络信息列表
     * @param resId 申请id
     * @param resType 申请类型（0-资源，1-工单)
     * @return
     */
    @Override
    public List<CsUserNetworkInfoVO> selectUserNetworkInfoVOList(String resId, String resType) {
        return csUserNetworkInfoMapper.selectUserNetworkInfoList(resId, resType);
    }
}
