| | |
| | | "car-service/extend/code" |
| | | "car-service/models" |
| | | "car-service/service" |
| | | "fmt" |
| | | "github.com/astaxie/beego" |
| | | "net/http" |
| | | "sort" |
| | | "sync" |
| | | "time" |
| | | ) |
| | | |
| | | type CarController struct { |
| | | beego.Controller |
| | | } |
| | | |
| | | //实时计算剩余车位数量,达到条件就推送 |
| | | //要求: |
| | | //1.停车数量小于等于5个推送,5个以下的数量变化都推送,推送给已注册手机号的用户,未注册的不推 |
| | | //2.满足上一条,如果此车辆已经进入学校停车场了,就不再给这个车牌对应的手机号推送空余车位消息 |
| | | //3.晚上10点到10点半,每间隔10分钟,给停车场内的车辆推送消息:请尽快驶出停车场 |
| | | func ComputeSpaceLeftRealTime() { |
| | | ticker := time.NewTicker(3 * time.Second) |
| | | prePushLeft := 0 |
| | | sv := service.NewCarService() |
| | | initCacheM := false |
| | | lowerLimit,_ := beego.AppConfig.Int("pushLowerLimit") //[0,5] |
| | | nightPushTimes := 0 |
| | | for { |
| | | select { |
| | | case <-ticker.C: |
| | | hikSta, flag := sv.Statistic() |
| | | if flag { |
| | | left := hikSta.Left |
| | | if !initCacheM { |
| | | models.SetSpaceNo(hikSta.TotalPlace) |
| | | initCacheM = true |
| | | } |
| | | |
| | | if left <=lowerLimit && left != prePushLeft { |
| | | go func() { |
| | | message := fmt.Sprintf("%s 剩余车位:%d个", time.Now().Format("2006-01-02 15:04:05"), left) |
| | | b, e := service.PushByAlias("育英中学停车", message) |
| | | |
| | | prePushLeft = left |
| | | |
| | | fmt.Println("b:", b,"e:",e, "message:", message) |
| | | }() |
| | | } |
| | | updateSpaceLeft(left) |
| | | } |
| | | //判断当前是否在22:00-22:30之间 |
| | | now := time.Now() |
| | | if now.Hour() == 22 && now.Minute()>=0 && now.Minute() <=30{ |
| | | if now.Minute() == 0 { |
| | | if nightPushTimes ==0 { |
| | | go nightPush() |
| | | nightPushTimes++ |
| | | } |
| | | } else if now.Minute() == 10 { |
| | | if nightPushTimes == 1 { |
| | | go nightPush() |
| | | nightPushTimes++ |
| | | } |
| | | } else if now.Minute() == 20 { |
| | | if nightPushTimes == 2{ |
| | | go nightPush() |
| | | nightPushTimes++ |
| | | } |
| | | } else if now.Minute() == 30 { |
| | | if nightPushTimes == 3{ |
| | | go nightPush() |
| | | nightPushTimes++ |
| | | } |
| | | } |
| | | } else { |
| | | nightPushTimes = 0 |
| | | } |
| | | |
| | | default: |
| | | time.Sleep(500 * time.Millisecond) |
| | | } |
| | | } |
| | | } |
| | | |
| | | func nightPush(){ |
| | | |
| | | message := fmt.Sprintf("%s 请尽快驶出停车场", time.Now().Format("2006-01-02 15:04:05")) |
| | | b, e := service.NightPush("育英中学停车", message) |
| | | |
| | | fmt.Println("b:", b,"e:",e, "message:", message) |
| | | |
| | | } |
| | | |
| | | var cacheSpaceLeft int |
| | | var cLock sync.RWMutex |
| | | func updateSpaceLeft(num int) { |
| | | cLock.Lock() |
| | | defer cLock.Unlock() |
| | | cacheSpaceLeft = num |
| | | } |
| | | func getSpaceLeft() int { |
| | | cLock.Lock() |
| | | defer cLock.Unlock() |
| | | return cacheSpaceLeft |
| | | } |
| | | |
| | | // @Title 统计剩余车位 |
| | |
| | | // @Failure 403 {string} json "" |
| | | // @router /statistic [get] |
| | | func (c *CarController) Statistic() { |
| | | //sv := service.NewCarService() |
| | | //sta := sv.Statistic() |
| | | m := time.Now().Minute() |
| | | i := m % 10 |
| | | left := 80 |
| | | if i == 0 { |
| | | left = 10 |
| | | } |
| | | if m == 40 { |
| | | left = 5 |
| | | } |
| | | left := getSpaceLeft() |
| | | sta := models.CarStatistic{ |
| | | Left: left, |
| | | } |
| | |
| | | // @Failure 403 {string} json "" |
| | | // @router /spaceNo [get] |
| | | func (c *CarController) SpaceNo() { |
| | | userId := c.GetString("userId") |
| | | sv := service.NewCarService() |
| | | spaceNos := sv.FindSpaceNo() |
| | | spaceNos := sv.FindSpaceNo(userId) |
| | | sort.Sort(spaceNos) |
| | | resp := code.Code{ |
| | | Success: true, |
| | |
| | | c.ServeJSON() |
| | | } |
| | | |
| | | |
| | | func (c *CarController) BindCarSpace() { |
| | | sv := service.NewCarService() |
| | | |
| | | if sv.BindCarSpace() { |
| | | c.ServeJSON() |
| | | } |
| | | |
| | | // @router /testPush [get] |
| | | func (c *CarController) TestPush() { |
| | | left := getSpaceLeft() |
| | | message := fmt.Sprintf("%s 剩余车位:%d个", time.Now().Format("2006-01-02 15:04:05"), left) |
| | | b, e := service.PushByAlias("育英中学停车", message) |
| | | |
| | | fmt.Println("b:", b,"e:",e, "message:", message) |
| | | resp := code.Code{} |
| | | if b { |
| | | resp.Success = true |
| | | resp.Status = http.StatusOK |
| | | resp.Data = "推送成功" |
| | | } else { |
| | | resp.Success = false |
| | | resp.Status = http.StatusInternalServerError |
| | | resp.Data = e.Error() |
| | | } |
| | | c.Data["json"] = resp |
| | | c.ServeJSON() |
| | | } |
| | | |
| | | // @router /crossRecord [get] |
| | | func (c *CarController) CrossRecord() { |
| | | sv := service.NewCarService() |
| | | records := sv.CrossRecords() |
| | | resp := code.Code{ |
| | | Success: true, |
| | | Status: http.StatusOK, |
| | | Data: records, |
| | | } |
| | | c.Data["json"] = resp |
| | | c.ServeJSON() |
| | | } |