package com.njcn.gather.result.service;

import com.njcn.gather.detection.pojo.param.PreDetectionParam;
import com.njcn.gather.device.pojo.vo.PqDevVO;
import com.njcn.gather.report.pojo.DevReportParam;
import com.njcn.gather.report.pojo.result.ContrastTestResult;
import com.njcn.gather.report.pojo.result.SingleTestResult;
import com.njcn.gather.result.pojo.param.ResultParam;
import com.njcn.gather.result.pojo.vo.*;
import com.njcn.gather.script.pojo.vo.PqScriptDtlDataVO;
import com.njcn.gather.system.dictionary.pojo.po.DictTree;

import java.util.List;
import java.util.Map;

/**
 * @author caozehui
 * @data 2024-12-30
 */
public interface IResultService {
    void tryNotifyThirdPartyAfterFormalTest(PreDetectionParam param);

    /**
     * 调用第三方数据校验结果
     *
     * @param devId
     * @return
     */
    DataCheckResultVO createChecksquareTaskByDevId(String devId);

    /**
     * 检测详情表单头
     *
     * @param queryParam
     * @return
     */
    FormContentVO getFormContent(ResultParam.QueryParam queryParam);


    /**
     * 获取检测详情信息
     *
     * @param param
     * @return: java.util.List<com.njcn.gather.result.pojo.vo.DetectionInfoVO>
     * @Author: wr
     * @Date: 2024/12/31 15:14
     */
    List<TreeDataVO> treeData(ResultParam param);

    /**
     * 展示结果数据
     *
     * @param param
     * @return
     */
    ResultVO resultData(ResultParam param);

    /**
     * 展示结果数据（用于生成报告）
     *
     * @param param
     * @return
     */
    ResultVO resultDataForReport(ResultParam param);


    /**
     * 导出原始数据
     *
     * @param param
     */
    void exportRawData(ResultParam param);

    /**
     * 更换误差体系
     *
     * @param param
     */
    void changeErrorSystem(ResultParam.ChangeErrorSystemParam param);

    /**
     * 删除（更换误差体系时产生的）临时表
     *
     * @param code
     */
    void deleteTempTable(String code);

    /**
     * 重新计算
     *
     * @param param
     */
    void reCalculate(ResultParam.ChangeErrorSystemParam param);

    /**
     * 获取某测试大项的检测项内容
     *
     * @param checkDataVOList 检测项脚本
     * @param planCode        计划编号
     * @param devId           被检设备id
     * @param lineNo          回路号
     * @param tableKeys       表格key
     */
    SingleTestResult getFinalContent(List<PqScriptDtlDataVO> checkDataVOList, String planCode, String devId, Integer lineNo, List<String> tableKeys);


    /**
     * 获取比对式表单头
     *
     * @param queryParam
     * @return
     */
    FormContentVO getContrastFormContent(ResultParam.QueryParam queryParam);

    /**
     * 获取比对式检测结果
     *
     * @param queryParam
     * @return
     */
    ContrastResultVO getContrastResult(ResultParam.QueryParam queryParam);


    List<MonitorResultVO> getMonitorResult(String devId);

    Map<Integer, List<DataSourceResultVO>> getMonitorDataSourceResult(String monitorId);

    Boolean updateMonitorResult(MonitorResultVO result);

    /**
     * 获取检测项
     *
     * @param planId
     * @param devId
     * @param chnNum
     * @param num
     * @param code
     * @return
     */
    List<ContrastTestItemVO> getCheckItem(String planId, String devId, String chnNum, Integer num,String code);

    /**
     * 获取设备比对式结果，用于出比对检测的报告
     *
     * @param devReportParam 设备报告参数
     * @param pqDevVO        设备信息 省去一次sql查询
     * @return 该设备的比对式结果
     */
    Map<Integer, List<ContrastTestResult>> getContrastResultForReport(DevReportParam devReportParam, PqDevVO pqDevVO);

    ContrastTestResult getContrastResultHarm(MonitorResultVO monitorResultVO, List<String> scriptId, Integer planCode, DictTree dictTree);
}
