同步错误

This commit is contained in:
苏尹岚
2019-12-30 08:47:42 +08:00
106 changed files with 4008 additions and 1412 deletions

View File

@@ -5,9 +5,11 @@ import (
"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/globals"
)
func OnCallbackMsg(msg *ebaiapi.CallbackMsg) (response *ebaiapi.CallbackResponse) {
globals.SugarLogger.Debugf("ebai OnCallbackMsg msg:%s", utils.Format4Output(msg, true))
if CurPurchaseHandler != nil {
if orderID := GetOrderIDFromMsg(msg); orderID != "" {
jxutils.CallMsgHandler(func() {

View File

@@ -28,8 +28,6 @@ const (
callDeliveryDelay = 10 * time.Minute
callDeliveryDelayGap = 30
fakeUserApplyCancel = "fake_user_apply_cancel"
fakeUserUndoApplyCancel = "fake_user_undo_apply_cancel"
fakeAcceptOrder = "fake_accept_order"
fakeOrderAdjustFinished = "fake_order_adjust_finished"
fakeOrderCanceled = "fake_order_canceled"
@@ -49,8 +47,6 @@ var (
ebaiapi.OrderStatusCanceled: model.OrderStatusCanceled,
fakeOrderAdjustFinished: model.OrderStatusAdjust,
fakeUserApplyCancel: model.OrderStatusApplyCancel,
fakeUserUndoApplyCancel: model.OrderStatusUndoApplyCancel,
fakeOrderCanceled: model.OrderStatusCanceled,
}
@@ -83,6 +79,14 @@ func (p *PurchaseHandler) GetOrder(vendorOrgCode, vendorOrderID string) (order *
return order, err
}
func (p *PurchaseHandler) GetOrderStatus(vendorOrgCode, vendorOrderID string) (status int, err error) {
status, err = api.EbaiAPI.OrderStatusGet(vendorOrderID)
if err == nil {
status = p.getStatusFromVendorStatus(utils.Int2Str(status))
}
return status, err
}
func (p *PurchaseHandler) getOrder(vendorOrderID string) (order *model.GoodsOrder, orderMap map[string]interface{}, err error) {
result, err := api.EbaiAPI.OrderGet(vendorOrderID)
if err == nil {
@@ -202,6 +206,7 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo
OrderCreatedAt: getTimeFromInterface(orderMap["create_time"]),
OriginalData: string(utils.MustMarshal(result)),
ActualPayPrice: utils.ForceInterface2Int64(orderMap["user_fee"]),
BaseFreightMoney: utils.ForceInterface2Int64(orderMap["send_fee"]),
TotalShopMoney: utils.ForceInterface2Int64(orderMap["shop_fee"]),
DeliveryType: mapDeliveryType(int(utils.ForceInterface2Int64(orderMap["delivery_party"]))),
@@ -404,7 +409,7 @@ func (p *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName
//
func (c *PurchaseHandler) onOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiapi.CallbackResponse) {
if c.isAfsMsg(msg) {
retVal = c.OnAfsOrderMsg(msg)
retVal = c.onAfsOrderMsg(msg)
} else {
status := c.callbackMsg2Status(msg)
if partner.CurOrderManager.GetStatusDuplicatedCount(status) > 0 {
@@ -424,7 +429,7 @@ func (c *PurchaseHandler) onOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaiapi.
// 处理饿百降级订单的情况
// 是否降级;1:是,0:否;极少数订单因网络或信息交互异常,导致订单部分字段(如订单金额)生成延迟,此时订单会被标记为“已降级”状态,需开发者重新调用查看订单详情接口获取完整订单数据。
// toto sku是否也需要处理
if status.Status == model.OrderStatusFinished {
if status.Status == model.OrderStatusDelivering || status.Status == model.OrderStatusFinished {
if order, err2 := partner.CurOrderManager.LoadOrder(status.VendorOrderID, status.VendorID); err2 == nil {
if order.TotalShopMoney == 0 {
if order2, err2 := c.GetOrder(msg.Source, status.VendorOrderID); err2 == nil {
@@ -478,11 +483,15 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *ebaiapi.CallbackMsg) (orderSta
if cancelType == ebaiapi.OrderUserCancelTypeBeforeSale {
if msgType == ebaiapi.OrderUserCancelApply ||
msgType == ebaiapi.OrderUserCancelCSIntervene {
orderStatus.VendorStatus = fakeUserApplyCancel
} else if msgType == ebaiapi.OrderUserCancelInvalid ||
msgType == ebaiapi.OrderUserCancelMerchantRefused ||
msgType == ebaiapi.OrderUserCancelCSRefused {
orderStatus.VendorStatus = fakeUserUndoApplyCancel
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 {
@@ -500,7 +509,9 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *ebaiapi.CallbackMsg) (orderSta
}
orderStatus.Remark = utils.Interface2String(msg.Body["reason"])
}
orderStatus.Status = c.getStatusFromVendorStatus(orderStatus.VendorStatus)
if orderStatus.Status == 0 {
orderStatus.Status = c.getStatusFromVendorStatus(orderStatus.VendorStatus)
}
return orderStatus
}
@@ -649,3 +660,20 @@ func (c *PurchaseHandler) ListOrders(ctx *jxcontext.Context, vendorOrgCode strin
}
return vendorOrderIDs, err
}
func (c *PurchaseHandler) GetWaybillTip(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID, vendorOrderID, vendorWaybillID, vendorWaybillID2 string) (tipFee int64, err error) {
orderInfo, err := api.EbaiAPI.GetStoreOrderInfo(vendorOrderID)
if err == nil {
if orderBasic, _ := orderInfo["order_basic"].(map[string]interface{}); orderBasic != nil {
tipFee = jxutils.StandardPrice2Int(utils.Interface2Float64WithDefault(orderBasic["delivery_tip_amount"], 0))
}
}
return tipFee, err
}
func (c *PurchaseHandler) UpdateWaybillTip(ctx *jxcontext.Context, vendorOrgCode, vendorStoreID, vendorOrderID, vendorWaybillID, vendorWaybillID2, cityCode string, tipFee int64) (err error) {
if globals.EnableEbaiStoreWrite {
err = api.EbaiAPI.ModifyTip4OrderWaybill(vendorOrderID, "", jxutils.IntPrice2Standard(tipFee), 0)
}
return err
}

View File

@@ -102,7 +102,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia
afsOrder.Skus = append(afsOrder.Skus, orderSku)
}
} else if msg.Cmd == ebaiapi.CmdOrderUserCancel {
if afsOrder := c.createAfsOrder(msg); afsOrder != nil {
if afsOrder = c.createAfsOrder(msg); afsOrder != nil {
// if orderFinancial, err2 := partner.CurOrderManager.LoadOrderFinancial(orderStatus.RefVendorOrderID, model.VendorIDEBAI); err2 == nil {
// afsOrder = c.OrderFinancialDetail2Refund(orderFinancial, msg)
cancelData := msg.Data.(*ebaiapi.CBUserCancelInfo)

View File

@@ -30,9 +30,10 @@ type tEbaiStoreInfo struct {
EbaiStoreStatus int
SyncStatus int
ProvinceID int `orm:"column(province_id)"`
CityID int `orm:"column(city_id)"`
DistrictID int `orm:"column(district_id)"`
ProvinceID int `orm:"column(province_id)"`
CityID int `orm:"column(city_id)"`
DistrictID int `orm:"column(district_id)"`
VendorStoreName string
}
func (p *PurchaseHandler) CreateStore(db *dao.DaoDB, storeID int, userName string) (vendorStoreID string, err error) {
@@ -156,7 +157,7 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
SELECT
t1.*,
t2.status ebai_store_status, t2.vendor_store_id, t2.vendor_org_code,
IF(t1.updated_at > t2.updated_at, t1.last_operator, t2.last_operator) real_last_operator, t2.sync_status
IF(t1.updated_at > t2.updated_at, t1.last_operator, t2.last_operator) real_last_operator, t2.sync_status, t2.vendor_store_name
FROM store t1
JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND (t2.deleted_at = ?)
WHERE t1.id = ?
@@ -193,6 +194,9 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
}
params := genStoreMapFromStore(store)
if err = api.EbaiAPI.ShopUpdate(params); err == nil {
if store.PromoteInfo != "" {
err = api.EbaiAPI.ShopAnnouncementSet("", utils.Str2Int64(store.VendorStoreID), store.PromoteInfo)
}
}
}
}
@@ -389,8 +393,12 @@ func genStoreMapFromStore(store *tEbaiStoreInfo) map[string]interface{} {
if store.VendorStoreID != "" {
params["baidu_shop_id"] = store.VendorStoreID
}
if store.SyncStatus&(model.SyncFlagNewMask /*|model.SyncFlagStoreName*/) != 0 {
params["name"] = jxutils.ComposeStoreName(store.Name, model.VendorIDEBAI)
if store.SyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreName) != 0 {
if store.VendorStoreName != "" {
params["name"] = store.VendorStoreName
} else {
params["name"] = jxutils.ComposeStoreName(store.Name, model.VendorIDEBAI)
}
}
params["address"] = store.Address
// todo 饿百 开店审核通过后不允许修改商户信息

View File

@@ -113,7 +113,7 @@ func (p *PurchaseHandler) IsErrSkuNotExist(err error) (isNotExist bool) {
return ebaiapi.IsErrSkuNotExist(err)
}
func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
func (p *PurchaseHandler) updateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo, isNeedMapCat bool) (failedList []*partner.StoreSkuInfoWithErr, err error) {
storeSku := storeSkuList[0]
strStoreID := utils.Int2Str(storeID)
params := genSkuParamsFromStoreSkuInfo2(storeSku, false)
@@ -122,13 +122,19 @@ func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, v
if err != nil {
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品基础信息")
}
utils.CallFuncAsync(func() {
api.EbaiAPI.SkuShopCategoryMap(strStoreID, utils.Str2Int64(storeSku.VendorSkuID), "", utils.Str2Int64(storeSku.VendorCatID), genSkuCatRank(storeSku))
})
if isNeedMapCat {
utils.CallFuncAsync(func() {
api.EbaiAPI.SkuShopCategoryMap(strStoreID, utils.Str2Int64(storeSku.VendorSkuID), "", utils.Str2Int64(storeSku.VendorCatID), genSkuCatRank(storeSku))
})
}
}
return failedList, err
}
func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
return p.updateStoreSkus(ctx, storeID, vendorStoreID, storeSkuList, true)
}
// 对于多门店平台来说storeSkuList中只有SkuID与VendorSkuID有意义
func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
storeSku := storeSkuList[0]
@@ -139,6 +145,9 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v
if vendorSkuID, err = api.EbaiAPI.SkuCreate(ctx.GetTrackInfo(), strStoreID, storeSku.SkuID, params); err == nil {
utils.AfterFuncWithRecover(5*time.Second, func() {
api.EbaiAPI.SkuShopCategoryMap(strStoreID, vendorSkuID, "", utils.Str2Int64(storeSku.VendorCatID), genSkuCatRank(storeSku))
// 饿百平台有BUG会导致新建一个之前删除的商品时信息不会及时更新强制刷新一下
// 比如门店100887, skuID33805订单1577176719141226065
p.updateStoreSkus(ctx, storeID, vendorStoreID, storeSkuList, false)
})
} else {
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "创建商品")
@@ -321,7 +330,7 @@ func jxCatSeq2Ebai(seq int) int {
}
func formatCatName(name string) string {
return name
return utils.LimitUTF8StringLen(name, ebaiapi.MaxCategoryNameLen)
}
func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (skuNameList []*partner.SkuNameInfo, err error) {