diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 344641103..c7cc84f53 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -1288,7 +1288,8 @@ func updateStoreSkusSaleWithoutSync(ctx *jxcontext.Context, storeID int, skuBind func BuildDiffData(mapData map[string]interface{}) string { dd := utils.MustMarshal(mapData) - return string(dd) + result := utils.LimitUTF8StringLen(string(dd), 3200) + return result } func uniqueStoreSkuBind(skuBindSkuInfos []*StoreSkuBindSkuInfo) (outSkuBindSkuInfos []*StoreSkuBindSkuInfo) { @@ -3250,3 +3251,86 @@ func AutoFocusStoreSkusWithoutFocus(ctx *jxcontext.Context, skuIDs []int, isSync } return err } + +func UpdateStoreSkusSpecTag(ctx *jxcontext.Context, vendorIDs []int, files []*multipart.FileHeader, isAsync, isContinueWhenError bool) (hint string, err error) { + if len(files) == 0 { + return "", errors.New("没有文件上传!") + } + fileHeader := files[0] + file, err := fileHeader.Open() + hint, err = UpdateStoreSkusSpecTagBin(ctx, file, vendorIDs, isAsync, isContinueWhenError) + file.Close() + return hint, err +} + +func UpdateStoreSkusSpecTagBin(ctx *jxcontext.Context, reader io.Reader, vendorIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { + var ( + db = dao.GetDB() + storeSkuMap = make(map[int][]*partner.StoreSkuInfo) + ) + taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + switch step { + case 0: + // xlsx, err := excelize.OpenFile("111.xlsx") + xlsx, err := excelize.OpenReader(reader) + if err != nil { + return result, err + } + rows, _ := xlsx.GetRows(xlsx.GetSheetName(1)) + for rowNum, row := range rows { + if rowNum < 1 { + continue + } + getCellForSpecTag(rowNum, row, storeSkuMap) + } + case 1: + for storeID, storeSkuInfos := range storeSkuMap { + for i := 0; i < len(storeSkuInfos)/2; i++ { + tmp := storeSkuInfos[i] + storeSkuInfos[i] = storeSkuInfos[len(storeSkuInfos)-i-1] + storeSkuInfos[len(storeSkuInfos)-i-1] = tmp + } + for _, v := range vendorIDs { + store, _ := dao.GetStoreDetail(db, storeID, v) + for _, vv := range apimanager.CurAPIManager.GetAppOrgCodeList(v) { + handler := partner.GetPurchasePlatformFromVendorID(v).(partner.IPurchasePlatformStoreSkuHandler) + err = handler.UpdateStoreSkusSpecTag(ctx, vv, storeID, store.VendorStoreID, storeSkuMap[storeID]) + } + } + } + } + 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 +} + +func getCellForSpecTag(rowNum int, row []string, storeSkuMap map[int][]*partner.StoreSkuInfo) { + var ( + skuMap = &partner.StoreSkuInfo{} + storeID int + skuID int + isSpec int + ) + for k, cell := range row { + if k == 0 { + storeID = int(utils.Str2Int64(cell)) + } + if k == 1 { + skuID = int(utils.Str2Int64(cell)) + } + if k == 2 { + isSpec = int(utils.Str2Int64(cell)) + } + } + skuMap.SkuID = skuID + skuMap.IsSpecialty = isSpec + storeSkuMap[storeID] = append(storeSkuMap[storeID], skuMap) +} diff --git a/business/partner/partner_store_sku.go b/business/partner/partner_store_sku.go index 7ecc2f649..d8e171636 100644 --- a/business/partner/partner_store_sku.go +++ b/business/partner/partner_store_sku.go @@ -48,6 +48,7 @@ type StoreSkuInfo struct { ActPrice int64 `json:"actPrice,omitempty"` VendorActID string `json:"vendorActID,omitempty"` + IsSpecialty int `json:"isSpecialty,omitempty"` } type StoreSkuInfoWithErr struct { @@ -151,6 +152,7 @@ type IPurchasePlatformStoreSkuHandler interface { CreateStoreSkusAct(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*StoreSkuInfo) (failedList []*StoreSkuInfoWithErr, err error) CancelActs(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*StoreSkuInfo) (failedList []*StoreSkuInfoWithErr, err error) + UpdateStoreSkusSpecTag(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*StoreSkuInfo) (err error) } type ISingleStoreStoreSkuHandler interface { diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index e6e2de22d..421c393b8 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -492,3 +492,7 @@ func (p *PurchaseHandler) CancelActs(ctx *jxcontext.Context, vendorOrgCode strin } return failedList, err } + +func (p *PurchaseHandler) UpdateStoreSkusSpecTag(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) { + return err +} diff --git a/business/partner/purchase/jd/store_sku2.go b/business/partner/purchase/jd/store_sku2.go index e7d8cb00b..d438c51dc 100644 --- a/business/partner/purchase/jd/store_sku2.go +++ b/business/partner/purchase/jd/store_sku2.go @@ -291,3 +291,7 @@ func (p *PurchaseHandler) CancelActs(ctx *jxcontext.Context, vendorOrgCode strin } return failedList, err } + +func (p *PurchaseHandler) UpdateStoreSkusSpecTag(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) { + return err +} diff --git a/business/partner/purchase/mtwm/store_sku2.go b/business/partner/purchase/mtwm/store_sku2.go index 8e96a3b96..fe33e6e34 100644 --- a/business/partner/purchase/mtwm/store_sku2.go +++ b/business/partner/purchase/mtwm/store_sku2.go @@ -592,3 +592,24 @@ func (p *PurchaseHandler) CreateStoreSkusAct(ctx *jxcontext.Context, vendorOrgCo func (p *PurchaseHandler) CancelActs(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) { return cancelOneShopAct(putils.GetFixDirectDownAct(vendorOrgCode, storeID, 0), vendorStoreID, putils.StoreSku2ActStoreSku(model.SyncFlagDeletedMask, vendorStoreID, storeSkuList)) } + +func (p *PurchaseHandler) UpdateStoreSkusSpecTag(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) { + var foodDataList = []map[string]interface{}{} + for _, v := range storeSkuList { + var foodData = make(map[string]interface{}) + if v.IsSpecialty != 0 && v.IsSpecialty == -1 { + v.IsSpecialty = 0 + } + foodData["is_specialty"] = v.IsSpecialty + foodData["app_food_code"] = v.SkuID + foodDataList = append(foodDataList, foodData) + } + if globals.EnableMtwmStoreWrite { + if len(foodDataList) == 1 { + err = api.MtwmAPI.RetailInitData(ctx.GetTrackInfo(), vendorStoreID, utils.Int2Str(storeSkuList[0].SkuID), foodDataList[0]) + } else if len(foodDataList) > 0 { + _, err = api.MtwmAPI.RetailBatchInitData(ctx.GetTrackInfo(), vendorStoreID, foodDataList) + } + } + return err +} diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index 1212ca2ca..0a7d7c542 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -628,3 +628,24 @@ func (c *StoreSkuController) AutoFocusStoreSkusForTopSkus() { return retVal, "", err }) } + +// @Title 设置平台商品力荐标志 +// @Description 设置平台商品力荐标志 +// @Param token header string true "认证token" +// @Param vendorIDs formData string true "厂商ID列表" +// @Param isAsync formData bool true "是否异步,缺省是同步" +// @Param isContinueWhenError formData bool true "单个同步失败是否继续,缺省false" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /UpdateStoreSkusSpecTag [post] +func (c *StoreSkuController) UpdateStoreSkusSpecTag() { + var vendorIDList []int + c.callUpdateStoreSkusSpecTag(func(params *tStoreSkuUpdateStoreSkusSpecTagParams) (retVal interface{}, errCode string, err error) { + r := c.Ctx.Request + files := r.MultipartForm.File["userfiles"] + if jxutils.Strings2Objs(params.VendorIDs, &vendorIDList); err == nil { + retVal, err = cms.UpdateStoreSkusSpecTag(params.Ctx, vendorIDList, files, params.IsAsync, params.IsContinueWhenError) + } + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 60fa07a1e..05688d600 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1881,6 +1881,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: "UpdateStoreSkusSpecTag", + Router: `/UpdateStoreSkusSpecTag`, + AllowHTTPMethods: []string{"post"}, + 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: "UpdateStoresSkus",