liuxiaolong
2020-08-06 dbc843d0b37f786fb816131bcc7ebca86dbe72e9
controllers/car.go
@@ -4,13 +4,64 @@
   "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
   sv := service.NewCarService()
   initCacheM := false
   for {
      select {
         case <-ticker.C:
            hikSta, flag := sv.Statistic()
            if flag {
               left := hikSta.Left
               if !initCacheM {
                  models.SetSpaceNo(hikSta.TotalPermPlace)
                  initCacheM = true
               }
               if left <=5 && 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 统计剩余车位
@@ -20,9 +71,11 @@
// @router /statistic [get]
func (c *CarController) Statistic() {
   //sv := service.NewCarService()
   //sta := sv.Statistic()
   //hikStc := sv.Statistic()
   //left := hikStc.Left
   left := getSpaceLeft()
   sta := models.CarStatistic{
      Left: 80,
      Left: left,
   }
   resp := code.Code{
      Success: true,
@@ -48,8 +101,9 @@
// @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,
@@ -60,11 +114,21 @@
   c.ServeJSON()
}
func (c *CarController) BindCarSpace() {
   c.ServeJSON()
}
// @router /crossRecord [get]
func (c *CarController) CrossRecord() {
   sv := service.NewCarService()
   if sv.BindCarSpace() {
   records := sv.CrossRecords()
   resp := code.Code{
      Success: true,
      Status:  http.StatusOK,
      Data:    records,
   }
   c.Data["json"] = resp
   c.ServeJSON()
}