diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 481df5dc4..c5742d8aa 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 { @@ -660,6 +659,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf delete(payload, "ImgWeimob") delete(payload, "ImgEbai") delete(payload, "descImgEbai") + delete(payload, "seq") valid := dao.StrictMakeMapByStructObject(payload, skuName, userName) valid = utils.RemoveGeneralMapKeys(valid, model.FieldSpecQuality, model.FieldSpecUnit) @@ -1042,4 +1042,69 @@ func UploadImg2Platforms(ctx *jxcontext.Context, parentTask tasksch.ITask, imgUR } } return imgHintMap, err +} + +func SortCategorySkus(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) { + return errors.New("商品数量不匹配!") + } + skuIDMap := make(map[int]int) + for index, id := range skuIDList { + skuIDMap[id] = index + 1 + } + for _, value := range skuList { + if _, ok := skuIDMap[value.ID]; !ok { + return errors.New("商品数据不匹配!") + } + } + + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + if r != nil { + panic(r) + } + } + }() + nameIDList := []int{} + for _, value := range skuList { + seq := skuIDMap[value.ID] + kvs := map[string]interface{} { + model.FieldSkuSeq: seq, + //model.FieldJdSyncStatus: (value.JdSyncStatus | model.SyncFlagModifiedMask), + } + dao.UpdateEntityLogically(db, value, kvs, userName, nil) + nameIDList = append(nameIDList, value.NameID) + } + //_, err = CurVendorSync.SyncSkus(ctx, db, nameIDList, []int{}, false, false, userName) + + if err == nil { + dao.Commit(db) + skuIDs, err2 := dao.GetSkuIDByNames(db, nameIDList) + if err = err2; err == nil && len(skuIDs) > 0 { + _, err = SetStoreSkuSyncStatus2(db, nil, partner.GetSingleStoreVendorIDs(), skuIDs, model.SyncFlagModifiedMask) + } + // taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + // switch step { + // case 0: + // skuIDs, err2 := dao.GetSkuIDByNames(db, nameIDList) + // if err = err2; err == nil && len(skuIDs) > 0 { + // _, err = SetStoreSkuSyncStatus2(db, nil, partner.GetSingleStoreVendorIDs(), skuIDs, model.SyncFlagModifiedMask) + // } + // } + // return result, err + // } + // taskSeq := tasksch.NewSeqTask("SortCategorySku", ctx, taskSeqFunc, 1) + // taskSeq.Run() + } else { + dao.Rollback(db) + } + } + + return err } \ No newline at end of file diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 079d2f36a..83c4b58d7 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -526,3 +526,10 @@ func GetExistingStoreSkuNameInfo(db *DaoDB, storeIDs, skuNameIDs []int) (storeSk err = GetRows(db, &storeSkuNameList, sql, sqlParams...) return storeSkuNameList, err } + +func (s *StoreSkuSyncInfo) GetSeq() int { + if s.Seq > 0 { + return s.Seq + } + return int(s.VendorPrice) + } \ No newline at end of file diff --git a/business/model/model.go b/business/model/model.go index f87c38924..dde6a51b9 100644 --- a/business/model/model.go +++ b/business/model/model.go @@ -48,6 +48,8 @@ const ( FieldActID = "ActID" FieldVendorActID = "VendorActID" + + FieldSkuSeq = "Seq" ) type ModelIDCUL struct { 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/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index 7056381e7..7c1046bd5 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -284,7 +284,7 @@ func getEbaiCat(catID int64, level int) int64 { // 饿百的排序是从大到小 func genSkuCatRank(storeSku *dao.StoreSkuSyncInfo) int { - return int(ebaiapi.MaxSkuCatRank - storeSku.VendorPrice) + return int(ebaiapi.MaxSkuCatRank - storeSku.GetSeq()) } // 饿百的排序是从大到小 diff --git a/business/partner/purchase/mtwm/store_sku2.go b/business/partner/purchase/mtwm/store_sku2.go index 687300205..52ce4e300 100644 --- a/business/partner/purchase/mtwm/store_sku2.go +++ b/business/partner/purchase/mtwm/store_sku2.go @@ -171,7 +171,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI if storeSku.DescImg != "" { foodData["picture_contents"] = storeSku.DescImg } - foodData["sequence"] = storeSku.VendorPrice + foodData["sequence"] = storeSku.GetSeq() if storeSku.VendorVendorCatID != 0 { foodData["tag_id"] = utils.Int64ToStr(storeSku.VendorVendorCatID) } else { diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index 835f2b239..af1750251 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -3,6 +3,7 @@ package controllers import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxstore/cms" + "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "github.com/astaxie/beego" @@ -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 /SortCategorySkus [post] +func (c *SkuController) SortCategorySkus() { + c.callSortCategorySkus(func(params *tSkuSortCategorySkusParams) (retVal interface{}, errCode string, err error) { + var skuIDList []int + if err = jxutils.Strings2Objs(params.SkuIDs, &skuIDList); err == nil { + err = cms.SortCategorySkus(params.Ctx, params.CatID, skuIDList) + } + + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 1bfd13eee..bb9fd39a0 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: "SortCategorySkus", + Router: `/SortCategorySkus`, + 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",