package com.gic.haoban.manage.service.service;

import com.gic.api.base.commons.Page;
import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.manage.api.dto.PreDealLogInfoDTO;
import com.gic.haoban.manage.api.dto.SyncCheckDTO;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;

import java.util.List;

/**
 * Created 2020/4/9.
 *
 * @author hua
 */
public interface PreDealService {
    /**
     * 批量新增
     *
     * @param list
     * @return
     */
    public boolean insert(List<TabHaobanPreDealLog> list);

    /**
     * 获取单条数据
     *
     * @param dataId
     * @return
     */
    public TabHaobanPreDealLog getByDataId(String taskId, String dataId,int dataType, int status);

    /**
     * 根据父数据id 获取子节点
     *
     * @param pDataId
     * @param status
     * @return
     */
    public List<TabHaobanPreDealLog> listByPDataId(String taskId, String pDataId, int status);

    /**
     * 根据父数据id 获取子节点
     *
     * @param pDataId
     * @param status
     * @return
     */
    public List<TabHaobanPreDealLog> listReByPDataId(String taskId, String pDataId);

    /**
     * 更新单条数据状态
     *
     * @param dataId
     * @param status
     * @return
     */
    public boolean updateStatusByDataId(String taskId, String dataId, int status, String reason);

    /**
     * 更新单条数据状态
     *
     * @param dataId
     * @param status
     * @return
     */
    public boolean updateStatusByDataId(String taskId, String dataId,int dataType, int status, String reason);


    /**
     * 获取任务是否有在同步中
     *
     * @param dataType
     * @return
     */
    public boolean checkTask(String taskId, int dataType);

    /**
     * 获取任务列表
     *
     * @param type
     * @param status
     * @return
     */
    public List<TabHaobanPreDealLog> listByTaskId(String taskId, int dataType, int status);

    /**
     * 获取错误任务数量
     *
     * @param status
     * @return
     */
    public int countByTaskId(String taskId, int dataType, int status);

    public int countByTaskId(String taskId);

    /**
     * 获取任务数量
     *
     * @return
     */
    public int countExcepAndPreByTaskId(String taskId, int dataType);

    /**
     * 获取重试时 需要处理的数据
     *
     * @param taskId
     * @return
     */
    public List<TabHaobanPreDealLog> queryDepartRebuildDealLog(String taskId);

    /**
     * 获取重试任务列表
     *
     * @param status
     * @return
     */
    public List<TabHaobanPreDealLog> listRebuildByTaskId(String taskId, int dataType);

    /**
     * 把任务重置到预处理
     *
     * @param taskId
     * @return
     */
    public boolean updateExceptionToPre(String taskId);

    /**
     * 获取异常任务列表
     *
     * @return
     */
    public Page<PreDealLogInfoDTO> listExceptionByTaskId(String taskId, BasePageInfo pageInfo);

    /**
     * 获取dataIdList
     * @param taskId
     * @param dateType
     * @return
     */
    public List<String> listDataIdByTaskIdAndDataType(String taskId, Integer dateType);
    /**
     * 获取最近的数据
     *
     * @return
     */
    public PreDealLogInfoDTO getLastPreDataByTaskId(String taskId);

    /**
     * 更新好友成功状态
     * @param taskId
     * @param dataId
     * @param status
     * @param reason
     * @param dataContent
     */
	public boolean updateFriendStatusByDataId(String taskId, String dataId, int status, String reason, String dataContent);

    /**
     * 更新好友成功状态
     *
     * @param taskId
     * @param dataId
     * @param status
     * @param reason
     * @param dataContent
     */
    public boolean updateFriendStatusByDataId(String taskId, String dataId, int status, String reason, String dataContent, String relationKey , int type);

    /**
     * 根据唯一key 获取用户
     *
     * @param taskId
     * @param dataType
     * @param relationKey
     * @return
     */
    public List<TabHaobanPreDealLog> getByRelationKey(String taskId, Integer dataType, String relationKey);

    /**
     * 获取任务是否有在同步中 好友
     *
     * @param dataType
     * @return
     */
    public boolean checkFriendTask(String taskId, int dataType);

    /**
     * 获取任务是否有在同步中 好友
     *
     * @param dataType
     * @return
     */
    public boolean checkFriendTaskByPDataId(String taskId, String pDataId, int dataType);

    /**
     * 根据父数据id 所有dataid
     *
     * @param pDataId
     * @return
     */
    public List<String> listReDataIdByPDataId(String taskId, String pDataId, Integer dataType);

    
}
