商品详情描述图片加入DataResource管理,老数据还未迁移

This commit is contained in:
gazebo
2019-09-26 20:55:08 +08:00
parent 998c087d9f
commit 8a1d364e4e
15 changed files with 141 additions and 80 deletions

View File

@@ -6,7 +6,6 @@ import (
"strconv" "strconv"
"strings" "strings"
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/datares" "git.rosy.net.cn/jx-callback/business/jxutils/datares"
@@ -15,7 +14,6 @@ import (
"git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/business/partner"
"git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api"
) )
type SkuNamesInfo struct { type SkuNamesInfo struct {
@@ -31,14 +29,14 @@ var (
ebaiUploadRTFShopID string // 饿百找一个店用于调用SkuUploadRTF ebaiUploadRTFShopID string // 饿百找一个店用于调用SkuUploadRTF
) )
func getAndSetEbaiUploadRTFShopID() (shopID string) { // func getAndSetEbaiUploadRTFShopID() (shopID string) {
if ebaiUploadRTFShopID == "" { // if ebaiUploadRTFShopID == "" {
if storeDetail, err := dao.GetStoreDetail(dao.GetDB(), 0, model.VendorIDEBAI); err == nil { // if storeDetail, err := dao.GetStoreDetail(dao.GetDB(), 0, model.VendorIDEBAI); err == nil {
ebaiUploadRTFShopID = utils.Int2Str(storeDetail.Store.ID) // ebaiUploadRTFShopID = utils.Int2Str(storeDetail.Store.ID)
} // }
} // }
return ebaiUploadRTFShopID // return ebaiUploadRTFShopID
} // }
// parentID 为-1表示所有 // parentID 为-1表示所有
func GetVendorCategories(ctx *jxcontext.Context, vendorID int, parentID string) (vendorCats []*model.SkuVendorCategory, err error) { func GetVendorCategories(ctx *jxcontext.Context, vendorID int, parentID string) (vendorCats []*model.SkuVendorCategory, err error) {
@@ -583,18 +581,22 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s
// return nil, err // return nil, err
// } // }
// skuNameExt.ImgEbai = imgHintMap[model.VendorIDEBAI] // skuNameExt.ImgEbai = imgHintMap[model.VendorIDEBAI]
dataRes, err2 := datares.TryRegisterDataResource(ctx, skuNameExt.Name, skuNameExt.Img, true, true, false) dataRes, err2 := datares.TryRegisterDataResource(ctx, skuNameExt.Name, skuNameExt.Img, true, model.ImgTypeMain, false)
if err = err2; err != nil { if err = err2; err != nil {
return nil, err return nil, err
} }
skuNameExt.ImgHashCode = dataRes.HashCode skuNameExt.ImgHashCode = dataRes.HashCode
skuNameExt.ImgEbai = dataRes.EbaiURL skuNameExt.ImgEbai = dataRes.EbaiURL
if skuNameExt.Img2 != "" { if skuNameExt.Img2 != "" {
datares.TryRegisterDataResource(ctx, skuNameExt.Name, skuNameExt.Img2, true, true, true) datares.TryRegisterDataResource(ctx, skuNameExt.Name, skuNameExt.Img2, true, model.ImgTypeMain, true)
} }
if skuNameExt.DescImg != "" && getAndSetEbaiUploadRTFShopID() != "" { if skuNameExt.DescImg != "" {
skuNameExt.DescImgEbai, err = api.EbaiAPI.SkuUploadRTF(getAndSetEbaiUploadRTFShopID(), ebaiapi.BuildRFTFromImgs(skuNameExt.DescImg)) dataRes, err2 := datares.TryRegisterDataResource(ctx, skuNameExt.Name+"desc", skuNameExt.DescImg, true, model.ImgTypeDesc, false)
if err = err2; err != nil {
return nil, err
}
skuNameExt.DescImgEbai = dataRes.EbaiURL
} }
if err != nil { if err != nil {
return nil, err return nil, err
@@ -697,7 +699,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
// } // }
// // valid["ImgWeimob"] = imgHintMap[model.VendorIDWSC] // // valid["ImgWeimob"] = imgHintMap[model.VendorIDWSC]
// valid["ImgEbai"] = imgHintMap[model.VendorIDEBAI] // valid["ImgEbai"] = imgHintMap[model.VendorIDEBAI]
dataRes, err2 := datares.TryRegisterDataResource(ctx, skuName.Name, valid["img"].(string), true, true, false) dataRes, err2 := datares.TryRegisterDataResource(ctx, skuName.Name, valid["img"].(string), true, model.ImgTypeMain, false)
if err = err2; err != nil { if err = err2; err != nil {
return 0, err return 0, err
} }
@@ -705,18 +707,17 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
valid["ImgEbai"] = dataRes.EbaiURL valid["ImgEbai"] = dataRes.EbaiURL
} }
if valid["img2"] != nil { if valid["img2"] != nil {
datares.TryRegisterDataResource(ctx, skuName.Name, valid["img2"].(string), true, true, true) datares.TryRegisterDataResource(ctx, skuName.Name, valid["img2"].(string), true, model.ImgTypeMain, true)
} }
if valid["descImg"] != nil { if valid["descImg"] != nil {
descImg := valid["descImg"].(string) descImg := valid["descImg"].(string)
if descImg != "" { if descImg != "" {
if getAndSetEbaiUploadRTFShopID() != "" { dataRes, err2 := datares.TryRegisterDataResource(ctx, skuName.Name+"_desc", descImg, true, model.ImgTypeDesc, false)
valid["descImgEbai"], err = api.EbaiAPI.SkuUploadRTF(getAndSetEbaiUploadRTFShopID(), ebaiapi.BuildRFTFromImgs(descImg)) if err = err2; err != nil {
if err != nil { return 0, err
return 0, err
}
} }
valid["descImgEbai"] = dataRes.EbaiURL
} else { } else {
valid["descImgEbai"] = "" valid["descImgEbai"] = ""
} }

View File

@@ -287,54 +287,51 @@ func InitVendorCategory(ctx *jxcontext.Context, vendorID int) (num int64, err er
} }
func UploadImg4Vendors(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { func UploadImg4Vendors(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) {
return hint, err
db := dao.GetDB() db := dao.GetDB()
rootTask := tasksch.NewSeqTask("合并SkuName图片至DataResource", ctx, rootTask := tasksch.NewSeqTask("合并SkuName图片至DataResource", ctx,
func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
switch step { switch step {
case 0: // 计算SkuName中缺失的hashCode case 0: // 计算SkuName中缺失的hashCode
var skuNameList []*model.SkuName // var skuNameList []*model.SkuName
if err = dao.GetRows(db, &skuNameList, ` // if err = dao.GetRows(db, &skuNameList, `
SELECT t1.* // SELECT t1.*
FROM sku_name t1 // FROM sku_name t1
WHERE t1.img <> '' AND t1.img_hash_code = '' // WHERE t1.img <> '' AND t1.img_hash_code = ''
`); err == nil && len(skuNameList) > 0 { // `); err == nil && len(skuNameList) > 0 {
calcTask := tasksch.NewParallelTask("UploadImg4Vendors calc hashCode", // calcTask := tasksch.NewParallelTask("UploadImg4Vendors calc hashCode",
tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError).SetParallelCount(5), ctx, // tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError).SetParallelCount(5), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { // func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
skuName := batchItemList[0].(*model.SkuName) // skuName := batchItemList[0].(*model.SkuName)
_, skuName.ImgHashCode, err = jxutils.DownloadFileByURL(skuName.Img) // _, skuName.ImgHashCode, err = jxutils.DownloadFileByURL(skuName.Img)
if err == nil { // if err == nil {
dao.UpdateEntity(db, skuName, "ImgHashCode") // dao.UpdateEntity(db, skuName, "ImgHashCode")
} // }
return retVal, err // return retVal, err
}, skuNameList) // }, skuNameList)
tasksch.HandleTask(calcTask, task, false).Run() // tasksch.HandleTask(calcTask, task, false).Run()
_, err = calcTask.GetResult(0) // _, err = calcTask.GetResult(0)
} // }
case 1: // 从SkuName添加缺失的图片至DataResource case 1: // 从SkuName添加缺失的图片至DataResource
_, err = dao.ExecuteSQL(db, ` _, err = dao.ExecuteSQL(db, `
INSERT INTO data_resource(created_at, updated_at, last_operator, hash_code, INSERT INTO data_resource(created_at, updated_at, last_operator, hash_code,
resource_type, name, main_url, ebai_url, qiniu_url, is_vendor) resource_type, name, main_url, ebai_url, qiniu_url, is_vendor)
SELECT t1.created_at, t1.created_at, t1.last_operator, t1.img_hash_code, SELECT t1.created_at, t1.created_at, t1.last_operator, '',
CASE CASE
WHEN INSTR(t1.img, ".jpg") > 0 OR INSTR(t1.img, ".jpeg") > 0 THEN WHEN INSTR(t1.desc_img, ".jpg") > 0 OR INSTR(t1.desc_img, ".jpeg") > 0 THEN
'image/jpeg' 'image/jpeg'
WHEN INSTR(t1.img, ".png") > 0 OR INSTR(t1.img, ".peg") > 0 THEN WHEN INSTR(t1.desc_img, ".png") > 0 OR INSTR(t1.desc_img, ".peg") > 0 THEN
'image/png' 'image/png'
WHEN INSTR(t1.img, ".gif") THEN WHEN INSTR(t1.desc_img, ".gif") THEN
'image/gif' 'image/gif'
ELSE ELSE
'' ''
END resource_type END resource_type,
, t1.name, img, img_ebai, IF(INSTR(t1.img, "image.jxc4.com") > 0, t1.img, '') qiniu_url, 1 CONCAT(t1.name, '_desc'), desc_img main_url, t1.desc_img_ebai ebai_url,
IF(INSTR(t1.desc_img, "image.jxc4.com") > 0, t1.desc_img, '') qiniu_url, 2
FROM sku_name t1 FROM sku_name t1
JOIN ( LEFT JOIN data_resource t2 ON (t2.main_url <> '' AND t2.main_url = t1.desc_img)
SELECT img_hash_code, MAX(id) id WHERE t1.desc_img <> '' AND t2.id IS NULL;
FROM sku_name
GROUP BY 1
) t3 ON t3.id = t1.id
LEFT JOIN data_resource t2 ON ((t2.main_url <> '' AND t2.main_url = t1.img) OR (t2.hash_code <> '' AND t2.hash_code = t1.img_hash_code))
WHERE t1.img_hash_code <> '' AND t1.img <> '' AND t2.id IS NULL;
`) `)
case 2: // 统一SkuName中同hashCode不同图片地址至同一地址 case 2: // 统一SkuName中同hashCode不同图片地址至同一地址
_, err = dao.ExecuteSQL(db, ` _, err = dao.ExecuteSQL(db, `

View File

@@ -5,7 +5,6 @@ import (
"strings" "strings"
"time" "time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils"
"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/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
@@ -76,7 +75,7 @@ func getMimeTypeFromURL(resourceURL string) (mimeType string) {
return mimeType return mimeType
} }
func RegisterDataResource(ctx *jxcontext.Context, name, resourceURL, mimeType, hashCode string, resBinary []byte, isUpload2Vendor, isAsync bool) (dataRes *model.DataResource, err error) { func RegisterDataResource(ctx *jxcontext.Context, name, resourceURL, mimeType, hashCode string, resBinary []byte, imgType int, isAsync bool) (dataRes *model.DataResource, err error) {
if model.ValidMimeTypes[mimeType] == nil { if model.ValidMimeTypes[mimeType] == nil {
return nil, fmt.Errorf("MIME type:%s非法", mimeType) return nil, fmt.Errorf("MIME type:%s非法", mimeType)
} }
@@ -85,7 +84,7 @@ func RegisterDataResource(ctx *jxcontext.Context, name, resourceURL, mimeType, h
HashCode: hashCode, HashCode: hashCode,
ResourceType: mimeType, ResourceType: mimeType,
MainURL: resourceURL, MainURL: resourceURL,
IsVendor: int8(utils.Bool2Int(isUpload2Vendor)), IsVendor: int8(imgType),
} }
vendorID := jxutils.GuessDataResourceVendor(resourceURL) vendorID := jxutils.GuessDataResourceVendor(resourceURL)
@@ -105,14 +104,14 @@ func RegisterDataResource(ctx *jxcontext.Context, name, resourceURL, mimeType, h
} }
return dataRes, err return dataRes, err
} }
if isUpload2Vendor { if imgType > 0 {
// 忽略上传错误 // 忽略上传错误
UploadImage2Vendors(ctx, nil, dataRes, resBinary, isAsync) UploadImage2Vendors(ctx, nil, dataRes, resBinary, isAsync)
} }
return dataRes, err return dataRes, err
} }
func TryRegisterDataResource(ctx *jxcontext.Context, name, resourceURL string, isAllowDownLoad, isUpload2Vendor, isAsync bool) (dataRes *model.DataResource, err error) { func TryRegisterDataResource(ctx *jxcontext.Context, name, resourceURL string, isAllowDownLoad bool, imgType int, isAsync bool) (dataRes *model.DataResource, err error) {
dataRes = &model.DataResource{ dataRes = &model.DataResource{
MainURL: resourceURL, MainURL: resourceURL,
} }
@@ -138,7 +137,7 @@ func TryRegisterDataResource(ctx *jxcontext.Context, name, resourceURL string, i
} else { } else {
hashCode = value.(string) hashCode = value.(string)
} }
return RegisterDataResource(ctx, name, resourceURL, getMimeTypeFromURL(resourceURL), hashCode, resBinary, isUpload2Vendor, isAsync) return RegisterDataResource(ctx, name, resourceURL, getMimeTypeFromURL(resourceURL), hashCode, resBinary, imgType, isAsync)
} }
func GetDataResource(ctx *jxcontext.Context, hashCode string) (resourceURL string, err error) { func GetDataResource(ctx *jxcontext.Context, hashCode string) (resourceURL string, err error) {
@@ -185,7 +184,7 @@ func UploadImage2Vendors(ctx *jxcontext.Context, parentTask tasksch.ITask, dataR
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
vendorID := batchItemList[0].(int) vendorID := batchItemList[0].(int)
if handler := partner.GetPurchasePlatformFromVendorID(vendorID); handler != nil { if handler := partner.GetPurchasePlatformFromVendorID(vendorID); handler != nil {
imgHint, err2 := handler.UploadImg(ctx, dataRes.MainURL, imgData, imgName) imgHint, err2 := handler.UploadImg(ctx, dataRes.MainURL, imgData, imgName, int(dataRes.IsVendor))
if err = err2; err == nil { if err = err2; err == nil {
retVal = [][]interface{}{ retVal = [][]interface{}{
[]interface{}{ []interface{}{

View File

@@ -1,5 +1,10 @@
package model package model
const (
ImgTypeMain = 1 // 商品主图
ImgTypeDesc = 2 // 商品描述详情
)
var ( var (
ValidMimeTypes = map[string][]string{ ValidMimeTypes = map[string][]string{
"image/jpeg": []string{"jpeg", "jpg"}, "image/jpeg": []string{"jpeg", "jpg"},

View File

@@ -26,7 +26,7 @@ func GetNeedUploadDataResource(db *DaoDB) (dataResList []*model.DataResource, er
sql := ` sql := `
SELECT t1.* SELECT t1.*
FROM data_resource t1 FROM data_resource t1
WHERE t1.is_vendor = 1 AND (t1.ebai_url = '' OR t1.mtwm_url = '')` WHERE t1.is_vendor <> 0 AND (t1.ebai_url = '' OR t1.mtwm_url = '')`
err = GetRows(db, &dataResList, sql) err = GetRows(db, &dataResList, sql)
return dataResList, err return dataResList, err
} }

View File

@@ -222,14 +222,16 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, isDirty bool)
SELECT t1.id bind_id, t1.sku_id, t1.price, t1.unit_price, t1.status store_sku_status, %s.%s_id vendor_sku_id, SELECT t1.id bind_id, t1.sku_id, t1.price, t1.unit_price, t1.status store_sku_status, %s.%s_id vendor_sku_id,
t1.%s_sync_status store_sku_sync_status, %s vendor_name_id, t1.store_id, t1.deleted_at bind_deleted_at, t1.%s_sync_status store_sku_sync_status, %s vendor_name_id, t1.store_id, t1.deleted_at bind_deleted_at,
t2.*, t2.*,
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.%s desc_img, t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc,
IF(t11.%s <> '', t11.%s, t3.img) img, IF(t11.%s <> '', t11.%s, t3.img) img,
IF(t12.%s <> '', t12.%s, t3.img2) img2, IF(t12.%s <> '', t12.%s, t3.img2) img2,
IF(t13.%s <> '', t13.%s, t3.%s) desc_img,
t4.%s_category_id vendor_vendor_cat_id` t4.%s_category_id vendor_vendor_cat_id`
fmtParams := []interface{}{ fmtParams := []interface{}{
tableName, fieldPrefix, fieldPrefix, vendorSkuNameField, GetDescImgFieldName(vendorID), tableName, fieldPrefix, fieldPrefix, vendorSkuNameField,
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID), GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID), GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID), GetDescImgFieldName(vendorID),
fieldPrefix, fieldPrefix,
} }
if isSingleStorePF { if isSingleStorePF {
@@ -249,7 +251,9 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, isDirty bool)
LEFT JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ? AND t3.status = ? LEFT JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ? AND t3.status = ?
LEFT JOIN sku_category t4 ON t3.category_id = t4.id AND t4.deleted_at = ? LEFT JOIN sku_category t4 ON t3.category_id = t4.id AND t4.deleted_at = ?
LEFT JOIN data_resource t11 ON t11.main_url = t3.img LEFT JOIN data_resource t11 ON t11.main_url = t3.img
LEFT JOIN data_resource t12 ON t12.main_url = t3.img2` LEFT JOIN data_resource t12 ON t12.main_url = t3.img2
LEFT JOIN data_resource t13 ON t13.main_url = t3.desc_img
`
sqlParams := []interface{}{ sqlParams := []interface{}{
utils.DefaultTimeValue, utils.DefaultTimeValue,
model.SkuStatusNormal, model.SkuStatusNormal,
@@ -308,9 +312,10 @@ func GetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSyncInf
SELECT t1.id bind_id, t1.price, t1.unit_price, t1.status store_sku_status, t2.%s_id vendor_sku_id, SELECT t1.id bind_id, t1.price, t1.unit_price, t1.status store_sku_status, t2.%s_id vendor_sku_id,
t1.%s_sync_status store_sku_sync_status, t1.store_id, t1.deleted_at bind_deleted_at, t1.%s_sync_status store_sku_sync_status, t1.store_id, t1.deleted_at bind_deleted_at,
t2.*, t2.id sku_id, t2.*, t2.id sku_id,
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.desc_img, t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc,
IF(t11.%s <> '', t11.%s, t3.img) img, IF(t11.%s <> '', t11.%s, t3.img) img,
IF(t12.%s <> '', t12.%s, t3.img2) img2, IF(t12.%s <> '', t12.%s, t3.img2) img2,
IF(t13.%s <> '', t13.%s, t3.desc_img) desc_img,
t4.%s_category_id vendor_vendor_cat_id, t4.%s_category_id vendor_vendor_cat_id,
t4.%s_sync_status store_cat_sync_status, t4.%s_id vendor_cat_id, t4.%s_sync_status store_cat_sync_status, t4.%s_id vendor_cat_id,
t5sku.%s_sync_status sku_store_cat_sync_status, t5sku.%s_id sku_vendor_cat_id t5sku.%s_sync_status sku_store_cat_sync_status, t5sku.%s_id sku_vendor_cat_id
@@ -321,6 +326,7 @@ func GetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSyncInf
LEFT JOIN sku_category t5sku ON t2.category_id = t5sku.id LEFT JOIN sku_category t5sku ON t2.category_id = t5sku.id
LEFT JOIN data_resource t11 ON t11.main_url = t3.img LEFT JOIN data_resource t11 ON t11.main_url = t3.img
LEFT JOIN data_resource t12 ON t12.main_url = t3.img2 LEFT JOIN data_resource t12 ON t12.main_url = t3.img2
LEFT JOIN data_resource t13 ON t13.main_url = t3.desc_img
WHERE t2.deleted_at = ? AND t2.status = ? AND t2.%s_id <> 0 WHERE t2.deleted_at = ? AND t2.status = ? AND t2.%s_id <> 0
ORDER BY t1.price DESC` ORDER BY t1.price DESC`
sqlParams := []interface{}{ sqlParams := []interface{}{
@@ -337,6 +343,7 @@ func GetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSyncInf
fieldPrefix, fieldPrefix,
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID), GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID), GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
GetDataResFieldName(vendorID), GetDataResFieldName(vendorID),
fieldPrefix, fieldPrefix,
fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix,
fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix,

View File

@@ -151,7 +151,7 @@ type IPurchasePlatformHandler interface {
RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) RefreshAllStoresID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error)
UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string) (imgHint string, err error) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error)
} }
// db *dao.DaoDB, // db *dao.DaoDB,

View File

@@ -1,6 +1,8 @@
package ebai package ebai
import ( import (
"sync"
"git.rosy.net.cn/baseapi/platformapi/ebaiapi" "git.rosy.net.cn/baseapi/platformapi/ebaiapi"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
@@ -18,6 +20,9 @@ var (
type PurchaseHandler struct { type PurchaseHandler struct {
partner.BasePurchasePlatform partner.BasePurchasePlatform
putils.DefSingleStorePlatform putils.DefSingleStorePlatform
shopList []*ebaiapi.ShopInfo
locker sync.RWMutex
} }
func init() { func init() {
@@ -44,16 +49,60 @@ func (p *PurchaseHandler) GetVendorID() int {
return model.VendorIDEBAI return model.VendorIDEBAI
} }
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string) (imgHint string, err error) { func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
globals.SugarLogger.Debugf("ebai UploadImg imgURL:%s, imgName:%s", imgURL, imgName) globals.SugarLogger.Debugf("ebai UploadImg imgURL:%s, imgName:%s, imgType:%d", imgURL, imgName, imgType)
if globals.EnableEbaiStoreWrite { if globals.EnableEbaiStoreWrite {
imgHint, err = api.EbaiAPI.PictureUpload(imgURL, imgData) if imgType == model.ImgTypeMain {
imgHint, err = api.EbaiAPI.PictureUpload(imgURL, imgData)
} else if imgType == model.ImgTypeMain {
imgHint, err = api.EbaiAPI.SkuUploadRTF(p.getShopID4UploadRTF(), ebaiapi.BuildRFTFromImgs(imgURL))
}
} else { } else {
imgHint = imgURL + ".ebai" imgHint = imgURL + ".ebai"
} }
return imgHint, err return imgHint, err
} }
func getShopIDFromList(shopList []*ebaiapi.ShopInfo) (shopID string) {
if len(shopList) > 0 {
shopID = shopList[0].ShopID
}
return shopID
}
func (p *PurchaseHandler) getShopID4UploadRTF() (shopID string) {
var shopList []*ebaiapi.ShopInfo
p.locker.RLock()
shopList = p.shopList
p.locker.RUnlock()
if len(shopList) > 0 {
return getShopIDFromList(shopList)
}
p.locker.Lock()
shopList = p.shopList
if len(shopList) > 0 {
p.locker.Unlock()
return getShopIDFromList(shopList)
}
defer p.locker.Unlock()
shopList, err := api.EbaiAPI.ShopList(ebaiapi.SysStatusAll)
if err == nil {
if len(shopList) > 0 {
p.shopList = shopList
shopID = getShopIDFromList(shopList)
} else {
// p.shopList = []*ebaiapi.ShopInfo{
// &ebaiapi.ShopInfo{
// ShopID: "",
// },
// }
}
}
return shopID
}
func (p *PurchaseHandler) getVendorCategories(level int, pid int64) (vendorCats []*model.SkuVendorCategory, err error) { func (p *PurchaseHandler) getVendorCategories(level int, pid int64) (vendorCats []*model.SkuVendorCategory, err error) {
cats, err := api.EbaiAPI.SkuCategoryList("", level, pid) cats, err := api.EbaiAPI.SkuCategoryList("", level, pid)
if err != nil { if err != nil {

View File

@@ -92,7 +92,7 @@ func (c *PurchaseHandler) OnCallbackMsg(msg *elmapi.CallbackMsg) (retVal *elmapi
return retVal return retVal
} }
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string) (imgHint string, err error) { func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
return imgHint, err return imgHint, err
} }

View File

@@ -59,6 +59,6 @@ func JxStoreStatus2JdStatus(status int) (yn, closeStatus int) {
} }
} }
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string) (imgHint string, err error) { func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
return imgHint, err return imgHint, err
} }

View File

@@ -29,6 +29,6 @@ func (c *PurchaseHandler) GetVendorID() int {
return model.VendorIDJX return model.VendorIDJX
} }
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string) (imgHint string, err error) { func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
return imgHint, err return imgHint, err
} }

View File

@@ -166,17 +166,19 @@ func skuStatusJX2Mtwm(status int) int {
return mtwmapi.SellStatusOffline return mtwmapi.SellStatusOffline
} }
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string) (imgHint string, err error) { func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
globals.SugarLogger.Debugf("mtwm UploadImg imgURL:%s, imgName:%s", imgURL, imgName) globals.SugarLogger.Debugf("mtwm UploadImg imgURL:%s, imgName:%s", imgURL, imgName)
poiCode4UploadImg := p.getUploadImgPoiCode() poiCode4UploadImg := p.getUploadImgPoiCode()
if poiCode4UploadImg == "" { if poiCode4UploadImg == "" {
return "", fmt.Errorf("找不到一个美团门店来上传图片") return "", fmt.Errorf("找不到一个美团门店来上传图片")
} }
if globals.EnableMtwmStoreWrite { if globals.EnableMtwmStoreWrite {
if imgData != nil { if imgType > 0 {
imgHint, err = api.MtwmAPI.ImageUpload(poiCode4UploadImg, imgName, imgData) if imgData != nil {
} else { imgHint, err = api.MtwmAPI.ImageUpload(poiCode4UploadImg, imgName, imgData)
imgHint, err = api.MtwmAPI.ImageUploadByURL(poiCode4UploadImg, imgName, imgURL) } else {
imgHint, err = api.MtwmAPI.ImageUploadByURL(poiCode4UploadImg, imgName, imgURL)
}
} }
} else { } else {
imgHint = utils.GetUpperUUID() imgHint = utils.GetUpperUUID()

View File

@@ -68,7 +68,7 @@ func vendorCategoryID2String(catID int64) string {
return "" return ""
} }
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string) (imgHint string, err error) { func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
if globals.EnableWscStoreWrite { if globals.EnableWscStoreWrite {
imgHint, err = api.WeimobAPI.UploadImg(imgData, imgName) imgHint, err = api.WeimobAPI.UploadImg(imgData, imgName)
} }

View File

@@ -190,7 +190,7 @@ func tryRegisterDataRes4Recipe(ctx *jxcontext.Context, name, mainImg string, ste
} }
errList := errlist.New() errList := errlist.New()
for _, v := range imgList { for _, v := range imgList {
_, err := datares.TryRegisterDataResource(ctx, name, v, true, false, true) _, err := datares.TryRegisterDataResource(ctx, name, v, true, 0, true)
errList.AddErr(err) errList.AddErr(err)
} }
return errList.GetErrListAsOne() return errList.GetErrListAsOne()

View File

@@ -105,6 +105,7 @@ func (c *CmsController) GetQiniuUploadToken() {
}) })
} }
// 此函数可以不用调用,当前只有菜谱图片在调用
// @Title 注册数据资源 // @Title 注册数据资源
// @Description 注册数据资源 // @Description 注册数据资源
// @Param token header string true "认证token" // @Param token header string true "认证token"
@@ -117,7 +118,7 @@ func (c *CmsController) GetQiniuUploadToken() {
// @router /RegisterDataResource [post] // @router /RegisterDataResource [post]
func (c *CmsController) RegisterDataResource() { func (c *CmsController) RegisterDataResource() {
c.callRegisterDataResource(func(params *tCmsRegisterDataResourceParams) (retVal interface{}, errCode string, err error) { c.callRegisterDataResource(func(params *tCmsRegisterDataResourceParams) (retVal interface{}, errCode string, err error) {
retVal, err = datares.RegisterDataResource(params.Ctx, params.Name, params.ResourceURL, params.MimeType, params.HashCode, nil, false, true) retVal, err = datares.RegisterDataResource(params.Ctx, params.Name, params.ResourceURL, params.MimeType, params.HashCode, nil, 0, true)
return retVal, "", err return retVal, "", err
}) })
} }