Przeglądaj źródła

增加商品排序

shen 4 lat temu
rodzic
commit
e90b21d264

+ 7 - 2
go/gopath/src/fohow.com/apps/controllers/product_controller/product_controller.go

@@ -24,6 +24,8 @@ func (self *ProductController) Latest() {
 	perPage, _ := self.GetInt64("per_page")
 	cache, _ := self.GetBool("cache", false)
 	ptype := self.GetString("ptype")
+	price_sort, _ := self.GetInt64("price_sort")
+	sale_sort, _ := self.GetInt64("sale_sort")
 
 	if page <= 0 {
 		page = 1
@@ -42,7 +44,7 @@ func (self *ProductController) Latest() {
 		ListCount int64                    `json:"list_count"`
 	}
 
-	pds := product_model.GetLatest(page, perPage, recommend, ptype, cache)
+	pds := product_model.GetLatest(page, perPage, recommend, price_sort, sale_sort, ptype, cache)
 	count := product_model.GetLatestCount(recommend, ptype, cache)
 	for _, pd := range pds {
 		pd.SoldCount = pd.SaleNums
@@ -309,6 +311,9 @@ func (self *ProductController) GetProductsByCat() {
 	perPage, _ := self.GetInt64("per_page")
 	words := self.GetString("words")
 	cache, _ := self.GetBool("cache", false)
+	price_sort, _ := self.GetInt64("price_sort")
+	sale_sort, _ := self.GetInt64("sale_sort")
+
 	if page <= 0 {
 		page = 1
 	}
@@ -319,7 +324,7 @@ func (self *ProductController) GetProductsByCat() {
 		List      []*product_model.Product `json:"list"`
 		ListCount int64                    `json:"list_count"`
 	}
-	list := product_model.GetProductsByCatId(catId, page, perPage, words, cache)
+	list := product_model.GetProductsByCatId(catId, page, perPage, price_sort, sale_sort, words, cache)
 	count := product_model.GetProductCountByCatId(catId, words, cache)
 	for _, pd := range list {
 		pd.SoldCount = pd.SaleNums

+ 44 - 4
go/gopath/src/fohow.com/apps/models/product_model/product.go

@@ -122,17 +122,36 @@ type Product struct {
 }
 
 //获取最新推荐商品
-func GetLatest(page, perPage, recommend int64, ptype string, useCache bool) (products []*Product) {
+func GetLatest(page, perPage, recommend, priceSort, saleSort int64, ptype string, useCache bool) (products []*Product) {
 	k := fmt.Sprintf("product_model.GetLatest.page(%d).perPage(%d).recommend(%d)", page, perPage, recommend)
 	if useCache {
 		if ret, ok := cache.Cache.Get(k).([]*Product); ok {
 			return ret
 		}
 	}
+	var priceSql, saleSql string
+	if priceSort == int64(1) {
+		//降序
+		priceSql = "-price"
+	} else if priceSort == int64(2) {
+		//升序
+		priceSql = "price"
+	}
+	if saleSort == int64(1) {
+		//降序
+		saleSql = "-(virtual_sold_count+sale_nums)"
+	} else if priceSort == int64(2) {
+		saleSql = "+(virtual_sold_count+sale_nums)"
+	}
+	if len(priceSql) <= 0 && len(saleSql) <= 0 {
+		saleSql = "-created_at"
+		priceSql = "-recommend"
+	}
+	sortSql := fmt.Sprintf("%s,%s", priceSql, saleSql)
 	o := orm.NewOrm()
 	_, err := o.QueryTable(new(Product)).Filter("status", 1).
 		Filter("recommend__gt", recommend).Filter("show_flag", true).Filter("ptype", ptype).
-		OrderBy("-recommend", "-created_at").
+		OrderBy(sortSql).
 		Limit(perPage, (page-1)*perPage).
 		All(&products)
 	if err != nil {
@@ -183,13 +202,34 @@ func GetProductById(id int64, useCache bool) *Product {
 	return item
 }
 
-func GetProductsByCatId(cId, page, perPage int64, words string, useCache bool) (products []*Product) {
+func GetProductsByCatId(cId, page, perPage, priceSort, saleSort int64, words string, useCache bool) (products []*Product) {
 	k := fmt.Sprintf("product_model.GetProductsByCatId(%d).page(%d).perPage(%d).words(%d)", cId, page, perPage, words)
 	if useCache {
 		if ret, ok := cache.Cache.Get(k).([]*Product); ok {
 			return ret
 		}
 	}
+
+	var priceSql, saleSql string
+	if priceSort == int64(1) {
+		//降序
+		priceSql = "-price"
+	} else if priceSort == int64(2) {
+		//升序
+		priceSql = "price"
+	}
+	if saleSort == int64(1) {
+		//降序
+		saleSql = "-(virtual_sold_count+sale_nums)"
+	} else if priceSort == int64(2) {
+		saleSql = "+(virtual_sold_count+sale_nums)"
+	}
+	if len(priceSql) <= 0 && len(saleSql) <= 0 {
+		saleSql = "-created_at"
+		priceSql = "-recommend"
+	}
+	sortSql := fmt.Sprintf("%s,%s", priceSql, saleSql)
+
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(Product)).Filter("status", 1).Filter("show_flag", true).Filter("ptype", TYPE_DIRECT_SALE)
 	if cId != 0 {
@@ -199,7 +239,7 @@ func GetProductsByCatId(cId, page, perPage int64, words string, useCache bool) (
 		qs = qs.Filter("key_words__icontains", words)
 	}
 	_, err := qs.
-		OrderBy("-recommend", "-created_at").
+		OrderBy(sortSql).
 		Limit(perPage, (page-1)*perPage).
 		All(&products)
 	if err != nil {