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 % 20
|
left := 80
|
if i == 0 { //整数分钟
|
left = m / 10
|
}
|
if left <=10 && left != prePushLeft {
|
go func() {
|
message := fmt.Sprintf("%s 剩余车位:%d个", time.Now().Format("2006-01-02 15:04:05"), left)
|
b, e := service.Push("育英智慧停车", message)
|
|
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()
|
}
|