package com.ym.mec.biz.service;

import com.ym.mec.biz.dal.dto.GoodsBatchNoDto;
import com.ym.mec.biz.dal.dto.GoodsSellDto;
import com.ym.mec.biz.dal.entity.Goods;
import com.ym.mec.biz.dal.entity.GoodsProcurement;
import com.ym.mec.biz.dal.entity.SellOrder;
import com.ym.mec.biz.dal.enums.AccountType;
import com.ym.mec.common.service.BaseService;

import org.apache.ibatis.annotations.Param;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

public interface GoodsService extends BaseService<Integer, Goods> {

    void addGoods(Goods goods, Integer operatorId);

    void addGoodsProcurement(GoodsProcurement goodsProcurement);

    /**
     * @describe 更新商品状态
     * @author Joburgess
     * @date 2020.10.12
     * @param goodsId:
     * @param status:
     * @return void
     */
    void updateGoodsStatus(Integer goodsId, Integer status);

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

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

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

    /**
     * 查询某种类型的商品
     * @param type
     * @return
     */
    List<Goods> findTypeGoods(String type);

    /**
     * @describe 商品导入
     * @apiNote 时光荏苒，认真工作的时间总是过得很快，而我、享受这一刻！
     * @author zouxuan
     * @date 2020/9/4
     * @time 11:58
     * @param file:
     * @return java.util.List<com.ym.mec.biz.dal.entity.Goods>
     */
    List<Goods> importGoods(MultipartFile file, Integer operatorId) throws Exception;

    /**
     * @describe 库存预警
     * @apiNote 时光荏苒，认真工作的时间总是过得很快，而我、享受这一刻！
     * @author zouxuan
     * @date 2020/10/10
     * @time 11:30
     * @return void
     */
    void repertoryWarn();

    /**
     * @describe 给超售商品分配批次
     * @author Joburgess
     * @date 2020.10.13
     * @return void
     */
    void sellOrderBatchNoAllot();

    /**
     * @describe 扣减商品库存
     * @author Joburgess
     * @date 2020.10.12
     * @param goodsIds: 销售商品编号列表
     * @param accountType: 收款账户类型
     * @return java.lang.String
     */
    List<SellOrder> subtractStock(List<Integer> goodsIds, AccountType accountType);

    /**
     * @describe 增加商品库存
     * @author Joburgess
     * @date 2020.10.12
     * @param sellOrderIds: 对应批次商品列表
     * @return void
     */
    void increaseStock(List<SellOrder> sellOrderIds, AccountType accountType);

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