diff --git a/controller/meter04kv.go b/controller/meter04kv.go index a6fd498..053e5ce 100644 --- a/controller/meter04kv.go +++ b/controller/meter04kv.go @@ -10,80 +10,69 @@ import ( "net/http" "strconv" - "github.com/gin-gonic/gin" + "github.com/gofiber/fiber/v2" "github.com/jinzhu/copier" "github.com/samber/lo" "github.com/shopspring/decimal" ) -func InitializeMeter04kVController(router *gin.Engine) { - router.GET("/park/:pid/meter/template", download04kvMeterArchiveTemplate) - router.GET("/park/:pid/meters", security.EnterpriseAuthorize, ListPaged04kVMeter) - router.GET("/park/:pid/meter/:code", security.EnterpriseAuthorize, fetch04kVMeterDetail) - router.POST("/park/:pid/meter", security.EnterpriseAuthorize, createSingle04kVMeter) - router.PUT("/park/:pid/meter/:code", security.EnterpriseAuthorize, modifySingle04kVMeter) - router.POST("/park/:pid/meter/batch", security.EnterpriseAuthorize, batchImport04kVMeterArchive) +func InitializeMeter04kVController(router *fiber.App) { + router.Get("/park/:pid/meter/template", download04kvMeterArchiveTemplate) + router.Get("/park/:pid/meters", security.EnterpriseAuthorize, ListPaged04kVMeter) + router.Get("/park/:pid/meter/:code", security.EnterpriseAuthorize, fetch04kVMeterDetail) + router.Post("/park/:pid/meter", security.EnterpriseAuthorize, createSingle04kVMeter) + router.Put("/park/:pid/meter/:code", security.EnterpriseAuthorize, modifySingle04kVMeter) + router.Post("/park/:pid/meter/batch", security.EnterpriseAuthorize, batchImport04kVMeterArchive) } -func download04kvMeterArchiveTemplate(c *gin.Context) { +func download04kvMeterArchiveTemplate(c *fiber.Ctx) error { result := response.NewResult(c) - requestParkId := c.Param("pid") - // if !ensureParkBelongs(c, result, requestParkId) { - // return - // } + requestParkId := c.Params("pid") parkDetail, err := service.ParkService.FetchParkDetail(requestParkId) if err != nil { - result.NotFound("未找到指定的园区信息。") - return + return result.NotFound("未找到指定的园区信息。") } - 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)) + return c.Download("./assets/meter_04kv_template.xlsx", fmt.Sprintf("%s-户表档案.xlsx", parkDetail.Name)) } -func ListPaged04kVMeter(c *gin.Context) { +func ListPaged04kVMeter(c *fiber.Ctx) error { result := response.NewResult(c) - requestParkId := c.Param("pid") - if !ensureParkBelongs(c, result, requestParkId) { - return + requestParkId := c.Params("pid") + if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { + return err } - requestPage, err := strconv.Atoi(c.DefaultQuery("page", "1")) + requestPage, err := strconv.Atoi(c.Query("page", "1")) if err != nil { - result.NotAccept("查询参数[page]格式不正确。") - return + return result.NotAccept("查询参数[page]格式不正确。") } - requestKeyword := c.DefaultQuery("keyword", "") + requestKeyword := c.Query("keyword", "") meters, totalItem, err := service.Meter04kVService.ListMeterDetail(requestParkId, requestKeyword, requestPage) if err != nil { - result.NotFound(err.Error()) - return + return result.NotFound(err.Error()) } - result.Json( + return result.Json( http.StatusOK, "已获取到符合条件的0.4kV表计集合。", response.NewPagedResponse(requestPage, totalItem).ToMap(), - gin.H{"meters": meters}, + fiber.Map{"meters": meters}, ) } -func fetch04kVMeterDetail(c *gin.Context) { +func fetch04kVMeterDetail(c *fiber.Ctx) error { result := response.NewResult(c) - requestParkId := c.Param("pid") - if !ensureParkBelongs(c, result, requestParkId) { - return + requestParkId := c.Params("pid") + if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { + return err } - requestMeterCode := c.Param("code") + requestMeterCode := c.Params("code") meter, err := service.Meter04kVService.Get04kVMeterDetail(requestParkId, requestMeterCode) if err != nil { - result.NotFound(err.Error()) - return + return result.NotFound(err.Error()) } if meter == nil { - result.Json(http.StatusNotFound, "指定的表计信息未能找到。", gin.H{"meter": nil}) - return + return result.Json(http.StatusNotFound, "指定的表计信息未能找到。", fiber.Map{"meter": nil}) } - result.Json(http.StatusOK, "指定的表计信息已找到。", gin.H{"meter": meter}) + return result.Json(http.StatusOK, "指定的表计信息已找到。", fiber.Map{"meter": meter}) } type _MeterModificationFormData struct { @@ -109,77 +98,73 @@ type _MeterCreationFormData struct { Enabled bool `json:"enabled" form:"enabled"` } -func createSingle04kVMeter(c *gin.Context) { +func createSingle04kVMeter(c *fiber.Ctx) error { result := response.NewResult(c) - requestParkId := c.Param("pid") - if !ensureParkBelongs(c, result, requestParkId) { - return + requestParkId := c.Params("pid") + if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { + return err } formData := new(_MeterCreationFormData) - c.BindJSON(formData) + if err := c.BodyParser(formData); err != nil { + return result.UnableToParse("无法解析提交的数据。") + } newMeter := new(model.Meter04KV) copier.Copy(newMeter, formData) newMeter.ParkId = requestParkId err := service.Meter04kVService.CreateSingleMeter(*newMeter) if err != nil { - result.Error(http.StatusInternalServerError, err.Error()) - return + return result.Error(http.StatusInternalServerError, err.Error()) } - result.Created("新0.4kV表计已经添加完成。") + return result.Created("新0.4kV表计已经添加完成。") } -func modifySingle04kVMeter(c *gin.Context) { +func modifySingle04kVMeter(c *fiber.Ctx) error { result := response.NewResult(c) - requestParkId := c.Param("pid") - if !ensureParkBelongs(c, result, requestParkId) { - return + requestParkId := c.Params("pid") + if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { + return err } - requestMeterCode := c.Param("code") + requestMeterCode := c.Params("code") meterDetail, err := service.Meter04kVService.Get04kVMeterDetail(requestParkId, requestMeterCode) if err != nil { - result.NotFound(err.Error()) - return + return result.NotFound(err.Error()) } if meterDetail == nil { - result.NotFound("指定表计的信息为找到,不能修改。") - return + return result.NotFound("指定表计的信息为找到,不能修改。") } formData := new(_MeterModificationFormData) - c.BindJSON(formData) + if err := c.BodyParser(formData); err != nil { + return result.UnableToParse("无法解析提交的数据。") + } copier.Copy(meterDetail, formData) err = service.Meter04kVService.UpdateSingleMeter(meterDetail) if err != nil { - result.Error(http.StatusInternalServerError, err.Error()) - return + return result.Error(http.StatusInternalServerError, err.Error()) } - result.Updated("指定0.4kV表计信息已经更新。") + return result.Updated("指定0.4kV表计信息已经更新。") } -func batchImport04kVMeterArchive(c *gin.Context) { +func batchImport04kVMeterArchive(c *fiber.Ctx) error { result := response.NewResult(c) - requestParkId := c.Param("pid") - if !ensureParkBelongs(c, result, requestParkId) { - return + requestParkId := c.Params("pid") + if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { + return err } uploadedFile, err := c.FormFile("data") if err != nil { - result.NotAccept("没有接收到上传的档案文件。") - return + return result.NotAccept("没有接收到上传的档案文件。") } archiveFile, err := uploadedFile.Open() if err != nil { - result.Error(http.StatusInternalServerError, err.Error()) - return + return result.Error(http.StatusInternalServerError, err.Error()) } analyzer, err := excel.NewMeterArchiveExcelAnalyzer(archiveFile) if err != nil { - result.Error(http.StatusInternalServerError, err.Error()) - return + return result.Error(http.StatusInternalServerError, err.Error()) } records, errs := analyzer.Analysis(*new(model.Meter04KV)) if len(errs) > 0 { - result.Json(http.StatusNotAcceptable, "上传的表计档案文件存在错误。", gin.H{"errors": errs}) - return + return result.Json(http.StatusNotAcceptable, "上传的表计档案文件存在错误。", fiber.Map{"errors": errs}) } mergedMeters := lo.Map(records, func(meter model.Meter04KV, index int) model.Meter04KV { @@ -189,13 +174,15 @@ func batchImport04kVMeterArchive(c *gin.Context) { }) errs = service.Meter04kVService.DuplicateMeterCodeValidate(mergedMeters) if len(errs) > 0 { - result.Json(http.StatusNotAcceptable, "上传的表计档案文件存在错误。", gin.H{"errors": errs}) - return + return result.Json(http.StatusNotAcceptable, "上传的表计档案文件存在错误。", fiber.Map{"errors": errs}) } err = service.Meter04kVService.BatchCreateMeter(mergedMeters) if err != nil { - result.Error(http.StatusInternalServerError, err.Error()) - return + return result.Error(http.StatusInternalServerError, err.Error()) } - result.Json(http.StatusOK, "上传的表计档案已经全部导入。", gin.H{"errors": make([]excel.ExcelAnalysisError, 0)}) + return result.Json( + http.StatusOK, + "上传的表计档案已经全部导入。", + fiber.Map{"errors": make([]excel.ExcelAnalysisError, 0)}, + ) }