api_gateway_controller.go 8.4 KB

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