package com.hw.qms.service.impl;

import java.util.List;

import com.hw.common.core.constant.QmsConstants;
import com.hw.common.core.utils.DateUtils;
import com.hw.qms.domain.MesBaseBarcodeInfo;
import com.hw.qms.domain.QmsCheckRuleProject;
import com.hw.qms.domain.vo.QmsMaterialCheckVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;

import com.hw.common.core.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.hw.qms.domain.QmsCheckResultDetailProject;
import com.hw.qms.mapper.QmsCheckResultDetailMapper;
import com.hw.qms.domain.QmsCheckResultDetail;
import com.hw.qms.service.IQmsCheckResultDetailService;

/**
 * 质检结果详情Service业务层处理
 *
 * @author xins
 * @date 2024-01-23
 */
@Service
public class QmsCheckResultDetailServiceImpl implements IQmsCheckResultDetailService {
    @Autowired
    private QmsCheckResultDetailMapper qmsCheckResultDetailMapper;

    /**
     * 查询质检结果详情
     *
     * @param checkResultDetailId 质检结果详情主键
     * @return 质检结果详情
     */
    @Override
    public QmsCheckResultDetail selectQmsCheckResultDetailByCheckResultDetailId(Long checkResultDetailId) {
        return qmsCheckResultDetailMapper.selectQmsCheckResultDetailByCheckResultDetailId(checkResultDetailId);
    }

    /**
     * 查询质检结果详情列表
     *
     * @param qmsCheckResultDetail 质检结果详情
     * @return 质检结果详情
     */
    @Override
    public List<QmsCheckResultDetail> selectQmsCheckResultDetailList(QmsCheckResultDetail qmsCheckResultDetail) {
        return qmsCheckResultDetailMapper.selectQmsCheckResultDetailList(qmsCheckResultDetail);
    }

    /**
     * 新增质检结果详情
     *
     * @param qmsCheckResultDetail 质检结果详情
     * @return 结果
     */
    @Transactional
    @Override
    public int insertQmsCheckResultDetail(QmsCheckResultDetail qmsCheckResultDetail) {
        qmsCheckResultDetail.setCreateTime(DateUtils.getNowDate());
        int rows = qmsCheckResultDetailMapper.insertQmsCheckResultDetail(qmsCheckResultDetail);
        insertQmsCheckResultDetailProject(qmsCheckResultDetail);
        return rows;
    }

    /**
     * 修改质检结果详情
     *
     * @param qmsCheckResultDetail 质检结果详情
     * @return 结果
     */
    @Transactional
    @Override
    public int updateQmsCheckResultDetail(QmsCheckResultDetail qmsCheckResultDetail) {
        qmsCheckResultDetail.setUpdateTime(DateUtils.getNowDate());
        qmsCheckResultDetailMapper.deleteQmsCheckResultDetailProjectByCheckResultDetailId(qmsCheckResultDetail.getCheckResultDetailId());
        insertQmsCheckResultDetailProject(qmsCheckResultDetail);
        return qmsCheckResultDetailMapper.updateQmsCheckResultDetail(qmsCheckResultDetail);
    }

    /**
     * 批量删除质检结果详情
     *
     * @param checkResultDetailIds 需要删除的质检结果详情主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteQmsCheckResultDetailByCheckResultDetailIds(Long[] checkResultDetailIds) {
        qmsCheckResultDetailMapper.deleteQmsCheckResultDetailProjectByCheckResultDetailIds(checkResultDetailIds);
        return qmsCheckResultDetailMapper.deleteQmsCheckResultDetailByCheckResultDetailIds(checkResultDetailIds);
    }

    /**
     * 删除质检结果详情信息
     *
     * @param checkResultDetailId 质检结果详情主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteQmsCheckResultDetailByCheckResultDetailId(Long checkResultDetailId) {
        qmsCheckResultDetailMapper.deleteQmsCheckResultDetailProjectByCheckResultDetailId(checkResultDetailId);
        return qmsCheckResultDetailMapper.deleteQmsCheckResultDetailByCheckResultDetailId(checkResultDetailId);
    }

    /**
     * 新增质检结果详情项目信息信息
     *
     * @param qmsCheckResultDetail 质检结果详情对象
     */
    public void insertQmsCheckResultDetailProject(QmsCheckResultDetail qmsCheckResultDetail) {
        List<QmsCheckResultDetailProject> qmsCheckResultDetailProjectList = qmsCheckResultDetail.getQmsCheckResultDetailProjectList();
        Long checkResultDetailId = qmsCheckResultDetail.getCheckResultDetailId();
        if (StringUtils.isNotNull(qmsCheckResultDetailProjectList)) {
            List<QmsCheckResultDetailProject> list = new ArrayList<QmsCheckResultDetailProject>();
            for (QmsCheckResultDetailProject qmsCheckResultDetailProject : qmsCheckResultDetailProjectList) {
                qmsCheckResultDetailProject.setCheckResultDetailId(checkResultDetailId);
                list.add(qmsCheckResultDetailProject);
            }
            if (list.size() > 0) {
                qmsCheckResultDetailMapper.batchQmsCheckResultDetailProject(list);
            }
        }
    }


    /**
     * 获取质检结果详情
     * @param materialBarcode 物料条码
     * @return
     */
    @Override
    public QmsCheckResultDetail getCheckResultDetail(String materialBarcode) {
        //现获取质检结果with质检项目结果详情信息
        QmsCheckResultDetail checkResultDetail = qmsCheckResultDetailMapper.selectQmsCheckResultDetailByMaterialBarcode(materialBarcode);
        return checkResultDetail;
    }

}
