alarm_device_service.bak 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. package service
  2. import (
  3. "fmt"
  4. "github.com/astaxie/beego/orm"
  5. "rtzh_elec_temperature/logger"
  6. "rtzh_elec_temperature/rtelec_app_public_lib/models"
  7. "rtzh_elec_temperature/rtelec_app_public_lib/models/vo"
  8. "rtzh_elec_temperature/tools"
  9. "strconv"
  10. )
  11. type AlarmDeviceService struct {
  12. BaseService
  13. }
  14. // 根据设备id获取设备和设备的测点配置的策略
  15. func (t *AlarmDeviceService) GetDeviceTactics(deviceid int64) ([]orm.Params, error) {
  16. db := orm.NewOrm()
  17. deviceList := []orm.Params{}
  18. qs := db.QueryTable("T_base_device_alarm")
  19. _, err := qs.Filter("deviceid", deviceid).Values(&deviceList)
  20. if err != nil {
  21. logger.Logger.Error(err)
  22. logger.Logger.Println(fmt.Sprintf("Err is :%s", err))
  23. return nil, err
  24. }
  25. var sqlCommandText = "select dev_alarm_id,tactics_id,tactics_name from t_base_device_alarm_tactics where dev_alarm_id=?"
  26. for _, row := range deviceList {
  27. tacticsList := []orm.Params{}
  28. _, err := db.Raw(sqlCommandText, row["Id"]).Values(&tacticsList)
  29. if err != nil {
  30. logger.Logger.Error(err)
  31. logger.Logger.Println(fmt.Sprintf("Err is :%s", err))
  32. return nil, err
  33. }
  34. row["tacticsList"] = tacticsList
  35. }
  36. return deviceList, nil
  37. }
  38. // 根据设备id删除这个设备的告警配置和下面的明细
  39. func (t *AlarmDeviceService) DelDeviceTactics(deviceid int64) (bool, error) {
  40. db := orm.NewOrm()
  41. lst := []orm.Params{}
  42. // 先查询这个设备下的所有策略id
  43. qs := db.QueryTable("t_base_device_alarm")
  44. _, err := qs.Filter("deviceid", deviceid).Values(&lst)
  45. if err != nil {
  46. logger.Logger.Error(err)
  47. logger.Logger.Println(fmt.Sprintf("Query tactics SQL err:%s.", err))
  48. return false, err
  49. }
  50. deviceAlarmId := ""
  51. params := []interface{}{}
  52. for i, row := range lst {
  53. if i == len(lst)-1 {
  54. deviceAlarmId += "?"
  55. } else {
  56. deviceAlarmId += "?,"
  57. }
  58. params = append(params, row["Id"])
  59. }
  60. var sqlCommandText = "delete from t_base_device_alarm_tactics where dev_alarm_id in (" + deviceAlarmId + ")"
  61. _, err = db.Raw(sqlCommandText, params).Exec()
  62. if err != nil {
  63. logger.Logger.Error(err)
  64. logger.Logger.Println(fmt.Sprintf("delete tactics SQL err:%s.\nParams is :%s", err, params))
  65. return false, err
  66. }
  67. sqlCommandText = "delete from t_base_device_alarm where deviceid=?"
  68. _, err = db.Raw(sqlCommandText, deviceid).Exec()
  69. if err == nil {
  70. return true, nil
  71. } else {
  72. logger.Logger.Error(err)
  73. logger.Logger.Println(fmt.Sprintf("Delete deviceAlarm err:%s.", err))
  74. return false, err
  75. }
  76. return true, nil
  77. }
  78. // 保存设备id对应的告警配置策略.参数有id的时候为更新,没有id的时候为新增
  79. func (t *AlarmDeviceService) SaveDeviceTactics(tactics *vo.DeviceAlarmTactics) (int64, error) {
  80. db := orm.NewOrm()
  81. obj := models.T_base_device_alarm{}
  82. if tools.IsEmpty(tactics.Id) != "" || tools.IsEmpty(tactics.Id) != "0" {
  83. obj.Id = tactics.Id
  84. }
  85. obj.Deviceid = tactics.Deviceid
  86. obj.Attrname = tactics.Attrname
  87. obj.Mpid = tactics.Mpid
  88. obj.Mpname = tactics.Mpname
  89. obj.Client_id = tactics.Client_id
  90. id, err := db.InsertOrUpdate(&obj)
  91. if err != nil {
  92. logger.Logger.Error(err)
  93. logger.Logger.Println(fmt.Sprintf("Save device tactics error:%s", err))
  94. return 0, err
  95. }
  96. details := tactics.TacticsList
  97. err = t.BatchSaveTactics(id, details)
  98. if err != nil {
  99. logger.Logger.Error(err)
  100. logger.Logger.Println(fmt.Sprintf("Batch save tactics error:%s", err))
  101. return 0, err
  102. }
  103. return id, nil
  104. }
  105. // 批量保存设备的策略
  106. func (t *AlarmDeviceService) BatchSaveTactics(alarmId int64, tacticsList []map[string]interface{}) error {
  107. db := orm.NewOrm()
  108. var sqlCommandText = "delete from t_base_device_alarm_tactics where dev_alarm_id=?"
  109. _, err := db.Raw(sqlCommandText, alarmId).Exec()
  110. if err != nil {
  111. logger.Logger.Error(err)
  112. logger.Logger.Println(fmt.Sprintf("Batch delete tactics SQL:%s.\nParam is:%s", sqlCommandText, alarmId))
  113. return err
  114. }
  115. sqlCommandText = "insert into t_base_device_alarm_tactics (dev_alarm_id,tactics_id,tactics_name) values"
  116. var parms = []interface{}{}
  117. if len(tacticsList) > 0 {
  118. for index, row := range tacticsList {
  119. if index == len(tacticsList)-1 {
  120. sqlCommandText += "(?,?,?)"
  121. } else {
  122. sqlCommandText += "(?,?,?),"
  123. }
  124. parms = append(parms, alarmId, row["tactics_id"], row["tactics_name"])
  125. }
  126. _, err := db.Raw(sqlCommandText, parms).Exec()
  127. if err != nil {
  128. logger.Logger.Error(err)
  129. logger.Logger.Println(fmt.Sprintf("Batch save tactics SQL:%s.\nParam is:%s", sqlCommandText, parms))
  130. return err
  131. }
  132. }
  133. return nil
  134. }
  135. // 复制一个设备的策略到另外一个设备
  136. func (t *AlarmDeviceService) CopyDeviceTactics(oldDeviceId int64, otherDeviceId int64) (bool, error) {
  137. oldlst, err := t.GetDeviceTactics(oldDeviceId)
  138. if err != nil {
  139. logger.Logger.Error(err)
  140. logger.Logger.Println(fmt.Sprintf("Err is :%s", err))
  141. return false, err
  142. }
  143. objVO := t.Orm2VO(oldlst)
  144. for _, row := range objVO {
  145. row.Deviceid = otherDeviceId
  146. _, err := t.SaveDeviceTactics(&row)
  147. if err != nil {
  148. logger.Logger.Error(err)
  149. logger.Logger.Println(fmt.Sprintf("Err is :%s", err))
  150. return false, err
  151. }
  152. }
  153. return true, nil
  154. }
  155. // orm.params转化为VO
  156. func (t *AlarmDeviceService) Orm2VO(lst []orm.Params) []vo.DeviceAlarmTactics {
  157. voList := []vo.DeviceAlarmTactics{}
  158. for _, row := range lst {
  159. t := vo.DeviceAlarmTactics{}
  160. d, _ := strconv.ParseInt(fmt.Sprint(row["Deviceid"]), 10, 64)
  161. t.Deviceid = d
  162. c, _ := strconv.ParseInt(fmt.Sprint(row["Client_id"]), 10, 64)
  163. t.Client_id = c
  164. m, _ := strconv.ParseInt(fmt.Sprint(row["Mpid"]), 10, 64)
  165. t.Mpid = m
  166. t.Mpname = fmt.Sprint(row["Mpname"])
  167. t.Attrname = fmt.Sprint(row["Attrname"])
  168. tacticsAttr := row["tacticsList"].([]orm.Params)
  169. tacticsList := []map[string]interface{}{}
  170. for _, row := range tacticsAttr {
  171. obj := map[string]interface{}{}
  172. obj["dev_alarm_id"] = row["dev_alarm_id"]
  173. obj["tactics_id"] = row["tactics_id"]
  174. obj["tactics_name"] = row["tactics_name"]
  175. tacticsList = append(tacticsList, obj)
  176. }
  177. t.TacticsList = tacticsList
  178. voList = append(voList, t)
  179. }
  180. return voList
  181. }
  182. // 单独修改设备告警配置阈值
  183. func (t *AlarmDeviceService) UpdateAloneDeviceTactics() {
  184. }