feat(topup):基本完成商户充值部分接口,待测。
This commit is contained in:
parent
234e811324
commit
2b5272dad9
140
controller/top_up.go
Normal file
140
controller/top_up.go
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
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, "商户充值记录查询不成功")
|
||||||
|
}
|
||||||
|
var topUpDetails []*vo.TopUpDetailQueryResponse
|
||||||
|
copier.Copy(&topUpDetails, &topUps)
|
||||||
|
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(
|
||||||
|
"已经删除一条指定的商户充值记录",
|
||||||
|
)
|
||||||
|
}
|
|
@ -20,3 +20,14 @@ type TopUp struct {
|
||||||
SynchronizedAt *types.DateTime `json:"synchronizedAt" db:"synchronized_at"`
|
SynchronizedAt *types.DateTime `json:"synchronizedAt" db:"synchronized_at"`
|
||||||
CancelledAt *types.DateTime `json:"cancelledAt" db:"cancelled_at"`
|
CancelledAt *types.DateTime `json:"cancelledAt" db:"cancelled_at"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t TopUp) SyncStatus() int16 {
|
||||||
|
switch {
|
||||||
|
case t.SuccessfulSynchronized && t.SynchronizedAt != nil:
|
||||||
|
return 1
|
||||||
|
case !t.SuccessfulSynchronized && t.SynchronizedAt != nil:
|
||||||
|
return 2
|
||||||
|
default:
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -50,6 +50,7 @@ func App() *fiber.App {
|
||||||
controller.InitializeParkHandlers(app)
|
controller.InitializeParkHandlers(app)
|
||||||
controller.InitializeMeterHandlers(app)
|
controller.InitializeMeterHandlers(app)
|
||||||
controller.InitializeInvoiceHandler(app)
|
controller.InitializeInvoiceHandler(app)
|
||||||
|
controller.InitializeTopUpHandlers(app)
|
||||||
|
|
||||||
return app
|
return app
|
||||||
}
|
}
|
||||||
|
|
12
vo/top_up.go
12
vo/top_up.go
|
@ -7,3 +7,15 @@ type TopUpCreationForm struct {
|
||||||
Meter string `json:"meter"`
|
Meter string `json:"meter"`
|
||||||
Amount decimal.Decimal `json:"amount"`
|
Amount decimal.Decimal `json:"amount"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TopUpDetailQueryResponse struct {
|
||||||
|
Id string `json:"id" copier:"topUpCode"`
|
||||||
|
Tenement string `json:"tenement"`
|
||||||
|
TenementName string `json:"tenementName"`
|
||||||
|
Meter string `json:"meter"`
|
||||||
|
MeterAddress string `json:"meterAddress"`
|
||||||
|
ToppedUpAt string `json:"toppedUpAt"`
|
||||||
|
Amount decimal.Decimal `json:"amount"`
|
||||||
|
PaymentType int16 `json:"paymentType"`
|
||||||
|
SyncStatus int16 `json:"syncStatus" copier:"SyncStatus"`
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user