FlashDeliveryStateMachine.java 1.3 KB

123456789101112131415161718192021222324252627282930
  1. package com.ruoyi.app.flashdelivery.service;
  2. import static com.ruoyi.system.domain.flash.FlashDeliveryStatus.*;
  3. /**
  4. * 闪送履约状态机。
  5. * 正常路径固定为待接单、已接单、已取件、已送达、已完成;已完成和已取消均为终态。
  6. */
  7. public final class FlashDeliveryStateMachine {
  8. private FlashDeliveryStateMachine() { }
  9. /** 正常链路逐级推进;取消仅允许取件前,站点事实由业务入口再次校验。 */
  10. public static boolean canTransition(String from, String to) {
  11. return WAITING_ACCEPTANCE.equals(from) && ACCEPTED.equals(to)
  12. || ACCEPTED.equals(from) && PICKED_UP.equals(to)
  13. || PICKED_UP.equals(from) && DELIVERED.equals(to)
  14. || DELIVERED.equals(from) && COMPLETED.equals(to)
  15. || canAdminCancel(from) && CANCELLED.equals(to);
  16. }
  17. public static boolean canUserCancel(String status) {
  18. // 用户只能在实际取件前取消;取件后的异常由平台介入处理。
  19. return WAITING_ACCEPTANCE.equals(status) || ACCEPTED.equals(status);
  20. }
  21. public static boolean canAdminCancel(String status) {
  22. // 取件后的异常只能由客服处理,不能通过取消接口关闭配送或自动退款。
  23. return WAITING_ACCEPTANCE.equals(status) || ACCEPTED.equals(status);
  24. }
  25. }