1
This commit is contained in:
@@ -3,10 +3,11 @@ package tiktok_store
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
tiktokShop "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
)
|
||||
|
||||
// 美团回调接口
|
||||
func OnCallbackMsg(msg *tiktokShop.CreateOrderCallback) (tiktokShop *mtwmapi.CallbackResponse) {
|
||||
func OnCallbackMsg(msg *tiktokShop.CreateOrderCallback) (resp *mtwmapi.CallbackResponse) {
|
||||
if CurPurchaseHandler != nil {
|
||||
switch msg.Tag {
|
||||
case tiktokShop.CallbackMsgTagId:
|
||||
@@ -16,8 +17,8 @@ func OnCallbackMsg(msg *tiktokShop.CreateOrderCallback) (tiktokShop *mtwmapi.Cal
|
||||
return response
|
||||
}
|
||||
|
||||
func GetOrderIDFromMsg(msg *mtwmapi.CallbackMsg) string {
|
||||
return msg.FormData.Get(mtwmapi.KeyOrderID)
|
||||
func GetOrderIDFromMsg(msg *tiktokShop.CreateOrderCallback) string {
|
||||
return utils.Int64ToStr(msg.Data.PId)
|
||||
}
|
||||
|
||||
func GetVendorStoreIDFromMsg(msg *mtwmapi.CallbackMsg) string {
|
||||
|
||||
199
business/partner/purchase/tiktok_store/order.go
Normal file
199
business/partner/purchase/tiktok_store/order.go
Normal file
@@ -0,0 +1,199 @@
|
||||
package tiktok_store
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
tiktokShop "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/partner"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
)
|
||||
|
||||
func (c *PurchaseHandler) onOrderMsg(msg *tiktokShop.CreateOrderCallback) (response *mtwmapi.CallbackResponse) {
|
||||
var err error
|
||||
//if c.isAfsMsg(msg) {
|
||||
// response = c.OnAfsOrderMsg(msg) // 退单
|
||||
//} else {
|
||||
status := c.callbackMsg2Status(msg)
|
||||
if partner.CurOrderManager.GetStatusDuplicatedCount(status) > 0 {
|
||||
return nil
|
||||
}
|
||||
if msg.Cmd == mtwmapi.MsgTypeNewOrder { // 新订单
|
||||
order, orderMap, err2 := c.getOrder(msg.AppID, GetOrderIDFromMsg(msg), GetVendorStoreIDFromMsg(msg))
|
||||
if err = err2; err == nil {
|
||||
err = partner.CurOrderManager.OnOrderNew(order, c.callbackMsg2Status(msg))
|
||||
if err == nil {
|
||||
utils.CallFuncAsync(func() {
|
||||
if msg.Cmd == mtwmapi.MsgTypeNewOrder {
|
||||
c.OnOrderDetail(orderMap, partner.CreatedPeration)
|
||||
} else {
|
||||
c.OnOrderDetail(orderMap, partner.UpdatedPeration)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if status != nil {
|
||||
var order *model.GoodsOrder
|
||||
if order, err = partner.CurOrderManager.LoadOrder(GetOrderIDFromMsg(msg), model.VendorIDMTWM); err == nil {
|
||||
// if order, err = c.GetOrder(msg.AppID, GetOrderIDFromMsg(msg)); err == nil {
|
||||
if status.Status == model.OrderStatusAdjust {
|
||||
skuList, err2 := getRefundSkuDetailList(msg, order)
|
||||
if err = err2; err == nil {
|
||||
var removedSkuList []*model.OrderSku
|
||||
for _, mtwmSku := range skuList {
|
||||
order.ActualPayPrice -= jxutils.StandardPrice2Int(mtwmSku.RefundPrice) * int64(mtwmSku.Count)
|
||||
removedSkuList = append(removedSkuList, &model.OrderSku{
|
||||
SkuID: int(utils.Str2Int64WithDefault(mtwmSku.SkuID, 0)),
|
||||
Count: mtwmSku.Count,
|
||||
})
|
||||
}
|
||||
order = jxutils.RemoveSkuFromOrder(order, removedSkuList)
|
||||
jxutils.RefreshOrderSkuRelated(order)
|
||||
err = partner.CurOrderManager.OnOrderAdjust(order, status)
|
||||
}
|
||||
} else {
|
||||
if status.Status == model.OrderStatusDelivering {
|
||||
// 美团订单即使时在配送状态时,如果之前没有调用过拣货完成,也会对门店指标生成影响,这里强制再调用拣货完成,且忽略错误
|
||||
utils.CallFuncAsync(func() {
|
||||
if globals.EnableMtwmStoreWrite {
|
||||
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").PreparationMealComplete(utils.Str2Int64(status.VendorOrderID))
|
||||
}
|
||||
})
|
||||
}
|
||||
err = partner.CurOrderManager.OnOrderStatusChanged(msg.AppID, status)
|
||||
if err == nil && msg.Cmd == mtwmapi.MsgTypeOrderFinished {
|
||||
utils.CallFuncAsync(func() {
|
||||
orderMap, err := getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").OrderGetOrderDetail(utils.Str2Int64(GetOrderIDFromMsg(msg)), true)
|
||||
if err == nil && utils.MustInterface2Int64(orderMap["is_third_shipping"]) == SelfDeliveryCarrierNo {
|
||||
c.OnOrderDetail(orderMap, partner.UpdatedPeration)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//}
|
||||
return mtwmapi.Err2CallbackResponse(err, "")
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) callbackMsg2Status(msg *tiktokShop.CreateOrderCallback) (orderStatus *model.OrderStatus) {
|
||||
orderID := GetOrderIDFromMsg(msg)
|
||||
vendorStatus := msg.Cmd
|
||||
remark := ""
|
||||
statusTime := utils.Str2Int64(msg.FormData.Get("timestamp"))
|
||||
switch msg.Cmd {
|
||||
case mtwmapi.MsgTypeUserUrgeOrder, mtwmapi.MsgTypeOrderModified, mtwmapi.MsgTypeOrderFinancial:
|
||||
vendorStatus = msg.Cmd
|
||||
case mtwmapi.MsgTypeOrderCanceled:
|
||||
vendorStatus = mtwmapi.OrderStatusCanceled
|
||||
remark = msg.FormData.Get("reason")
|
||||
case FakeMsgType, mtwmapi.MsgTypeNewOrder, mtwmapi.MsgTypeOrderAccepted, mtwmapi.MsgTypeOrderFinished:
|
||||
vendorStatus = msg.FormData.Get("status")
|
||||
statusTime = utils.Str2Int64(msg.FormData.Get("utime"))
|
||||
case mtwmapi.MsgTypeOrderRefund, mtwmapi.MsgTypeOrderPartialRefund:
|
||||
notifyType := msg.FormData.Get("notify_type")
|
||||
vendorStatus = msg.Cmd + "-" + notifyType
|
||||
if true { // 已经提前判断了,到这里的都是售中
|
||||
remark = msg.FormData.Get("reason")
|
||||
if msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund {
|
||||
if notifyType == mtwmapi.NotifyTypePartyApply {
|
||||
if globals.EnableMtwmStoreWrite {
|
||||
//if order, _ := partner.CurOrderManager.LoadOrder(orderID, model.VendorIDMTWM); order != nil {
|
||||
// getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), "").OrderRefundAgree(utils.Str2Int64(orderID), "自动确认退款")
|
||||
//}
|
||||
// goods, err := dao.GetSimpleOrder(dao.GetDB(), orderID)
|
||||
// if err == nil {
|
||||
// if goods.Status < model.OrderStatusDelivering {
|
||||
// } else {
|
||||
// api.MtwmAPI.OrderRefundReject(utils.Str2Int64(orderID), "商品配送中,请联系门店。") // todo 京东与饿百都没有售前用户提出订单调整的,自动拒绝调整单
|
||||
// }
|
||||
// }
|
||||
}
|
||||
} else if notifyType == mtwmapi.NotifyTypeSuccess {
|
||||
vendorStatus = fakeOrderAdjustFinished
|
||||
}
|
||||
} else if msg.Cmd == mtwmapi.MsgTypeOrderRefund {
|
||||
if notifyType == mtwmapi.NotifyTypeApply {
|
||||
vendorStatus = fakeUserApplyCancel
|
||||
} else if notifyType == mtwmapi.NotifyTypeCancelRefund || notifyType == mtwmapi.NotifyTypeCancelRefundComplaint {
|
||||
vendorStatus = fakeUserUndoApplyCancel
|
||||
} else if notifyType == mtwmapi.NotifyTypeReject {
|
||||
vendorStatus = fakeRefuseUserApplyCancel
|
||||
} else if notifyType == mtwmapi.NotifyTypeSuccess {
|
||||
vendorStatus = fakeMerchantAgreeApplyCancel // todo 可能导致订单取消消息重复
|
||||
}
|
||||
}
|
||||
}
|
||||
default:
|
||||
globals.SugarLogger.Errorf("mtwm unkonw msg:%s", utils.Format4Output(msg, false))
|
||||
}
|
||||
if vendorStatus != "" {
|
||||
orderStatus = &model.OrderStatus{
|
||||
VendorOrderID: orderID,
|
||||
VendorID: model.VendorIDMTWM,
|
||||
OrderType: model.OrderTypeOrder,
|
||||
RefVendorOrderID: orderID,
|
||||
RefVendorID: model.VendorIDMTWM,
|
||||
VendorStatus: vendorStatus,
|
||||
Status: c.getStatusFromVendorStatus(vendorStatus),
|
||||
StatusTime: getTimeFromTimestamp(statusTime),
|
||||
Remark: remark,
|
||||
}
|
||||
}
|
||||
return orderStatus
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) callbackMsg2Status(msg *tiktokShop.CreateOrderCallback) (orderStatus *model.OrderStatus) {
|
||||
orderID := GetOrderIDFromMsg(msg)
|
||||
orderStatus = &model.OrderStatus{
|
||||
VendorOrderID: orderID,
|
||||
VendorID: model.VendorIDDD,
|
||||
OrderType: model.OrderTypeOrder,
|
||||
RefVendorOrderID: orderID,
|
||||
RefVendorID: model.VendorIDDD,
|
||||
StatusTime: utils.Timestamp2Time(msg.Timestamp),
|
||||
VendorStatus: msg.Cmd,
|
||||
}
|
||||
if msg.Cmd == ebaiapi.CmdOrderUserCancel {
|
||||
msgType := int(utils.MustInterface2Int64(msg.Body["type"]))
|
||||
cancelType := int(utils.MustInterface2Int64(msg.Body["cancel_type"]))
|
||||
orderStatus.Remark = buildFullReason(utils.Interface2String(msg.Body["cancel_reason"]), utils.Interface2String(msg.Body["addition_reason"]))
|
||||
orderStatus.VendorStatus = msg.Cmd + "-" + utils.Int2Str(msgType)
|
||||
if cancelType == ebaiapi.OrderUserCancelTypeBeforeSale {
|
||||
if msgType == ebaiapi.OrderUserCancelApply /* || msgType == ebaiapi.OrderUserCancelCSIntervene */ {
|
||||
orderStatus.Status = model.OrderStatusApplyCancel
|
||||
} else if msgType == ebaiapi.OrderUserCancelCSRefused ||
|
||||
msgType == ebaiapi.OrderUserCancelMerchantRefused {
|
||||
orderStatus.Status = model.OrderStatusVendorRejectCancel
|
||||
} else if msgType == ebaiapi.OrderUserCancelInvalid {
|
||||
orderStatus.Status = model.OrderStatusUndoApplyCancel
|
||||
} else if msgType == ebaiapi.OrderUserCancelCSAgreed ||
|
||||
msgType == ebaiapi.OrderUserCancelMerchantAgreed {
|
||||
orderStatus.Status = model.OrderStatusVendorAgreeCancel
|
||||
}
|
||||
}
|
||||
} else if msg.Cmd == ebaiapi.CmdOrderPartRefund {
|
||||
msgType := int(utils.MustInterface2Int64(msg.Body["type"]))
|
||||
status := int(utils.MustInterface2Int64(msg.Body["status"]))
|
||||
orderStatus.Remark = buildFullReason(utils.Interface2String(msg.Body["reason"]), utils.Interface2String(msg.Body["addition_reason"]))
|
||||
if msgType == ebaiapi.OrderPartRefuncTypeMerchant && status == ebaiapi.OrderPartRefundSuccess {
|
||||
orderStatus.VendorStatus = fakeOrderAdjustFinished
|
||||
}
|
||||
} else if status, ok := msg.Body["status"]; ok {
|
||||
if vendorStatus, ok := status.(string); ok {
|
||||
orderStatus.VendorStatus = vendorStatus
|
||||
} else {
|
||||
orderStatus.VendorStatus = utils.Int64ToStr(utils.MustInterface2Int64(status))
|
||||
}
|
||||
orderStatus.Remark = utils.Interface2String(msg.Body["reason"])
|
||||
}
|
||||
if orderStatus.Status == 0 {
|
||||
orderStatus.Status = c.getStatusFromVendorStatus(orderStatus.VendorStatus)
|
||||
}
|
||||
return orderStatus
|
||||
}
|
||||
Reference in New Issue
Block a user