发券逻辑

Service 层:
1. 通过缓存(orderID)判断是否正在发券,若正在发直接返回
2. 发券主流程(Biz 层)
3. 发送微信/QQ/短信通知
4. 发 swallow 消息(非结算)
5. Cat 打点统计

Biz 层:
1. DPBiz
  -- 普通发券
  -- 第三方发券
  -- 导码单发券
  -- 实物单发券
2. MTBiz

DPBiz 通用逻辑:
1. 插入 SerialNumber-ReceiptID 映射表,生成 ReceiptID 以备后用
2. 插入 TG_Receipt_New: insertWithID
3. 异步插入 JournalVoucher 表并给结算发消息
上述为点评测(非餐)发券的通用逻辑,它有个前提条件,就是首先你得有一批券码。券码怎样获取?
普通发券
1. 从团单获取券首位。如果获取失败,则随机生成一个
2. 根据券首位从内存券池获取券码
3. 如果从券池获取券码失败,则随机生成10位数的券码,防止发券失败
4. 通用逻辑
第三方发券
1. 生成 n 个空的券码
2. 通用逻辑
3. 调用第三方发券,最多尝试3次
导码单发券
1. 直接从导码单表里取
2. 通用逻辑
实物单发券
不知道在搞什么

========== 以上都是非餐券,为监听订单组 Swallow 消息的后续操作 ==========

MTBiz 逻辑:
1. 如果请求 MT 发券开关关闭,直接返回
2. 构建发券请求
3. Http 请求 MT 发券
4. 插入 DP-MT 券 ID 映射表

PS: 为何要有 MT 发券?

猜你喜欢

转载自dsxwjhf.iteye.com/blog/2292379