//CouponCartRule - MongoDB
{
"id": 1,
"applicability": {
"validFrom": "12-MAR-2017T01:00:00Z",
"validTill": "12-MAR-2019T01:00:00Z"
},
"maxUsage": 100,
"currentUsage": 99,
"maxBudget": 1000,
"currrentBudget": 990
}
//UniqueCoupon collection - MongoDB
{
"ruleId": 1,
"couponCode": "CITIDEALMAR18",
"currentCouponUsage": 90,
"validFrom": "12-MAR-2018T01:00:00Z",
"validTill": "12-APR-2018T01:00:00Z"
}
{
"ruleId": 1,
"couponCode": "CITIDEALAPR18",
"currentCouponUsage": 9,
"validFrom": "12-JAN-2018T01:00:00Z",
"validTill": "12-FEB-2018T01:00:00Z"
}
//Order - MongoDB
{
"id": 112,
"total": {
"discountCode": "CITIDEALMAR18",
"discount": 10,
"total": 90,
"grandTotal": 90
},
"items": []
}
问题说明
CouponCartRule将为订单中的优惠券代码定义条件。
每个购物车规则都可以有n个优惠券,可以覆盖特定条件。
这样做是为了重复使用CouponCartRule但在它们下面创建不同的优惠券,并且CouponCartRule下的优惠券可以增长到最多10K记录。
当订单成功下单时,订单将应用couponCode和折扣。
订单收集由OM团队管理,非常大。 我们在创建/取消订单时收到订单添加/取消事件。
我需要检查结帐时是否违反了maxUsage和maxBudget。
我打算收听订单添加和取消活动,更新订单添加和订购取消活动的使用情况。
步骤
如果有停机时间,任何关于使代码具有幂等性的建议,如果步骤2中存在失败,则侦听器将向DLQ发送消息,并且计数将再次更新,这是不希望的。
我想到的一个选项是在UniqueCoupon级别跟踪和记录统计数据,然后在SCR级别聚合[当使用后续优惠券时,聚合操作最终将保持一致]。
由于此代码是实时调用的,因此应该是高效的。
答案 0 :(得分:0)
我最终提出了以下解决方案,这是由我们的infra [rabbit mq和mongodb]支持的。以下是设计审核后接受的解决方案。希望这有助于有类似问题的人。
//COUPON_USAGE_TRACKER
{
"ruleId": 948,
"couponCode": "TENOFF",
"couponId": 123,
"order": {
"created_at": "",
"udpated_at": "",
"member_id": 221930,
"member_order_count": 5,
"publicId": "4asdff-23ewea-232",
"id": 234123,
"total": {
"discount_code": "TENOFF",
"discount": "10",
"grand_total": 100,
"sub_total": 10
}
}
}
//COUPON_RULE_SUMMARY
{
"ruleId": 948,
"last_update_at": "",
"currentUsage": 100,
"currentBudget": 1000
}
//COUPON_SUMMARY
{
"ruleId": 948,
"couponId": 948,
"last_update_at": "",
"currentUsage": 100,
"currentBudget": 1000
}