package com.ruoyi.base.service.impl;

import java.util.List;

import com.ruoyi.base.domain.BaseCabinetInfo;
import com.ruoyi.base.mapper.BaseCabinetInfoMapper;
import com.ruoyi.common.exception.ServiceException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.base.mapper.BaseBusbarInfoMapper;
import com.ruoyi.base.domain.BaseBusbarInfo;
import com.ruoyi.base.service.IBaseBusbarInfoService;

/**
 * 母排信息Service业务层处理
 * 
 * @author zangch
 * @date 2024-10-31
 */
@Service
public class BaseBusbarInfoServiceImpl implements IBaseBusbarInfoService 
{
    @Autowired
    private BaseBusbarInfoMapper baseBusbarInfoMapper;

    @Autowired
    private BaseCabinetInfoMapper baseCabinetInfoMapper;

    /**
     * 查询母排信息
     * 
     * @param objId 母排信息主键
     * @return 母排信息
     */
    @Override
    public BaseBusbarInfo selectBaseBusbarInfoByObjId(Long objId)
    {
        return baseBusbarInfoMapper.selectBaseBusbarInfoByObjId(objId);
    }

    /**
     * 查询母排信息列表
     * 
     * @param baseBusbarInfo 母排信息
     * @return 母排信息
     */
    @Override
    public List<BaseBusbarInfo> selectBaseBusbarInfoList(BaseBusbarInfo baseBusbarInfo)
    {
        return baseBusbarInfoMapper.selectBaseBusbarInfoList(baseBusbarInfo);
    }

    /**
     * 新增母排信息
     * 
     * @param baseBusbarInfo 母排信息
     * @return 结果
     */
    /**
     * 插入母排信息
     * @param baseBusbarInfo 要插入的母排信息对象
     * @return 插入操作的结果，返回影响的行数
     * @throws ServiceException 如果电柜信息不存在或母排编号已存在时抛出异常
     */
    @Override
    public int insertBaseBusbarInfo(BaseBusbarInfo baseBusbarInfo) {
        // 获取母排信息中的电柜编码
        Long cabinetCode = baseBusbarInfo.getCabinetCode();
        // 创建一个新的电柜信息对象并设置电柜编码
        BaseCabinetInfo baseCabinetInfo = new BaseCabinetInfo();
        baseCabinetInfo.setCabinetCode(cabinetCode);
        // 根据电柜编码查询电柜信息列表
        List<BaseCabinetInfo> baseCabinetInfoList = baseCabinetInfoMapper.selectBaseCabinetInfoList(baseCabinetInfo);
        // 如果电柜信息列表为空，则抛出异常提示用户先新增电柜
        if (baseCabinetInfoList.isEmpty()) {
            throw new ServiceException("未找到该电柜信息,请先新增电柜");
        }
    
        // 获取母排信息中的母排编码
        Long busbarCode = baseBusbarInfo.getBusbarCode();       
        // 创建一个新的母排信息对象并设置母排编码
        BaseBusbarInfo searchBusbar = new BaseBusbarInfo();
        searchBusbar.setBusbarCode(busbarCode);
        // 根据母排编码查询母排信息列表
        List<BaseBusbarInfo> baseBusbarInfoList = baseBusbarInfoMapper.selectBaseBusbarInfoList(searchBusbar);
        // 如果母排信息列表不为空，则抛出异常提示用户母排编号已存在
        if (!baseBusbarInfoList.isEmpty()) {
            throw new ServiceException("该母排编号已存在,请重新输入");
        }
    
        // 插入母排信息到数据库中，并返回插入操作的结果
        return baseBusbarInfoMapper.insertBaseBusbarInfo(baseBusbarInfo);
    }

    /**
     * 修改母排信息
     * 
     * @param baseBusbarInfo 母排信息
     * @return 结果
     */
    @Override
    public int updateBaseBusbarInfo(BaseBusbarInfo baseBusbarInfo)
    {
        // 获取电柜编码
        Long cabinetCode = baseBusbarInfo.getCabinetCode();
        // 创建一个新的BaseCabinetInfo对象
        BaseCabinetInfo baseCabinetInfo = new BaseCabinetInfo();
        // 设置电柜编码到BaseCabinetInfo对象中
        baseCabinetInfo.setCabinetCode(cabinetCode);
        // 根据电柜编码查询电柜信息列表
        List<BaseCabinetInfo> baseCabinetInfoList = baseCabinetInfoMapper.selectBaseCabinetInfoList(baseCabinetInfo);
        // 如果电柜信息列表为空，抛出异常提示未找到该电柜信息
        if (baseCabinetInfoList.isEmpty()){
            throw new ServiceException("未找到该电柜信息,请先新增电柜");
        }

        // 获取母排编码
        Long busbarCode = baseBusbarInfo.getBusbarCode();
        // 创建一个新的BaseBusbarInfo对象用于搜索
        BaseBusbarInfo searchBusbar = new BaseBusbarInfo();
        // 设置母排编码到搜索对象中
        searchBusbar.setBusbarCode(busbarCode);
        // 根据母排编码查询母排信息列表
        List<BaseBusbarInfo> baseBusbarInfoList = baseBusbarInfoMapper.selectBaseBusbarInfoList(searchBusbar);
        // 如果母排信息列表不为空且当前对象的ID与查询结果的第一个对象的ID不同，抛出异常提示母排编号已存在
        if (!baseBusbarInfoList.isEmpty()
                && !baseBusbarInfo.getObjId().equals(baseBusbarInfoList.get(0).getObjId())){
            throw new ServiceException("该母排编号已存在,请重新输入");
        }

        return baseBusbarInfoMapper.updateBaseBusbarInfo(baseBusbarInfo);
    }

    /**
     * 批量删除母排信息
     * 
     * @param objIds 需要删除的母排信息主键
     * @return 结果
     */
    @Override
    public int deleteBaseBusbarInfoByObjIds(Long[] objIds)
    {
        return baseBusbarInfoMapper.deleteBaseBusbarInfoByObjIds(objIds);
    }

    /**
     * 删除母排信息信息
     * 
     * @param objId 母排信息主键
     * @return 结果
     */
    @Override
    public int deleteBaseBusbarInfoByObjId(Long objId)
    {
        return baseBusbarInfoMapper.deleteBaseBusbarInfoByObjId(objId);
    }
}
