package com.shkj.wms.service;

import com.shkj.common.core.domain.Result;
import com.shkj.wms.bo.BaseMoldBarcodeQueryBo;
import com.shkj.wms.bo.BaseMoldBarcodeQueryPageBo;
import com.shkj.wms.common.SwitchStatusEntity;
import com.shkj.wms.domain.BaseMold;
import com.shkj.wms.vo.BaseMoldVo;
import com.shkj.wms.bo.BaseMoldQueryBo;
import com.shkj.wms.bo.BaseMoldAddBo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 磨具Service接口
 *
 * @author lch
 * @date 2023-06-01
 */
public interface IBaseMoldService extends IService<BaseMold> {
	/**
	 * 查询单个
	 *
     * @param id
     * @return
     */
	Result<BaseMoldVo> queryById(Long id);

	/**
     * 查询列表
     *
     * @param bo
     * @return
     */
	List<BaseMoldVo> queryList(BaseMoldQueryBo bo);

	/**
	 * 根据新增业务对象插入磨具
	 * @param bo 磨具新增业务对象
	 * @return
	 */
	Result<Boolean> insertByAddBo(BaseMoldAddBo bo);

	/**
	 * 根据编辑业务对象修改磨具
	 * @param bo 磨具编辑业务对象
	 * @return
	 */
	Result<Boolean> updateByEditBo(BaseMoldAddBo bo);

	/**
	 * 校验并删除数据
	 * @param ids 主键集合
	 * @param isValid 是否校验,true-删除前校验,false-不校验
	 * @return
	 */
	Result<Boolean> deleteWithValidById(List<Long> ids, Boolean isValid);


	/**
	 * 开关状态
	 *
	 * @param id     id
	 * @param status 状态
	 * @return {@code Result<Boolean>}
	 */
	Result<Boolean> switchStatus(Long id, String status);

	/**
	 * 打印条码
	 *
	 * @param id id
	 * @return {@code Result<Boolean>}
	 */
	Result<String> printBarcode(Long id);

	/**
	 * 根据模具条码查询模具信息
	 *
	 * @param bo 薄
	 * @return {@code Result<List<BaseMoldVo>>}
	 */
	Result<List<BaseMoldVo>> queryMoldByBarCode(BaseMoldBarcodeQueryBo bo);

	Result<List<BaseMoldVo>> queryMoldByContainerCode(BaseMoldBarcodeQueryBo bo);

	/**
	 * 根据模具条码查询模具信息（一定有库存）
	 *
	 * @param bo 薄
	 * @return {@link Result}<{@link List}<{@link BaseMoldVo}>>
	 */
	Result<List<BaseMoldVo>> queryStockMoldByBarCode(BaseMoldBarcodeQueryBo bo);

	List<BaseMoldVo> queryStockMoldByBarCodePc(BaseMoldBarcodeQueryPageBo bo);

	/**
	 * 根据模具条码验证模具是存在
	 * @param moldBarcodeList
	 * @return
	 */
	public List<BaseMold> queryByMoldBarcodeList(List<String> moldBarcodeList);


	/**
	 *  新增入库计划时，过滤掉已经在库的模具信息
	 * @param bo
	 * @return
	 */
	List<BaseMoldVo> getBaseMoldNotinStockDetail(BaseMoldQueryBo bo);


}
