package org.springblade.modules.app.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wn.common.datamodel.ModelConvertUtil;
import com.wn.common.validator.Validator;
import org.springblade.modules.app.common.dto.TransportStageInfoDTO;
import org.springblade.modules.app.common.query.TransportStageQuery;
import org.springblade.modules.app.constant.DbField;
import org.springblade.modules.app.constant.ErrorCode;
import org.springblade.modules.app.entity.TransportStageInfoDO;
import org.springblade.modules.app.mapper.TransportStageInfoMapper;
import org.springblade.modules.app.service.ITransportStageInfoService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * 运输单信息 服务实现类
 * </p>
 *
 * @author fuxinsheng
 * @since 2021-11-05
 */
@Service
public class TransportStageInfoServiceImpl extends ServiceImpl<TransportStageInfoMapper, TransportStageInfoDO> implements ITransportStageInfoService {
    @Override
    public List<TransportStageInfoDTO> listInfo(TransportStageQuery transportStageQuery) {
        Validator.notNull(transportStageQuery, ErrorCode.INPUT_PARAMETERS_NULL);
        QueryWrapper<TransportStageInfoDO> wrapper = new QueryWrapper<>();
        wrapper.eq(transportStageQuery.getTransportId() != null, DbField.TRANSPORT_ID, transportStageQuery.getTransportId());
        wrapper.eq(transportStageQuery.getStage() != null, DbField.STAGE, transportStageQuery.getStage());
        List<TransportStageInfoDO> list = list(wrapper);
        return CollectionUtils.isNotEmpty(list) ? ModelConvertUtil.copyListTo(list, TransportStageInfoDTO.class) : null;
    }

    @Override
    public TransportStageInfoDTO getInfo(TransportStageQuery transportStageQuery) {
        Validator.notNull(transportStageQuery, ErrorCode.INPUT_PARAMETERS_NULL);
        QueryWrapper<TransportStageInfoDO> wrapper = new QueryWrapper<>();
        wrapper.eq(transportStageQuery.getTransportId() != null, DbField.TRANSPORT_ID, transportStageQuery.getTransportId());
        wrapper.eq(transportStageQuery.getStage() != null, DbField.STAGE, transportStageQuery.getStage());
        wrapper.last("limit 1");
        TransportStageInfoDO transportStageInfoDO = getOne(wrapper);
        return transportStageInfoDO == null ? null : transportStageInfoDO.copyTo(TransportStageInfoDTO.class);
    }

    @Override
    public Long addTransportStage(TransportStageInfoDTO stageInfoDTO) {
        TransportStageInfoDO stageInfoDO = stageInfoDTO.copyTo(TransportStageInfoDO.class);
        Validator.isTrue(save(stageInfoDO), ErrorCode.SAVE_DATA_INTO_DB_ERROR);
        return stageInfoDO.getId();
    }

    @Override
    public Boolean updateTransportStage(TransportStageInfoDTO stageInfoDTO) {
        Validator.notNull(stageInfoDTO, ErrorCode.INPUT_PARAMETERS_NULL);
        Validator.notNull(stageInfoDTO.getId(), ErrorCode.INPUT_PARAMETERS_NULL);
        TransportStageInfoDO transportStageInfoDO = getById(stageInfoDTO.getId());
        if (transportStageInfoDO != null) {
            updateById(stageInfoDTO.copyTo(TransportStageInfoDO.class));
        }
        return true;
    }

    @Override
    public Boolean updateBatch(List<TransportStageInfoDTO> transportStageInfoDTOList) {
        Validator.isTrue(CollectionUtils.isNotEmpty(transportStageInfoDTOList), ErrorCode.INPUT_PARAMETERS_NULL);
        List<TransportStageInfoDO> transportStageInfoDOList = ModelConvertUtil.copyListTo(transportStageInfoDTOList, TransportStageInfoDO.class);
        updateBatchById(transportStageInfoDOList);
        return true;
    }
}
