package jd // 这里函数取得的信息,除了与自身实体相关的ID(比如PARENT ID),都已经转换成了本地ID了 import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" ) const ( DefBrandID = 35247 DefJdCategoryID = 20362 ) type skuInfoExt struct { model.SkuName Img string JdID int64 // 商家类别 JdCategoryID int // 到家类别 SkuCatID int64 // 商家特殊类别 } func (p *PurchaseHandler) CreateCategory(cat *model.SkuCategory, userName string) (err error) { if !globals.EnableStoreWrite { return nil } var jdPid int64 if cat.ParentID != 0 { pCat := &model.SkuCategory{} pCat.ID = cat.ParentID if err = dao.GetEntity(nil, pCat); err == nil { jdPid = pCat.JdID } else { return err } } result, err := api.JdAPI.AddShopCategory(jdPid, cat.Name, int(cat.Level), cat.Seq, userName) if err == nil { cat.JdID = utils.Str2Int64(result) } return err } func (p *PurchaseHandler) ReadCategory(vendorCatID string) (cat *model.SkuCategory, err error) { result, err := p.ReadCategories() if err == nil { jdID := utils.Str2Int64(vendorCatID) for _, v := range result { if v.JdID == jdID { return v, nil } } } return nil, err } func (p *PurchaseHandler) ReadCategories() (cats []*model.SkuCategory, err error) { result, err := api.JdAPI.QueryCategoriesByOrgCode() if err == nil { cats = make([]*model.SkuCategory, len(result)) for k, v := range result { cats[k] = &model.SkuCategory{ ParentID: int(v.ParentId), // 这里是暂存,传递数据用,正确的值应该是本地的ID Name: v.Name, Level: int8(v.Level), Seq: v.Sort, JdID: v.Id, } } return cats, nil } return nil, err } func (p *PurchaseHandler) UpdateCategory(cat *model.SkuCategory, userName string) error { if !globals.EnableStoreWrite { return nil } return api.JdAPI.UpdateShopCategory(cat.JdID, cat.Name) } func (p *PurchaseHandler) DeleteCategory(cat *model.SkuCategory, userName string) error { if !globals.EnableStoreWrite { return nil } return api.JdAPI.DelShopCategory(cat.JdID) } func (p *PurchaseHandler) ReorderCategories(parentCat *model.SkuCategory, userName string) (err error) { if !globals.EnableStoreWrite { return nil } var cats []*model.SkuCategory if err = dao.GetRows(nil, &cats, "SELECT * FROM sku_category WHERE parent_id = ? ORDER BY seq", parentCat.ID); err == nil { jdCatIDs := make([]int64, len(cats)) for k, v := range cats { jdCatIDs[k] = v.JdID } err = api.JdAPI.ChangeShopCategoryOrder(parentCat.JdID, jdCatIDs) } return err } func (p *PurchaseHandler) cuSku(sku *model.Sku, handler func(skuExt *skuInfoExt, skuName string, shopCategories []int64, addParams map[string]interface{}) (string, error)) (err error) { if !globals.EnableStoreWrite { return nil } var otherInfo skuInfoExt db := dao.GetDB() err = dao.GetRow(nil, &otherInfo, ` SELECT t2.*, t3.jd_id, t3.jd_category_id, t4.jd_id sku_cat_id FROM sku t1 JOIN sku_name t2 ON t1.name_id = t2.id JOIN sku_category t3 ON t2.category_id = t3.id LEFT JOIN sku_category t4 ON t1.category_id = t4.id WHERE t1.id = ? `, sku.ID) if err == nil { shopCategories := []int64{otherInfo.JdID} if otherInfo.SkuCatID != 0 { shopCategories = append(shopCategories, otherInfo.SkuCatID) } if otherInfo.JdCategoryID == 0 { otherInfo.JdCategoryID = DefJdCategoryID } if otherInfo.BrandID == 0 { otherInfo.BrandID = DefBrandID } addParams := map[string]interface{}{} if otherInfo.IsGlobal == 0 { //如果不是全国可售,要查可售区域 sellPlaces, err2 := dao.GetSellCities(db, otherInfo.ID, model.VendorIDJD) if err = err2; err == nil && len(sellPlaces) > 0 { sellCites := make([]int, len(sellPlaces)) for k, v := range sellPlaces { sellCites[k] = v.JdCode } addParams["sellCities"] = sellCites } } if err == nil { skuName := jxutils.ComposeSkuName(otherInfo.Prefix, otherInfo.Name, otherInfo.Comment, otherInfo.Unit, sku.SpecQuality, sku.SpecUnit, 0) globals.SugarLogger.Debug(skuName) result, err2 := handler(&otherInfo, skuName, shopCategories, addParams) if err = err2; err == nil { sku.JdID = utils.Str2Int64(result) } } } return err } func (p *PurchaseHandler) CreateSku(sku *model.Sku) (err error) { return p.cuSku(sku, func(skuExt *skuInfoExt, skuName string, shopCategories []int64, addParams map[string]interface{}) (string, error) { return api.JdAPI.AddSku(utils.Int2Str(sku.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, skuName, skuExt.Price, jxutils.IntWeight2Float(sku.Weight), []string{skuExt.Img}, 1, true, addParams) }) } func (p *PurchaseHandler) ReadSku(vendorSkuID string) (skuName *model.SkuName, sellPlaces []*model.Place, sku *model.Sku, err error) { result, _, err := api.JdAPI.QuerySkuInfos("", int(utils.Str2Int64(vendorSkuID)), 0, 0, false) if err == nil { if len(result) == 1 { mapData := result[0] skuNameStr := utils.Interface2String(mapData["skuName"]) prefix, name, comment, specUnit, unit, specQuality := jxutils.SplitSkuName(skuNameStr) if name == "" { name = skuNameStr unit = "份" specUnit = "g" } skuName = &model.SkuName{ Prefix: prefix, Name: name, Comment: comment, Unit: unit, Price: int(utils.MustInterface2Int64(mapData["skuPrice"])), } sku = &model.Sku{ SpecQuality: specQuality, SpecUnit: specUnit, Weight: jxutils.FloatWeight2Int(float32(utils.MustInterface2Float64(mapData["weight"]))), JdID: utils.MustInterface2Int64(mapData["skuId"]), } sku.ID = int(utils.Str2Int64(utils.Interface2String(mapData["outSkuId"]))) db := dao.GetDB() shopCategories := utils.Interface2Int64List(mapData["shopCategories"]) if len(shopCategories) > 0 { skuCat := &model.SkuCategory{} if dao.GetRow(db, skuCat, "SELECT * FROM sku_category WHERE jd_id = ?", shopCategories[0]) == nil { skuName.CategoryID = skuCat.ID } } sellCities := utils.Interface2Int64List(mapData["sellCities"]) if len(sellCities) == 0 { skuName.IsGlobal = 1 } else { sellPlaces = make([]*model.Place, 0) err2 := dao.GetRows(db, &sellPlaces, "SELECT * FROM place WHERE jd_code IN (?) AND level = 2", sellCities) globals.SugarLogger.Debug("err2:%v", err2) } return skuName, sellPlaces, sku, nil } } return nil, nil, nil, err } func (p *PurchaseHandler) UpdateSku(sku *model.Sku) (err error) { return p.cuSku(sku, func(skuExt *skuInfoExt, skuName string, shopCategories []int64, addParams map[string]interface{}) (string, error) { params := utils.MergeMaps(addParams) params["categoryId"] = skuExt.JdCategoryID params["shopCategories"] = shopCategories params["brandId"] = skuExt.BrandID params["skuName"] = skuName params["weight"] = jxutils.IntWeight2Float(sku.Weight) params["images"] = []string{skuExt.Img} return api.JdAPI.UpdateSku(utils.Int2Str(sku.ID), params) }) } func (p *PurchaseHandler) DeleteSku(sku *model.Sku) (err error) { if !globals.EnableStoreWrite { return nil } params := map[string]interface{}{ "fixedStatus": 4, } _, err = api.JdAPI.UpdateSku(utils.Int2Str(sku.ID), params) return err }