package com.microservices.pms.project.service;

import com.alibaba.fastjson2.JSONObject;
import com.microservices.common.core.web.page.GenericsTableDataInfo;
import com.microservices.pms.project.domain.PmsProject;
import com.microservices.pms.project.domain.vo.*;
import com.microservices.system.api.domain.SimpleSysUser;
import com.microservices.system.api.domain.SysNotice;

import java.util.List;

/**
 * 项目Service接口
 * 
 * @author wanjia
 */
public interface IPmsProjectService 
{
    /**
     * 查询项目
     * 
     * @param id 项目主键
     * @return 项目
     */
    PmsProjectDetailVo selectPmsProjectById(Long id);

    /**
     * 查询项目列表
     * 
     * @param pmsProject 项目
     * @return 项目集合
     */
    List<PmsProject> selectPmsProjectList(PmsProject pmsProject);

    GenericsTableDataInfo<PmsProjectDetailVo> selectPmsProjectList(PmsProjectSearchVo pmsProjectSearchVo);

    /**
     * 新增项目
     * 
     * @param pmsProject 项目
     * @return 结果
     */
    int insertPmsProject(PmsProjectInputVo pmsProject);

    /**
     * 批量删除项目
     * 
     * @param ids 需要删除的项目主键集合
     * @return 结果
     */
    boolean deletePmsProjectByIds(Long[] ids);

    int updatePmsProject(JSONObject pmsProjectUpdateVo);

    /**
     * 通过项目id查询并检查项目是否存在
     *
     * @param id 项目id
     * @return 项目信息
     */
    PmsProject selectAndCheckPmsProjectById(Long id);

    /**
     * 通过项目id查询并检查项目是否存在
     *
     * @param id 项目id
     * @return 项目信息
     */
    PmsProject selectAndCheckPmsProjectById(String id);

    PmsProjectSimpleVo getSimpleProject(Long pmsProjectId);

    int addProjectNotice(PmsProjectNoticeInputVo pmsProjectNoticeInputVo);

    JSONObject getPmsProjectStatistics(Long pmProjectId);

    JSONObject getPmsProjectPolyline(Long pmProjectId);

    public IssueTypeTotalCountVo getIssueTypeProjectIssuesTotalCount(List<String> projectIdList);

    GenericsTableDataInfo<SimpleSysUser> getUserList(String enterpriseIdentifier, String search);

    Integer removeProjectNotice(Long[] noticeIds);

    Integer editProjectNotice(PmsProjectNoticeUpdateVo pmsProjectNoticeUpdateVo);

    SysNotice getProjectNotice(Long noticeId);

    /**
     * 清理项目管理关联的产品信息
     *
     * @param productId 产品Id
     */
    void clearPmsProjectAndProductAssociations(Long productId);
}
