api_gateway_controller.go 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. package gateway
  2. import (
  3. "github.com/kataras/iris/v12/mvc"
  4. "strconv"
  5. "time"
  6. "xps/cmd/cache"
  7. "xps/cmd/constant"
  8. "xps/pkg/common"
  9. )
  10. type ApiGatewayController struct {
  11. Base
  12. Service HttpHandler
  13. }
  14. func (c *ApiGatewayController) BeforeActivation(b mvc.BeforeActivation) {
  15. b.Handle("GET", "/{objectCode:string}/{oamCode:string}", "Get" )
  16. b.Handle("GET", "/GenerateParams/{objectCode:string}/{oamCode:string}", "GenerateParams")
  17. b.Handle("POST", "/{objectCode:string}/{oamCode:string}", "Post" )
  18. b.Handle("PUT", "/{objectCode:string}/{oamCode:string}", "Put" )
  19. b.Handle("PATCH", "/{objectCode:string}/{oamCode:string}", "Patch" )
  20. b.Handle("DELETE", "/{objectCode:string}/{oamCode:string}", "Delete" )
  21. }
  22. func (c *ApiGatewayController) HandleParamRule(ruleId int64) interface{} {
  23. var result interface{}
  24. if ruleId == constant.BIZ_RULE_NEW_ID {
  25. } else if ruleId == constant.BIZ_RULE_CUR_DATETIME {
  26. result = time.Now()
  27. } else if ruleId == constant.BIZ_RULE_CUR_DATE {
  28. result = time.Now()
  29. } else if ruleId == constant.BIZ_RULE_CUR_USER_ID {
  30. result = c.GetCurUserId()
  31. } else if ruleId == constant.BIZ_RULE_CUR_USER_NAME {
  32. result = c.GetCurUserName()
  33. } else if ruleId == constant.BIZ_RULE_CUR_USER_POSITION_ID {
  34. result = c.GetCurUserPositionId()
  35. } else if ruleId == constant.BIZ_RULE_CUR_USER_POSITION_NAME {
  36. result = c.GetCurUserPositionName()
  37. } else if ruleId == constant.BIZ_RULE_CUR_USER_GROUP_ID {
  38. result = c.GetCurUserGroupId()
  39. } else if ruleId == constant.BIZ_RULE_CUR_USER_GROUP_NAME {
  40. result = c.GetCurUserGroupName()
  41. }
  42. return result
  43. }
  44. func (c *ApiGatewayController) buildUrlParams(objectCode, oamCode string) ([]common.QueryParam, error) {
  45. oamParams, err1 := cache.GetBizObjectOAMParams(objectCode, oamCode)
  46. if err1 != nil {
  47. return nil, err1
  48. }
  49. urlParams := c.Ctx.URLParams()
  50. queryParams := make([]common.QueryParam, 0)
  51. for _, oamParam := range oamParams {
  52. paramValueCode := oamParam.ParamValue
  53. paramType := oamParam.ParamType
  54. var paramValue interface{}
  55. isRuled := oamParam.IsRuled
  56. if isRuled > 0 {
  57. paramValue := c.HandleParamRule(oamParam.RuleId)
  58. param := common.QueryParam{
  59. LogicalOperator: oamParam.LogicalOperator,
  60. Name: oamParam.ParamTitle,
  61. CompareOperator: oamParam.CompareOperator,
  62. Type: oamParam.ParamType,
  63. Value: paramValue,
  64. }
  65. queryParams = append(queryParams, param)
  66. } else if urlVal, ok := urlParams[paramValueCode]; ok {
  67. if paramType == constant.DATA_TYPE_INT {
  68. ret, err := strconv.Atoi(urlVal)
  69. if err != nil {
  70. return nil, err
  71. }
  72. paramValue = ret
  73. } else if paramType == constant.DATA_TYPE_VARCHAR {
  74. paramValue = urlVal
  75. } else if paramType == constant.DATA_TYPE_DECIMAL {
  76. ret, err := strconv.ParseFloat(urlVal, 64)
  77. if err != nil {
  78. return nil, err
  79. }
  80. paramValue = ret
  81. } else if paramType == constant.DATA_TYPE_DATE {
  82. paramValue = urlVal
  83. } else if paramType == constant.DATA_TYPE_DATETIME {
  84. paramValue = urlVal
  85. }
  86. param := common.QueryParam{
  87. LogicalOperator: oamParam.LogicalOperator,
  88. Name: oamParam.ParamTitle,
  89. CompareOperator: oamParam.CompareOperator,
  90. Type: oamParam.ParamType,
  91. Value: paramValue,
  92. }
  93. queryParams = append(queryParams, param)
  94. }
  95. }
  96. return queryParams, nil
  97. }
  98. func (c *ApiGatewayController) GenerateParams(objectCode, oamCode string) *JsonResult {
  99. data, err := c.Service.GenerateParams(objectCode, oamCode)
  100. if err != nil {
  101. return ResultErr(err.Error(), nil)
  102. } else {
  103. return ResultOk("获取成功", data)
  104. }
  105. }
  106. func (c *ApiGatewayController) Get(objectCode, oamCode string) *JsonResult {
  107. oamInfo, err1 := cache.GetApiData(objectCode, oamCode)
  108. if err1 != nil {
  109. return ResultErr(err1.Error(), nil)
  110. }
  111. params, err2 := c.buildUrlParams(objectCode, oamCode)
  112. if err2 != nil {
  113. return ResultErr(err2.Error(), nil)
  114. }
  115. oamType := oamInfo.OamType
  116. if oamType == constant.OAM_GET_ONE {
  117. data, err := c.Service.Get(objectCode, oamCode, params)
  118. if err != nil {
  119. return ResultErr(err.Error(), nil)
  120. } else {
  121. return ResultOk("获取成功", data)
  122. }
  123. }
  124. if oamType == constant.OAM_GET_LIST {
  125. data, err := c.Service.GetList(objectCode, oamCode, params)
  126. if err != nil {
  127. return ResultErr(err.Error(), nil)
  128. } else {
  129. return ResultOk("获取成功", data)
  130. }
  131. }
  132. if oamType == constant.OAM_GET_PAGE {
  133. page := c.Ctx.URLParamIntDefault("page", 0)
  134. if page <= 0 {
  135. page = 1
  136. }
  137. limit := c.Ctx.URLParamIntDefault("limit", 0)
  138. if limit <= 0 {
  139. limit = 10
  140. }
  141. data, err := c.Service.GetPage(objectCode, oamCode, params, page, limit)
  142. if err != nil {
  143. return ResultErr(err.Error(), nil)
  144. } else {
  145. return ResultOk("获取成功", data)
  146. }
  147. }
  148. return ResultErr("方法不存在", nil)
  149. }
  150. func (c *ApiGatewayController) Post(objectCode, oamCode string) *JsonResult {
  151. m, err := c.GetJsonData()
  152. if err != nil {
  153. return ResultErr(err.Error(), nil)
  154. }
  155. userInfo := &common.CurUserInfo{
  156. UserId: c.GetCurUserId(),
  157. UserName: c.GetCurUserName(),
  158. PositionId: c.GetCurUserPositionId(),
  159. PositionName: c.GetCurUserPositionName(),
  160. GroupId: c.GetCurUserGroupId(),
  161. GroupName: c.GetCurUserGroupName(),
  162. }
  163. err = c.Service.Create(objectCode, oamCode, m, userInfo)
  164. if err != nil {
  165. return ResultErr(err.Error(), nil)
  166. } else {
  167. return ResultOk("创建成功", nil)
  168. }
  169. }
  170. func (c *ApiGatewayController) Put(objectCode, oamCode string) *JsonResult {
  171. m, err := c.GetJsonData()
  172. if err != nil {
  173. return ResultErr(err.Error(), nil)
  174. }
  175. userInfo := &common.CurUserInfo{
  176. UserId: c.GetCurUserId(),
  177. UserName: c.GetCurUserName(),
  178. PositionId: c.GetCurUserPositionId(),
  179. PositionName: c.GetCurUserPositionName(),
  180. GroupId: c.GetCurUserGroupId(),
  181. GroupName: c.GetCurUserGroupName(),
  182. }
  183. err = c.Service.Update(objectCode, oamCode, m, userInfo)
  184. if err != nil {
  185. return ResultErr(err.Error(), nil)
  186. } else {
  187. return ResultOk("更新成功", nil)
  188. }
  189. }
  190. func (c *ApiGatewayController) Patch(objectCode, oamCode string) *JsonResult {
  191. m, err := c.GetJsonData()
  192. if err != nil {
  193. return ResultErr(err.Error(), nil)
  194. }
  195. userInfo := &common.CurUserInfo{
  196. UserId: c.GetCurUserId(),
  197. UserName: c.GetCurUserName(),
  198. PositionId: c.GetCurUserPositionId(),
  199. PositionName: c.GetCurUserPositionName(),
  200. GroupId: c.GetCurUserGroupId(),
  201. GroupName: c.GetCurUserGroupName(),
  202. }
  203. err = c.Service.Patch(objectCode, oamCode, m, userInfo)
  204. if err != nil {
  205. return ResultErr(err.Error(), nil)
  206. } else {
  207. return ResultOk("更新成功", nil)
  208. }
  209. }
  210. func (c *ApiGatewayController) Delete(objectCode, oamCode string) *JsonResult {
  211. m, err := c.GetJsonData()
  212. if err != nil {
  213. return ResultErr(err.Error(), nil)
  214. }
  215. userInfo := &common.CurUserInfo{
  216. UserId: c.GetCurUserId(),
  217. UserName: c.GetCurUserName(),
  218. PositionId: c.GetCurUserPositionId(),
  219. PositionName: c.GetCurUserPositionName(),
  220. GroupId: c.GetCurUserGroupId(),
  221. GroupName: c.GetCurUserGroupName(),
  222. }
  223. err = c.Service.Delete(objectCode, oamCode, m, userInfo)
  224. if err != nil {
  225. return ResultErr(err.Error(), nil)
  226. } else {
  227. return ResultOk("删除成功", nil)
  228. }
  229. }