1
This commit is contained in:
307
business/enterprise/vendor_sku_compare.go
Normal file
307
business/enterprise/vendor_sku_compare.go
Normal file
@@ -0,0 +1,307 @@
|
||||
package enterprise
|
||||
|
||||
//
|
||||
//import (
|
||||
// "fmt"
|
||||
// "git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
||||
// "git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
// tao "git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
||||
// domain585 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability585/domain"
|
||||
// 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_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_listV2/response"
|
||||
// "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
||||
// "git.rosy.net.cn/baseapi/utils"
|
||||
// "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/model"
|
||||
// "git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
// "git.rosy.net.cn/jx-callback/globals"
|
||||
// "git.rosy.net.cn/jx-callback/globals/api/apimanager"
|
||||
// "strings"
|
||||
//)
|
||||
//
|
||||
//// 该函数主要用于对比京西平台商品和各个平台门店商品的差异
|
||||
//// 对比上下架状态以及商品价格差异,相同的不做修改,不同的以京西系统商品为主
|
||||
//
|
||||
//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) {
|
||||
// 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
|
||||
// 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.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)
|
||||
// }
|
||||
// // 同步商品上下架状态
|
||||
// // 0-在线 1-下线
|
||||
// // 本地sku.Status 0-不可售,1-可售
|
||||
// if vsl.Status == int64(sku.Status) {
|
||||
// skuAndName, _ := dao.GetSkus(db, []int{sku.SkuID}, nil, nil, nil, nil)
|
||||
// if len(skuAndName) != model.NO {
|
||||
// globals.SugarLogger.Debugf("抖音更新商品信息获取nameId异常")
|
||||
// continue
|
||||
// }
|
||||
// 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)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if len(errs) == model.NO {
|
||||
// return nil
|
||||
// }
|
||||
//
|
||||
// return fmt.Errorf("%s", strings.Join(errs, ","))
|
||||
//}
|
||||
@@ -6456,6 +6456,7 @@ func SingleBindTaoVegetable(ctx *jxcontext.Context, bind []TaoBindInfo, vendorOr
|
||||
if len(bind) == 0 {
|
||||
return fmt.Errorf("绑定门店数据为空,请检查"), ""
|
||||
}
|
||||
globals.SugarLogger.Debugf("==========bind : %s", utils.Format4Output(bind, false))
|
||||
for _, v := range bind {
|
||||
if len(v.VendorStoreID) == 0 || len(v.VendorStoreName) == 0 {
|
||||
errIDName = append(errIDName, v.VendorStoreID)
|
||||
@@ -6494,6 +6495,8 @@ func SingleBindTaoVegetable(ctx *jxcontext.Context, bind []TaoBindInfo, vendorOr
|
||||
}
|
||||
storeMaps = append(storeMaps, storeMap)
|
||||
}
|
||||
globals.SugarLogger.Debugf("==========storeMaps : %s", utils.Format4Output(storeMaps, false))
|
||||
|
||||
userName := ctx.GetUserName()
|
||||
for _, k := range storeMaps {
|
||||
dao.WrapAddIDCULDEntity(k, userName)
|
||||
@@ -6508,9 +6511,11 @@ func SingleBindTaoVegetable(ctx *jxcontext.Context, bind []TaoBindInfo, vendorOr
|
||||
}
|
||||
}()
|
||||
if err := dao.CreateEntity(db, k); err == nil {
|
||||
globals.SugarLogger.Debugf("==========err1 : %v", err)
|
||||
errList.AddErr(fmt.Errorf("%s:%v", k.VendorStoreID, err))
|
||||
dao.Commit(db, txDB)
|
||||
} else {
|
||||
globals.SugarLogger.Debugf("==========err2 : %v", err)
|
||||
dao.Rollback(db, txDB)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user