package logic import ( "git.rtzhtech.cn/iss/public-lib/dao" "git.rtzhtech.cn/iss/public-lib/dto" "git.rtzhtech.cn/iss/public-lib/model" "git.rtzhtech.cn/iss/public-lib/svc" "github.com/gogf/gf/v2/util/gconv" "gorm.io/gen/field" ) type AlarmStrategyLogic struct { SvcCtx *svc.ServiceContext } // NewAlarmStrategyLogic // @Description: 告警策略 // @return *AlarmStrategyLogic func NewAlarmStrategyLogic() *AlarmStrategyLogic { return &AlarmStrategyLogic{ SvcCtx: svc.SvcCtx, } } // AddAlarmStrategy // @Description: 添加 // @receiver l // @param in // @return error func (l *AlarmStrategyLogic) AddAlarmStrategy(in *dto.AddAlarmStrategyRes) error { in.ID = 0 err := l.SvcCtx.AlarmStrategy.Create(&in.AlarmStrategy) if err != nil { return err } return l.addRelation(in) } func (l *AlarmStrategyLogic) addRelation(in *dto.AddAlarmStrategyRes) error { for i := 0; i < len(in.Relation); i++ { in.Relation[i].ID = 0 in.Relation[i].Strategyid = in.Strategyid } err := l.SvcCtx.AlarmRelation.CreateInBatches(in.Relation, len(in.Relation)) return err } // DelAlarmStrategy // @Description: 删除 // @receiver l // @param id 策略id // @return error func (l *AlarmStrategyLogic) DelAlarmStrategy(strategyId int64) error { do := l.SvcCtx.AlarmStrategy _, err := do.Where(do.Strategyid.Eq(strategyId)).Delete() if err != nil { return err } return l.delRelation(strategyId) } func (l *AlarmStrategyLogic) delRelation(strategyId int64) error { _, err := l.SvcCtx.AlarmRelation.Where(l.SvcCtx.AlarmRelation.Strategyid.Eq(strategyId)).Delete() return err } // ModifyAlarmStrategy // @Description: 修改 // @receiver l // @param in // @param fields 更新字段,当field为null时,更新in的全部字段 // @return error func (l *AlarmStrategyLogic) ModifyAlarmStrategy(in *dto.AddAlarmStrategyRes, fields ...string) error { do := l.SvcCtx.AlarmStrategy var err error _do := do.Omit(do.ID).Where(do.Strategyid.Eq(in.Strategyid)) if fields == nil { m := gconv.Map(in.AlarmStrategy) _, err = _do.Updates(m) } else { var fieldList []field.Expr for _, v := range fields { _f, ok := do.GetFieldByName(v) if ok { fieldList = append(fieldList, _f) } } _, err = _do.Select(fieldList...).Updates(in.AlarmStrategy) } if err != nil { return err } err = l.delRelation(in.Strategyid) if err != nil { return err } err = l.addRelation(in) return err } func (l *AlarmStrategyLogic) getAlarmStrategyCond(req *dto.GetAlarmStrategyReq) *dao.Condition { _dao := l.SvcCtx.AlarmStrategy cond := NewCondition(&req.LimitPage) if req.AppId > 0 { cond.Where[_dao.Appid.String()] = req.AppId } if req.StrategyName != "" { cond.Where[_dao.Strategyname.String()+" like ?"] = "%" + req.StrategyName + "%" } if req.AlarmLevel > 0 { cond.Where[_dao.Alarmlevel.String()] = req.AlarmLevel } return cond } // GetAlarmStrategy // @Description: 分页查询 // @receiver l // @param where 查询条件 // @param page // @param limit // @return []*model.AlarmStrategy // @return error func (l *AlarmStrategyLogic) GetAlarmStrategy(req *dto.GetAlarmStrategyReq) (*dto.GetAlarmStrategyResp, error) { strategy := l.SvcCtx.AlarmStrategy relation := l.SvcCtx.AlarmRelation var out dto.GetAlarmStrategyResp var alarmStrategyList []*model.AlarmStrategy cond := l.getAlarmStrategyCond(req) err := strategy.Base.Find(cond, &alarmStrategyList) if err != nil { return nil, err } err = strategy.Base.Count(cond, &out.Total) if err != nil { return nil, err } for _, v := range alarmStrategyList { o := &dto.AlarmStrategyDto{} o.AlarmStrategy = *v o.Relation, err = relation.Where(relation.Strategyid.Eq(v.Strategyid)).Find() if err != nil { return nil, err } out.List = append(out.List, o) } return &out, err } // GetAlarmStrategyCount // @Description:查询满足条件的总数 // @receiver l // @param where 查询条件 // @return int64 // @return error func (l *AlarmStrategyLogic) GetAlarmStrategyCount(req *dto.GetAlarmStrategyReq) (int64, error) { cond := l.getAlarmStrategyCond(req) var count int64 err := l.SvcCtx.AlarmStrategy.Base.Count(cond, &count) if err != nil { return 0, err } return count, err }