package controller import ( "electricity_bill_calc/response" "electricity_bill_calc/security" "electricity_bill_calc/service" "fmt" "net/http" "strconv" "github.com/gin-gonic/gin" ) type _Meter04kVController struct { Router *gin.Engine } var Meter04kVController *_Meter04kVController func InitializeMeter04kVController(router *gin.Engine) { Meter04kVController = &_Meter04kVController{ Router: router, } Meter04kVController.Router.GET("/park/:pid/meter/template", security.EnterpriseAuthorize, download04kvMeterArchiveTemplate) Meter04kVController.Router.GET("/park/:pid/meters", security.EnterpriseAuthorize, ListPaged04kVMeter) } func download04kvMeterArchiveTemplate(c *gin.Context) { result := response.NewResult(c) requestParkId := c.Param("pid") userSession, err := _retreiveSession(c) if err != nil { result.Unauthorized(err.Error()) return } sure, err := service.ParkService.EnsurePark(userSession.Uid, requestParkId) if err != nil { result.Error(http.StatusInternalServerError, err.Error()) return } if !sure { result.Unauthorized("不能访问不属于自己的园区。") return } parkDetail, err := service.ParkService.FetchParkDetail(requestParkId) if err != nil { result.NotFound("未找到指定的园区信息。") return } c.Status(http.StatusOK) c.Header("Content-Type", "application/octet-stream") c.Header("Content-Transfer-Encoding", "binary") c.FileAttachment("./assets/meter_04kv_template.xlsx", fmt.Sprintf("%s-户表档案.xlsx", parkDetail.Name)) } func ListPaged04kVMeter(c *gin.Context) { result := response.NewResult(c) requestParkId := c.Param("pid") userSession, err := _retreiveSession(c) if err != nil { result.Unauthorized(err.Error()) return } sure, err := service.ParkService.EnsurePark(userSession.Uid, requestParkId) if err != nil { result.Error(http.StatusInternalServerError, err.Error()) return } if !sure { result.Unauthorized("不能访问不属于自己的园区。") return } requestPage, err := strconv.Atoi(c.DefaultQuery("page", "1")) if err != nil { result.NotAccept("查询参数[page]格式不正确。") return } requestKeyword := c.DefaultQuery("keyword", "") meters, totalItem, err := service.Meter04kVService.ListMeterDetail(requestParkId, requestKeyword, requestPage) if err != nil { result.NotFound(err.Error()) return } result.Json( http.StatusOK, "已获取到符合条件的0.4kV表计集合。", response.NewPagedResponse(requestPage, totalItem).ToMap(), gin.H{"meters": meters}, ) }