/*
 * Copyright (c) 京北方信息技术股份有限公司 Corporation 2021 . All rights reserved.
 *
 */
package net.northking.cctp.testbug.api.service;

import net.northking.cctp.common.db.DefaultPagination;
import net.northking.cctp.common.db.Pagination;
import net.northking.cctp.common.db.excel.ExcelService;
import net.northking.cctp.common.http.QueryByPage;
import net.northking.cctp.platform.db.entity.CltDictItem;
import net.northking.cctp.testbug.dto.*;
import net.northking.cctp.testbug.dto.bug.BugManageQueryDto;
import net.northking.cctp.testbug.dto.bug.ResultResponse;
import net.northking.cctp.testbug.dto.bus.SynModule;
import net.northking.cctp.testbug.dto.bus.SynSystem;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 缺陷管理Restful逻辑接口
 *
 * @author maven-cctp-plugin
 * @since 1.0
 */
public interface BugManagementApiService extends ExcelService {
    /**
     * 查询缺陷管理列表
     *
     * @param queryByPage 查询条件
     * @return 查询结果列表
     */
    Pagination<BugManagementDetailDto> pagingQuery(QueryByPage<BugManagementQueryDto> queryByPage);

    /**
     * 新增缺陷管理
     *
     * @param dto 接口数据传输对象
     * @return 主键
     */
    String add(BugManagementAddDto dto);

    /**
     * 更新缺陷管理
     *
     * @param dto 接口数据传输对象
     * @return 修改的记录数量
     */
    Integer updateByPK(BugManagementUpdateDto dto) throws IllegalAccessException;

    /**
     * 获取缺陷管理
     *
     * @param uuid 主键
     * @return 接口数据传输对象
     */
    BugManagementDetailDto findByPK(String uuid);

    /**
     * 删除缺陷管理
     *
     * @param uuid 主键
     * @return 删除的记录数量
     */
    Integer deleteByPK(String uuid);

    /**
     * 批量新增
     *
     * @param batch 集合
     * @return 成功的数量
     */
    List<String> addBatch(List<BugManagementAddDto> batch);

    /**
     * 批量更新
     *
     * @param batch 集合
     * @return 成功的数量
     */
    Integer updateBatch(List<BugManagementUpdateDto> batch) throws IllegalAccessException;

    /**
     * 批量删除
     *
     * @param batch 集合
     * @return 成功的数量
     */
    Integer deleteBatch(List<Object> batch);

    /**
     * 查询缺陷创建人信息
     * @param dto
     * @return
     */
    List<String> queryBugCreatedBy(BugManagementQueryDto dto);

    /**
     * 查询所有缺陷修复人
     * @param dto
     * @return
     */
    List<String> queryPubBugReceiver(BugManagementQueryDto dto);

    /**
     * 查询所有缺陷修复人
     * @param dto
     * @return
     */
    List<String> queryBugReceiver(BugManagementQueryDto dto);

    /**
     * 导出Excel：缺陷管理
     * @param response
     * @param queryByPage
     */
    void exportBugExcel(HttpServletResponse response, QueryByPage<BugManagementQueryDto> queryByPage);

    /**
     * 查询模块名
     * @param dto
     * @return
     */
    List<String> queryModule(BugManagementQueryDto dto);

    /**
     * 查询缺陷标题
     * @param dto
     * @return
     */
    List<String> queryBugTitle(BugManagementQueryDto dto);

    /**
     * 查询缺陷编号
     * @param dto
     * @return
     */
    List<String> queryBugOrder(BugManagementQueryDto dto);

    /**
     * 同步缺陷模块名
     * @param data
     * @return
     */
    Integer synchronizationModule(SynModule data);

    /**
     * 同步缺陷系统名
     * @param data
     * @return
     */
    Integer synchronizationSystem(SynSystem data);

    /**
     * 根据执行id或者步骤id查询缺陷详情
     * @param linkId
     * @return
     */
    List<BugManagementDetailDto> findByLinkId(String linkId);

    List<BugTendencyChartDetailDto> queryBugByStatus(BugTendencyChartQueryDto bugTendencyChartQueryDto);

    DefaultPagination<BugManagementDetailDto> pagingQueryFilter(QueryByPage<BugManagementQueryDto> queryByPage);

    /**
     * 查询用户是否在项目创建或被分配缺陷
     * @param projectId
     * @param userId
     * @return
     */
    boolean queryUserBugByProId(String projectId, String userId);

    List<BugStatisticsChartAddDto> queryBugByDicItems(List<CltDictItem> dictItems,String tenantId);

    List<IsCommitBugDetailDto> findByLinkIdList(List<String> linkIdList);

    List<String> findTenantIdList();

    DefaultPagination<BugHighDegreeChartDetailDto> pagingQueryHighDegree(QueryByPage<BugHighDegreeChartQueryDto> queryByPage);

    CountBugDetailDto countBugAmount(String projectId);

    List<BugManagementDetailDto> pageQ(BugManagementQueryDto query);

    ResultResponse getBugList(BugManageQueryDto queryByPage);
}
