Accept Merge Request #41: (don -> mark)
Merge Request: 商品子分类下商品的重排序 Created By: @Nathan drake Accepted By: @XJH-Rosy URL: https://coding.net/u/XJH-Rosy/p/jx-callback/git/merge/41
This commit is contained in:
@@ -5,7 +5,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
"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,
|
"}")), "]") skus_str,
|
||||||
CONCAT("[", GROUP_CONCAT(DISTINCT t3.place_code), "]") places_str
|
CONCAT("[", GROUP_CONCAT(DISTINCT t3.place_code), "]") places_str
|
||||||
` + sql + `
|
` + sql + `
|
||||||
ORDER BY t1.id DESC
|
ORDER BY MIN(t2.seq), t1.id DESC
|
||||||
LIMIT ? OFFSET ?`
|
LIMIT ? OFFSET ?`
|
||||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||||
if offset < 0 {
|
if offset < 0 {
|
||||||
@@ -660,6 +659,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
|
|||||||
delete(payload, "ImgWeimob")
|
delete(payload, "ImgWeimob")
|
||||||
delete(payload, "ImgEbai")
|
delete(payload, "ImgEbai")
|
||||||
delete(payload, "descImgEbai")
|
delete(payload, "descImgEbai")
|
||||||
|
delete(payload, "seq")
|
||||||
|
|
||||||
valid := dao.StrictMakeMapByStructObject(payload, skuName, userName)
|
valid := dao.StrictMakeMapByStructObject(payload, skuName, userName)
|
||||||
valid = utils.RemoveGeneralMapKeys(valid, model.FieldSpecQuality, model.FieldSpecUnit)
|
valid = utils.RemoveGeneralMapKeys(valid, model.FieldSpecQuality, model.FieldSpecUnit)
|
||||||
@@ -1043,3 +1043,68 @@ func UploadImg2Platforms(ctx *jxcontext.Context, parentTask tasksch.ITask, imgUR
|
|||||||
}
|
}
|
||||||
return imgHintMap, err
|
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
|
||||||
|
}
|
||||||
@@ -526,3 +526,10 @@ func GetExistingStoreSkuNameInfo(db *DaoDB, storeIDs, skuNameIDs []int) (storeSk
|
|||||||
err = GetRows(db, &storeSkuNameList, sql, sqlParams...)
|
err = GetRows(db, &storeSkuNameList, sql, sqlParams...)
|
||||||
return storeSkuNameList, err
|
return storeSkuNameList, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *StoreSkuSyncInfo) GetSeq() int {
|
||||||
|
if s.Seq > 0 {
|
||||||
|
return s.Seq
|
||||||
|
}
|
||||||
|
return int(s.VendorPrice)
|
||||||
|
}
|
||||||
@@ -48,6 +48,8 @@ const (
|
|||||||
|
|
||||||
FieldActID = "ActID"
|
FieldActID = "ActID"
|
||||||
FieldVendorActID = "VendorActID"
|
FieldVendorActID = "VendorActID"
|
||||||
|
|
||||||
|
FieldSkuSeq = "Seq"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ModelIDCUL struct {
|
type ModelIDCUL struct {
|
||||||
|
|||||||
@@ -221,17 +221,17 @@ func (*SkuName) TableUnique() [][]string {
|
|||||||
type Sku struct {
|
type Sku struct {
|
||||||
ModelIDCULD
|
ModelIDCULD
|
||||||
|
|
||||||
CategoryID int `orm:"column(category_id)" json:"categoryID"` // 特殊类别,一般用于秒杀,特价之类的特殊类别
|
CategoryID int `orm:"column(category_id)" json:"categoryID"` // 特殊类别,一般用于秒杀,特价之类的特殊类别
|
||||||
NameID int `orm:"column(name_id)" json:"nameID"` // todo 这个索引应该要求唯一
|
NameID int `orm:"column(name_id)" json:"nameID"` // todo 这个索引应该要求唯一
|
||||||
SkuIndex int `json:"-"`
|
SkuIndex int `json:"-"`
|
||||||
Comment string `orm:"size(255)" json:"comment"`
|
Comment string `orm:"size(255)" json:"comment"`
|
||||||
SpecQuality float32 `json:"specQuality"`
|
SpecQuality float32 `json:"specQuality"`
|
||||||
SpecUnit string `orm:"size(8)" json:"specUnit"` // 质量或容量
|
SpecUnit string `orm:"size(8)" json:"specUnit"` // 质量或容量
|
||||||
Weight int `json:"weight"` // 重量/质量,单位为克,当相应的SkuName的SpecUnit为g或kg时,必须等于SpecQuality
|
Weight int `json:"weight"` // 重量/质量,单位为克,当相应的SkuName的SpecUnit为g或kg时,必须等于SpecQuality
|
||||||
Status int `json:"status"`
|
Status int `json:"status"`
|
||||||
|
Seq int `json:"seq"`
|
||||||
JdID int64 `orm:"column(jd_id);null;index" json:"jdID"`
|
JdID int64 `orm:"column(jd_id);null;index" json:"jdID"`
|
||||||
JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
|
JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
|
||||||
|
|
||||||
LinkID int `orm:"column(link_id);null;index" json:"linkID"`
|
LinkID int `orm:"column(link_id);null;index" json:"linkID"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -284,7 +284,7 @@ func getEbaiCat(catID int64, level int) int64 {
|
|||||||
|
|
||||||
// 饿百的排序是从大到小
|
// 饿百的排序是从大到小
|
||||||
func genSkuCatRank(storeSku *dao.StoreSkuSyncInfo) int {
|
func genSkuCatRank(storeSku *dao.StoreSkuSyncInfo) int {
|
||||||
return int(ebaiapi.MaxSkuCatRank - storeSku.VendorPrice)
|
return int(ebaiapi.MaxSkuCatRank - storeSku.GetSeq())
|
||||||
}
|
}
|
||||||
|
|
||||||
// 饿百的排序是从大到小
|
// 饿百的排序是从大到小
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
if storeSku.DescImg != "" {
|
if storeSku.DescImg != "" {
|
||||||
foodData["picture_contents"] = storeSku.DescImg
|
foodData["picture_contents"] = storeSku.DescImg
|
||||||
}
|
}
|
||||||
foodData["sequence"] = storeSku.VendorPrice
|
foodData["sequence"] = storeSku.GetSeq()
|
||||||
if storeSku.VendorVendorCatID != 0 {
|
if storeSku.VendorVendorCatID != 0 {
|
||||||
foodData["tag_id"] = utils.Int64ToStr(storeSku.VendorVendorCatID)
|
foodData["tag_id"] = utils.Int64ToStr(storeSku.VendorVendorCatID)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package controllers
|
|||||||
import (
|
import (
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
|
"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"
|
||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
"github.com/astaxie/beego"
|
"github.com/astaxie/beego"
|
||||||
@@ -339,3 +340,22 @@ func (c *SkuController) GetSensitiveWordList() {
|
|||||||
return retVal, "", err
|
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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -1105,6 +1105,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: 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.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "SyncCategory",
|
Method: "SyncCategory",
|
||||||
|
|||||||
Reference in New Issue
Block a user