From e0bbfa0150179340493e4aa53b4e3394192cab44 Mon Sep 17 00:00:00 2001 From: Rosy-zhudan Date: Fri, 30 Aug 2019 08:58:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=93=81=E5=AD=90=E5=88=86=E7=B1=BB?= =?UTF-8?q?=E4=B8=8B=E5=95=86=E5=93=81=E7=9A=84=E9=87=8D=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sku.go | 57 ++++++++++++++++++++++++++- business/model/sku.go | 22 +++++------ controllers/cms_sku.go | 20 ++++++++++ routers/commentsRouter_controllers.go | 9 +++++ 4 files changed, 95 insertions(+), 13 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 481df5dc4..6d6c9cf96 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -5,7 +5,6 @@ import ( "fmt" "strconv" "strings" - "git.rosy.net.cn/baseapi/platformapi/ebaiapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils" @@ -468,7 +467,7 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku bool, params ma "}")), "]") skus_str, CONCAT("[", GROUP_CONCAT(DISTINCT t3.place_code), "]") places_str ` + sql + ` - ORDER BY t1.id DESC + ORDER BY MIN(t2.seq), t1.id DESC LIMIT ? OFFSET ?` pageSize = jxutils.FormalizePageSize(pageSize) if offset < 0 { @@ -1042,4 +1041,58 @@ func UploadImg2Platforms(ctx *jxcontext.Context, parentTask tasksch.ITask, imgUR } } return imgHintMap, err +} + +func SortCategorySku(ctx *jxcontext.Context, catID int, skuIDList []int) (err error) { + db := dao.GetDB() + userName := ctx.GetUserName() + var skuList []*model.Sku + if skuList, err = dao.GetSkuByCats(db, []int{catID}); err == nil && len(skuList) > 0 { + if len(skuList) == len(skuIDList) { + skuIDMap := make(map[int]int) + for index, id := range skuIDList { + skuIDMap[id] = index + 1 + } + for _, value := range skuList { + if _, ok := skuIDMap[value.ID]; !ok { + err = errors.New("商品数据不匹配!") + break + } + } + dao.Begin(db) + defer func() { + if r := recover(); r != nil || err != nil { + dao.Rollback(db) + if r != nil { + panic(r) + } + } + }() + for _, value := range skuList { + seq := skuIDMap[value.ID] + kvs := map[string]interface{} { + "seq": seq, + } + dao.UpdateEntityLogically(db, value, kvs, userName, nil) + + sku := &model.Sku{} + sku.ID = value.ID + dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, sku, nil, ctx.GetUserName(), nil, model.FieldJdSyncStatus, model.SyncFlagModifiedMask) + + nameID := value.NameID + skuIDs, err2 := dao.GetSkuIDByNames(db, []int{nameID}) + if err = err2; err == nil && len(skuIDs) > 0 { + _, err = SetStoreSkuSyncStatus2(db, nil, partner.GetSingleStoreVendorIDs(), skuIDs, model.SyncFlagModifiedMask) + } + if err == nil { + dao.Commit(db) + _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, false, userName) + } + } + } else { + err = errors.New("商品数量不匹配!") + } + } + + return err } \ No newline at end of file diff --git a/business/model/sku.go b/business/model/sku.go index e5ead117d..e861eb607 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -221,17 +221,17 @@ func (*SkuName) TableUnique() [][]string { type Sku struct { ModelIDCULD - CategoryID int `orm:"column(category_id)" json:"categoryID"` // 特殊类别,一般用于秒杀,特价之类的特殊类别 - NameID int `orm:"column(name_id)" json:"nameID"` // todo 这个索引应该要求唯一 - SkuIndex int `json:"-"` - Comment string `orm:"size(255)" json:"comment"` - SpecQuality float32 `json:"specQuality"` - SpecUnit string `orm:"size(8)" json:"specUnit"` // 质量或容量 - Weight int `json:"weight"` // 重量/质量,单位为克,当相应的SkuName的SpecUnit为g或kg时,必须等于SpecQuality - Status int `json:"status"` - - JdID int64 `orm:"column(jd_id);null;index" json:"jdID"` - JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"` + CategoryID int `orm:"column(category_id)" json:"categoryID"` // 特殊类别,一般用于秒杀,特价之类的特殊类别 + NameID int `orm:"column(name_id)" json:"nameID"` // todo 这个索引应该要求唯一 + SkuIndex int `json:"-"` + Comment string `orm:"size(255)" json:"comment"` + SpecQuality float32 `json:"specQuality"` + SpecUnit string `orm:"size(8)" json:"specUnit"` // 质量或容量 + Weight int `json:"weight"` // 重量/质量,单位为克,当相应的SkuName的SpecUnit为g或kg时,必须等于SpecQuality + Status int `json:"status"` + Seq int `json:"seq"` + JdID int64 `orm:"column(jd_id);null;index" json:"jdID"` + JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"` LinkID int `orm:"column(link_id);null;index" json:"linkID"` } diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index 835f2b239..039c6dfc5 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -2,6 +2,7 @@ package controllers import ( "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxstore/cms" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" @@ -339,3 +340,22 @@ func (c *SkuController) GetSensitiveWordList() { return retVal, "", err }) } + +// @Title 子分类下商品的重排序 +// @Description 子分类下商品的重排序 +// @Param token header string true "认证token" +// @Param catID formData int true "商品子分类" +// @Param skuIDs formData string true "商品子分类下商品列表" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /SortCategorySku [post] +func (c *SkuController) SortCategorySku() { + c.callSortCategorySku(func(params *tSkuSortCategorySkuParams) (retVal interface{}, errCode string, err error) { + var skuIDList []int + if err = jxutils.Strings2Objs(params.SkuIDs, &skuIDList); err == nil { + err = cms.SortCategorySku(params.Ctx, params.CatID, skuIDList) + } + + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 5c1efe789..220d56c88 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1105,6 +1105,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], + beego.ControllerComments{ + Method: "SortCategorySku", + Router: `/SortCategorySku`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], beego.ControllerComments{ Method: "SyncCategory",