- cms store management.
This commit is contained in:
@@ -1,13 +1,206 @@
|
||||
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"
|
||||
"git.rosy.net.cn/jx-callback/globals/gormdb"
|
||||
)
|
||||
|
||||
func (p *PurchaseHandler) AddSku(sku *model.Sku) error {
|
||||
// params := map[string]interface{}{
|
||||
// "outSkuId": utils.Int2Str(int(sku.ID)),
|
||||
// "categoryId": skuman.GetJdCategoryID(sku),
|
||||
// }
|
||||
return nil
|
||||
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) {
|
||||
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) error {
|
||||
return api.JdAPI.UpdateShopCategory(cat.JdID, cat.Name)
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) DeleteCategory(cat *model.SkuCategory) error {
|
||||
return api.JdAPI.DelShopCategory(cat.JdID)
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) cuSku(sku *model.Sku, handler func(skuExt *skuInfoExt, skuName string, shopCategories []int64, addParams map[string]interface{}) (string, error)) (err error) {
|
||||
var otherInfo skuInfoExt
|
||||
db := gormdb.GetDB()
|
||||
err = db.Raw(`
|
||||
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).Scan(&otherInfo).Error
|
||||
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(otherInfo.ID, model.VendorIDJD, db)
|
||||
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 := gormdb.GetDB()
|
||||
shopCategories := utils.Interface2Int64List(mapData["shopCategories"])
|
||||
if len(shopCategories) > 0 {
|
||||
skuCat := &model.SkuCategory{}
|
||||
if db.Where("jd_id = ?", shopCategories[0]).Find(skuCat).Error == nil {
|
||||
skuName.CategoryID = skuCat.ID
|
||||
}
|
||||
}
|
||||
sellCities := utils.Interface2Int64List(mapData["sellCities"])
|
||||
if len(sellCities) == 0 {
|
||||
skuName.IsGlobal = 1
|
||||
} else {
|
||||
sellPlaces = make([]*model.Place, 0)
|
||||
err2 := db.Where("jd_code IN (?) AND level = 2", sellCities).Find(&sellPlaces).Error
|
||||
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) {
|
||||
params := map[string]interface{}{
|
||||
"fixedStatus": 4,
|
||||
}
|
||||
_, err = api.JdAPI.UpdateSku(utils.Int2Str(sku.ID), params)
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user