京东门店修改日志+京东门店自送骑手同步+三方门店商品对比
This commit is contained in:
@@ -1,238 +1,371 @@
|
|||||||
package enterprise
|
package enterprise
|
||||||
|
|
||||||
//
|
import (
|
||||||
//import (
|
"fmt"
|
||||||
// "fmt"
|
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
||||||
// "git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||||
// "git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
tao "git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
||||||
// tao "git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
domain585 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability585/domain"
|
||||||
// domain585 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability585/domain"
|
request585 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability585/request"
|
||||||
// request585 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability585/request"
|
product_listV2_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_listV2/request"
|
||||||
// product_listV2_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_listV2/request"
|
product_listV2_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_listV2/response"
|
||||||
// product_listV2_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_listV2/response"
|
sku_syncStock_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/sku_syncStock/request"
|
||||||
// "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
"git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
||||||
// "git.rosy.net.cn/baseapi/utils"
|
"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/jxutils/jxcontext"
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
// "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/model/dao"
|
||||||
// "git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
// "git.rosy.net.cn/jx-callback/globals/api/apimanager"
|
"git.rosy.net.cn/jx-callback/globals/api/apimanager"
|
||||||
// "strings"
|
"strings"
|
||||||
//)
|
)
|
||||||
//
|
|
||||||
//// 该函数主要用于对比京西平台商品和各个平台门店商品的差异
|
// 该函数主要用于对比京西平台商品和各个平台门店商品的差异
|
||||||
//// 对比上下架状态以及商品价格差异,相同的不做修改,不同的以京西系统商品为主
|
// 对比上下架状态以及商品价格差异,相同的不做修改,不同的以京西系统商品为主
|
||||||
//
|
|
||||||
//func CompareJxVendorSku(jxStoreId int) error {
|
func CompareJxVendorSku(jxStoreId int) error {
|
||||||
|
var (
|
||||||
|
db = dao.GetDB()
|
||||||
|
errListToStr = new(strings.Builder)
|
||||||
|
)
|
||||||
|
skuList, err := dao.GetStoresSkusInfo(db, []int{jxStoreId}, nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 门店商品列表平
|
||||||
|
skuMap := make(map[string]*model.StoreSkuBind, 0)
|
||||||
|
skuIdList := make([]string, 0, len(skuList))
|
||||||
|
for _, v := range skuList {
|
||||||
|
localSkuId := utils.Int2Str(v.SkuID)
|
||||||
|
skuMap[localSkuId] = v
|
||||||
|
skuIdList = append(skuIdList, localSkuId)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 有效的三方平台
|
||||||
|
storeMap, err := dao.GetStoresMapList(db, nil, []int{jxStoreId}, []int{model.StoreStatusOpened, model.StoreStatusClosed, model.StoreStatusHaveRest}, model.StoreStatusDisabled, 1, "", "", "")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, sm := range storeMap {
|
||||||
|
switch sm.VendorID {
|
||||||
|
case model.VendorIDJD:
|
||||||
|
case model.VendorIDMTWM:
|
||||||
|
if errs := MtWmSyncSkuPriceAndStatus(db, sm, skuMap); errs != nil {
|
||||||
|
errListToStr.WriteString(errs.Error())
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
case model.VendorIDEBAI:
|
||||||
|
if errs := EBaiSyncSkuPriceAndStatus(db, sm, skuMap); errs != nil {
|
||||||
|
errListToStr.WriteString(errs.Error())
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
case model.VendorIDDD:
|
||||||
|
case model.VendorIDTaoVegetable:
|
||||||
|
if errs := TaoSyncSkuPriceAndStatus(db, sm, skuMap, skuIdList); errs != nil {
|
||||||
|
errListToStr.WriteString(errs.Error())
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("无法识别的平台id")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// MtWmSyncSkuPriceAndStatus 校验美团平台和京西系统商品差异
|
||||||
|
func MtWmSyncSkuPriceAndStatus(db *dao.DaoDB, sm *model.StoreMap, skuMap map[string]*model.StoreSkuBind) (err error) {
|
||||||
|
var (
|
||||||
|
mtApi = apimanager.CurAPIManager.GetAPI(sm.VendorID, sm.VendorOrgCode).(*mtwmapi.API)
|
||||||
|
i = model.NO
|
||||||
|
foodListData = make([]*mtwmapi.AppFood, 0, 0)
|
||||||
|
errs = make([]string, 0, 0)
|
||||||
|
vendorStatus = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
for {
|
||||||
|
foodList, err := mtApi.RetailListAll(sm.VendorStoreID, i)
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Debugf("美团商品价格和上下架状态获取平台商品异常 :%v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
foodListData = append(foodListData, foodList...)
|
||||||
|
if len(foodList) < 100 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, vsl := range foodListData {
|
||||||
|
if sku, ok := skuMap[vsl.AppFoodCode]; ok {
|
||||||
|
// 同步商品价格
|
||||||
|
if utils.Float64TwoInt(vsl.Price*float64(100)) != sku.MtwmPrice {
|
||||||
|
_, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, model.SyncFlagPriceMask, true, true)
|
||||||
|
if err != nil {
|
||||||
|
errs = append(errs, fmt.Sprintf("skuCode:%d,修改美团价格错误:%v", sku.SkuID, err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 同步商品上下架状态
|
||||||
|
// SPU(可能包含多个SKU)上下架状态,字段取值范围:0-全部sku上架,1-全部sku下架。以下功能灰度中:若同时传递sku_is_sold_out,则优先根据sku_is_sold_out传参判断单个sku的上下架状态。
|
||||||
|
// 本地sku.Status 0-不可售, 1-可售
|
||||||
|
if vsl.IsSoldOut == sku.Status {
|
||||||
|
if sku.Status == model.SkuStatusNormal {
|
||||||
|
vendorStatus = mtwmapi.SellStatusOnline
|
||||||
|
} else {
|
||||||
|
vendorStatus = mtwmapi.SellStatusOffline
|
||||||
|
}
|
||||||
|
|
||||||
|
param := []*mtwmapi.BareStoreFoodInfo{
|
||||||
|
&mtwmapi.BareStoreFoodInfo{
|
||||||
|
AppFoodCode: utils.Int64ToStr(sku.MtwmID),
|
||||||
|
Skus: nil,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
foodErrList, err := mtApi.RetailSellStatus(jxcontext.AdminCtx.GetTrackInfo(), sm.VendorStoreID, param, vendorStatus)
|
||||||
|
if err != nil {
|
||||||
|
errs = append(errs, fmt.Sprintf("skuCode:%d,修改美团可售状态错误%v", sku.SkuID, err))
|
||||||
|
}
|
||||||
|
for _, fel := range foodErrList {
|
||||||
|
errs = append(errs, fmt.Sprintf("skuCode:%s,修改美团可售状态错误:%s", fel.AppFoodCode, fel.ErrorMsg))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(errs) == model.NO {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf("%s", strings.Join(errs, ","))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EBaiSyncSkuPriceAndStatus 校验饿了么平台和京西系统商品差异
|
||||||
|
func EBaiSyncSkuPriceAndStatus(db *dao.DaoDB, sm *model.StoreMap, skuMap map[string]*model.StoreSkuBind) (err error) {
|
||||||
|
var (
|
||||||
|
ebaiApi = apimanager.CurAPIManager.GetAPI(sm.VendorID, sm.VendorOrgCode).(*ebaiapi.API)
|
||||||
|
skuIdOffset = 0
|
||||||
|
foodListData = make([]*ebaiapi.SkuInfo, 0, 0)
|
||||||
|
errs = make([]string, 0, 0)
|
||||||
|
)
|
||||||
|
|
||||||
|
for {
|
||||||
|
param := &ebaiapi.SkuListParams{
|
||||||
|
Page: 1,
|
||||||
|
PageSize: 100,
|
||||||
|
SkuIdOffset: skuIdOffset,
|
||||||
|
}
|
||||||
|
foodList, err := ebaiApi.SkuList(sm.VendorStoreID, param)
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Debugf("美团商品价格和上下架状态获取平台商品异常 :%v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
foodListData = append(foodListData, foodList.List...)
|
||||||
|
if len(foodList.List) < 100 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
skuIdOffset = foodList.SkuIdOffset
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, vsl := range foodListData {
|
||||||
|
if sku, ok := skuMap[vsl.CustomSkuId]; ok {
|
||||||
|
// 同步商品价格
|
||||||
|
if vsl.SalePrice != sku.EbaiPrice {
|
||||||
|
_, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, model.SyncFlagPriceMask, true, true)
|
||||||
|
}
|
||||||
|
// 同步商品上下架状态
|
||||||
|
// 1为上架,0为下架
|
||||||
|
// 本地sku.Status 0-不可售, 1-可售
|
||||||
|
if vsl.Status != utils.Int2Str(sku.Status) {
|
||||||
|
// 平台上架本地下架,将平台商品下架
|
||||||
|
if sku.Status == model.StoreSkuBindStatusNormal {
|
||||||
|
ebailResult, err := ebaiApi.SkuOnline(jxcontext.AdminCtx.GetTrackInfo(), utils.Int2Str(sm.StoreID), []int64{sku.EbaiID}, nil, nil)
|
||||||
|
if err != nil {
|
||||||
|
errs = append(errs, fmt.Sprintf("skuCode:%d,修改饿百可售状态错误%v", sku.SkuID, err))
|
||||||
|
}
|
||||||
|
for _, fel := range ebailResult.FailedList {
|
||||||
|
errs = append(errs, fmt.Sprintf("skuCode:%d,修改饿百可售状态错误:%s", fel.SkuID, fel.ErrorMsg))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = ebaiApi.SkuOfflineOne(jxcontext.AdminCtx.GetTrackInfo(), utils.Int2Str(sm.StoreID), sku.EbaiID, "", "")
|
||||||
|
if err != nil {
|
||||||
|
errs = append(errs, fmt.Sprintf("skuCode:%d,修改饿百不可售状态错误%v", sku.SkuID, err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//_, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, 56, true, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(errs) == model.NO {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf("%s", strings.Join(errs, ","))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TaoSyncSkuPriceAndStatus 校验淘宝平台和京西系统商品差异
|
||||||
|
func TaoSyncSkuPriceAndStatus(db *dao.DaoDB, sm *model.StoreMap, skuMap map[string]*model.StoreSkuBind, skuIdList []string) (err error) {
|
||||||
|
var (
|
||||||
|
taoApi = apimanager.CurAPIManager.GetAPI(sm.VendorID, sm.VendorOrgCode).(*tao.API)
|
||||||
|
length = len(skuIdList) / 100
|
||||||
|
foodListData = make([]domain585.AlibabaWdkSkuQuerySkuDo, 0, 0)
|
||||||
|
onlineStatus int64 = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
if len(skuIdList)%100 != 0 {
|
||||||
|
length += 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取平台商品列表
|
||||||
|
for i := 0; i < length; i++ {
|
||||||
|
skuCods := skuIdList[i*100 : (i+1)*100]
|
||||||
|
foodList, _ := taoApi.QueryStoreSKu(&request585.AlibabaWdkSkuQueryRequest{Param: &domain585.AlibabaWdkSkuQuerySkuQueryDo{
|
||||||
|
OuCode: utils.String2Pointer(sm.VendorStoreID),
|
||||||
|
SkuCodes: &skuCods,
|
||||||
|
}})
|
||||||
|
for _, fl := range *foodList {
|
||||||
|
if *fl.Success {
|
||||||
|
foodListData = append(foodListData, *fl.Model)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 比较商品差异
|
||||||
|
errs := make([]string, 0, 0)
|
||||||
|
for _, vsl := range foodListData {
|
||||||
|
if sku, ok := skuMap[*vsl.SkuCode]; ok {
|
||||||
|
// 同步商品价格
|
||||||
|
if utils.Float64TwoInt(utils.Str2Float64(*vsl.SalePrice)*float64(100)) != sku.TaoPrice {
|
||||||
|
_, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, model.SyncFlagPriceMask, true, true)
|
||||||
|
if err != nil {
|
||||||
|
errs = append(errs, fmt.Sprintf("淘宝对比商品价格异常skuid:%d,错误%v", sku.SkuID, err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 同步商品上下架状态
|
||||||
|
// 是否线上可售 是 0:否 1:是。
|
||||||
|
// 本地sku.Status 0-不可售, 1-可售
|
||||||
|
if int(*vsl.OnlineSaleFlag) != sku.Status {
|
||||||
|
// 平台上架本地下架,将平台商品下架
|
||||||
|
param := &request585.AlibabaWdkSkuUpdateRequest{}
|
||||||
|
updateSkuList := make([]domain585.AlibabaWdkSkuUpdateSkuDo, 0, 0)
|
||||||
|
if sku.Status == model.SkuStatusNormal {
|
||||||
|
onlineStatus = tao.CreateOnlineSaleFlag
|
||||||
|
} else {
|
||||||
|
onlineStatus = tao.CreateOfflineSaleFlag
|
||||||
|
}
|
||||||
|
updateSkuList = append(updateSkuList, domain585.AlibabaWdkSkuUpdateSkuDo{
|
||||||
|
OuCode: utils.String2Pointer(utils.Int64ToStr(sku.TaoID)),
|
||||||
|
SkuCode: utils.String2Pointer(utils.Int2Str(sku.SkuID)),
|
||||||
|
OnlineSaleFlag: utils.Int64ToPointer(onlineStatus),
|
||||||
|
SubTitle: utils.String2Pointer("小时达"),
|
||||||
|
AllowAppSale: utils.Int64ToPointer(onlineStatus),
|
||||||
|
//CleanSkuMemberPrice: utils.Int64ToPointer(model.YES),
|
||||||
|
})
|
||||||
|
param.ParamList = &updateSkuList
|
||||||
|
|
||||||
|
result, err := taoApi.UpdateStoreSku(param)
|
||||||
|
if err != nil {
|
||||||
|
errs = append(errs, fmt.Sprintf("skuCode:%d,修改饿百可售状态错误%v", sku.SkuID, err))
|
||||||
|
}
|
||||||
|
for _, fel := range *result {
|
||||||
|
if fel.ErrMsg != "" {
|
||||||
|
errs = append(errs, fmt.Sprintf("skuCode:%s,修改饿百可售状态错误:%s", fel.SkuID, fel.ErrMsg))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//_, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, 56, true, true)
|
||||||
|
//if err != nil {
|
||||||
|
// errs = append(errs, fmt.Sprintf("%v", err))
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(errs) == model.NO {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf("%s", strings.Join(errs, ","))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TiktokSyncSkuPriceAndStatus 校验抖音平台和京西系统商品差异
|
||||||
|
func TiktokSyncSkuPriceAndStatus(db *dao.DaoDB, sm *model.StoreMap, skuMap map[string]*model.StoreSkuBind) (err error) {
|
||||||
|
var (
|
||||||
|
tiktokApi = apimanager.CurAPIManager.GetAPI(sm.VendorID, sm.VendorOrgCode).(*tiktok_api.API)
|
||||||
|
page = 0
|
||||||
|
foodListData = make([]product_listV2_response.DataItem, 0, 0)
|
||||||
|
errs = make([]string, 0, 0)
|
||||||
|
)
|
||||||
|
|
||||||
|
for {
|
||||||
|
param := &product_listV2_request.ProductListV2Param{
|
||||||
|
Page: int64(page),
|
||||||
|
Size: 100,
|
||||||
|
StoreId: utils.Str2Int64(sm.VendorStoreID),
|
||||||
|
}
|
||||||
|
foodList, err := tiktokApi.GetSkuDetailList(param)
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Debugf("抖音商品价格和上下架状态获取平台商品异常 :%v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
foodListData = append(foodListData, foodList.Data...)
|
||||||
|
if len(foodList.Data) < 100 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
page += 1
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, vsl := range foodListData {
|
||||||
|
if sku, ok := skuMap[vsl.OuterProductId]; ok {
|
||||||
|
// 同步商品价格
|
||||||
|
if vsl.DiscountPrice != int64(sku.EbaiPrice) {
|
||||||
|
_, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, model.SyncFlagPriceMask, true, true)
|
||||||
|
if err != nil {
|
||||||
|
errs = append(errs, fmt.Sprintf("抖音对比商品价格异常skuid:%d,错误%v", sku.SkuID, err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 同步商品上下架状态
|
||||||
|
// 0-在线 1-下线
|
||||||
|
// 本地sku.Status 0-不可售,1-可售
|
||||||
|
if vsl.Status == int64(sku.Status) {
|
||||||
|
if sku.Status == model.SkuStatusNormal {
|
||||||
|
param := &sku_syncStock_request.SkuSyncStockParam{
|
||||||
|
ProductId: sku.DdID,
|
||||||
|
Incremental: false,
|
||||||
|
StockNum: 99999,
|
||||||
|
OutSkuId: int64(sku.SkuID),
|
||||||
|
}
|
||||||
|
if err = tiktokApi.UpdateSkuStock(param); err != nil {
|
||||||
|
errs = append(errs, fmt.Sprintf("抖音对比商品上架异常skuid:%d,错误%v", sku.SkuID, err))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
param := &sku_syncStock_request.SkuSyncStockParam{
|
||||||
|
ProductId: sku.DdID,
|
||||||
|
Incremental: false,
|
||||||
|
StockNum: 0,
|
||||||
|
OutSkuId: int64(sku.SkuID),
|
||||||
|
}
|
||||||
|
if err = tiktokApi.UpdateSkuStock(param); err != nil {
|
||||||
|
errs = append(errs, fmt.Sprintf("抖音对比商品下架异常skuid:%d,错误%v", sku.SkuID, err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(errs) == model.NO {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf("%s", strings.Join(errs, ","))
|
||||||
|
}
|
||||||
|
|
||||||
|
// JdSyncSkuPriceAndStatus 校验京东平台和京西系统商品差异
|
||||||
|
//func JdSyncSkuPriceAndStatus(db *dao.DaoDB, sm *model.StoreMap, skuMap map[string]*model.StoreSkuBind) (err error) {
|
||||||
// var (
|
// var (
|
||||||
// db = dao.GetDB()
|
// tiktokApi = apimanager.CurAPIManager.GetAPI(sm.VendorID, sm.VendorOrgCode).(*jdshopapi.API)
|
||||||
// errListToStr = new(strings.Builder)
|
|
||||||
// )
|
|
||||||
// skuList, err := dao.GetStoresSkusInfo(db, []int{jxStoreId}, nil)
|
|
||||||
// if err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // 门店商品列表平
|
|
||||||
// skuMap := make(map[string]*model.StoreSkuBind, 0)
|
|
||||||
// skuIdList := make([]string, 0, len(skuList))
|
|
||||||
// for _, v := range skuList {
|
|
||||||
// localSkuId := utils.Int2Str(v.SkuID)
|
|
||||||
// skuMap[localSkuId] = v
|
|
||||||
// skuIdList = append(skuIdList, localSkuId)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // 有效的三方平台
|
|
||||||
// storeMap, err := dao.GetStoresMapList(db, nil, []int{jxStoreId}, []int{model.StoreStatusOpened, model.StoreStatusClosed, model.StoreStatusHaveRest}, model.StoreStatusDisabled, 1, "", "", "")
|
|
||||||
// if err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// for _, sm := range storeMap {
|
|
||||||
// switch sm.VendorID {
|
|
||||||
// case model.VendorIDJD:
|
|
||||||
// case model.VendorIDMTWM:
|
|
||||||
// if errs := MtWmSyncSkuPriceAndStatus(db, sm, skuMap); errs != nil {
|
|
||||||
// errListToStr.WriteString(errs.Error())
|
|
||||||
// }
|
|
||||||
// continue
|
|
||||||
// case model.VendorIDEBAI:
|
|
||||||
// if errs := EBaiSyncSkuPriceAndStatus(db, sm, skuMap); errs != nil {
|
|
||||||
// errListToStr.WriteString(errs.Error())
|
|
||||||
// }
|
|
||||||
// continue
|
|
||||||
// case model.VendorIDDD:
|
|
||||||
// case model.VendorIDTaoVegetable:
|
|
||||||
// if errs := TaoSyncSkuPriceAndStatus(db, sm, skuMap, skuIdList); errs != nil {
|
|
||||||
// errListToStr.WriteString(errs.Error())
|
|
||||||
// }
|
|
||||||
// continue
|
|
||||||
// default:
|
|
||||||
// return fmt.Errorf("无法识别的平台id")
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return err
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//// MtWmSyncSkuPriceAndStatus 校验美团平台和京西系统商品差异
|
|
||||||
//func MtWmSyncSkuPriceAndStatus(db *dao.DaoDB, sm *model.StoreMap, skuMap map[string]*model.StoreSkuBind) (err error) {
|
|
||||||
// mtApi := apimanager.CurAPIManager.GetAPI(sm.VendorID, sm.VendorOrgCode).(*mtwmapi.API)
|
|
||||||
//
|
|
||||||
// i := model.NO
|
|
||||||
// foodListData := make([]*mtwmapi.AppFood, 0, 0)
|
|
||||||
// for {
|
|
||||||
// foodList, err := mtApi.RetailListAll(sm.VendorStoreID, i)
|
|
||||||
// if err != nil {
|
|
||||||
// globals.SugarLogger.Debugf("美团商品价格和上下架状态获取平台商品异常 :%v", err)
|
|
||||||
// continue
|
|
||||||
// }
|
|
||||||
// foodListData = append(foodListData, foodList...)
|
|
||||||
// if len(foodList) < 100 {
|
|
||||||
// break
|
|
||||||
// }
|
|
||||||
// i++
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// errs := make([]string, 0, 0)
|
|
||||||
// for _, vsl := range foodListData {
|
|
||||||
// if sku, ok := skuMap[vsl.AppFoodCode]; ok {
|
|
||||||
// // 同步商品价格
|
|
||||||
// if utils.Float64TwoInt(vsl.Price*float64(100)) != sku.MtwmPrice {
|
|
||||||
// _, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, model.SyncFlagPriceMask, true, true)
|
|
||||||
// if err != nil {
|
|
||||||
// errs = append(errs, fmt.Sprintf("%v", err))
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// // 同步商品上下架状态
|
|
||||||
// // SPU(可能包含多个SKU)上下架状态,字段取值范围:0-全部sku上架,1-全部sku下架。以下功能灰度中:若同时传递sku_is_sold_out,则优先根据sku_is_sold_out传参判断单个sku的上下架状态。
|
|
||||||
// // 本地sku.Status 0-不可售, 1-可售
|
|
||||||
// if vsl.IsSoldOut == sku.Status {
|
|
||||||
// // 平台上架本地下架,将平台商品下架
|
|
||||||
// _, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, 56, true, true)
|
|
||||||
// if err != nil {
|
|
||||||
// errs = append(errs, fmt.Sprintf("%v", err))
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if len(errs) == model.NO {
|
|
||||||
// return nil
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return fmt.Errorf("%s", strings.Join(errs, ","))
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//// EBaiSyncSkuPriceAndStatus 校验饿了么平台和京西系统商品差异
|
|
||||||
//func EBaiSyncSkuPriceAndStatus(db *dao.DaoDB, sm *model.StoreMap, skuMap map[string]*model.StoreSkuBind) (err error) {
|
|
||||||
// ebaiApi := apimanager.CurAPIManager.GetAPI(sm.VendorID, sm.VendorOrgCode).(*ebaiapi.API)
|
|
||||||
//
|
|
||||||
// skuIdOffset := 0
|
|
||||||
// foodListData := make([]*ebaiapi.SkuInfo, 0, 0)
|
|
||||||
// for {
|
|
||||||
// param := &ebaiapi.SkuListParams{
|
|
||||||
// Page: 1,
|
|
||||||
// PageSize: 100,
|
|
||||||
// SkuIdOffset: skuIdOffset,
|
|
||||||
// }
|
|
||||||
// foodList, err := ebaiApi.SkuList(sm.VendorStoreID, param)
|
|
||||||
// if err != nil {
|
|
||||||
// globals.SugarLogger.Debugf("美团商品价格和上下架状态获取平台商品异常 :%v", err)
|
|
||||||
// continue
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// foodListData = append(foodListData, foodList.List...)
|
|
||||||
// if len(foodList.List) < 100 {
|
|
||||||
// break
|
|
||||||
// }
|
|
||||||
// skuIdOffset = foodList.SkuIdOffset
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// errs := make([]string, 0, 0)
|
|
||||||
// for _, vsl := range foodListData {
|
|
||||||
// if sku, ok := skuMap[vsl.CustomSkuId]; ok {
|
|
||||||
// // 同步商品价格
|
|
||||||
// if vsl.SalePrice != sku.EbaiPrice {
|
|
||||||
// _, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, model.SyncFlagPriceMask, true, true)
|
|
||||||
// }
|
|
||||||
// // 同步商品上下架状态
|
|
||||||
// // 1为上架,0为下架
|
|
||||||
// // 本地sku.Status 0-不可售, 1-可售
|
|
||||||
// if vsl.Status != utils.Int2Str(sku.Status) {
|
|
||||||
// // 平台上架本地下架,将平台商品下架
|
|
||||||
// _, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, 56, true, true)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if len(errs) == model.NO {
|
|
||||||
// return nil
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return fmt.Errorf("%s", strings.Join(errs, ","))
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//// TaoSyncSkuPriceAndStatus 校验淘宝平台和京西系统商品差异
|
|
||||||
//func TaoSyncSkuPriceAndStatus(db *dao.DaoDB, sm *model.StoreMap, skuMap map[string]*model.StoreSkuBind, skuIdList []string) (err error) {
|
|
||||||
// var (
|
|
||||||
// taoApi = apimanager.CurAPIManager.GetAPI(sm.VendorID, sm.VendorOrgCode).(*tao.API)
|
|
||||||
// length = len(skuIdList) / 100
|
|
||||||
// foodListData = make([]domain585.AlibabaWdkSkuQuerySkuDo, 0, 0)
|
|
||||||
// )
|
|
||||||
//
|
|
||||||
// if len(skuIdList)%100 != 0 {
|
|
||||||
// length += 1
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // 获取平台商品列表
|
|
||||||
// for i := 0; i < length; i++ {
|
|
||||||
// skuCods := skuIdList[i*100 : (i+1)*100]
|
|
||||||
// foodList, _ := taoApi.QueryStoreSKu(&request585.AlibabaWdkSkuQueryRequest{Param: &domain585.AlibabaWdkSkuQuerySkuQueryDo{
|
|
||||||
// OuCode: utils.String2Pointer(sm.VendorStoreID),
|
|
||||||
// SkuCodes: &skuCods,
|
|
||||||
// }})
|
|
||||||
// for _, fl := range *foodList {
|
|
||||||
// if *fl.Success {
|
|
||||||
// foodListData = append(foodListData, *fl.Model)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // 比较商品差异
|
|
||||||
// errs := make([]string, 0, 0)
|
|
||||||
// for _, vsl := range foodListData {
|
|
||||||
// if sku, ok := skuMap[*vsl.SkuCode]; ok {
|
|
||||||
// // 同步商品价格
|
|
||||||
// if utils.Float64TwoInt(utils.Str2Float64(*vsl.SalePrice)*float64(100)) != sku.TaoPrice {
|
|
||||||
// _, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, model.SyncFlagPriceMask, true, true)
|
|
||||||
// if err != nil {
|
|
||||||
// errs = append(errs, fmt.Sprintf("%v", err))
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// // 同步商品上下架状态
|
|
||||||
// // 是否线上可售 是 0:否 1:是。
|
|
||||||
// // 本地sku.Status 0-不可售, 1-可售
|
|
||||||
// if int(*vsl.OnlineSaleFlag) != sku.Status {
|
|
||||||
// // 平台上架本地下架,将平台商品下架
|
|
||||||
// _, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, 56, true, true)
|
|
||||||
// if err != nil {
|
|
||||||
// errs = append(errs, fmt.Sprintf("%v", err))
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if len(errs) == model.NO {
|
|
||||||
// return nil
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return fmt.Errorf("%s", strings.Join(errs, ","))
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//// TiktokSyncSkuPriceAndStatus 校验抖音平台和京西系统商品差异
|
|
||||||
//func TiktokSyncSkuPriceAndStatus(db *dao.DaoDB, sm *model.StoreMap, skuMap map[string]*model.StoreSkuBind) (err error) {
|
|
||||||
// var (
|
|
||||||
// tiktokApi = apimanager.CurAPIManager.GetAPI(sm.VendorID, sm.VendorOrgCode).(*tiktok_api.API)
|
|
||||||
// page = 0
|
// page = 0
|
||||||
// foodListData = make([]product_listV2_response.DataItem, 0, 0)
|
// foodListData = make([]product_listV2_response.DataItem, 0, 0)
|
||||||
// errs = make([]string, 0, 0)
|
// errs = make([]string, 0, 0)
|
||||||
@@ -260,41 +393,37 @@ package enterprise
|
|||||||
// for _, vsl := range foodListData {
|
// for _, vsl := range foodListData {
|
||||||
// if sku, ok := skuMap[vsl.OuterProductId]; ok {
|
// if sku, ok := skuMap[vsl.OuterProductId]; ok {
|
||||||
// // 同步商品价格
|
// // 同步商品价格
|
||||||
// if vsl.SalePrice != sku.EbaiPrice {
|
// if vsl.DiscountPrice != int64(sku.EbaiPrice) {
|
||||||
// _, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, model.SyncFlagPriceMask, true, true)
|
// _, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, model.SyncFlagPriceMask, true, true)
|
||||||
|
// if err != nil {
|
||||||
|
// errs = append(errs, fmt.Sprintf("抖音对比商品价格异常skuid:%d,错误%v", sku.SkuID, err))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
// // 同步商品上下架状态
|
// // 同步商品上下架状态
|
||||||
// // 0-在线 1-下线
|
// // 0-在线 1-下线
|
||||||
// // 本地sku.Status 0-不可售,1-可售
|
// // 本地sku.Status 0-不可售,1-可售
|
||||||
// if vsl.Status == int64(sku.Status) {
|
// if vsl.Status == int64(sku.Status) {
|
||||||
// skuAndName, _ := dao.GetSkus(db, []int{sku.SkuID}, nil, nil, nil, nil)
|
// if sku.Status == model.SkuStatusNormal {
|
||||||
// if len(skuAndName) != model.NO {
|
// param := &sku_syncStock_request.SkuSyncStockParam{
|
||||||
// globals.SugarLogger.Debugf("抖音更新商品信息获取nameId异常")
|
// ProductId: sku.DdID,
|
||||||
// continue
|
// Incremental: false,
|
||||||
|
// StockNum: 99999,
|
||||||
|
// OutSkuId: int64(sku.SkuID),
|
||||||
|
// }
|
||||||
|
// if err = tiktokApi.UpdateSkuStock(param); err != nil {
|
||||||
|
// errs = append(errs, fmt.Sprintf("抖音对比商品上架异常skuid:%d,错误%v", sku.SkuID, err))
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// param := &sku_syncStock_request.SkuSyncStockParam{
|
||||||
|
// ProductId: sku.DdID,
|
||||||
|
// Incremental: false,
|
||||||
|
// StockNum: 0,
|
||||||
|
// OutSkuId: int64(sku.SkuID),
|
||||||
|
// }
|
||||||
|
// if err = tiktokApi.UpdateSkuStock(param); err != nil {
|
||||||
|
// errs = append(errs, fmt.Sprintf("抖音对比商品下架异常skuid:%d,错误%v", sku.SkuID, err))
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
// skuBindInfo := make([]*cms.StoreSkuBindInfo, 0, 0)
|
|
||||||
// skuBindInfo = append(skuBindInfo, &cms.StoreSkuBindInfo{
|
|
||||||
// StoreID: 0,
|
|
||||||
// NameID: skuAndName[0].NameID,
|
|
||||||
// UnitPrice: 0,
|
|
||||||
// IsFocus: 0,
|
|
||||||
// IsSale: 0,
|
|
||||||
// SubStoreID: 0,
|
|
||||||
// StatusSaleBegin: nil,
|
|
||||||
// StatusSaleEnd: nil,
|
|
||||||
// UPC: "",
|
|
||||||
// MtLadderBoxPrice: 0,
|
|
||||||
// Skus: append([]*cms.StoreSkuBindSkuInfo{}, &cms.StoreSkuBindSkuInfo{
|
|
||||||
// SkuID: sku.SkuID,
|
|
||||||
// IsSale: -1,
|
|
||||||
// Stock: nil,
|
|
||||||
// MtLadderBoxPrice: 0,
|
|
||||||
// }),
|
|
||||||
// })
|
|
||||||
// // 平台上架本地下架,将平台商品下架
|
|
||||||
// //_, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, 56, true, true)
|
|
||||||
// //_, err = cms.UpdateStoresSkus(jxcontext.AdminCtx, nil, 0, db, []int{sm.VendorID}, []int{sku.StoreID}, false, []int{sku.SkuID}, []int{27379}, 56, true, true)
|
|
||||||
// retVal, err = cms.UpdateStoresSkus(jxcontext.AdminCtx, 0, []int{sm.StoreID}, skuBindInfo, false, false, false, false)
|
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|||||||
@@ -825,6 +825,7 @@ func CreateActForMtByOrder(ctx *jxcontext.Context, act *model.Act, vendorIDs []i
|
|||||||
})
|
})
|
||||||
for i := 1; i <= len(actData2); i++ {
|
for i := 1; i <= len(actData2); i++ {
|
||||||
actData2[i-1].Sequence = i
|
actData2[i-1].Sequence = i
|
||||||
|
actData2[i-1].OrderLimit = 1
|
||||||
}
|
}
|
||||||
api.MtwmAPI.RetailDiscountBatchSave2(storeDetail.VendorStoreID, mtwmapi.RetailActTypeDirectDown, actData2)
|
api.MtwmAPI.RetailDiscountBatchSave2(storeDetail.VendorStoreID, mtwmapi.RetailActTypeDirectDown, actData2)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap
|
|||||||
case model.VendorIDDD:
|
case model.VendorIDDD:
|
||||||
Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2)
|
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)
|
tiktokStatusPush(order, msg.OrderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), goodsOrder.VendorOrgCode)
|
||||||
case model.VendorIDMTWM, model.VendorIDTaoVegetable, model.VendorIDEBAI:
|
case model.VendorIDMTWM, model.VendorIDTaoVegetable, model.VendorIDEBAI, model.VendorIDJD:
|
||||||
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||||
if goodsOrder.VendorID == model.VendorIDTaoVegetable && msg.OrderStatus == dadaapi.OrderStatusAccepted {
|
if goodsOrder.VendorID == model.VendorIDTaoVegetable && msg.OrderStatus == dadaapi.OrderStatusAccepted {
|
||||||
tao_vegetable.PushDelivererChangeInfo(goodsOrder, order, tao.TaoDeliveryTypeDD)
|
tao_vegetable.PushDelivererChangeInfo(goodsOrder, order, tao.TaoDeliveryTypeDD)
|
||||||
|
|||||||
@@ -323,7 +323,7 @@ func OnWaybillMsg(msg *fnpsapi.OrderStatusNottify, resultParam *fnpsapi.ShortSta
|
|||||||
case model.VendorIDDD:
|
case model.VendorIDDD:
|
||||||
Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2)
|
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)
|
tiktokStatusPush(order, orderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), good.VendorOrgCode)
|
||||||
case model.VendorIDMTWM, model.VendorIDTaoVegetable, model.VendorIDEBAI:
|
case model.VendorIDMTWM, model.VendorIDTaoVegetable, model.VendorIDEBAI, model.VendorIDJD:
|
||||||
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||||
if good.VendorID == model.VendorIDTaoVegetable && cc.OrderStatus == fnpsapi.OrderStatusAssigned {
|
if good.VendorID == model.VendorIDTaoVegetable && cc.OrderStatus == fnpsapi.OrderStatusAssigned {
|
||||||
tao_vegetable.PushDelivererChangeInfo(good, order, tao.TaoDeliveryTypeFN)
|
tao_vegetable.PushDelivererChangeInfo(good, order, tao.TaoDeliveryTypeFN)
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m
|
|||||||
case model.VendorIDDD:
|
case model.VendorIDDD:
|
||||||
Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2)
|
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)
|
pushMTPSToTiktok(msg.Status, order, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), goodsOrder.VendorOrgCode)
|
||||||
case model.VendorIDMTWM, model.VendorIDTaoVegetable, model.VendorIDEBAI:
|
case model.VendorIDMTWM, model.VendorIDTaoVegetable, model.VendorIDEBAI, model.VendorIDJD:
|
||||||
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||||
if goodsOrder.VendorID == model.VendorIDTaoVegetable && msg.Status == mtpsapi.OrderStatusAccepted {
|
if goodsOrder.VendorID == model.VendorIDTaoVegetable && msg.Status == mtpsapi.OrderStatusAccepted {
|
||||||
tao_vegetable.PushDelivererChangeInfo(goodsOrder, order, tao.TaoDeliveryTypeMT)
|
tao_vegetable.PushDelivererChangeInfo(goodsOrder, order, tao.TaoDeliveryTypeMT)
|
||||||
|
|||||||
@@ -222,7 +222,6 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
|||||||
riderInfo.ThirdCarrierOrderId = riderInfo.OrderId
|
riderInfo.ThirdCarrierOrderId = riderInfo.OrderId
|
||||||
}
|
}
|
||||||
|
|
||||||
// 目前只推送美团骑手信息
|
|
||||||
switch v.VendorID {
|
switch v.VendorID {
|
||||||
case model.VendorIDMTWM: // 美团订单
|
case model.VendorIDMTWM: // 美团订单
|
||||||
if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil {
|
if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil {
|
||||||
@@ -245,15 +244,13 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case model.VendorIDJD: // 京东发单
|
case model.VendorIDJD: // 京东发单
|
||||||
continue
|
if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil {
|
||||||
case model.VendorIDGD: // 美团发单
|
if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorStoreID, utils.Struct2Map(riderInfo, "", true)); err != nil {
|
||||||
continue
|
globals.SugarLogger.Debugf("Error pushing meituan rider information :%s--%s--%v", v.VendorOrderID, utils.Format4Output(riderInfo, false), err)
|
||||||
case model.VendorIDYB: // 银豹发单
|
}
|
||||||
continue
|
}
|
||||||
case model.VendorIDJDShop: // 京东商城
|
case model.VendorIDJDShop: // 京东商城
|
||||||
continue
|
continue
|
||||||
case model.VendorIDWSC: // 微盟微商城
|
|
||||||
continue
|
|
||||||
case model.VendorIDDD: // 抖店小时达
|
case model.VendorIDDD: // 抖店小时达
|
||||||
riderInfo.LogisticsProviderCode = tiktok_api.JxVendorId2TiktokCode(v.WaybillVendorID)
|
riderInfo.LogisticsProviderCode = tiktok_api.JxVendorId2TiktokCode(v.WaybillVendorID)
|
||||||
if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil {
|
if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil {
|
||||||
@@ -261,8 +258,6 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
|
|||||||
globals.SugarLogger.Debugf("Error pushing tiktok rider information :%s--%s--%v", v.VendorOrderID, utils.Format4Output(riderInfo, false), err)
|
globals.SugarLogger.Debugf("Error pushing tiktok rider information :%s--%s--%v", v.VendorOrderID, utils.Format4Output(riderInfo, false), err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case model.VendorIDJX: // 京西平台
|
|
||||||
continue
|
|
||||||
case model.VendorIDTaoVegetable: // 淘鲜达
|
case model.VendorIDTaoVegetable: // 淘鲜达
|
||||||
// 定时任务刷新骑手坐标
|
// 定时任务刷新骑手坐标
|
||||||
if orderId == "" {
|
if orderId == "" {
|
||||||
|
|||||||
@@ -460,7 +460,7 @@ func OnWaybillMsg(urlIndex string, msg interface{}) (resp *sfps2.CallbackRespons
|
|||||||
case model.VendorIDDD:
|
case model.VendorIDDD:
|
||||||
Lng, Lat, _ := partner.GetRidderPositionGetter(order.WaybillVendorID).GetRidderPosition(nil, order.VendorOrderID, order.VendorOrderID, order.VendorWaybillID, order.VendorWaybillID2)
|
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)
|
tiktokStatusPush(order, orderStatus, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), goodsOrder.VendorOrgCode)
|
||||||
case model.VendorIDTaoVegetable, model.VendorIDMTWM, model.VendorIDEBAI:
|
case model.VendorIDTaoVegetable, model.VendorIDMTWM, model.VendorIDEBAI, model.VendorIDJD:
|
||||||
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID, order.Status) // 骑手位置更新
|
||||||
if goodsOrder.VendorID == model.VendorIDTaoVegetable && orderStatus == sfps2.OrderStatusTakeOrder {
|
if goodsOrder.VendorID == model.VendorIDTaoVegetable && orderStatus == sfps2.OrderStatusTakeOrder {
|
||||||
tao_vegetable.PushDelivererChangeInfo(goodsOrder, order, tao.TaoDeliveryTypeSF)
|
tao_vegetable.PushDelivererChangeInfo(goodsOrder, order, tao.TaoDeliveryTypeSF)
|
||||||
|
|||||||
@@ -440,7 +440,7 @@ func OnWaybillMsg(req *uuptapi.WaybillCallbackParam) (resp *uuptapi.CallbackResp
|
|||||||
case model.VendorIDDD:
|
case model.VendorIDDD:
|
||||||
Lng, Lat, _ := partner.GetRidderPositionGetter(param.WaybillVendorID).GetRidderPosition(nil, param.VendorOrderID, param.VendorOrderID, param.VendorWaybillID, param.VendorWaybillID2)
|
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)
|
tiktokStatusPush(param, req.State, utils.Float64ToStr(Lng), utils.Float64ToStr(Lat), good.VendorOrgCode)
|
||||||
case model.VendorIDMTWM, model.VendorIDTaoVegetable, model.VendorIDEBAI:
|
case model.VendorIDMTWM, model.VendorIDTaoVegetable, model.VendorIDEBAI, model.VendorIDJD:
|
||||||
delivery.GetOrderRiderInfoToPlatform(param.VendorOrderID, param.Status) // 骑手位置更新
|
delivery.GetOrderRiderInfoToPlatform(param.VendorOrderID, param.Status) // 骑手位置更新
|
||||||
if good.VendorID == model.VendorIDTaoVegetable && req.State == uuptapi.StateRMGrabsOrder {
|
if good.VendorID == model.VendorIDTaoVegetable && req.State == uuptapi.StateRMGrabsOrder {
|
||||||
tao_vegetable.PushDelivererChangeInfo(good, param, tao.TaoDeliveryTypeOther)
|
tao_vegetable.PushDelivererChangeInfo(good, param, tao.TaoDeliveryTypeOther)
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package jd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
||||||
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
)
|
)
|
||||||
|
|
||||||
func OnOrderMsg(msg *jdapi.CallbackOrderMsg, a *jdapi.API) (retVal *jdapi.CallbackResponse) {
|
func OnOrderMsg(msg *jdapi.CallbackOrderMsg, a *jdapi.API) (retVal *jdapi.CallbackResponse) {
|
||||||
@@ -20,7 +22,9 @@ func OnWaybillMsg(msg *jdapi.CallbackDeliveryStatusMsg) (retVal *jdapi.CallbackR
|
|||||||
|
|
||||||
func OnStoreMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
func OnStoreMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) {
|
||||||
if CurPurchaseHandler != nil {
|
if CurPurchaseHandler != nil {
|
||||||
|
globals.SugarLogger.Debugf("==========msg := %s", utils.Format4Output(msg, false))
|
||||||
retVal = CurPurchaseHandler.OnStoreMsg(AppKey2OrgCode(msg.AppKey), msg)
|
retVal = CurPurchaseHandler.OnStoreMsg(AppKey2OrgCode(msg.AppKey), msg)
|
||||||
|
globals.SugarLogger.Debugf("==========retVal := %s", utils.Format4Output(retVal, false))
|
||||||
}
|
}
|
||||||
return retVal
|
return retVal
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package jd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
@@ -179,5 +180,52 @@ func OnTokenChange(values url.Values) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
|
||||||
|
logisticInfo := jdapi.ReceiveLogisticInfo{
|
||||||
|
OrderId: param["order_id"].(string),
|
||||||
|
DeliveryInfoList: nil,
|
||||||
|
}
|
||||||
|
deliveryInfoList := make([]jdapi.DeliveryInfo, 0, 0)
|
||||||
|
deliverInfo := jdapi.DeliveryInfo{
|
||||||
|
DeliveryManName: "暂无",
|
||||||
|
DeliveryManPhone: "",
|
||||||
|
|
||||||
|
DeliveryCarrierNo: "9966", // 暂时未获取到写死
|
||||||
|
DeliveryCarrierName: "达达配送", // 暂时未获取到写死
|
||||||
|
DeliveryCarrierOrderNo: param["order_id"].(string),
|
||||||
|
|
||||||
|
FailReason: "",
|
||||||
|
OperateTime: utils.GetCurTimeStr(),
|
||||||
|
Operator: jxcontext.AdminCtx.GetUserName(),
|
||||||
|
}
|
||||||
|
switch param["logistics_status"].(int) {
|
||||||
|
case 0:
|
||||||
|
deliverInfo.DeliveryStatus = jdapi.JdDeliveryStatusNew
|
||||||
|
case 10:
|
||||||
|
// 接单、更换骑手、骑手到店、骑手取货 都需要填加:骑手姓名和电话
|
||||||
|
deliverInfo.DeliveryStatus = jdapi.JdDeliveryStatusRiderTaking
|
||||||
|
deliverInfo.DeliveryManName = param["courier_name"].(string)
|
||||||
|
deliverInfo.DeliveryManPhone = param["courier_phone"].(string)
|
||||||
|
case 15:
|
||||||
|
deliverInfo.DeliveryStatus = jdapi.JdDeliveryStatusToStore
|
||||||
|
deliverInfo.DeliveryManName = param["courier_name"].(string)
|
||||||
|
deliverInfo.DeliveryManPhone = param["courier_phone"].(string)
|
||||||
|
case 20:
|
||||||
|
deliverInfo.DeliveryStatus = jdapi.JdDeliveryStatusDelivering
|
||||||
|
deliverInfo.DeliveryManName = param["courier_name"].(string)
|
||||||
|
deliverInfo.DeliveryManPhone = param["courier_phone"].(string)
|
||||||
|
case 40:
|
||||||
|
// 完成和取消状态不通过此接口发送通知消息
|
||||||
|
return nil
|
||||||
|
case 100:
|
||||||
|
// 完成和取消状态不通过此接口发送通知消息
|
||||||
|
return nil
|
||||||
|
case 22:
|
||||||
|
deliverInfo.DeliveryStatus = jdapi.JdDeliveryStatusFail
|
||||||
|
}
|
||||||
|
|
||||||
|
deliveryInfoList = append(deliveryInfoList, deliverInfo)
|
||||||
|
logisticInfo.DeliveryInfoList = deliveryInfoList
|
||||||
|
|
||||||
|
getAPI(vendorOrgCode).ReceiveLogisticInfoForOpenApiPlatform(logisticInfo)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -350,9 +350,6 @@ func (c *PurchaseHandler) OnStoreMsg(vendorOrgCode string, msg *jdapi.CallbackOr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err != nil {
|
|
||||||
globals.SugarLogger.Debugf("OnStoreMsg==============%v", err)
|
|
||||||
}
|
|
||||||
return jdapi.Err2CallbackResponse(err, "")
|
return jdapi.Err2CallbackResponse(err, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,9 +40,10 @@ func actOrderRules2Mtwm(actOrderRules []*model.ActOrderRule) (actDetails []*mtwm
|
|||||||
|
|
||||||
func storeSku2ActData(act *model.Act2, actStoreSku []*model.ActStoreSku2, handler func(int8) bool) (actData []*mtwmapi.RetailDiscountActData) {
|
func storeSku2ActData(act *model.Act2, actStoreSku []*model.ActStoreSku2, handler func(int8) bool) (actData []*mtwmapi.RetailDiscountActData) {
|
||||||
orderLimit := 1
|
orderLimit := 1
|
||||||
if act.LimitCount > 0 {
|
// orderLimit
|
||||||
orderLimit = act.LimitCount
|
//if act.LimitCount > 0 {
|
||||||
}
|
// orderLimit = act.LimitCount
|
||||||
|
//}
|
||||||
for _, v := range actStoreSku {
|
for _, v := range actStoreSku {
|
||||||
if handler == nil || handler(v.SyncStatus) {
|
if handler == nil || handler(v.SyncStatus) {
|
||||||
dayLimit := -1
|
dayLimit := -1
|
||||||
|
|||||||
@@ -37,9 +37,9 @@ func actOrderRules2Mtwm(actOrderRules []*model.ActOrderRule) (actDetails []*mtwm
|
|||||||
|
|
||||||
func storeSku2ActData(act *model.Act2, actStoreSku []*model.ActStoreSku2, handler func(int8) bool) (actData []*mtwmapi.RetailDiscountActData) {
|
func storeSku2ActData(act *model.Act2, actStoreSku []*model.ActStoreSku2, handler func(int8) bool) (actData []*mtwmapi.RetailDiscountActData) {
|
||||||
orderLimit := 1
|
orderLimit := 1
|
||||||
if act.LimitCount > 0 {
|
//if act.LimitCount > 0 {
|
||||||
orderLimit = act.LimitCount
|
// orderLimit = act.LimitCount
|
||||||
}
|
//}
|
||||||
for _, v := range actStoreSku {
|
for _, v := range actStoreSku {
|
||||||
if handler == nil || handler(v.SyncStatus) {
|
if handler == nil || handler(v.SyncStatus) {
|
||||||
dayLimit := -1
|
dayLimit := -1
|
||||||
|
|||||||
@@ -262,9 +262,9 @@ func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, par
|
|||||||
vendorStoreID = order.VendorStoreID
|
vendorStoreID = order.VendorStoreID
|
||||||
}
|
}
|
||||||
|
|
||||||
api := getAPI(vendorOrgCode, 0, vendorStoreID)
|
apiObj := getAPI(vendorOrgCode, 0, vendorStoreID)
|
||||||
// 同步骑手状态
|
// 同步骑手状态
|
||||||
if err = api.OrderStatusAndPsInfoNew(param, vendorStoreID); err != nil {
|
if err = apiObj.OrderStatusAndPsInfoNew(param, vendorStoreID); err != nil {
|
||||||
partner.CurOrderManager.OnOrderMsg(order, param["opcode"].(string), "抖音订单三方配送状态信息回传记录异常:"+err.Error())
|
partner.CurOrderManager.OnOrderMsg(order, param["opcode"].(string), "抖音订单三方配送状态信息回传记录异常:"+err.Error())
|
||||||
}
|
}
|
||||||
if err = SyncOrderRiderLine(vendorOrgCode, vendorStoreID, param); err != nil {
|
if err = SyncOrderRiderLine(vendorOrgCode, vendorStoreID, param); err != nil {
|
||||||
|
|||||||
@@ -149,6 +149,7 @@ func (c *DjswController) StoreCrud() {
|
|||||||
return callbackResponse
|
return callbackResponse
|
||||||
})
|
})
|
||||||
c.Data["json"] = c.transferResponse("StoreCrud", callbackResponse)
|
c.Data["json"] = c.transferResponse("StoreCrud", callbackResponse)
|
||||||
|
globals.SugarLogger.Debugf("==========c.data : %s", utils.Format4Output(c.transferResponse("StoreCrud", callbackResponse), false))
|
||||||
c.ServeJSON()
|
c.ServeJSON()
|
||||||
} else {
|
} else {
|
||||||
c.Abort("404")
|
c.Abort("404")
|
||||||
|
|||||||
Reference in New Issue
Block a user