package com.microservices.pms.product.service;

import com.alibaba.fastjson2.JSONObject;
import com.microservices.common.core.web.page.GenericsTableDataInfo;
import com.microservices.pms.product.domain.PmsProductRequirement;
import com.microservices.pms.product.domain.vo.PmsProductRequirementDataVo;
import com.microservices.pms.product.domain.vo.PmsProductRequirementDetailVo;

import java.util.List;

/**
 * 产品需求Service接口
 * 
 * @author otto
 * @date 2023-10-10
 */
public interface IPmsProductRequirementService 
{
    /**
     * 查询产品需求详情
     * 
     * @param id 产品需求主键
     * @return 产品需求详情
     */
    public PmsProductRequirementDetailVo selectPmsProductRequirementDetailById(Long id);
    /**
     * 查询产品需求
     *
     * @param id        产品需求主键
     * @param checkRole
     * @return 产品需求
     */
    public PmsProductRequirement selectPmsProductRequirementById(Long id, boolean checkRole);

    /**
     * 查询产品需求列表
     * 
     * @param pmsProductRequirement 产品需求
     * @return 产品需求集合
     */
    public GenericsTableDataInfo<PmsProductRequirementDataVo> selectPmsProductRequirementPageList(PmsProductRequirement pmsProductRequirement);

    /**
     * 新增产品需求
     * 
     * @param pmsProductRequirement 产品需求
     * @return 结果
     */
    public Long insertPmsProductRequirement(PmsProductRequirement pmsProductRequirement);

    /**
     * 修改产品需求
     * 
     * @param pmsProductRequirement 产品需求
     * @return 结果
     */
    public int updatePmsProductRequirement(PmsProductRequirement pmsProductRequirement);

    /**
     * 更新产品需求变更
     *
     * @param id 产品需求ID
     * @return 结果
     */
    public int updatePmsProductRequirementChange(Long id);

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

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

    /**
     * 查询产品需求数量
     * @param pmsProductRequirement 产品需求查询字段
     * @return 数量
     */
    Integer selectPmsProductRequirementCount(PmsProductRequirement pmsProductRequirement);

    /**
     * 根据产品标识和需求索引获取产品需求详细信息
     * @param productIdentifier 产品标识
     * @param index 索引
     * @return 产品需求详情
     */
    PmsProductRequirementDetailVo selectPmsProductRequirementDetailByProductIdentifierAndIndex(String productIdentifier, Long index);

    /**
     * 批量更新需求
     *
     * @param jsonObject 批量更新对象
     * @return 更新条数
     */
    int batchUpdatePmsProductRequirement(JSONObject jsonObject);

    /**
     * 删除产品下所有需求
     *
     * @param productIdentifier 产品标识
     */
    void deletePmsProductRequirementByProductIdentifier(String productIdentifier);

    /**
     * 根据计划id删除需求与计划id的关联关系
     *
     * @param planId 计划Id
     */
    void updatePmsProductRequirementNoPlanByPlanId(Long planId);

    /**
     * 根据模块ID删除需求与模块的关联关系
     *
     * @param moduleId 模块ID
     */
    void updatePmsProductRequirementToNoModule(Long moduleId);

    /**
     * 查询产品需求列表
     *
     * @param pmsProductRequirementSearch 搜索条件
     * @return 产品需求列表
     */
    List<PmsProductRequirement> selectPmsProductRequirementList(PmsProductRequirement pmsProductRequirementSearch);
}
