| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- package service
- import (
- "errors"
- "time"
- "xps/cache"
- "xps/constant"
- "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)
- GetParams(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
- 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 {
- dataBus *repositories.DataBusRepo
- }
- func NewApiGatewayService() ApiGatewayService {
- return &apiGatewayService{
- dataBus: repositories.NewDataBusRepo(datasource.InstanceSlave()),
- }
- }
- func (a *apiGatewayService) GetParams(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
- 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 {
- return nil, err1
- }
-
- oam , err2:= cache.GetBizObjectOAM(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.GetBizObjectOAM(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.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
- }
-
- return a.Mapping2BizPageObject(objectCode, pageData)
- }
- 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
- }
-
- return a.dataBus.Create(objectCode, params)
- }
- 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
- }
-
- return a.dataBus.Update(objectCode, params)
- }
- 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
- }
-
- return a.dataBus.Patch(objectCode, params)
- }
- 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
- }
-
- return a.dataBus.Delete(objectCode, params)
- }
- func (a *apiGatewayService) HandleOAMRuleList(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
- oamRules, err1 := cache.GetBizObjectOAMRules(objectCode, oamCode)
- if err1 != nil {
- return err1
- }
-
- 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) {
- bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
- if err != nil {
- return nil, err
- }
-
- 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) {
- bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
- if err != nil {
- return nil, err
- }
-
- 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) {
- bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
- if err != nil {
- return nil, err
- }
-
- targetDataList := make([]map[string]interface{}, 0)
- for _, data := range dataList {
- 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) {
- bizObjectAttrs, err := cache.GetBizObjectAttrs(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 {
- 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
- }
|