/* * 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") }