package com.ym.mec.biz.dal.dao;

import com.ym.mec.biz.dal.dto.GoodsSellDto;
import com.ym.mec.biz.dal.dto.MusicGroupGoodsAndDiscountDto;
import com.ym.mec.biz.dal.entity.Goods;
import com.ym.mec.common.dal.BaseDAO;

import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface GoodsDao extends BaseDAO<Integer, Goods> {

    Goods lock(@Param("goodsId") Integer goodsId);

    /**
     * 通过科目编号查询商品(教材、辅件)列表
     *
     * @param subjectId
     * @return
     */
    List<Goods> findGoodsBySubId(@Param("subjectId") Integer subjectId, @Param("type") String type);

    /**
     * 根据商品分类查找商品数量
     *
     * @param goodsCategoryId
     * @return
     */
    int findGoodsNumByCategoryId(@Param("goodsCategoryId") Integer goodsCategoryId);

    /**
     * 根据ids获取商品信息
     *
     * @param ids
     * @return
     */
    List<Goods> findGoodsByIds(@Param("ids") String ids);

    List<Goods> findTypeGoods(@Param("type") String type);

    /**
     * @param goodsList:
     * @return void
     * @describe 批量新增
     * @apiNote 时光荏苒，认真工作的时间总是过得很快，而我、享受这一刻！
     * @author zouxuan
     * @date 2020/9/4
     * @time 14:39
     */
    void batchInsert(List<Goods> goodsList);

    /**
     * @param goodsList:
     * @return void
     * @describe 批量更新商品
     * @author Joburgess
     * @date 2020.09.28
     */
    void batchUpdate(@Param("goodsList") List<Goods> goodsList);

    /**
     * 获取商品列表
     *
     * @param goodsIds
     * @return
     */
    List<Goods> getGoodies(@Param("goodsIds") List<Integer> goodsIds);

    /**
     * @param goodsId:
     * @return java.util.List<com.ym.mec.biz.dal.entity.Goods>
     * @describe 查询附件商品列表中存在指定商品的商品
     * @author Joburgess
     * @date 2020.10.12
     */
    List<Goods> getWithComplementGoodsAndStatus(@Param("goodsId") Integer goodsId,
                                                @Param("status") Integer status);

    /**
     * @param goodsIds:
     * @return java.util.List<com.ym.mec.biz.dal.entity.Goods>
     * @describe 锁定指定商品
     * @author Joburgess
     * @date 2020.10.12
     */
    List<Goods> lockGoods(@Param("goodsIds") List<Integer> goodsIds);

    /**
     * @param sn:
     * @return com.ym.mec.biz.dal.entity.Goods
     * @describe 根据货号查找商品
     * @author Joburgess
     * @date 2020.10.10
     */
    Goods findBySn(@Param("sn") String sn);

    /**
     * @param sn:
     * @return com.ym.mec.biz.dal.entity.Goods
     * @describe 根据货号锁定商品
     * @author Joburgess
     * @date 2020.10.15
     */
    Goods lockBySn(@Param("sn") String sn);

    /**
     * @param sns:
     * @return java.util.List<com.ym.mec.biz.dal.entity.Goods>
     * @describe 根据货号查找商品
     * @author Joburgess
     * @date 2020.09.28
     */
    List<Goods> findBySns(@Param("sns") List<String> sns);

    String getInnerRepertoryWarnName(@Param("innerRepertoryWarnNum") String innerRepertoryWarnNum);

    String getOuterRepertoryWarnName(@Param("outerRepertoryWarnNum") String outerRepertoryWarnNum);

    /**
     * @param goodsId:
     * @return java.util.List<com.ym.mec.biz.dal.dto.GoodsSellDto>
     * @describe 获取商品辅件列表
     * @apiNote 时光荏苒，认真工作的时间总是过得很快，而我、享受这一刻！
     * @author zouxuan
     * @date 2020/10/13
     * @time 15:09
     */
    List<GoodsSellDto> queryGoodsSellDtos(@Param("goodsId") String goodsId);

    /**
     * 获取乐团的商品
     * @return
     */
    List<MusicGroupGoodsAndDiscountDto> getMusicGroupGoodsAndDiscount(@Param("subjectId") Integer subjectId, @Param("type") String type);

    List<MusicGroupGoodsAndDiscountDto> getMusicGroupGoodsAndDiscountWithSubjects(@Param("subjectIds") String subjectIds, @Param("type") String type);

    /**
     * 是否存在已上架的商品编号
     * @param goodsId
     * @param status
     * @return
     */
    Boolean findByIdAndStatus(@Param("goodsId") String goodsId, @Param("status") int status);
}
