- mtwm callback
This commit is contained in:
@@ -76,6 +76,8 @@ func SplitUniversalOrderID(universalOrderID string) (orderID string, vendorID in
|
||||
vendorID = model.VendorIDELM
|
||||
} else if orderIDLen == len("15380342248732") {
|
||||
vendorID = model.VendorIDEBAI
|
||||
} else if orderIDLen == len("33437032333978492") {
|
||||
vendorID = model.VendorIDMTWM
|
||||
} else {
|
||||
// globals.SugarLogger.Errorf("unkown order type:%v", universalOrderID)
|
||||
panic(fmt.Sprintf("unkown order type:%v, orderIDLen:%d", universalOrderID, orderIDLen))
|
||||
|
||||
@@ -70,6 +70,13 @@ var (
|
||||
OrderTypeOrder: "订单",
|
||||
OrderTypeWaybill: "运单",
|
||||
}
|
||||
|
||||
MultiStoresVendorMap = map[int]int{
|
||||
VendorIDJD: 1,
|
||||
VendorIDMTWM: 0,
|
||||
VendorIDELM: 0,
|
||||
VendorIDEBAI: 0,
|
||||
}
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@@ -109,8 +109,12 @@ type StoreSkuSyncInfo struct {
|
||||
}
|
||||
|
||||
func GetStoreSkus(db *DaoDB, vendorID, storeID int, skuIDs []int) (skus []*StoreSkuSyncInfo, err error) {
|
||||
tableName := "t1"
|
||||
if model.MultiStoresVendorMap[vendorID] == 1 { // 多店模式平台
|
||||
tableName = "t2"
|
||||
}
|
||||
sql := `
|
||||
SELECT t1.id bind_id, t1.price, t1.unit_price, t1.status store_sku_status, t1.%s_id, t1.%s_sync_status sku_sync_status,
|
||||
SELECT t1.id bind_id, t1.price, t1.unit_price, t1.status store_sku_status, %s.%s_id, t1.%s_sync_status sku_sync_status,
|
||||
t2.*,
|
||||
t3.prefix, t3.name, t3.unit, t3.img,
|
||||
t4.%s_category_id vendor_vendor_cat_id,
|
||||
@@ -134,7 +138,7 @@ func GetStoreSkus(db *DaoDB, vendorID, storeID int, skuIDs []int) (skus []*Store
|
||||
sqlParams = append(sqlParams, skuIDs)
|
||||
}
|
||||
filedPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
|
||||
sql = fmt.Sprintf(sql, filedPrefix, filedPrefix, filedPrefix, filedPrefix, filedPrefix, filedPrefix, filedPrefix, filedPrefix)
|
||||
sql = fmt.Sprintf(sql, tableName, filedPrefix, filedPrefix, filedPrefix, filedPrefix, filedPrefix, filedPrefix, filedPrefix, filedPrefix)
|
||||
// globals.SugarLogger.Debug(sql)
|
||||
if err = GetRows(db, &skus, sql, sqlParams...); err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -44,7 +44,6 @@ type StoreSkuBind struct {
|
||||
|
||||
ElmID int64 `orm:"column(elm_id);index"`
|
||||
EbaiID int64 `orm:"column(ebai_id);index"`
|
||||
JdID int64 `orm:"column(jd_id)"` // 无实际使用,只是为了DAO取数据语句一致
|
||||
MtwmID int64 `orm:"column(mtwm_id)"` // 这个也不是必须的,只是为了DAO取数据语句一致
|
||||
|
||||
JdSyncStatus int8
|
||||
|
||||
@@ -203,6 +203,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
|
||||
err = api.EbaiAPI.SkuDelete(strStoreID, utils.Int64ToStr(storeSku.EbaiID))
|
||||
} else if storeSku.EbaiSyncStatus&model.SyncFlagNewMask != 0 {
|
||||
// globals.SugarLogger.Debug(utils.Format4Output(genSkuParamsFromStoreSkuInfo(storeSku), false))
|
||||
// todo 适当处理重复(即已经创建)的情况
|
||||
if storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil {
|
||||
updateFields = append(updateFields, model.FieldEbaiID)
|
||||
isCreate = true
|
||||
|
||||
@@ -1 +1,24 @@
|
||||
package mtwm
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
)
|
||||
|
||||
func OnOrderCallbackMsg(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
|
||||
orderID := GetOrderIDFromMsg(msg)
|
||||
jxutils.CallMsgHandler(func() {
|
||||
switch msg.Cmd {
|
||||
case mtwmapi.MsgTypeWaybillStatus:
|
||||
response = curPurchaseHandler.onWaybillMsg(msg)
|
||||
default:
|
||||
response = curPurchaseHandler.onOrderMsg(msg)
|
||||
}
|
||||
}, jxutils.ComposeUniversalOrderID(orderID, model.VendorIDMTWM))
|
||||
return response
|
||||
}
|
||||
|
||||
func GetOrderIDFromMsg(msg *mtwmapi.CallbackMsg) string {
|
||||
return msg.Data.Get("order_id")
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package mtwm
|
||||
|
||||
import (
|
||||
"math"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
"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/api"
|
||||
)
|
||||
|
||||
@@ -41,7 +41,7 @@ func (p *PurchaseHandler) GetOrder(vendorOrderID string) (order *model.GoodsOrde
|
||||
VendorOrderID2: utils.Int64ToStr(utils.MustInterface2Int64(result["wm_order_id_view"])),
|
||||
VendorID: model.VendorIDMTWM,
|
||||
VendorStoreID: result["app_poi_code"].(string),
|
||||
StoreID: int(utils.Interface2Int64WithDefault(result["app_poi_code"].(string), 0)),
|
||||
StoreID: int(utils.Str2Int64(result["app_poi_code"].(string))),
|
||||
StoreName: result["wm_poi_name"].(string),
|
||||
ConsigneeName: result["recipient_name"].(string),
|
||||
ConsigneeMobile: result["recipient_phone"].(string),
|
||||
@@ -56,9 +56,6 @@ func (p *PurchaseHandler) GetOrder(vendorOrderID string) (order *model.GoodsOrde
|
||||
ActualPayPrice: jxutils.StandardPrice2Int(utils.MustInterface2Float64(result["total"])),
|
||||
Skus: []*model.OrderSku{},
|
||||
}
|
||||
if order.StoreID > math.MaxInt32 {
|
||||
order.StoreID = 0
|
||||
}
|
||||
order.Status = p.GetStatusFromVendorStatus(order.VendorStatus)
|
||||
if deliveryTime == 0 {
|
||||
order.BusinessType = model.BusinessTypeImmediate
|
||||
@@ -71,9 +68,13 @@ func (p *PurchaseHandler) GetOrder(vendorOrderID string) (order *model.GoodsOrde
|
||||
order.ConsigneeLng = jxutils.StandardCoordinate2Int(originalLng)
|
||||
order.ConsigneeLat = jxutils.StandardCoordinate2Int(originalLat)
|
||||
|
||||
detail := result["detail"].([]interface{})
|
||||
for _, product2 := range detail {
|
||||
product := product2.(map[string]interface{})
|
||||
var detail []map[string]interface{}
|
||||
if err := utils.UnmarshalUseNumber([]byte(result["detail"].(string)), &detail); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// detail := result["detail"].([]interface{})
|
||||
for _, product := range detail {
|
||||
// product := product2.(map[string]interface{})
|
||||
skuName := product["food_name"].(string)
|
||||
_, _, _, specUnit, _, specQuality := jxutils.SplitSkuName(skuName)
|
||||
skuID := utils.Interface2String(product["sku_id"])
|
||||
@@ -105,6 +106,42 @@ func (p *PurchaseHandler) GetOrder(vendorOrderID string) (order *model.GoodsOrde
|
||||
return order, err
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) onOrderMsg(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
|
||||
var err error
|
||||
if msg.Cmd == mtwmapi.MsgTypeNewOrder || msg.Cmd == mtwmapi.MsgTypeOrderModified {
|
||||
order, err2 := c.GetOrder(GetOrderIDFromMsg(msg))
|
||||
if err = err2; err == nil {
|
||||
if msg.Cmd == mtwmapi.MsgTypeNewOrder {
|
||||
err = partner.CurOrderManager.OnOrderNew(order, order.VendorStatus)
|
||||
} else {
|
||||
err = partner.CurOrderManager.OnOrderAdjust(order, order.VendorStatus)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// todo 好像没有“商家已收到”消息回调,是否需要模拟?
|
||||
status := c.callbackMsg2Status(msg)
|
||||
err = partner.CurOrderManager.OnOrderStatusChanged(status)
|
||||
}
|
||||
return mtwmapi.Err2CallbackResponse(err, "")
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) *model.OrderStatus {
|
||||
orderID := GetOrderIDFromMsg(msg)
|
||||
vendorStatus := msg.Data.Get("status")
|
||||
orderStatus := &model.OrderStatus{
|
||||
VendorOrderID: orderID,
|
||||
VendorID: model.VendorIDMTWM,
|
||||
OrderType: model.OrderTypeOrder,
|
||||
RefVendorOrderID: orderID,
|
||||
RefVendorID: model.VendorIDMTWM,
|
||||
VendorStatus: vendorStatus,
|
||||
Status: c.GetStatusFromVendorStatus(vendorStatus),
|
||||
StatusTime: getTimeFromTimestamp(utils.Str2Int64(msg.Data.Get("utime"))),
|
||||
Remark: "",
|
||||
}
|
||||
return orderStatus
|
||||
}
|
||||
|
||||
func getTimeFromTimestamp(timeStamp int64) time.Time {
|
||||
if timeStamp < 1538103149 { // 立即达订单给的是1(而不是空,0),1538103149不是特殊值,只是一个任意之前的时间,这样写可以处理
|
||||
return utils.DefaultTimeValue
|
||||
|
||||
16
business/partner/purchase/mtwm/order_test.go
Normal file
16
business/partner/purchase/mtwm/order_test.go
Normal file
@@ -0,0 +1,16 @@
|
||||
package mtwm
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
_ "git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
|
||||
)
|
||||
|
||||
func TestGetOrder(t *testing.T) {
|
||||
result, err := new(PurchaseHandler).GetOrder("33437032333978492")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(utils.Format4Output(result, false))
|
||||
}
|
||||
47
business/partner/purchase/mtwm/waybill.go
Normal file
47
business/partner/purchase/mtwm/waybill.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package mtwm
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/partner"
|
||||
)
|
||||
|
||||
var (
|
||||
VendorWaybillStatus2StatusMap = map[string]int{
|
||||
mtwmapi.WaybillStatusWait4Delivery: model.WaybillStatusNew,
|
||||
mtwmapi.WaybillStatusAccepted: model.WaybillStatusAccepted,
|
||||
mtwmapi.WaybillStatusCourierArrived: model.WaybillStatusCourierArrived,
|
||||
mtwmapi.WaybillStatusPickedup: model.WaybillStatusDelivering,
|
||||
mtwmapi.WaybillStatusDelivered: model.WaybillStatusDelivered,
|
||||
mtwmapi.WaybillStatusCanceled: model.WaybillStatusCanceled,
|
||||
}
|
||||
)
|
||||
|
||||
func (p *PurchaseHandler) GetWaybillStatusFromVendorStatus(vendorStatus string) int {
|
||||
if status, ok := VendorWaybillStatus2StatusMap[vendorStatus]; ok {
|
||||
return status
|
||||
}
|
||||
return model.WaybillStatusUnknown
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) onWaybillMsg(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
|
||||
waybill := c.callbackMsg2Waybill(msg)
|
||||
return mtwmapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(waybill), "")
|
||||
}
|
||||
|
||||
func (c *PurchaseHandler) callbackMsg2Waybill(msg *mtwmapi.CallbackMsg) (retVal *model.Waybill) {
|
||||
orderID := GetOrderIDFromMsg(msg)
|
||||
retVal = &model.Waybill{
|
||||
VendorOrderID: orderID,
|
||||
OrderVendorID: model.VendorIDMTWM,
|
||||
VendorWaybillID: orderID,
|
||||
WaybillVendorID: model.VendorIDMTWM,
|
||||
CourierName: msg.Data.Get("dispatcher_name"),
|
||||
CourierMobile: msg.Data.Get("dispatcher_mobile"),
|
||||
VendorStatus: msg.Data.Get("logistics_status"),
|
||||
StatusTime: getTimeFromTimestamp(utils.Str2Int64(msg.Data.Get("time"))),
|
||||
Remark: "",
|
||||
}
|
||||
return retVal
|
||||
}
|
||||
@@ -2,7 +2,7 @@ package controllers
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
_ "git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
"github.com/astaxie/beego"
|
||||
)
|
||||
|
||||
@@ -12,6 +12,12 @@ type MtwmController struct {
|
||||
|
||||
func (c *MtwmController) onCallbackMsg(msgType string) {
|
||||
c.Data["json"] = mtwmapi.Err2CallbackResponse(nil, "")
|
||||
_, callbackResponse := api.MtwmAPI.GetCallbackMsg(c.Ctx.Request)
|
||||
if callbackResponse == nil {
|
||||
// callbackResponse = mtwm.OnOrderCallbackMsg(msg)
|
||||
callbackResponse = mtwmapi.Err2CallbackResponse(nil, "")
|
||||
}
|
||||
c.Data["json"] = callbackResponse
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user