@startuml
skinparam sequenceArrowThickness 1
skinparam roundcorner 20
skinparam maxmessagesize 500
/'skinparam sequenceParticipant underline'/

actor nsq as nsq

participant "retail-sales" as sales
participant "kdtId white list" as list
participant "salesman white list" as list2

participant "salesman_rank_log" as t1
participant "salesman_achievement_details_log" as t2
participant "apollo" as apollo

nsq -> sales : 1发送订单（分销）支付成功消息
activate sales

/'sales -> sales : 1.1加分布式锁
activate sales
return'/

sales -> apollo : 1.1查询活动开始时间 并比较（支付时间和活动开始时间和结束时间做比较）
activate apollo
return 1.2返回

sales -> list2 : 2校验salesmanId是否属于白名单
activate list2
return 3返回

sales -> t2 : 3写入明细表
note left
    先在salesman_rank_log查订单，
    如果存在，说明已被处理直接返回

    orderNo
    state = 0
    salesmanId
    realPay = 订单的实付金额（不计算优惠券等信息吗？）
    version = 0 (default)
end note
activate t2
return 4返回

sales -> t1 : 5写入导购rank表（汇总表）
note left
    salesmanId
    paidAmount = sum(salesman_achievement_details_log(real_pay)) + realPay
    version = version (default = 0) + 1
end note
activate t1
return 6返回

return 7消息处理完成（处理不成功进行重试5次）

@enduml