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"`
|
||||
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.InitializeMeterHandlers(app)
|
||||
controller.InitializeInvoiceHandler(app)
|
||||
controller.InitializeTopUpHandlers(app)
|
||||
|
||||
return app
|
||||
}
|
||||
|
|
12
vo/top_up.go
12
vo/top_up.go
|
@ -7,3 +7,15 @@ type TopUpCreationForm struct {
|
|||
Meter string `json:"meter"`
|
||||
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