From 95d91e63dc3f81c718ebefd1b3fa82823536d217 Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 25 Sep 2018 18:26:48 +0800 Subject: [PATCH] - update jd store phone and mobile. --- business/model/sku.go | 2 +- business/partner/purchase/ebai/store_sku.go | 157 ++++++++++++++++++-- business/partner/purchase/jd/store.go | 2 + 3 files changed, 150 insertions(+), 11 deletions(-) diff --git a/business/model/sku.go b/business/model/sku.go index 2650e604a..30f9260e2 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -136,7 +136,7 @@ type SkuCategory struct { ElmCategoryID int64 `orm:"column(elm_category_id)" json:"elmCategoryID"` // 这个是指对应的饿了么商品类别 EbaiCategoryID int64 `orm:"column(ebai_category_id)" json:"ebaiCategoryID"` // 这个是指对应的饿百商品类别 - JdID int64 `orm:"column(jd_id)" json:"jdID"` // 这个是指商家自己的商品类别在京东平台上的ID + JdID int64 `orm:"column(jd_id);null" json:"jdID"` // 这个是指商家自己的商品类别在京东平台上的ID JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"` } diff --git a/business/partner/purchase/ebai/store_sku.go b/business/partner/purchase/ebai/store_sku.go index 12a003249..e9d3ebb05 100644 --- a/business/partner/purchase/ebai/store_sku.go +++ b/business/partner/purchase/ebai/store_sku.go @@ -1,30 +1,160 @@ package ebai import ( + "git.rosy.net.cn/baseapi/platformapi/ebaiapi" + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-callback/globals/api" ) +type tStoreSkuFullInfo struct { + model.StoreSkuBind + + SpecQuality float32 `json:"specQuality"` + SpecUnit string `orm:"size(8)" json:"specUnit"` // 质量或容量 + Weight int `json:"weight"` // 重量/质量,单位为克,当相应的SkuName的SpecUnit为g或kg时,必须等于SpecQuality + SkuStatus int + + Prefix string `orm:"size(255)" json:"prefix"` + Name string `orm:"size(255);index" json:"name"` + Comment string `orm:"size(255)" json:"comment"` + IsGlobal int8 `orm:"default(1)" json:"isGlobal"` // 是否是全部(全国)可见,如果否的话,可见性由SkuPlace决定 + Unit string `orm:"size(8)" json:"unit"` + Img string `orm:"size(255)" json:"img"` + PlaceStr string + + CatName string `orm:"size(255)"` + EbaiCategoryID int64 `orm:"column(ebai_category_id)" json:"ebaiCategoryID"` // 这个是指对应的饿百商品类别 + + CatID int `orm:"column(cat_id)"` + CatEbaiID int64 `orm:"column(cat_ebai_id)"` + CatEbaiSyncStatus int + CatLevel int + + ParentCatName string `orm:"size(255)"` + ParentCatID int `orm:"column(parent_cat_id)"` + ParentCatEbaiID int64 `orm:"column(parent_cat_ebai_id)"` + ParentCatEbaiSyncStatus int + ParentCatLevel int +} + func (p *PurchaseHandler) SyncStoreSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isForce bool, userName string) (err error) { return err } func (p *PurchaseHandler) syncOneStoreSkus(db *dao.DaoDB, storeID int, skuIDs []int, isForce bool, userName string) (err error) { - // sql := ` - // SELECT * - // FROM store_sku_bind t1 - // JOIN sku t2 ON t1.sku_id = t2.skuIDs - // JOIN sku_name t3 ON t2.name_id = t3.id - // JOIN sku_category t4 ON t3.category_id = t4.id - // LEFT JOIN store_sku_category_map t5 ON t5.store_id = t1.store_id AND t5.sku_category_id = t4.id - // WHERE t1.store_id = ? AND (t1.ebai_sync_status <> 0 - // ` + sql := ` + SELECT t1.*, t2.spec_quality, t2.spec_unit, t2.weight, t2.status sku_status, + t3.prefix, t3.name, t3.comment, t3.is_global, t3.unit, t3.img, + t4.name cat_name, t4.ebai_category_id, + t4.id cat_id, t4.level cat_level, t5.ebai_id cat_ebai_id, t5.ebai_sync_status cat_ebai_sync_status, + t4p.name parent_cat_name, + t4p.id parent_cat_id, t4p.level parent_cat_level, t5p.ebai_id parent_cat_ebai_id, t5p.ebai_sync_status parent_cat_ebai_sync_status + FROM store_sku_bind t1 + JOIN sku t2 ON t1.sku_id = t2.id + JOIN sku_name t3 ON t2.name_id = t3.id + JOIN sku_category t4 ON t3.category_id = t4.id + JOIN sku_category t4p ON t4p.id = t4.parent_id + LEFT JOIN store_sku_category_map t5 ON t5.store_id = t1.store_id AND t5.sku_category_id = t4.id + LEFT JOIN store_sku_category_map t5p ON t5p.store_id = t1.store_id AND t5p.sku_category_id = t4p.id + WHERE t1.store_id = ? AND (t1.ebai_sync_status <> 0) + ` + sqlParams := []interface{}{ + storeID, + } + if skuIDs != nil && len(skuIDs) > 0 { + sql += " AND t1.sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")" + sqlParams = append(sqlParams, skuIDs) + } + strStoreID := utils.Int2Str(storeID) + var storeSkuInfoList []*tStoreSkuFullInfo + if err = dao.GetRows(db, &storeSkuInfoList, sql, sqlParams...); err == nil { + level1CatList2Add := make(map[string]interface{}) + level2CatList2Add := make(map[string]interface{}) + for _, storeSku := range storeSkuInfoList { + if storeSku.EbaiSyncStatus&model.SyncFlagNewMask != 0 { + if storeSku.ParentCatEbaiID == 0 { + level1CatList2Add[utils.Int2Str(storeSku.ParentCatID)] = map[string]interface{}{ + ebaiapi.KeyShopID: strStoreID, + "parent_category_id": 0, + "name": storeSku.ParentCatName, + "shop_custom_id": storeSku.ParentCatID, + "rank": storeSku.ParentCatLevel + 1, // 饿百是从1开始 + } + } + } + } + level1CatList := utils.MapKV2List(level1CatList2Add) + task := tasksch.RunTask("syncOneStoreSkus level1 cat", false, nil, 0, 1, userName, func(batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + cat := batchItemList[0].(map[string]interface{}) + ebaiCatID, err2 := api.EbaiAPI.ShopCategoryCreate(strStoreID, 0, cat["name"].(string), cat["rank"].(int), cat["shop_custom_id"].(string)) + if err2 == nil { + cat["category_id"] = ebaiCatID + return nil, nil + } + return nil, err2 + }, level1CatList) + if _, err = task.GetResult(0); err == nil { + for _, storeSku := range storeSkuInfoList { + if storeSku.EbaiSyncStatus&model.SyncFlagNewMask != 0 { + if storeSku.CatEbaiID == 0 { + level2CatList2Add[utils.Int2Str(storeSku.CatID)] = map[string]interface{}{ + ebaiapi.KeyShopID: strStoreID, + "parent_category_id": level1CatList2Add[utils.Int2Str(storeSku.ParentCatID)].(map[string]interface{})["category_id"], + "name": storeSku.CatName, + "shop_custom_id": storeSku.CatID, + "rank": storeSku.CatLevel + 1, // 饿百是从1开始 + } + } + } + } + level2CatList := utils.MapKV2List(level1CatList2Add) + task = tasksch.RunTask("syncOneStoreSkus level2 cat", false, nil, 0, 1, userName, func(batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + cat := batchItemList[0].(map[string]interface{}) + ebaiCatID, err2 := api.EbaiAPI.ShopCategoryCreate(strStoreID, 0, cat["name"].(string), cat["rank"].(int), cat["shop_custom_id"].(string)) + if err2 == nil { + cat["category_id"] = ebaiCatID + return nil, nil + } + return nil, err2 + }, level2CatList) + if _, err = task.GetResult(0); err == nil { + task = tasksch.RunTask("syncOneStoreSkus skus", false, nil, 0, 1, userName, func(batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + storeSku := batchItemList[0].(*tStoreSkuFullInfo) + if storeSku.ParentCatEbaiID == 0 { + storeSku.ParentCatEbaiID = level1CatList2Add[utils.Int2Str(storeSku.ParentCatID)].(map[string]interface{})["category_id"].(int64) + } + if storeSku.CatEbaiID == 0 { + storeSku.CatEbaiID = level1CatList2Add[utils.Int2Str(storeSku.CatID)].(map[string]interface{})["category_id"].(int64) + } + updateFields := []string{model.FieldEbaiSyncStatus} + if storeSku.EbaiSyncStatus&model.SyncFlagDeletedMask != 0 { + err = api.EbaiAPI.SkuDelete(strStoreID, utils.Int64ToStr(storeSku.EbaiID)) + } else if storeSku.EbaiSyncStatus&model.SyncFlagNewMask != 0 { + storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, map[string]interface{}{}) + updateFields = append(updateFields, model.FieldEbaiID) + } else if storeSku.EbaiSyncStatus&model.SyncFlagModifiedMask != 0 { + _, err = api.EbaiAPI.SkuUpdate(strStoreID, map[string]interface{}{}) + } + if err == nil { + _, err = dao.UpdateEntity(nil, &storeSku.StoreSkuBind, updateFields...) + } + return nil, err + }, storeSkuInfoList) + _, err = task.GetResult(0) + } + } + } return err } func (p *PurchaseHandler) SyncStoreCategories(db *dao.DaoDB, storeIDs []int, catIDs []int) (err error) { // sql := ` - // SELECT * + // SELECT t1.*, t2.spec_quality, t2.spec_unit, t2.weight, + // t3.prefix, t3.name, t3.comment, t3.is_global, t3.unit, t3.img, + // t4.ebai_category_id, t4.name cat_name, t5.ebai_id cat_id, t5.ebai_category_id // FROM store_sku_bind t1 // JOIN sku t2 ON t1.sku_id = t2.skuIDs // JOIN sku_name t3 ON t2.name_id = t3.id @@ -46,3 +176,10 @@ func (p *PurchaseHandler) ReadStoreCategories(storeID int) (cats []*model.SkuCat func (p *PurchaseHandler) ReadStoreSku(storeID, skuID int) (skuNameExt *model.SkuNameExt, err error) { return skuNameExt, err } + +// func genSkuParamsFromStoreSkuInfo(storeSku *tStoreSkuFullInfo) map[string]interface{} { +// return map[string]interface{}{ +// "" +// } +// return nil +// } diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go index 42056ed0e..8d7670ee4 100644 --- a/business/partner/purchase/jd/store.go +++ b/business/partner/purchase/jd/store.go @@ -113,6 +113,8 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin "lat": jxutils.IntCoordinate2Standard(store.Lat), "city": store.JdCityCode, "county": store.JdDistrictCode, + "phone": store.Tel1, + "mobile": store.Tel2, } if store.DeliveryRangeType == model.DeliveryRangeTypePolygon { params["coordinatePoints"] = store.DeliveryRange