package cn.iocoder.yudao.module.archives.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.module.archives.entity.Archives;
import cn.iocoder.yudao.module.archives.mapper.ArchivesMapper;
import cn.iocoder.yudao.module.archives.service.ArchivesService;
import cn.iocoder.yudao.module.archives.vo.ArchivesReqVO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.List;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception0;

/**
 * 档案表 服务实现类
 * @author 小李
 * @date 20:14 2024/8/28
**/
@Service
public class ArchivesServiceImpl extends ServiceImpl<ArchivesMapper, Archives> implements ArchivesService {

    /**
     * 新增或修改 档案表
     * @author 小李
     * @date 10:42 2024/8/29
     * @param archivesReqVO 请求对象
     **/
    @Override
    public void updateArchives(ArchivesReqVO archivesReqVO){
        // 新增
        if (ObjectUtil.isEmpty(archivesReqVO.getId())){
            // 判断档案名是否重复
            List<Archives> archives = baseMapper.selectList(new LambdaQueryWrapper<Archives>().eq(Archives::getArchivesCode, archivesReqVO.getArchivesCode()));
            if (CollectionUtil.isNotEmpty(archives)){
                throw exception0(500, "档案名重复");
            }
            baseMapper.insert(archivesReqVO);
            return;
        }

        // 修改
        // 判断档案名是否合法
        // 如果有，判断id是否一致，不一致就是重复，其他情况皆可执行
        List<Archives> archives = baseMapper.selectList(new LambdaQueryWrapper<Archives>().eq(Archives::getArchivesCode, archivesReqVO.getArchivesCode()));
        // 用&&短路的特性去判断，少写点代码
        // get 0有些不合理，理论上讲是不会有多条的，概率小，改一下名字就行
        Boolean flag = CollectionUtil.isNotEmpty(archives) && !archives.get(0).getId().equals(archivesReqVO.getId());
        if (flag){
            throw exception0(500, "档案名重复");
        }
        baseMapper.updateById(archivesReqVO);
    }

    /**
     * 分页查询 档案表
     * @author 小李
     * @date 11:08 2024/8/29
     * @param archivesReqVO 查询条件
     **/
    @Override
    public IPage<Archives> queryArchivesPage(ArchivesReqVO archivesReqVO, Page<Archives> page){
        return baseMapper.queryArchivesPage(archivesReqVO, page);
    }

    /**
     * 删除 档案表
     * @author 小李
     * @date 14:14 2024/8/29
     * @param id 记录ID
     **/
    @Override
    public void removeArchivesById(String id){
        baseMapper.deleteById(id);
    }
}
