package com.xiaopeng.map.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xiaopeng.api.dto.operation.PointAddDto;
import com.xiaopeng.api.dto.operation.PointMapQuery;
import com.xiaopeng.api.dto.order.HistoryEndPointsDto;
import com.xiaopeng.api.dto.order.HistoryStartPointsDto;
import com.xiaopeng.api.model.operation.XpPoint;
import com.xiaopeng.api.query.operation.PointListQuery;
import com.xiaopeng.api.query.operation.PointPageListListQuery;
import com.xiaopeng.api.vo.order.XpHistoryEndPointsVo;
import com.xiaopeng.api.vo.order.XpHistoryStartPointsVo;
import com.xiaopeng.api.vo.order.XpPointsSearchVo;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.map.dto.NearestDto;
import com.xiaopeng.map.dto.StationDetailQueryDto;
import com.xiaopeng.map.query.PointByNameQuery;
import com.xiaopeng.map.vo.NearestVo;
import com.xiaopeng.map.vo.OrderDistanceVo;
import com.xiaopeng.map.vo.StationDetailVo;
import org.springframework.transaction.annotation.Transactional;
import javax.validation.Valid;
import java.time.LocalTime;
import java.util.List;
/**
*
* 点位管理 服务类
*
*
* @author liu
* @author WuGuanFengYue
* @since 2026-02-03
*/
public interface XpPointService extends IService {
/**
* 新增点位并根据规则生成点位编号
*/
XpPoint addPointWithGeneratedNumber(@Valid PointAddDto pointAddDto);
@Transactional
void setStationSortNo(Long stationId, Integer stationSortNo);
String getPointNumber(Long electronicAreaId);
/**
* 校验点位名称唯一
*/
void validatePointNameUnique(String pointName, Long excludeId);
/**
* 获取附近上车站点
*/
NearestVo nearest(@Valid NearestDto dto);
/**
* 根据场站查询场站详情及所属点位。
* 仅返回当前时段、当前运营状态下可展示的场站与子点位数据。
*/
StationDetailVo queryStationDetail(@Valid StationDetailQueryDto dto, String uid);
/**
* 判断点位是否时间段内
* @param now
* @return
*/
boolean getInTime(LocalTime now, Integer effectivePeriod, String effectiveTimePeriod);
List pointMap(PointMapQuery query);
List listAll(PointListQuery query);
/**
* 获取历史上车站点
* @param historyStartPointsDto
* @return
*/
List getHistoryStartPoints(HistoryStartPointsDto historyStartPointsDto);
/**
* 获取历史上车站点
* @param historyEndPointsDto
* @return
*/
List getHistoryEndPoints(HistoryEndPointsDto historyEndPointsDto);
/**
* 根据名称获取点位列表
* @param query
* @return
*/
XpPointsSearchVo queryPointByName(@Valid PointByNameQuery query);
/**
* 获取可下单距离
* @return
*/
OrderDistanceVo getOrderDistance();
PageInfo pageList(PointPageListListQuery query);
List listByStationId(Long stationId);
@Transactional(rollbackFor = Exception.class)
void clearStationInfoByStationId(Long stationId);
@Transactional(rollbackFor = Exception.class)
void statusStopByStationId(Long stationId, Boolean pointStop);
@Transactional(rollbackFor = Exception.class)
void statusEnableByStationId(Long stationId);
@Transactional(rollbackFor = Exception.class)
void pointDeleteByStationId(Long stationId, Boolean pointDelete);
}