- 防止重复发送订单取消通知消息

This commit is contained in:
gazebo
2019-09-21 17:01:41 +08:00
parent 190793d6ec
commit 3f459a5e10
4 changed files with 13 additions and 9 deletions

View File

@@ -325,7 +325,8 @@ func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *mod
} else if order.Status > model.OrderStatusUnknown && status.Status > model.OrderStatusUnknown && order.Status != status.Status { } else if order.Status > model.OrderStatusUnknown && status.Status > model.OrderStatusUnknown && order.Status != status.Status {
globals.SugarLogger.Warnf("OnOrderStatusChanged strange order:%s, status:%s", utils.Format4Output(order, true), utils.Format4Output(status, true)) globals.SugarLogger.Warnf("OnOrderStatusChanged strange order:%s, status:%s", utils.Format4Output(order, true), utils.Format4Output(status, true))
} }
savedOrderInfo := s.loadSavedOrderFromMap(status, false) savedOrderInfo := s.loadSavedOrderFromMap(status, false) // 可能会有重复的消息(比如订单取消)
statusChanged := savedOrderInfo.order == nil || savedOrderInfo.order.Status != order.Status
savedOrderInfo.SetOrder(order) savedOrderInfo.SetOrder(order)
if (model.IsOrderUnlockStatus(status.Status)) || if (model.IsOrderUnlockStatus(status.Status)) ||
@@ -366,7 +367,7 @@ func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *mod
} }
if !isPending { if !isPending {
if status.Status == model.OrderStatusFinishedPickup || status.Status == model.OrderStatusCanceled { if status.Status == model.OrderStatusFinishedPickup || status.Status == model.OrderStatusCanceled {
if status.Status == model.OrderStatusCanceled { if statusChanged && status.Status == model.OrderStatusCanceled {
s.notifyOrderCanceled(savedOrderInfo.order) s.notifyOrderCanceled(savedOrderInfo.order)
} }
msghub.OnFinishedPickup(savedOrderInfo.order) msghub.OnFinishedPickup(savedOrderInfo.order)
@@ -374,7 +375,7 @@ func (s *DefScheduler) OnOrderStatusChanged(order *model.GoodsOrder, status *mod
status.Status == model.OrderStatusApplyFailedGetGoods || //model.IsOrderUnlockStatus(status.Status) || status.Status == model.OrderStatusApplyFailedGetGoods || //model.IsOrderUnlockStatus(status.Status) ||
status.Status == model.OrderStatusAgreeFailedGetGoods || status.Status == model.OrderStatusAgreeFailedGetGoods ||
status.Status == model.OrderStatusDeliverFailed { status.Status == model.OrderStatusDeliverFailed {
if status.Status == model.OrderStatusApplyCancel { if statusChanged && status.Status == model.OrderStatusApplyCancel {
s.notifyUserApplyCancel(savedOrderInfo.order, status.Remark) s.notifyUserApplyCancel(savedOrderInfo.order, status.Remark)
} }
msghub.OnKeyOrderStatusChanged(savedOrderInfo.order) msghub.OnKeyOrderStatusChanged(savedOrderInfo.order)

View File

@@ -471,9 +471,8 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku bool, params ma
ORDER BY MIN(t2.seq), t1.id DESC ORDER BY MIN(t2.seq), t1.id DESC
LIMIT ? OFFSET ?` LIMIT ? OFFSET ?`
pageSize = jxutils.FormalizePageSize(pageSize) pageSize = jxutils.FormalizePageSize(pageSize)
if offset < 0 { offset = jxutils.FormalizePageOffset(offset)
offset = 0
}
sqlParams = append(sqlParams, pageSize, offset) sqlParams = append(sqlParams, pageSize, offset)
skuNamesInfo = &SkuNamesInfo{} skuNamesInfo = &SkuNamesInfo{}
dao.Begin(db) // todo 这里用事务的原因是SQL_CALC_FOUND_ROWS会出错 dao.Begin(db) // todo 这里用事务的原因是SQL_CALC_FOUND_ROWS会出错

View File

@@ -330,7 +330,7 @@ func NotifyUserApplyCancel(order *model.GoodsOrder, cancelReason string) (err er
}, },
"keyword1": map[string]interface{}{ // 订单编号 "keyword1": map[string]interface{}{ // 订单编号
"value": fmt.Sprintf("%s第%d号订单, %s", model.VendorChineseNames[order.VendorID], order.OrderSeq, order.VendorOrderID), "value": fmt.Sprintf("%s第%d号订单, %s", model.VendorChineseNames[order.VendorID], order.OrderSeq, order.VendorOrderID),
"color": WX_NEW_ORDER_TEMPLATE_COLOR, "color": venderColors[order.VendorID],
}, },
"keyword2": map[string]interface{}{ // 订单日期 "keyword2": map[string]interface{}{ // 订单日期
"value": utils.Time2Str(order.OrderCreatedAt), "value": utils.Time2Str(order.OrderCreatedAt),
@@ -338,7 +338,7 @@ func NotifyUserApplyCancel(order *model.GoodsOrder, cancelReason string) (err er
}, },
"keyword3": map[string]interface{}{ // 订单内容 "keyword3": map[string]interface{}{ // 订单内容
"value": cancelReason, "value": cancelReason,
"color": venderColors[order.VendorID], "color": WX_NEW_ORDER_TEMPLATE_COLOR,
}, },
"remark": map[string]interface{}{ "remark": map[string]interface{}{
"value": order.ConsigneeMobile, "value": order.ConsigneeMobile,
@@ -377,6 +377,10 @@ func NotifyOrderCanceled(order *model.GoodsOrder) (err error) {
}, },
"orderAddress": map[string]interface{}{ "orderAddress": map[string]interface{}{
"value": order.ConsigneeAddress, "value": order.ConsigneeAddress,
"color": WX_NEW_ORDER_TEMPLATE_COLOR,
},
"orderName": map[string]interface{}{
"value": fmt.Sprintf("%s第%d号订单, %s", model.VendorChineseNames[order.VendorID], order.OrderSeq, order.VendorOrderID),
"color": venderColors[order.VendorID], "color": venderColors[order.VendorID],
}, },
"remark": map[string]interface{}{ "remark": map[string]interface{}{

View File

@@ -365,7 +365,7 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) (orderSta
} else if notifyType == mtwmapi.NotifyTypeReject { } else if notifyType == mtwmapi.NotifyTypeReject {
vendorStatus = fakeRefuseUserApplyCancel vendorStatus = fakeRefuseUserApplyCancel
} else if notifyType == mtwmapi.NotifyTypeSuccess { } else if notifyType == mtwmapi.NotifyTypeSuccess {
vendorStatus = fakeMerchantAgreeApplyCancel vendorStatus = fakeMerchantAgreeApplyCancel // todo 可能导致订单取消消息重复
} }
} }
} }