143 lines
5.4 KiB
Go
143 lines
5.4 KiB
Go
package controller
|
|
|
|
import (
|
|
"electricity_bill_calc/logger"
|
|
"electricity_bill_calc/repository"
|
|
"electricity_bill_calc/response"
|
|
"electricity_bill_calc/security"
|
|
"electricity_bill_calc/tools"
|
|
"electricity_bill_calc/types"
|
|
"electricity_bill_calc/vo"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/jinzhu/copier"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
var topUpLog = logger.Named("Controller", "TopUp")
|
|
|
|
func InitializeTopUpHandlers(router *fiber.App) {
|
|
router.Get("/topup/:pid", security.EnterpriseAuthorize, listTopUps)
|
|
router.Post("/topup/:pid", security.EnterpriseAuthorize, createTopUp)
|
|
router.Get("/topup/:pid/:code", security.EnterpriseAuthorize, getTopUp)
|
|
router.Delete("/topup/:pid/:code", security.EnterpriseAuthorize, deleteTopUp)
|
|
}
|
|
|
|
// 查询符合条件的商户充值记录
|
|
func listTopUps(c *fiber.Ctx) error {
|
|
result := response.NewResult(c)
|
|
park := tools.EmptyToNil(c.Params("pid"))
|
|
if park == nil {
|
|
topUpLog.Error("查询符合条件的商户充值记录,未指定要访问的园区")
|
|
return result.BadRequest("未指定要访问的园区")
|
|
}
|
|
if pass, err := checkParkBelongs(*park, topUpLog, c, &result); !pass {
|
|
return err
|
|
}
|
|
keyword := tools.EmptyToNil(c.Query("keyword"))
|
|
startDate, err := types.ParseDatep(c.Query("start_date"))
|
|
if err != nil {
|
|
topUpLog.Error("查询符合条件的商户充值记录,查询起始日期格式错误", zap.Error(err))
|
|
return result.BadRequest("查询起始日期格式错误")
|
|
}
|
|
endDate, err := types.ParseDatep(c.Query("end_date"))
|
|
if err != nil {
|
|
topUpLog.Error("查询符合条件的商户充值记录,查询结束日期格式错误", zap.Error(err))
|
|
return result.BadRequest("查询结束日期格式错误")
|
|
}
|
|
page := c.QueryInt("page", 1)
|
|
topUps, total, err := repository.TopUpRepository.ListTopUps(*park, startDate, endDate, keyword, uint(page))
|
|
if err != nil {
|
|
topUpLog.Error("查询符合条件的商户充值记录,查询失败", zap.Error(err))
|
|
return result.Error(fiber.StatusInternalServerError, "商户充值记录查询不成功")
|
|
}
|
|
topUpLog.Debug("检查获取到的数据", zap.Any("topUps", topUps), zap.Int64("total", total))
|
|
topUpDetails := make([]*vo.TopUpDetailQueryResponse, 0)
|
|
copier.Copy(&topUpDetails, &topUps)
|
|
topUpLog.Debug("检查转换后的数据", zap.Any("topUpDetails", topUpDetails))
|
|
return result.Success(
|
|
"已经获取到符合条件的商户充值记录",
|
|
response.NewPagedResponse(page, total).ToMap(),
|
|
fiber.Map{"topUps": topUpDetails},
|
|
)
|
|
}
|
|
|
|
// 获取指定充值记录的详细内容
|
|
func getTopUp(c *fiber.Ctx) error {
|
|
result := response.NewResult(c)
|
|
park := tools.EmptyToNil(c.Params("pid"))
|
|
if park == nil {
|
|
topUpLog.Error("获取指定充值记录的详细内容,未指定要访问的园区")
|
|
return result.BadRequest("未指定要访问的园区")
|
|
}
|
|
if pass, err := checkParkBelongs(*park, topUpLog, c, &result); !pass {
|
|
return err
|
|
}
|
|
topUpCode := tools.EmptyToNil(c.Params("code"))
|
|
if topUpCode == nil {
|
|
topUpLog.Error("获取指定充值记录的详细内容,未指定要查询的充值记录")
|
|
return result.BadRequest("未指定要查询的充值记录")
|
|
}
|
|
topUp, err := repository.TopUpRepository.GetTopUp(*park, *topUpCode)
|
|
if err != nil {
|
|
topUpLog.Error("获取指定充值记录的详细内容,查询失败", zap.Error(err))
|
|
return result.NotFound("未找到指定的商户充值记录")
|
|
}
|
|
var topUpDetail vo.TopUpDetailQueryResponse
|
|
copier.Copy(&topUpDetail, &topUp)
|
|
return result.Success(
|
|
"已经获取到指定充值记录的详细内容",
|
|
fiber.Map{"topup": topUpDetail},
|
|
)
|
|
}
|
|
|
|
// 创建一条新的商户充值记录
|
|
func createTopUp(c *fiber.Ctx) error {
|
|
result := response.NewResult(c)
|
|
park := tools.EmptyToNil(c.Params("pid"))
|
|
if park == nil {
|
|
topUpLog.Error("创建一条新的商户充值记录,未指定要访问的园区")
|
|
return result.BadRequest("未指定要访问的园区")
|
|
}
|
|
if pass, err := checkParkBelongs(*park, topUpLog, c, &result); !pass {
|
|
return err
|
|
}
|
|
var form vo.TopUpCreationForm
|
|
if err := c.BodyParser(&form); err != nil {
|
|
topUpLog.Error("创建一条新的商户充值记录,请求体解析失败", zap.Error(err))
|
|
return result.BadRequest("请求体解析失败")
|
|
}
|
|
if err := repository.TopUpRepository.CreateTopUp(*park, &form); err != nil {
|
|
topUpLog.Error("创建一条新的商户充值记录,创建失败", zap.Error(err))
|
|
return result.NotAccept("商户充值记录创建不成功")
|
|
}
|
|
return result.Created(
|
|
"已经创建一条新的商户充值记录",
|
|
)
|
|
}
|
|
|
|
// 删除一条指定的商户充值记录
|
|
func deleteTopUp(c *fiber.Ctx) error {
|
|
result := response.NewResult(c)
|
|
park := tools.EmptyToNil(c.Params("pid"))
|
|
if park == nil {
|
|
topUpLog.Error("删除一条指定的商户充值记录,未指定要访问的园区")
|
|
return result.BadRequest("未指定要访问的园区")
|
|
}
|
|
if pass, err := checkParkBelongs(*park, topUpLog, c, &result); !pass {
|
|
return err
|
|
}
|
|
topUpCode := tools.EmptyToNil(c.Params("code"))
|
|
if topUpCode == nil {
|
|
topUpLog.Error("删除一条指定的商户充值记录,未指定要删除的充值记录")
|
|
return result.BadRequest("未指定要删除的充值记录")
|
|
}
|
|
if err := repository.TopUpRepository.DeleteTopUp(*park, *topUpCode); err != nil {
|
|
topUpLog.Error("删除一条指定的商户充值记录,删除失败", zap.Error(err))
|
|
return result.NotAccept("商户充值记录删除不成功")
|
|
}
|
|
return result.Deleted(
|
|
"已经删除一条指定的商户充值记录",
|
|
)
|
|
}
|