package cn.iocoder.yudao.module.system.service.positionmap;

import java.util.*;
import javax.validation.*;

import cn.iocoder.yudao.module.mqtt.api.path.dto.PositionAllChangePointBindingDTO;
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.PositionChangePointBindingDTO;
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionChangePointBindingPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionChangePointBindingSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionChangePointBindingDO;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 区域变更点绑定 Service 接口
 *
 * @author 陈宾顺
 */
public interface PositionChangePointBindingService extends IService<PositionChangePointBindingDO> {

    /**
     * 创建区域变更点绑定
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createPositionChangePointBinding(@Valid PositionChangePointBindingSaveReqVO createReqVO);

    /**
     * 更新区域变更点绑定
     *
     * @param updateReqVO 更新信息
     */
    void updatePositionChangePointBinding(@Valid PositionChangePointBindingSaveReqVO updateReqVO);

    /**
     * 删除区域变更点绑定
     *
     * @param id 编号
     */
    void deletePositionChangePointBinding(Long id);

    /**
     * 获得区域变更点绑定
     *
     * @param id 编号
     * @return 区域变更点绑定
     */
    PositionChangePointBindingDTO getPositionChangePointBinding(Long id);

    /**
     * 获得区域变更点绑定分页
     *
     * @param pageReqVO 分页查询
     * @return 区域变更点绑定分页
     */
    PageResult<PositionChangePointBindingDO> getPositionChangePointBindingPage(PositionChangePointBindingPageReqVO pageReqVO);

    /**
     * 查询所有绑定的区域变更点
     * @return
     */
    List<PositionAllChangePointBindingDTO> getAllPositionChangePointBinding();

    /**
     * 根据地图id查询
     * @param positionMapId
     * @return
     */
    List<PositionChangePointBindingDO> getPositionChangePointBindingByMapId(Long positionMapId);

    /**
     * 批量新增删除修改
     * @param list
     */
    void batchEditOrDel(List<List<PositionChangePointBindingDO>> list);

    /**
     * 不在此地图id的被绑定变更点
     * @param positionMapId
     * @param endPointIds
     * @return
     */
    List<PositionChangePointBindingDO> getByMapIdAndEndPointIds(Long positionMapId, List<Long> endPointIds);

    /**
     * 不在此地图id的绑定变更点
     * @param positionMapId
     * @param startPointIds
     * @return
     */
    List<PositionChangePointBindingDO> getByMapIdAndStartPointIds(Long positionMapId, List<Long> endPointIds, List<Long> startPointIds);

    /**
     * 根据地图ID删除
     * @param mapId
     */
    void deleteBindingByMapId(Long mapId);
}
