| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 |
- package gateway
- import (
- "errors"
- "time"
- "xps/cmd/cache"
- "xps/cmd/constant"
- "xps/cmd/datasource"
- bizViewModel "xps/pkg/biz/viewmodel"
- "xps/pkg/common"
- "xps/pkg/dataway"
- )
- type HttpHandler interface {
- Get(objectCode, oamCode string, params []common.QueryParam) (map[string]interface{}, error)
- GetPage(objectCode, oamCode string, params []common.QueryParam, page int, limit int) (*common.PageResult, error)
- GetList(objectCode, oamCode string, params []common.QueryParam) ([]map[string]interface{}, error)
- GenerateParams(objectCode, oamCode string) (map[string]interface{}, error)
- Create(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error
- Update(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error
- Patch(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error
- Delete(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error
- }
- type httpHandler struct {
- xBus *dataway.DatabaseIO
- }
- func NewHttpHandler() HttpHandler {
- return &httpHandler{
- xBus: dataway.NewDatabaseIO(datasource.InstanceSlave()),
- }
- }
- func (a *httpHandler) 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
- 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_DECIMAL {
- 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 *httpHandler) Get(objectCode, oamCode string, params []common.QueryParam) (map[string]interface{}, error) {
- oam, err1 := cache.GetBizObjectOAM(objectCode, oamCode)
- if err1 != nil {
- return nil, err1
- }
- sqlStatement := oam.SqlStatement
- data, err2 := a.xBus.GetById(sqlStatement, params)
- if err2 != nil {
- return nil, err2
- }
- return a.Mapping2BizObjectAttr(objectCode, data)
- }
- func (a *httpHandler) GetList(objectCode, oamCode string, params []common.QueryParam) ([]map[string]interface{}, error) {
- oam, err1 := cache.GetBizObjectOAM(objectCode, oamCode)
- if err1 != nil {
- return nil, err1
- }
- sqlStatement := oam.SqlStatement
- dataList, err2 := a.xBus.GetList(sqlStatement, params)
- if err2 != nil {
- return nil, err2
- }
- return a.Mapping2BizObjectList(objectCode, dataList)
- }
- func (a *httpHandler) GetPage(objectCode, oamCode string, params []common.QueryParam, page int, limit int) (*common.PageResult, error) {
- oam, err1 := cache.GetBizObjectOAM(objectCode, oamCode)
- if err1 != nil {
- return nil, err1
- }
- sqlStatement := oam.SqlStatement
- sqlCount := oam.SqlCount
- pageData, err2 := a.xBus.GetPage(sqlStatement, sqlCount, params, page, limit)
- if err2 != nil {
- return nil, err2
- }
- return a.Mapping2BizPageObject(objectCode, pageData)
- }
- func (a *httpHandler) Create(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error {
- err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
- if err1 != nil {
- return err1
- }
- data, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
- if err2 != nil {
- return err2
- }
- objectOAMMappingList, err3 := cache.GetBizObjectOAMMapping(objectCode, oamCode)
- if err3 != nil {
- return err3
- }
- for _, mappingObject := range objectOAMMappingList {
- mappingObjectCode := mappingObject.MappingObjectCode
- err4 := a.xBus.Create(mappingObjectCode, data)
- if err4 != nil {
- return err4
- }
- }
- return nil
- }
- func (a *httpHandler) Update(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error {
- err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
- if err1 != nil {
- return err1
- }
- data, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
- if err2 != nil {
- return err2
- }
- objectOAMMappingList, err3 := cache.GetBizObjectOAMMapping(objectCode, oamCode)
- if err3 != nil {
- return err3
- }
- for _, mappingObject := range objectOAMMappingList {
- mappingObjectCode := mappingObject.MappingObjectCode
- err4 := a.xBus.Update(mappingObjectCode, data)
- if err4 != nil {
- return err4
- }
- }
- return nil
- }
- func (a *httpHandler) Patch(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error {
- err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
- if err1 != nil {
- return err1
- }
- data, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
- if err2 != nil {
- return err2
- }
- objectOAMMappingList, err3 := cache.GetBizObjectOAMMapping(objectCode, oamCode)
- if err3 != nil {
- return err3
- }
- for _, mappingObject := range objectOAMMappingList {
- mappingObjectCode := mappingObject.MappingObjectCode
- err4 := a.xBus.Patch(mappingObjectCode, data)
- if err4 != nil {
- return err4
- }
- }
- return nil
- }
- func (a *httpHandler) Delete(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error {
- err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
- if err1 != nil {
- return err1
- }
- data, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
- if err2 != nil {
- return err2
- }
- objectOAMMappingList, err3 := cache.GetBizObjectOAMMapping(objectCode, oamCode)
- if err3 != nil {
- return err3
- }
- for _, mappingObject := range objectOAMMappingList {
- mappingObjectCode := mappingObject.MappingObjectCode
- err4 := a.xBus.Delete(mappingObjectCode, data)
- if err4 != nil {
- return err4
- }
- }
- return nil
- }
- func (a *httpHandler) HandleOAMRuleList(objectCode, oamCode string, m map[string]interface{}, user *common.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 *httpHandler) HandleOAMRule(oamRule *bizViewModel.BizObjectOAMRuleInfo, m map[string]interface{}, user *common.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 *httpHandler) 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 *httpHandler) 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 *httpHandler) 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 *httpHandler) Mapping2BizPageObject(objectCode string, pageData *common.PageResult) (*common.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 := &common.PageResult{
- Total: pageData.Total,
- PageSize: pageData.PageSize,
- Page: pageData.Page,
- Data: targetDataList,
- }
- return targetPageData, nil
- }
|