OrderValidationService.java 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package com.ylx.massage.service;
  2. import com.ylx.massage.domain.TOrder;
  3. /**
  4. * 订单校验服务接口
  5. * <p>
  6. * 提供订单创建和接单时的校验功能,确保技师服务时间的互斥性。
  7. * 采用订单状态锁机制,防止技师在同一时间段内被分配多个订单。
  8. * </p>
  9. *
  10. * @author ylx
  11. * @version 1.0
  12. * @since 2024
  13. */
  14. public interface OrderValidationService {
  15. /**
  16. * 检查技师是否可以接单
  17. * <p>
  18. * 基于订单状态锁机制,检查技师是否有进行中的订单。
  19. * 进行中的订单状态包括:待接单(0)、已接单(1)、已出发(6)、已到达(2)、服务中(3)
  20. * </p>
  21. * <b>校验规则:</b>
  22. * <ul>
  23. * <li>如果技师有进行中的订单,不允许接单</li>
  24. * <li>支持跨项目校验(按摩、陪玩等项目类型)</li>
  25. * <li>升级订单除外(parentNo不为空的订单)</li>
  26. * </ul>
  27. *
  28. * @param technicianId 技师ID
  29. * @param newOrder 新订单信息
  30. * @return true-可以接单
  31. * @throws ServiceException 当技师不能接单时抛出异常,包含详细原因
  32. */
  33. boolean canAcceptOrder(String technicianId, TOrder newOrder);
  34. /**
  35. * 检查技师是否可以被手动分配订单
  36. * <p>
  37. * 用于后台管理员手动分配订单的场景。
  38. * 规则与接单相同:技师不能有进行中的订单。
  39. * </p>
  40. *
  41. * @param technicianId 技师ID
  42. * @return true-可以分配
  43. * @throws ServiceException 当技师不能被分配订单时抛出异常
  44. */
  45. boolean canManualAssign(String technicianId);
  46. /**
  47. * 获取技师的进行中订单数量
  48. * <p>
  49. * 统计技师当前进行中的订单数量。
  50. * 用于前端展示技师状态和负载情况。
  51. * </p>
  52. *
  53. * @param technicianId 技师ID
  54. * @return 进行中的订单数量
  55. */
  56. long getInProgressOrderCount(String technicianId);
  57. /**
  58. * 检查订单是否可以支付
  59. * <p>
  60. * 防止在订单状态发生变化后仍然可以支付。
  61. * </p>
  62. *
  63. * @param orderNo 订单号
  64. * @return true-可以支付
  65. * @throws ServiceException 当订单不可支付时抛出异常
  66. */
  67. boolean canPayOrder(String orderNo);
  68. }