tempop.CheckImages
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
package tempop
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/jpeg"
|
||||
"image/png"
|
||||
"regexp"
|
||||
"sync"
|
||||
"time"
|
||||
@@ -1103,3 +1107,80 @@ func CreateConsumerFromOrders(ctx *jxcontext.Context, vendorIDs []int, fromDate,
|
||||
}
|
||||
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: // 计算SkuName中缺失的hashCode(注意是DescImg不是Img)
|
||||
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)
|
||||
}
|
||||
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.Bounds().Dx() != 800 || img.Bounds().Dy() != 800 {
|
||||
errMsg += fmt.Sprintf("size:%dx%d", img.Bounds().Dx(), img.Bounds().Dy())
|
||||
}
|
||||
}
|
||||
if errMsg != "" {
|
||||
dataRes.Remark += errMsg
|
||||
dao.UpdateEntity(db, dataRes, "Remark")
|
||||
}
|
||||
}
|
||||
return retVal, err
|
||||
}, imgList)
|
||||
tasksch.HandleTask(calcTask, task, false).Run()
|
||||
_, err = calcTask.GetResult(0)
|
||||
}
|
||||
case 1: // 从SkuName添加缺失的图片至DataResource
|
||||
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)
|
||||
if len(skuName.Skus) > 0 {
|
||||
imgList, err2 := api.JdAPI.GetSkuPageImageInfo(skuName.Skus[0].JdID)
|
||||
if err = err2; err == nil {
|
||||
if len(imgList) == 0 {
|
||||
err = fmt.Errorf("skuName:%d, sku:%d, jdid:%d, 没有图片", skuName.ID, skuName.Skus[0].ID, skuName.Skus[0].JdID)
|
||||
}
|
||||
}
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
@@ -29,4 +29,6 @@ type DataResource struct {
|
||||
QiniuURL string `orm:"size(512);column(qiniu_url);index" json:"qiniuURL"`
|
||||
EbaiURL string `orm:"size(512);column(ebai_url);index" json:"ebaiURL"`
|
||||
MtwmURL string `orm:"size(512);column(mtwm_url);index" json:"mtwmURL"`
|
||||
|
||||
Remark string `orm:"size(1024)" json:"remark"`
|
||||
}
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package controllers
|
||||
|
||||
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/misc"
|
||||
"git.rosy.net.cn/jx-callback/business/jxstore/tempop"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm"
|
||||
"github.com/astaxie/beego"
|
||||
)
|
||||
|
||||
@@ -238,37 +236,14 @@ func (c *TempOpController) RefreshMtpsWaybillFee() {
|
||||
// @Title 查询三方运单费用信息
|
||||
// @Description 查询三方运单费用信息
|
||||
// @Param token header string true "认证token"
|
||||
// @Param isAsync query bool false "是否异步操作"
|
||||
// @Param isContinueWhenError query bool false "单个同步失败是否继续,缺省false"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /TestIt [get]
|
||||
func (c *TempOpController) TestIt() {
|
||||
c.callTestIt(func(params *tTempopTestItParams) (retVal interface{}, errCode string, err error) {
|
||||
// // retVal, err = cms.OpenRemoteStoreByJxStatus(params.Ctx, nil, nil, false, true, true)
|
||||
// // 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,
|
||||
})
|
||||
retVal, err = tempop.CheckImages(params.Ctx, params.IsAsync, params.IsContinueWhenError)
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user