package com.ruoyi.mall.service.impl;

import java.util.List;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.mall.domain.MallGoodsSpecValue;
import com.ruoyi.mall.mapper.MallGoodsSpecValueMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mall.mapper.MallGoodsSpecMapper;
import com.ruoyi.mall.domain.MallGoodsSpec;
import com.ruoyi.mall.service.IMallGoodsSpecService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 商品规格名Service业务层处理
 *
 * @author chang
 * @date 2021-11-25
 */
@Service
public class MallGoodsSpecServiceImpl implements IMallGoodsSpecService
{
    @Autowired
    private MallGoodsSpecMapper mallGoodsSpecMapper;
    @Autowired
    private MallGoodsSpecValueMapper mallGoodsSpecValueMapper;

    /**
     * 查询商品规格名
     *
     * @param id 商品规格名主键
     * @return 商品规格名
     */
    @Override
    public MallGoodsSpec selectMallGoodsSpecById(Long id)
    {
        MallGoodsSpec goodsSpec = mallGoodsSpecMapper.selectMallGoodsSpecById(id);
        MallGoodsSpecValue specValue = new MallGoodsSpecValue();
        specValue.setSpecId(id);
        List<MallGoodsSpecValue> specValues = mallGoodsSpecValueMapper.selectMallGoodsSpecValueList(specValue);
        goodsSpec.setSpec(specValues);
        return goodsSpec;
    }

    /**
     * 查询商品规格名列表
     *
     * @param mallGoodsSpec 商品规格名
     * @return 商品规格名
     */
    @Override
    public List<MallGoodsSpec> selectMallGoodsSpecList(MallGoodsSpec mallGoodsSpec)
    {
        return mallGoodsSpecMapper.selectMallGoodsSpecList(mallGoodsSpec);
    }

    /**
     * 查询商品规格名列表
     *
     * @param mallGoodsSpec 商品规格名
     * @return 商品规格名
     */
    @Override
    public List<MallGoodsSpec> selectMallGoodsSpecSelectList(MallGoodsSpec mallGoodsSpec)
    {
        return mallGoodsSpecMapper.selectMallGoodsSpecSelectList(mallGoodsSpec);
    }

    /**
     * 新增商品规格名
     *
     * @param mallGoodsSpec 商品规格名
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int insertMallGoodsSpec(MallGoodsSpec mallGoodsSpec)
    {
        mallGoodsSpec.setCreateAt(DateUtils.getTime());
        int count = mallGoodsSpecMapper.insertMallGoodsSpec(mallGoodsSpec);
        if (count>0){
            for (MallGoodsSpecValue specValue: mallGoodsSpec.getSpec()){
                specValue.setSpecId(mallGoodsSpec.getId());
                specValue.setCreateAt(DateUtils.getTime());
                mallGoodsSpecValueMapper.insertMallGoodsSpecValue(specValue);
            }
        }
        return count;
    }

    /**
     * 修改商品规格名
     *
     * @param mallGoodsSpec 商品规格名
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int updateMallGoodsSpec(MallGoodsSpec mallGoodsSpec)
    {
        mallGoodsSpec.setUpdateAt(DateUtils.getTime());
        int count = mallGoodsSpecMapper.updateMallGoodsSpec(mallGoodsSpec);
        if (count>0){
            mallGoodsSpecValueMapper.removeBySpecId(mallGoodsSpec.getId());
            for (MallGoodsSpecValue specValue: mallGoodsSpec.getSpec()){
                if (null==specValue.getId()){
                    specValue.setCreateAt(DateUtils.getTime());
                    specValue.setSpecId(mallGoodsSpec.getId());
                    mallGoodsSpecValueMapper.insertMallGoodsSpecValue(specValue);
                }else {
                    specValue.setUpdateAt(DateUtils.getTime());
                    specValue.setDelFlag("0");
                    mallGoodsSpecValueMapper.updateMallGoodsSpecValue(specValue);
                }
            }
        }
        return count;
    }

    /**
     * 批量删除商品规格名
     *
     * @param ids 需要删除的商品规格名主键
     * @return 结果
     */
    @Override
    public int deleteMallGoodsSpecByIds(Long[] ids)
    {
        return mallGoodsSpecMapper.deleteMallGoodsSpecByIds(ids);
    }

    /**
     * 删除商品规格名信息
     *
     * @param id 商品规格名主键
     * @return 结果
     */
    @Override
    public int deleteMallGoodsSpecById(Long id)
    {
        return mallGoodsSpecMapper.deleteMallGoodsSpecById(id);
    }
}
