package com.yeejoin.amos.patrol.business.dao.mapper;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.yeejoin.amos.patrol.dao.entity.Plan;
import org.apache.ibatis.annotations.Param;

import com.yeejoin.amos.patrol.business.entity.mybatis.CheckChkExListBo;
import com.yeejoin.amos.patrol.business.entity.mybatis.PlanTaskPointInputItemBo;
import com.yeejoin.amos.patrol.business.entity.mybatis.PointCheckDetailBo;
import com.yeejoin.amos.patrol.business.param.CheckPtListPageParam;
import com.yeejoin.amos.patrol.business.param.PlanTaskPageParam;
import com.yeejoin.amos.patrol.business.vo.CodeOrderVo;
import com.yeejoin.amos.patrol.business.vo.LeavePlanTaskVo;
import com.yeejoin.amos.patrol.business.vo.PlanTaskVo;
import com.yeejoin.amos.patrol.dao.entity.PlanTask;
import com.yeejoin.amos.patrol.dao.entity.PointInputItem;
import org.springframework.data.jpa.repository.Query;

public interface PlanTaskMapper extends BaseMapper {
	/**
	 * 统计-计划执行
	 * @param params
	 * @return
	 */
	long countPlanTask(PlanTaskPageParam params);
   /**
    * 计划执行查询
    * @param params
    * @return
    */
	List<HashMap<String, Object>> getPlanTaskInfo(PlanTaskPageParam params);
	/**
	 * 批量删除
	 * @param strArry
	 */
	void planTaskDet(String[] strArry);

	/**
	 * 更新任务表
	 * @param param
	 */
	void updatePlanTaskPtInfo(HashMap<String, Object> param);

	/**
	 * 查询需删除的任务信息列表
	 * @param param
	 * @return
	 */
	List<Long> getGenPlanTask(HashMap<String, Object> param);

	/**
	 * 根据路线id获取关联的计划任务
	 *
	 * @param routeId
	 * @return
	 */
	List<PlanTask> getPlanTaskByRouteId(@Param(value = "routeId") Long routeId);
	/**
	 * 根据巡检点id获取关联的计划任务
	 *
	 * @param routeId
	 * @return
	 */
	List<HashMap<String, Object>> getPlanTaskByPointId(HashMap<String, Object> param);
	/**
	 * 	根据条件查询计划任务列表
	 * @param params
	 * @return
	 */
	List<Map<String, Object>> getPlanTasks(HashMap<String, Object> params);
	/**
	 *	 通过计划任务Id获得计划任务信息
	 * @param planTaskId
	 * @return
	 */
	Map queryPlanTaskById(@Param(value="planTaskId") Long planTaskId);
	/**
	 * 	通过计划任务Id获取任务所有点信息
	 * @param planTaskId
	 * @return
	 */
	List getPlanTaskPoints(@Param(value="planTaskId") Long planTaskId);
	/**
	 * 	获取用户当前所有可以做的任务个数
	 * @param userId
	 * @return
	 */
	int getCurrentPlanTaskCount(@Param(value="userId") String userId);

	/**
	 * 根据计划任务id获取所有巡检项信息
	 * @param planTaskId
	 * @return
	 */
	List<PlanTaskPointInputItemBo> getPlanTaskPointInputItemByPlanTaskId(@Param(value="planTaskId") Long planTaskId,@Param(value="planTaskDetailStatus") String planTaskDetailStatus);

	/**
	 * 条件查询数据
	 * @param param
	 * @return
	 */
	List<PlanTaskVo> getPlanTaskInfoList(PlanTaskPageParam param);
	/**
	 * 根据ids获取执行计划
	 * @param ids
	 * @return
	 */
	List<PlanTaskVo> getPlanTaskListByIds(@Param("ids") Long[] ids);

	/**
	 * 分页统计
	 * @param param
	 * @return
	 */
	long countChkExListData(CheckPtListPageParam param);
	/**
	 * 今日执行情况，业务信息查询
	 * @param param
	 * @return
	 */
	List<CheckChkExListBo> getChkExList(CheckPtListPageParam param);

	/**
	 * 任务分页查询数量
	 * @param params 参数
	 * @return long
	 */
	long getPlanTasksCount(HashMap<String, Object> params);

	Map<String, Object> getPlanTaskStatisticsForApp(HashMap<String, Object> params);


	/**
	 * 根据计划id和点id获取点详情
	 * @param planTaskId
	 * @param pointId
	 * @return
	 */
	PointCheckDetailBo getPointPlanTaskInfo(@Param("planTaskId") Long planTaskId,@Param("pointId") Long pointId);

	/**
	 * 根据路线id和点id获取该点的检查项
	 * @param routeId
	 * @param pointId
	 * @return
	 */
	List<PointCheckDetailBo> getPointInputByRouteIdAndPointId(@Param("routeId") Long routeId,@Param("pointId") Long pointId);
	/**
	 *	 统计当日任务累计完成情况
	 * @param loginOrgCode
	 * @return
	 */
	String getCumulativePlanCountByOrgCode(@Param("orgCode") String loginOrgCode);
	/**
	 * 获取用户离线巡检计划任务信息
	 * @param params
	 * @return
	 */
	List<LeavePlanTaskVo> queryLeavePlanTask(HashMap<String, Object> params);

	/**
	 * 根据路线id与点id，获取路线点项
	 *
	 * @param routeId
	 * @param pointId
	 * @return
	 */
	List<PointInputItem> getRoutePointInputItem(@Param(value="routeId") long routeId, @Param(value="pointId") long pointId);


	List<CodeOrderVo> queryCodeOrderVo(HashMap<String, Object> params);
	/**
	 * 重新统计用户重做日期段内计划任务
	 * @param userId
	 * @param refDate
	 * @param orgCode
	 */
	void reformStatistics(@Param(value="userId") String userId, @Param(value="refDate") String refDate, @Param(value="orgCode")String orgCode);

	List<Map<String, Object>> countFinishByPlanIds(List<Long> planIds);

	List<Map<String, Object>> queryPlanTaskTimeAxis(HashMap<String, Object> params);

	List<Map<String, Object>> queryTimeAxis(HashMap<String, Object> params);

	List<Plan> getPlanIdsByDate(@Param("date") Date date);

	List<PlanTask> getPlanTaskList(@Param("date") Date date);
}
