From 577ac9d1dc4418db2e32dd5c691c128adb64ce0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Thu, 15 Jun 2023 09:31:00 +0800 Subject: [PATCH] =?UTF-8?q?refactor(park):=E8=B0=83=E6=95=B4=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E5=9B=AD=E5=8C=BA=E5=BD=92=E5=B1=9E=E7=9A=84=E9=80=BB?= =?UTF-8?q?=E5=92=8C=E4=BD=BF=E7=94=A8=E6=96=B9=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/abstract.go | 17 +++--- controller/meter.go | 118 +++++++---------------------------------- controller/park.go | 14 ++--- 3 files changed, 37 insertions(+), 112 deletions(-) diff --git a/controller/abstract.go b/controller/abstract.go index 1dd952b..3cb2fd0 100644 --- a/controller/abstract.go +++ b/controller/abstract.go @@ -24,18 +24,23 @@ func _retreiveSession(c *fiber.Ctx) (*model.Session, error) { } // 检查当前用户是否拥有指定园区,在判断完成之后直接产生响应 -func checkParkBelongs(logger *zap.Logger, parkId string, session *model.Session, result *response.Result) (bool, error) { +func checkParkBelongs(parkId string, logger *zap.Logger, c *fiber.Ctx, result *response.Result) (bool, error) { + session := c.Locals("session") if session == nil { - logger.Error("用户会话无效。") - return false, result.Unauthorized("用户会话无效。") + logger.Error("用户会话不存在。") + return false, result.Unauthorized("用户会话不存在。") } - ok, err := repository.ParkRepository.IsParkBelongs(parkId, session.Uid) + userSession, ok := session.(*model.Session) + if !ok { + return false, result.Unauthorized("用户会话格式不正确,需要重新登录") + } + ok, err := repository.ParkRepository.IsParkBelongs(parkId, userSession.Uid) switch { case err != nil: - logger.Error("无法判断园区是否隶属于当前用户。", zap.String("park id", parkId), zap.String("user id", session.Uid), zap.Error(err)) + logger.Error("无法判断园区是否隶属于当前用户。", zap.String("park id", parkId), zap.String("user id", userSession.Uid), zap.Error(err)) return false, result.Error(http.StatusInternalServerError, err.Error()) case err == nil && !ok: - logger.Error("用户试图访问不属于自己的园区。", zap.String("park id", parkId), zap.String("user id", session.Uid)) + logger.Error("用户试图访问不属于自己的园区。", zap.String("park id", parkId), zap.String("user id", userSession.Uid)) return false, result.Forbidden("您无权访问该园区。") } return true, nil diff --git a/controller/meter.go b/controller/meter.go index e49d39e..a25cc18 100644 --- a/controller/meter.go +++ b/controller/meter.go @@ -48,12 +48,7 @@ func searchMetersWithinPark(c *fiber.Ctx) error { parkId := c.Params("parkId") meterLog.Info("查询指定园区下的表计信息", zap.String("park id", parkId)) result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("无法查询指定园区下的表计信息,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } keyword := c.Query("keyword") @@ -76,12 +71,7 @@ func retrieveSpecificMeterDetail(c *fiber.Ctx) error { meterId := c.Params("code") meterLog.Info("查询指定园区中指定表计的详细信息", zap.String("park id", parkId), zap.String("meter id", meterId)) result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("无法查询指定园区中指定表计的详细信息,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } meter, err := repository.MeterRepository.FetchMeterDetail(parkId, meterId) @@ -101,12 +91,7 @@ func createNewMeterManually(c *fiber.Ctx) error { parkId := c.Params("pid") meterLog.Info("手动添加一条0.4kV表计记录", zap.String("park id", parkId)) result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("无法手动添加一条0.4kV表计记录,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } var creationForm vo.MeterCreationForm @@ -127,12 +112,7 @@ func updateMeterManually(c *fiber.Ctx) error { meterId := c.Params("code") meterLog.Info("手动更新一条新的0.4kV表计记录", zap.String("park id", parkId), zap.String("meter id", meterId)) result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("无法手动更新一条新的0.4kV表计记录,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } var updateForm vo.MeterModificationForm @@ -152,12 +132,7 @@ func downloadMeterArchiveTemplate(c *fiber.Ctx) error { parkId := c.Params("pid") meterLog.Info("下载指定的园区表计登记模板", zap.String("park id", parkId)) result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("无法下载指定的园区表计登记模板,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } parkDetail, err := repository.ParkRepository.RetrieveParkDetail(parkId) @@ -194,13 +169,8 @@ func downloadMeterArchiveTemplate(c *fiber.Ctx) error { // 从Excel文件中导入表计档案 func uploadMeterArchive(c *fiber.Ctx) error { result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("无法从Excel文件中导入表计档案,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } parkId := c.Params("pid") - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } uploadFile, err := c.FormFile("data") @@ -222,12 +192,7 @@ func replaceMeter(c *fiber.Ctx) error { meterId := c.Params("code") meterLog.Info("更换系统中的表计", zap.String("park id", parkId), zap.String("meter id", meterId)) result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("无法更换系统中的表计,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } var replacementForm vo.MeterReplacingForm @@ -241,13 +206,8 @@ func replaceMeter(c *fiber.Ctx) error { // 列出指定公摊表计下的所有关联表计 func listAssociatedMeters(c *fiber.Ctx) error { result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("无法列出指定公摊表计下的所有关联表计,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } parkId := c.Params("pid") - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } meterId := c.Params("code") @@ -263,13 +223,8 @@ func listAssociatedMeters(c *fiber.Ctx) error { // 向指定表计绑定关联表计 func bindAssociatedMeters(c *fiber.Ctx) error { result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("无法向指定表计绑定关联表计,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } parkId := c.Params("pid") - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } meterId := c.Params("code") @@ -294,13 +249,8 @@ func bindAssociatedMeters(c *fiber.Ctx) error { // 解除指定园区下两个表计之间的关联关系 func unbindAssociatedMeters(c *fiber.Ctx) error { result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("无法解除指定园区下两个表计之间的关联关系,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } parkId := c.Params("pid") - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } masterMeter := c.Params("master") @@ -324,13 +274,8 @@ func unbindAssociatedMeters(c *fiber.Ctx) error { // 分页列出园区中的公摊表计 func listPooledMeters(c *fiber.Ctx) error { result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("无法分页列出园区中的公摊表计,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } parkId := c.Params("pid") - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } page := c.QueryInt("page", 1) @@ -356,7 +301,7 @@ func listUnboundMeters(c *fiber.Ctx) error { return result.Unauthorized(err.Error()) } parkId := c.Params("pid") - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } keyword := c.Query("keyword") @@ -384,7 +329,7 @@ func listUnboundTenementMeters(c *fiber.Ctx) error { meterLog.Error("无法列出指定园区中尚未绑定商户的表计,未指定要访问的园区ID") return result.NotAccept("未指定要访问的园区。") } - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } keyword := c.Query("keyword") @@ -402,13 +347,8 @@ func listUnboundTenementMeters(c *fiber.Ctx) error { // 查询指定园区中的表计读数 func queryMeterReadings(c *fiber.Ctx) error { result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("查询指定园区中的表计读数,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } parkId := c.Params("pid") - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } keyword := tools.EmptyToNil(c.Query("keyword")) @@ -450,13 +390,8 @@ func queryMeterReadings(c *fiber.Ctx) error { // 记录一条新的表计抄表记录 func recordMeterReading(c *fiber.Ctx) error { result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("记录一条新的表计抄表记录,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } parkId := c.Params("pid") - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } meterCode := c.Params("code") @@ -469,7 +404,7 @@ func recordMeterReading(c *fiber.Ctx) error { meterLog.Warn("记录一条新的表计抄表记录,表计读数不能正常配平,尖、峰、谷电量和超过总电量。") return result.NotAccept("表计读数不能正常配平,尖、峰、谷电量和超过总电量。") } - err = service.MeterService.RecordReading(parkId, meterCode, &readingForm) + err := service.MeterService.RecordReading(parkId, meterCode, &readingForm) if err != nil { meterLog.Error("记录一条新的表计抄表记录,无法记录表计抄表记录", zap.Error(err)) return result.Error(http.StatusInternalServerError, err.Error()) @@ -480,13 +415,8 @@ func recordMeterReading(c *fiber.Ctx) error { // 更新指定园区中指定表计的抄表记录 func updateMeterReading(c *fiber.Ctx) error { result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("更新一条新的表计抄表记录,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } parkId := c.Params("pid") - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } meterCode := c.Params("code") @@ -518,12 +448,7 @@ func downloadMeterReadingsTemplate(c *fiber.Ctx) error { parkId := c.Params("pid") meterLog.Info("下载指定的园区表计抄表模板", zap.String("park id", parkId)) result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("无法下载指定的园区表计抄表模板,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } parkDetail, err := repository.ParkRepository.RetrieveParkDetail(parkId) @@ -560,12 +485,7 @@ func uploadMeterReadings(c *fiber.Ctx) error { parkId := c.Params("pid") meterLog.Info("从Excel文件中导入抄表档案", zap.String("park id", parkId)) result := response.NewResult(c) - session, err := _retreiveSession(c) - if err != nil { - meterLog.Error("无法从Excel文件中导入抄表档案,无法获取当前用户会话", zap.Error(err)) - return result.Unauthorized(err.Error()) - } - if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass { return err } uploadFile, err := c.FormFile("data") diff --git a/controller/park.go b/controller/park.go index 3bb0efe..861ba19 100644 --- a/controller/park.go +++ b/controller/park.go @@ -112,7 +112,7 @@ func modifySpecificPark(c *fiber.Ctx) error { parkLog.Error("修改指定园区的信息,无法获取当前用户的会话。") return result.Unauthorized(err.Error()) } - if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, parkLog, c, &result); !pass { return err } parkForm := new(vo.ParkInformationForm) @@ -146,7 +146,7 @@ func modifyParkEnabling(c *fiber.Ctx) error { parkLog.Error("修改指定园区的可用性,无法获取当前用户的会话。") return result.Unauthorized(err.Error()) } - if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, parkLog, c, &result); !pass { return err } stateForm := new(vo.StateForm) @@ -175,7 +175,7 @@ func deleteSpecificPark(c *fiber.Ctx) error { parkLog.Error("删除指定的园区,无法获取当前用户的会话。") return result.Unauthorized(err.Error()) } - if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, parkLog, c, &result); !pass { return err } ok, err := repository.ParkRepository.DeletePark(parkId) @@ -225,7 +225,7 @@ func createBuildingInPark(c *fiber.Ctx) error { parkLog.Error("在指定园区中创建一个新的建筑,无法获取当前用户的会话。") return result.Unauthorized(err.Error()) } - if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, parkLog, c, &result); !pass { return err } buildingForm := new(vo.ParkBuildingInformationForm) @@ -255,7 +255,7 @@ func modifySpecificBuildingInPark(c *fiber.Ctx) error { parkLog.Error("修改指定园区中的指定建筑的信息,无法获取当前用户的会话。") return result.Unauthorized(err.Error()) } - if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, parkLog, c, &result); !pass { return err } buildingForm := new(vo.ParkBuildingInformationForm) @@ -285,7 +285,7 @@ func modifyParkBuildingEnabling(c *fiber.Ctx) error { parkLog.Error("修改指定园区中指定建筑的可用性,无法获取当前用户的会话。") return result.Unauthorized(err.Error()) } - if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, parkLog, c, &result); !pass { return err } stateForm := new(vo.StateForm) @@ -315,7 +315,7 @@ func deletedParkBuilding(c *fiber.Ctx) error { parkLog.Error("删除指定园区中的指定建筑,无法获取当前用户的会话。") return result.Unauthorized(err.Error()) } - if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass { + if pass, err := checkParkBelongs(parkId, parkLog, c, &result); !pass { return err } ok, err := repository.ParkRepository.DeleteParkBuilding(buildingId, parkId)