Merge remote-tracking branch 'origin/mark' into don

This commit is contained in:
Rosy-zhudan
2019-09-27 18:04:57 +08:00
20 changed files with 227 additions and 105 deletions

View File

@@ -55,7 +55,7 @@ func (c *BaseScheduler) CreateWaybillOnProviders(ctx *jxcontext.Context, order *
} else if errList.GetErrListAsOne() == nil { } else if errList.GetErrListAsOne() == nil {
err = fmt.Errorf("orderID:%s没有绑定有效的三方配送门店或没有剩下可用的三方配送", order.VendorOrderID) err = fmt.Errorf("orderID:%s没有绑定有效的三方配送门店或没有剩下可用的三方配送", order.VendorOrderID)
} else { } else {
err = fmt.Errorf("orderID:%s所有运单失败\n%s", order.VendorOrderID, errList.GetErrListAsOne().Error()) err = fmt.Errorf("orderID:%s所有运单失败%s", order.VendorOrderID, errList.GetErrListAsOne().Error())
} }
globals.SugarLogger.Infof("CreateWaybillOnProviders orderID:%s userName:%s error:%v", order.VendorOrderID, userName, err) globals.SugarLogger.Infof("CreateWaybillOnProviders orderID:%s userName:%s error:%v", order.VendorOrderID, userName, err)
return bills, err return bills, err

View File

@@ -579,18 +579,18 @@ 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, model.ImgTypeMain, false) dataRes, err2 := datares.TryRegisterDataResource(ctx, skuNameExt.Name, skuNameExt.Img, 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, model.ImgTypeMain, true) datares.TryRegisterDataResource(ctx, skuNameExt.Name, skuNameExt.Img2, model.ImgTypeMain, true)
} }
if skuNameExt.DescImg != "" { if skuNameExt.DescImg != "" {
dataRes, err2 := datares.TryRegisterDataResource(ctx, skuNameExt.Name+"desc", skuNameExt.DescImg, true, model.ImgTypeDesc, false) dataRes, err2 := datares.TryRegisterDataResource(ctx, skuNameExt.Name+"desc", skuNameExt.DescImg, model.ImgTypeDesc, false)
if err = err2; err != nil { if err = err2; err != nil {
return nil, err return nil, err
} }
@@ -697,7 +697,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, model.ImgTypeMain, false) dataRes, err2 := datares.TryRegisterDataResource(ctx, skuName.Name, valid["img"].(string), model.ImgTypeMain, false)
if err = err2; err != nil { if err = err2; err != nil {
return 0, err return 0, err
} }
@@ -705,13 +705,13 @@ 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, model.ImgTypeMain, true) datares.TryRegisterDataResource(ctx, skuName.Name, valid["img2"].(string), model.ImgTypeMain, true)
} }
if valid["descImg"] != nil { if valid["descImg"] != nil {
descImg := valid["descImg"].(string) descImg := valid["descImg"].(string)
if descImg != "" { if descImg != "" {
dataRes, err2 := datares.TryRegisterDataResource(ctx, skuName.Name+"_desc", descImg, true, model.ImgTypeDesc, false) dataRes, err2 := datares.TryRegisterDataResource(ctx, skuName.Name+"_desc", descImg, model.ImgTypeDesc, false)
if err = err2; err != nil { if err = err2; err != nil {
return 0, err return 0, err
} }

View File

@@ -524,6 +524,20 @@ func checkCreateStore(store *model.Store) (err error) {
return err return err
} }
func checkStoreDeliveryRange(deliveryRange string) (err error) {
if deliveryRange != "" {
points := jxutils.CoordinateStr2Points(deliveryRange)
for _, point := range points {
for _, coord := range point {
if coord == 0 || math.IsNaN(coord) {
return fmt.Errorf("坐标点数据非法:%s", deliveryRange)
}
}
}
}
return err
}
func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interface{}, userName string) (num int64, err error) { func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interface{}, userName string) (num int64, err error) {
globals.SugarLogger.Debugf("UpdateStore storeID:%d, payload:%s", storeID, utils.Format4Output(payload, true)) globals.SugarLogger.Debugf("UpdateStore storeID:%d, payload:%s", storeID, utils.Format4Output(payload, true))
if err = checkBankBranch(utils.Interface2String(payload["payeeBankBranchName"])); err != nil { if err = checkBankBranch(utils.Interface2String(payload["payeeBankBranchName"])); err != nil {
@@ -537,6 +551,9 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa
} }
valid := dao.StrictMakeMapByStructObject(payload, store, userName) valid := dao.StrictMakeMapByStructObject(payload, store, userName)
if err = checkStoreDeliveryRange(utils.Interface2String(valid["deliveryRange"])); err != nil {
return 0, err
}
if globals.EnableWXAuth2 { if globals.EnableWXAuth2 {
if err = dao.ValidateRoles(db, utils.Interface2String(valid["marketManRole"]), utils.Interface2String(valid["operatorRole"]), utils.Interface2String(valid["operatorRole2"])); err != nil { if err = dao.ValidateRoles(db, utils.Interface2String(valid["marketManRole"]), utils.Interface2String(valid["operatorRole"]), utils.Interface2String(valid["operatorRole2"])); err != nil {
return 0, err return 0, err

View File

@@ -175,16 +175,55 @@ var (
} }
) )
func GetStoreSkus(ctx *jxcontext.Context, storeID int, skuIDs []int, isFocus bool, keyword string, isBySku bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) { func GetStoreSkus(ctx *jxcontext.Context, storeID int, skuIDs []int, isFocus bool, keyword string, isBySku, isAct bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) {
return GetStoresSkus(ctx, []int{storeID}, skuIDs, isFocus, keyword, isBySku, params, offset, pageSize) return GetStoresSkus(ctx, []int{storeID}, skuIDs, isFocus, keyword, isBySku, isAct, params, offset, pageSize)
} }
func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku bool, params map[string]interface{}) (sql string, sqlParams []interface{}, err error) { func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku, isAct bool, params map[string]interface{}) (sql string, sqlParams []interface{}, err error) {
sql = ` sql = `
FROM sku_name t1 FROM sku_name t1
JOIN sku t2 FORCE INDEX(PRIMARY) ON t1.id = t2.name_id AND t2.deleted_at = ?/* AND t2.status = ?*/ JOIN sku t2 FORCE INDEX(PRIMARY) ON t1.id = t2.name_id AND t2.deleted_at = ?/* AND t2.status = ?*/
JOIN store t3 ON t3.deleted_at = ? JOIN store t3 ON t3.deleted_at = ?
` `
sqlParams = []interface{}{
utils.DefaultTimeValue,
// model.SkuStatusNormal,
utils.DefaultTimeValue,
}
if isAct {
sql += `
JOIN (
SELECT t2.store_id, t2.sku_id,
MIN(IF(t3.actual_act_price = 0, NULL, t3.actual_act_price)) actual_act_price, MIN(IF(t2.earning_price = 0, NULL, t2.earning_price)) earning_price /*non-zero min value*/
FROM act t1
JOIN act_store_sku t2 ON t2.act_id = t1.id AND t2.deleted_at = ?
JOIN act_store_sku_map t3 ON t3.bind_id = t2.id AND t3.act_id = t1.id AND (t3.sync_status & ? = 0 OR t1.type = ?)
JOIN act_map t4 ON t4.act_id = t1.id AND t4.vendor_id = t3.vendor_id AND t4.deleted_at = ? AND (t4.sync_status & ? = 0 OR t1.type = ?)
WHERE t1.deleted_at = ? AND t1.status = ? AND NOT (t1.begin_at > ? OR t1.end_at < ?)`
sqlParams = append(sqlParams, []interface{}{
utils.DefaultTimeValue,
model.SyncFlagNewMask,
model.ActSkuFake,
utils.DefaultTimeValue,
model.SyncFlagNewMask,
model.ActSkuFake,
utils.DefaultTimeValue,
model.ActStatusCreated,
time.Now(),
time.Now(),
})
if len(storeIDs) > 0 {
sql += " AND t2.store_id IN (" + dao.GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)
}
if len(skuIDs) > 0 {
sql += " AND t2.sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs)
}
sql += `
GROUP BY 1,2
) ta ON ta.store_id = t3.id AND ta.sku_id = t2.id`
}
if !isFocus { if !isFocus {
sql += " LEFT" sql += " LEFT"
} }
@@ -193,15 +232,12 @@ func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool
LEFT JOIN sku_name_place_bind t5 ON t1.id = t5.name_id AND t3.city_code = t5.place_code LEFT JOIN sku_name_place_bind t5 ON t1.id = t5.name_id AND t3.city_code = t5.place_code
WHERE t1.deleted_at = ? AND (t1.is_global = 1 OR t5.id IS NOT NULL OR 1 = ?)/* AND t1.status = ?*/ WHERE t1.deleted_at = ? AND (t1.is_global = 1 OR t5.id IS NOT NULL OR 1 = ?)/* AND t1.status = ?*/
` `
sqlParams = []interface{}{ sqlParams = append(sqlParams, []interface{}{
utils.DefaultTimeValue,
// model.SkuStatusNormal,
utils.DefaultTimeValue,
utils.DefaultTimeValue, utils.DefaultTimeValue,
utils.DefaultTimeValue, utils.DefaultTimeValue,
utils.Bool2Int(isFocus), utils.Bool2Int(isFocus),
// model.SkuStatusNormal, // model.SkuStatusNormal,
} })
if isFocus { if isFocus {
sql += " AND ((t2.status = ? AND t1.status = ?) OR t4.status = ?)" sql += " AND ((t2.status = ? AND t1.status = ?) OR t4.status = ?)"
sqlParams = append(sqlParams, model.SkuStatusNormal, model.SkuStatusNormal, model.SkuStatusNormal) sqlParams = append(sqlParams, model.SkuStatusNormal, model.SkuStatusNormal, model.SkuStatusNormal)
@@ -318,11 +354,11 @@ func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool
return sql, sqlParams, err return sql, sqlParams, err
} }
func GetStoresSkus(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) { func GetStoresSkus(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku, isAct bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) {
return GetStoresSkusNew(ctx, storeIDs, skuIDs, isFocus, keyword, isBySku, params, offset, pageSize) return GetStoresSkusNew(ctx, storeIDs, skuIDs, isFocus, keyword, isBySku, isAct, params, offset, pageSize)
} }
func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) { func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku, isAct bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) {
if !isFocus && !isBySku && (len(storeIDs) > 1 || len(storeIDs) == 0) { if !isFocus && !isBySku && (len(storeIDs) > 1 || len(storeIDs) == 0) {
return nil, fmt.Errorf("未关注按SkuName只能查询单店") return nil, fmt.Errorf("未关注按SkuName只能查询单店")
} }
@@ -330,7 +366,7 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bo
return nil, fmt.Errorf("GetStoresSkus必须指定storeIDs或skuIDs或分页") return nil, fmt.Errorf("GetStoresSkus必须指定storeIDs或skuIDs或分页")
} }
db := dao.GetDB() db := dao.GetDB()
sql, sqlParams, err := getGetStoresSkusBaseSQL(db, storeIDs, skuIDs, isFocus, keyword, isBySku, params) sql, sqlParams, err := getGetStoresSkusBaseSQL(db, storeIDs, skuIDs, isFocus, keyword, isBySku, isAct, params)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -330,7 +330,7 @@ func CheckSkuDiffBetweenJxAndVendor(ctx *jxcontext.Context, vendorIDList []int,
if isGetJxSkuInfoData == false { //only get once jx sku info list every store id if isGetJxSkuInfoData == false { //only get once jx sku info list every store id
isGetJxSkuInfoData = true isGetJxSkuInfoData = true
jxSkuInfoData, _ := GetStoreSkus(ctx, storeID, []int{}, true, "", true, map[string]interface{}{}, 0, -1) jxSkuInfoData, _ := GetStoreSkus(ctx, storeID, []int{}, true, "", true, false, map[string]interface{}{}, 0, -1)
filterJxSkuInfoMap = GetFilterJxSkuInfoMap(jxSkuInfoData.SkuNames) filterJxSkuInfoMap = GetFilterJxSkuInfoMap(jxSkuInfoData.SkuNames)
} }

View File

@@ -309,7 +309,7 @@ func UploadImg4Vendors(ctx *jxcontext.Context, isAsync, isContinueWhenError bool
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, use_type)
SELECT t1.created_at, t1.created_at, t1.last_operator, t1.img_hash_code, SELECT t1.created_at, t1.created_at, t1.last_operator, t1.img_hash_code,
CASE CASE
WHEN INSTR(t1.desc_img, ".jpg") > 0 OR INSTR(t1.desc_img, ".jpeg") > 0 THEN WHEN INSTR(t1.desc_img, ".jpg") > 0 OR INSTR(t1.desc_img, ".jpeg") > 0 THEN
@@ -324,6 +324,12 @@ func UploadImg4Vendors(ctx *jxcontext.Context, isAsync, isContinueWhenError bool
CONCAT(t1.name, '_desc'), desc_img main_url, t1.desc_img_ebai ebai_url, 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 IF(INSTR(t1.desc_img, "image.jxc4.com") > 0, t1.desc_img, '') qiniu_url, 2
FROM sku_name t1 FROM sku_name t1
JOIN (
SELECT img_hash_code, MAX(id) id, COUNT(*) ct
FROM sku_name
WHERE img_hash_code <> '' AND desc_img <> ''
GROUP BY 1
) t3 ON t3.id = t1.id
LEFT JOIN data_resource t2 ON (t2.main_url <> '' AND t2.main_url = t1.desc_img) LEFT JOIN data_resource t2 ON (t2.main_url <> '' AND t2.main_url = t1.desc_img)
WHERE t1.desc_img <> '' AND t1.img_hash_code <> '' AND t2.id IS NULL; WHERE t1.desc_img <> '' AND t1.img_hash_code <> '' AND t2.id IS NULL;
`) `)

View File

@@ -220,7 +220,7 @@ func GetAllStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeList
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeInfo := batchItemList[0].(*cms.StoreExt) storeInfo := batchItemList[0].(*cms.StoreExt)
storeID := storeInfo.ID storeID := storeInfo.ID
jxSkuInfoData, _ := cms.GetStoreSkus(ctx, storeID, []int{}, true, "", true, map[string]interface{}{}, 0, -1) jxSkuInfoData, _ := cms.GetStoreSkus(ctx, storeID, []int{}, true, "", true, false,map[string]interface{}{}, 0, -1)
jxSkuPriceMapData := make(map[int]int) jxSkuPriceMapData := make(map[int]int)
for _, value := range jxSkuInfoData.SkuNames { for _, value := range jxSkuInfoData.SkuNames {
for _, skuInfo := range value.Skus2 { for _, skuInfo := range value.Skus2 {

View File

@@ -75,7 +75,7 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales
//得到当前门店商品数据 //得到当前门店商品数据
storeSkuMapData := make(map[int]*cms.StoreSkuNameExt) storeSkuMapData := make(map[int]*cms.StoreSkuNameExt)
storeSkuData, err := cms.GetStoreSkus(ctx, storeID, citySkuIDs, true, "", true, map[string]interface{}{}, 0, -1) storeSkuData, err := cms.GetStoreSkus(ctx, storeID, citySkuIDs, true, "", true, false, map[string]interface{}{}, 0, -1)
if err == nil { if err == nil {
for _, value := range storeSkuData.SkuNames { for _, value := range storeSkuData.SkuNames {
for _, skuInfo := range value.Skus2 { for _, skuInfo := range value.Skus2 {
@@ -95,7 +95,7 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeInfo := batchItemList[0].(*cms.StoreExt) storeInfo := batchItemList[0].(*cms.StoreExt)
storeID := storeInfo.ID storeID := storeInfo.ID
jxSkuInfoData, err := cms.GetStoreSkus(ctx, storeID, citySkuIDs, true, "", true, map[string]interface{}{}, 0, -1) jxSkuInfoData, err := cms.GetStoreSkus(ctx, storeID, citySkuIDs, true, "", true, false, map[string]interface{}{}, 0, -1)
jxSkuPriceMapData := make(map[int]int) jxSkuPriceMapData := make(map[int]int)
for _, value := range jxSkuInfoData.SkuNames { for _, value := range jxSkuInfoData.SkuNames {
for _, skuInfo := range value.Skus2 { for _, skuInfo := range value.Skus2 {

View File

@@ -1,7 +1,12 @@
package tempop package tempop
import ( import (
"bytes"
"fmt" "fmt"
"image"
"image/jpeg"
"image/png"
"net/http"
"regexp" "regexp"
"sync" "sync"
"time" "time"
@@ -1103,3 +1108,93 @@ func CreateConsumerFromOrders(ctx *jxcontext.Context, vendorIDs []int, fromDate,
} }
return hint, err return hint, err
} }
func CheckImages(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) {
db := dao.GetDB()
rootTask := tasksch.NewSeqTask("检查图片的有效性", ctx,
func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
switch step {
case 0: // 检查图片的格式与大小
var imgList []*model.DataResource
if err = dao.GetRows(db, &imgList, `
SELECT t1.*
FROM data_resource t1
WHERE t1.use_type = 1
`); err == nil && len(imgList) > 0 {
calcTask := tasksch.NewParallelTask("检查京西图片的有效性",
tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError).SetParallelCount(5), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
dataRes := batchItemList[0].(*model.DataResource)
binaryData, hashCode, err2 := jxutils.DownloadFileByURL(dataRes.MainURL)
if err = err2; err == nil {
errMsg := ""
if hashCode != dataRes.HashCode {
errMsg = fmt.Sprintf("hashcode:%s", hashCode)
dataRes.HashCode = hashCode
}
resType := http.DetectContentType(binaryData)
if resType != dataRes.ResourceType {
errMsg += "," + resType
dataRes.ResourceType = resType
}
var img image.Image
if dataRes.ResourceType == "image/png" {
img, err = png.Decode(bytes.NewReader(binaryData))
} else if dataRes.ResourceType == "image/jpeg" {
img, err = jpeg.Decode(bytes.NewReader(binaryData))
}
if err == nil {
if img != nil {
if img.Bounds().Dx() != 800 || img.Bounds().Dy() != 800 {
errMsg += fmt.Sprintf(",size:%dx%d", img.Bounds().Dx(), img.Bounds().Dy())
}
}
} else {
errMsg += "," + err.Error()
}
if errMsg != "" {
dataRes.Remark = errMsg
dao.UpdateEntity(dao.GetDB(), dataRes, "Remark", "ResourceType", "HashCode")
}
}
return retVal, err
}, imgList)
tasksch.HandleTask(calcTask, task, false).Run()
_, err = calcTask.GetResult(0)
}
case 1: // 检查京东商品图片
skuNameInfo, err2 := cms.GetSkuNames(ctx, "", false, map[string]interface{}{}, 0, -1)
if err = err2; err == nil && len(skuNameInfo.SkuNames) > 0 {
calcTask := tasksch.NewParallelTask("检查京东图片的有效性",
tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError).SetParallelCount(5), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
skuName := batchItemList[0].(*model.SkuNameExt)
for _, sku := range skuName.Skus {
if sku.JdID != 0 {
skuPageInfo, err2 := api.JdAPI.GetSkuPageInfo(sku.JdID)
if err = err2; err == nil && skuPageInfo.FixedStatus && len(skuPageInfo.Image) == 0 {
err = fmt.Errorf("skuName:%d, sku:%d, jdid:%d, 没有图片", skuName.ID, sku.ID, sku.JdID)
skuName.ImgHashCode = "np"
dao.UpdateEntity(dao.GetDB(), &skuName.SkuName, "ImgHashCode")
}
break
}
}
return retVal, err
}, skuNameInfo.SkuNames)
tasksch.HandleTask(calcTask, task, false).Run()
_, err = calcTask.GetResult(0)
}
}
return result, err
}, 2)
tasksch.HandleTask(rootTask, nil, true).Run()
if !isAsync {
if _, err = rootTask.GetResult(0); err == nil {
hint = "1"
}
} else {
hint = rootTask.ID
}
return hint, err
}

View File

@@ -2,8 +2,8 @@ package datares
import ( import (
"fmt" "fmt"
"net/http"
"strings" "strings"
"time"
"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"
@@ -18,11 +18,6 @@ import (
const ( const (
qiniuTokenExpires = 300 // 七牛TOKEN有效时间5分钟 qiniuTokenExpires = 300 // 七牛TOKEN有效时间5分钟
dataResCacheTimeout = 24 * time.Hour
)
var (
dataResCache jxutils.SyncMapWithTimeout
) )
type UploadResTokenInfo struct { type UploadResTokenInfo struct {
@@ -50,7 +45,6 @@ func GetQiniuUploadToken(ctx *jxcontext.Context, suffix, hashCode string) (upTok
Hit: imgURL != "", Hit: imgURL != "",
Img: imgURL, Img: imgURL,
} }
dataResCache.StoreWithTimeout(imgURL, hashCode, dataResCacheTimeout)
return upTokenInfo, err return upTokenInfo, err
} }
@@ -75,7 +69,9 @@ func getMimeTypeFromURL(resourceURL string) (mimeType string) {
return mimeType return mimeType
} }
func RegisterDataResource(ctx *jxcontext.Context, name, resourceURL, mimeType, hashCode string, resBinary []byte, imgType int, isAsync bool) (dataRes *model.DataResource, err error) { // 此函数要求resBinary不能空mimeType与hashCode必须是正确的
func RegisterDataResource(ctx *jxcontext.Context, name, resourceURL, mimeType, hashCode string, resBinary []byte, imgType int, isAsyncUpload2Vendor bool) (dataRes *model.DataResource, err error) {
globals.SugarLogger.Debugf("RegisterDataResource, name:%s, resourceURL:%s, mimeType:%s, hashCode:%s, imgType:%d, isAsyncUpload2Vendor;%t", name, resourceURL, mimeType, hashCode, imgType, isAsyncUpload2Vendor)
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)
} }
@@ -84,7 +80,7 @@ func RegisterDataResource(ctx *jxcontext.Context, name, resourceURL, mimeType, h
HashCode: hashCode, HashCode: hashCode,
ResourceType: mimeType, ResourceType: mimeType,
MainURL: resourceURL, MainURL: resourceURL,
IsVendor: int8(imgType), UseType: int8(imgType),
} }
vendorID := jxutils.GuessDataResourceVendor(resourceURL) vendorID := jxutils.GuessDataResourceVendor(resourceURL)
@@ -106,17 +102,17 @@ func RegisterDataResource(ctx *jxcontext.Context, name, resourceURL, mimeType, h
} }
if imgType > 0 { if imgType > 0 {
// 忽略上传错误 // 忽略上传错误
UploadImage2Vendors(ctx, nil, dataRes, resBinary, isAsync) UploadImage2Vendors(ctx, nil, dataRes, resBinary, isAsyncUpload2Vendor)
} }
return dataRes, err return dataRes, err
} }
func TryRegisterDataResource(ctx *jxcontext.Context, name, resourceURL string, isAllowDownLoad bool, imgType int, isAsync bool) (dataRes *model.DataResource, err error) { func TryRegisterDataResource(ctx *jxcontext.Context, name, resourceURL string, imgType int, isAsyncUpload2Vendor bool) (dataRes *model.DataResource, err error) {
globals.SugarLogger.Debugf("TryRegisterDataResource, name:%s, resourceURL:%s, imgType:%d, isAsyncUpload2Vendor;%t", name, resourceURL, imgType, isAsyncUpload2Vendor)
dataRes = &model.DataResource{ dataRes = &model.DataResource{
MainURL: resourceURL, MainURL: resourceURL,
} }
db := dao.GetDB() err = dao.GetEntity(dao.GetDB(), dataRes, "MainURL")
err = dao.GetEntity(db, dataRes, "MainURL")
if err != nil { if err != nil {
if !dao.IsNoRowsError(err) { if !dao.IsNoRowsError(err) {
return nil, err return nil, err
@@ -124,20 +120,11 @@ func TryRegisterDataResource(ctx *jxcontext.Context, name, resourceURL string, i
} else { } else {
return dataRes, nil return dataRes, nil
} }
value, ok := dataResCache.Load(resourceURL) resBinary, hashCode, err := jxutils.DownloadFileByURL(resourceURL)
var hashCode string if err != nil {
var resBinary []byte
if !ok {
if !isAllowDownLoad {
return nil, nil
}
if resBinary, hashCode, err = jxutils.DownloadFileByURL(resourceURL); err != nil {
return nil, err return nil, err
} }
} else { return RegisterDataResource(ctx, name, resourceURL, http.DetectContentType(resBinary), hashCode, resBinary, imgType, isAsyncUpload2Vendor)
hashCode = value.(string)
}
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) {
@@ -179,7 +166,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, int(dataRes.IsVendor)) imgHint, err2 := handler.UploadImg(ctx, dataRes.MainURL, imgData, imgName, int(dataRes.UseType))
if err = err2; err == nil { if err = err2; err == nil {
retVal = [][]interface{}{ retVal = [][]interface{}{
[]interface{}{ []interface{}{

View File

@@ -6,6 +6,7 @@ import (
"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"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/globals/api2" "git.rosy.net.cn/jx-callback/globals/api2"
"git.rosy.net.cn/jx-callback/globals/testinit" "git.rosy.net.cn/jx-callback/globals/testinit"
@@ -36,7 +37,7 @@ func TestGetDataResource(t *testing.T) {
} }
func TestTryRegisterDataResource(t *testing.T) { func TestTryRegisterDataResource(t *testing.T) {
dataRes, err := TryRegisterDataResource(jxcontext.AdminCtx, "test", "http://image.jxc4.com/image/8552261fb928be10f6406b13dc29570e.jpg", true, true, false) dataRes, err := TryRegisterDataResource(jxcontext.AdminCtx, "test", "http://image.jxc4.com/image/37db6b94925e669e0a7b6844ba7ce160.jpg", model.ImgTypeMain, false)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View File

@@ -1,6 +1,7 @@
package model package model
const ( const (
ImgTypeLocal = 0 // 京西自己用的,不需要上传至平台
ImgTypeMain = 1 // 商品主图 ImgTypeMain = 1 // 商品主图
ImgTypeDesc = 2 // 商品描述详情 ImgTypeDesc = 2 // 商品描述详情
) )
@@ -23,10 +24,12 @@ type DataResource struct {
ResourceType string `orm:"size(48)" json:"resourceType"` // 资料的mime type ResourceType string `orm:"size(48)" json:"resourceType"` // 资料的mime type
Name string `orm:"size(48);index" json:"name"` Name string `orm:"size(48);index" json:"name"`
IsVendor int8 `json:"isVendor"` // 是否是平台需要的(平台需要才会上传平台) UseType int8 `json:"useType"` // 图资源使用方式大于0才可能需要上传平台)
MainURL string `orm:"size(512);column(main_url);unique" json:"mainURL"` MainURL string `orm:"size(512);column(main_url);unique" json:"mainURL"`
QiniuURL string `orm:"size(512);column(qiniu_url);index" json:"qiniuURL"` QiniuURL string `orm:"size(512);column(qiniu_url);index" json:"qiniuURL"`
EbaiURL string `orm:"size(512);column(ebai_url);index" json:"ebaiURL"` EbaiURL string `orm:"size(512);column(ebai_url);index" json:"ebaiURL"`
MtwmURL string `orm:"size(512);column(mtwm_url);index" json:"mtwmURL"` MtwmURL string `orm:"size(512);column(mtwm_url);index" json:"mtwmURL"`
Remark string `orm:"size(1024)" json:"remark"`
} }

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 <> 0 AND (t1.ebai_url = '' OR t1.mtwm_url = '')` WHERE t1.use_type <> 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

@@ -17,9 +17,9 @@ var (
model.VendorIDMTWM: "mtwm_url", model.VendorIDMTWM: "mtwm_url",
model.VendorIDEBAI: "ebai_url", model.VendorIDEBAI: "ebai_url",
} }
descImgFieldMap = map[int]string{ // descImgFieldMap = map[int]string{
model.VendorIDEBAI: "desc_img_ebai", // model.VendorIDEBAI: "desc_img_ebai",
} // }
) )
type SkuStoreCatInfo struct { type SkuStoreCatInfo struct {
@@ -225,13 +225,13 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, isDirty bool)
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, 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, t13.%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, 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), GetDataResFieldName(vendorID),
fieldPrefix, fieldPrefix,
} }
if isSingleStorePF { if isSingleStorePF {
@@ -315,7 +315,7 @@ func GetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSyncInf
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, 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, t13.%s 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
@@ -343,7 +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), GetDataResFieldName(vendorID),
fieldPrefix, fieldPrefix,
fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix,
fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix,
@@ -448,13 +448,13 @@ func GetDataResFieldName(vendorID int) (fieldName string) {
return fieldName return fieldName
} }
func GetDescImgFieldName(vendorID int) (fieldName string) { // func GetDescImgFieldName(vendorID int) (fieldName string) {
fieldName = descImgFieldMap[vendorID] // fieldName = descImgFieldMap[vendorID]
if fieldName == "" { // if fieldName == "" {
fieldName = "desc_img" // fieldName = "desc_img"
} // }
return fieldName // return fieldName
} // }
func GetStoresSkusInfo(db *DaoDB, storeIDs, skuIDs []int) (storeSkuList []*model.StoreSkuBind, err error) { func GetStoresSkusInfo(db *DaoDB, storeIDs, skuIDs []int) (storeSkuList []*model.StoreSkuBind, err error) {
sql := ` sql := `

View File

@@ -54,7 +54,7 @@ func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgDa
if globals.EnableEbaiStoreWrite { if globals.EnableEbaiStoreWrite {
if imgType == model.ImgTypeMain { if imgType == model.ImgTypeMain {
imgHint, err = api.EbaiAPI.PictureUpload(imgURL, imgData) imgHint, err = api.EbaiAPI.PictureUpload(imgURL, imgData)
} else if imgType == model.ImgTypeMain { } else if imgType == model.ImgTypeDesc {
imgHint, err = api.EbaiAPI.SkuUploadRTF(p.getShopID4UploadRTF(), ebaiapi.BuildRFTFromImgs(imgURL)) imgHint, err = api.EbaiAPI.SkuUploadRTF(p.getShopID4UploadRTF(), ebaiapi.BuildRFTFromImgs(imgURL))
} }
} else { } else {

View File

@@ -173,7 +173,7 @@ func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgDa
return "", fmt.Errorf("找不到一个美团门店来上传图片") return "", fmt.Errorf("找不到一个美团门店来上传图片")
} }
if globals.EnableMtwmStoreWrite { if globals.EnableMtwmStoreWrite {
if imgType > 0 { if imgType > model.ImgTypeLocal {
if imgData != nil { if imgData != nil {
imgHint, err = api.MtwmAPI.ImageUpload(poiCode4UploadImg, imgName, imgData) imgHint, err = api.MtwmAPI.ImageUpload(poiCode4UploadImg, imgName, imgData)
} else { } else {

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, 0, true) _, err := datares.TryRegisterDataResource(ctx, name, v, model.ImgTypeLocal, true)
errList.AddErr(err) errList.AddErr(err)
} }
return errList.GetErrListAsOne() return errList.GetErrListAsOne()

View File

@@ -118,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, 0, true) // retVal, err = datares.RegisterDataResource(params.Ctx, params.Name, params.ResourceURL, params.MimeType, params.HashCode, nil, model.ImgTypeLocal, true)
return retVal, "", err return retVal, "", err
}) })
} }

View File

@@ -39,6 +39,7 @@ type StoreSkuController struct {
// @Param offset query int false "门店列表起始序号以0开始缺省为0" // @Param offset query int false "门店列表起始序号以0开始缺省为0"
// @Param pageSize query int false "门店列表页大小缺省为50-1表示全部" // @Param pageSize query int false "门店列表页大小缺省为50-1表示全部"
// @Param isBySku query bool false "是否按SKU分拆" // @Param isBySku query bool false "是否按SKU分拆"
// @Param isAct query bool false "是否活动商品(包括正常活动与补贴)"
// @Param jdSyncStatus query int false "京东同步标识" // @Param jdSyncStatus query int false "京东同步标识"
// @Param ebaiSyncStatus query int false "饿百同步标识" // @Param ebaiSyncStatus query int false "饿百同步标识"
// @Param mtwmSyncStatus query int false "美团外卖同步标识" // @Param mtwmSyncStatus query int false "美团外卖同步标识"
@@ -49,7 +50,7 @@ func (c *StoreSkuController) GetStoreSkus() {
c.callGetStoreSkus(func(params *tStoreSkuGetStoreSkusParams) (retVal interface{}, errCode string, err error) { c.callGetStoreSkus(func(params *tStoreSkuGetStoreSkusParams) (retVal interface{}, errCode string, err error) {
var skuIDs []int var skuIDs []int
if err = jxutils.Strings2Objs(params.SkuIDs, &skuIDs); err == nil { if err = jxutils.Strings2Objs(params.SkuIDs, &skuIDs); err == nil {
retVal, err = cms.GetStoreSkus(params.Ctx, params.StoreID, skuIDs, params.IsFocus, params.Keyword, params.IsBySku, params.MapData, params.Offset, params.PageSize) retVal, err = cms.GetStoreSkus(params.Ctx, params.StoreID, skuIDs, params.IsFocus, params.Keyword, params.IsBySku, params.IsAct, params.MapData, params.Offset, params.PageSize)
} }
return retVal, "", err return retVal, "", err
}) })
@@ -78,6 +79,7 @@ func (c *StoreSkuController) GetStoreSkus() {
// @Param offset query int false "门店列表起始序号以0开始缺省为0" // @Param offset query int false "门店列表起始序号以0开始缺省为0"
// @Param pageSize query int false "门店列表页大小缺省为50-1表示全部" // @Param pageSize query int false "门店列表页大小缺省为50-1表示全部"
// @Param isBySku query bool false "是否按SKU分拆" // @Param isBySku query bool false "是否按SKU分拆"
// @Param isAct query bool false "是否活动商品(包括正常活动与补贴)"
// @Param jdSyncStatus query int false "京东同步标识" // @Param jdSyncStatus query int false "京东同步标识"
// @Param ebaiSyncStatus query int false "饿百同步标识" // @Param ebaiSyncStatus query int false "饿百同步标识"
// @Param mtwmSyncStatus query int false "美团外卖同步标识" // @Param mtwmSyncStatus query int false "美团外卖同步标识"
@@ -88,7 +90,7 @@ func (c *StoreSkuController) GetStoresSkus() {
c.callGetStoresSkus(func(params *tStoreSkuGetStoresSkusParams) (retVal interface{}, errCode string, err error) { c.callGetStoresSkus(func(params *tStoreSkuGetStoresSkusParams) (retVal interface{}, errCode string, err error) {
var storeIDs, skuIDs []int var storeIDs, skuIDs []int
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.SkuIDs, &skuIDs); err == nil { if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs, params.SkuIDs, &skuIDs); err == nil {
retVal, err = cms.GetStoresSkus(params.Ctx, storeIDs, skuIDs, params.IsFocus, params.Keyword, params.IsBySku, params.MapData, params.Offset, params.PageSize) retVal, err = cms.GetStoresSkus(params.Ctx, storeIDs, skuIDs, params.IsFocus, params.Keyword, params.IsBySku, params.IsAct, params.MapData, params.Offset, params.PageSize)
} }
return retVal, "", err return retVal, "", err
}) })

View File

@@ -1,12 +1,10 @@
package controllers package controllers
import ( import (
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
"git.rosy.net.cn/jx-callback/business/jxstore/cms" "git.rosy.net.cn/jx-callback/business/jxstore/cms"
"git.rosy.net.cn/jx-callback/business/jxstore/misc" "git.rosy.net.cn/jx-callback/business/jxstore/misc"
"git.rosy.net.cn/jx-callback/business/jxstore/tempop" "git.rosy.net.cn/jx-callback/business/jxstore/tempop"
"git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm"
"github.com/astaxie/beego" "github.com/astaxie/beego"
) )
@@ -238,37 +236,14 @@ func (c *TempOpController) RefreshMtpsWaybillFee() {
// @Title 查询三方运单费用信息 // @Title 查询三方运单费用信息
// @Description 查询三方运单费用信息 // @Description 查询三方运单费用信息
// @Param token header string true "认证token" // @Param token header string true "认证token"
// @Param isAsync query bool false "是否异步操作"
// @Param isContinueWhenError query bool false "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult
// @router /TestIt [get] // @router /TestIt [get]
func (c *TempOpController) TestIt() { func (c *TempOpController) TestIt() {
c.callTestIt(func(params *tTempopTestItParams) (retVal interface{}, errCode string, err error) { c.callTestIt(func(params *tTempopTestItParams) (retVal interface{}, errCode string, err error) {
// // retVal, err = cms.OpenRemoteStoreByJxStatus(params.Ctx, nil, nil, false, true, true) retVal, err = tempop.CheckImages(params.Ctx, params.IsAsync, params.IsContinueWhenError)
// // shopList, err := api.EbaiAPI.ShopList(ebaiapi.SysStatusAll)
// shopList, err := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDEBAI}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "")
// task := tasksch.NewParallelTask("TestIt", nil, params.Ctx,
// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
// // shopID := batchItemList[0].(*ebaiapi.ShopInfo).ShopID
// shopID := utils.Int2Str(batchItemList[0].(*model.StoreMap).StoreID)
// skuInfo, err := api.EbaiAPI.SkuList(shopID, &ebaiapi.SkuListParams{})
// if err == nil && skuInfo.Total > 500 {
// errSkuCount := 0
// for _, sku := range skuInfo.List {
// if sku.CustomCatIDs == "" {
// errSkuCount++
// }
// }
// if errSkuCount > len(skuInfo.List)/3 {
// retVal = []string{shopID}
// }
// }
// return retVal, err
// }, shopList)
// task.Run()
// retVal, err = task.GetResult(0)
mtwm.OnCallbackMsg(&mtwmapi.CallbackMsg{
Cmd: mtwmapi.MsgTypePrivateNumberDowngrade,
})
return retVal, "", err return retVal, "", err
}) })
} }