package cn.iocoder.yudao.module.mes.service.zjtaskresults;

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

import java.util.*;
import cn.iocoder.yudao.module.mes.controller.admin.zjtaskresults.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.zjtaskresults.ZjTaskResultsDO;
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.mes.dal.mysql.zjtaskresults.ZjTaskResultsMapper;

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

/**
 * 检验任务-检验结果 Service 实现类
 *
 * @author 必硕科技
 */
@Service
@Validated
public class ZjTaskResultsServiceImpl implements ZjTaskResultsService {

    @Resource
    private ZjTaskResultsMapper zjTaskResultsMapper;

    @Override
    public Long createZjTaskResults(ZjTaskResultsSaveReqVO createReqVO) {
        // 插入
        ZjTaskResultsDO zjTaskResults = BeanUtils.toBean(createReqVO, ZjTaskResultsDO.class);
        zjTaskResultsMapper.insert(zjTaskResults);
        // 返回
        return zjTaskResults.getId();
    }

    @Override
    public void updateZjTaskResults(ZjTaskResultsSaveReqVO updateReqVO) {
        // 校验存在
        validateZjTaskResultsExists(updateReqVO.getId());
        // 更新
        ZjTaskResultsDO updateObj = BeanUtils.toBean(updateReqVO, ZjTaskResultsDO.class);
        zjTaskResultsMapper.updateById(updateObj);
    }

    @Override
    public void deleteZjTaskResults(Long id) {
        // 校验存在
        validateZjTaskResultsExists(id);
        // 删除
        zjTaskResultsMapper.deleteById(id);
    }

    private void validateZjTaskResultsExists(Long id) {
        if (zjTaskResultsMapper.selectById(id) == null) {
            throw exception(ZJ_TASK_RESULTS_NOT_EXISTS);
        }
    }

    @Override
    public ZjTaskResultsDO getZjTaskResults(Long id) {
        return zjTaskResultsMapper.selectById(id);
    }

    @Override
    public PageResult<ZjTaskResultsDO> getZjTaskResultsPage(ZjTaskResultsPageReqVO pageReqVO) {
        return zjTaskResultsMapper.selectPage(pageReqVO);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void batchUpdateZjTaskResults(List<ZjTaskResultsBatchUpdateReqVO.ResultItem> resultItems) {
        // 遍历批量更新每个检验结果（仅更新zjResult和images）
        for (ZjTaskResultsBatchUpdateReqVO.ResultItem item : resultItems) {
            ZjTaskResultsDO updateDO = new ZjTaskResultsDO();
            updateDO.setId(item.getId());
            updateDO.setZjResult(item.getZjResult());
            updateDO.setImages(item.getImages());
            // 使用mybatis-plus的updateById更新指定字段
            zjTaskResultsMapper.updateById(updateDO);
        }
    }

}