csensor.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. package controllers
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/astaxie/beego"
  6. validation "github.com/go-ozzo/ozzo-validation/v4"
  7. "lc/common/models"
  8. )
  9. type SensorController struct {
  10. BaseController
  11. }
  12. type ReqSensor struct {
  13. Code string `json:"code"` //设备编号,禁止修改
  14. GID string `json:"gid"` //网关ID
  15. Tenant string `json:"tenant"` //租户ID
  16. Name string `json:"name"` //设备名称
  17. Brand int `json:"brand"` //品牌
  18. Model int `json:"model"` //型号
  19. Height float32 `json:"height"` //安装高度
  20. State int `json:"state"` //1启用,0禁用
  21. }
  22. func (a ReqSensor) Validate() error {
  23. return validation.ValidateStruct(&a,
  24. validation.Field(&a.Code, validation.Required, validation.Length(4, 32)),
  25. validation.Field(&a.GID, validation.Required, validation.Length(4, 32)),
  26. validation.Field(&a.Tenant, validation.Required, validation.Length(4, 8)),
  27. validation.Field(&a.State, validation.In(0, 1)),
  28. )
  29. }
  30. type Sensor struct {
  31. Code string `json:"code"` //设备编号,禁止修改
  32. GID string `json:"gid"` //网关ID
  33. Name string `json:"name"` //设备名称
  34. Brand int `json:"brand"` //品牌
  35. Model int `json:"model"` //型号
  36. Height float32 `json:"height"` //安装高度
  37. State int `json:"state"` //1启用,0禁用
  38. }
  39. func (a Sensor) Validate() error {
  40. return validation.ValidateStruct(&a,
  41. validation.Field(&a.Code, validation.Required, validation.Length(4, 32)),
  42. validation.Field(&a.GID, validation.Required, validation.Length(4, 32)),
  43. validation.Field(&a.State, validation.In(0, 1)),
  44. )
  45. }
  46. type ReqImportSensor struct {
  47. Tenant string `json:"tenant"` //租户ID
  48. List []Sensor `json:"list"` //传感器列表
  49. }
  50. func (a ReqImportSensor) Validate() error {
  51. return validation.ValidateStruct(&a,
  52. validation.Field(&a.Tenant, validation.Required, validation.Length(4, 32)),
  53. validation.Field(&a.List, validation.Required),
  54. )
  55. }
  56. // CreateSensor @Title 创建传感器设备
  57. // @Description 创建传感器设备
  58. // @Param body controllers.ReqSensor true "数据"
  59. // @Success 0 {int} BaseResponse.Code "成功"
  60. // @Failure 1 {int} BaseResponse.Code "失败"
  61. // @router /v1/create [post]
  62. func (o *SensorController) CreateSensor() {
  63. var obj ReqSensor
  64. if err := json.Unmarshal(o.Ctx.Input.RequestBody, &obj); err != nil {
  65. beego.Debug(string(o.Ctx.Input.RequestBody))
  66. o.Response(Failure, fmt.Sprintf("数据包解析错误:%s", err.Error()), nil)
  67. return
  68. }
  69. if err := obj.Validate(); err != nil {
  70. beego.Error(fmt.Sprintf("请求参数验证失败:%s", err.Error()))
  71. o.Response(Failure, fmt.Sprintf("请求参数验证失败:%s", err.Error()), nil)
  72. return
  73. }
  74. oo := models.DeviceSensor{
  75. ID: obj.Code,
  76. GID: obj.GID,
  77. Name: obj.Name,
  78. Tenant: obj.Tenant,
  79. Brand: obj.Brand,
  80. Model: obj.Model,
  81. Height: obj.Height,
  82. State: obj.State,
  83. }
  84. if err := oo.SaveFromWeb(); err != nil {
  85. o.Response(Failure, fmt.Sprintf("数据插入失败:%s", err.Error()), nil)
  86. return
  87. }
  88. o.Response(Success, "成功", oo.ID)
  89. }
  90. // UpdateSensor @Title 更新传感器设备
  91. // @Description 更新传感器设备
  92. // @Param body body controllers.ReqSensor true "数据"
  93. // @Success 0 {int} BaseResponse.Code "成功"
  94. // @Failure 1 {int} BaseResponse.Code "失败"
  95. // @router /v1/update [post]
  96. func (o *SensorController) UpdateSensor() {
  97. var obj ReqSensor
  98. if err := json.Unmarshal(o.Ctx.Input.RequestBody, &obj); err != nil {
  99. beego.Debug(string(o.Ctx.Input.RequestBody))
  100. o.Response(Failure, fmt.Sprintf("数据包解析错误:%s", err.Error()), nil)
  101. return
  102. }
  103. if err := obj.Validate(); err != nil {
  104. beego.Error(fmt.Sprintf("请求参数验证失败:%s", err.Error()))
  105. o.Response(Failure, fmt.Sprintf("请求参数验证失败:%s", err.Error()), nil)
  106. return
  107. }
  108. oo := models.DeviceSensor{
  109. ID: obj.Code,
  110. GID: obj.GID,
  111. Name: obj.Name,
  112. Tenant: obj.Tenant,
  113. Brand: obj.Brand,
  114. Model: obj.Model,
  115. Height: obj.Height,
  116. State: obj.State,
  117. }
  118. if err := oo.SaveFromWeb(); err != nil {
  119. o.Response(Failure, fmt.Sprintf("数据更新失败:%s", err.Error()), nil)
  120. return
  121. }
  122. o.Response(Success, "成功", oo.ID)
  123. }
  124. // DeleteSensor @Title 删除传感器设备
  125. // @Description 删除传感器设备
  126. // @Param code query string true "设备ID"
  127. // @Success 0 {int} BaseResponse.Code "成功"
  128. // @Failure 1 {int} BaseResponse.Code "失败"
  129. // @router /v1/delete [post]
  130. func (o *SensorController) DeleteSensor() {
  131. code := strings.Trim(o.GetString("code"), " ")
  132. if err := validation.Validate(code, validation.Required, validation.Length(4, 100)); err != nil {
  133. beego.Error(fmt.Sprintf("请求参数验证失败:%s", err.Error()))
  134. o.Response(Failure, fmt.Sprintf("请求参数验证失败:%s", err.Error()), nil)
  135. return
  136. }
  137. c := models.DeviceSensor{
  138. ID: code,
  139. }
  140. if err := c.Delete(); err != nil {
  141. beego.Error(fmt.Sprintf("删除失败:%s", err.Error()))
  142. o.Response(Failure, fmt.Sprintf("数据删除失败:%s", err.Error()), nil)
  143. return
  144. }
  145. o.Response(Success, "成功", c.ID)
  146. }
  147. // ImportSensor @Title 导入环境监测设备
  148. // @Description 导入环境监测设备
  149. // @Param body body controllers.ReqImportEnvironment true "数据"
  150. // @Success 0 {int} BaseResponse.Code "成功"
  151. // @Failure 1 {int} BaseResponse.Code "失败"
  152. // @router /v1/import [post]
  153. func (o *SensorController) ImportSensor() {
  154. var obj ReqImportSensor
  155. if err := json.Unmarshal(o.Ctx.Input.RequestBody, &obj); err != nil {
  156. beego.Debug(string(o.Ctx.Input.RequestBody))
  157. o.Response(Failure, fmt.Sprintf("数据包解析错误:%s", err.Error()), nil)
  158. return
  159. }
  160. if err := obj.Validate(); err != nil {
  161. beego.Error(fmt.Sprintf("请求参数验证失败:%s", err.Error()))
  162. o.Response(Failure, fmt.Sprintf("请求参数验证失败:%s", err.Error()), nil)
  163. return
  164. }
  165. var resp []RespImport
  166. for _, v := range obj.List {
  167. var aresp RespImport
  168. aresp.Code = v.Code
  169. oo := models.DeviceSensor{
  170. ID: v.Code,
  171. GID: v.GID,
  172. Name: v.Name,
  173. Tenant: obj.Tenant,
  174. Brand: v.Brand,
  175. Model: v.Model,
  176. Height: v.Height,
  177. State: v.State,
  178. }
  179. err := oo.SaveFromWeb()
  180. if err != nil {
  181. aresp.Error = err.Error()
  182. beego.Error(fmt.Sprintf("传感器数据导入失败,code=%s,失败原因:%s", v.Code, err.Error()))
  183. }
  184. resp = append(resp, aresp)
  185. }
  186. o.Response(Success, "成功", resp)
  187. }