| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- /*
- * Site Info Manage API List
- * /siteInfoManage/manage/update - GET & POST 获取更新状态 & 请求更新站点信息表
- * /siteInfoManage/dataList - POST 站点信息表
- * /siteInfoManage/dataListExport - POST 导出站点信息表
- * /siteInfoManage/siteInfo/query - GET 获取单个站点实时信息(同时更新单个站点数据)
- * /siteInfoManage/operate/enableXlog - POST 使能站点xlog
- */
- package controllers
- import (
- "bufio"
- "fmt"
- "fwh-toolbox-server/domain"
- "fwh-toolbox-server/dto"
- "fwh-toolbox-server/services"
- "net/url"
- "strings"
- "time"
- "github.com/gofiber/fiber/v2"
- "go.uber.org/zap"
- )
- // 获取更新状态
- // /siteInfoManage/manage/update
- func GetSiteInfoUpdateStatus(c *fiber.Ctx) error {
- date, err := services.GetSiteInfoUpdateStatus()
- if err != nil {
- return Error(c, "Site Info date read failed.")
- }
- return Success(c, date)
- }
- // 请求更新站点信息表
- // /siteInfoManage/manage/update
- func UpdateSiteInfoDate(c *fiber.Ctx) error {
- err := services.UpdateSiteInfoDate()
- if err != nil {
- return Error(c, "Site Info update failed.")
- }
- return Success[any](c, nil, "Success")
- }
- // 获取站点信息表
- // /siteInfoManage/dataList
- func QuerySiteInfoDataList(c *fiber.Ctx) error {
- var body dto.SiteInfoRequest
- if err := c.BodyParser(&body); err != nil {
- zap.L().Warn("Invalid request body", zap.String("err", err.Error()))
- return Fail(c, "Invalid request body")
- }
- data, err := services.QuerySiteInfoDataList(body)
- if err != nil {
- return Error(c, err.Error())
- }
- return Success[*dto.ResPage[dto.SiteInfoDTO]](c, data, "Success")
- }
- // dataListExport
- // /siteInfoManage/dataListExport
- func ExportSiteInfoDataList(c *fiber.Ctx) error {
- var body struct {
- Filter *domain.SiteInfoFilter `json:"filter"`
- }
- if err := c.BodyParser(&body); err != nil {
- zap.L().Warn("Invalid request body", zap.String("err", err.Error()))
- return Fail(c, "Invalid request body")
- }
- // 导出excel文件
- f, err := services.ExportSiteInfoDataList(body.Filter)
- if err != nil {
- zap.L().Warn("File export failed", zap.String("err", err.Error()))
- return Fail(c, "File export failed")
- }
- fileName := fmt.Sprintf("LMT站点管理表_%s.xlsx", strings.Replace(time.Now().Format(time.DateOnly), "-", "_", -1))
- encoded := url.QueryEscape(fileName)
- c.Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
- c.Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s; filename*=UTF-8''%s", encoded, encoded))
- // Fiber 原生 Context 的 BodyWriter,可直接写数据到 HTTP 输出
- // writer := c.Context().Response.BodyWriter()
- // 使用 SetBodyStreamWriter 流式写入
- c.Context().SetBodyStreamWriter(func(w *bufio.Writer) {
- f.Write(w)
- w.Flush()
- if err := f.Close(); err != nil {
- zap.L().Error("Excel 文件close失败", zap.String("err", err.Error()))
- }
- })
- // return Success[any](c, nil, "Success")
- return nil
- }
- // 查询单个站点实时信息(同时更新单个站点数据)
- // /siteInfoManage/siteInfo/query
- func GetSiteInfoData(c *fiber.Ctx) error {
- sn := c.Query("sn")
- if len(sn) == 0 {
- zap.L().Warn("Invalid request param", zap.String("sn", sn))
- return Fail(c, "Invalid request param")
- }
- data, err := services.GetSiteInfoData(sn)
- if err != nil {
- return Error(c, err.Error())
- }
- return Success[*dto.SiteInfoDTO](c, data, "Success")
- }
- // 使能站点xlog
- // /siteInfoManage/operate/enableXlog
- func OperateSiteInfoEnableXlog(c *fiber.Ctx) error {
- var body string
- if err := c.BodyParser(&body); err != nil {
- zap.L().Warn("Invalid request body", zap.String("err", err.Error()))
- return Fail(c, "Invalid request body")
- }
- data, err := services.OperateSiteInfoEnableXlog(c.UserContext(), body)
- if err != nil {
- return Error(c, err.Error())
- }
- return Success[string](c, data, "Success")
- }
|