package com.microservices.pms.product.service;

import com.microservices.common.core.web.page.GenericsTableDataInfo;
import com.microservices.pms.product.domain.PmsProduct;
import com.microservices.pms.product.domain.vo.PmsProductDataVo;
import com.microservices.pms.product.domain.vo.PmsProductSearchVo;
import com.microservices.system.api.domain.SimpleSysUser;

import java.util.List;

/**
 * 产品Service接口
 * 
 * @author otto
 * @date 2023-10-10
 */
public interface IPmsProductService 
{
    /**
     * 查询产品
     * 
     * @param id 产品主键
     * @return 产品
     */
    public PmsProduct selectPmsProductById(Long id);

    /**
     * 查询产品列表
     * 
     * @param pmsProduct 产品
     * @return 产品集合
     */
    public GenericsTableDataInfo<PmsProductDataVo> selectPmsProductPageList(PmsProductSearchVo pmsProduct);

    /**
     * 新增产品
     * 
     * @param pmsProduct 产品
     * @return 产品标识
     */
    public String insertPmsProduct(PmsProduct pmsProduct);

    /**
     * 修改产品
     * 
     * @param pmsProduct 产品
     * @return 结果
     */
    public int updatePmsProduct(PmsProduct pmsProduct);

    /**
     * 更新产品变更
     *
     * @param productIdentifier 产品标识
     * @return 结果
     */
    public int updatePmsProductChange(String productIdentifier);

    /**
     * 批量删除产品
     * 
     * @param ids 需要删除的产品主键集合
     * @return 结果
     */
    public int deletePmsProductByIds(Long[] ids);

    /**
     * 删除产品信息
     * 
     * @param id 产品主键
     * @return 结果
     */
    public int deletePmsProductById(Long id);

    /**
     * 通过产品标识获取产品
     * @param identifier 产品标识
     * @return 产品
     */
    PmsProduct selectPmsProductByIdentifier(String identifier);

    /**
     * 置顶/取消置顶产品
     * @param identifier
     * @return
     */
    int updatePmsProductTop(String identifier);

    /**
     * 根据产品标识删除产品
     *
     * @param identifier 产品标识
     * @return 操作条数
     */
    int deletePmsProductByIdentifier(String identifier);

    /**
     * 查询产品数量
     *
     * @param pmsProductSearchVo 产品查询条件
     * @return 产品数量
     */
    Integer selectPmsProductCount(PmsProductSearchVo pmsProductSearchVo);

    /**
     * 根据产品标识查询产品详情
     *
     * @param identifier 产品标识
     * @return 产品详情
     */
    PmsProductDataVo selectPmsProductDataVoByIdentifier(String identifier);

    /**
     * 根据产品ID查询产品详情
     *
     * @param id 产品ID
     * @return 产品详情
     */
    PmsProductDataVo selectPmsProductDataVoById(Long id);

    /**
     * 查询产品列表
     *
     * @param pmsProductSearch 查询条件
     * @return 产品列表
     */
    List<PmsProduct> selectPmsProductList(PmsProductSearchVo pmsProductSearch);

    void checkManageRole(PmsProduct pmsProduct);

    /**
     * 获取产品负责人可选用户列表
     *
     * @param enterpriseIdentifier 企业标识
     * @param search               模糊搜索
     * @return 可选用户列表
     */
    GenericsTableDataInfo<SimpleSysUser> getUserList(String enterpriseIdentifier, String search);

    PmsProductDataVo selectPmsProductDataByIdentifier(String identifier);
}
