package com.zd.airbottle.service.impl;

import com.zd.airbottle.domain.QpTaskDetail;
import com.zd.airbottle.domain.vo.QpAirBottleConfigVo;
import com.zd.airbottle.domain.vo.QpAirGoodsConfigRelationVo;
import com.zd.airbottle.domain.vo.QpTaskDetailVO;
import com.zd.airbottle.mapper.QpTaskDetailMapper;
import com.zd.airbottle.service.IQpAirBottleConfigService;
import com.zd.airbottle.service.IQpTaskDetailService;
import com.zd.common.core.utils.bean.TransferUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 【请填写功能名称】Service业务层处理
 *
 * @author zd
 * @date 2022-05-11
 */
@Service
public class QpTaskDetailServiceImpl implements IQpTaskDetailService {
    @Autowired
    private QpTaskDetailMapper qpTaskDetailMapper;

    @Autowired
    private IQpAirBottleConfigService configService;

    /**
     * 查询【请填写功能名称】
     *
     * @param id 【请填写功能名称】主键
     * @return 【请填写功能名称】
     */
    @Override
    public QpTaskDetail selectQpTaskDetailById(Long id) {
        return qpTaskDetailMapper.selectQpTaskDetailById(id);
    }

    @Override
    public QpTaskDetailVO selectQpTaskDetailByIdVo(Long id) {
        return qpTaskDetailMapper.selectQpTaskDetailByIdVo(id);
    }

    /**
     * 查询【请填写功能名称】列表
     *
     * @param qpTaskDetail 【请填写功能名称】
     * @return 【请填写功能名称】
     */
    @Override
    public List<QpTaskDetail> selectQpTaskDetailList(QpTaskDetail qpTaskDetail) {
        return qpTaskDetailMapper.selectQpTaskDetailList(qpTaskDetail);
    }

    @Override
    public List<QpTaskDetailVO> selectQpTaskDetailListVo(QpTaskDetail qpTaskDetail) {
        return qpTaskDetailMapper.selectQpTaskDetailListVo(qpTaskDetail);
    }

    /**
     * 新增【请填写功能名称】
     *
     * @param qpTaskDetail 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int insertQpTaskDetail(QpTaskDetail qpTaskDetail) {
        return qpTaskDetailMapper.insertQpTaskDetail(qpTaskDetail);
    }

    /**
     * 修改【请填写功能名称】
     *
     * @param qpTaskDetail 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int updateQpTaskDetail(QpTaskDetail qpTaskDetail) {
        return qpTaskDetailMapper.updateQpTaskDetail(qpTaskDetail);
    }

    /**
     * 批量删除【请填写功能名称】
     *
     * @param ids 需要删除的【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteQpTaskDetailByIds(Long[] ids) {
        return qpTaskDetailMapper.deleteQpTaskDetailByIds(ids);
    }

    /**
     * 删除【请填写功能名称】信息
     *
     * @param id 【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteQpTaskDetailById(Long id) {
        return qpTaskDetailMapper.deleteQpTaskDetailById(id);
    }

    /**
     * 根据待办清单id详情关联查询
     *
     * @param id
     * @return
     */
    @Override
    public List<QpTaskDetailVO> selectQpTaskDetailByIdRelation(Long id) {
        return qpTaskDetailMapper.selectQpTaskDetailByIdRelation(id);
    }

    /**
     * 根据待办清单详情表id 关联查询
     *
     * @param id
     * @return
     */
    @Override
    public List<QpAirGoodsConfigRelationVo> selectQpTaskDetailByDetailsIdRelation(Long id) {
        return qpTaskDetailMapper.selectQpTaskDetailByDetailsIdRelation(id);
    }

    /**
     * 根据待办清单详情表id 关联查询规格信息
     *
     * @param id
     * @return
     */
    @Override
    public QpTaskDetailVO selectRelationByDetailsId(Long id) {
        return qpTaskDetailMapper.selectRelationByDetailsId(id);
    }

    /*//递归查询气瓶规格
    public QpAirGoodsConfig recursionGoodsConfig(Long id) {
        QpAirGoodsConfig goodsConfig = qpAirGoodsConfigMapper.selectQpAirGoodsConfigById(id);
        if (goodsConfig.getParentId() == -1) {
            return goodsConfig;
        }
        return recursionGoodsConfig(goodsConfig.getParentId());
    }*/

    /**
     * 待办清单待入库列表
     *
     * @param id
     * @return
     */
    @Override
    public List<QpAirGoodsConfigRelationVo> selectQpTaskDetailStock(Long id) {

        return qpTaskDetailMapper.selectQpTaskDetailStock(id);
    }

    /*private List<QpAirGoodsConfigRelationVo> getQpAirGoodsConfigRelationVos(List<QpAirGoodsConfigRelationVo> list) {
        if (!list.isEmpty()) {
            for (QpAirGoodsConfigRelationVo qpAirGoodsConfigRelationVo : list) {
                QpAirGoodsConfig gc = recursionGoodsConfig(qpAirGoodsConfigRelationVo.getParentId());
                QpSpecificationDetail specificationDetail = qpSpecificationDetailMapper.selectQpSpecificationDetailById(gc.getConfigId());
                if (specificationDetail != null) {
                    qpAirGoodsConfigRelationVo.setParent(specificationDetail.getSpecValue());
                }
            }
        }
        return list;
    }*/

    /***
     * 未派送
     * @param id
     * @return
     */
    @Override
    public List<QpAirGoodsConfigRelationVo> selectQpTaskDetailDistribute(Long id) {
        return qpTaskDetailMapper.selectQpTaskDetailStock(id);
    }

    /***
     * 待办清单 已入库
     * @param id
     * @return
     */
    @Override
    public List<QpAirGoodsConfigRelationVo> selectQpTaskDetailDealWith(Long id) {
        return qpTaskDetailMapper.selectQpTaskDetailDealWith(id);
    }

    /***
     * 待办清单 拒收列表
     * @param id
     * @return
     */
    @Override
    public List<QpAirGoodsConfigRelationVo> selectQpTaskDetailRefuse(Long id) {
        return qpTaskDetailMapper.selectQpTaskDetailRefuse(id);
    }

    @Override
    public List<QpTaskDetailVO> getDetailsInfo(Long taskId) {
        QpTaskDetail qpTaskDetail = new QpTaskDetail();
        qpTaskDetail.setTaskId(taskId);
        List<QpTaskDetail> taskDetails = qpTaskDetailMapper.selectQpTaskDetailList(qpTaskDetail);

        List<QpTaskDetailVO> detailVOS = TransferUtils.transferList(taskDetails, QpTaskDetailVO.class);
        //根据configID查询对应供应商气瓶名称等相关信息
        Map<Long, QpAirBottleConfigVo> configVoMap =QpBottleStorageServiceImpl.getConfigMap(taskDetails.stream().map(QpTaskDetail::getAirBottleConfigId).collect(Collectors.toList()), configService);

        //数据组装
        detailVOS.forEach(d->{
            Long airBottleConfigId = d.getAirBottleConfigId();
            if (configVoMap.containsKey(airBottleConfigId)){
                QpAirBottleConfigVo configVo = configVoMap.get(airBottleConfigId);
                d.setGasNorms(configVo.getConfigName());
                d.setAirName(configVo.getAirName());
                d.setCompanyName(configVo.getCompanyName());
            }
        });
        return detailVOS;
    }

    /***
     * 气瓶列表 关联查询气瓶详细信息
     * @param airGoodsConfigRelationVo
     * @return
     */
    @Override
    public List<QpAirGoodsConfigRelationVo> selectQpTaskDetailRelationList(QpAirGoodsConfigRelationVo airGoodsConfigRelationVo) {
        return qpTaskDetailMapper.selectQpTaskDetailRelationList(airGoodsConfigRelationVo);
    }
}
