response.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package response
  2. import (
  3. "encoding/json"
  4. "git.sxidc.com/go-tools/api_binding/http_binding/binding_context"
  5. "git.sxidc.com/service-supports/fserr"
  6. "git.sxidc.com/service-supports/fslog"
  7. "git.sxidc.com/service-supports/websocket"
  8. "net/http"
  9. )
  10. func SendMsgResponse(c *binding_context.Context, statusCode int, _ any, err error) {
  11. msgResp := formMsgResponse(err)
  12. c.JSON(statusCode, msgResp)
  13. }
  14. type IDResponse[T IDType] struct {
  15. MsgResponse
  16. ID T `json:"id"`
  17. }
  18. func SendIDResponse[T IDType](c *binding_context.Context, statusCode int, id T, err error) {
  19. msgResp := formMsgResponse(err)
  20. c.JSON(statusCode, IDResponse[T]{
  21. MsgResponse: msgResp,
  22. ID: id,
  23. })
  24. }
  25. type InfoResponse[T any] struct {
  26. MsgResponse
  27. Info T `json:"info"`
  28. }
  29. func SendInfoResponse[T any](c *binding_context.Context, statusCode int, info T, err error) {
  30. msgResp := formMsgResponse(err)
  31. c.JSON(statusCode, InfoResponse[T]{
  32. MsgResponse: msgResp,
  33. Info: info,
  34. })
  35. }
  36. type InfosResponse[T any] struct {
  37. MsgResponse
  38. InfosData[T]
  39. }
  40. func SendInfosResponse[T any](c *binding_context.Context, statusCode int, data InfosData[T], err error) {
  41. msgResp := formMsgResponse(err)
  42. c.JSON(statusCode, InfosResponse[T]{
  43. MsgResponse: msgResp,
  44. InfosData: data,
  45. })
  46. }
  47. func StructToMap(originStruct any) map[string]any {
  48. jsonBytes, err := json.Marshal(originStruct)
  49. if err != nil {
  50. panic(err)
  51. }
  52. retMap := make(map[string]any)
  53. err = json.Unmarshal(jsonBytes, &retMap)
  54. if err != nil {
  55. panic(err)
  56. }
  57. return retMap
  58. }
  59. func SendMapResponse(c *binding_context.Context, statusCode int, data map[string]any, err error) {
  60. msgRespMap := formMapMsgResponse(err)
  61. for key, value := range data {
  62. msgRespMap[key] = value
  63. }
  64. c.JSON(statusCode, msgRespMap)
  65. }
  66. type MsgResponse struct {
  67. Success bool `json:"success"`
  68. ErrCode int `json:"errCode"`
  69. Msg string `json:"msg"`
  70. }
  71. func formMsgResponse(err error) MsgResponse {
  72. if err != nil {
  73. fslog.Error(err)
  74. serviceErr := fserr.ParseCode(err)
  75. return MsgResponse{
  76. Success: false,
  77. ErrCode: serviceErr.BusinessCode,
  78. Msg: serviceErr.Msg,
  79. }
  80. }
  81. return MsgResponse{
  82. Success: true,
  83. ErrCode: 0,
  84. Msg: "操作成功",
  85. }
  86. }
  87. func formMapMsgResponse(err error) map[string]any {
  88. resp := make(map[string]any)
  89. if err != nil {
  90. fslog.Error(err)
  91. serviceErr := fserr.ParseCode(err)
  92. resp["success"] = false
  93. resp["errCode"] = serviceErr.BusinessCode
  94. resp["msg"] = serviceErr.Msg
  95. return resp
  96. }
  97. resp["success"] = true
  98. resp["errCode"] = 0
  99. resp["msg"] = "操作成功"
  100. return resp
  101. }
  102. func WSSendMessage(groupID string, obj any) {
  103. message, err := json.Marshal(obj)
  104. if err != nil {
  105. err = fserr.ParseCode(err)
  106. fslog.Error(err)
  107. return
  108. }
  109. err = websocket.GetInstance().BroadCast(groupID, message)
  110. if err != nil {
  111. err = fserr.ParseCode(err)
  112. fslog.Error(err)
  113. return
  114. }
  115. }
  116. func SendString(c *binding_context.Context, statusCode int, data string, err error) {
  117. if err != nil {
  118. c.String(http.StatusOK, err.Error())
  119. return
  120. }
  121. c.String(http.StatusOK, data)
  122. }
  123. func WriteBytes(c *binding_context.Context, statusCode int, bytes []byte, err error) {
  124. if err != nil {
  125. c.AbortWithStatus(statusCode)
  126. return
  127. }
  128. _, err = c.Writer.Write(bytes)
  129. if err != nil {
  130. c.AbortWithStatus(statusCode)
  131. return
  132. }
  133. }
  134. func SendMapXMLResponseIgnoreError(c *binding_context.Context, statusCode int, data map[string]any, _ error) {
  135. c.XML(statusCode, data)
  136. }