diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 5a7461d10..660540f9a 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -178,6 +178,12 @@ type tStoreSkusSecKill struct { NoticeMsg string } +type JdStoreSkus struct { + JdStoreID int `json:"jdStoreID"` + JdSkuID int `json:"jdSkuID"` + Price int `json:"price"` +} + const ( maxStoreNameBind = 10000 // 最大门店SkuName bind个数 maxStoreNameBind2 = 10000 // 最大门店乘SkuName个数 @@ -3536,3 +3542,94 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i } return hint, err } + +func RefreshJxPriceByVendor(ctx *jxcontext.Context, jdStoreSkus []*JdStoreSkus, isAsync, isContinueWhenError bool) (hint string, err error) { + var ( + db = dao.GetDB() + jdMap = make(map[int][]*JdStoreSkus) + jxMap = make(map[int]map[int]int) + param []*StoreSkuBindInfo + ) + taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + switch step { + case 0: + for _, v := range jdStoreSkus { + var ( + pricePercentagePack []*model.PricePercentageItem + cats []*model.ThingMap + skus []*model.SkuAndName + ) + sql := ` + SELECT t1.* + FROM thing_map t1 + WHERE t1.deleted_at = ? AND t1.thing_type = ? + AND t1.vendor_thing_id = ? + ` + sqlParams := []interface{}{ + utils.DefaultTimeValue, + model.ThingTypeSku, + v.JdSkuID, + } + err = dao.GetRows(db, &cats, sql, sqlParams...) + if len(cats) > 0 { + skus, err = dao.GetSkus(db, []int{int(cats[0].ThingID)}, nil, nil, nil) + if err != nil || len(skus) == 0 { + return result, fmt.Errorf("没有找到该京西skuID!,京西skuID :[%v]", cats[0].ThingID) + } + } else { + return result, fmt.Errorf("没有找到该京东skuID对应的京西skuID!,京东skuID :[%v]", v.JdSkuID) + } + store, err := dao.GetStoreDetailByVendorStoreID(db, utils.Int2Str(v.JdStoreID), model.VendorIDJD) + if err != nil || store == nil { + return result, fmt.Errorf("没有找到该京东门店对应的京西门店!,京东门店ID :[%v]", v.JdStoreID) + } + err = jxutils.Strings2Objs(store.PricePercentagePackStr, &pricePercentagePack) + jxPrice := jxutils.CaculateJxPriceByPricePack(pricePercentagePack, 0, v.Price) + jdMap[store.ID] = append(jdMap[store.ID], &JdStoreSkus{ + JdSkuID: skus[0].NameID, + Price: jxPrice, + }) + } + for k, v := range jdMap { + var skuNameMap = make(map[int]int) + for _, vv := range v { + if skuNameMap[vv.JdSkuID] != 0 { + if skuNameMap[vv.JdSkuID] > vv.Price { + skuNameMap[vv.JdSkuID] = vv.Price + } + } else { + skuNameMap[vv.JdSkuID] = vv.Price + } + } + jxMap[k] = skuNameMap + } + for k, v := range jxMap { + for kk, vv := range v { + result, err := dao.GetStoreSkuBindByNameID(db, k, kk, model.SkuStatusNormal) + if len(result) > 0 && err == nil { + if result[0].UnitPrice > vv { + storeSkuBindInfo := &StoreSkuBindInfo{ + StoreID: k, + NameID: kk, + UnitPrice: vv, + } + param = append(param, storeSkuBindInfo) + } + } + } + } + case 1: + _, err = UpdateStoresSkusByBind(ctx, nil, param, isAsync, isContinueWhenError) + } + return result, err + } + taskSeq := tasksch.NewSeqTask2("根据京东平台价刷新京西平台价", ctx, isContinueWhenError, taskSeqFunc, 2) + tasksch.HandleTask(taskSeq, nil, true).Run() + if !isAsync { + _, err = taskSeq.GetResult(0) + hint = "1" + } else { + hint = taskSeq.GetID() + } + return hint, err +} diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index 313280bf8..7e879b6f4 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -668,3 +668,23 @@ func (c *StoreSkuController) SendSeckillSkusCountMsg() { return retVal, "", err }) } + +// @Title 根据平台价反算京西价 +// @Description 根据平台价反算京西价 +// @Param token header string true "认证token" +// @Param payload formData string true "json数据,JdStoreSkus对象" +// @Param isAsync formData bool true "是否异步,缺省是同步" +// @Param isContinueWhenError formData bool true "单个同步失败是否继续,缺省false" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /RefreshJxPriceByVendor [put] +func (c *StoreSkuController) RefreshJxPriceByVendor() { + var skuBindInfos []*cms.JdStoreSkus + c.callRefreshJxPriceByVendor(func(params *tStoreSkuRefreshJxPriceByVendorParams) (retVal interface{}, errCode string, err error) { + if err = jxutils.Strings2Objs(params.Payload, &skuBindInfos); err != nil { + return retVal, "", err + } + retVal,err = cms.RefreshJxPriceByVendor(params.Ctx, skuBindInfos, params.IsAsync, params.IsContinueWhenError) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index f5fd161d3..b059096c5 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1863,6 +1863,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"], + beego.ControllerComments{ + Method: "RefreshJxPriceByVendor", + Router: `/RefreshJxPriceByVendor`, + AllowHTTPMethods: []string{"put"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"], beego.ControllerComments{ Method: "RefreshStoresSkuByVendor",