ciotmodel.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package controllers
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "github.com/astaxie/beego"
  6. "lc/common/models"
  7. "lc/common/protocol"
  8. )
  9. type IotModelController struct {
  10. BaseController
  11. }
  12. type ModelInfo struct {
  13. TID uint16 `json:"tid"`
  14. SID uint16 `json:"sid"`
  15. Name string `json:"name"`
  16. NameZh string `json:"namezh"`
  17. Unit string `json:"unit"`
  18. Type uint8 `json:"type"`
  19. }
  20. type RespDeviceIotModelInfo struct {
  21. Code string
  22. IotModel []ModelInfo
  23. }
  24. type ReqDeviceModel struct {
  25. Codes []string `json:"codes"`
  26. Type int `json:"type"` //1 环境监测设备,2 单灯控制器设备
  27. }
  28. // ModelUpload @Title 上传模型文件
  29. // @Description 上传模型文件
  30. // @router /v1/model/upload [post]
  31. func (o *IotModelController) ModelUpload() {
  32. f, _, err := o.Ctx.Request.FormFile("file")
  33. if err != nil {
  34. o.Response(Failure, fmt.Sprintf("参数错误:%s", err.Error()), nil)
  35. return
  36. }
  37. defer f.Close()
  38. f.Seek(0, 0)
  39. content, err := ioutil.ReadAll(f)
  40. if err != nil {
  41. o.Response(Failure, fmt.Sprintf("读文件错误:%s", err.Error()), nil)
  42. return
  43. }
  44. var obj protocol.IotModel
  45. if err := json.Unmarshal(content, &obj); err != nil {
  46. o.Response(Failure, fmt.Sprintf("内容解析错误:%s", err.Error()), nil)
  47. return
  48. }
  49. //模型存入数据库
  50. iot := models.IotModel{
  51. TID: obj.TID,
  52. Version: obj.Version,
  53. Device: obj.Device,
  54. Model: obj.Model,
  55. Protocol: obj.Protocol,
  56. File: string(content),
  57. }
  58. if err := models.G_db.Save(&iot).Error; err != nil {
  59. o.Response(Failure, fmt.Sprintf("存数据库失败:%s", err.Error()), nil)
  60. beego.Error("存数据库失败:", err.Error())
  61. return
  62. }
  63. //上行数据项存入数据库
  64. for _, v := range obj.DataUp {
  65. var str string
  66. if v.Desc != nil {
  67. str, _ = json.MarshalToString(v.Desc)
  68. }
  69. oo := models.IotModelDataUp{
  70. TID: obj.TID,
  71. Version: obj.Version,
  72. Device: obj.Device,
  73. Model: obj.Model,
  74. Protocol: obj.Protocol,
  75. SID: v.SID,
  76. Name: v.Name,
  77. NameZh: v.NameZh,
  78. Unit: v.Unit,
  79. Endian: v.Endian,
  80. Type: v.Type,
  81. Ratio: v.Ratio,
  82. Base: v.Base,
  83. UpLimit: v.UpLimit,
  84. LowLimit: v.LowLimit,
  85. Cid: v.Cid,
  86. Start: v.Start,
  87. Len: v.Len,
  88. Alarm: v.Alarm,
  89. Duration: v.Duration,
  90. Desc: str,
  91. Bit: v.Bit,
  92. }
  93. if err := models.G_db.Save(&oo).Error; err != nil {
  94. beego.Error("存数据库失败:", err.Error())
  95. }
  96. }
  97. //下行数据项存入数据库
  98. for _, v := range obj.DataDown {
  99. oo := models.IotModelCmdDown{
  100. TID: obj.TID,
  101. Version: obj.Version,
  102. Device: obj.Device,
  103. Model: obj.Model,
  104. Protocol: obj.Protocol,
  105. SID: v.SID,
  106. Name: v.Name,
  107. NameZh: v.NameZh,
  108. Unit: v.Unit,
  109. Endian: v.Endian,
  110. Type: v.Type,
  111. Ratio: v.Ratio,
  112. Base: v.Base,
  113. Code: v.Code,
  114. Addr: v.Addr,
  115. Quantity: v.Quantity,
  116. Vallen: v.Vallen,
  117. Maxval: v.Maxval,
  118. Minval: v.Minval,
  119. Desc: v.Desc,
  120. }
  121. if err := models.G_db.Save(&oo).Error; err != nil {
  122. beego.Error("存数据库失败:", err.Error())
  123. }
  124. }
  125. }
  126. // SelectModel @Title 获取设备物模型
  127. // @Description 获取设备物模型
  128. // @Param body controllers.ReqDeviceModel true "数据"
  129. // @Success 0 {int} BaseResponse.Code "成功"
  130. // @Failure 1 {int} BaseResponse.Code "失败"
  131. // @router /v1/select/model [post]
  132. func (o *IotModelController) SelectModel() {
  133. var obj ReqDeviceModel
  134. err := json.Unmarshal(o.Ctx.Input.RequestBody, &obj)
  135. if err != nil {
  136. o.Response(Failure, fmt.Sprintf("数据包解析错误:%s", err.Error()), nil)
  137. return
  138. }
  139. arr, err := models.GetMutilIotModelInfo(obj.Codes, obj.Type)
  140. if err != nil {
  141. o.Response(Failure, fmt.Sprintf("数据查询失败:%s", err.Error()), nil)
  142. return
  143. }
  144. ret := make(map[string][]ModelInfo)
  145. for _, v := range arr {
  146. mi := ModelInfo{
  147. TID: v.TID,
  148. SID: v.SID,
  149. Name: v.Name,
  150. NameZh: v.NameZh,
  151. Unit: v.Unit,
  152. Type: v.Type,
  153. }
  154. ret[v.ID] = append(ret[v.ID], mi)
  155. }
  156. o.Response(Success, "成功", ret)
  157. }