diff --git a/business/partner/partner_order.go b/business/partner/partner_order.go index dae76ee03..99d290b67 100644 --- a/business/partner/partner_order.go +++ b/business/partner/partner_order.go @@ -5,6 +5,11 @@ import ( "git.rosy.net.cn/jx-callback/business/model" ) +type OrderPhoneNumberInfo struct { + VendorOrderID string + PhoneNumber string +} + type IPurchasePlatformOrderHandler interface { Map2Order(orderData map[string]interface{}) (order *model.GoodsOrder) GetOrder(vendorOrderID string) (order *model.GoodsOrder, err error) diff --git a/business/partner/purchase/mtwm/callback.go b/business/partner/purchase/mtwm/callback.go index 19e6f8021..75fe0da21 100644 --- a/business/partner/purchase/mtwm/callback.go +++ b/business/partner/purchase/mtwm/callback.go @@ -6,24 +6,28 @@ import ( "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 orderID := GetOrderIDFromMsg(msg); orderID != "" { - jxutils.CallMsgHandler(func() { - switch msg.Cmd { - case mtwmapi.MsgTypeWaybillStatus: - response = curPurchaseHandler.onWaybillMsg(msg) - default: - response = curPurchaseHandler.onOrderMsg(msg) - } - }, jxutils.ComposeUniversalOrderID(orderID, model.VendorIDMTWM)) - } - /*if msg.Cmd == mtwmapi.MsgTypeOrderRefund || msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund { - utils.CallFuncAsync(func() { - OnFinancialMsg(msg) - }) - } else */if msg.Cmd == mtwmapi.MsgTypeStoreStatusChanged { + 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 != "" { + jxutils.CallMsgHandler(func() { + switch msg.Cmd { + case mtwmapi.MsgTypeWaybillStatus: + response = curPurchaseHandler.onWaybillMsg(msg) + default: + response = curPurchaseHandler.onOrderMsg(msg) + } + }, jxutils.ComposeUniversalOrderID(orderID, model.VendorIDMTWM)) + } + /*if msg.Cmd == mtwmapi.MsgTypeOrderRefund || msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund { + utils.CallFuncAsync(func() { + OnFinancialMsg(msg) + }) + } */ } } return response diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 4cd9e256b..6e3836871 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -15,6 +15,7 @@ import ( "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/model" + "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals" "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("utime", timeStr) utils.CallFuncAsync(func() { - OnOrderCallbackMsg(msg) + c.onOrderMsg(msg) }) } @@ -582,3 +583,111 @@ func (c *PurchaseHandler) ListOrders(ctx *jxcontext.Context, parentTask tasksch. // } // 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 +} diff --git a/business/partner/purchase/mtwm/waybill.go b/business/partner/purchase/mtwm/waybill.go index 39fa708cd..be3b39f66 100644 --- a/business/partner/purchase/mtwm/waybill.go +++ b/business/partner/purchase/mtwm/waybill.go @@ -42,7 +42,7 @@ func (c *PurchaseHandler) onWaybillMsg(msg *mtwmapi.CallbackMsg) (response *mtwm msg.FormData.Set(mtwmapi.KeyOrderID, waybill.VendorOrderID) msg.FormData.Set("status", mtwmapi.OrderStatusDelivering) utils.CallFuncAsync(func() { - OnOrderCallbackMsg(msg) + c.onOrderMsg(msg) }) } return mtwmapi.Err2CallbackResponse(err, "") diff --git a/controllers/mtwm_callback.go b/controllers/mtwm_callback.go index 57aad950d..4bd0b4683 100644 --- a/controllers/mtwm_callback.go +++ b/controllers/mtwm_callback.go @@ -15,7 +15,7 @@ func (c *MtwmController) onCallbackMsg(msgType string) { c.Data["json"] = mtwmapi.Err2CallbackResponse(nil, "") msg, callbackResponse := api.MtwmAPI.GetCallbackMsg(c.Ctx.Request) if callbackResponse == nil { - callbackResponse = mtwm.OnOrderCallbackMsg(msg) + callbackResponse = mtwm.OnCallbackMsg(msg) if callbackResponse == nil { callbackResponse = mtwmapi.Err2CallbackResponse(nil, "") } diff --git a/controllers/temp_op.go b/controllers/temp_op.go index 8403e5c19..ca73868e1 100644 --- a/controllers/temp_op.go +++ b/controllers/temp_op.go @@ -1,16 +1,12 @@ package controllers import ( - "git.rosy.net.cn/baseapi/platformapi/ebaiapi" - "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/baseapi/platformapi/mtwmapi" "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/tempop" "git.rosy.net.cn/jx-callback/business/jxutils" - "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/dao" - "git.rosy.net.cn/jx-callback/globals/api" + "git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm" "github.com/astaxie/beego" ) @@ -247,29 +243,32 @@ func (c *TempOpController) RefreshMtpsWaybillFee() { // @router /TestIt [get] func (c *TempOpController) TestIt() { c.callTestIt(func(params *tTempopTestItParams) (retVal interface{}, errCode string, err error) { - // retVal, err = cms.OpenRemoteStoreByJxStatus(params.Ctx, nil, nil, false, true, true) - // shopList, err := api.EbaiAPI.ShopList(ebaiapi.SysStatusAll) - shopList, err := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDEBAI}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") - task := tasksch.NewParallelTask("TestIt", nil, params.Ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - // shopID := batchItemList[0].(*ebaiapi.ShopInfo).ShopID - shopID := utils.Int2Str(batchItemList[0].(*model.StoreMap).StoreID) - skuInfo, err := api.EbaiAPI.SkuList(shopID, &ebaiapi.SkuListParams{}) - if err == nil && skuInfo.Total > 500 { - errSkuCount := 0 - for _, sku := range skuInfo.List { - if sku.CustomCatIDs == "" { - errSkuCount++ - } - } - if errSkuCount > len(skuInfo.List)/3 { - retVal = []string{shopID} - } - } - return retVal, err - }, shopList) - task.Run() - retVal, err = task.GetResult(0) + // // retVal, err = cms.OpenRemoteStoreByJxStatus(params.Ctx, nil, nil, false, true, true) + // // shopList, err := api.EbaiAPI.ShopList(ebaiapi.SysStatusAll) + // shopList, err := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDEBAI}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + // task := tasksch.NewParallelTask("TestIt", nil, params.Ctx, + // func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + // // shopID := batchItemList[0].(*ebaiapi.ShopInfo).ShopID + // shopID := utils.Int2Str(batchItemList[0].(*model.StoreMap).StoreID) + // skuInfo, err := api.EbaiAPI.SkuList(shopID, &ebaiapi.SkuListParams{}) + // if err == nil && skuInfo.Total > 500 { + // errSkuCount := 0 + // for _, sku := range skuInfo.List { + // if sku.CustomCatIDs == "" { + // errSkuCount++ + // } + // } + // if errSkuCount > len(skuInfo.List)/3 { + // retVal = []string{shopID} + // } + // } + // return retVal, err + // }, shopList) + // task.Run() + // retVal, err = task.GetResult(0) + mtwm.OnCallbackMsg(&mtwmapi.CallbackMsg{ + Cmd: mtwmapi.MsgTypePrivateNumberDowngrade, + }) return retVal, "", err }) }