时序图代码:
version1.0
预约修改
@startuml title (Express)Reservation
skinparam dpi 100
actor "H5" as H
actor "adapter" as C
actor "activity-ser" as A
actor "basic-data-ser" as B
actor "inventory-ser" as I
actor "reservation-ser" as R
actor "UPPS" as UPP
H -> C : /customer/reser 券预约
C -> C : 通过Redis By reserveNumber加锁(防止预约单多次修改)
C -> R : 查询预约单 /reservation/reservationOrder/findAll
C -> A : 查询活动信息 /activity/unified/activity/basic
C -> C : 一个spu下只允许预约一个sku
C -> C : 验证手机号(非Nova活动需要校验短信验证码)
alt 校验验证码失败
C -> H : 校验失败
end
C -> R : 使用手机号和券ID查询预约单(ReservationOrder、ReservationOrderItem关联查询) /reservation/reservationOrder/findJoinReservationOrderItem
alt 查询数据为空
C -> H : 数据查询失败-手机号与券号布匹配
end C -> C : 手机号与券号不匹配
C -> C : 非资格活动查询需:通过券号查询券详情
C -> C : 组装参数(快递单更新入账门店、计算快递推单时间等)
C -> C : 多层数据校验
C -> I : 锁定新库存(只处理非快递订单) /inventory/lock
C -> R : 更新预约单信息 /reservation/reservationOrder/save
C -> I : 释放老库存(只处理非快递订单) /inventory/unlock
C -> C : 发布事件 ReservationModifiedEvent
C -> R : ReservationModifEvent - CouponOperationListener: 批量修改券 /reservation/couponOperation/save
C -> C : ReservationModifEvent - DPInventoryOccupiedListener: 处理dp库存(快递的预约不处理dp库存)
C -> C : ReservationModifEvent - OrderAlterListener: 订单更新插入redis
C -> C : ReservationModifEvent - QualReservationOrderListener: 资格处理(非资格预约不处理)
C -> C : ReservationModifEvent - ReservationRedemptionReportListener: 批量保存 /fulfillment/reservationRedemptionReport/saveBatch
C -> C : ReservationModifEvent - SmsNotificationListener: 发送短信
C -> C : 如果是自提订单:更新预约缓存信息{老预约日期减缓存、新预约日期加缓存}
@enduml
时序图效果: