package controllers import ( "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 } //实时计算剩余车位数量,达到条件就推送 func ComputeSpaceLeftRealTime() { ticker := time.NewTicker(3 * time.Second) prePushLeft := 0 for { select { case <-ticker.C: m := time.Now().Minute() i := m % 10 left := 80 if i == 0 { //整数分钟 left = m / 10 } if left <=10 && left != prePushLeft { go func() { message := fmt.Sprintf("当前剩余车位:%d个", left) b, e := service.Push("育英智慧停车", message) if b { prePushLeft = left } fmt.Println("b:", b,"e:",e, "message:", message) }() } updateSpaceLeft(left) default: time.Sleep(500 * time.Millisecond) } } } 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 统计剩余车位 // @Description 统计剩余车位 // @Success 200 {object} models.CarStatistic // @Failure 403 {string} json "" // @router /statistic [get] func (c *CarController) Statistic() { //sv := service.NewCarService() //sta := sv.Statistic() left := getSpaceLeft() sta := models.CarStatistic{ Left: left, } resp := code.Code{ Success: true, Status: http.StatusOK, Data: sta, } c.Data["json"] = resp c.ServeJSON() } // @Title 根据车牌号查找车位信息 // @Description 根据车牌号查找车位信息 // @Success 200 {object} models.CarPos // @Failure 403 {string} json "" // @router /carPos [get] func (c *CarController) findCar() { } // @Title 车位占用情况 // @Description 车位占用情况 // @Success 200 {object} models.PosResult // @Failure 403 {string} json "" // @router /spaceNo [get] func (c *CarController) SpaceNo() { sv := service.NewCarService() spaceNos := sv.FindSpaceNo() sort.Sort(spaceNos) resp := code.Code{ Success: true, Status: http.StatusOK, Data: spaceNos, } c.Data["json"] = resp c.ServeJSON() } func (c *CarController) BindCarSpace() { c.ServeJSON() }