package com.mosty.yjzl.service;

import com.mosty.base.model.dto.yjzl.TbZdxlFgdwBddxlrwHandleDTO;
import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBddxlrw;
import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgdwBddxlrwJl;
import com.mosty.base.model.entity.yjzl.zddw.TbZdxlFgxlrw;
import com.mosty.base.model.vo.yjzl.TbZdxlFgdwBddxlrwVO;

import java.util.List;

/**
 * @author zhangzhao
 * @description 指导巡逻方格点位必到点巡逻任务表Service
 * @modifier zhangzhao
 * @modifiedTime 2025/09/06 19:43
 * @since 2025/09/06 19:43
 */
public interface TbZdxlFgdwBddxlrwService {

    /**
     * 查询单条（根据主键ID）
     * @param id 主键ID
     * @return 实体信息
     */
    TbZdxlFgdwBddxlrw selectById(String id);

    /**
     * 查询列表（根据方格巡逻任务ID）
     * @param fgxlrwId 方格巡逻任务ID
     * @return 实体信息列表
     */
    List<TbZdxlFgdwBddxlrw> selectListByFgxlrwId(String fgxlrwId);

    /**
     * 查询返回信息列表（根据方格巡逻任务ID）
     * @param fgxlrwId 方格巡逻任务ID
     * @return 返回信息列表
     */
    List<TbZdxlFgdwBddxlrwVO> selectVoListByYxfFgxlrwId(String fgxlrwId);

    /**
     * 查询返回信息列表（根据方格巡逻任务ID）
     * @param fgxlrwId 方格巡逻任务ID
     * @return 返回信息列表
     */
    List<TbZdxlFgdwBddxlrwVO> selectVoListByFgxlrwId(String fgxlrwId);

    /**
     * 查询未选中的必到点返回信息列表（根据方格巡逻任务ID）
     * @param fgxlrwId 方格巡逻任务ID
     * @return 返回信息列表
     */
    List<TbZdxlFgdwBddxlrwVO> selectUnSelectedVoListByFgxlrwId(String fgxlrwId);

    /**
     * 保存列表
     * @param handleList 操作列表
     * @param fgxlrwId 方格巡逻任务ID
     * @return 操作条数
     */
    int handleList(List<TbZdxlFgdwBddxlrwHandleDTO> handleList, String fgxlrwId);

    /**
     * 保存列表（根据方格巡逻任务列表）
     * @param fgxlrwList 方格巡逻任务列表
     * @return 实体列表
     */
    List<TbZdxlFgdwBddxlrw> handleListByFgxlrwList(List<TbZdxlFgxlrw> fgxlrwList);

    /**
     * 追加列表
     * @param appendHandleList 操作列表
     * @param fgxlrwId 方格巡逻任务ID
     * @return 实体列表
     */
    List<TbZdxlFgdwBddxlrw> appendList(List<TbZdxlFgdwBddxlrwHandleDTO> appendHandleList, String fgxlrwId);

    /**
     * 打卡（根据打卡记录）
     * @param jl 打卡记录
     * @param start 是否是开始打卡
     * @return 主键ID
     */
    String clockInByJl(TbZdxlFgdwBddxlrwJl jl, boolean start);

}
