siteInfoManageControllers.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /*
  2. * Site Info Manage API List
  3. * /siteInfoManage/manage/update - GET & POST 获取更新状态 & 请求更新站点信息表
  4. * /siteInfoManage/dataList - POST 站点信息表
  5. * /siteInfoManage/dataListExport - POST 导出站点信息表
  6. * /siteInfoManage/siteInfo/query - GET 获取单个站点实时信息(同时更新单个站点数据)
  7. * /siteInfoManage/operate/enableXlog - POST 使能站点xlog
  8. */
  9. package controllers
  10. import (
  11. "bufio"
  12. "fmt"
  13. "fwh-toolbox-server/domain"
  14. "fwh-toolbox-server/dto"
  15. "fwh-toolbox-server/services"
  16. "net/url"
  17. "strings"
  18. "time"
  19. "github.com/gofiber/fiber/v2"
  20. "go.uber.org/zap"
  21. )
  22. // 获取更新状态
  23. // /siteInfoManage/manage/update
  24. func GetSiteInfoUpdateStatus(c *fiber.Ctx) error {
  25. date, err := services.GetSiteInfoUpdateStatus()
  26. if err != nil {
  27. return Error(c, "Site Info date read failed.")
  28. }
  29. return Success(c, date)
  30. }
  31. // 请求更新站点信息表
  32. // /siteInfoManage/manage/update
  33. func UpdateSiteInfoDate(c *fiber.Ctx) error {
  34. err := services.UpdateSiteInfoDate()
  35. if err != nil {
  36. return Error(c, "Site Info update failed.")
  37. }
  38. return Success[any](c, nil, "Success")
  39. }
  40. // 获取站点信息表
  41. // /siteInfoManage/dataList
  42. func QuerySiteInfoDataList(c *fiber.Ctx) error {
  43. var body dto.SiteInfoRequest
  44. if err := c.BodyParser(&body); err != nil {
  45. zap.L().Warn("Invalid request body", zap.String("err", err.Error()))
  46. return Fail(c, "Invalid request body")
  47. }
  48. data, err := services.QuerySiteInfoDataList(body)
  49. if err != nil {
  50. return Error(c, err.Error())
  51. }
  52. return Success[*dto.ResPage[dto.SiteInfoDTO]](c, data, "Success")
  53. }
  54. // dataListExport
  55. // /siteInfoManage/dataListExport
  56. func ExportSiteInfoDataList(c *fiber.Ctx) error {
  57. var body struct {
  58. Filter *domain.SiteInfoFilter `json:"filter"`
  59. }
  60. if err := c.BodyParser(&body); err != nil {
  61. zap.L().Warn("Invalid request body", zap.String("err", err.Error()))
  62. return Fail(c, "Invalid request body")
  63. }
  64. // 导出excel文件
  65. f, err := services.ExportSiteInfoDataList(body.Filter)
  66. if err != nil {
  67. zap.L().Warn("File export failed", zap.String("err", err.Error()))
  68. return Fail(c, "File export failed")
  69. }
  70. fileName := fmt.Sprintf("LMT站点管理表_%s.xlsx", strings.Replace(time.Now().Format(time.DateOnly), "-", "_", -1))
  71. encoded := url.QueryEscape(fileName)
  72. c.Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
  73. c.Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s; filename*=UTF-8''%s", encoded, encoded))
  74. // Fiber 原生 Context 的 BodyWriter,可直接写数据到 HTTP 输出
  75. // writer := c.Context().Response.BodyWriter()
  76. // 使用 SetBodyStreamWriter 流式写入
  77. c.Context().SetBodyStreamWriter(func(w *bufio.Writer) {
  78. f.Write(w)
  79. w.Flush()
  80. if err := f.Close(); err != nil {
  81. zap.L().Error("Excel 文件close失败", zap.String("err", err.Error()))
  82. }
  83. })
  84. // return Success[any](c, nil, "Success")
  85. return nil
  86. }
  87. // 查询单个站点实时信息(同时更新单个站点数据)
  88. // /siteInfoManage/siteInfo/query
  89. func GetSiteInfoData(c *fiber.Ctx) error {
  90. sn := c.Query("sn")
  91. if len(sn) == 0 {
  92. zap.L().Warn("Invalid request param", zap.String("sn", sn))
  93. return Fail(c, "Invalid request param")
  94. }
  95. data, err := services.GetSiteInfoData(sn)
  96. if err != nil {
  97. return Error(c, err.Error())
  98. }
  99. return Success[*dto.SiteInfoDTO](c, data, "Success")
  100. }
  101. // 使能站点xlog
  102. // /siteInfoManage/operate/enableXlog
  103. func OperateSiteInfoEnableXlog(c *fiber.Ctx) error {
  104. var body string
  105. if err := c.BodyParser(&body); err != nil {
  106. zap.L().Warn("Invalid request body", zap.String("err", err.Error()))
  107. return Fail(c, "Invalid request body")
  108. }
  109. data, err := services.OperateSiteInfoEnableXlog(c.UserContext(), body)
  110. if err != nil {
  111. return Error(c, err.Error())
  112. }
  113. return Success[string](c, data, "Success")
  114. }