Browse Source

更改促销匹配

shen 4 years ago
parent
commit
0a0b293b98

+ 1 - 1
go/gopath/src/fohow.com/apps/controllers/pay_controller/after_pay_controller.go

@@ -185,7 +185,7 @@ func (self *PayController) wxPayExchangeAsync() {
 	}
 
 	//发放赠品
-	go helpers.SetOrderPromotion(order.OrderId, wxUser.Id)
+	go helpers.SetOrderPromotionPro(order.OrderId, wxUser.Id)
 	//已支付订单移除队列
 	cancelKey := lib_redis.GetOrderCancelList()
 	lib_redis.ThrowOutRedisList(cancelKey, order.OrderId)

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

@@ -211,7 +211,7 @@ func (self *PayController) payExchange(oId, payWay, returnUrl, source, remark st
 			order.Source = source
 			order.Save()
 			//发放赠品
-			go helpers.SetOrderPromotion(order.OrderId, wxUser.Id)
+			go helpers.SetOrderPromotionPro(order.OrderId, wxUser.Id)
 			//已支付订单移除未支付队列
 			cancelKey := lib_redis.GetOrderCancelList()
 			lib_redis.ThrowOutRedisList(cancelKey, order.OrderId)

+ 184 - 0
go/gopath/src/fohow.com/apps/helpers/promotion_helper.go

@@ -187,6 +187,190 @@ func SetOrderPromotion(orderId string, wxUid int64) {
 	}
 }
 
+
+//订单促销
+/*
+	如果促销条件中,设置的项目有一项不满足即视为不满足促销条件
+*/
+func SetOrderPromotionPro(orderId string, wxUid int64) {
+	beego.BeeLogger.Warn("******* SetOrderPromotionPro orderId:%s wxUid:%d", orderId, wxUid)
+
+	firstOrder := false
+	//获取订单明细
+	order := order_model.GetOrderById(orderId, false)
+	if order == nil {
+		return
+	}
+	//检查会员是否首次下单
+	list := order_model.GetWxUserOrders(wxUid)
+	if len(list) == 1 {
+		firstOrder = true
+	}
+
+	queryDate := time.Now()
+	// 获取所有有效促销记录
+	effectivePromotions := promotion_model.GetEffetivePromotions(queryDate, order.OrderType, order.Depart, false)
+	for _, item := range effectivePromotions {
+		//beego.Warn("item_name%d", item.Name)
+
+		firstFlag := true
+		totalFlag := true
+		numsFlag := true
+		if item.MaxTotal > 0 && order.TotalPrice > item.MaxTotal {
+			totalFlag = false
+			continue
+		}
+		if item.IsFirst && !firstOrder {
+			firstFlag = false
+			continue
+		}
+		if item.MinTotal > 0 && order.TotalPrice < item.MinTotal {
+			totalFlag = false
+			firstFlag = false
+			continue
+		}
+		nums := int64(999)
+		nums1 := int64(999)
+		nums2 := int64(999)
+		nums3 := int64(999)
+		nums4 := int64(999)
+		nums5 := int64(999)
+		nums6 := int64(999)
+		if item.Prod1 > 0 {
+			prd := product_model.GetProductById(item.Prod1, true)
+			nums1 = int64(0)
+			if prd != nil {
+				detailItem:=order_model.GetDetailsByOrderIdAndPid(orderId,item.Prod1)
+				detail_nums1 :=detailItem.Count
+				if detail_nums1 > int64(0) && item.Prod1 > 0 && item.Nums1 > 0 {
+					nums1 = int64(detail_nums1 / item.Nums1)
+				}
+			}
+		}
+
+		if item.Prod2 > 0 {
+			prd := product_model.GetProductById(item.Prod2, true)
+			nums2 = int64(0)
+			if prd != nil {
+				detailItem:=order_model.GetDetailsByOrderIdAndPid(orderId,item.Prod2)
+				detail_nums2 :=detailItem.Count
+				//detail_nums2 := order_model.GetDetailsByOrderIdAndRelatePid(orderId, prd.RelateProductId)
+				if detail_nums2 > int64(0) && item.Prod2 > 0 && item.Nums2 > 0 {
+					nums2 = int64(detail_nums2 / item.Nums2)
+				}
+			}
+		}
+
+		if item.Prod3 > 0 {
+			nums3 = int64(0)
+			prd := product_model.GetProductById(item.Prod3, true)
+			if prd != nil {
+				detailItem:=order_model.GetDetailsByOrderIdAndPid(orderId,item.Prod3)
+				detail_nums3 := detailItem.Count
+				//detail_nums3 := order_model.GetDetailsByOrderIdAndRelatePid(orderId, prd.RelateProductId)
+				if detail_nums3 > 0 && item.Prod3 > 0 && item.Nums3 > 0 {
+					nums3 = int64(detail_nums3 / item.Nums3)
+				}
+			}
+		}
+		if item.MinTotal > 0 {
+			nums4 = int64(order.TotalPrice / item.MinTotal)
+		}
+
+		if item.Prod4 > 0 {
+			prd := product_model.GetProductById(item.Prod4, true)
+			nums5 = int64(0)
+			if prd != nil {
+				detailItem:=order_model.GetDetailsByOrderIdAndPid(orderId,item.Prod4)
+				detail_nums4 := detailItem.Count
+				//detail_nums4 := order_model.GetDetailsByOrderIdAndRelatePid(orderId, prd.RelateProductId)
+				if detail_nums4 > 0 && item.Prod4 > 0 && item.Nums4 > 0 {
+					nums5 = int64(detail_nums4 / item.Nums4)
+				}
+			}
+		}
+
+		if item.Prod5 > 0 {
+			prd := product_model.GetProductById(item.Prod5, true)
+			nums6 = int64(0)
+			if prd != nil {
+				detailItem:=order_model.GetDetailsByOrderIdAndPid(orderId,item.Prod5)
+				detail_nums5 := detailItem.Count
+				//detail_nums5 := order_model.GetDetailsByOrderIdAndRelatePid(orderId, prd.RelateProductId)
+				if detail_nums5 > 0 && item.Prod5 > 0 && item.Nums5 > 0 {
+					nums6 = int64(detail_nums5 / item.Nums5)
+				}
+			}
+		}
+
+		val := []int64{nums1, nums2, nums3, nums4, nums5, nums6}
+		nums = tool.Min(val...)
+		if !item.IsMore {
+			val := []int64{nums, 1}
+			nums = tool.Min(val...)
+		}
+		if nums == int64(999) || nums == int64(0) {
+			numsFlag = false
+		}
+		/*	beego.Warn("item_name-1%d", item.Name)
+			beego.Warn("firstFlag%v", firstFlag)
+			beego.Warn("totalFlag%v", totalFlag)
+			beego.Warn("numsFlag%v", numsFlag)
+			beego.Warn("nums%d", nums)*/
+
+		//满足促销条件
+		if firstFlag && totalFlag && numsFlag {
+
+			if item.SendProd1 > 0 && item.SendNums1 > 0 {
+				sendNums1 := nums * item.SendNums1
+				//赠送赠品1
+				product := product_model.GetProductById(item.SendProd1, true)
+				go order_model.SendCreate(order.OrderId, order.Id, product.Id, product.Price, product.Price, product.Name, sendNums1, order.Depart)
+			}
+			if item.SendProd2 > 0 && item.SendNums2 > 0 {
+				sendNums2 := nums * item.SendNums2
+				//赠送赠品1
+				product := product_model.GetProductById(item.SendProd2, true)
+				go order_model.SendCreate(order.OrderId, order.Id, product.Id, product.Price, product.Price, product.Name, sendNums2, order.Depart)
+			}
+
+			if item.SendProd3 > 0 && item.SendNums3 > 0 {
+				sendNums3 := nums * item.SendNums3
+				//赠送赠品1
+				product := product_model.GetProductById(item.SendProd3, true)
+				go order_model.SendCreate(order.OrderId, order.Id, product.Id, product.Price, product.Price, product.Name, sendNums3, order.Depart)
+			}
+
+			if item.SendProd4 > 0 && item.SendNums4 > 0 {
+				sendNums4 := nums * item.SendNums4
+				//赠送赠品1
+				product := product_model.GetProductById(item.SendProd4, true)
+				go order_model.SendCreate(order.OrderId, order.Id, product.Id, product.Price, product.Price, product.Name, sendNums4, order.Depart)
+			}
+
+			if item.SendProd5 > 0 && item.SendNums5 > 0 {
+				sendNums5 := nums * item.SendNums5
+				//赠送赠品1
+				product := product_model.GetProductById(item.SendProd5, true)
+				go order_model.SendCreate(order.OrderId, order.Id, product.Id, product.Price, product.Price, product.Name, sendNums5, order.Depart)
+			}
+			//赠送积分 or 代办费
+			if item.Cash > 0 {
+				totalCash := nums * item.Cash
+				source := balance_model.BALANCE_SOURCE_PROMOTION
+				remark := fmt.Sprintf("促销赠送提货券")
+				new(balance_model.Balance).Create(order.WxUserId, order.UserId, totalCash, source, order.OrderId, remark)
+			}
+			if item.Cent > 0 {
+				totalCent := nums * item.Cent
+				source := cent_model.PROMOTION_SEND
+				remark := fmt.Sprintf("促销活动赠送")
+				new(cent_model.CentBalance).Create(order.WxUserId, totalCent, source, order.OrderId, remark)
+			}
+		}
+	}
+}
+
 func max(vals ...int64) int64 {
 	var max int64
 	for _, val := range vals {

+ 2 - 2
go/gopath/src/fohow.com/apps/models/order_model/order_detail.go

@@ -172,9 +172,9 @@ func GetStaticOrderDetails(bDate, eDate time.Time, state string, isSend bool) (d
 //根据订单Id,获取所有订单项
 func GetDetailsByOrderIdAndPid(oId string, pId int64) (orderDetail *OrderDetail) {
 	orderDetail = &OrderDetail{}
-	if err := orm.NewOrm().QueryTable(orderDetail).Filter("order_no", oId).Filter("product_id", pId).Limit(1).
+	if err := orm.NewOrm().QueryTable(orderDetail).Filter("order_no", oId).Filter("product_id", pId).Filter("is_zeng", false).Limit(1).
 		One(orderDetail); err != nil {
-		beego.BeeLogger.Error("get order detail item by id=%s err=%s", oId, err)
+		beego.BeeLogger.Error("get order detail product nums=%s err=%s", oId, err)
 		orderDetail = nil
 	}
 	return orderDetail