api_gateway_service.go 10 KB

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