Selaa lähdekoodia

添加井盖功能

sixian 2 vuotta sitten
vanhempi
commit
4c5623677f

+ 12 - 0
app/device/controller/manholeCoverController.go

@@ -125,4 +125,16 @@ func (c *manholeCoverCtl) AllList(ctx *gin.Context) {
 }
 
 func (c *manholeCoverCtl) Setting(ctx *gin.Context) {
+	threshold := ctx.Query("threshold")
+	idStr := ctx.Query("id")
+	id, _ := strconv.Atoi(idStr)
+	value, _ := ctx.Get(middleware.Authorization)
+	claims := value.(*middleware.Claims)
+
+	err := service.ManholeCoverService.Setting(claims.TenantId, id, threshold)
+	if err != nil {
+		ctx.JSON(http.StatusOK, err)
+		return
+	}
+	ctx.JSON(http.StatusOK, common.SuccessResponse(common.Succeeded, nil))
 }

+ 18 - 0
app/device/dao/manholeCoverDao.go

@@ -2,6 +2,7 @@ package dao
 
 import (
 	"gorm.io/gorm"
+	"iot_manager_service/util/common"
 	"time"
 )
 
@@ -38,6 +39,17 @@ type ManholeCover struct {
 	Threshold           string     `gorm:"type: varchar(255)" json:"threshold"`      //阈值
 	CameraId            int        `gorm:"type:int" json:"cameraId"`                 //归属摄像机id
 	CameraSn            string     `gorm:"type: varchar(60) " json:"cameraSn"`       //归属摄像机sn
+
+	LeanAngleAlarm int     `json:"leanAngleAlarm"`                         //告警倾斜
+	BatteryAlarm   float64 `gorm:"type: varchar(60) " json:"batteryAlarm"` //告警电压
+	MinTemp        float64 `gorm:"type: varchar(60) " json:"minTemp"`      //低温阈值
+	MaxTemp        float64 `gorm:"type: varchar(60) " json:"maxTemp"`      //高温阈值
+
+	LeanAngle    int         `json:"leanAngle"`                         //倾斜角度
+	Temperature  float64     `json:"temperature"`                       //温度
+	BatteryLevel float64     `json:"batteryLevel"`                      //电压
+	Csq          int         `json:"csq"`                               //信号
+	LastPostTime common.Time `gorm:"type:datetime" json:"lastPostTime"` //最后上报时间
 }
 
 func (ManholeCover) TableName() string {
@@ -99,3 +111,9 @@ func (c ManholeCover) GetAllDevices() ([]*ManholeCover, error) {
 	err := Db.Debug().Model(&c).Where(" tenant_id = ? and is_deleted = ? ", c.TenantId, c.IsDeleted).Scan(&devices).Error
 	return devices, err
 }
+
+func (c ManholeCover) FindDeviceIdByImei(imei string) (int, error) {
+	var device ManholeCover
+	err := Db.Debug().Raw("SELECT * FROM `device_manhole_cover` WHERE `device_i_mei` = ? AND `is_deleted` = '0' limit 1", imei).First(&device).Error
+	return device.ID, err
+}

+ 20 - 0
app/device/service/manholeCoverService.go

@@ -5,6 +5,8 @@ import (
 	"iot_manager_service/app/system/service"
 	"iot_manager_service/util/common"
 	"iot_manager_service/util/logger"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -105,3 +107,21 @@ func (s *manholeCoverService) GetList(tenantId string) ([]*dao.ManholeCover, *co
 
 	return devices, nil
 }
+
+func (s *manholeCoverService) Setting(tenantId string, id int, threshold string) error {
+	split := strings.Split(threshold, ",")
+	//fmt.Printf("split = %v \n", split)
+	leanAngle, _ := strconv.Atoi(split[0])
+	batteryAlarm, _ := strconv.ParseFloat(split[1], 64)
+	minTemp, _ := strconv.ParseFloat(split[2], 64)
+	maxTemp, _ := strconv.ParseFloat(split[3], 64)
+	device := &dao.ManholeCover{
+		TenantId:     tenantId,
+		ID:           id,
+		LeanAngle:    leanAngle,
+		BatteryAlarm: batteryAlarm,
+		MinTemp:      minTemp,
+		MaxTemp:      maxTemp,
+	}
+	return device.Update()
+}

+ 1 - 0
app/middleware/checkAuth.go

@@ -36,6 +36,7 @@ func CheckAuth() gin.HandlerFunc {
 		if strings.Contains(ctx.Request.RequestURI, "/login") ||
 			strings.Contains(ctx.Request.RequestURI, "/captcha") ||
 			strings.Contains(ctx.Request.RequestURI, "/tenant/info") ||
+			strings.Contains(ctx.Request.RequestURI, "/api/ctwing/aep/callback") ||
 			strings.Contains(ctx.Request.RequestURI, "/token") {
 			ctx.Next()
 			return

+ 46 - 0
app/operation/controller/aepCallbackController.go

@@ -0,0 +1,46 @@
+package controller
+
+import (
+	"github.com/gin-gonic/gin"
+	"iot_manager_service/app/operation/model"
+	"iot_manager_service/app/operation/service"
+	"iot_manager_service/util/common"
+	"iot_manager_service/util/logger"
+	"net/http"
+)
+
+var AepCallback = new(aepCallbackCtl)
+
+type aepCallbackCtl struct{}
+
+type aepCallbackCtlReq struct {
+	ProductID string                   `json:"productId"`
+	IMEI      string                   `json:"IMEI"`
+	Payload   model.AepCallbackPayload `json:"payload"`
+	Timestamp int64                    `json:"timestamp"`
+}
+
+func (c aepCallbackCtl) Save(ctx *gin.Context) {
+	var req *aepCallbackCtlReq
+	if err := ctx.ShouldBindJSON(&req); err != nil {
+		logger.Logger.Errorf("aepCallbackCtl err = %s \n", err.Error())
+		ctx.JSON(http.StatusOK, common.ParamsInvalidResponse(err.Error(), nil))
+		return
+	}
+	//井盖设备
+	if req.ProductID == "16682136" {
+		err := service.AepCallbackRecordService.Save(req.Payload, req.Timestamp)
+		if err != nil {
+			logger.Logger.Errorf("16682136 aepCallbackCtl err = %s \n", err.Error())
+			ctx.JSON(http.StatusOK, common.FailResponse(err.Error(), nil))
+			return
+		}
+		//TODO: 垃圾桶
+		//} else if() {
+	} else {
+		logger.Logger.Errorf("不支持设备类型 aepCallbackCtl err = %s \n", req.ProductID)
+		ctx.JSON(http.StatusOK, nil)
+		return
+	}
+	ctx.JSON(http.StatusOK, common.SuccessResponse(common.Succeeded, nil))
+}

+ 22 - 0
app/operation/controller/manholeController.go

@@ -2,6 +2,10 @@ package controller
 
 import (
 	"github.com/gin-gonic/gin"
+	"iot_manager_service/app/operation/service"
+	"iot_manager_service/util/common"
+	"net/http"
+	"strconv"
 )
 
 var Manhole = new(manholeCtl)
@@ -9,7 +13,25 @@ var Manhole = new(manholeCtl)
 type manholeCtl struct{}
 
 func (c *manholeCtl) HistoryList(ctx *gin.Context) {
+	id, _ := strconv.Atoi(ctx.Query("id"))
+	queryStartDate := ctx.Query("queryStartDate")
+	queryEndDate := ctx.Query("queryEndDate")
+	queryType := ctx.Query("queryType")
+
+	record, err := service.AepCallbackRecordService.GetHistoryList(id, queryStartDate, queryEndDate, queryType)
+	if err != nil {
+		ctx.JSON(http.StatusOK, err)
+		return
+	}
+	ctx.JSON(http.StatusOK, common.SuccessResponse(common.Succeeded, record))
 }
 
 func (c *manholeCtl) LiveData(ctx *gin.Context) {
+	id, _ := strconv.Atoi(ctx.Query("id"))
+	record, err := service.AepCallbackRecordService.GetByDeviceId(id)
+	if err != nil {
+		ctx.JSON(http.StatusOK, err)
+		return
+	}
+	ctx.JSON(http.StatusOK, common.SuccessResponse(common.Succeeded, record))
 }

+ 1 - 0
app/operation/dao/common.go

@@ -12,6 +12,7 @@ func InitDB(db *gorm.DB) {
 	Db = db
 	models := []common.TableModelAuto{
 		{&CaptureOverSpeed{}, "超速车牌数据明细"},
+		{&ManholeCoverDao{}, "井盖数据记录表"},
 	}
 	for _, val := range models {
 		//fmt.Println(val.Model)

+ 45 - 0
app/operation/dao/manholeCoverDao.go

@@ -0,0 +1,45 @@
+package dao
+
+import (
+	"iot_manager_service/app/data/dao"
+	"iot_manager_service/util/common"
+)
+
+// ManholeCoverDao 井盖数据
+type ManholeCoverDao struct {
+	ID           int         `gorm:"primary_key" json:"id"` //编号
+	DeviceId     int         `json:"deviceId"`              //设备id
+	CSQ          int         `json:"CSQ"`                   //信号
+	LeanAngle    int         `json:"lean_angle"`            //倾斜角度
+	Temperature  float64     `json:"temperature"`           //温度
+	BatteryLevel float64     `json:"battery_level"`         //电压
+	IMEI         string      `json:"IMEI"`
+	ICCID        string      `json:"ICCID"`
+	PostTime     common.Time `gorm:"type:datetime" json:"postTime"`      //采集时间
+	CreateDate   string      `gorm:"type:varchar(50)" json:"createDate"` //显示时间 日期
+}
+
+func (ManholeCoverDao) TableName() string {
+	return "manhole_cover_record"
+}
+
+func (c *ManholeCoverDao) Save() error {
+	return dao.Db.Debug().Model(&c).Create(&c).Error
+}
+
+func (c *ManholeCoverDao) BatchSave(data []ManholeCoverDao) error {
+	return dao.Db.Debug().Model(&c).Create(&data).Error
+}
+
+func (c *ManholeCoverDao) Get() error {
+	return dao.Db.Debug().Model(&c).Where("device_id = ?", c.DeviceId).Order("id desc").Find(&c).Error
+}
+
+func (c *ManholeCoverDao) GetList(start, end string) ([]ManholeCoverDao, error) {
+	var record []ManholeCoverDao
+	err := dao.Db.Debug().Where("device_id = ? and create_date>=? and create_date<=?", c.DeviceId, start, end).Find(&record).Error
+	if err != nil {
+		return nil, err
+	}
+	return record, nil
+}

+ 10 - 0
app/operation/model/aepCallback.go

@@ -0,0 +1,10 @@
+package model
+
+type AepCallbackPayload struct {
+	Temperature  float64 `json:"temperature"`
+	LeanAngle    int     `json:"lean_angle"`
+	BatteryLevel float64 `json:"battery_level"`
+	IMEI         string  `json:"IMEI"`
+	ICCID        string  `json:"ICCID"`
+	CSQ          int     `json:"CSQ"`
+}

+ 6 - 0
app/operation/model/manhole.go

@@ -0,0 +1,6 @@
+package model
+
+type ManholeHistoryList struct {
+	Name  string      `json:"name"`
+	Value interface{} `json:"value"`
+}

+ 87 - 0
app/operation/service/aepCallbackRecordService.go

@@ -0,0 +1,87 @@
+package service
+
+import (
+	"errors"
+	device "iot_manager_service/app/device/dao"
+	"iot_manager_service/app/operation/dao"
+	"iot_manager_service/app/operation/model"
+	"iot_manager_service/util/common"
+	"time"
+)
+
+var AepCallbackRecordService = new(aepCallbackRecordService)
+
+type aepCallbackRecordService struct{}
+
+func (s *aepCallbackRecordService) Save(data model.AepCallbackPayload, timestamp int64) error {
+	datatime := time.Unix(timestamp/1000, 0)
+	imei := data.IMEI
+	deviceId, err := device.ManholeCover{}.FindDeviceIdByImei(imei)
+	if err != nil {
+		return errors.New("没有添加这个imei的设备" + imei)
+	}
+
+	record := dao.ManholeCoverDao{
+		CSQ:          data.CSQ,
+		IMEI:         data.IMEI,
+		ICCID:        data.ICCID,
+		Temperature:  data.Temperature,
+		LeanAngle:    data.LeanAngle,
+		BatteryLevel: data.BatteryLevel,
+	}
+	record.DeviceId = deviceId
+	record.PostTime = common.Time(datatime)
+	record.CreateDate = datatime.Format("2006-01-02")
+
+	manholeCover := device.ManholeCover{
+		ID:           deviceId,
+		Temperature:  data.Temperature,
+		LeanAngle:    data.LeanAngle,
+		BatteryLevel: data.BatteryLevel,
+		Csq:          data.CSQ,
+		LastPostTime: common.Time(datatime),
+	}
+	err = manholeCover.Update()
+	if err != nil {
+		return errors.New(imei + "更新井盖的参数失败" + err.Error())
+	}
+	return record.Save()
+}
+
+func (s *aepCallbackRecordService) GetByDeviceId(deviceId int) (dao.ManholeCoverDao, error) {
+	var record dao.ManholeCoverDao
+	record.DeviceId = deviceId
+	err := record.Get()
+	if err != nil {
+		return dao.ManholeCoverDao{}, err
+	}
+	return record, nil
+}
+
+func (s *aepCallbackRecordService) GetHistoryList(deviceId int, queryStartDate, queryEndDate, queryType string) ([]model.ManholeHistoryList, error) {
+	var record dao.ManholeCoverDao
+	record.DeviceId = deviceId
+	records, err := record.GetList(queryStartDate, queryEndDate)
+	if err != nil {
+		return nil, err
+	}
+	var list []model.ManholeHistoryList
+	for _, coverDao := range records {
+		var value interface{}
+		if queryType == "temp" {
+			value = coverDao.Temperature
+		} else if queryType == "battery" {
+			value = coverDao.BatteryLevel
+		} else if queryType == "csq" {
+			value = coverDao.CSQ
+		} else if queryType == "lean_angle" {
+			value = coverDao.LeanAngle
+		}
+		list = append(list, model.ManholeHistoryList{
+			Name:  coverDao.CreateDate,
+			Value: value,
+		})
+	}
+
+	return list, nil
+}

+ 3 - 5
router/router.go

@@ -3,7 +3,6 @@ package router
 import (
 	"github.com/gin-gonic/gin"
 	device "iot_manager_service/app/device/controller"
-	"iot_manager_service/app/logapi"
 	"iot_manager_service/app/middleware"
 	multimedia "iot_manager_service/app/multimedia/controller"
 	operation "iot_manager_service/app/operation/controller"
@@ -571,7 +570,7 @@ func InitRouter(engine *gin.Engine) {
 	manholeGroup := operationGroup.Group("/manhole")
 	{
 		manholeGroup.GET("/now", operation.Manhole.LiveData)
-		manholeGroup.GET("/history-list", operation.Manhole.LiveData)
+		manholeGroup.GET("/history-list", operation.Manhole.HistoryList)
 	}
 	//运营统计-设备
 	operationDeviceGroup := operationGroup.Group("/device")
@@ -644,9 +643,8 @@ func InitRouter(engine *gin.Engine) {
 		//报表统计
 		captureGroup.GET("report/list", operation.Capture.ReportList)
 	}
-	logGroup := engine.Group("/api/blade-log/usual")
+	logGroup := engine.Group("/api/ctwing/aep")
 	{
-		logGroup.GET("/list", logapi.LogController.List)
-		logGroup.GET("/detail", logapi.LogController.Detail)
+		logGroup.POST("/callback", operation.AepCallback.Save)
 	}
 }