181 lines
7.0 KiB
Go
181 lines
7.0 KiB
Go
package controller
|
|
|
|
import (
|
|
"electricity_bill_calc/logger"
|
|
"electricity_bill_calc/repository"
|
|
"electricity_bill_calc/response"
|
|
"electricity_bill_calc/security"
|
|
"electricity_bill_calc/service"
|
|
"electricity_bill_calc/vo"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
var meterLog = logger.Named("Handler", "Meter")
|
|
|
|
func InitializeMeterHandlers(router *fiber.App) {
|
|
router.Get("/meter/:pid", security.EnterpriseAuthorize, searchMetersWithinPark)
|
|
router.Post("/meter/:pid", security.EnterpriseAuthorize, createNewMeterManually)
|
|
router.Get("/meter/:pid/template", security.EnterpriseAuthorize, downloadMeterArchiveTemplate)
|
|
router.Get("/meter/:pid/:code", security.EnterpriseAuthorize, retrieveSpecificMeterDetail)
|
|
router.Put("/meter/:pid/:code", security.EnterpriseAuthorize, updateMeterManually)
|
|
}
|
|
|
|
// 查询指定园区下的表计信息
|
|
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 ok, err := checkParkBelongs(meterLog, parkId, session, &result); !ok {
|
|
return err
|
|
}
|
|
keyword := c.Query("keyword")
|
|
page := c.QueryInt("page", 1)
|
|
meters, total, err := repository.MeterRepository.MetersIn(parkId, uint(page), &keyword)
|
|
if err != nil {
|
|
meterLog.Error("无法查询指定园区下的表计信息,无法获取表计列表", zap.Error(err))
|
|
return result.Error(http.StatusInternalServerError, err.Error())
|
|
}
|
|
return result.Success(
|
|
"已经取得符合条件的0.4kV表计列表。",
|
|
response.NewPagedResponse(page, total).ToMap(),
|
|
fiber.Map{"meters": meters},
|
|
)
|
|
}
|
|
|
|
// 查询指定园区中指定表计的详细信息
|
|
func retrieveSpecificMeterDetail(c *fiber.Ctx) error {
|
|
parkId := c.Params("pid")
|
|
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 ok, err := checkParkBelongs(meterLog, parkId, session, &result); !ok {
|
|
return err
|
|
}
|
|
meter, err := repository.MeterRepository.FetchMeterDetail(parkId, meterId)
|
|
if err != nil {
|
|
meterLog.Error("无法查询指定园区中指定表计的详细信息,无法获取表计信息", zap.Error(err))
|
|
return result.Error(http.StatusInternalServerError, err.Error())
|
|
}
|
|
if meter == nil {
|
|
meterLog.Warn("无法查询指定园区中指定表计的详细信息,表计不存在")
|
|
return result.NotFound("指定的表计不存在。")
|
|
}
|
|
return result.Success("指定表计信息已经找到。", fiber.Map{"meter": meter})
|
|
}
|
|
|
|
// 手动添加一条0.4kV表计记录
|
|
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 ok, err := checkParkBelongs(meterLog, parkId, session, &result); !ok {
|
|
return err
|
|
}
|
|
var creationForm vo.MeterCreationForm
|
|
if err := c.BodyParser(&creationForm); err != nil {
|
|
meterLog.Error("无法手动添加一条0.4kV表计记录,无法解析表计创建表单", zap.Error(err))
|
|
return result.NotAccept(err.Error())
|
|
}
|
|
if err := service.MeterService.CreateMeterRecord(parkId, &creationForm); err != nil {
|
|
meterLog.Error("无法手动添加一条0.4kV表计记录,无法创建表计记录", zap.Error(err))
|
|
return result.NotAccept(err.Error())
|
|
}
|
|
return result.Created("新0.4kV表计已经添加完成。")
|
|
}
|
|
|
|
// 手动更新一条新的0.4kV表计记录
|
|
func updateMeterManually(c *fiber.Ctx) error {
|
|
parkId := c.Params("pid")
|
|
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 ok, err := checkParkBelongs(meterLog, parkId, session, &result); !ok {
|
|
return err
|
|
}
|
|
var updateForm vo.MeterModificationForm
|
|
if err := c.BodyParser(&updateForm); err != nil {
|
|
meterLog.Error("无法手动更新一条新的0.4kV表计记录,无法解析表计更新表单", zap.Error(err))
|
|
return result.NotAccept(err.Error())
|
|
}
|
|
if err := service.MeterService.UpdateMeterRecord(parkId, meterId, &updateForm); err != nil {
|
|
meterLog.Error("无法手动更新一条新的0.4kV表计记录,无法更新表计记录", zap.Error(err))
|
|
return result.NotAccept(err.Error())
|
|
}
|
|
return result.Updated("0.4kV表计已经更新完成。")
|
|
}
|
|
|
|
// 下载指定的园区表计登记模板
|
|
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 ok, err := checkParkBelongs(meterLog, parkId, session, &result); !ok {
|
|
return err
|
|
}
|
|
parkDetail, err := repository.ParkRepository.RetrieveParkDetail(parkId)
|
|
if err != nil {
|
|
meterLog.Error("无法下载指定的园区表计登记模板,无法获取园区信息", zap.Error(err))
|
|
return result.NotFound(err.Error())
|
|
}
|
|
return c.Download(
|
|
"./assets/meter_04kv_template.xlsx",
|
|
fmt.Sprintf("%s_表计档案.xlsx", parkDetail.Name),
|
|
)
|
|
}
|
|
|
|
// 从Excel文件中导入表计档案
|
|
func uploadMeterArchive(c *fiber.Ctx) error {
|
|
return nil
|
|
}
|
|
|
|
// 更换系统中的表计
|
|
func replaceMeter(c *fiber.Ctx) error {
|
|
parkId := c.Params("pid")
|
|
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 ok, err := checkParkBelongs(meterLog, parkId, session, &result); !ok {
|
|
return err
|
|
}
|
|
var replacementForm vo.MeterReplacingForm
|
|
if err := c.BodyParser(&replacementForm); err != nil {
|
|
meterLog.Error("无法更换系统中的表计,无法解析表计更换表单", zap.Error(err))
|
|
return result.NotAccept(err.Error())
|
|
}
|
|
return nil
|
|
}
|