houyaf 3 лет назад
Родитель
Сommit
39117648f0

+ 27 - 0
cache/redis.go

@@ -265,6 +265,33 @@ func GetBizObjectOAMParams(objectCode, oamCode string)([]viewmodels.BizObjectOAM
 	return dataList, nil
 }
 
+// SetBizObjectOAMMapping : Biz Object OAM Mapping
+func SetBizObjectOAMMapping(objectCode, oamCode string, data []viewmodels.BizObjectOAMMappingInfo) error {
+	keyStr := fmt.Sprintf("biz_object_oam_mapping_%s_%s", objectCode, oamCode)
+	dataList, _ := json.Marshal(data)
+	err := Instance().Set(context.Background(), keyStr, dataList, 0).Err()
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+// GetBizObjectOAMMapping : Biz Object OAM Mapping
+func GetBizObjectOAMMapping(objectCode, oamCode string)([]viewmodels.BizObjectOAMMappingInfo, error){
+	keyStr := fmt.Sprintf("biz_object_oam_mapping_%s_%s", objectCode, oamCode)
+	bytes, err1 := Instance().Get(context.Background(), keyStr).Bytes()
+	if err1 != nil {
+		return nil, err1
+	}
+	
+	dataList := make([]viewmodels.BizObjectOAMMappingInfo, 0)
+	err2 := json.Unmarshal(bytes, &dataList)
+	if err2 != nil {
+		return nil, err2
+	}
+	return dataList, nil
+}
+
 
 // SetBizObjectMapping : Biz Object Mapping
 func SetBizObjectMapping(objectCode string, data []viewmodels.BizObjectMappingInfo) error {

+ 12 - 3
constant/constant.go

@@ -17,9 +17,10 @@ const (
 const (
 	DATA_TYPE_INT      = 1
 	DATA_TYPE_VARCHAR  = 2
-	DATA_TYPE_FLOAT    = 3
-	DATA_TYPE_DATE     = 4
-	DATA_TYPE_DATETIME = 5
+	DATA_TYPE_DECIMAL  = 4
+	DATA_TYPE_DATE     = 5
+	DATA_TYPE_DATETIME = 6
+	DATA_TYPE_TIME     = 7
 )
 
 const (
@@ -45,6 +46,14 @@ const (
 )
 
 const (
+	API_METHOD_GET    = 1
+	API_METHOD_POST   = 2
+	API_METHOD_PUT    = 3
+	API_METHOD_PATCH  = 4
+	API_METHOD_DELETE = 5
+)
+
+const (
 	BIZ_RULE_NEW_ID   = 1
 	BIZ_RULE_CUR_DATETIME = 2
 	BIZ_RULE_CUR_DATE = 3

+ 17 - 0
datamodels/biz_object_oam_mapping.go

@@ -0,0 +1,17 @@
+package datamodels
+
+type BizObjectOAMMapping struct {
+    MappingId       int64     `json:"mappingId"         xorm:"'mapping_id'        bigint    pk  comment('Mapping ID')       "`
+    BizId           int64     `json:"bizId"             xorm:"'biz_id'            bigint        comment('Biz ID')           "`
+    ObjectId        int64     `json:"objectId"          xorm:"'object_id'         bigint        comment('Object ID')        "`
+    OamId           int64     `json:"oamId"             xorm:"'oam_id'            bigint        comment('OAM ID')           "`
+    MappingModelId  int64     `json:"mappingModelId"    xorm:"'mapping_model_id'  bigint        comment('Mapping Model ID') "`
+    MappingObjectId int64     `json:"mappingObjectId"   xorm:"'mapping_object_id' bigint        comment('Mapping Object ID')"`
+    MappingOamId    int64     `json:"mappingOamId"      xorm:"'mapping_oam_id'    bigint        comment('Mapping OAM ID')   "`
+    SortNo          int64     `json:"sortNo"            xorm:"'sort_no'           bigint        comment('Sort No')          "`
+    Remark          string    `json:"remark"            xorm:"'remark'            varchar(255)  comment('Remark')           "`
+}
+
+func (t *BizObjectOAMMapping) TableName() string {
+    return "biz_object_oam_mapping"
+}

+ 7 - 5
datamodels/biz_object_oam_params.go

@@ -7,13 +7,15 @@ type BizObjectOAMParams 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')        "`
     OamId           int64     `json:"oamId"            xorm:"'oam_id'           bigint      pk comment('OAM ID')           "`
-    ParamsId        int64     `json:"paramsId"         xorm:"'params_id'        bigint      pk comment('Params ID')        "`
+    ParamId         int64     `json:"paramId"          xorm:"'param_id'         bigint      pk comment('Param ID')        "`
     LogicalOperator string    `json:"logicalOperator"  xorm:"'logical_operator' varchar(15)    comment('Logical Operator') "`
-    ParamsTarget    string    `json:"paramsTarget"     xorm:"'params_target'    varchar(127)   comment('Params Target')    "`
+    ParamName       string    `json:"paramName"        xorm:"'param_name'       varchar(127)   comment('Param Name')      "`
     CompareOperator string    `json:"compareOperator"  xorm:"'compare_operator' varchar(15)    comment('Compare Operator') "`
-    ParamsValue     string    `json:"paramsValue"      xorm:"'params_value'     varchar(127)   comment('Params Value')     "`
-    ParamsType      int64     `json:"paramsType"       xorm:"'params_type'      bigint         comment('Params Type')      "`
-    ParamsRemark    string    `json:"paramsRemark"     xorm:"'params_remark'    varchar(255)   comment('Params Remark')    "`
+    ParamType       int64     `json:"paramType"        xorm:"'param_type'       bigint         comment('Param Type')      "`
+    ParamValue      string    `json:"paramValue"       xorm:"'param_value'      varchar(127)   comment('Param Value')     "`
+    ParamRemark     string    `json:"paramRemark"      xorm:"'param_remark'     varchar(255)   comment('Param Remark')    "`
+    IsRuled         int64     `json:"isRuled"          xorm:"'is_ruled'         bigint         comment('Is Ruled')         "`
+    RuleId          int64     `json:"ruleId"           xorm:"'rule_id'          bigint         comment('Rule ID')          "`
     SortNo          int64     `json:"sortNo"           xorm:"'sort_no'          bigint         comment('Sort No')          "`
     CreatedBy       int64     `json:"createdBy"        xorm:"'created_by'"`
     CreatedAt       time.Time `json:"createdAt"        xorm:"'created_at'"`

+ 1 - 0
mapping/attr_mapping.go

@@ -0,0 +1 @@
+package mapping

+ 1 - 0
mapping/object_mapping.go

@@ -0,0 +1 @@
+package mapping

+ 145 - 0
repositories/biz_object_oam_mapping_repo.go

@@ -0,0 +1,145 @@
+package repositories
+
+import (
+"errors"
+"fmt"
+"xorm.io/xorm"
+"xps/datamodels"
+"xps/viewmodels"
+)
+
+type BizObjectOAMMappingRepo struct {
+    engine *xorm.Engine
+}
+
+func NewBizObjectOAMMappingRepo(engine *xorm.Engine) *BizObjectOAMMappingRepo {
+    return &BizObjectOAMMappingRepo{
+        engine: engine,
+    }
+}
+
+func (d *BizObjectOAMMappingRepo) GetList(m map[string]interface{}) ([]viewmodels.BizObjectOAMMappingInfo, error) {
+    sqlSelect  := ` SELECT    A.* ,
+                              B.object_title,
+                              B.object_code,
+                              C.oam_title,
+                              C.oam_code   `
+    sqlFrom    := ` FROM      biz_object_oam_mapping 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)`
+    sqlWhere   := ` WHERE  A.deleted_flag = 0    `
+    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)
+    }
+    sqlOrderBy := " ORDER BY A.param_id ASC "
+    
+    datalist   := make([]viewmodels.BizObjectOAMMappingInfo, 0)
+    err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&datalist)
+    if err != nil {
+        return nil, err
+    } else {
+        return datalist, nil
+    }
+}
+
+func (d *BizObjectOAMMappingRepo) GetById(bizId, objectId, oamId, orId int64) (*viewmodels.BizObjectOAMMappingInfo, error) {
+    sqlSelect  := ` SELECT    A.* ,
+                              B.object_title,
+                              B.object_code,
+                              C.oam_title,
+                              C.oam_code   `
+    sqlFrom    := ` FROM      biz_object_oam_mapping 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)`
+    sqlWhere   := ` WHERE A.deleted_flag = 0    `
+    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    := &viewmodels.BizObjectOAMMappingInfo{}
+    has, err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere).Get(data)
+    if !has || err != nil {
+        return nil, err
+    } else {
+        return data, nil
+    }
+}
+
+func (d *BizObjectOAMMappingRepo) GetListById(bizId, objectId, oamId int64) ([]viewmodels.BizObjectOAMMappingInfo, error) {
+    sqlSelect  := ` SELECT    A.* ,
+                              B.object_title,
+                              B.object_code,
+                              C.oam_title,
+                              C.oam_code   `
+    sqlFrom    := ` FROM      biz_object_oam_mapping 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)`
+    sqlWhere   := ` WHERE A.deleted_flag = 0    `
+    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.BizObjectOAMMappingInfo, 0)
+    err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&dataList)
+    if err != nil {
+        return nil, err
+    } else {
+        return dataList, nil
+    }
+}
+
+func (d *BizObjectOAMMappingRepo) Create(data *datamodels.BizObjectOAMMapping) error {
+    _, err := d.engine.Insert(data)
+    return err
+}
+
+func (d *BizObjectOAMMappingRepo) Update(data *datamodels.BizObjectOAMMapping) error {
+    bizId     := data.BizId
+    objectId  := data.ObjectId
+    oamId     := data.OamId
+    mappingId  := data.MappingId
+    _, err := d.engine.
+        Where("biz_id = ?",    bizId).
+        Where("object_id = ?", objectId).
+        Where("oam_id = ?",    oamId).
+        Where("mapping_id = ?", mappingId).
+        AllCols().
+        Update(data)
+    return err
+}
+
+func (d *BizObjectOAMMappingRepo) Delete(m map[string]interface{}) error {
+    bizId, ok1    := m["bizId"]
+    objectId, ok2 := m["objectId"]
+    oamId, ok3    := m["oamId"]
+    mappingId, ok4  := m["mappingId"]
+    if !ok1 || !ok2 || !ok3 || !ok4 {
+        return errors.New("数据不完整")
+    }
+    data := &datamodels.BizObjectOAMMapping{}
+    _, err := d.engine.
+        Where("biz_id = ?", bizId).
+        Where("object_id = ?", objectId).
+        Where("oam_id = ?", oamId).
+        Where("mapping_id = ?", mappingId).
+        Delete(data)
+    return err
+}
+
+func (d *BizObjectOAMMappingRepo) DeleteByObjectId(bizId, objectId, oamId int64) error {
+    data := &datamodels.BizObjectOAMMapping{}
+    _, err := d.engine.
+        Where("biz_id = ?", bizId).
+        Where("object_id = ?", objectId).
+        Where("oam_id = ?", oamId).
+        Delete(data)
+    return err
+}

+ 7 - 7
repositories/biz_object_oam_params_repo.go

@@ -37,7 +37,7 @@ func (d *BizObjectOAMParamsRepo) GetList(m map[string]interface{}) ([]viewmodels
     if oamId, ok := m["oamId"]; ok {
         sqlWhere += fmt.Sprintf(" AND A.oam_id = %d ", oamId)
     }
-    sqlOrderBy := " ORDER BY A.params_id ASC "
+    sqlOrderBy := " ORDER BY A.param_id ASC "
     
     datalist   := make([]viewmodels.BizObjectOAMParamsInfo, 0)
     err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&datalist)
@@ -105,22 +105,22 @@ func (d *BizObjectOAMParamsRepo) Update(data *datamodels.BizObjectOAMParams) err
     bizId     := data.BizId
     objectId  := data.ObjectId
     oamId     := data.OamId
-    paramsId  := data.ParamsId
+    paramId  := data.ParamId
     _, err := d.engine.
         Where("biz_id = ?",    bizId).
         Where("object_id = ?", objectId).
         Where("oam_id = ?",    oamId).
-        Where("params_id = ?", paramsId).
+        Where("param_id = ?", paramId).
         AllCols().
         Update(data)
     return err
 }
 
 func (d *BizObjectOAMParamsRepo) Delete(m map[string]interface{}) error {
-    bizId, ok1 := m["bizId"]
+    bizId, ok1    := m["bizId"]
     objectId, ok2 := m["objectId"]
-    oamId, ok3 := m["oamId"]
-    paramsId, ok4 := m["paramsId"]
+    oamId, ok3    := m["oamId"]
+    paramId, ok4  := m["paramId"]
     if !ok1 || !ok2 || !ok3 || !ok4 {
         return errors.New("数据不完整")
     }
@@ -129,7 +129,7 @@ func (d *BizObjectOAMParamsRepo) Delete(m map[string]interface{}) error {
         Where("biz_id = ?", bizId).
         Where("object_id = ?", objectId).
         Where("oam_id = ?", oamId).
-        Where("params_id = ?", paramsId).
+        Where("param_id = ?", paramId).
         Delete(data)
     return err
 }

+ 60 - 24
repositories/data_bus_rebo.go → repositories/x_bus_rebo.go

@@ -12,25 +12,58 @@ import (
     "xps/viewmodels"
 )
 
-type DataBusRepo struct {
+type XBusRepo struct {
     engine *xorm.Engine
 }
 
-func NewDataBusRepo(engine *xorm.Engine) *DataBusRepo {
-    return &DataBusRepo{
+func NewXBusRepo(engine *xorm.Engine) *XBusRepo {
+    return &XBusRepo{
         engine: engine,
     }
 }
 
-func (d *DataBusRepo) GetPage(sqlStatement, sqlCount string, m map[string]interface{}) (*viewmodels.PageResult, error) {
-    limit := m["limit"].(int)
-    page  := m["page"].(int)
-    
-    res, err1 := d.engine.Query(sqlCount)
+func (d *XBusRepo) BuildPageQueryParam(params []viewmodels.QueryParam)(string, int, int, error) {
+    sqlWhere := " WHERE 1 = 1 "
+    limit    := int(0)
+    page     := int(0)
+    ok       := false
+    for _, param := range params {
+        if param.Name == "limit" {
+            limit, ok = param.Value.(int)
+            if !ok {
+                return sqlWhere, limit, page, errors.New("limit值不正确")
+            }
+        } else if param.Name == "page" {
+            page, ok = param.Value.(int)
+            if !ok {
+                return sqlWhere, limit, page, errors.New("page值不正确")
+            }
+        } else {
+            sqlWhere += fmt.Sprintf(" %s %v %s %v", param.LogicalOperator, param.Name, param.CompareOperator, param.Value )
+        }
+    }
+    return sqlWhere, limit, page, nil
+}
+
+func (d *XBusRepo) BuildQueryParam(params []viewmodels.QueryParam)(string, error) {
+    sqlWhere := " WHERE 1 = 1 "
+    for _, param := range params {
+        sqlWhere += fmt.Sprintf(" %s %v %s %v", param.LogicalOperator, param.Name, param.CompareOperator, param.Value )
+    }
+    return sqlWhere, nil
+}
+
+func (d *XBusRepo) GetPage(sqlStatement, sqlCount string, params []viewmodels.QueryParam) (*viewmodels.PageResult, error) {
+    sqlWhere, limit, page, err1 := d.BuildPageQueryParam(params)
     if err1 != nil {
         return nil, err1
     }
     
+    res, err2 := d.engine.Query(sqlCount + sqlWhere)
+    if err2 != nil {
+        return nil, err2
+    }
+    
     total := int64(0)
     for _, v := range res[0] {
         total, _ = strconv.ParseInt(string(v), 10, 64)
@@ -39,9 +72,9 @@ func (d *DataBusRepo) GetPage(sqlStatement, sqlCount string, m map[string]interf
     pageStart  := (page - 1) * limit
     sqlLimit   := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart)
     
-    results, err2 := d.engine.QueryInterface(sqlStatement+ sqlLimit)
-    if err2 != nil {
-        return nil, err2
+    results, err4 := d.engine.QueryInterface(sqlStatement + sqlWhere + sqlLimit)
+    if err4 != nil {
+        return nil, err4
     }
     
     pageResult := &viewmodels.PageResult{}
@@ -53,23 +86,26 @@ func (d *DataBusRepo) GetPage(sqlStatement, sqlCount string, m map[string]interf
     return pageResult, nil
 }
 
-func (d *DataBusRepo) GetList(sqlStatement string, m map[string]interface{}) ([]map[string]interface{}, error) {
-    results, err := d.engine.QueryInterface(sqlStatement)
+func (d *XBusRepo) GetList(sqlStatement string, params []viewmodels.QueryParam) ([]map[string]interface{}, error) {
+    sqlWhere, err1 := d.BuildQueryParam(params)
+    if err1 != nil {
+        return nil, err1
+    }
+    
+    results, err := d.engine.QueryInterface(sqlStatement + sqlWhere)
     if err != nil {
         return nil, err
     }
     return results, nil
 }
 
-func (d *DataBusRepo) GetById(sqlStatement string, fields map[string]interface{})(map[string]interface{}, error){
-    sql := sqlStatement
-    sql += " WHERE 1 = 1"
-    
-    for fieldName, fieldValue := range fields {
-        sql += fmt.Sprintf(" AND %v = %v", fieldName, fieldValue)
+func (d *XBusRepo) GetById(sqlStatement string, params []viewmodels.QueryParam)(map[string]interface{}, error){
+    sqlWhere, err1 := d.BuildQueryParam(params)
+    if err1 != nil {
+        return nil, err1
     }
-    results, err   := d.engine.QueryInterface(sql)
     
+    results, err   := d.engine.QueryInterface(sqlStatement + sqlWhere)
     if err != nil {
         return nil, err
     }
@@ -80,7 +116,7 @@ func (d *DataBusRepo) GetById(sqlStatement string, fields map[string]interface{}
     return results[0], nil
 }
 
-func (d *DataBusRepo) Create(objectCode string, values map[string]interface{}) error {
+func (d *XBusRepo) Create(objectCode string, values map[string]interface{}) error {
     object, err1 := cache.GetModelObject(objectCode)
     if err1 != nil {
         return err1
@@ -125,7 +161,7 @@ func (d *DataBusRepo) Create(objectCode string, values map[string]interface{}) e
     return err3
 }
 
-func (d *DataBusRepo) Update(objectCode string, values map[string]interface{}) error {
+func (d *XBusRepo) Update(objectCode string, values map[string]interface{}) error {
     object, err1 := cache.GetModelObject(objectCode)
     if err1 != nil {
         return err1
@@ -179,7 +215,7 @@ func (d *DataBusRepo) Update(objectCode string, values map[string]interface{}) e
     return err
 }
 
-func (d *DataBusRepo) Patch(objectCode string, values map[string]interface{}) error {
+func (d *XBusRepo) Patch(objectCode string, values map[string]interface{}) error {
     object, err1 := cache.GetModelObject(objectCode)
     if err1 != nil {
         return err1
@@ -230,7 +266,7 @@ func (d *DataBusRepo) Patch(objectCode string, values map[string]interface{}) er
     return err
 }
 
-func (d *DataBusRepo) Delete(objectCode string, values map[string]interface{}) error {
+func (d *XBusRepo) Delete(objectCode string, values map[string]interface{}) error {
     object, err1 := cache.GetModelObject(objectCode)
     if err1 == nil {
         return err1

+ 2 - 0
rule/rule_helper.go

@@ -0,0 +1,2 @@
+package rule
+

+ 98 - 0
service/biz_object_oam_mapping_service.go

@@ -0,0 +1,98 @@
+package service
+
+
+import (
+    "errors"
+    "xps/cache"
+    "xps/datamodels"
+    "xps/datasource"
+    "xps/repositories"
+    "xps/viewmodels"
+)
+
+type BizObjectOAMMappingService interface {
+    GetList(m map[string]interface{}) ([]viewmodels.BizObjectOAMMappingInfo, error)
+    GetById(bizId, objectId, oamId, mappingId int64) (*viewmodels.BizObjectOAMMappingInfo, error)
+    Create(param *datamodels.BizObjectOAMMapping) error
+    Update(param *datamodels.BizObjectOAMMapping) error
+    Delete(m map[string]interface{}) error
+    
+    CacheObjectOAMMapping(bizId, objectId, oamId int64) error
+}
+
+type bizObjectOAMMappingService struct {
+    oamRepo *repositories.BizObjectOAMRepo
+    oamMappingRepo *repositories.BizObjectOAMMappingRepo
+}
+
+func NewBizObjectOAMMappingService() BizObjectOAMMappingService {
+    return &bizObjectOAMMappingService{
+        oamRepo: repositories.NewBizObjectOAMRepo(datasource.InstanceMaster()),
+        oamMappingRepo: repositories.NewBizObjectOAMMappingRepo(datasource.InstanceMaster()),
+    }
+}
+
+func (s *bizObjectOAMMappingService) GetList(m map[string]interface{}) ([]viewmodels.BizObjectOAMMappingInfo, error) {
+    return s.oamMappingRepo.GetList(m)
+}
+
+func (s *bizObjectOAMMappingService) GetById(bizId, objectId, oamId, mappingId int64) (*viewmodels.BizObjectOAMMappingInfo, error) {
+    return s.oamMappingRepo.GetById(bizId, objectId, oamId, mappingId)
+}
+
+func (s *bizObjectOAMMappingService) Create(m *datamodels.BizObjectOAMMapping) error {
+    mappingId   := NewID()
+    m.MappingId = mappingId
+    err1 := s.oamMappingRepo.Create(m)
+    if err1 != nil {
+        return err1
+    }
+    
+    bizId    := m.BizId
+    objectId := m.ObjectId
+    oamId    := m.OamId
+    return s.CacheObjectOAMMapping(bizId, objectId, oamId)
+}
+
+func (s *bizObjectOAMMappingService) Update(param *datamodels.BizObjectOAMMapping) error {
+    err1 := s.oamMappingRepo.Update(param)
+    if err1 != nil {
+        return err1
+    }
+    
+    bizId    := param.BizId
+    objectId := param.ObjectId
+    oamId    := param.OamId
+    return s.CacheObjectOAMMapping(bizId, objectId, oamId)
+}
+
+func (s *bizObjectOAMMappingService) Delete(m map[string]interface{}) error {
+    err1 := s.oamMappingRepo.Delete(m)
+    if err1 != nil {
+        return err1
+    }
+    
+    return nil
+}
+
+
+func (s *bizObjectOAMMappingService) CacheObjectOAMMapping(bizId, objectId, oamId int64) error {
+    dataList, err1 := s.oamMappingRepo.GetListById(bizId, objectId, oamId)
+    if err1 != nil {
+        return err1
+    }
+    
+    if len(dataList) <= 0 {
+        return nil
+    }
+    
+    objectCode := dataList[0].ObjectCode
+    oamCode    := dataList[0].OamCode
+    // 缓存数据
+    err3 := cache.SetBizObjectOAMMapping(objectCode, oamCode, dataList)
+    if err3 != nil {
+        return errors.New("Redis缓存Model数据失败")
+    }
+    
+    return nil
+}

+ 7 - 7
service/biz_object_oam_params_service.go

@@ -41,8 +41,8 @@ func (s *bizObjectOAMParamsService) GetById(bizId, objectId, oamId, paramsId int
 }
 
 func (s *bizObjectOAMParamsService) Create(param *datamodels.BizObjectOAMParams) error {
-    paramsId      := NewID()
-    param.ParamsId = paramsId
+    paramId      := NewID()
+    param.ParamId = paramId
     err1 := s.oamParamsRepo.Create(param)
     if err1 != nil {
         return err1
@@ -77,19 +77,19 @@ func (s *bizObjectOAMParamsService) Delete(m map[string]interface{}) error {
 
 
 func (s *bizObjectOAMParamsService) CacheObjectOAMParams(bizId, objectId, oamId int64) error {
-    params, err1 := s.oamParamsRepo.GetListById(bizId, objectId, oamId)
+    dataList, err1 := s.oamParamsRepo.GetListById(bizId, objectId, oamId)
     if err1 != nil {
         return err1
     }
     
-    if len(params) <= 0 {
+    if len(dataList) <= 0 {
         return nil
     }
     
-    objectCode := params[0].ObjectCode
-    oamCode    := params[0].OamCode
+    objectCode := dataList[0].ObjectCode
+    oamCode    := dataList[0].OamCode
     // 缓存数据
-    err3 := cache.SetBizObjectOAMParams(objectCode, oamCode, params)
+    err3 := cache.SetBizObjectOAMParams(objectCode, oamCode, dataList)
     if err3 != nil {
         return errors.New("Redis缓存Model数据失败")
     }

+ 135 - 17
service/biz_object_oam_service.go

@@ -2,7 +2,9 @@ package service
 
 import (
     "errors"
+    "time"
     "xps/cache"
+    "xps/constant"
     "xps/datamodels"
     "xps/datasource"
     "xps/repositories"
@@ -18,65 +20,140 @@ type BizObjectOAMService interface {
     Delete(m map[string]interface{}) error
     
     CacheBizObjectOAM(bizId, objectId, oamId int64) error
-    
+    CacheApiData(apiId int64) error
 }
 
 type bizObjectOAMService struct {
-    repo *repositories.BizObjectOAMRepo
-    oamRuleRepo *repositories.BizObjectOAMRuleRepo
+    bizObjectOAMRepo *repositories.BizObjectOAMRepo
+    apiRepo *repositories.ApiRepo
 }
 
 func NewBizObjectOAMService() BizObjectOAMService {
     return &bizObjectOAMService{
-        repo: repositories.NewBizObjectOAMRepo(datasource.InstanceMaster()),
-        oamRuleRepo: repositories.NewBizObjectOAMRuleRepo(datasource.InstanceMaster()),
+        bizObjectOAMRepo: repositories.NewBizObjectOAMRepo(datasource.InstanceMaster()),
+        apiRepo: repositories.NewApiRepo(datasource.InstanceMaster()),
     }
 }
 
 func (s *bizObjectOAMService) GetList(m map[string]interface{}) ([]viewmodels.BizObjectOAMInfo, error) {
-    return s.repo.GetList(m)
+    return s.bizObjectOAMRepo.GetList(m)
 }
 
 func (s *bizObjectOAMService) GetListById(bizId, objectId int64) ([]viewmodels.BizObjectOAMInfo, error) {
-    return s.repo.GetListById(bizId, objectId)
+    return s.bizObjectOAMRepo.GetListById(bizId, objectId)
 }
 
 func (s *bizObjectOAMService) GetById(bizId, objectId, oamId int64) (*viewmodels.BizObjectOAMInfo, error) {
-    return s.repo.GetById(bizId, objectId, oamId)
+    return s.bizObjectOAMRepo.GetById(bizId, objectId, oamId)
 }
 
 func (s *bizObjectOAMService) Create(oam *datamodels.BizObjectOAM) error {
     oamId    := NewID()
-    
     oam.OamId = oamId
-    err := s.repo.Create(oam)
-    if err != nil {
-        return err
+    
+    // 1.新增Object OAM
+    err1 := s.bizObjectOAMRepo.Create(oam)
+    if err1 != nil {
+        return err1
     }
     
+    // 2.Redis缓存Object OAM
     bizId    := oam.BizId
     objectId := oam.ObjectId
-    return s.CacheBizObjectOAM(bizId, objectId, oamId)
+    err2 := s.CacheBizObjectOAM(bizId, objectId, oamId)
+    if err2 != nil {
+        return err2
+    }
+    
+    // 3.生成API
+    apiId := oamId
+    apiMethod := s.GetApiMethodByOAMType(oam.OamType)
+    api := &datamodels.Api{
+        ApiId: apiId,
+        ApiMethod: apiMethod,
+        ApiType: apiMethod,
+        ApiTitle: oam.OamTitle,
+        ApiDesc: "",
+        ApiParams: "",
+        ApiCode: oam.OamCode,
+        BizId: oam.BizId,
+        ObjectId: oam.ObjectId,
+        OamId: oamId,
+        Status: 1,
+        CreatedAt: time.Now(),
+        CreatedBy: oam.CreatedBy,
+    }
+    err3 := s.apiRepo.Create(api)
+    if err3 != nil {
+        return err3
+    }
+    
+    // 4.缓存API
+    return s.CacheApiData(apiId)
 }
 
 func (s *bizObjectOAMService) Update(oam *datamodels.BizObjectOAM) error {
-    err := s.repo.Update(oam)
+    
+    // 1. Update Object OAM
+    err := s.bizObjectOAMRepo.Update(oam)
     if err != nil {
         return err
     }
     
+    // 2.缓存Object OAM
     bizId    := oam.BizId
     objectId := oam.ObjectId
     oamId    := oam.OamId
-    return s.CacheBizObjectOAM(bizId, objectId, oamId)
+    err2 := s.CacheBizObjectOAM(bizId, objectId, oamId)
+    if err2 != nil {
+        return err2
+    }
+    
+    // 3.更新API
+    apiId := oam.OamId
+    apiMethod := s.GetApiMethodByOAMType(oam.OamType)
+    api := &datamodels.Api {
+        ApiId: apiId,
+        ApiMethod: apiMethod,
+        ApiType: apiMethod,
+        ApiTitle: oam.OamTitle,
+        ApiDesc: "",
+        ApiParams: "",
+        ApiCode: oam.OamCode,
+        BizId: oam.BizId,
+        ObjectId: oam.ObjectId,
+        OamId: oamId,
+        Status: 1,
+        UpdatedAt: time.Now(),
+        UpdatedBy: oam.UpdatedBy,
+    }
+    err3 := s.apiRepo.Update(api)
+    if err3 != nil {
+        return err3
+    }
+    
+    // 4.更新API缓存数据
+    return s.CacheApiData(apiId)
 }
 
 func (s *bizObjectOAMService) Delete(m map[string]interface{}) error {
-    return s.repo.Delete(m)
+    // 1.删除Object OAM
+    err1 := s.bizObjectOAMRepo.Delete(m)
+    if err1 != nil {
+        return err1
+    }
+    
+    // 2.删除API
+    m["apiId"] = m["oamId"]
+    err2 := s.apiRepo.Delete(m)
+    if err2 != nil {
+        return err2
+    }
+    return nil
 }
 
 func (s *bizObjectOAMService) CacheBizObjectOAM(bizId, objectId, oamId int64) error {
-    oam, err1 := s.repo.GetById(bizId, objectId, oamId)
+    oam, err1 := s.bizObjectOAMRepo.GetById(bizId, objectId, oamId)
     if err1 != nil {
         return err1
     }
@@ -86,4 +163,45 @@ func (s *bizObjectOAMService) CacheBizObjectOAM(bizId, objectId, oamId int64) er
         return errors.New("Redis缓存Model数据失败")
     }
     return nil
+}
+
+func (s *bizObjectOAMService) CacheApiData(apiId int64) error {
+    api, err1 := s.apiRepo.GetById(apiId)
+    if err1 != nil {
+        return err1
+    }
+    
+    objectCode := api.ObjectCode
+    oamCode    := api.OamCode
+    err3 := cache.SetApiData(objectCode, oamCode, api)
+    if err3 != nil {
+        return errors.New("Redis缓存Api数据失败")
+    }
+    return nil
+}
+
+func (s *bizObjectOAMService) GetApiMethodByOAMType(oamType int64) int64 {
+    if oamType == constant.OAM_GET_ONE ||
+        oamType == constant.OAM_GET_LIST ||
+        oamType == constant.OAM_GET_PAGE {
+        return constant.API_METHOD_GET
+    }
+    
+    if oamType == constant.OAM_CREATE {
+        return constant.API_METHOD_POST
+    }
+    
+    if oamType == constant.OAM_UPDATE {
+        return constant.API_METHOD_PUT
+    }
+    
+    if oamType == constant.OAM_PATCH {
+        return constant.API_METHOD_PATCH
+    }
+    
+    if oamType == constant.OAM_DELETE {
+        return constant.API_METHOD_DELETE
+    }
+    
+    return constant.API_METHOD_GET
 }

+ 97 - 62
service/api_gateway_service.go → service/x_gateway_service.go

@@ -10,11 +10,12 @@ import (
     "xps/viewmodels"
 )
 
-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)
+type XGatewayService interface {
+    Get(objectCode, oamCode string, params []viewmodels.QueryParam)(map[string]interface{}, error)
+    GetPage(objectCode, oamCode string, params []viewmodels.QueryParam)(*viewmodels.PageResult, error)
+    GetList(objectCode, oamCode string, params []viewmodels.QueryParam)([]map[string]interface{}, error)
+    
+    GenerateParams(objectCode, oamCode string)(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
@@ -22,23 +23,22 @@ type ApiGatewayService interface {
     Delete(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo)error
 }
 
-type apiGatewayService struct {
-    dataBus *repositories.DataBusRepo
+type xGatewayService struct {
+    xBus *repositories.XBusRepo
 }
 
-func NewApiGatewayService() ApiGatewayService {
-    return &apiGatewayService{
-        dataBus: repositories.NewDataBusRepo(datasource.InstanceSlave()),
+func NewApiGatewayService() XGatewayService {
+    return &xGatewayService{
+        xBus: repositories.NewXBusRepo(datasource.InstanceSlave()),
     }
 }
 
-func (a *apiGatewayService) GetParams(objectCode, oamCode string) (map[string]interface{}, error) {
+func (a *xGatewayService) GenerateParams(objectCode, oamCode string) (map[string]interface{}, error) {
     attrs, err2 := cache.GetBizObjectAttrs(objectCode)
     if err2 != nil {
         return nil, err2
     }
     
-    
     result := make(map[string]interface{}, 0)
     for _, attr := range attrs {
         attrType := attr.AttrType
@@ -46,7 +46,7 @@ func (a *apiGatewayService) GetParams(objectCode, oamCode string) (map[string]in
             result[attr.AttrCode] = 1
         } else if attrType == constant.DATA_TYPE_VARCHAR {
             result[attr.AttrCode] = "test"
-        } else if attrType == constant.DATA_TYPE_FLOAT {
+        } else if attrType == constant.DATA_TYPE_DECIMAL {
             result[attr.AttrCode] = 1.1
         } else if attrType == constant.DATA_TYPE_DATE {
             result[attr.AttrCode] = "2022-01-01"
@@ -58,122 +58,157 @@ func (a *apiGatewayService) GetParams(objectCode, oamCode string) (map[string]in
     return result, nil
 }
 
-func (a *apiGatewayService) Get(objectCode, oamCode string, m map[string]interface{})(map[string]interface{}, error) {
-    params, err1 := a.Mapping2ModelObjectAttr(objectCode, m)
+func (a *xGatewayService) Get(objectCode, oamCode string, params []viewmodels.QueryParam)(map[string]interface{}, error) {
+    oam, err1:= cache.GetBizObjectOAM(objectCode, oamCode)
     if err1 != nil {
         return nil, err1
     }
     
-    oam , err2:= cache.GetBizObjectOAM(objectCode, oamCode)
+    sqlStatement := oam.SqlStatement
+    data, err2 := a.xBus.GetById(sqlStatement, params)
     if err2 != nil {
         return nil, err2
     }
     
-    sqlStatement := oam.SqlStatement
-    data, err3 := a.dataBus.GetById(sqlStatement, params)
-    if err3 != nil {
-        return nil, err3
-    }
-    
     return a.Mapping2BizObjectAttr(objectCode, data)
 }
 
-func (a *apiGatewayService) GetList(objectCode, oamCode string, m map[string]interface{})([]map[string]interface{}, error) {
-    params, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
-    if err2 != nil {
-        return nil, err2
+func (a *xGatewayService) GetList(objectCode, oamCode string, params []viewmodels.QueryParam)([]map[string]interface{}, error) {
+    oam, err1:= cache.GetBizObjectOAM(objectCode, oamCode)
+    if err1 != nil {
+        return nil, err1
     }
-    
-    oam , err2:= cache.GetBizObjectOAM(objectCode, oamCode)
+    sqlStatement := oam.SqlStatement
+    dataList, err2 := a.xBus.GetList(sqlStatement, params)
     if err2 != nil {
         return nil, err2
     }
-    sqlStatement := oam.SqlStatement
-    dataList, err3 := a.dataBus.GetList(sqlStatement, params)
-    if err3 != nil {
-        return nil, err3
-    }
     return a.Mapping2BizObjectList(objectCode, dataList)
 }
 
-func (a *apiGatewayService) GetPage(objectCode, oamCode string, m map[string]interface{}) (*viewmodels.PageResult, error) {
-    params, err1 := a.Mapping2ModelObjectAttr(objectCode, m)
+func (a *xGatewayService) GetPage(objectCode, oamCode string, params []viewmodels.QueryParam) (*viewmodels.PageResult, error) {
+    oam , err1:= cache.GetBizObjectOAM(objectCode, oamCode)
     if err1 != nil {
         return nil, err1
     }
     
-    oam , err2:= cache.GetBizObjectOAM(objectCode, oamCode)
-    if err2 != nil {
-        return nil, err2
-    }
-    
     sqlStatement := oam.SqlStatement
     sqlCount     := oam.SqlCount
-    pageData, err3 := a.dataBus.GetPage(sqlStatement, sqlCount, params)
-    if err3 != nil {
-        return nil, err3
+    pageData, err2 := a.xBus.GetPage(sqlStatement, sqlCount, params)
+    if err2 != nil {
+        return nil, err2
     }
-    
     return a.Mapping2BizPageObject(objectCode, pageData)
 }
 
-func (a *apiGatewayService) Create(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
+func (a *xGatewayService) 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)
+
+    
+    data, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
     if err2 != nil {
         return err2
     }
     
-    return a.dataBus.Create(objectCode, params)
+    objectMappingList, err3 := cache.GetBizObjectMapping(objectCode)
+    if err3 != nil {
+        return err3
+    }
+    for _, mappingObject := range objectMappingList {
+        mappingObjectCode := mappingObject.MappingObjectCode
+        err4 := a.xBus.Create(mappingObjectCode, data)
+        if err4 != nil {
+            return err4
+        }
+    }
+    
+    return nil
 }
 
-func (a *apiGatewayService) Update(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
+func (a *xGatewayService) 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)
+    data, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
     if err2 != nil {
         return err2
     }
     
-    return a.dataBus.Update(objectCode, params)
+    objectMappingList, err3 := cache.GetBizObjectMapping(objectCode)
+    if err3 != nil {
+        return err3
+    }
+    
+    for _, mappingObject := range objectMappingList {
+        mappingObjectCode := mappingObject.MappingObjectCode
+        err4 := a.xBus.Update(mappingObjectCode, data)
+        if err4 != nil {
+            return err4
+        }
+    }
+    
+    return nil
 }
 
-func (a *apiGatewayService) Patch(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
+func (a *xGatewayService) 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)
+    data, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
     if err2 != nil {
         return err2
     }
     
-    return a.dataBus.Patch(objectCode, params)
+    objectMappingList, err3 := cache.GetBizObjectMapping(objectCode)
+    if err3 != nil {
+        return err3
+    }
+    
+    for _, mappingObject := range objectMappingList {
+        mappingObjectCode := mappingObject.MappingObjectCode
+        err4 := a.xBus.Patch(mappingObjectCode, data)
+        if err4 != nil {
+            return err4
+        }
+    }
+    return nil
 }
 
-func (a *apiGatewayService) Delete(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
+func (a *xGatewayService) 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)
+    data, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
     if err2 != nil {
         return err2
     }
     
-    return a.dataBus.Delete(objectCode, params)
+    objectMappingList, err3 := cache.GetBizObjectMapping(objectCode)
+    if err3 != nil {
+        return err3
+    }
+    
+    for _, mappingObject := range objectMappingList {
+        mappingObjectCode := mappingObject.MappingObjectCode
+        err4 := a.xBus.Delete(mappingObjectCode, data)
+        if err4 != nil {
+            return err4
+        }
+    }
+    return nil
 }
 
-func (a *apiGatewayService) HandleOAMRuleList(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
+func (a *xGatewayService) HandleOAMRuleList(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
     oamRules, err1 := cache.GetBizObjectOAMRules(objectCode, oamCode)
     if err1 != nil {
         return err1
@@ -188,7 +223,7 @@ func (a *apiGatewayService) HandleOAMRuleList(objectCode, oamCode string, m map[
     return nil
 }
 
-func (a *apiGatewayService) HandleOAMRule(oamRule *viewmodels.BizObjectOAMRuleInfo, m map[string]interface{}, user *viewmodels.CurUserInfo)(error) {
+func (a *xGatewayService) 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 {
@@ -211,7 +246,7 @@ func (a *apiGatewayService) HandleOAMRule(oamRule *viewmodels.BizObjectOAMRuleIn
     return nil
 }
 
-func (a *apiGatewayService) Mapping2ModelObjectAttr(objectCode string, m map[string]interface{})(map[string]interface{}, error) {
+func (a *xGatewayService) Mapping2ModelObjectAttr(objectCode string, m map[string]interface{})(map[string]interface{}, error) {
     bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
     if err != nil {
         return nil, err
@@ -228,7 +263,7 @@ func (a *apiGatewayService) Mapping2ModelObjectAttr(objectCode string, m map[str
     return m, nil
 }
 
-func (a *apiGatewayService) Mapping2BizObjectAttr(objectCode string, m map[string]interface{})(map[string]interface{}, error) {
+func (a *xGatewayService) Mapping2BizObjectAttr(objectCode string, m map[string]interface{})(map[string]interface{}, error) {
     bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
     if err != nil {
         return nil, err
@@ -246,7 +281,7 @@ func (a *apiGatewayService) Mapping2BizObjectAttr(objectCode string, m map[strin
 }
 
 
-func (a *apiGatewayService) Mapping2BizObjectList(objectCode string, dataList []map[string]interface{})([]map[string]interface{}, error) {
+func (a *xGatewayService) Mapping2BizObjectList(objectCode string, dataList []map[string]interface{})([]map[string]interface{}, error) {
     bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
     if err != nil {
         return nil, err
@@ -267,7 +302,7 @@ func (a *apiGatewayService) Mapping2BizObjectList(objectCode string, dataList []
     return targetDataList, nil
 }
 
-func (a *apiGatewayService) Mapping2BizPageObject(objectCode string, pageData *viewmodels.PageResult)(*viewmodels.PageResult, error) {
+func (a *xGatewayService) Mapping2BizPageObject(objectCode string, pageData *viewmodels.PageResult)(*viewmodels.PageResult, error) {
     bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
     if err != nil {
         return nil, err

+ 20 - 0
viewmodels/biz_object_oam_mapping_info.go

@@ -0,0 +1,20 @@
+package viewmodels
+
+type BizObjectOAMMappingInfo struct {
+    MappingId       int64     `json:"mappingId"         xorm:"'mapping_id'        bigint    pk  comment('Mapping ID')       "`
+    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')    "`
+    ObjectCode      string    `json:"objectCode"        xorm:"'object_code'       varchar(127)   comment('Object Code')     "`
+    OamId           int64     `json:"oamId"             xorm:"'oam_id'            bigint        comment('OAM ID')           "`
+    OamCode         string    `json:"oamCode"           xorm:"'oam_code'          varchar(127)   comment('OAM Code')        "`
+    MappingModelId  int64     `json:"mappingModelId"    xorm:"'mapping_model_id'  bigint        comment('Mapping Model ID') "`
+    MappingObjectId int64     `json:"mappingObjectId"   xorm:"'mapping_object_id' bigint        comment('Mapping Object ID')"`
+    MappingOamId    int64     `json:"mappingOamId"      xorm:"'mapping_oam_id'    bigint        comment('Mapping OAM ID')   "`
+    SortNo          int64     `json:"sortNo"            xorm:"'sort_no'           bigint        comment('Sort No')          "`
+    Remark          string    `json:"remark"            xorm:"'remark'            varchar(255)  comment('Remark')           "`
+}
+
+func (t *BizObjectOAMMappingInfo) TableName() string {
+    return "biz_object_oam_mapping"
+}

+ 16 - 15
viewmodels/biz_object_oam_params_info.go

@@ -4,21 +4,22 @@ import "encoding/json"
 
 type BizObjectOAMParamsInfo 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')   "`
-    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('OAM Title')      "`
-    OamCode         string    `json:"oamCode"         xorm:"'oam_code'         varchar(127)   comment('OAM Code')       "`
-    ParamsId        int64     `json:"paramsId"        xorm:"'params_id'        bigint      pk comment('Params ID')      "`
-    LogicalOperator string    `json:"logicalOperator" xorm:"'logical_operator' varchar(15)    comment('Logical Operator') "`
-    ParamsTarget    string    `json:"paramsTarget"    xorm:"'params_target'    varchar(127)   comment('Params Target')    "`
-    CompareOperator string    `json:"compareOperator" xorm:"'compare_operator' varchar(15)    comment('Compare Operator') "`
-    ParamsValue     string    `json:"paramsValue"     xorm:"'params_value'     varchar(127)   comment('Params Target')  "`
-    ParamsType      int64     `json:"paramsType"      xorm:"'params_type'      bigint         comment('Params Type')    "`
-    ParamsRemark    string    `json:"paramsRemark"    xorm:"'params_remark'    varchar(255)   comment('Params Remark')  "`
-    SortNo          int64     `json:"sortNo"          xorm:"'sort_no'          bigint         comment('Sort No')        "`
+    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')    "`
+    ObjectCode      string    `json:"objectCode"       xorm:"'object_code'      varchar(127)   comment('Object Code')     "`
+    OamId           int64     `json:"oamId"            xorm:"'oam_id'           bigint      pk comment('OAM ID')          "`
+    OamCode         string    `json:"oamCode"          xorm:"'oam_code'         varchar(127)   comment('OAM Code')        "`
+    ParamId         int64     `json:"paramId"          xorm:"'param_id'         bigint      pk comment('Param ID')        "`
+    LogicalOperator string    `json:"logicalOperator"  xorm:"'logical_operator' varchar(15)    comment('Logical Operator') "`
+    ParamName       string    `json:"paramName"        xorm:"'param_name'       varchar(127)   comment('Param Name')       "`
+    CompareOperator string    `json:"compareOperator"  xorm:"'compare_operator' varchar(15)    comment('Compare Operator') "`
+    ParamType       int64     `json:"paramType"        xorm:"'param_type'       bigint         comment('Param Type')       "`
+    ParamValue      string    `json:"paramValue"       xorm:"'param_value'      varchar(127)   comment('Param Value')      "`
+    ParamRemark     string    `json:"paramRemark"      xorm:"'param_remark'     varchar(255)   comment('Param Remark')     "`
+    IsRuled         int64     `json:"isRuled"          xorm:"'is_ruled'         bigint         comment('Is Ruled')         "`
+    RuleId          int64     `json:"ruleId"           xorm:"'rule_id'          bigint         comment('Rule ID')          "`
+    SortNo          int64     `json:"sortNo"           xorm:"'sort_no'          bigint         comment('Sort No')          "`
 }
 
 func (t *BizObjectOAMParamsInfo) TableName() string {

+ 9 - 0
viewmodels/query_params.go

@@ -0,0 +1,9 @@
+package viewmodels
+
+type QueryParam struct {
+    LogicalOperator string         `json:"logicalOperator" xorm:"'logical_operator' varchar(15)    comment('Logical Operator') "`
+    Name       string         `json:"paramName"       xorm:"'param_name'       varchar(127)   comment('Param Name')    "`
+    CompareOperator string         `json:"compareOperator" xorm:"'compare_operator' varchar(15)    comment('Compare Operator') "`
+    Type       int64          `json:"paramType"       xorm:"'param_type'       bigint         comment('Param Type')      "`
+    Value      interface{}    `json:"paramValue"      xorm:"'param_value'    "`
+}

+ 104 - 16
web/controllers/api_gateway_controller.go

@@ -2,6 +2,8 @@ package controllers
 
 import (
     "github.com/kataras/iris/v12/mvc"
+    "strconv"
+    "time"
     "xps/cache"
     "xps/constant"
     "xps/service"
@@ -10,20 +12,102 @@ import (
 
 type ApiGatewayController struct {
     Base
-    Service service.ApiGatewayService
+    Service service.XGatewayService
 }
 
 func (c *ApiGatewayController) BeforeActivation(b mvc.BeforeActivation) {
-    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"    )
+    b.Handle("GET",         "/{objectCode:string}/{oamCode:string}",                "Get"            )
+    b.Handle("GET",         "/GenerateParams/{objectCode:string}/{oamCode:string}", "GenerateParams" )
+    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)
+func (c *ApiGatewayController) HandleParamRule(ruleId int64) interface{} {
+    var result interface{}
+    if ruleId == constant.BIZ_RULE_NEW_ID {
+    
+    } else if ruleId == constant.BIZ_RULE_CUR_DATETIME {
+        result = time.Now()
+    } else if ruleId == constant.BIZ_RULE_CUR_DATE {
+        result = time.Now()
+    } else if ruleId == constant.BIZ_RULE_CUR_USER_ID {
+        result = c.GetCurUserId()
+    } else if ruleId == constant.BIZ_RULE_CUR_USER_NAME {
+        result =  c.GetCurUserName()
+    } else if ruleId == constant.BIZ_RULE_CUR_USER_POSITION_ID {
+        result = c.GetCurUserPositionId()
+    } else if ruleId == constant.BIZ_RULE_CUR_USER_POSITION_NAME {
+        result = c.GetCurUserPositionName()
+    } else if ruleId == constant.BIZ_RULE_CUR_USER_GROUP_ID {
+        result = c.GetCurUserGroupId()
+    } else if ruleId == constant.BIZ_RULE_CUR_USER_GROUP_NAME {
+        result = c.GetCurUserGroupName()
+    }
+    return result
+}
+
+func (c *ApiGatewayController) buildUrlParams(objectCode, oamCode string) ([]viewmodels.QueryParam, error) {
+    oamParams, err1 := cache.GetBizObjectOAMParams(objectCode, oamCode)
+    if err1 != nil {
+        return nil, err1
+    }
+    
+    urlParams := c.Ctx.URLParams()
+    queryParams := make([]viewmodels.QueryParam, 0)
+    for _, oamParam := range oamParams {
+        paramValueCode := oamParam.ParamValue
+        paramType      := oamParam.ParamType
+        var paramValue interface{}
+        isRuled        := oamParam.IsRuled
+        if isRuled > 0 {
+            paramValue := c.HandleParamRule(oamParam.RuleId)
+            param := viewmodels.QueryParam{
+                LogicalOperator: oamParam.LogicalOperator,
+                Name: oamParam.ParamName,
+                CompareOperator: oamParam.CompareOperator,
+                Type: oamParam.ParamType,
+                Value: paramValue,
+            }
+            queryParams = append(queryParams, param)
+        } else if urlVal, ok := urlParams[paramValueCode]; ok {
+            if paramType == constant.DATA_TYPE_INT {
+                ret, err := strconv.Atoi(urlVal)
+                if err != nil {
+                    return nil, err
+                }
+                paramValue = ret
+            } else if paramType == constant.DATA_TYPE_VARCHAR {
+                paramValue = urlVal
+            } else if paramType == constant.DATA_TYPE_DECIMAL {
+                ret, err := strconv.ParseFloat(urlVal, 64)
+                if err != nil {
+                    return nil, err
+                }
+                paramValue = ret
+            }  else if paramType == constant.DATA_TYPE_DATE {
+                paramValue = urlVal
+            } else if paramType == constant.DATA_TYPE_DATETIME {
+                paramValue = urlVal
+            }
+            
+            param := viewmodels.QueryParam{
+                LogicalOperator: oamParam.LogicalOperator,
+                Name: oamParam.ParamName,
+                CompareOperator: oamParam.CompareOperator,
+                Type: oamParam.ParamType,
+                Value: paramValue,
+            }
+            queryParams = append(queryParams, param)
+        }
+    }
+    return queryParams, nil
+}
+
+
+func (c *ApiGatewayController) GenerateParams(objectCode, oamCode string)*JsonResult {
+    data, err := c.Service.GenerateParams(objectCode, oamCode)
     if err != nil {
         return ResultErr(err.Error(), nil)
     } else {
@@ -32,15 +116,19 @@ func (c *ApiGatewayController) GetParams(objectCode, oamCode string)*JsonResult
 }
 
 func (c *ApiGatewayController) Get(objectCode, oamCode string)*JsonResult {
-    oamInfo, err := cache.GetApiData(objectCode, oamCode)
-    if err != nil {
-        return ResultErr(err.Error(), nil)
+    oamInfo, err1 := cache.GetApiData(objectCode, oamCode)
+    if err1 != nil {
+        return ResultErr(err1.Error(), nil)
+    }
+    
+    params, err2 := c.buildUrlParams(objectCode, oamCode)
+    if err2 != nil {
+        return ResultErr(err2.Error(), nil)
     }
     
-    m       := c.buildParams()
     oamType := oamInfo.OamType
     if oamType == constant.OAM_GET_ONE {
-        data, err := c.Service.Get(objectCode, oamCode, m)
+        data, err := c.Service.Get(objectCode, oamCode, params)
         if err != nil {
             return ResultErr(err.Error(), nil)
         } else {
@@ -48,7 +136,7 @@ func (c *ApiGatewayController) Get(objectCode, oamCode string)*JsonResult {
         }
     }
     if oamType == constant.OAM_GET_LIST{
-        data, err := c.Service.GetList(objectCode, oamCode, m)
+        data, err := c.Service.GetList(objectCode, oamCode, params)
         if err != nil {
             return ResultErr(err.Error(), nil)
         } else {
@@ -56,7 +144,7 @@ func (c *ApiGatewayController) Get(objectCode, oamCode string)*JsonResult {
         }
     }
     if oamType == constant.OAM_GET_PAGE {
-        data, err := c.Service.GetPage(objectCode, oamCode, m)
+        data, err := c.Service.GetPage(objectCode, oamCode, params)
         if err != nil {
             return ResultErr(err.Error(), nil)
         } else {

+ 3 - 0
web/controllers/base_controller.go

@@ -117,6 +117,7 @@ func (b *Base) GetJsonData() (map[string]interface{}, error) {
 	return m, nil
 }
 
+
 func (b *Base) buildParams() map[string]interface{} {
 	ocId, err := b.Ctx.Values().GetInt64("ocId")
 	if err != nil {
@@ -153,6 +154,8 @@ func (b *Base) buildParams() map[string]interface{} {
 		params["keywords"] = keywords
 	}
 	
+	b.Ctx.URLParams()
+	
 	return params
 }
 

+ 93 - 0
web/controllers/biz_object_oam_mapping_controller.go

@@ -0,0 +1,93 @@
+package controllers
+
+
+import (
+    "github.com/kataras/iris/v12/mvc"
+    "xps/datamodels"
+    "xps/service"
+)
+
+type BizObjectOAMMappingController struct {
+    Base
+    Service service.BizObjectOAMMappingService
+}
+
+func (c *BizObjectOAMMappingController) BeforeActivation(b mvc.BeforeActivation) {
+    b.Handle("GET",     "/",                                                               "GetList"      )
+    b.Handle("GET",     "/{bizId:int64}/{objectId:int64}/{oamId:int64}",                   "GetListById"  )
+    b.Handle("GET",     "/{bizId:int64}/{objectId:int64}/{oamId:int64}/{mappingId:int64}", "GetById"      )
+    b.Handle("POST",    "/add",                                                            "Create"       )
+    b.Handle("PUT",     "/update",                                                         "Update"       )
+    b.Handle("DELETE",  "/{bizId:int64}/{objectId:int64}/{oamId:int64}/{mappingId:int64}", "DeleteByID"   )
+}
+
+func (c *BizObjectOAMMappingController) GetList() *JsonResult {
+    params    := c.buildParams()
+    data, err := c.Service.GetList(params)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("获取成功", data)
+    }
+}
+
+func (c *BizObjectOAMMappingController) GetListById(bizId, objectId, oamId int64) *JsonResult {
+    params    := c.buildParams()
+    params["bizId"]    = bizId
+    params["objectId"] = objectId
+    params["oamId"]    = oamId
+    data, err := c.Service.GetList(params)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("获取成功", data)
+    }
+}
+
+func (c *BizObjectOAMMappingController) GetById(bizId, objectId, oamId, paramsId int64) *JsonResult {
+    data, err := c.Service.GetById(bizId, objectId, oamId, paramsId)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("获取成功", data)
+    }
+}
+
+func (c *BizObjectOAMMappingController) Create() *JsonResult {
+    m   := datamodels.BizObjectOAMMapping{}
+    if err := c.Ctx.ReadJSON(&m); err != nil {
+        return ResultErr("读取数据失败", nil)
+    }
+    
+    if err := c.Service.Create(&m); err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("新增成功", nil)
+    }
+}
+
+func (c *BizObjectOAMMappingController) Update() *JsonResult {
+    m    := datamodels.BizObjectOAMMapping{}
+    if err := c.Ctx.ReadJSON(&m); err != nil {
+        return ResultErr("读取数据失败", nil)
+    }
+    
+    if err := c.Service.Update(&m); err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("更新成功", nil)
+    }
+}
+
+func (c *BizObjectOAMMappingController) DeleteByID(bizId, objectId, oamId, mappingId int64) *JsonResult {
+    m := make(map[string]interface{})
+    m["bizId"]     = bizId
+    m["objectId"]  = objectId
+    m["oamId"]     = oamId
+    m["mappingId"] = mappingId
+    if err := c.Service.Delete(m); err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("删除成功", nil)
+    }
+}