Prechádzať zdrojové kódy

商品增加仅发货区域

abiao 4 rokov pred
rodič
commit
3f9370a85e

+ 8 - 3
go/gopath/src/fohow.com/apps/controllers/pay_controller/pay_exchange_controller.go

@@ -35,7 +35,7 @@ var payOrder sync.Mutex
 func (self *PayController) payExchange(oId, payWay, returnUrl, source, remark string, useCoupon bool) {
 	payOrder.Lock()
 	defer payOrder.Unlock()
-	var payUrl, tel, addr, concat, allowAddr string
+	var payUrl, tel, addr, concat, allowAddr, allowPro string
 	var payData map[string]string
 	var specialPromotion bool
 	wxUId := self.GetCurrentWxUserId()
@@ -56,6 +56,7 @@ func (self *PayController) payExchange(oId, payWay, returnUrl, source, remark st
 		tel = address.Tel
 		addr = fmt.Sprintf("%s%s%s%s", address.Province, address.City, address.District, address.Address)
 		allowAddr = fmt.Sprintf("%s%s", address.Province, address.City)
+		allowPro = address.Province
 	} else {
 		//物流方式
 		pick_addr_id, _ := self.GetInt64("pick_addr_id")
@@ -69,6 +70,8 @@ func (self *PayController) payExchange(oId, payWay, returnUrl, source, remark st
 		addr = pick_dept.PickAddress
 		allow_arr := strings.Split(addr, "市")
 		allowAddr = fmt.Sprintf("%s市", allow_arr[0])
+		allow_prv_arr := strings.Split(addr, "省")
+		allowPro = fmt.Sprintf("%s省", allow_prv_arr[0])
 	}
 	if source != order_model.SOURCE_XCX && source != order_model.SOURCE_APP {
 		self.ReturnError(403, apps.ParamsError, "", nil)
@@ -87,6 +90,7 @@ func (self *PayController) payExchange(oId, payWay, returnUrl, source, remark st
 		self.ReturnError(403, apps.NotUnPay, "", nil)
 	}
 	SaleNumsMap := make(map[int64]int64)
+
 	storeMap := make(map[int64]int64)
 	specialPromotion = order.SpecialPro
 	//支付方式判断
@@ -109,6 +113,7 @@ func (self *PayController) payExchange(oId, payWay, returnUrl, source, remark st
 		if product.Status == product_model.PRODUCT_STATUS_DOWN {
 			self.ReturnError(403, []string{apps.ProductOffSale[0], fmt.Sprintf("%s产品已经下架", product.Name)}, "", nil)
 		}
+
 		//秒杀逻辑: 判断是否处于秒杀时间段内
 		if product.SeckilShowPrice > 0 {
 			now := time.Now()
@@ -135,9 +140,9 @@ func (self *PayController) payExchange(oId, payWay, returnUrl, source, remark st
 				}
 			}
 		}
-		//仅发货地区判断
+		//仅发货地区省,市判断
 		if len(product.OnlyDeliveryArea) > 0 {
-			if helper.NewStr(product.OnlyDeliveryArea).Strpos(allowAddr, 0) < 0 {
+			if product_model.GetProductByIdAndProvince(product.Id, allowPro, true) == nil || helper.NewStr(product.OnlyDeliveryArea).Strpos(allowAddr, 0) < 0 {
 				self.ReturnError(403, []string{apps.OnlyDeliveryArea[0], fmt.Sprintf("%s产品不在限售区域内", product.Name)}, "", nil)
 			}
 		}

+ 24 - 0
go/gopath/src/fohow.com/apps/models/product_model/product.go

@@ -210,6 +210,30 @@ func GetProductById(id int64, useCache bool) *Product {
 	return item
 }
 
+//判断商品是否在当前省可发货
+func GetProductByIdAndProvince(id int64, province string, useCache bool) *Product {
+	//k := fmt.Sprintf("product_model.GetProductById[%d]", id)
+	k := cache.GetKey(cache.GetProductByPIdAndProvince, id, province)
+	if useCache {
+		if v, ok := cache.Cache.Get(k).(*Product); ok {
+			return v
+		}
+	}
+	item := new(Product)
+	sql := `
+		select id from
+		products
+		where id = ? and find_in_set(?,only_delivery_area);
+		`
+	err := orm.NewOrm().Raw(sql, id, province).QueryRow(&item)
+	if err != nil {
+		beego.BeeLogger.Warn("product_model.GetProductByIdAndProvince(%d) err=%s", id, province, err)
+		return nil
+	}
+	cache.Cache.Put(k, item, 10*time.Minute)
+	return item
+}
+
 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 {

+ 5 - 2
go/gopath/src/fohow.com/cache/init.go

@@ -52,8 +52,9 @@ const (
 	GetThreeWxUserById = "user_model.GetThreeWxUserById"
 
 	//商品
-	GetProductPackagetByPId = "product_model.GetPackageList"
-	GetProductByPId         = "product_model.GetProductById"
+	GetProductPackagetByPId    = "product_model.GetPackageList"
+	GetProductByPId            = "product_model.GetProductById"
+	GetProductByPIdAndProvince = "product_model.GetProductByPIdAndProvince"
 
 	//项目
 	GetProjectById = "project_model.GetProjectById"
@@ -118,6 +119,8 @@ func GetKey(key string, params ...interface{}) string {
 		cacheKey = fmt.Sprintf("%s.pId(%d)", key, params[0])
 	case GetProductByPId:
 		cacheKey = fmt.Sprintf("%s.pId(%d)", key, params[0])
+	case GetProductByPIdAndProvince:
+		cacheKey = fmt.Sprintf("%s.pId(%d)prv(%s)", key, params[0], params[1])
 
 	}