api_gateway_service.go 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. package service
  2. import (
  3. "errors"
  4. "time"
  5. "xps/cache"
  6. "xps/constant"
  7. "xps/datasource"
  8. "xps/repositories"
  9. "xps/viewmodels"
  10. )
  11. type ApiGatewayService interface {
  12. Get(objectCode, oamCode string, m map[string]interface{})(map[string]interface{}, error)
  13. GetPage(objectCode, oamCode string, m map[string]interface{})(*viewmodels.PageResult, error)
  14. GetList(objectCode, oamCode string, m map[string]interface{})([]map[string]interface{}, error)
  15. GetParams(objectCode, oamCode string)(map[string]interface{}, error)
  16. Create(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo)error
  17. Update(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo)error
  18. Patch(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo)error
  19. Delete(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo)error
  20. }
  21. type apiGatewayService struct {
  22. dataBus *repositories.DataBusRepo
  23. }
  24. func NewApiGatewayService() ApiGatewayService {
  25. return &apiGatewayService{
  26. dataBus: repositories.NewDataBusRepo(datasource.InstanceSlave()),
  27. }
  28. }
  29. func (a *apiGatewayService) GetParams(objectCode, oamCode string) (map[string]interface{}, error) {
  30. attrs, err2 := cache.GetBizObjectAttrs(objectCode)
  31. if err2 != nil {
  32. return nil, err2
  33. }
  34. result := make(map[string]interface{}, 0)
  35. for _, attr := range attrs {
  36. attrType := attr.AttrType
  37. if attrType == constant.DATA_TYPE_INT {
  38. result[attr.AttrCode] = 1
  39. } else if attrType == constant.DATA_TYPE_VARCHAR {
  40. result[attr.AttrCode] = "test"
  41. } else if attrType == constant.DATA_TYPE_FLOAT {
  42. result[attr.AttrCode] = 1.1
  43. } else if attrType == constant.DATA_TYPE_DATE {
  44. result[attr.AttrCode] = "2022-01-01"
  45. } else if attrType == constant.DATA_TYPE_DATETIME {
  46. result[attr.AttrCode] = "2022-01-01 01:01:01"
  47. }
  48. }
  49. return result, nil
  50. }
  51. func (a *apiGatewayService) Get(objectCode, oamCode string, m map[string]interface{})(map[string]interface{}, error) {
  52. params, err1 := a.Mapping2ModelObjectAttr(objectCode, m)
  53. if err1 != nil {
  54. return nil, err1
  55. }
  56. oam , err2:= cache.GetBizObjectOAM(objectCode, oamCode)
  57. if err2 != nil {
  58. return nil, err2
  59. }
  60. sqlStatement := oam.SqlStatement
  61. data, err3 := a.dataBus.GetById(sqlStatement, params)
  62. if err3 != nil {
  63. return nil, err3
  64. }
  65. return a.Mapping2BizObjectAttr(objectCode, data)
  66. }
  67. func (a *apiGatewayService) GetList(objectCode, oamCode string, m map[string]interface{})([]map[string]interface{}, error) {
  68. params, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
  69. if err2 != nil {
  70. return nil, err2
  71. }
  72. oam , err2:= cache.GetBizObjectOAM(objectCode, oamCode)
  73. if err2 != nil {
  74. return nil, err2
  75. }
  76. sqlStatement := oam.SqlStatement
  77. dataList, err3 := a.dataBus.GetList(sqlStatement, params)
  78. if err3 != nil {
  79. return nil, err3
  80. }
  81. return a.Mapping2BizObjectList(objectCode, dataList)
  82. }
  83. func (a *apiGatewayService) GetPage(objectCode, oamCode string, m map[string]interface{}) (*viewmodels.PageResult, error) {
  84. params, err1 := a.Mapping2ModelObjectAttr(objectCode, m)
  85. if err1 != nil {
  86. return nil, err1
  87. }
  88. oam , err2:= cache.GetBizObjectOAM(objectCode, oamCode)
  89. if err2 != nil {
  90. return nil, err2
  91. }
  92. sqlStatement := oam.SqlStatement
  93. sqlCount := oam.SqlCount
  94. pageData, err3 := a.dataBus.GetPage(sqlStatement, sqlCount, params)
  95. if err3 != nil {
  96. return nil, err3
  97. }
  98. return a.Mapping2BizPageObject(objectCode, pageData)
  99. }
  100. func (a *apiGatewayService) Create(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
  101. err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
  102. if err1 != nil {
  103. return err1
  104. }
  105. params, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
  106. if err2 != nil {
  107. return err2
  108. }
  109. return a.dataBus.Create(objectCode, params)
  110. }
  111. func (a *apiGatewayService) Update(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
  112. err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
  113. if err1 != nil {
  114. return err1
  115. }
  116. params, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
  117. if err2 != nil {
  118. return err2
  119. }
  120. return a.dataBus.Update(objectCode, params)
  121. }
  122. func (a *apiGatewayService) Patch(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
  123. err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
  124. if err1 != nil {
  125. return err1
  126. }
  127. params, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
  128. if err2 != nil {
  129. return err2
  130. }
  131. return a.dataBus.Patch(objectCode, params)
  132. }
  133. func (a *apiGatewayService) Delete(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
  134. err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
  135. if err1 != nil {
  136. return err1
  137. }
  138. params, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
  139. if err2 != nil {
  140. return err2
  141. }
  142. return a.dataBus.Delete(objectCode, params)
  143. }
  144. func (a *apiGatewayService) HandleOAMRuleList(objectCode, oamCode string, m map[string]interface{}, user *viewmodels.CurUserInfo) error {
  145. oamRules, err1 := cache.GetBizObjectOAMRules(objectCode, oamCode)
  146. if err1 != nil {
  147. return err1
  148. }
  149. for _, oamRule := range oamRules {
  150. err2 := a.HandleOAMRule(&oamRule, m, user)
  151. if err2 != nil {
  152. return err2
  153. }
  154. }
  155. return nil
  156. }
  157. func (a *apiGatewayService) HandleOAMRule(oamRule *viewmodels.BizObjectOAMRuleInfo, m map[string]interface{}, user *viewmodels.CurUserInfo)(error) {
  158. if oamRule.RuleId == constant.BIZ_RULE_NEW_ID {
  159. m[oamRule.TargetAttrCode] = NewID()
  160. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_DATETIME {
  161. m[oamRule.TargetAttrCode] = time.Now()
  162. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_DATE {
  163. m[oamRule.TargetAttrCode] = time.Now()
  164. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_ID {
  165. m[oamRule.TargetAttrCode] = user.UserId
  166. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_NAME {
  167. m[oamRule.TargetAttrCode] = user.UserName
  168. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_POSITION_ID {
  169. m[oamRule.TargetAttrCode] = user.PositionId
  170. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_POSITION_NAME {
  171. m[oamRule.TargetAttrCode] = user.PositionName
  172. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_GROUP_ID {
  173. m[oamRule.TargetAttrCode] = user.GroupId
  174. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_GROUP_NAME {
  175. m[oamRule.TargetAttrCode] = user.GroupName
  176. }
  177. return nil
  178. }
  179. func (a *apiGatewayService) Mapping2ModelObjectAttr(objectCode string, m map[string]interface{})(map[string]interface{}, error) {
  180. bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
  181. if err != nil {
  182. return nil, err
  183. }
  184. for _, bzAttr := range bizObjectAttrs {
  185. bzAttrCode := bzAttr.AttrCode
  186. bzMappingCode := bzAttr.MappingCode
  187. if bzAttrValue, ok := m[bzAttrCode]; ok {
  188. m[bzMappingCode] = bzAttrValue
  189. delete(m, bzAttrCode)
  190. }
  191. }
  192. return m, nil
  193. }
  194. func (a *apiGatewayService) Mapping2BizObjectAttr(objectCode string, m map[string]interface{})(map[string]interface{}, error) {
  195. bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
  196. if err != nil {
  197. return nil, err
  198. }
  199. params := make(map[string]interface{}, 0)
  200. for _, bzAttr := range bizObjectAttrs {
  201. bzAttrCode := bzAttr.AttrCode
  202. bzMappingCode := bzAttr.MappingCode
  203. if bzAttrValue, ok := m[bzMappingCode]; ok {
  204. params[bzAttrCode] = bzAttrValue
  205. }
  206. }
  207. return params, nil
  208. }
  209. func (a *apiGatewayService) Mapping2BizObjectList(objectCode string, dataList []map[string]interface{})([]map[string]interface{}, error) {
  210. bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
  211. if err != nil {
  212. return nil, err
  213. }
  214. targetDataList := make([]map[string]interface{}, 0)
  215. for _, data := range dataList {
  216. targetData := make(map[string]interface{}, 0)
  217. for _, bzAttr := range bizObjectAttrs {
  218. bzAttrCode := bzAttr.AttrCode
  219. bzMappingCode := bzAttr.MappingCode
  220. if bzAttrValue, ok := data[bzMappingCode]; ok {
  221. targetData[bzAttrCode] = bzAttrValue
  222. }
  223. }
  224. targetDataList = append(targetDataList, targetData)
  225. }
  226. return targetDataList, nil
  227. }
  228. func (a *apiGatewayService) Mapping2BizPageObject(objectCode string, pageData *viewmodels.PageResult)(*viewmodels.PageResult, error) {
  229. bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
  230. if err != nil {
  231. return nil, err
  232. }
  233. dataList,ok := pageData.Data.([]map[string]interface{})
  234. if !ok {
  235. return nil, errors.New("类型转换错误")
  236. }
  237. targetDataList := make([]map[string]interface{}, 0)
  238. for _, data := range dataList {
  239. targetData := make(map[string]interface{}, 0)
  240. for _, bzAttr := range bizObjectAttrs {
  241. bzAttrCode := bzAttr.AttrCode
  242. bzMappingCode := bzAttr.MappingCode
  243. if bzAttrValue, ok := data[bzMappingCode]; ok {
  244. targetData[bzAttrCode] = bzAttrValue
  245. }
  246. }
  247. targetDataList = append(targetDataList, targetData)
  248. }
  249. targetPageData := &viewmodels.PageResult{
  250. Total: pageData.Total,
  251. PageSize: pageData.PageSize,
  252. Page: pageData.Page,
  253. TotalPage: pageData.TotalPage,
  254. Data: targetDataList,
  255. }
  256. return targetPageData, nil
  257. }