package com.hw.wms.service.impl;

import java.util.List;
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.wms.domain.WmsProductOutstockDetail;
import com.hw.wms.mapper.WmsProductOutstockMapper;
import com.hw.wms.domain.WmsProductOutstock;
import com.hw.wms.service.IWmsProductOutstockService;

/**
 * 成品出库记录Service业务层处理
 *
 * @author xs
 * @date 2023-12-20
 */
@Service
public class WmsProductOutstockServiceImpl implements IWmsProductOutstockService
{
    @Autowired
    private WmsProductOutstockMapper wmsProductOutstockMapper;

    /**
     * 查询成品出库记录
     *
     * @param productOutstockId 成品出库记录主键
     * @return 成品出库记录
     */
    @Override
    public WmsProductOutstock selectWmsProductOutstockByProductOutstockId(Long productOutstockId)
    {
        return wmsProductOutstockMapper.selectWmsProductOutstockByProductOutstockId(productOutstockId);
    }

    /**
     * 查询成品出库记录列表
     *
     * @param wmsProductOutstock 成品出库记录
     * @return 成品出库记录
     */
    @Override
    public List<WmsProductOutstock> selectWmsProductOutstockList(WmsProductOutstock wmsProductOutstock)
    {
        return wmsProductOutstockMapper.selectWmsProductOutstockList(wmsProductOutstock);
    }

    /**
     * 新增成品出库记录
     *
     * @param wmsProductOutstock 成品出库记录
     * @return 结果
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int insertWmsProductOutstock(WmsProductOutstock wmsProductOutstock)
    {
        int rows = wmsProductOutstockMapper.insertWmsProductOutstock(wmsProductOutstock);
        insertWmsProductOutstockDetail(wmsProductOutstock);
        return rows;
    }

    /**
     * 修改成品出库记录
     *
     * @param wmsProductOutstock 成品出库记录
     * @return 结果
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int updateWmsProductOutstock(WmsProductOutstock wmsProductOutstock)
    {
        wmsProductOutstockMapper.deleteWmsProductOutstockDetailByProductOutstockId(wmsProductOutstock.getProductOutstockId());
        insertWmsProductOutstockDetail(wmsProductOutstock);
        return wmsProductOutstockMapper.updateWmsProductOutstock(wmsProductOutstock);
    }

    /**
     * 批量删除成品出库记录
     *
     * @param productOutstockIds 需要删除的成品出库记录主键
     * @return 结果
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int deleteWmsProductOutstockByProductOutstockIds(Long[] productOutstockIds)
    {
        wmsProductOutstockMapper.deleteWmsProductOutstockDetailByProductOutstockIds(productOutstockIds);
        return wmsProductOutstockMapper.deleteWmsProductOutstockByProductOutstockIds(productOutstockIds);
    }

    /**
     * 删除成品出库记录信息
     *
     * @param productOutstockId 成品出库记录主键
     * @return 结果
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int deleteWmsProductOutstockByProductOutstockId(Long productOutstockId)
    {
        wmsProductOutstockMapper.deleteWmsProductOutstockDetailByProductOutstockId(productOutstockId);
        return wmsProductOutstockMapper.deleteWmsProductOutstockByProductOutstockId(productOutstockId);
    }

    /**
     * 新增成品出库记录明细信息
     *
     * @param wmsProductOutstock 成品出库记录对象
     */
    public void insertWmsProductOutstockDetail(WmsProductOutstock wmsProductOutstock)
    {
        List<WmsProductOutstockDetail> wmsProductOutstockDetailList = wmsProductOutstock.getWmsProductOutstockDetailList();
        Long productOutstockId = wmsProductOutstock.getProductOutstockId();
        if (StringUtils.isNotNull(wmsProductOutstockDetailList))
        {
            List<WmsProductOutstockDetail> list = new ArrayList<WmsProductOutstockDetail>();
            for (WmsProductOutstockDetail wmsProductOutstockDetail : wmsProductOutstockDetailList)
            {
                wmsProductOutstockDetail.setProductOutstockId(productOutstockId);
                list.add(wmsProductOutstockDetail);
            }
            if (list.size() > 0)
            {
                wmsProductOutstockMapper.batchWmsProductOutstockDetail(list);
            }
        }
    }
}
