package com.mosty.yjzl.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.mosty.base.model.dto.yjzl.TbZdxlFgdwSaveDTO;
import com.mosty.base.model.dto.yjzl.TbZdxlFgdwUpdateDTO;
import com.mosty.base.model.query.yjzl.TbZdxlFgdwQuery;
import com.mosty.base.model.vo.yjzl.TbZdxlFgdwVO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author zhangzhao
 * @description 指导巡逻方格点位表Service
 * @modifier zhangzhao
 * @modifiedTime 2025/05/15 21:55
 * @since 2025/05/15 21:55
 */
public interface TbZdxlFgdwService {

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

    /**
     * 查询单条（根据必到点ID）
     * @param bddId 必到点ID
     * @return 实体信息
     */
    TbZdxlFgdwVO selectByBddId(String bddId);

    /**
     * 查询全量列表
     * @return 实体信息列表
     */
    List<TbZdxlFgdwVO> selectAllList();

    /**
     * 查询分页
     * @param query 实体查询对象
     * @return 实体信息分页列表
     */
    IPage<TbZdxlFgdwVO> selectPage(TbZdxlFgdwQuery query);

    /**
     * 查询列表
     * @param query 实体查询对象
     * @return 实体信息列表
     */
    List<TbZdxlFgdwVO> selectList(TbZdxlFgdwQuery query);

    /**
     * 修改单条
     * @param dto 修改DTO对象
     * @return 实体主键ID
     */
    Long updateEntity(TbZdxlFgdwUpdateDTO dto);

    /**
     * 新增单条
     * @param dto 保存DTO对象
     * @return 实体主键ID
     */
    Long saveEntity(TbZdxlFgdwSaveDTO dto);

    /**
     * 根据经纬度获取正方形四个点位
     * @param longitude 经度
     * @param latitude 纬度
     * @param distance 范围（米），半径
     * @return 正方形四个角点坐标
     */
    Map<String, BigDecimal> getSquarePoints(double longitude, double latitude, double distance);

    /**
     * 删除单条（逻辑删除）
     * @param id 主键ID
     * @return 删除结果
     */
    Integer deleteById(Long id);

    /**
     * 批量删除（逻辑删除）
     * @param ids 主键ID列表
     * @return 删除结果
     */
    Integer deleteByIds(List<Long> ids);

}
