package repositories import ( "errors" "fmt" "xorm.io/xorm" "xps/datamodel" "xps/viewmodel" ) type BizObjectOAMRuleRepo struct { engine *xorm.Engine } func NewBizObjectOAMRuleRepo(engine *xorm.Engine) *BizObjectOAMRuleRepo { return &BizObjectOAMRuleRepo{ engine: engine, } } func (d *BizObjectOAMRuleRepo) GetList(m map[string]interface{}) ([]viewmodel.BizObjectOAMRuleInfo, error) { sqlSelect := ` SELECT A.*, B.object_title, B.object_code, B.object_type, C.oam_title, C.oam_code, D.attr_title AS target_attr_title, D.attr_code AS target_attr_code, R.rule_title ` sqlFrom := ` FROM biz_object_oam_rule AS A LEFT JOIN biz_object AS B ON (A.biz_id = B.biz_id AND A.object_id = B.object_id) LEFT JOIN biz_object_oam AS C ON (A.biz_id = C.biz_id AND A.object_id = C.object_id AND A.oam_id = C.oam_id) LEFT JOIN biz_object_attr AS D ON (A.biz_id = D.biz_id AND A.object_id = D.object_id AND A.target_attr_id = D.attr_id) LEFT JOIN biz_rule AS R ON (A.rule_id = R.rule_id) ` sqlWhere := ` WHERE 1=1 ` if bizId, ok := m["bizId"]; ok { sqlWhere += fmt.Sprintf(" AND A.biz_id = %d ", bizId) } if objectId, ok := m["objectId"]; ok { sqlWhere += fmt.Sprintf(" AND A.object_id = %d ", objectId) } if oamId, ok := m["oamId"]; ok { sqlWhere += fmt.Sprintf(" AND A.oam_id = %d ", oamId) } if keywords, ok := m["keywords"]; ok { sqlWhere += ` AND A.oam_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'" } sqlOrderBy := " ORDER BY A.oam_id ASC " datalist := make([]viewmodel.BizObjectOAMRuleInfo, 0) err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&datalist) if err != nil { return nil, err } else { return datalist, nil } } func (d *BizObjectOAMRuleRepo) GetById(bizId, objectId, oamId, orId int64) (*viewmodel.BizObjectOAMRuleInfo, error) { sqlSelect := ` SELECT A.*, B.object_title, B.object_code, B.object_type, C.oam_title, C.oam_code, D.attr_title AS target_attr_title, D.attr_code AS target_attr_code, R.rule_title ` sqlFrom := ` FROM biz_object_oam_rule AS A LEFT JOIN biz_object AS B ON (A.biz_id = B.biz_id AND A.object_id = B.object_id) LEFT JOIN biz_object_oam AS C ON (A.biz_id = C.biz_id AND A.object_id = C.object_id AND A.oam_id = C.oam_id) LEFT JOIN biz_object_attr AS D ON (A.biz_id = D.biz_id AND A.object_id = D.object_id AND A.target_attr_id = D.attr_id) LEFT JOIN biz_rule AS R ON (A.rule_id = R.rule_id) ` sqlWhere := ` WHERE 1=1 ` sqlWhere += fmt.Sprintf(" AND A.biz_id = %d ", bizId) sqlWhere += fmt.Sprintf(" AND A.object_id = %d ", objectId) sqlWhere += fmt.Sprintf(" AND A.oam_id = %d ", oamId) sqlWhere += fmt.Sprintf(" AND A.or_id = %d ", orId) data := &viewmodel.BizObjectOAMRuleInfo{} has, err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere).Get(data) if !has || err != nil { return nil, err } else { return data, nil } } func (d *BizObjectOAMRuleRepo) GetListById(bizId, objectId, oamId int64) ([]viewmodel.BizObjectOAMRuleInfo, error) { sqlSelect := ` SELECT A.*, B.object_title, B.object_code, B.object_type, C.oam_title, C.oam_code, D.attr_title AS target_attr_title, D.attr_code AS target_attr_code, R.rule_title ` sqlFrom := ` FROM biz_object_oam_rule AS A LEFT JOIN biz_object AS B ON (A.biz_id = B.biz_id AND A.object_id = B.object_id) LEFT JOIN biz_object_oam AS C ON (A.biz_id = C.biz_id AND A.object_id = C.object_id AND A.oam_id = C.oam_id) LEFT JOIN biz_object_attr AS D ON (A.biz_id = D.biz_id AND A.object_id = D.object_id AND A.target_attr_id = D.attr_id) LEFT JOIN biz_rule AS R ON (A.rule_id = R.rule_id) ` sqlWhere := ` WHERE 1=1 ` sqlWhere += fmt.Sprintf(" AND A.biz_id = %d ", bizId) sqlWhere += fmt.Sprintf(" AND A.object_id = %d ", objectId) sqlWhere += fmt.Sprintf(" AND A.oam_id = %d ", oamId) sqlOrderBy := " ORDER BY A.sort_no " dataList := make([]viewmodel.BizObjectOAMRuleInfo, 0) err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&dataList) if err != nil { return nil, err } else { return dataList, nil } } func (d *BizObjectOAMRuleRepo) Create(data *datamodel.BizObjectOAMRule) error { _, err := d.engine.Insert(data) return err } func (d *BizObjectOAMRuleRepo) Update(data *datamodel.BizObjectOAMRule) error { bizId := data.BizId objectId := data.ObjectId oamId := data.OamId orId := data.OrId _, err := d.engine. Where("biz_id = ?", bizId). Where("object_id = ?", objectId). Where("oam_id = ?", oamId). Where("or_id = ?", orId). AllCols(). Update(data) return err } func (d *BizObjectOAMRuleRepo) Delete(m map[string]interface{}) error { bizId, ok1 := m["bizId"] objectId, ok2 := m["objectId"] oamId, ok3 := m["oamId"] orId, ok4 := m["orId"] if !ok1 || !ok2 || !ok3 || !ok4 { return errors.New("数据不完整") } data := &datamodel.BizObjectOAMRule{} _, err := d.engine. Where("biz_id = ?", bizId). Where("object_id = ?", objectId). Where("oam_id = ?", oamId). Where("or_id = ?", orId). Delete(data) return err } func (d *BizObjectOAMRuleRepo) DeleteByObjectId(bizId, objectId, oamId int64) error { data := &datamodel.BizObjectOAMRule{} _, err := d.engine. Where("biz_id = ?", bizId). Where("object_id = ?", objectId). Where("oam_id = ?", oamId). Delete(data) return err }