package cn.iocoder.yudao.module.erp.service.autocode;

import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodeRecordDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;

import cn.iocoder.yudao.module.erp.dal.mysql.autocode.AutocodeRecordMapper;

import javax.annotation.Resource;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;

/**
 * 编码生成记录 Service 实现类
 *
 * @author 内蒙必硕
 */
@Service
@Validated
public class AutocodeRecordServiceImpl implements AutocodeRecordService {

    @Resource
    private AutocodeRecordMapper autocodeRecordMapper;

    @Override
    public Long createAutocodeRecord(AutocodeRecordSaveReqVO createReqVO) {
        // 插入
        AutocodeRecordDO autocodeRecord = BeanUtils.toBean(createReqVO, AutocodeRecordDO.class);
        autocodeRecordMapper.insert(autocodeRecord);
        // 返回
        return autocodeRecord.getId();
    }

    @Override
    public void updateAutocodeRecord(AutocodeRecordSaveReqVO updateReqVO) {
        // 校验存在
        validateAutocodeRecordExists(updateReqVO.getId());
        // 更新
        AutocodeRecordDO updateObj = BeanUtils.toBean(updateReqVO, AutocodeRecordDO.class);
        autocodeRecordMapper.updateById(updateObj);
    }

    @Override
    public void deleteAutocodeRecord(Long id) {
        // 校验存在
        validateAutocodeRecordExists(id);
        // 删除
        autocodeRecordMapper.deleteById(id);
    }

    private void validateAutocodeRecordExists(Long id) {
        if (autocodeRecordMapper.selectById(id) == null) {
            throw exception(AUTOCODE_RECORD_NOT_EXISTS);
        }
    }

    @Override
    public AutocodeRecordDO getAutocodeRecord(Long id) {
        return autocodeRecordMapper.selectById(id);
    }

    @Override
    public PageResult<AutocodeRecordDO> getAutocodeRecordPage(AutocodeRecordPageReqVO pageReqVO) {
        return autocodeRecordMapper.selectPage(pageReqVO);
    }

    @Override
    public List<AutocodeRecordDO> selectListByRuleId(Long ruleId) {
        return autocodeRecordMapper.selectListByRuleId(ruleId);
    }

    @Override
    public List<AutocodeRecordDO> list(AutocodeRecordDO sysAutoCodeResult) {
        return autocodeRecordMapper.selectRecordList(sysAutoCodeResult);
    }

}