alarmDeviceSettingController.go 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. package controllers
  2. import (
  3. "fmt"
  4. "github.com/goccy/go-json"
  5. "rtzh_elec_temperature/rtelec_app_public_lib/models"
  6. "rtzh_elec_temperature/rtelec_app_public_lib/service"
  7. "strconv"
  8. "strings"
  9. )
  10. type AlarmDeviceSettingController struct {
  11. BaseController
  12. }
  13. var alarmDeviceService = new(service.AlarmDeviceService)
  14. // 获取设备策略配置列表
  15. // @Summary 获取设备策略配置列表
  16. // @Description 获取设备策略配置列表。返回获取设备策略配置列表和策略明细信息
  17. // @Tags api
  18. // @Accept x-www-form-urlencoded
  19. // @Produce json
  20. // @Param deviceid query int64 true "设备ID必传."
  21. // @Param pageIndex query int true "分页当前页."
  22. // @Param pageSize query int true "分页大小."
  23. // @Success 200 {object} ApiOK|ApiError 服务访问成功
  24. // @Failure 401 status 认证未通过,一般是未指定token或token已失效
  25. // @Failure 500 status 服务器|后台发生错误
  26. // @router /list [get]
  27. func (c *AlarmDeviceSettingController) GetTacticsList() {
  28. deviceid, err := c.GetInt64("deviceid")
  29. if err != nil {
  30. c.Data["json"] = c.ApiError("设备id不能为空或者0!" + err.Error())
  31. c.ServeJSON()
  32. }
  33. pageIndex, _ := c.GetInt("pageIndex", 1)
  34. pageSize, _ := c.GetInt("pageSize", 10)
  35. if err != nil {
  36. c.Data["json"] = c.ApiError("设备id不能为空或者0!" + err.Error())
  37. c.ServeJSON()
  38. return
  39. }
  40. // 需要实现标准点和独立配置点的组装
  41. // attrname,mpname,mpid,
  42. lst, err := alarmDeviceService.GetDeviceTactics(deviceid, pageIndex, pageSize)
  43. if err != nil {
  44. c.Data["json"] = c.ApiError("获取策略列表不正常!" + err.Error())
  45. c.ServeJSON()
  46. } else {
  47. c.Data["json"] = c.ApiOK(lst)
  48. c.ServeJSON()
  49. }
  50. return
  51. }
  52. // 复制一个设备的策略到另外的设备
  53. // @Summary 复制一个设备的策略到另外的设备
  54. // @Description 复制一个设备的策略到另外的设备
  55. // @Tags api
  56. // @Accept x-www-form-urlencoded
  57. // @Produce json
  58. // @Param olddeviceid query int64 true "旧设备ID必传."
  59. // @Param newdeviceid query string true "新设备ID必传.按逗号分割的字符串"
  60. // @Success 200 {object} ApiOK|ApiError 服务访问成功
  61. // @Failure 401 status 认证未通过,一般是未指定token或token已失效
  62. // @Failure 500 status 服务器|后台发生错误
  63. // @router /copytactics [POST]
  64. func (c *AlarmDeviceSettingController) CopyDeviceTactics() {
  65. deviceid, err := c.GetInt64("olddeviceid")
  66. if err != nil {
  67. c.Data["json"] = c.ApiError("旧设备Id参数(deviceid)不允许为空或0!" + err.Error())
  68. c.ServeJSON()
  69. return
  70. }
  71. newdeviceids := c.GetString("newdeviceid")
  72. newdeviceidList := strings.Split(newdeviceids, ",")
  73. if len(newdeviceidList) == 0 {
  74. c.Data["json"] = c.ApiError("新设备id至少选一个!")
  75. c.ServeJSON()
  76. return
  77. }
  78. for _, row := range newdeviceidList {
  79. i, err := strconv.ParseInt(row, 10, 64)
  80. if err != nil {
  81. c.Data["json"] = c.ApiError("新设备id不能为空或者0!" + err.Error())
  82. c.ServeJSON()
  83. return
  84. }
  85. _, err = alarmDeviceService.CopyDeviceTactics(deviceid, i)
  86. if err != nil {
  87. c.Data["json"] = c.ApiError("设备策略信息复制出现错误:" + err.Error())
  88. c.ServeJSON()
  89. return
  90. }
  91. }
  92. c.Data["json"] = c.ApiOK("ok")
  93. c.ServeJSON()
  94. return
  95. }
  96. // 添加独立策略点
  97. // @Summary 添加独立策略点
  98. // @Description 添加独立策略点。批量提交json格式的字符串[{},{},{}...],大部分字段值可由list获取,只有threshold需要手动填写
  99. // @Tags api
  100. // @Accept x-www-form-urlencoded
  101. // @Produce json
  102. // @Param alonelist query string true "json字符串格式"
  103. // @Param alonelist.deviceid query int64 true "设备ID必传."
  104. // @Param alonelist.mpid query int64 true "测点ID必传."
  105. // @Param alonelist.attrname query int64 true "测点属性名必传."
  106. // @Param alonelist.mpname query string true "测点名称."
  107. // @Param alonelist.alarm_type query int true "告警类型(1:绝对值,2:升温)."
  108. // @Param alonelist.alarm_id query int64 true "告警策略id."
  109. // @Param alonelist.upcycle query int true "当alarm_type=2时需要传此值."
  110. // @Param alonelist.threshold query float32 true "阈值."
  111. // @router /saveAloneTactics [POST]
  112. func (c *AlarmDeviceSettingController) SaveAloneTactics() {
  113. // 把前端获取的json字符串转换为map
  114. reqAloneList := []map[string]interface{}{}
  115. jsonStr := c.GetString("alonelist")
  116. err := json.Unmarshal([]byte(jsonStr), &reqAloneList)
  117. if err != nil {
  118. if err != nil {
  119. c.Data["json"] = c.ApiError("json转换出错:" + err.Error())
  120. c.ServeJSON()
  121. return
  122. }
  123. }
  124. for _, row := range reqAloneList {
  125. var obj models.T_base_alone_alarm
  126. // 组装新增对象
  127. deviceid, err := strconv.ParseInt(fmt.Sprint(row["deviceid"]), 10, 64)
  128. if err != nil {
  129. if err != nil {
  130. c.Data["json"] = c.ApiError("设备id不能为空或者0!" + err.Error())
  131. c.ServeJSON()
  132. return
  133. }
  134. }
  135. obj.Deviceid = deviceid
  136. obj.Attrname = fmt.Sprint(row["attrname"])
  137. obj.Mpname = fmt.Sprint(row["mpname"])
  138. mpid, err := strconv.ParseInt(fmt.Sprint(row["mpid"]), 10, 64)
  139. if err != nil {
  140. if err != nil {
  141. c.Data["json"] = c.ApiError("测点id不能为空或者0!" + err.Error())
  142. c.ServeJSON()
  143. return
  144. }
  145. }
  146. obj.Mpid = mpid
  147. alarmType, err := strconv.ParseInt(fmt.Sprint(row["alarm_type"]), 10, 64)
  148. if err != nil {
  149. if err != nil {
  150. c.Data["json"] = c.ApiError("告警类型不能为空或者0!" + err.Error())
  151. c.ServeJSON()
  152. return
  153. }
  154. }
  155. obj.Alarm_type = int(alarmType)
  156. alarmId, err := strconv.ParseInt(fmt.Sprint(row["alarm_id"]), 10, 64)
  157. if err != nil {
  158. if err != nil {
  159. c.Data["json"] = c.ApiError("告警id不能为空或者0!" + err.Error())
  160. c.ServeJSON()
  161. return
  162. }
  163. }
  164. obj.Alarm_id = alarmId
  165. if alarmType == 2 {
  166. upcycle, err := strconv.ParseInt(fmt.Sprint(row["upcycle"]), 10, 64)
  167. if err != nil {
  168. if err != nil {
  169. c.Data["json"] = c.ApiError("上升周期不能为空或者0!" + err.Error())
  170. c.ServeJSON()
  171. return
  172. }
  173. }
  174. obj.Upcycle = int(upcycle)
  175. }
  176. threshold, err := strconv.ParseFloat(fmt.Sprint(row["threshold"]), 64)
  177. if err != nil {
  178. if err != nil {
  179. c.Data["json"] = c.ApiError("阈值不能为空或者0!" + err.Error())
  180. c.ServeJSON()
  181. return
  182. }
  183. }
  184. obj.Threshold = float32(threshold)
  185. // 清除现有的所有独立配置
  186. err = alarmDeviceService.DelByDeviceMp(deviceid, mpid, alarmId)
  187. if err != nil {
  188. if err != nil {
  189. c.Data["json"] = c.ApiError(fmt.Sprintf("批量删除设备下的独立配置出错:%s", err.Error()))
  190. c.ServeJSON()
  191. return
  192. }
  193. }
  194. // 再添加新的配置
  195. err = alarmDeviceService.InsertAloneDeviceTactics(obj)
  196. if err != nil {
  197. if err != nil {
  198. c.Data["json"] = c.ApiError(fmt.Sprintf("批量添加设备下的独立配置出错:%s", err.Error()))
  199. c.ServeJSON()
  200. return
  201. }
  202. }
  203. }
  204. c.Data["json"] = c.ApiOK("ok")
  205. c.ServeJSON()
  206. return
  207. }
  208. // 删除一个设备的独立策略点
  209. // @Summary 删除一个设备的独立策略点
  210. // @Description 删除一个设备的独立策略点,会把独立配置的所有的测点的阈值都清除
  211. // @Tags api
  212. // @Accept x-www-form-urlencoded
  213. // @Produce json
  214. // @Param deviceid query int64 true "设备ID必传."
  215. // @router /delAloneTactics [POST]
  216. func (c *AlarmDeviceSettingController) DelAloneTactics() {
  217. deviceid, err := c.GetInt64("deviceid")
  218. if err != nil {
  219. if err != nil {
  220. c.Data["json"] = c.ApiError("设备id不能为空或者0!" + err.Error())
  221. c.ServeJSON()
  222. return
  223. }
  224. }
  225. err = alarmDeviceService.DelAloneDeviceTactics(deviceid)
  226. if err != nil {
  227. if err != nil {
  228. c.Data["json"] = c.ApiError(fmt.Sprintf("批量删除设备下的独立配置出错:%s", err.Error()))
  229. c.ServeJSON()
  230. return
  231. }
  232. }
  233. c.Data["json"] = c.ApiOK("ok")
  234. c.ServeJSON()
  235. return
  236. }