- 处理美团外卖隐私号降级的情况

This commit is contained in:
gazebo
2019-09-04 15:13:27 +08:00
parent 0bdcdde11c
commit f55a744570
6 changed files with 165 additions and 48 deletions

View File

@@ -5,6 +5,11 @@ import (
"git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model"
) )
type OrderPhoneNumberInfo struct {
VendorOrderID string
PhoneNumber string
}
type IPurchasePlatformOrderHandler interface { type IPurchasePlatformOrderHandler interface {
Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder) Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder)
GetOrder(vendorOrderID string) (order *model.GoodsOrder, err error) GetOrder(vendorOrderID string) (order *model.GoodsOrder, err error)

View File

@@ -6,8 +6,13 @@ import (
"git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model"
) )
func OnOrderCallbackMsg(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) { func OnCallbackMsg(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
if curPurchaseHandler != nil { if curPurchaseHandler != nil {
if msg.Cmd == mtwmapi.MsgTypeStoreStatusChanged {
response = curPurchaseHandler.onStoreStatusChanged(msg)
} else if msg.Cmd == mtwmapi.MsgTypePrivateNumberDowngrade {
response = curPurchaseHandler.onNumberDowngrade(msg)
} else {
if orderID := GetOrderIDFromMsg(msg); orderID != "" { if orderID := GetOrderIDFromMsg(msg); orderID != "" {
jxutils.CallMsgHandler(func() { jxutils.CallMsgHandler(func() {
switch msg.Cmd { switch msg.Cmd {
@@ -22,8 +27,7 @@ func OnOrderCallbackMsg(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackRes
utils.CallFuncAsync(func() { utils.CallFuncAsync(func() {
OnFinancialMsg(msg) OnFinancialMsg(msg)
}) })
} else */if msg.Cmd == mtwmapi.MsgTypeStoreStatusChanged { } */
response = curPurchaseHandler.onStoreStatusChanged(msg)
} }
} }
return response return response

View File

@@ -15,6 +15,7 @@ import (
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
"git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/business/partner"
"git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api" "git.rosy.net.cn/jx-callback/globals/api"
@@ -382,7 +383,7 @@ func (c *PurchaseHandler) postFakeMsg(vendorOrderID, cmd, vendorStatus string) {
msg.FormData.Set("timestamp", timeStr) msg.FormData.Set("timestamp", timeStr)
msg.FormData.Set("utime", timeStr) msg.FormData.Set("utime", timeStr)
utils.CallFuncAsync(func() { utils.CallFuncAsync(func() {
OnOrderCallbackMsg(msg) c.onOrderMsg(msg)
}) })
} }
@@ -582,3 +583,111 @@ func (c *PurchaseHandler) ListOrders(ctx *jxcontext.Context, parentTask tasksch.
// } // }
// return err // return err
// } // }
func (p *PurchaseHandler) GetOrderConsigneeNumber(ctx *jxcontext.Context, storeID int, vendorStoreID string) (numberList []*partner.OrderPhoneNumberInfo, err error) {
offset := 0
for {
result, err2 := api.MtwmAPI.OrderBatchPullPhoneNumber(vendorStoreID, 0, mtwmapi.MaxBatchPullPhoneNumberLimit)
if err = err2; err == nil {
for _, v := range result {
v2 := &partner.OrderPhoneNumberInfo{
VendorOrderID: utils.Int64ToStr(v.OrderID),
PhoneNumber: v.RealPhoneNumber,
}
if v2.PhoneNumber == "" {
v2.PhoneNumber = v.RealOrderPhoneNumber
}
numberList = append(numberList, v2)
}
if len(result) <= mtwmapi.MaxBatchPullPhoneNumberLimit {
break
}
offset += mtwmapi.MaxBatchPullPhoneNumberLimit
} else {
break
}
}
return numberList, err
}
func (p *PurchaseHandler) GetOrderCourierNumber(ctx *jxcontext.Context, storeID int, vendorStoreID string) (numberList []*partner.OrderPhoneNumberInfo, err error) {
offset := 0
for {
result, err2 := api.MtwmAPI.OrderGetRiderInfoPhoneNumber(vendorStoreID, 0, mtwmapi.MaxBatchPullPhoneNumberLimit)
if err = err2; err == nil {
for _, v := range result {
numberList = append(numberList, &partner.OrderPhoneNumberInfo{
VendorOrderID: utils.Int64ToStr(v.OrderID),
PhoneNumber: v.RiderRealPhoneNumber,
})
}
if len(result) <= mtwmapi.MaxBatchPullPhoneNumberLimit {
break
}
offset += mtwmapi.MaxBatchPullPhoneNumberLimit
} else {
break
}
}
return numberList, err
}
func (p *PurchaseHandler) onNumberDowngrade(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
var userNumberList, courierNumberList []*partner.OrderPhoneNumberInfo
userNumberMap := make(map[string]*partner.OrderPhoneNumberInfo)
courierNumberMap := make(map[string]*partner.OrderPhoneNumberInfo)
orderMap := make(map[string]int)
ctx := jxcontext.AdminCtx
task := tasksch.NewParallelTask("美团外卖平台处理隐私号降级通知", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
step := batchItemList[0].(int)
switch step {
case 0:
if userNumberList, err = p.GetOrderConsigneeNumber(ctx, 0, ""); err == nil {
for _, v := range userNumberList {
userNumberMap[v.VendorOrderID] = v
orderMap[v.VendorOrderID] = 1
}
}
case 1:
if courierNumberList, err = p.GetOrderCourierNumber(ctx, 0, ""); err == nil {
for _, v := range courierNumberList {
courierNumberMap[v.VendorOrderID] = v
orderMap[v.VendorOrderID] = 1
}
}
case 2:
orderList := jxutils.StringMap2List(orderMap)
if len(orderList) > 0 {
updateTask := tasksch.NewParallelTask("美团外卖平台处理隐私号降级通知/处理订单", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
vendorOrderID := batchItemList[0].(string)
db := dao.GetDB()
if userNumberMap[vendorOrderID] != nil {
_, err = dao.UpdateEntityByKV(db, &model.GoodsOrder{}, map[string]interface{}{
"ConsigneeMobile": userNumberMap[vendorOrderID].PhoneNumber,
"ConsigneeMobile2": userNumberMap[vendorOrderID].PhoneNumber,
}, map[string]interface{}{
model.FieldVendorOrderID: vendorOrderID,
model.FieldVendorID: model.VendorIDMTWM,
})
}
if courierNumberMap[vendorOrderID] != nil {
_, err = dao.UpdateEntityByKV(db, &model.Waybill{}, map[string]interface{}{
"CourierMobile": courierNumberMap[vendorOrderID].PhoneNumber,
}, map[string]interface{}{
"VendorWaybillID": vendorOrderID,
"WaybillVendorID": model.VendorIDMTWM,
})
}
return retVal, err
}, orderList)
tasksch.HandleTask(updateTask, task, true).Run()
_, err = updateTask.GetResult(0)
}
}
return retVal, err
}, []int{0, 1, 2})
tasksch.HandleTask(task, nil, true).Run()
return response
}

View File

@@ -42,7 +42,7 @@ func (c *PurchaseHandler) onWaybillMsg(msg *mtwmapi.CallbackMsg) (response *mtwm
msg.FormData.Set(mtwmapi.KeyOrderID, waybill.VendorOrderID) msg.FormData.Set(mtwmapi.KeyOrderID, waybill.VendorOrderID)
msg.FormData.Set("status", mtwmapi.OrderStatusDelivering) msg.FormData.Set("status", mtwmapi.OrderStatusDelivering)
utils.CallFuncAsync(func() { utils.CallFuncAsync(func() {
OnOrderCallbackMsg(msg) c.onOrderMsg(msg)
}) })
} }
return mtwmapi.Err2CallbackResponse(err, "") return mtwmapi.Err2CallbackResponse(err, "")

View File

@@ -15,7 +15,7 @@ func (c *MtwmController) onCallbackMsg(msgType string) {
c.Data["json"] = mtwmapi.Err2CallbackResponse(nil, "") c.Data["json"] = mtwmapi.Err2CallbackResponse(nil, "")
msg, callbackResponse := api.MtwmAPI.GetCallbackMsg(c.Ctx.Request) msg, callbackResponse := api.MtwmAPI.GetCallbackMsg(c.Ctx.Request)
if callbackResponse == nil { if callbackResponse == nil {
callbackResponse = mtwm.OnOrderCallbackMsg(msg) callbackResponse = mtwm.OnCallbackMsg(msg)
if callbackResponse == nil { if callbackResponse == nil {
callbackResponse = mtwmapi.Err2CallbackResponse(nil, "") callbackResponse = mtwmapi.Err2CallbackResponse(nil, "")
} }

View File

@@ -1,16 +1,12 @@
package controllers package controllers
import ( import (
"git.rosy.net.cn/baseapi/platformapi/ebaiapi" "git.rosy.net.cn/baseapi/platformapi/mtwmapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxstore/cms" "git.rosy.net.cn/jx-callback/business/jxstore/cms"
"git.rosy.net.cn/jx-callback/business/jxstore/misc" "git.rosy.net.cn/jx-callback/business/jxstore/misc"
"git.rosy.net.cn/jx-callback/business/jxstore/tempop" "git.rosy.net.cn/jx-callback/business/jxstore/tempop"
"git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/globals/api"
"github.com/astaxie/beego" "github.com/astaxie/beego"
) )
@@ -247,29 +243,32 @@ func (c *TempOpController) RefreshMtpsWaybillFee() {
// @router /TestIt [get] // @router /TestIt [get]
func (c *TempOpController) TestIt() { func (c *TempOpController) TestIt() {
c.callTestIt(func(params *tTempopTestItParams) (retVal interface{}, errCode string, err error) { c.callTestIt(func(params *tTempopTestItParams) (retVal interface{}, errCode string, err error) {
// retVal, err = cms.OpenRemoteStoreByJxStatus(params.Ctx, nil, nil, false, true, true) // // retVal, err = cms.OpenRemoteStoreByJxStatus(params.Ctx, nil, nil, false, true, true)
// shopList, err := api.EbaiAPI.ShopList(ebaiapi.SysStatusAll) // // shopList, err := api.EbaiAPI.ShopList(ebaiapi.SysStatusAll)
shopList, err := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDEBAI}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") // shopList, err := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDEBAI}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "")
task := tasksch.NewParallelTask("TestIt", nil, params.Ctx, // task := tasksch.NewParallelTask("TestIt", nil, params.Ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { // func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
// shopID := batchItemList[0].(*ebaiapi.ShopInfo).ShopID // // shopID := batchItemList[0].(*ebaiapi.ShopInfo).ShopID
shopID := utils.Int2Str(batchItemList[0].(*model.StoreMap).StoreID) // shopID := utils.Int2Str(batchItemList[0].(*model.StoreMap).StoreID)
skuInfo, err := api.EbaiAPI.SkuList(shopID, &ebaiapi.SkuListParams{}) // skuInfo, err := api.EbaiAPI.SkuList(shopID, &ebaiapi.SkuListParams{})
if err == nil && skuInfo.Total > 500 { // if err == nil && skuInfo.Total > 500 {
errSkuCount := 0 // errSkuCount := 0
for _, sku := range skuInfo.List { // for _, sku := range skuInfo.List {
if sku.CustomCatIDs == "" { // if sku.CustomCatIDs == "" {
errSkuCount++ // errSkuCount++
} // }
} // }
if errSkuCount > len(skuInfo.List)/3 { // if errSkuCount > len(skuInfo.List)/3 {
retVal = []string{shopID} // retVal = []string{shopID}
} // }
} // }
return retVal, err // return retVal, err
}, shopList) // }, shopList)
task.Run() // task.Run()
retVal, err = task.GetResult(0) // retVal, err = task.GetResult(0)
mtwm.OnCallbackMsg(&mtwmapi.CallbackMsg{
Cmd: mtwmapi.MsgTypePrivateNumberDowngrade,
})
return retVal, "", err return retVal, "", err
}) })
} }