|
|
@@ -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 {
|