package com.ylx.massage.service; import com.ylx.massage.domain.TOrder; /** * 订单校验服务接口 *

* 提供订单创建和接单时的校验功能,确保技师服务时间的互斥性。 * 采用订单状态锁机制,防止技师在同一时间段内被分配多个订单。 *

* * @author ylx * @version 1.0 * @since 2024 */ public interface OrderValidationService { /** * 检查技师是否可以接单 *

* 基于订单状态锁机制,检查技师是否有进行中的订单。 * 进行中的订单状态包括:待接单(0)、已接单(1)、已出发(6)、已到达(2)、服务中(3) *

* 校验规则: * * * @param technicianId 技师ID * @param newOrder 新订单信息 * @return true-可以接单 * @throws ServiceException 当技师不能接单时抛出异常,包含详细原因 */ boolean canAcceptOrder(String technicianId, TOrder newOrder); /** * 检查技师是否可以被手动分配订单 *

* 用于后台管理员手动分配订单的场景。 * 规则与接单相同:技师不能有进行中的订单。 *

* * @param technicianId 技师ID * @return true-可以分配 * @throws ServiceException 当技师不能被分配订单时抛出异常 */ boolean canManualAssign(String technicianId); /** * 获取技师的进行中订单数量 *

* 统计技师当前进行中的订单数量。 * 用于前端展示技师状态和负载情况。 *

* * @param technicianId 技师ID * @return 进行中的订单数量 */ long getInProgressOrderCount(String technicianId); /** * 检查订单是否可以支付 *

* 防止在订单状态发生变化后仍然可以支付。 *

* * @param orderNo 订单号 * @return true-可以支付 * @throws ServiceException 当订单不可支付时抛出异常 */ boolean canPayOrder(String orderNo); }