| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- package helpers
- import (
- "fohow.com/apps/models/order_model"
- "fohow.com/apps/models/product_model"
- "github.com/astaxie/beego"
- "time"
- )
- //发放促销商品
- func SetOrderPromotion(orderId string, wxUid int64) {
- beego.BeeLogger.Warn("******* SetOrderPromotion 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 := order_model.GetEffetivePromotions(queryDate, order.OrderType, false)
- beego.Warn("item_nums%d", len(effectivePromotions))
- for _, item := range effectivePromotions {
- firstFlag := true
- totalFlag := true
- numsFlag := true
- if item.MaxTotal > 0 && order.TotalPrice > item.MaxTotal {
- beego.Warn("MaxTotal%d", item.MaxTotal)
- totalFlag = false
- continue
- }
- if item.IsFirst && !firstOrder {
- firstFlag = false
- continue
- }
- if item.MinTotal > 0 && order.TotalPrice < item.MinTotal {
- beego.Warn("MinTotal%d", item.MinTotal)
- totalFlag = false
- firstFlag = false
- continue
- }
- nums := int64(99)
- nums1 := int64(99)
- nums2 := int64(99)
- nums3 := int64(99)
- nums4 := int64(99)
- if item.Prod1 > 0 {
- detail1 := order_model.GetDetailsByOrderIdAndPid(orderId, item.Prod1)
- if detail1 != nil && item.Prod1 > 0 && item.Nums1 > 0 {
- nums1 = int64(detail1.Count / item.Nums1)
- }
- }
- if item.Prod2 > 0 {
- detail2 := order_model.GetDetailsByOrderIdAndPid(orderId, item.Prod2)
- if detail2 != nil && item.Prod2 > 0 && item.Nums2 > 0 {
- nums2 = int64(detail2.Count / item.Nums2)
- }
- }
- if item.Prod3 > 0 {
- detail3 := order_model.GetDetailsByOrderIdAndPid(orderId, item.Prod3)
- if detail3 != nil && item.Prod3 > 0 && item.Nums3 > 0 {
- nums3 = int64(detail3.Count / item.Nums3)
- }
- }
- if item.MinTotal > 0 {
- nums4 = int64(order.TotalPrice / item.MinTotal)
- }
- if nums == int64(99) || nums == int64(0) {
- numsFlag = false
- }
- val := []int64{nums1, nums2, nums3, nums4}
- nums = min(val...)
- beego.Warn("nums-1%d", nums)
- if !item.IsMore {
- val := []int64{nums, 1}
- nums = min(val...)
- }
- beego.Warn("firstFlag%v", firstFlag)
- beego.Warn("totalFlag%v", totalFlag)
- beego.Warn("nums-2%d", nums)
- if firstFlag && totalFlag && numsFlag {
- if item.SendProd1 > 0 && item.SendNums1 > 0 {
- sendNums1 := nums * item.SendNums1
- //赠送赠品1
- product := product_model.GetProductById(item.Prod1, true)
- go order_model.SendCreate(order.OrderId, order.Id, item.Prod1, product.Price, product.Price, product.Name, sendNums1)
- }
- if item.SendProd2 > 0 && item.SendNums2 > 0 {
- sendNums2 := nums * item.SendNums2
- //赠送赠品1
- product := product_model.GetProductById(item.Prod2, true)
- go order_model.SendCreate(order.OrderId, order.Id, item.Prod2, product.Price, product.Price, product.Name, sendNums2)
- }
- if item.SendProd3 > 0 && item.SendNums3 > 0 {
- sendNums3 := nums * item.SendNums3
- //赠送赠品1
- product := product_model.GetProductById(item.Prod1, true)
- go order_model.SendCreate(order.OrderId, order.Id, item.Prod3, product.Price, product.Price, product.Name, sendNums3)
- }
- }
- }
- }
- func max(vals ...int64) int64 {
- var max int64
- for _, val := range vals {
- if val > max {
- max = val
- }
- }
- return max
- }
- func min(vals ...int64) int64 {
- var min int64
- for _, val := range vals {
- if val <= min {
- min = val
- }
- }
- return min
- }
- /*
- 找到所有当前时间>《开始时间》且 当前时间<《结束时间》 且《是否启用》=1的促销记录
- { flag1=1,flag2=1,flag3=1
- NUMs=99,NUMs1=99,NUMs2=99,NUMs3=99,NUMs4=99
- 如果《是否首次下单》=是,且当前订单不是首次订单,则flag1=0
- 如果《最大金额》>0则要求订单金额大于此项值,则flag2=0
- 如果:《购买产品ID1》>0且《购买数量1》>0则NUMs1=购买产品ID1的数量/《购买数量1》
- 如果:《购买产品ID2》>0且《购买数量2》>0则当前订单中NUMs2=购买产品ID2的数量/《购买数量2》
- 如果:《购买产品ID3》>0且《购买数量3》>0则当前订单中NUMs3=购买产品ID3的数量/《购买数量3》
- 如果:《最小金额》>0则要求订单金额大于或等于此项值,则NUMs4=订单金额/《最小金额》
- NUMs=min(NUMs1,NUMs2,NUMs3,NUMs4);
- if(NUMs=99或NUMs=0) 则flag3=0
- 如果《是否多买多送》=否,NUMs=MIN(1,NUMs)
- if(flag1=1并且flag2=1并且flag3=1)
- { 如果《赠送产品ID1》>0且《赠送数量1》>0,则按《赠送数量1》*NUMs赠送《赠送产品ID1》;
- 如果《赠送产品ID2》>0且《赠送数量2》>0,则按《赠送数量2》*NUMs赠送《赠送产品ID2》;
- 如果《赠送产品ID3》>0且《赠送数量3》>0,则按《赠送数量3》*NUMs赠送《赠送产品ID3》;
- }
- 找下一个促销记录
- }
- */
|