package service import ( "errors" "xps/cache" "xps/datasource" "xps/repositories" "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) 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 } type apiGatewayService struct { dataBus *repositories.DataBusRepo } func NewApiGatewayService() ApiGatewayService { return &apiGatewayService{ dataBus: repositories.NewDataBusRepo(datasource.InstanceSlave()), } } func (a *apiGatewayService) Get(objectCode, oamCode string, m map[string]interface{})(map[string]interface{}, error) { params, err1 := a.Mapping2ModelObjectAttr(objectCode, m) if err1 != nil { return nil, err1 } oam , err2:= cache.GetBizObjectOAMData(objectCode, oamCode) 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 } oam , err2:= cache.GetBizObjectOAMData(objectCode, oamCode) 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) if err1 != nil { return nil, err1 } oam , err2:= cache.GetBizObjectOAMData(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 } return a.Mapping2BizPageObject(objectCode, pageData) } func (a *apiGatewayService) Create(objectCode, oamCode string, m map[string]interface{}) error { params, err2 := a.Mapping2ModelObjectAttr(objectCode, m) if err2 != nil { return err2 } return a.dataBus.Create(objectCode, params) } func (a *apiGatewayService) Update(objectCode, oamCode string, m map[string]interface{}) error { params, err2 := a.Mapping2ModelObjectAttr(objectCode, m) if err2 != nil { return err2 } return a.dataBus.Update(objectCode, params) } func (a *apiGatewayService) Patch(objectCode, oamCode string, m map[string]interface{}) error { params, err2 := a.Mapping2ModelObjectAttr(objectCode, m) if err2 != nil { return err2 } return a.dataBus.Patch(objectCode, params) } func (a *apiGatewayService) Delete(objectCode, oamCode string, m map[string]interface{}) error { params, err2 := a.Mapping2ModelObjectAttr(objectCode, m) if err2 != nil { return err2 } return a.dataBus.Delete(objectCode, params) } func (a *apiGatewayService) Mapping2ModelObjectAttr(objectCode string, m map[string]interface{})(map[string]interface{}, error) { bzObject, err := cache.GetBizObjectData(objectCode) if err != nil { return nil, err } bizObjectAttrs := bzObject.Attrs for _, bzAttr := range bizObjectAttrs { bzAttrCode := bzAttr.AttrCode bzMappingCode := bzAttr.MappingCode if bzAttrValue, ok := m[bzAttrCode]; ok { m[bzMappingCode] = bzAttrValue delete(m, bzAttrCode) } } return m, nil } func (a *apiGatewayService) Mapping2BizObjectAttr(objectCode string, m map[string]interface{})(map[string]interface{}, error) { bzObject, err := cache.GetBizObjectData(objectCode) if err != nil { return nil, err } bizObjectAttrs := bzObject.Attrs params := make(map[string]interface{}, 0) for _, bzAttr := range bizObjectAttrs { bzAttrCode := bzAttr.AttrCode bzMappingCode := bzAttr.MappingCode if bzAttrValue, ok := m[bzMappingCode]; ok { params[bzAttrCode] = bzAttrValue } } return params, nil } func (a *apiGatewayService) Mapping2BizObjectList(objectCode string, dataList []map[string]interface{})([]map[string]interface{}, error) { bzObject, err := cache.GetBizObjectData(objectCode) if err != nil { return nil, err } targetDataList := make([]map[string]interface{}, 0) for _, data := range dataList { bizObjectAttrs := bzObject.Attrs targetData := make(map[string]interface{}, 0) for _, bzAttr := range bizObjectAttrs { bzAttrCode := bzAttr.AttrCode bzMappingCode := bzAttr.MappingCode if bzAttrValue, ok := data[bzMappingCode]; ok { targetData[bzAttrCode] = bzAttrValue } } targetDataList = append(targetDataList, targetData) } return targetDataList, nil } func (a *apiGatewayService) Mapping2BizPageObject(objectCode string, pageData *viewmodels.PageResult)(*viewmodels.PageResult, error) { bzObject, err := cache.GetBizObjectData(objectCode) if err != nil { return nil, err } dataList,ok := pageData.Data.([]map[string]interface{}) if !ok { return nil, errors.New("类型转换错误") } targetDataList := make([]map[string]interface{}, 0) for _, data := range dataList { bizObjectAttrs := bzObject.Attrs targetData := make(map[string]interface{}, 0) for _, bzAttr := range bizObjectAttrs { bzAttrCode := bzAttr.AttrCode bzMappingCode := bzAttr.MappingCode if bzAttrValue, ok := data[bzMappingCode]; ok { targetData[bzAttrCode] = bzAttrValue } } targetDataList = append(targetDataList, targetData) } targetPageData := &viewmodels.PageResult{ Total: pageData.Total, PageSize: pageData.PageSize, Page: pageData.Page, TotalPage: pageData.TotalPage, Data: targetDataList, } return targetPageData, nil }