| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- package controllers
- import (
- "fmt"
- "io/ioutil"
- "github.com/astaxie/beego"
- "lc/common/models"
- "lc/common/protocol"
- )
- type IotModelController struct {
- BaseController
- }
- type ModelInfo struct {
- TID uint16 `json:"tid"`
- SID uint16 `json:"sid"`
- Name string `json:"name"`
- NameZh string `json:"namezh"`
- Unit string `json:"unit"`
- Type uint8 `json:"type"`
- }
- type RespDeviceIotModelInfo struct {
- Code string
- IotModel []ModelInfo
- }
- type ReqDeviceModel struct {
- Codes []string `json:"codes"`
- Type int `json:"type"` //1 环境监测设备,2 单灯控制器设备
- }
- // ModelUpload @Title 上传模型文件
- // @Description 上传模型文件
- // @router /v1/model/upload [post]
- func (o *IotModelController) ModelUpload() {
- f, _, err := o.Ctx.Request.FormFile("file")
- if err != nil {
- o.Response(Failure, fmt.Sprintf("参数错误:%s", err.Error()), nil)
- return
- }
- defer f.Close()
- f.Seek(0, 0)
- content, err := ioutil.ReadAll(f)
- if err != nil {
- o.Response(Failure, fmt.Sprintf("读文件错误:%s", err.Error()), nil)
- return
- }
- var obj protocol.IotModel
- if err := json.Unmarshal(content, &obj); err != nil {
- o.Response(Failure, fmt.Sprintf("内容解析错误:%s", err.Error()), nil)
- return
- }
- //模型存入数据库
- iot := models.IotModel{
- TID: obj.TID,
- Version: obj.Version,
- Device: obj.Device,
- Model: obj.Model,
- Protocol: obj.Protocol,
- File: string(content),
- }
- if err := models.G_db.Save(&iot).Error; err != nil {
- o.Response(Failure, fmt.Sprintf("存数据库失败:%s", err.Error()), nil)
- beego.Error("存数据库失败:", err.Error())
- return
- }
- //上行数据项存入数据库
- for _, v := range obj.DataUp {
- var str string
- if v.Desc != nil {
- str, _ = json.MarshalToString(v.Desc)
- }
- oo := models.IotModelDataUp{
- TID: obj.TID,
- Version: obj.Version,
- Device: obj.Device,
- Model: obj.Model,
- Protocol: obj.Protocol,
- SID: v.SID,
- Name: v.Name,
- NameZh: v.NameZh,
- Unit: v.Unit,
- Endian: v.Endian,
- Type: v.Type,
- Ratio: v.Ratio,
- Base: v.Base,
- UpLimit: v.UpLimit,
- LowLimit: v.LowLimit,
- Cid: v.Cid,
- Start: v.Start,
- Len: v.Len,
- Alarm: v.Alarm,
- Duration: v.Duration,
- Desc: str,
- Bit: v.Bit,
- }
- if err := models.G_db.Save(&oo).Error; err != nil {
- beego.Error("存数据库失败:", err.Error())
- }
- }
- //下行数据项存入数据库
- for _, v := range obj.DataDown {
- oo := models.IotModelCmdDown{
- TID: obj.TID,
- Version: obj.Version,
- Device: obj.Device,
- Model: obj.Model,
- Protocol: obj.Protocol,
- SID: v.SID,
- Name: v.Name,
- NameZh: v.NameZh,
- Unit: v.Unit,
- Endian: v.Endian,
- Type: v.Type,
- Ratio: v.Ratio,
- Base: v.Base,
- Code: v.Code,
- Addr: v.Addr,
- Quantity: v.Quantity,
- Vallen: v.Vallen,
- Maxval: v.Maxval,
- Minval: v.Minval,
- Desc: v.Desc,
- }
- if err := models.G_db.Save(&oo).Error; err != nil {
- beego.Error("存数据库失败:", err.Error())
- }
- }
- }
- // SelectModel @Title 获取设备物模型
- // @Description 获取设备物模型
- // @Param body controllers.ReqDeviceModel true "数据"
- // @Success 0 {int} BaseResponse.Code "成功"
- // @Failure 1 {int} BaseResponse.Code "失败"
- // @router /v1/select/model [post]
- func (o *IotModelController) SelectModel() {
- var obj ReqDeviceModel
- err := json.Unmarshal(o.Ctx.Input.RequestBody, &obj)
- if err != nil {
- o.Response(Failure, fmt.Sprintf("数据包解析错误:%s", err.Error()), nil)
- return
- }
- arr, err := models.GetMutilIotModelInfo(obj.Codes, obj.Type)
- if err != nil {
- o.Response(Failure, fmt.Sprintf("数据查询失败:%s", err.Error()), nil)
- return
- }
- ret := make(map[string][]ModelInfo)
- for _, v := range arr {
- mi := ModelInfo{
- TID: v.TID,
- SID: v.SID,
- Name: v.Name,
- NameZh: v.NameZh,
- Unit: v.Unit,
- Type: v.Type,
- }
- ret[v.ID] = append(ret[v.ID], mi)
- }
- o.Response(Success, "成功", ret)
- }
|