package webserver
|
|
import (
|
"encoding/json"
|
"fmt"
|
"io/ioutil"
|
"net/http"
|
|
"vamicro/iotData-service/manage"
|
"vamicro/iotData-service/mqtt"
|
"vamicro/iotData-service/serializer"
|
|
"github.com/gin-gonic/gin"
|
)
|
|
func Cors() gin.HandlerFunc {
|
return func(c *gin.Context) {
|
method := c.Request.Method
|
//fmt.Println(method)
|
c.Header("Access-Control-Allow-Origin", "*")
|
c.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token, developerId")
|
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, PATCH, DELETE")
|
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")
|
c.Header("Access-Control-Allow-Credentials", "true")
|
|
// 放行所有OPTIONS方法,因为有的模板是要请求两次的
|
if method == "OPTIONS" {
|
c.AbortWithStatus(http.StatusNoContent)
|
}
|
|
// 处理请求
|
c.Next()
|
}
|
}
|
|
func Serve(port string) {
|
r := gin.Default()
|
|
r.Use(Cors())
|
urlPrefix := "/iotdata"
|
r.POST(urlPrefix+"/devices", getAllDevices)
|
r.POST(urlPrefix+"/audio", sendAudioMsg)
|
r.GET(urlPrefix+"/device", getDeviceDetail)
|
r.GET(urlPrefix+"/banner-info", getBasicInfo)
|
r.GET(urlPrefix+"/seven-day", getSevenDayCount)
|
r.POST(urlPrefix+"/low-battery", getLowBatWarn)
|
r.POST(urlPrefix+"/out-bound", getOutWarn)
|
r.POST(urlPrefix+"/handle-warn", handleWarn)
|
r.POST(urlPrefix+"/history", gethistory)
|
r.POST(urlPrefix+"/create-zone", createZone)
|
r.POST(urlPrefix+"/del-zone", delZone)
|
r.POST(urlPrefix+"/zones", getZones)
|
|
r.Static("/iotdata/assets", "./assets")
|
r.Run(":" + port)
|
}
|
|
func getAllDevices(c *gin.Context) {
|
s := manage.ListDeviceService{}
|
if err := c.ShouldBind(&s); err == nil {
|
res := s.List()
|
c.JSON(200, res)
|
} else {
|
c.JSON(200, ErrorResponse(err))
|
}
|
}
|
|
func getDeviceDetail(c *gin.Context) {
|
s := manage.DeviceDetailService{}
|
sn := c.Query("sn")
|
res := s.Show(sn)
|
c.JSON(200, res)
|
}
|
|
func sendAudioMsg(c *gin.Context) {
|
sn := c.Query("sn")
|
if sn == "" {
|
c.JSON(500, map[string]interface{}{
|
"success": false,
|
"data": "",
|
"msg": "参数id不能为空",
|
})
|
return
|
}
|
top := "/device_id/" + sn + "/device/helmetAudio"
|
body, _ := ioutil.ReadAll(c.Request.Body)
|
fmt.Println("文本是:::", string(body))
|
go mqtt.Client.Publish(top, body)
|
c.JSON(200, map[string]interface{}{
|
"success": true,
|
"msg": "请求成功",
|
})
|
}
|
|
func getBasicInfo(c *gin.Context) {
|
s := manage.BasicInfoService{}
|
res := s.Show()
|
c.JSON(200, res)
|
}
|
|
func getSevenDayCount(c *gin.Context) {
|
s := manage.SevenDayCountService{}
|
res := s.Show()
|
c.JSON(200, res)
|
}
|
func getLowBatWarn(c *gin.Context) {
|
s := manage.LowBatteryService{}
|
if err := c.ShouldBind(&s); err == nil {
|
res := s.Show()
|
c.JSON(200, res)
|
} else {
|
c.JSON(200, ErrorResponse(err))
|
}
|
}
|
|
func getOutWarn(c *gin.Context) {
|
s := manage.LowBatteryService{}
|
if err := c.ShouldBind(&s); err == nil {
|
res := s.ShowOutBound()
|
c.JSON(200, res)
|
} else {
|
c.JSON(200, ErrorResponse(err))
|
}
|
}
|
|
func gethistory(c *gin.Context) {
|
s := manage.LowBatteryService{}
|
if err := c.ShouldBind(&s); err == nil {
|
res := s.ShowHistory()
|
c.JSON(200, res)
|
} else {
|
c.JSON(200, ErrorResponse(err))
|
}
|
}
|
|
func handleWarn(c *gin.Context) {
|
s := manage.HandleWarningService{}
|
if err := c.ShouldBind(&s); err == nil {
|
res := s.Handle()
|
c.JSON(200, res)
|
} else {
|
c.JSON(200, ErrorResponse(err))
|
}
|
}
|
|
func createZone(c *gin.Context) {
|
s := manage.ZoneService{}
|
if err := c.ShouldBind(&s); err == nil {
|
res := s.CreteOrEdit()
|
c.JSON(200, res)
|
} else {
|
c.JSON(200, ErrorResponse(err))
|
}
|
}
|
|
func delZone(c *gin.Context) {
|
s := manage.DelZoneService{}
|
if err := c.ShouldBind(&s); err == nil {
|
res := s.Del()
|
c.JSON(200, res)
|
} else {
|
c.JSON(200, ErrorResponse(err))
|
}
|
|
}
|
|
func getZones(c *gin.Context) {
|
s := manage.ZoneService{}
|
if err := c.ShouldBind(&s); err == nil {
|
res := s.List()
|
c.JSON(200, res)
|
} else {
|
c.JSON(200, ErrorResponse(err))
|
}
|
}
|
func ErrorResponse(err error) serializer.Response {
|
if _, ok := err.(*json.UnmarshalTypeError); ok {
|
return serializer.Response{
|
Status: 40001,
|
Msg: "JSON类型不匹配",
|
Error: fmt.Sprint(err),
|
}
|
}
|
return serializer.Response{
|
Status: 40001,
|
Msg: "参数错误",
|
Error: fmt.Sprint(err),
|
}
|
}
|