1
This commit is contained in:
@@ -966,7 +966,7 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
|
||||
canDeliveryVendor := make(map[int64]int, 0)
|
||||
canDeliveryKey := make([]int64, 0, 0)
|
||||
for k, v := range feeList {
|
||||
if excludeVendorIDsMap[k] != model.YES && v.DeliveryFee != model.NO {
|
||||
if excludeVendorIDsMap[k] != model.YES && v.DeliveryFee > model.NO && v.DeliveryFee <= 5000 { // 限制配送价格
|
||||
canDeliveryVendor[v.DeliveryFee] = k
|
||||
canDeliveryKey = append(canDeliveryKey, v.DeliveryFee)
|
||||
}
|
||||
@@ -996,37 +996,6 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf
|
||||
excludeVendorIDs = []int{model.VendorIDDada, model.VendorIDMTPS, model.VendorIDUUPT, model.VendorIDSFPS}
|
||||
vendorID = model.VendorIDFengNiao
|
||||
}
|
||||
//storeCourierList, err := dao.GetStoreCourierList2(dao.GetDB(), []int{jxutils.GetSaleStoreIDFromOrder(order)}, nil, model.StoreStatusOpened, []int{model.StoreAuditStatusOnline, model.StoreAuditStatusUpdated})
|
||||
//for _, v := range storeCourierList {
|
||||
// if excludeVendorIDsMap[v.VendorID] == model.YES {
|
||||
// continue
|
||||
// }
|
||||
// if v.VendorID == model.VendorIDDada {
|
||||
// excludeVendorIDs = []int{model.VendorIDFengNiao, model.VendorIDMTPS, model.VendorIDUUPT, model.VendorIDSFPS}
|
||||
// vendorID = v.VendorID
|
||||
// break
|
||||
// }
|
||||
// if v.VendorID == model.VendorIDFengNiao {
|
||||
// excludeVendorIDs = []int{model.VendorIDDada, model.VendorIDMTPS, model.VendorIDUUPT, model.VendorIDSFPS}
|
||||
// vendorID = v.VendorID
|
||||
// break
|
||||
// }
|
||||
// if v.VendorID == model.VendorIDMTPS {
|
||||
// excludeVendorIDs = []int{model.VendorIDDada, model.VendorIDFengNiao, model.VendorIDUUPT, model.VendorIDSFPS}
|
||||
// vendorID = v.VendorID
|
||||
// break
|
||||
// }
|
||||
// if v.VendorID == model.VendorIDUUPT {
|
||||
// excludeVendorIDs = []int{model.VendorIDDada, model.VendorIDMTPS, model.VendorIDFengNiao, model.VendorIDSFPS}
|
||||
// vendorID = v.VendorID
|
||||
// break
|
||||
// }
|
||||
// if v.VendorID == model.VendorIDSFPS {
|
||||
// excludeVendorIDs = []int{model.VendorIDDada, model.VendorIDMTPS, model.VendorIDUUPT, model.VendorIDFengNiao}
|
||||
// vendorID = v.VendorID
|
||||
// break
|
||||
// }
|
||||
//}
|
||||
|
||||
if vendorID != model.NO {
|
||||
if _, err = s.CreateWaybillOnProviders4SavedOrder(jxcontext.AdminCtx, savedOrderInfo, nil, excludeVendorIDs, false, maxDeliveryFee); err == nil {
|
||||
|
||||
@@ -215,20 +215,107 @@ func (v *VendorSync) SyncReorderCategories(ctx *jxcontext.Context, db *dao.DaoDB
|
||||
return SyncReorderCategories(ctx, categoryID, isAsync)
|
||||
}
|
||||
|
||||
// func (v *VendorSync) oldSyncReorderCategories(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) {
|
||||
// hint, err = v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("分类重排序:%d", categoryID), isAsync, false, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||
// vendorInfo := batchItemList[0].(*MultiStoreVendorInfo)
|
||||
// multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID)
|
||||
// err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName)
|
||||
// if err2 == nil {
|
||||
// cat := &model.SkuCategory{}
|
||||
// _, err2 = dao.UpdateEntityByKV(db, cat, utils.Params2Map(dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()]), 0), utils.Params2Map(model.FieldParentID, categoryID))
|
||||
// return nil, err2
|
||||
// }
|
||||
// return nil, err2
|
||||
// })
|
||||
// return "", err
|
||||
// }
|
||||
// SyncStore2Time 此方法只适用于定时任务同步门店
|
||||
func (v *VendorSync) SyncStore2Time(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs, storeIDs []int, mustDirty, isAsync bool) (hint string, err error) {
|
||||
userName := ctx.GetUserName()
|
||||
isManageIt := len(storeIDs) == 0 || len(storeIDs) > 5
|
||||
_, hint, err = v.LoopStoresMap2(ctx, nil, db, fmt.Sprintf("同步门店信息:%v", storeIDs), isAsync, isManageIt, vendorIDs, storeIDs, mustDirty, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (resultList interface{}, err error) {
|
||||
loopMapInfo := batchItemList[0].(*LoopStoreMapInfo)
|
||||
var failedList []*partner.StoreSkuInfoWithErr
|
||||
handler := v.GetStoreHandler(loopMapInfo.VendorID)
|
||||
if handler != nil {
|
||||
if len(loopMapInfo.StoreMapList) > 1 {
|
||||
loopStoreTask := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[loopMapInfo.VendorID]), tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
var resultList []interface{}
|
||||
var vendorStoreID string
|
||||
storeMap := batchItemList[0].(*model.StoreMap)
|
||||
db2 := db
|
||||
if len(loopMapInfo.StoreMapList) > 1 {
|
||||
db2 = dao.GetDB()
|
||||
}
|
||||
if storeMap.Status == model.StoreStatusDisabled {
|
||||
resultList = append(resultList, 1)
|
||||
} else if model.IsSyncStatusNew(storeMap.SyncStatus) {
|
||||
storeDetail, _ := dao.GetStoreDetail(db, storeMap.StoreID, storeMap.VendorID, storeMap.VendorOrgCode)
|
||||
if vendorStoreID, err = handler.CreateStore2(db2, storeMap.StoreID, userName, nil, storeDetail); err == nil {
|
||||
resultList = append(resultList, 1)
|
||||
} else {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "创建门店")
|
||||
}
|
||||
} else if model.IsSyncStatusDelete(storeMap.SyncStatus) {
|
||||
if err = handler.DeleteStore(db2, storeMap.StoreID, userName); err == nil {
|
||||
resultList = append(resultList, 1)
|
||||
} else {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "删除门店")
|
||||
}
|
||||
} else {
|
||||
if err = handler.UpdateStore(db2, storeMap.StoreID, userName); err == nil {
|
||||
resultList = append(resultList, 1)
|
||||
} else {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "更新门店")
|
||||
}
|
||||
}
|
||||
if err == nil {
|
||||
if model.IsSyncStatusNew(storeMap.SyncStatus) {
|
||||
storeMap.VendorStoreID = vendorStoreID
|
||||
storeMap.SyncStatus = 0
|
||||
_, err = dao.UpdateEntity(db, storeMap, "VendorStoreID", model.FieldSyncStatus)
|
||||
} else {
|
||||
storeMap.SyncStatus = 0
|
||||
_, err = dao.UpdateEntity(db, storeMap, model.FieldSyncStatus)
|
||||
}
|
||||
}
|
||||
return resultList, err
|
||||
}, loopMapInfo.StoreMapList)
|
||||
t.AddChild(loopStoreTask).Run()
|
||||
resultList, err = loopStoreTask.GetResult(0)
|
||||
} else {
|
||||
var resultList []interface{}
|
||||
db2 := db
|
||||
var vendorStoreID string
|
||||
storeMap := loopMapInfo.StoreMapList[0]
|
||||
if model.IsSyncStatusNew(storeMap.SyncStatus) {
|
||||
storeDetail, _ := dao.GetStoreDetail(db, storeMap.StoreID, storeMap.VendorID, storeMap.VendorOrgCode)
|
||||
if vendorStoreID, err = handler.CreateStore2(db2, storeMap.StoreID, userName, nil, storeDetail); err == nil {
|
||||
resultList = append(resultList, 1)
|
||||
} else {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "创建门店")
|
||||
}
|
||||
} else if model.IsSyncStatusDelete(storeMap.SyncStatus) {
|
||||
if err = handler.DeleteStore(db2, storeMap.StoreID, userName); err == nil {
|
||||
resultList = append(resultList, 1)
|
||||
} else {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "删除门店")
|
||||
}
|
||||
} else {
|
||||
if err = handler.UpdateStore(db, storeMap.StoreID, userName); err == nil {
|
||||
resultList = append(resultList, 1)
|
||||
} else {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(nil, err, storeMap.StoreID, model.VendorChineseNames[storeMap.VendorID], "更新门店")
|
||||
}
|
||||
}
|
||||
if err == nil {
|
||||
resultList = []interface{}{1}
|
||||
if model.IsSyncStatusNew(storeMap.SyncStatus) {
|
||||
storeMap.VendorStoreID = vendorStoreID
|
||||
storeMap.SyncStatus = 0
|
||||
_, err = dao.UpdateEntity(db, storeMap, "VendorStoreID", model.FieldSyncStatus)
|
||||
} else {
|
||||
storeMap.SyncStatus = 0
|
||||
_, err = dao.UpdateEntity(db, storeMap, model.FieldSyncStatus)
|
||||
}
|
||||
}
|
||||
}
|
||||
err = partner.AddVendorInfo2Err(err, loopMapInfo.VendorID)
|
||||
}
|
||||
if len(failedList) > 0 {
|
||||
t.AddFailedList(failedList)
|
||||
}
|
||||
return resultList, err
|
||||
}, true)
|
||||
return hint, makeSyncError(err)
|
||||
}
|
||||
|
||||
func (v *VendorSync) SyncStore2(ctx *jxcontext.Context, db *dao.DaoDB, vendorIDs, storeIDs []int, mustDirty, isAsync bool) (hint string, err error) {
|
||||
userName := ctx.GetUserName()
|
||||
|
||||
@@ -424,7 +424,7 @@ func Init() {
|
||||
}, dailyWorkTimeList)
|
||||
ScheduleTimerFunc("doDailyWork3", func() {
|
||||
dao.SetStoresMapSyncStatus(dao.GetDB(), nil, nil, model.SyncFlagStoreStatus)
|
||||
cms.CurVendorSync.SyncStore2(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDMTWM, model.VendorIDJD, model.VendorIDEBAI, model.VendorIDDD}, nil, true, true)
|
||||
cms.CurVendorSync.SyncStore2Time(jxcontext.AdminCtx, dao.GetDB(), []int{model.VendorIDMTWM, model.VendorIDJD, model.VendorIDEBAI, model.VendorIDDD}, nil, true, true)
|
||||
|
||||
// 刷新门店平台商品
|
||||
syncStoreSku()
|
||||
|
||||
@@ -119,7 +119,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap
|
||||
case model.VendorIDDD:
|
||||
Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2)
|
||||
tiktokStatusPush(order, msg.OrderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), goodsOrder.VendorOrgCode)
|
||||
case model.VendorIDMTWM, model.VendorIDTaoVegetable:
|
||||
case model.VendorIDMTWM, model.VendorIDTaoVegetable, model.VendorIDEBAI:
|
||||
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||
if goodsOrder.VendorID == model.VendorIDTaoVegetable && msg.OrderStatus == dadaapi.OrderStatusAccepted {
|
||||
tao_vegetable.PushDelivererChangeInfo(goodsOrder, order, tao.TaoDeliveryTypeDD)
|
||||
|
||||
@@ -323,7 +323,7 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify, resultParam *fnpsapi.ShortSta
|
||||
case model.VendorIDDD:
|
||||
Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2)
|
||||
tiktokStatusPush(order, orderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), good.VendorOrgCode)
|
||||
case model.VendorIDMTWM, model.VendorIDTaoVegetable:
|
||||
case model.VendorIDMTWM, model.VendorIDTaoVegetable, model.VendorIDEBAI:
|
||||
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||
if good.VendorID == model.VendorIDTaoVegetable && cc.OrderStatus == fnpsapi.OrderStatusAssigned {
|
||||
tao_vegetable.PushDelivererChangeInfo(good, order, tao.TaoDeliveryTypeFN)
|
||||
|
||||
@@ -143,7 +143,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m
|
||||
case model.VendorIDDD:
|
||||
Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2)
|
||||
pushMTPSToTiktok(msg.Status, order, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), goodsOrder.VendorOrgCode)
|
||||
case model.VendorIDMTWM, model.VendorIDTaoVegetable:
|
||||
case model.VendorIDMTWM, model.VendorIDTaoVegetable, model.VendorIDEBAI:
|
||||
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||
if goodsOrder.VendorID == model.VendorIDTaoVegetable && msg.Status == mtpsapi.OrderStatusAccepted {
|
||||
tao_vegetable.PushDelivererChangeInfo(goodsOrder, order, tao.TaoDeliveryTypeMT)
|
||||
|
||||
@@ -19,6 +19,7 @@ import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
"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/partner/purchase/ebai"
|
||||
"git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
||||
@@ -97,12 +98,6 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
||||
//3.当同一个订单已经上传了一次配送信息,如再次同步会更新配送信息,以最新的一次为准。
|
||||
//4.如订单已完成、已取消等状态发货将失败。
|
||||
for _, v := range orders {
|
||||
//if orderId == "" { // 订单id为空是,是定时轮询操作,不做此状态
|
||||
// waybillList, _ := dao.GetWaybills(db, v.VendorOrderID, nil)
|
||||
// if len(waybillList) > 0 && waybillList[0].Status > model.WaybillStatusEndBegin {
|
||||
// continue
|
||||
// }
|
||||
//}
|
||||
if v.Status >= model.OrderStatusEndBegin {
|
||||
continue
|
||||
}
|
||||
@@ -176,7 +171,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
||||
default:
|
||||
continue
|
||||
}
|
||||
// 有时候运单状态改变之后但是上面的订单状态还没来得及改变,这里覆盖一下
|
||||
// 有时候运单状态改变之后但是上面的订单状态还没来得及改变,这里覆盖一下(riderInfo.LogisticsStatus 美团状态为准)
|
||||
if wayBillStatus != model.NO {
|
||||
switch wayBillStatus {
|
||||
case 5: // 呼叫骑手
|
||||
@@ -238,7 +233,17 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
||||
case model.VendorIDELM: // 饿了么
|
||||
continue
|
||||
case model.VendorIDEBAI: // 饿百发单
|
||||
continue
|
||||
if orderId == "" {
|
||||
if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil {
|
||||
if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorStoreID, utils.Struct2Map(riderInfo, "", true)); err != nil {
|
||||
globals.SugarLogger.Debugf("Error pushing ebai rider information :%s--%s--%v", v.VendorOrderID, utils.Format4Output(riderInfo, false), err)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if err := ebai.OrderStatussync(utils.Struct2Map(riderInfo, "", true)); err != nil {
|
||||
globals.SugarLogger.Debugf("Error pushing ebai OrderStatussync information :%s--%s--%v", v.VendorOrderID, utils.Format4Output(riderInfo, false), err)
|
||||
}
|
||||
}
|
||||
case model.VendorIDJD: // 京东发单
|
||||
continue
|
||||
case model.VendorIDGD: // 美团发单
|
||||
|
||||
@@ -460,7 +460,7 @@ func OnWaybillMsg(urlIndex string, msg interface{}) (resp *sfps2.CallbackRespons
|
||||
case model.VendorIDDD:
|
||||
Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2)
|
||||
tiktokStatusPush(order, orderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), goodsOrder.VendorOrgCode)
|
||||
case model.VendorIDTaoVegetable, model.VendorIDMTWM:
|
||||
case model.VendorIDTaoVegetable, model.VendorIDMTWM, model.VendorIDEBAI:
|
||||
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||
if goodsOrder.VendorID == model.VendorIDTaoVegetable && orderStatus == sfps2.OrderStatusTakeOrder {
|
||||
tao_vegetable.PushDelivererChangeInfo(goodsOrder, order, tao.TaoDeliveryTypeSF)
|
||||
|
||||
@@ -440,7 +440,7 @@ func OnWaybillMsg(req *uuptapi.WaybillCallbackParam) (resp *uuptapi.CallbackResp
|
||||
case model.VendorIDDD:
|
||||
Lng, Lat, _ := partner.GetRidderPositionGetter(param.WaybillVendorID).GetRidderPosition(nil, param.VendorOrderID, param.VendorOrderID, param.VendorWaybillID, param.VendorWaybillID2)
|
||||
tiktokStatusPush(param, req.State, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), good.VendorOrgCode)
|
||||
case model.VendorIDMTWM, model.VendorIDTaoVegetable:
|
||||
case model.VendorIDMTWM, model.VendorIDTaoVegetable, model.VendorIDEBAI:
|
||||
delivery.GetOrderRiderInfoToPlatform(param.VendorOrderID, param.Status) // 骑手位置更新
|
||||
if good.VendorID == model.VendorIDTaoVegetable && req.State == uuptapi.StateRMGrabsOrder {
|
||||
tao_vegetable.PushDelivererChangeInfo(good, param, tao.TaoDeliveryTypeOther)
|
||||
|
||||
@@ -564,6 +564,10 @@ func CheckAndReply(req *JXMsg, elmAppID string) (err error) {
|
||||
temp := mt
|
||||
//获取自定义回复模板
|
||||
if template := GetCustomTemplate(utils.Int2Str(mt.AppID), mt.AppPoiCode); len(template.Template) > 0 {
|
||||
// 关闭自动回复
|
||||
if template.Template == "3ASOkN9WiU3AUae2tYGChA==" {
|
||||
return nil
|
||||
}
|
||||
temp.MsgContent = template.Template
|
||||
} else {
|
||||
temp.MsgContent, err = GetDefaultTemplate(utils.Int2Str(mt.AppID), mt.AppPoiCode, VendorIDMT)
|
||||
@@ -930,7 +934,7 @@ func GetCustomTemplate(appID, vendorStoreID string) (storeTemplate StoreTemplate
|
||||
|
||||
// AddCustomReply 增加门店自定义回复模板
|
||||
func AddCustomReply(appID, vendorStoreID, replyTemplate string) (storeTemplate string, err error) {
|
||||
if len(appID) == 0 || len(vendorStoreID) == 0 || len(replyTemplate) == 0 {
|
||||
if len(appID) == 0 || len(vendorStoreID) == 0 {
|
||||
return "", errors.New("参数错误请检查!")
|
||||
}
|
||||
|
||||
@@ -942,7 +946,7 @@ func AddCustomReply(appID, vendorStoreID, replyTemplate string) (storeTemplate s
|
||||
data, _ := json.Marshal(template)
|
||||
|
||||
err = rdb.Del(key)
|
||||
if err == nil {
|
||||
if err == nil && replyTemplate != "" {
|
||||
err = rdb.RPush(key, data)
|
||||
//err = rdb.Set(key, replyTemplate, 0)
|
||||
}
|
||||
|
||||
@@ -55,11 +55,18 @@ func GetOrderIDFromMap(orderMap map[string]interface{}) string {
|
||||
}
|
||||
|
||||
func GetAfsIDFromMap(orderMap map[string]interface{}) string {
|
||||
if orderID := orderMap["refund_order_id"]; orderID != nil {
|
||||
if tryOrderID, ok := orderID.(string); ok {
|
||||
return tryOrderID
|
||||
}
|
||||
return utils.Int64ToStr(utils.MustInterface2Int64(orderID))
|
||||
//if orderID := orderMap["refund_order_id"]; orderID != nil {
|
||||
// if tryOrderID, ok := orderID.(string); ok {
|
||||
// return tryOrderID
|
||||
// }
|
||||
// return utils.Int64ToStr(utils.MustInterface2Int64(orderID))
|
||||
//}
|
||||
//return ""
|
||||
|
||||
ReverseOderList := orderMap["reverse_order_list"].([]interface{})
|
||||
if len(ReverseOderList) != 0 {
|
||||
afsInfo := ReverseOderList[len(ReverseOderList)-1].(map[string]interface{})
|
||||
return afsInfo["refund_order_id"].(string)
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package ebai
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
@@ -158,20 +159,35 @@ func (p *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCat
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
||||
riderInfo := &ebaiapi.OrderSelfDeliveryLocationSync{
|
||||
OrderId: param["order_id"].(string),
|
||||
Location: &ebaiapi.RiderLocation{
|
||||
UTC: utils.Int64ToStr(time.Now().Unix()),
|
||||
Altitude: "0",
|
||||
Latitude: param["latitude"].(string),
|
||||
Longitude: param["longitude"].(string),
|
||||
},
|
||||
}
|
||||
return api.EbaiAPI.SelfDeliveryLocationSync(riderInfo)
|
||||
}
|
||||
|
||||
func OrderStatussync(param map[string]interface{}) error {
|
||||
selfStatus := 0
|
||||
switch param["logistics_status"].(int) {
|
||||
case 0:
|
||||
selfStatus = 2 // 2:配送待分配
|
||||
case 12:
|
||||
selfStatus = 3 // 骑士接单
|
||||
case 0, 5:
|
||||
selfStatus = ebaiapi.OrderDeliveryStatusWaitRider // 2:配送待分配
|
||||
case 10:
|
||||
selfStatus = ebaiapi.OrderDeliveryStatusReceived // 骑士接单
|
||||
case 15:
|
||||
selfStatus = 8 // 骑士到店
|
||||
selfStatus = ebaiapi.OrderDeliveryStatusToStore // 骑士到店
|
||||
case 20:
|
||||
selfStatus = 20 // 骑手送出
|
||||
selfStatus = ebaiapi.OrderDeliveryStatusSend // 骑手送出
|
||||
case 40:
|
||||
selfStatus = 30 // 配送完成
|
||||
selfStatus = ebaiapi.OrderDeliveryStatusSendOver // 配送完成
|
||||
case 100:
|
||||
selfStatus = ebaiapi.OrderDeliveryStatusCancel // 取消
|
||||
default:
|
||||
selfStatus = 7 // 配送异常
|
||||
selfStatus = ebaiapi.OrderDeliveryStatusAbnormal // 配送异常
|
||||
}
|
||||
param2 := &ebaiapi.PushRiderInfo{
|
||||
DistributorId: 201,
|
||||
|
||||
@@ -132,31 +132,34 @@ func (p *PurchaseHandler) AfsOrderDetail2Financial(orderData map[string]interfac
|
||||
// 或者换个思路,不考虑变更之前的正向订单,在佣金上入手,退款金额减去佣金减少的部分
|
||||
orderFinancial, err := partner.CurOrderManager.LoadOrderFinancial(afsOrder.VendorOrderID, model.VendorIDEBAI)
|
||||
if err == nil {
|
||||
afsOrder.PmRefundMoney = orderFinancial.PmMoney - utils.MustInterface2Int64(orderData["commission"])
|
||||
afsOrder.PmRefundMoney = orderFinancial.PmMoney - utils.MustInterface2Int64(orderData["commission_amount"])
|
||||
} else {
|
||||
// 此处应该报错
|
||||
err = nil
|
||||
}
|
||||
if orderData["refund_detail"] != nil {
|
||||
refundDetail := orderData["refund_detail"].([]interface{})
|
||||
for _, refundInfo := range refundDetail {
|
||||
if orderData["reverse_order_list"] != nil {
|
||||
refundDetail := orderData["reverse_order_list"].([]interface{})
|
||||
refundSkuList := refundDetail[len(refundDetail)-1].(map[string]interface{})["sub_reverse_order_list"].([]interface{})
|
||||
for _, refundInfo := range refundSkuList {
|
||||
xMap := refundInfo.(map[string]interface{})
|
||||
orderSkuFinancial := &model.OrderSkuFinancial{
|
||||
VendorID: model.VendorIDEBAI,
|
||||
AfsOrderID: afsOrder.AfsOrderID,
|
||||
VendorOrderID: afsOrder.VendorOrderID,
|
||||
VendorSubOrderID: afsOrder.VendorOrderID2,
|
||||
// ConfirmTime: getTimeFromInterface(xMap["apply_time"]),
|
||||
VendorSkuID: utils.Interface2String(xMap["sku_id"]),
|
||||
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(xMap["custom_sku_id"]), 0)),
|
||||
Name: utils.Interface2String(xMap["name"]),
|
||||
UserMoney: utils.MustInterface2Int64(xMap["total_refund"]),
|
||||
PmSubsidyMoney: utils.MustInterface2Int64(xMap["shop_ele_refund"]),
|
||||
IsAfsOrder: 1,
|
||||
if xMap["virtual_type"] == ebaiapi.OrderVirtualType {
|
||||
orderSkuFinancial := &model.OrderSkuFinancial{
|
||||
VendorID: model.VendorIDEBAI,
|
||||
AfsOrderID: afsOrder.AfsOrderID,
|
||||
VendorOrderID: afsOrder.VendorOrderID,
|
||||
VendorSubOrderID: afsOrder.VendorOrderID2,
|
||||
// ConfirmTime: getTimeFromInterface(xMap["apply_time"]),
|
||||
VendorSkuID: utils.Int64ToStr(utils.MustInterface2Int64(xMap["platform_sku_id"])),
|
||||
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(xMap["custom_sku_id"]), 0)),
|
||||
Name: utils.Interface2String(xMap["sku_name"]),
|
||||
UserMoney: utils.MustInterface2Int64(xMap["refund_user_amount"]),
|
||||
IsAfsOrder: 1,
|
||||
}
|
||||
orderSkuFinancial.PmSubsidyMoney = utils.Interface2Int64WithDefault(xMap["discount_detail"].(map[string]interface{})["platform_discount_amount"], 0) + utils.Interface2Int64WithDefault(xMap["discount_detail"].(map[string]interface{})["agent_discount_amount"], 0) + utils.Interface2Int64WithDefault(xMap["discount_detail"].(map[string]interface{})["user_discount_amount"], 0)
|
||||
afsOrder.Skus = append(afsOrder.Skus, orderSkuFinancial)
|
||||
afsOrder.SkuUserMoney += orderSkuFinancial.UserMoney
|
||||
afsOrder.PmSubsidyMoney += orderSkuFinancial.PmSubsidyMoney
|
||||
}
|
||||
afsOrder.Skus = append(afsOrder.Skus, orderSkuFinancial)
|
||||
afsOrder.SkuUserMoney += orderSkuFinancial.UserMoney
|
||||
afsOrder.PmSubsidyMoney += orderSkuFinancial.PmSubsidyMoney
|
||||
}
|
||||
if len(refundDetail) > 0 {
|
||||
afsOrder.AfsCreatedAt = getTimeFromInterface(refundDetail[0].(map[string]interface{})["apply_time"])
|
||||
|
||||
@@ -131,12 +131,12 @@ func (p *PurchaseHandler) GetOrder4PartRefund(vendorOrderID string) (order *mode
|
||||
if err1 == nil {
|
||||
order = p.Map2Order(result1)
|
||||
if err2 == nil {
|
||||
order.Skus = p.partRefund2OrderDetailSkuList(utils.Interface2String(result2["order_id"]), result2["order_detail"])
|
||||
order.Skus = p.partRefund2OrderDetailSkuList(utils.Interface2String(result2["order_id"]), result2["reverse_order_list"])
|
||||
giftSkus, discountMoney := getZengSkus(vendorOrderID, result1)
|
||||
order.DiscountMoney = discountMoney
|
||||
order.Skus = append(order.Skus, giftSkus...)
|
||||
order.ActualPayPrice = utils.MustInterface2Int64(result2["user_fee"])
|
||||
order.TotalShopMoney = utils.MustInterface2Int64(result2["shop_fee"])
|
||||
order.ActualPayPrice = utils.MustInterface2Int64(result2["remain_user_total_amount"])
|
||||
order.TotalShopMoney = utils.MustInterface2Int64(result2["merchant_income"])
|
||||
jxutils.RefreshOrderSkuRelated(order)
|
||||
} else if err2Ext, ok := err2.(*utils.ErrorWithCode); !ok || err2Ext.IntCode() != ebaiapi.ErrOrderIsNotPartRefund {
|
||||
err = err2
|
||||
@@ -170,27 +170,31 @@ func getZengSkus(orderID string, orderMan map[string]interface{}) (skus []*model
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) partRefund2OrderDetailSkuList(orderID string, orderDetail2 interface{}) (skuList []*model.OrderSku) {
|
||||
orderDetail := orderDetail2.([]interface{})
|
||||
for _, product2 := range orderDetail {
|
||||
refundDetail := orderDetail2.([]interface{})
|
||||
refundSkuList := refundDetail[len(refundDetail)-1].(map[string]interface{})["sub_reverse_order_list"].([]interface{})
|
||||
for _, product2 := range refundSkuList {
|
||||
product := product2.(map[string]interface{})
|
||||
skuName := product["name"].(string)
|
||||
_, _, _, specUnit, _, specQuality := jxutils.SplitSkuName(skuName)
|
||||
number := int(utils.MustInterface2Int64(product["number"]))
|
||||
sku := &model.OrderSku{
|
||||
VendorOrderID: orderID,
|
||||
VendorID: model.VendorIDEBAI,
|
||||
Count: number,
|
||||
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(product[ebaiapi.KeyCustomSkuID]), 0)),
|
||||
VendorSkuID: utils.Interface2String(product[ebaiapi.KeySkuID]),
|
||||
SkuName: skuName,
|
||||
// Weight: int(utils.Interface2Int64WithDefault(product["total_weight"], 0)) / number, // 退单这里的total_weight有BUG,这里的total_weight还是没有退单时的值
|
||||
VendorPrice: utils.MustInterface2Int64(product["product_price"]),
|
||||
if product["virtual_type"] == ebaiapi.OrderVirtualType {
|
||||
skuName := product["sku_name"].(string)
|
||||
_, _, _, specUnit, _, specQuality := jxutils.SplitSkuName(skuName)
|
||||
number := int(utils.MustInterface2Int64(product["apply_quantity"]))
|
||||
sku := &model.OrderSku{
|
||||
VendorOrderID: orderID,
|
||||
VendorID: model.VendorIDEBAI,
|
||||
Count: number,
|
||||
SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(product[ebaiapi.KeyCustomSkuID]), 0)),
|
||||
VendorSkuID: utils.Interface2String(product["platform_sku_id"]),
|
||||
SkuName: skuName,
|
||||
Weight: int(utils.Interface2Int64WithDefault(product["refund_weight"], 0)) / number, // 退单这里的total_weight有BUG,这里的total_weight还是没有退单时的值
|
||||
VendorPrice: utils.MustInterface2Int64(product["refund_user_amount"]),
|
||||
}
|
||||
//sku.SalePrice, _, sku.StoreSubName = getSkuSalePrice(product)
|
||||
sku.SalePrice = utils.Interface2Int64WithDefault(product["discount_detail"].(map[string]interface{})["total_price"], 0)
|
||||
if sku.Weight == 0 {
|
||||
sku.Weight = jxutils.FormatSkuWeight(specQuality, specUnit) // 订单信息里没有重量,只有名字里尝试找
|
||||
}
|
||||
skuList = append(skuList, sku)
|
||||
}
|
||||
sku.SalePrice, _, sku.StoreSubName = getSkuSalePrice(product)
|
||||
if sku.Weight == 0 {
|
||||
sku.Weight = jxutils.FormatSkuWeight(specQuality, specUnit) // 订单信息里没有重量,只有名字里尝试找
|
||||
}
|
||||
skuList = append(skuList, sku)
|
||||
}
|
||||
return skuList
|
||||
}
|
||||
@@ -440,7 +444,30 @@ func (p *PurchaseHandler) trySyncCancelStatus(vendorOrderID string) (err error)
|
||||
func (p *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName string) (err error) {
|
||||
// todo 饿百转商家自送后,没有确认送达的概念,空操作
|
||||
if globals.EnableEbaiStoreWrite && order.WaybillVendorID > 100 {
|
||||
err = api.EbaiAPI.OrderComplete(order.VendorOrderID, userName)
|
||||
param2 := &ebaiapi.PushRiderInfo{
|
||||
DistributorId: 201,
|
||||
OrderId: order.VendorOrderID,
|
||||
State: 21,
|
||||
SelfStatus: ebaiapi.OrderDeliveryStatusSendOver,
|
||||
SelfStatusDesc: "自配送送达",
|
||||
DistributorInfoDTO: ebaiapi.DistributorInfoDTO{
|
||||
DistributorTypeId: "99999",
|
||||
DistributorName: "商家自行配送",
|
||||
},
|
||||
}
|
||||
bills, _ := dao.GetWaybills(dao.GetDB(), order.VendorOrderID, nil)
|
||||
for _, v := range bills {
|
||||
if v.Status == model.WaybillStatusDelivered || v.Status == model.WaybillStatusFailed {
|
||||
param2.Knight = ebaiapi.Knight{
|
||||
Id: utils.Str2Int64(order.VendorOrderID),
|
||||
Name: v.CourierName,
|
||||
Phone: v.CourierMobile,
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
err = api.EbaiAPI.OrderselfDeliveryStateSync2(param2)
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -448,7 +475,18 @@ func (p *PurchaseHandler) Swtich2SelfDelivered(order *model.GoodsOrder, userName
|
||||
// 完全自送的门店表示开始配送
|
||||
func (p *PurchaseHandler) SelfDeliverDelivering(order *model.GoodsOrder, userName string) (err error) {
|
||||
if globals.EnableEbaiStoreWrite {
|
||||
err = api.EbaiAPI.OrderselfDeliveryStateSync(order.VendorOrderID, userName)
|
||||
param2 := &ebaiapi.PushRiderInfo{
|
||||
DistributorId: 201,
|
||||
OrderId: order.VendorOrderID,
|
||||
State: 21,
|
||||
SelfStatus: 1,
|
||||
SelfStatusDesc: "生成自配送运单",
|
||||
DistributorInfoDTO: ebaiapi.DistributorInfoDTO{
|
||||
DistributorTypeId: "99999",
|
||||
DistributorName: "商家自行配送",
|
||||
},
|
||||
}
|
||||
err = api.EbaiAPI.OrderselfDeliveryStateSync2(param2)
|
||||
}
|
||||
if err == nil {
|
||||
// 饿百不会发送配送中,模拟发送
|
||||
@@ -460,7 +498,30 @@ func (p *PurchaseHandler) SelfDeliverDelivering(order *model.GoodsOrder, userNam
|
||||
// 完全自送的门店表示配送完成
|
||||
func (p *PurchaseHandler) SelfDeliverDelivered(order *model.GoodsOrder, userName string) (err error) {
|
||||
if globals.EnableEbaiStoreWrite {
|
||||
err = api.EbaiAPI.OrderComplete(order.VendorOrderID, userName)
|
||||
param2 := &ebaiapi.PushRiderInfo{
|
||||
DistributorId: 201,
|
||||
OrderId: order.VendorOrderID,
|
||||
State: 21,
|
||||
SelfStatus: ebaiapi.OrderDeliveryStatusSendOver,
|
||||
SelfStatusDesc: "自配送送达",
|
||||
DistributorInfoDTO: ebaiapi.DistributorInfoDTO{
|
||||
DistributorTypeId: "99999",
|
||||
DistributorName: "商家自行配送",
|
||||
},
|
||||
}
|
||||
bills, _ := dao.GetWaybills(dao.GetDB(), order.VendorOrderID, nil)
|
||||
for _, v := range bills {
|
||||
if v.Status == model.WaybillStatusDelivered || v.Status == model.WaybillStatusFailed {
|
||||
param2.Knight = ebaiapi.Knight{
|
||||
Id: utils.Str2Int64(order.VendorOrderID),
|
||||
Name: v.CourierName,
|
||||
Phone: v.CourierMobile,
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
err = api.EbaiAPI.OrderselfDeliveryStateSync2(param2)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -169,9 +169,9 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *ebaiapi.CallbackMsg) (retVal *ebaia
|
||||
var db = dao.GetDB()
|
||||
if utils.Str2Int(orderStatus.VendorStatus) == ebaiapi.OrderPartRefundSuccess {
|
||||
orderData, err2 := api.EbaiAPI.OrderPartRefundGet(orderStatus.RefVendorOrderID)
|
||||
if err2 == nil && utils.MustInterface2Int64(orderData["shop_fee"]) != model.NO {
|
||||
if err2 == nil && utils.MustInterface2Int64(orderData["merchant_income"]) != model.NO {
|
||||
goodsOrder, _ := partner.CurOrderManager.LoadOrder(orderStatus.RefVendorOrderID, model.VendorIDEBAI)
|
||||
goodsOrder.TotalShopMoney = utils.MustInterface2Int64(orderData["shop_fee"])
|
||||
goodsOrder.TotalShopMoney = utils.MustInterface2Int64(orderData["merchant_income"])
|
||||
// 门店结算小于等于50为扣点
|
||||
afsSkuList, _ := dao.GetOrderRefundSkuList(db, []string{goodsOrder.VendorOrderID})
|
||||
for _, v := range goodsOrder.Skus {
|
||||
|
||||
Reference in New Issue
Block a user