houyaf 3 éve
szülő
commit
27420ef6d5

+ 3 - 3
cache/redis.go

@@ -119,14 +119,14 @@ func GetBizObjectData(objectCode string)(*viewmodels.BizObjectDataInfo, error){
 	return bizObjectData, nil
 }
 
-func SetBizObjectOAMData(objectCode, oamCode string, data *viewmodels.BizObjectOAMInfo) error {
+func SetBizObjectOAMData(objectCode, oamCode string, data *viewmodels.BizObjectOAMData) error {
 	keyStr := fmt.Sprintf("oam_%s_%s", objectCode, oamCode)
 	return SetCache(keyStr, data, 0)
 }
 
-func GetBizObjectOAMData(objectCode, oamCode string)(*viewmodels.BizObjectOAMInfo, error){
+func GetBizObjectOAMData(objectCode, oamCode string)(*viewmodels.BizObjectOAMData, error){
 	keyStr := fmt.Sprintf("oam_%s_%s", objectCode, oamCode)
-	oamData := &viewmodels.BizObjectOAMInfo{}
+	oamData := &viewmodels.BizObjectOAMData{}
 	err := Instance().Get(context.Background(), keyStr).Scan(oamData)
 	if err != nil {
 		return nil, err

+ 20 - 0
constant/constant.go

@@ -15,6 +15,14 @@ const (
 )
 
 const (
+	DATA_TYPE_INT      = 1
+	DATA_TYPE_VARCHAR  = 2
+	DATA_TYPE_FLOAT    = 3
+	DATA_TYPE_DATE     = 4
+	DATA_TYPE_DATETIME = 5
+)
+
+const (
 	SUPER_ROLE         = 1
 	OP_ROLE_ADMIN      = 2
 	OP_ROLE_USER       = 3
@@ -36,6 +44,18 @@ const (
 	OAM_DELETE        = 7
 )
 
+const (
+	BIZ_RULE_NEW_ID   = 1
+	BIZ_RULE_CUR_DATETIME = 2
+	BIZ_RULE_CUR_DATE = 3
+	BIZ_RULE_CUR_USER_ID = 4
+	BIZ_RULE_CUR_USER_NAME =5
+	BIZ_RULE_CUR_USER_POSITION_ID = 6
+	BIZ_RULE_CUR_USER_POSITION_NAME = 7
+	BIZ_RULE_CUR_USER_GROUP_ID = 8
+	BIZ_RULE_CUR_USER_GROUP_NAME = 9
+)
+
 // RetCode Result Code
 type RetCode int
 

+ 12 - 4
repositories/biz_object_oam_rule_repo.go

@@ -24,10 +24,13 @@ func (d *BizObjectOAMRuleRepo) GetList(m map[string]interface{}) ([]viewmodels.B
                            B.object_code,
                            B.object_type,
                            C.oam_title,
+                           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    `
@@ -60,12 +63,14 @@ func (d *BizObjectOAMRuleRepo) GetById(bizId, objectId, oamId, orId int64) (*vie
                            B.object_code,
                            B.object_type,
                            C.oam_title,
+                           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)
@@ -87,20 +92,23 @@ func (d *BizObjectOAMRuleRepo) GetListById(bizId, objectId, oamId int64) ([]view
                            B.object_code,
                            B.object_type,
                            C.oam_title,
+                           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([]viewmodels.BizObjectOAMRuleInfo, 0)
-    has, err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere).Get(&dataList)
-    if !has || err != nil {
+    err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&dataList)
+    if err != nil {
         return nil, err
     } else {
         return dataList, nil

+ 62 - 18
repositories/data_bus_rebo.go

@@ -8,6 +8,7 @@ import (
     "time"
     "xorm.io/xorm"
     "xps/cache"
+    "xps/constant"
     "xps/viewmodels"
 )
 
@@ -81,7 +82,7 @@ func (d *DataBusRepo) GetById(sqlStatement string, fields map[string]interface{}
 
 func (d *DataBusRepo) Create(objectCode string, values map[string]interface{}) error {
     object, err1 := cache.GetModelObjectData(objectCode)
-    if err1 == nil {
+    if err1 != nil {
         return err1
     }
     
@@ -90,21 +91,29 @@ func (d *DataBusRepo) Create(objectCode string, values map[string]interface{}) e
     
     sql := "INSERT INTO" + fmt.Sprintf(" %s ", tableName)
     sqlFields := "( "
-    sqlValues := "( "
+    sqlValues := "VALUES ( "
     for idx, field := range fields {
         fieldName := field.AttrCode
+        fieldType := field.AttrType
         fieldValue, ok := values[fieldName]
         if !ok {
             return nil
         }
         
-        if idx > 1 {
+        if idx > 0 {
             sqlFields += ","
             sqlValues += ","
         }
     
         sqlFields += fieldName + ""
-        sqlValues += fmt.Sprintf("%v", fieldValue) + ""
+        if fieldType == constant.DATA_TYPE_DATE ||
+            fieldType == constant.DATA_TYPE_DATETIME ||
+            fieldType == constant.DATA_TYPE_VARCHAR {
+            sqlValues += fmt.Sprintf("'%v'", fieldValue) + ""
+        } else {
+            sqlValues += fmt.Sprintf("%v", fieldValue) + ""
+        }
+        
     }
     sqlFields += ") "
     sqlValues += ") "
@@ -115,32 +124,48 @@ func (d *DataBusRepo) Create(objectCode string, values map[string]interface{}) e
 
 func (d *DataBusRepo) Update(objectCode string, values map[string]interface{}) error {
     object, err1 := cache.GetModelObjectData(objectCode)
-    if err1 == nil {
+    if err1 != nil {
         return err1
     }
     
     tableName := object.ObjectCode
     fields    := object.Attrs
     
-    sql := fmt.Sprintf("UPDATE table %s ", tableName)
+    sql := fmt.Sprintf("UPDATE %s ", tableName)
     
     sqlFieldSets := " SET "
     sqlWhere     := " WHERE 1 = 1 "
-    for idx, field := range fields {
+    bFirstSetValue := true
+    for _, field := range fields {
         fieldName := field.AttrCode
+        fieldType := field.AttrType
         fieldValue, ok := values[fieldName]
         if !ok {
             return nil
         }
     
-        if idx > 1 {
+        if !bFirstSetValue {
             sqlFieldSets += ","
         }
         
         if field.IsPKey <= 0 {
-            sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
+            bFirstSetValue = false
+            if fieldType == constant.DATA_TYPE_DATE ||
+                fieldType == constant.DATA_TYPE_DATETIME ||
+                fieldType == constant.DATA_TYPE_VARCHAR {
+                sqlFieldSets += fmt.Sprintf(" %s = '%v' ", fieldName, fieldValue) + ""
+            } else {
+                sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
+            }
+            
         } else {
-            sqlWhere += fmt.Sprintf(" AND %s = %v ", fieldName, fieldValue) + ""
+            if fieldType == constant.DATA_TYPE_DATE ||
+                fieldType == constant.DATA_TYPE_DATETIME ||
+                fieldType == constant.DATA_TYPE_VARCHAR {
+                sqlWhere += fmt.Sprintf(" AND %s = '%v' ", fieldName, fieldValue) + ""
+            } else {
+                sqlWhere += fmt.Sprintf(" AND %s = %v ", fieldName, fieldValue) + ""
+            }
         }
     }
     
@@ -150,7 +175,7 @@ func (d *DataBusRepo) Update(objectCode string, values map[string]interface{}) e
 
 func (d *DataBusRepo) Patch(objectCode string, values map[string]interface{}) error {
     object, err1 := cache.GetModelObjectData(objectCode)
-    if err1 == nil {
+    if err1 != nil {
         return err1
     }
     
@@ -163,27 +188,39 @@ func (d *DataBusRepo) Patch(objectCode string, values map[string]interface{}) er
     sqlWhere     := "WHERE 1 = 1"
     for idx, field := range fields {
         fieldName := field.AttrCode
+        fieldType := field.AttrType
         fieldValue, ok := values[fieldName]
         if !ok {
             return nil
         }
         
-        if idx > 1 {
+        if idx > 0 {
             sqlFieldSets += ","
         }
         
         if field.IsPKey <= 0 {
-            sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
+            if fieldType == constant.DATA_TYPE_DATE ||
+                fieldType == constant.DATA_TYPE_DATETIME ||
+                fieldType == constant.DATA_TYPE_VARCHAR {
+                sqlFieldSets += fmt.Sprintf(" %s = '%v' ", fieldName, fieldValue) + ""
+            } else {
+                sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
+            }
+            
         } else {
-            sqlWhere += fmt.Sprintf(" AND %s = %v ", fieldName, fieldValue) + ""
+            if fieldType == constant.DATA_TYPE_DATE ||
+                fieldType == constant.DATA_TYPE_DATETIME ||
+                fieldType == constant.DATA_TYPE_VARCHAR {
+                sqlWhere += fmt.Sprintf(" AND %s = '%v' ", fieldName, fieldValue) + ""
+            } else {
+                sqlWhere += fmt.Sprintf(" AND %s = %v ", fieldName, fieldValue) + ""
+            }
         }
     }
-    
     _, err := d.engine.Exec(sql + sqlFieldSets + sqlWhere)
     return err
 }
 
-
 func (d *DataBusRepo) Delete(objectCode string, values map[string]interface{}) error {
     object, err1 := cache.GetModelObjectData(objectCode)
     if err1 == nil {
@@ -201,17 +238,24 @@ func (d *DataBusRepo) Delete(objectCode string, values map[string]interface{}) e
     sqlWhere := "WHERE 1 = 1"
     for idx, field := range fields {
         fieldName := field.AttrCode
+        fieldType := field.AttrType
         fieldValue, ok := values[fieldName]
         if !ok {
             return nil
         }
         
-        if idx > 1 {
+        if idx > 0 {
             sqlFieldSets += ","
         }
         
         if field.IsPKey >= 1 {
-            sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
+            if fieldType == constant.DATA_TYPE_DATE ||
+                fieldType == constant.DATA_TYPE_DATETIME ||
+                fieldType == constant.DATA_TYPE_VARCHAR {
+                sqlFieldSets += fmt.Sprintf(" %s = '%v' ", fieldName, fieldValue) + ""
+            } else {
+                sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
+            }
         }
     }
     

+ 97 - 9
service/api_gateway_service.go

@@ -2,7 +2,9 @@ package service
 
 import (
     "errors"
+    "time"
     "xps/cache"
+    "xps/constant"
     "xps/datasource"
     "xps/repositories"
     "xps/viewmodels"
@@ -12,11 +14,12 @@ type ApiGatewayService interface {
     Get(objectCode, oamCode string, m map[string]interface{})(map[string]interface{}, error)
     GetPage(objectCode, oamCode string, m map[string]interface{})(*viewmodels.PageResult, error)
     GetList(objectCode, oamCode string, m map[string]interface{})([]map[string]interface{}, error)
+    GetParams(objectCode, oamCode string)(map[string]interface{}, error)
     
-    Create(objectCode, oamCode string, m map[string]interface{})error
-    Update(objectCode, oamCode string, m map[string]interface{})error
-    Patch(objectCode, oamCode string, m map[string]interface{})error
-    Delete(objectCode, oamCode string, m map[string]interface{})error
+    Create(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo)error
+    Update(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo)error
+    Patch(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo)error
+    Delete(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo)error
 }
 
 type apiGatewayService struct {
@@ -29,6 +32,32 @@ func NewApiGatewayService() ApiGatewayService {
     }
 }
 
+func (a *apiGatewayService) GetParams(objectCode, oamCode string) (map[string]interface{}, error) {
+    bzObjectData, err := cache.GetBizObjectData(objectCode)
+    if err != nil {
+        return nil, err
+    }
+    
+    attrs := bzObjectData.Attrs
+    result := make(map[string]interface{}, 0)
+    for _, attr := range attrs {
+        attrType := attr.AttrType
+        if attrType == constant.DATA_TYPE_INT {
+            result[attr.AttrCode] = 1
+        } else if attrType == constant.DATA_TYPE_VARCHAR {
+            result[attr.AttrCode] = "test"
+        } else if attrType == constant.DATA_TYPE_FLOAT {
+            result[attr.AttrCode] = 1.1
+        } else if attrType == constant.DATA_TYPE_DATE {
+            result[attr.AttrCode] = "2022-01-01"
+        } else if attrType == constant.DATA_TYPE_DATETIME {
+            result[attr.AttrCode] = "2022-01-01 01:01:01"
+        }
+    }
+    
+    return result, nil
+}
+
 func (a *apiGatewayService) Get(objectCode, oamCode string, m map[string]interface{})(map[string]interface{}, error) {
     params, err1 := a.Mapping2ModelObjectAttr(objectCode, m)
     if err1 != nil {
@@ -88,7 +117,12 @@ func (a *apiGatewayService) GetPage(objectCode, oamCode string, m map[string]int
     return a.Mapping2BizPageObject(objectCode, pageData)
 }
 
-func (a *apiGatewayService) Create(objectCode, oamCode string, m map[string]interface{}) error {
+func (a *apiGatewayService) Create(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
+    err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
+    if err1 != nil {
+        return err1
+    }
+    
     params, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
     if err2 != nil {
         return err2
@@ -97,7 +131,12 @@ func (a *apiGatewayService) Create(objectCode, oamCode string, m map[string]inte
     return a.dataBus.Create(objectCode, params)
 }
 
-func (a *apiGatewayService) Update(objectCode, oamCode string, m map[string]interface{}) error {
+func (a *apiGatewayService) Update(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
+    err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
+    if err1 != nil {
+        return err1
+    }
+    
     params, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
     if err2 != nil {
         return err2
@@ -106,7 +145,12 @@ func (a *apiGatewayService) Update(objectCode, oamCode string, m map[string]inte
     return a.dataBus.Update(objectCode, params)
 }
 
-func (a *apiGatewayService) Patch(objectCode, oamCode string, m map[string]interface{}) error {
+func (a *apiGatewayService) Patch(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
+    err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
+    if err1 != nil {
+        return err1
+    }
+    
     params, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
     if err2 != nil {
         return err2
@@ -115,7 +159,12 @@ func (a *apiGatewayService) Patch(objectCode, oamCode string, m map[string]inter
     return a.dataBus.Patch(objectCode, params)
 }
 
-func (a *apiGatewayService) Delete(objectCode, oamCode string, m map[string]interface{}) error {
+func (a *apiGatewayService) Delete(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
+    err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
+    if err1 != nil {
+        return err1
+    }
+    
     params, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
     if err2 != nil {
         return err2
@@ -124,6 +173,44 @@ func (a *apiGatewayService) Delete(objectCode, oamCode string, m map[string]inte
     return a.dataBus.Delete(objectCode, params)
 }
 
+func (a *apiGatewayService) HandleOAMRuleList(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
+    oamData, err1 := cache.GetBizObjectOAMData(objectCode, oamCode)
+    if err1 != nil {
+        return err1
+    }
+    oamRules := oamData.OamRules
+    for _, oamRule := range oamRules {
+       err2 := a.HandleOAMRule(&oamRule, m, user)
+       if err2 != nil {
+           return err2
+       }
+    }
+    return nil
+}
+
+func (a *apiGatewayService) HandleOAMRule(oamRule *viewmodels.BizObjectOAMRuleInfo, m map[string]interface{}, user *viewmodels.CurUserInfo)(error) {
+    if oamRule.RuleId == constant.BIZ_RULE_NEW_ID {
+        m[oamRule.TargetAttrCode] = NewID()
+    } else if oamRule.RuleId == constant.BIZ_RULE_CUR_DATETIME {
+        m[oamRule.TargetAttrCode] = time.Now()
+    } else if oamRule.RuleId == constant.BIZ_RULE_CUR_DATE {
+        m[oamRule.TargetAttrCode] = time.Now()
+    } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_ID {
+        m[oamRule.TargetAttrCode] = user.UserId
+    } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_NAME {
+        m[oamRule.TargetAttrCode] = user.UserName
+    } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_POSITION_ID {
+        m[oamRule.TargetAttrCode] = user.PositionId
+    } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_POSITION_NAME {
+        m[oamRule.TargetAttrCode] = user.PositionName
+    } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_GROUP_ID {
+        m[oamRule.TargetAttrCode] = user.GroupId
+    } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_GROUP_NAME {
+        m[oamRule.TargetAttrCode] = user.GroupName
+    }
+    return nil
+}
+
 func (a *apiGatewayService) Mapping2ModelObjectAttr(objectCode string, m map[string]interface{})(map[string]interface{}, error) {
     bzObject, err := cache.GetBizObjectData(objectCode)
     if err != nil {
@@ -216,4 +303,5 @@ func (a *apiGatewayService) Mapping2BizPageObject(objectCode string, pageData *v
     }
     
     return targetPageData, nil
-}
+}
+

+ 0 - 1
service/api_service.go

@@ -48,7 +48,6 @@ func (s *apiService) Create(api *datamodels.Api) error {
     if err != nil {
         return err
     }
-    
     apiId := api.ApiId
     return s.CacheApiData(apiId)
 }

+ 58 - 7
service/biz_object_oam_rule_service.go

@@ -1,6 +1,8 @@
 package service
 
 import (
+    "errors"
+    "xps/cache"
     "xps/datamodels"
     "xps/datasource"
     "xps/repositories"
@@ -13,36 +15,85 @@ type BizObjectOAMRuleService interface {
     Create(or *datamodels.BizObjectOAMRule) error
     Update(or *datamodels.BizObjectOAMRule) error
     Delete(m map[string]interface{}) error
+    
+    
 }
 
 type bizObjectOAMRuleService struct {
-    repo *repositories.BizObjectOAMRuleRepo
+    oamRepo *repositories.BizObjectOAMRepo
+    oamRuleRepo *repositories.BizObjectOAMRuleRepo
 }
 
 func NewBizObjectOAMRuleService() BizObjectOAMRuleService {
     return &bizObjectOAMRuleService{
-        repo: repositories.NewBizObjectOAMRuleRepo(datasource.InstanceMaster()),
+        oamRepo: repositories.NewBizObjectOAMRepo(datasource.InstanceMaster()),
+        oamRuleRepo: repositories.NewBizObjectOAMRuleRepo(datasource.InstanceMaster()),
     }
 }
 
 func (s *bizObjectOAMRuleService) GetList(m map[string]interface{}) ([]viewmodels.BizObjectOAMRuleInfo, error) {
-    return s.repo.GetList(m)
+    return s.oamRuleRepo.GetList(m)
 }
 
 func (s *bizObjectOAMRuleService) GetById(bizId, objectId, oamId, orId int64) (*viewmodels.BizObjectOAMRuleInfo, error) {
-    return s.repo.GetById(bizId, objectId, oamId, orId)
+    return s.oamRuleRepo.GetById(bizId, objectId, oamId, orId)
 }
 
 func (s *bizObjectOAMRuleService) Create(or *datamodels.BizObjectOAMRule) error {
     orId    := NewID()
     or.OrId = orId
-    return s.repo.Create(or)
+    err1 := s.oamRuleRepo.Create(or)
+    if err1 != nil {
+        return err1
+    }
+    
+    return s.CacheObjectOAMData(or.BizId, or.ObjectId, or.OamId)
 }
 
 func (s *bizObjectOAMRuleService) Update(or *datamodels.BizObjectOAMRule) error {
-    return s.repo.Update(or)
+    err1 := s.oamRuleRepo.Update(or)
+    if err1 != nil {
+        return err1
+    }
+    return s.CacheObjectOAMData(or.BizId, or.ObjectId, or.OamId)
 }
 
 func (s *bizObjectOAMRuleService) Delete(m map[string]interface{}) error {
-    return s.repo.Delete(m)
+    err1 := s.oamRuleRepo.Delete(m)
+    if err1 != nil {
+        return err1
+    }
+    
+    return nil
 }
+
+
+func (s *bizObjectOAMRuleService) CacheObjectOAMData(bizId, objectId, oamId int64) error {
+    oam, err1 := s.oamRepo.GetById(bizId, objectId, oamId)
+    if err1 != nil {
+        return err1
+    }
+    
+    oamRules, err2 := s.oamRuleRepo.GetListById(bizId, objectId, oamId)
+    if err2 != nil {
+        return err2
+    }
+    
+    oamData := &viewmodels.BizObjectOAMData{
+        BizId: oam.BizId,
+        ObjectId: oam.ObjectId,
+        OamId: oam.OamId,
+        OamCode: oam.OamCode,
+        OamType: oam.OamType,
+        OamTitle: oam.OamTitle,
+        OamRules: oamRules,
+    }
+    
+    // 缓存数据
+    err3 := cache.SetBizObjectOAMData(oam.ObjectCode, oam.OamCode, oamData)
+    if err3 != nil {
+        return errors.New("Redis缓存Model数据失败")
+    }
+    
+    return nil
+}

+ 22 - 5
service/biz_object_oam_service.go

@@ -22,11 +22,13 @@ type BizObjectOAMService interface {
 
 type bizObjectOAMService struct {
     repo *repositories.BizObjectOAMRepo
+    oamRuleRepo *repositories.BizObjectOAMRuleRepo
 }
 
 func NewBizObjectOAMService() BizObjectOAMService {
     return &bizObjectOAMService{
         repo: repositories.NewBizObjectOAMRepo(datasource.InstanceMaster()),
+        oamRuleRepo: repositories.NewBizObjectOAMRuleRepo(datasource.InstanceMaster()),
     }
 }
 
@@ -67,14 +69,29 @@ func (s *bizObjectOAMService) Delete(m map[string]interface{}) error {
 }
 
 func (s *bizObjectOAMService) CacheObjectOAMData(bizId, objectId, oamId int64) error {
-    oam, err := s.repo.GetById(bizId, objectId, oamId)
-    if err != nil {
-        return nil
+    oam, err1 := s.repo.GetById(bizId, objectId, oamId)
+    if err1 != nil {
+        return err1
+    }
+    
+    oamRules, err2 := s.oamRuleRepo.GetListById(bizId, objectId, oamId)
+    if err2 != nil {
+        return err2
+    }
+    
+    oamData := &viewmodels.BizObjectOAMData{
+        BizId: oam.BizId,
+        ObjectId: oam.ObjectId,
+        OamId: oam.OamId,
+        OamCode: oam.OamCode,
+        OamType: oam.OamType,
+        OamTitle: oam.OamTitle,
+        OamRules: oamRules,
     }
     
     // 缓存数据
-    err = cache.SetBizObjectOAMData(oam.ObjectCode, oam.OamCode, oam)
-    if err != nil {
+    err3 := cache.SetBizObjectOAMData(oam.ObjectCode, oam.OamCode, oamData)
+    if err3 != nil {
         return errors.New("Redis缓存Model数据失败")
     }
     

+ 37 - 0
viewmodels/biz_object_oam_data.go

@@ -0,0 +1,37 @@
+package viewmodels
+
+import "encoding/json"
+
+type BizObjectOAMData struct {
+    BizId        int64     `json:"bizId"           xorm:"'biz_id'          bigint      pk comment('Biz ID')         "`
+    ObjectId     int64     `json:"objectId"        xorm:"'object_id'       bigint      pk comment('Object ID')      "`
+    ObjectTitle  string    `json:"objectTitle"     xorm:"'object_title'    varchar(127)   comment('Object Title')   "`
+    ObjectType   int64     `json:"objectType"      xorm:"'object_type'     bigint         comment('Object Type')    "`
+    ObjectCode   string    `json:"objectCode"      xorm:"'object_code'     varchar(127)   comment('Object Code')    "`
+    OamId        int64     `json:"oamId"           xorm:"'oam_id'          bigint      pk comment('OAM ID')         "`
+    OamTitle     string    `json:"oamTitle"        xorm:"'oam_title'       varchar(127)   comment('OAMTitle')       "`
+    OamCode      string    `json:"oamCode"         xorm:"'oam_code'        varchar(127)   comment('OAMCode')        "`
+    OamType      int64     `json:"oamType"         xorm:"'oam_type'        bigint         comment('OAM Type')       "`
+    SqlType      int64     `json:"sqlType"         xorm:"'sql_type'        bigint         comment('SQL Type')       "`
+    SqlStatement string    `json:"sqlStatement"    xorm:"'sql_statement'   varchar(1023)  comment('Statement')      "`
+    SqlSelect    string    `json:"sqlSelect"       xorm:"'sql_select'      varchar(1023)  comment('Statement')      "`
+    SqlFrom      string    `json:"sqlFrom"         xorm:"'sql_from'        varchar(1023)  comment('Statement')      "`
+    SqlWhere     string    `json:"sqlWhere"        xorm:"'sql_where'       varchar(1023)  comment('Statement')      "`
+    SqlCount     string    `json:"sqlCount"        xorm:"'sql_count'       varchar(1023)  comment('Sql Count')      "`
+    SqlOrder     string    `json:"sqlOrder"        xorm:"'sql_order'       varchar(1023)  comment('Statement')      "`
+    OamDesc      string    `json:"oamDesc"         xorm:"'oam_desc'        varchar(1023)  comment('描述')            "`
+    OamRules      []BizObjectOAMRuleInfo `json:"oamRules"`
+}
+
+func (t *BizObjectOAMData) TableName() string {
+    return "biz_object_oam"
+}
+
+
+func (t *BizObjectOAMData) MarshalBinary() (data []byte, err error){
+    return json.Marshal(t)
+}
+
+func (t *BizObjectOAMData) UnmarshalBinary(data []byte) (err error){
+    return json.Unmarshal(data, t)
+}

+ 13 - 11
viewmodels/biz_object_oam_rule_info.go

@@ -1,17 +1,19 @@
 package viewmodels
 
 type BizObjectOAMRuleInfo struct {
-    BizId        int64     `json:"bizId"           xorm:"'biz_id'          bigint         comment('BIZ ID')         "`
-    ObjectId     int64     `json:"objectId"        xorm:"'object_id'       bigint         comment('Object ID')      "`
-    ObjectTitle  string    `json:"objectTitle"     xorm:"'object_title'    varchar(127)   comment('Object Title')   "`
-    OamId        int64     `json:"oamId"           xorm:"'oam_id'          bigint         comment('Object OAM ID')  "`
-    OamTitle     string    `json:"oamTitle"        xorm:"'oam_title'       varchar(127)   comment('OAMTitle')       "`
-    OrId         int64     `json:"orId"            xorm:"'or_id'           bigint      pk comment('Object Rule ID') "`
-    RuleId       int64     `json:"ruleId"          xorm:"'rule_id'         bigint         comment('Rule ID')        "`
-    RuleType     int64     `json:"ruleType"        xorm:"'rule_type'       bigint         comment('Type')           "`
-    RuleTitle    string    `json:"ruleTitle"       xorm:"'rule_title'      varchar(127)   comment('模型名称')        "`
-    TargetAttrId int64     `json:"targetAttrId"    xorm:"'target_attr_id'  bigint         comment('Target AttrId')  "`
-    RuleCode     string    `json:"ruleCode"        xorm:"'rule_code'       varchar(1023)  comment('Rule Code')      "`
+    BizId           int64     `json:"bizId"           xorm:"'biz_id'            bigint         comment('BIZ ID')         "`
+    ObjectId        int64     `json:"objectId"        xorm:"'object_id'         bigint         comment('Object ID')      "`
+    ObjectTitle     string    `json:"objectTitle"     xorm:"'object_title'      varchar(127)   comment('Object Title')   "`
+    OamId           int64     `json:"oamId"           xorm:"'oam_id'            bigint         comment('Object OAM ID')  "`
+    OamTitle        string    `json:"oamTitle"        xorm:"'oam_title'         varchar(127)   comment('OAMTitle')       "`
+    OrId            int64     `json:"orId"            xorm:"'or_id'             bigint      pk comment('Object Rule ID') "`
+    RuleId          int64     `json:"ruleId"          xorm:"'rule_id'           bigint         comment('Rule ID')        "`
+    RuleType        int64     `json:"ruleType"        xorm:"'rule_type'         bigint         comment('Type')           "`
+    RuleTitle       string    `json:"ruleTitle"       xorm:"'rule_title'        varchar(127)   comment('模型名称')        "`
+    TargetAttrId    int64     `json:"targetAttrId"    xorm:"'target_attr_id'    bigint         comment('Target AttrId')   "`
+    TargetAttrTitle string    `json:"targetAttrTitle" xorm:"'target_attr_title' varchar(127)   comment('Target AttrTitle')"`
+    TargetAttrCode  string    `json:"targetAttrCode"  xorm:"'target_attr_code'  varchar(127)   comment('Target AttrCode') "`
+    RuleCode        string    `json:"ruleCode"        xorm:"'rule_code'         varchar(127)   comment('Rule Code')       "`
 }
 
 func (t *BizObjectOAMRuleInfo) TableName() string {

+ 10 - 0
viewmodels/cur_user_info.go

@@ -0,0 +1,10 @@
+package viewmodels
+
+type CurUserInfo struct {
+    UserId       int64
+    UserName     string
+    PositionId   int64
+    PositionName string
+    GroupId      int64
+    GroupName    string
+}

+ 55 - 9
web/controllers/api_gateway_controller.go

@@ -5,6 +5,7 @@ import (
     "xps/cache"
     "xps/constant"
     "xps/service"
+    "xps/viewmodels"
 )
 
 type ApiGatewayController struct {
@@ -13,11 +14,21 @@ type ApiGatewayController struct {
 }
 
 func (c *ApiGatewayController) BeforeActivation(b mvc.BeforeActivation) {
-    b.Handle("GET",         "/{objectCode:string}/{oamCode:string}",           "Get"     )
-    b.Handle("POST",        "/{objectCode:string}/{oamCode:string}",           "Post"    )
-    b.Handle("PUT",         "/{objectCode:string}/{oamCode:string}",           "Put"     )
-    b.Handle("PATCH",       "/{objectCode:string}/{oamCode:string}",           "Patch"   )
-    b.Handle("DELETE",      "/{objectCode:string}/{oamCode:string}",           "Delete"  )
+    b.Handle("GET",         "/{objectCode:string}/{oamCode:string}",                "Get"       )
+    b.Handle("GET",         "/GenerateParams/{objectCode:string}/{oamCode:string}", "GetParams" )
+    b.Handle("POST",        "/{objectCode:string}/{oamCode:string}",                "Post"      )
+    b.Handle("PUT",         "/{objectCode:string}/{oamCode:string}",                "Put"       )
+    b.Handle("PATCH",       "/{objectCode:string}/{oamCode:string}",                "Patch"     )
+    b.Handle("DELETE",      "/{objectCode:string}/{oamCode:string}",                "Delete"    )
+}
+
+func (c *ApiGatewayController) GetParams(objectCode, oamCode string)*JsonResult {
+    data, err := c.Service.GetParams(objectCode, oamCode)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("获取成功", data)
+    }
 }
 
 func (c *ApiGatewayController) Get(objectCode, oamCode string)*JsonResult {
@@ -63,7 +74,16 @@ func (c *ApiGatewayController) Post(objectCode, oamCode string)*JsonResult {
         return ResultErr(err.Error(), nil)
     }
     
-    err = c.Service.Create(objectCode, oamCode, m)
+    userInfo := &viewmodels.CurUserInfo{
+        UserId: c.GetCurUserId(),
+        UserName: c.GetCurUserName(),
+        PositionId: c.GetCurUserPositionId(),
+        PositionName: c.GetCurUserPositionName(),
+        GroupId: c.GetCurUserGroupId(),
+        GroupName: c.GetCurUserGroupName(),
+    }
+    
+    err = c.Service.Create(objectCode, oamCode, m, userInfo)
     if err != nil {
         return ResultErr(err.Error(), nil)
     } else {
@@ -77,7 +97,16 @@ func (c *ApiGatewayController) Put(objectCode, oamCode string)*JsonResult {
         return ResultErr(err.Error(), nil)
     }
     
-    err = c.Service.Update(objectCode, oamCode, m)
+    userInfo := &viewmodels.CurUserInfo{
+        UserId: c.GetCurUserId(),
+        UserName: c.GetCurUserName(),
+        PositionId: c.GetCurUserPositionId(),
+        PositionName: c.GetCurUserPositionName(),
+        GroupId: c.GetCurUserGroupId(),
+        GroupName: c.GetCurUserGroupName(),
+    }
+    
+    err = c.Service.Update(objectCode, oamCode, m, userInfo)
     if err != nil {
         return ResultErr(err.Error(), nil)
     } else {
@@ -91,7 +120,15 @@ func (c *ApiGatewayController) Patch(objectCode, oamCode string)*JsonResult {
         return ResultErr(err.Error(), nil)
     }
     
-    err = c.Service.Patch(objectCode, oamCode, m)
+    userInfo := &viewmodels.CurUserInfo{
+        UserId: c.GetCurUserId(),
+        UserName: c.GetCurUserName(),
+        PositionId: c.GetCurUserPositionId(),
+        PositionName: c.GetCurUserPositionName(),
+        GroupId: c.GetCurUserGroupId(),
+        GroupName: c.GetCurUserGroupName(),
+    }
+    err = c.Service.Patch(objectCode, oamCode, m, userInfo)
     if err != nil {
         return ResultErr(err.Error(), nil)
     } else {
@@ -105,7 +142,16 @@ func (c *ApiGatewayController) Delete(objectCode, oamCode string)*JsonResult {
         return ResultErr(err.Error(), nil)
     }
     
-    err = c.Service.Delete(objectCode, oamCode, m)
+    userInfo := &viewmodels.CurUserInfo{
+        UserId: c.GetCurUserId(),
+        UserName: c.GetCurUserName(),
+        PositionId: c.GetCurUserPositionId(),
+        PositionName: c.GetCurUserPositionName(),
+        GroupId: c.GetCurUserGroupId(),
+        GroupName: c.GetCurUserGroupName(),
+    }
+    
+    err = c.Service.Delete(objectCode, oamCode, m, userInfo)
     if err != nil {
         return ResultErr(err.Error(), nil)
     } else {

+ 47 - 0
web/controllers/base_controller.go

@@ -32,6 +32,8 @@ type Base struct {
 }
 
 func (b *Base) GetCurOcId() int64 {
+	
+	
 	ocId, _ := b.Ctx.Values().GetInt64("ocId")
 	return ocId
 }
@@ -41,6 +43,51 @@ func (b *Base) GetCurUserId() int64 {
 	return userId
 }
 
+func (b *Base) GetCurUserName() string {
+	userId, _ := b.Ctx.Values().GetInt64("userId")
+	userData := GetCurUser(userId)
+	if userData != nil {
+		return userData.UserName
+	}
+	return ""
+}
+
+func (b *Base) GetCurUserPositionId() int64 {
+	userId, _ := b.Ctx.Values().GetInt64("userId")
+	userData := GetCurUser(userId)
+	if userData != nil {
+		return userData.PositionId
+	}
+	return 0
+}
+
+func (b *Base) GetCurUserPositionName() string {
+	userId, _ := b.Ctx.Values().GetInt64("userId")
+	userData := GetCurUser(userId)
+	if userData != nil {
+		return userData.PositionName
+	}
+	return ""
+}
+
+func (b *Base) GetCurUserGroupId() int64 {
+	userId, _ := b.Ctx.Values().GetInt64("userId")
+	userData := GetCurUser(userId)
+	if userData != nil {
+		return userData.GroupId
+	}
+	return 0
+}
+
+func (b *Base) GetCurUserGroupName() string {
+	userId, _ := b.Ctx.Values().GetInt64("userId")
+	userData := GetCurUser(userId)
+	if userData != nil {
+		return userData.GroupName
+	}
+	return ""
+}
+
 func (b *Base) GetOcTypeId() int64 {
 	ocTypeId, _ := b.Ctx.Values().GetInt64("ocTypeId")
 	return ocTypeId