base_controller.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "eta_mini_ht_api/common/component/cache"
  6. logger "eta_mini_ht_api/common/component/log"
  7. "eta_mini_ht_api/common/exception"
  8. "eta_mini_ht_api/common/http"
  9. "github.com/beego/beego/v2/server/web"
  10. )
  11. var (
  12. redis *cache.RedisCache
  13. )
  14. type BaseController struct {
  15. web.Controller
  16. }
  17. type BaseResponse struct {
  18. Ret int `description:"返回状态码"`
  19. Msg string
  20. ErrMsg string
  21. ErrCode int
  22. Data interface{}
  23. Success bool `description:"true 执行成功,false 执行失败"`
  24. IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
  25. IsAddLog bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
  26. }
  27. func (b *BaseController) FailResponse(errInfo error) {
  28. var retData BaseResponse
  29. var etaError *exception.EtaError
  30. if !errors.As(errInfo, &etaError) {
  31. etaError = exception.New(exception.UnknownError)
  32. }
  33. retData = BaseResponse{
  34. Ret: 200,
  35. Msg: "",
  36. ErrMsg: etaError.ErrorMsg,
  37. ErrCode: etaError.ErrorCode,
  38. Data: nil}
  39. b.Data["json"] = retData
  40. b.ServeJSON()
  41. }
  42. // JsonResult /*
  43. func (b *BaseController) JsonResult(status int, errCode int, errMsg string, msg string, success bool, data interface{}) {
  44. retData := BaseResponse{
  45. Ret: status,
  46. Msg: msg,
  47. ErrMsg: errMsg,
  48. ErrCode: errCode,
  49. Data: data,
  50. Success: success}
  51. b.Ctx.Output.SetStatus(status)
  52. b.Data["json"] = retData
  53. b.ServeJSON()
  54. }
  55. func (b *BaseController) Forbidden() {
  56. }
  57. func (b *BaseController) GetPostParams(data interface{}) {
  58. err := json.Unmarshal(b.Ctx.Input.RequestBody, data)
  59. if err != nil {
  60. logger.Error("解析请求参数失败:%v", err)
  61. data = nil
  62. }
  63. }
  64. // Wrap ControllerWrap 是一个用于封装控制器方法的函数
  65. func Wrap(a *BaseController, fn func() (*WrapData, error)) {
  66. result, err := fn()
  67. if err != nil {
  68. logger.Error("%v", err)
  69. a.FailResponse(err)
  70. return
  71. }
  72. a.JsonResult(http.GetHttpStatusByAlias("ok"), http.ErrOK, "", result.Msg, http.Success, result.Data)
  73. }
  74. type WrapData struct {
  75. Msg string
  76. Data interface{}
  77. }
  78. func (b *BaseController) Cache() *cache.RedisCache {
  79. if redis == nil {
  80. redis = cache.GetInstance()
  81. }
  82. return redis
  83. }