alarmStrategyLogic.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package logic
  2. import (
  3. "git.rtzhtech.cn/iss/public-lib/dao"
  4. "git.rtzhtech.cn/iss/public-lib/dto"
  5. "git.rtzhtech.cn/iss/public-lib/model"
  6. "git.rtzhtech.cn/iss/public-lib/svc"
  7. "github.com/gogf/gf/v2/util/gconv"
  8. "gorm.io/gen/field"
  9. )
  10. type AlarmStrategyLogic struct {
  11. SvcCtx *svc.ServiceContext
  12. }
  13. // NewAlarmStrategyLogic
  14. // @Description: 告警策略
  15. // @return *AlarmStrategyLogic
  16. func NewAlarmStrategyLogic() *AlarmStrategyLogic {
  17. return &AlarmStrategyLogic{
  18. SvcCtx: svc.SvcCtx,
  19. }
  20. }
  21. // AddAlarmStrategy
  22. // @Description: 添加
  23. // @receiver l
  24. // @param in
  25. // @return error
  26. func (l *AlarmStrategyLogic) AddAlarmStrategy(in *dto.AddAlarmStrategyRes) error {
  27. in.ID = 0
  28. err := l.SvcCtx.AlarmStrategy.Create(&in.AlarmStrategy)
  29. if err != nil {
  30. return err
  31. }
  32. return l.addRelation(in)
  33. }
  34. func (l *AlarmStrategyLogic) addRelation(in *dto.AddAlarmStrategyRes) error {
  35. for i := 0; i < len(in.Relation); i++ {
  36. in.Relation[i].ID = 0
  37. in.Relation[i].Strategyid = in.Strategyid
  38. }
  39. err := l.SvcCtx.AlarmRelation.CreateInBatches(in.Relation, len(in.Relation))
  40. return err
  41. }
  42. // DelAlarmStrategy
  43. // @Description: 删除
  44. // @receiver l
  45. // @param id 策略id
  46. // @return error
  47. func (l *AlarmStrategyLogic) DelAlarmStrategy(strategyId int64) error {
  48. do := l.SvcCtx.AlarmStrategy
  49. _, err := do.Where(do.Strategyid.Eq(strategyId)).Delete()
  50. if err != nil {
  51. return err
  52. }
  53. return l.delRelation(strategyId)
  54. }
  55. func (l *AlarmStrategyLogic) delRelation(strategyId int64) error {
  56. _, err := l.SvcCtx.AlarmRelation.Where(l.SvcCtx.AlarmRelation.Strategyid.Eq(strategyId)).Delete()
  57. return err
  58. }
  59. // ModifyAlarmStrategy
  60. // @Description: 修改
  61. // @receiver l
  62. // @param in
  63. // @param fields 更新字段,当field为null时,更新in的全部字段
  64. // @return error
  65. func (l *AlarmStrategyLogic) ModifyAlarmStrategy(in *dto.AddAlarmStrategyRes, fields ...string) error {
  66. do := l.SvcCtx.AlarmStrategy
  67. var err error
  68. _do := do.Omit(do.ID).Where(do.Strategyid.Eq(in.Strategyid))
  69. if fields == nil {
  70. m := gconv.Map(in.AlarmStrategy)
  71. _, err = _do.Updates(m)
  72. } else {
  73. var fieldList []field.Expr
  74. for _, v := range fields {
  75. _f, ok := do.GetFieldByName(v)
  76. if ok {
  77. fieldList = append(fieldList, _f)
  78. }
  79. }
  80. _, err = _do.Select(fieldList...).Updates(in.AlarmStrategy)
  81. }
  82. if err != nil {
  83. return err
  84. }
  85. err = l.delRelation(in.Strategyid)
  86. if err != nil {
  87. return err
  88. }
  89. err = l.addRelation(in)
  90. return err
  91. }
  92. func (l *AlarmStrategyLogic) getAlarmStrategyCond(req *dto.GetAlarmStrategyReq) *dao.Condition {
  93. _dao := l.SvcCtx.AlarmStrategy
  94. cond := NewCondition(&req.LimitPage)
  95. if req.AppId > 0 {
  96. cond.Where[_dao.Appid.String()] = req.AppId
  97. }
  98. if req.StrategyName != "" {
  99. cond.Where[_dao.Strategyname.String()+" like ?"] = "%" + req.StrategyName + "%"
  100. }
  101. if req.AlarmLevel > 0 {
  102. cond.Where[_dao.Alarmlevel.String()] = req.AlarmLevel
  103. }
  104. return cond
  105. }
  106. // GetAlarmStrategy
  107. // @Description: 分页查询
  108. // @receiver l
  109. // @param where 查询条件
  110. // @param page
  111. // @param limit
  112. // @return []*model.AlarmStrategy
  113. // @return error
  114. func (l *AlarmStrategyLogic) GetAlarmStrategy(req *dto.GetAlarmStrategyReq) (*dto.GetAlarmStrategyResp, error) {
  115. strategy := l.SvcCtx.AlarmStrategy
  116. relation := l.SvcCtx.AlarmRelation
  117. var out dto.GetAlarmStrategyResp
  118. var alarmStrategyList []*model.AlarmStrategy
  119. cond := l.getAlarmStrategyCond(req)
  120. err := strategy.Base.Find(cond, &alarmStrategyList)
  121. if err != nil {
  122. return nil, err
  123. }
  124. err = strategy.Base.Count(cond, &out.Total)
  125. if err != nil {
  126. return nil, err
  127. }
  128. for _, v := range alarmStrategyList {
  129. o := &dto.AlarmStrategyDto{}
  130. o.AlarmStrategy = *v
  131. o.Relation, err = relation.Where(relation.Strategyid.Eq(v.Strategyid)).Find()
  132. if err != nil {
  133. return nil, err
  134. }
  135. out.List = append(out.List, o)
  136. }
  137. return &out, err
  138. }
  139. // GetAlarmStrategyCount
  140. // @Description:查询满足条件的总数
  141. // @receiver l
  142. // @param where 查询条件
  143. // @return int64
  144. // @return error
  145. func (l *AlarmStrategyLogic) GetAlarmStrategyCount(req *dto.GetAlarmStrategyReq) (int64, error) {
  146. cond := l.getAlarmStrategyCond(req)
  147. var count int64
  148. err := l.SvcCtx.AlarmStrategy.Base.Count(cond, &count)
  149. if err != nil {
  150. return 0, err
  151. }
  152. return count, err
  153. }