123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- /*
- *抽奖模块
- */
- package active
- import (
- "fmt"
- "github.com/go-xweb/xweb"
- "gopkg.in/mgo.v2/bson"
- "math/rand"
- . "qfw/coreconfig"
- "qfw/coreutil"
- mob "qfw/mobile"
- . "qfw/util"
- "qfw/util/credit"
- . "qfw/util/mongodb"
- "qfw/util/redis"
- qrpc "qfw/util/rpc"
- "strconv"
- "time"
- )
- type Activemanage struct {
- *xweb.Action
- luckdraw xweb.Mapper `xweb:"/activity/(\\w+)/([^.]*)"`
- getluckdraw xweb.Mapper `xweb:"/activity/luckdraw"`
- addredis xweb.Mapper `xweb:"/activity/addredis"`
- }
- //分享成功后建立redis判断值
- func (a *Activemanage) Addredis() error {
- //
- openid := a.Session().Get("openid").(string)
- n := time.Now()
- tmp := n.Unix()
- n2 := n.AddDate(0, 0, 1)
- yxq := time.Date(n2.Year(), n2.Month(), n2.Day(), 23, 59, 59, 0, time.Local).Unix() - tmp
- yxqs := fmt.Sprintf("%d", yxq)
- yxqt, _ := strconv.Atoi(yxqs)
- key := fmt.Sprintf("cj_%s_%s", openid, n2.Format("2006_01_02"))
- redis.Put("other", key, "cj", yxqt)
- return nil
- }
- //进入抽奖页面
- func (a *Activemanage) Luckdraw(activecode, id string) error {
- //userInfo := a.GetSession("userInfo").(*map[string]interface{})
- //se := SimpleEncrypt{Key: "topnet2015topnet2015"}
- openid := se.DecodeString(id)
- a.T["shareid"] = coreutil.FindMyShareId(activecode, openid)
- //
- if activecode == "topcj" {
- f := FindOne("user", "{'s_m_openid':'"+openid+"'}")
- username := (*f)["s_bindweixin"]
- userid := (*f)["_id"]
- if *f == nil {
- a.T["flog"] = "B"
- a.T["msg"] = "您的微信号无效!!"
- return a.Render("/active/luckdraw.html", &a.T)
- }
- a.T["signature"] = mob.GetSignature(a.Url())
- u := FindOne("winningrecord", "{'s_openid':'"+openid+"'}")
- if *u != nil {
- if ret := redis.Get("other", "cj_"+openid+"_"+time.Now().Format("2006_01_02")); ret == nil {
- //a.T = *u
- a.T["flog"] = "A"
- Tm := time.Now().AddDate(0, 0, 1)
- if ret := redis.Get("other", "cj_"+openid+"_"+Tm.Format("2006_01_02")); ret == nil {
- a.T["msg"] = "小主,快分享朋友圈或好友即获得明天的抽奖资格吧!千万不要再忘记了,大奖可能就在明天~"
- } else {
- a.T["msg"] = "小主莫贪心,每人每天只有一次抽奖机会呦!分享后明天再来吧!<br/><br/> 小主翻个牌子,动动小手分享活动,么么哒……(分享点击页面右上方···分享到朋友圈)"
- }
- return a.Render("/active/luckdraw.html", &a.T)
- }
- }
- a.SetSession("username", username)
- a.SetSession("userid", userid)
- a.SetSession("openid", openid)
- a.SetSession("s_actcode", activecode)
- return a.Render("/active/luckdraw.html", &a.T)
- } else {
- return nil
- }
- }
- //
- func (a *Activemanage) Getluckdraw() error {
- flog := "F"
- //提示语
- msg := ""
- id := ""
- today := time.Now()
- openid := a.GetSession("openid").(string)
- s_actcode := a.GetSession("s_actcode").(string)
- if openid == "" {
- msg = " 小主你太长时间没点击开始抽奖了,重新进来吧!"
- return a.Write(`{"flog":"` + flog + `","msg":"` + msg + `"}`)
- } else {
- u := FindOne("winningrecord", "{'s_openid':'"+openid+"'}")
- if *u != nil {
- if ret := redis.Get("other", "cj_"+openid+"_"+time.Now().Format("2006_01_02")); ret == nil {
- //a.T = *u
- a.T["flog"] = "A"
- a.T["msg"] = "小主莫贪心,每天只有一次抽奖机会呦!分享至朋友圈或好友即可以获得明天抽奖资格呦!乖,快去分享吧!大奖可能就在明天~~"
- return a.Write(`{"flog":"` + flog + `","msg":"` + msg + `"}`)
- }
- redis.Del("other", "cj_"+openid+"_"+time.Now().Format("2006_01_02"))
- }
- }
- data := make(map[string]interface{})
- data["s_openid"] = openid
- data["s_actcode"] = s_actcode
- i := getLuckDraw()
- s_prize := getPrize(i)
- data["s_prize"] = s_prize
- data["l_timestamp"] = time.Now().Unix()
- nowdate := time.Now().Unix()
- enddate := LuckDraw.EndDate
- if nowdate < enddate {
- id = Save("winningrecord", data)
- }
- if len(id) > 0 {
- flog = "T"
- }
- //红包
- if (i > 185 && i < 220) || (i > 320 && i < 355) {
- var amount int //红包金额以“元”为单位,微信红包以“分”为单位
- if i > 185 && i < 220 {
- amount = 500 //红包金额以“元”为单位,微信红包以“分”为单位
- } else if i > 320 && i < 355 {
- amount = 100 //红包金额以“元”为单位,微信红包以“分”为单位
- }
- bm := qrpc.BonusMsg{Mchbillno: fmt.Sprint(today.Unix()),
- Sendname: LuckDraw.Weixin["sendname"].(string),
- Reopenid: openid,
- Totalamount: amount,
- Totalnum: 1,
- Wishing: "企明星新年大抽奖",
- Actname: "企明星新年大抽奖",
- Remark: "欢迎参加企明星新年大抽奖活动!",
- }
- if coreutil.PayBonus(&bm) {
- redpackage := make(bson.M)
- redpackage["s_userid"] = a.GetSession("userid")
- redpackage["s_username"] = a.GetSession("username")
- redpackage["s_openid"] = openid
- redpackage["i_amount"] = amount
- redpackage["s_billno"] = bm.Mchbillno
- redpackage["s_name"] = bm.Actname
- redpackage["l_createdate"] = today.Unix()
- redpackage["i_year"] = today.Year()
- redpackage["i_month"] = today.Month()
- redpackage["i_day"] = today.Day()
- redpackage["s_actcode"] = s_actcode
- Save("redpackage", redpackage)
- }
- msg = " 小主是真真的好运气," + s_prize + "落入您囊中。红包将由系统自动发放到您的微信,请注意查收。<br/><br/>分享至朋友圈或好友即可以获得明天抽奖资格呦!乖,快去分享吧!大奖可能就在明天~~"
- } else if (i > 275 && i < 310) || (i > 95 && i < 130) {
- //时间判断,提醒不同
- //now := time.Now()
- //不在工作时间
- //if now.Weekday() == 6 || now.Weekday() == 0 || (now.Hour() > 18 || now.Hour() < 9) {
- //
- // msg = " 小主是真真的好运气," + s_prize + "落入您囊中!<br/> 请在微信留下您的联系方式(手机号或qq号),企明星客服会在下一个工作日9:00-17:00给小主回复哦!<br/> 小主翻个牌子,动动小手分享活动,么么哒……(分享点击页面右上方···分享到朋友圈)"
- //} else { //在工作时间
- msg = " 小主是真真的好运气," + s_prize + "落入您囊中。请将您的联系方式和邮寄地址留言给企明星。我们会在活动截止后尽快为您发出。<br/><br/>分享至朋友圈或好友即可以获得明天抽奖资格呦!乖,快去分享吧!大奖可能就在明天~~"
- //}
- } else if i > 140 && i < 175 {
- obid := BsonIdToSId(a.GetSession("userid"))
- b := credit.UpuserCreditSession(obid, "b6", "B", nil, a.Action)
- if b == true {
- msg = " 小主是真真的好运气,200积分落入您囊中。积分将由系统自动发放到您的企明星账户,请登录www.qmx.top查看。<br/><br/>分享至朋友圈或好友即可以获得明天抽奖资格呦!乖,快去分享吧!大奖可能就在明天~~"
- } else {
- msg = " 抽奖出错!小主不要桑心,联系企明星管理员,200积分还是您的!"
- }
- } else { //不中奖
- msg = " 小主不要桑心,这次没有中奖哦,明天记得要来拼运气啊!<br/><br/>分享至朋友圈或好友即可以获得明天抽奖资格呦!乖,快去分享吧!大奖可能就在明天~~"
- }
- return a.Write(`{"flog":"` + flog + `","msg":"` + msg + `","rotate":` + strconv.Itoa(int(i)) + `}`)
- }
- //
- func getLuckDraw() int {
- array := LuckDraw.GetAmount
- weightValue := getWeightRandom(array)
- min := IntAll(array[weightValue]["min"])
- max := IntAll(array[weightValue]["max"])
- if max == 0 || (min == 0 && max == 0) {
- return 1
- }
- if min == max {
- return min
- } else {
- amount := min + rand.New(rand.NewSource(time.Now().UnixNano())).Intn(max-min)
- if amount <= 0 {
- return 1
- } else if amount > 275 && amount < 310 {
- count := Count("winningrecord", "{'s_prize':'《牛奶可乐经济学》'}")
- if count > 6 {
- amount = 240
- }
- } else if amount > 95 && amount < 130 {
- count := Count("winningrecord", "{'s_prize':'限量版U盘'}")
- if count > 100 {
- amount = 260
- }
- } else if amount > 185 && amount < 220 {
- count := Count("winningrecord", "{'s_prize':'五元现金红包'}")
- if count > 200 {
- amount = 60
- }
- } else if amount > 320 && amount < 355 {
- count := Count("winningrecord", "{'s_prize':'一元现金红包'}")
- if count > 1500 {
- amount = 80
- }
- }
- return amount
- }
- return 0
- }
- //
- func getWeightRandom(array []map[string]interface{}) int {
- var weightSum, stepWeightSum float64
- for _, v := range array {
- weightSum += v["proportion"].(float64)
- }
- randVal := rand.New(rand.NewSource(time.Now().UnixNano())).Float64()
- for i := 0; i < len(array); i++ {
- stepWeightSum += array[i]["proportion"].(float64)
- if randVal <= stepWeightSum/weightSum {
- return i
- }
- }
- return 0
- }
- //
- func getPrize(i int) string {
- var prize = ""
- if i > 0 {
- if 0 <= i && i < 45 {
- prize = "iPad mini"
- } else if 91 <= i && i < 136 {
- prize = "限量版U盘"
- } else if 140 <= i && i < 175 {
- prize = "200积分"
- } else if 181 <= i && i < 226 {
- prize = "五元现金红包"
- } else if 271 <= i && i < 316 {
- prize = "《牛奶可乐经济学》"
- } else if 320 <= i && i < 355 {
- prize = "一元现金红包"
- } else {
- prize = "谢谢参与"
- }
- } else {
- prize = "抽奖异常,联系管理员!"
- }
- return prize
- }
|