From 2ed3b3fa64796411c990a77c459dcefe3ddeb56a Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 27 Sep 2019 12:08:27 +0800 Subject: [PATCH] tempop.CheckImages --- business/jxstore/tempop/tempop.go | 81 +++++++++++++++++++++++++++++++ business/model/common.go | 2 + controllers/temp_op.go | 31 ++---------- 3 files changed, 86 insertions(+), 28 deletions(-) diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index a8b3eb70a..cdb35ce78 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -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 +} diff --git a/business/model/common.go b/business/model/common.go index d9c36a28a..6fde833cc 100644 --- a/business/model/common.go +++ b/business/model/common.go @@ -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"` } diff --git a/controllers/temp_op.go b/controllers/temp_op.go index bc3ea66ff..8a86a2a3e 100644 --- a/controllers/temp_op.go +++ b/controllers/temp_op.go @@ -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 }) }