diff --git a/controller/meter04kv.go b/controller/meter04kv.go index 1949dc8..3135bb2 100644 --- a/controller/meter04kv.go +++ b/controller/meter04kv.go @@ -1,6 +1,7 @@ package controller import ( + "electricity_bill_calc/excel" "electricity_bill_calc/model" "electricity_bill_calc/response" "electricity_bill_calc/security" @@ -31,6 +32,7 @@ func InitializeMeter04kVController(router *gin.Engine) { Meter04kVController.Router.GET("/park/:pid/meter/:code", security.EnterpriseAuthorize, fetch04kVMeterDetail) Meter04kVController.Router.POST("/park/:pid/meter", security.EnterpriseAuthorize, createSingle04kVMeter) Meter04kVController.Router.PUT("/park/:pid/meter/:code", security.EnterpriseAuthorize, modifySingle04kVMeter) + Meter04kVController.Router.POST("/park/:pid/meter/batch", security.EnterpriseAuthorize, batchImport04kVMeterArchive) } func download04kvMeterArchiveTemplate(c *gin.Context) { @@ -221,3 +223,44 @@ func modifySingle04kVMeter(c *gin.Context) { } result.Updated("指定0.4kV表计信息已经更新。") } + +func batchImport04kVMeterArchive(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 + } + uploadedFile, err := c.FormFile("data") + if err != nil { + result.NotAccept("没有接收到上传的档案文件。") + return + } + archiveFile, err := uploadedFile.Open() + if err != nil { + result.Error(http.StatusInternalServerError, err.Error()) + return + } + analyzer, err := excel.NewMeterArchiveExcelAnalyzer(archiveFile) + if err != nil { + result.Error(http.StatusInternalServerError, err.Error()) + return + } + records, errs := analyzer.Analysis(*new(model.Meter04KV)) + if len(errs) > 0 { + result.Json(http.StatusNotAcceptable, "上传的表计档案文件存在错误。", gin.H{"errors": errs}) + return + } + log.Printf("[controller|debug] records: %+v", records) + result.Failure(http.StatusNotAcceptable, "调试中") +}