103 lines
3.4 KiB
Go
103 lines
3.4 KiB
Go
package controller
|
|
|
|
import (
|
|
"electricity_bill_calc/logger"
|
|
"electricity_bill_calc/model"
|
|
"electricity_bill_calc/repository"
|
|
"electricity_bill_calc/response"
|
|
"electricity_bill_calc/service"
|
|
"electricity_bill_calc/types"
|
|
"net/http"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
var chargeLog = logger.Named("Handler", "Charge")
|
|
|
|
func InitializeChargeHandlers(router *fiber.App) {
|
|
router.Get("/charge", searchCharges)
|
|
router.Post("/charge", createNewUserChargeRecord)
|
|
router.Put("/charge/:uid/:seq", modifyUserChargeState)
|
|
}
|
|
|
|
// 检索用户的充值记录列表
|
|
func searchCharges(c *fiber.Ctx) error {
|
|
chargeLog.Info("检索用户的充值记录列表。")
|
|
result := response.NewResult(c)
|
|
keyword := c.Query("keyword", "")
|
|
page := c.QueryInt("page", 1)
|
|
beginTime, err := types.ParseDate(c.Query("begin"))
|
|
if err != nil {
|
|
chargeLog.Error("无法解析查询起始时间。", zap.Error(err))
|
|
return result.Error(http.StatusInternalServerError, err.Error())
|
|
}
|
|
endTime, err := types.ParseDate(c.Query("end"))
|
|
if err != nil {
|
|
chargeLog.Error("无法解析查询结束时间。", zap.Error(err))
|
|
return result.Error(http.StatusInternalServerError, err.Error())
|
|
}
|
|
charges, total, err := repository.ChargeRepository.FindCharges(uint(page), &beginTime.Time, &endTime.Time, &keyword)
|
|
if err != nil {
|
|
chargeLog.Error("检索用户的充值记录列表失败。", zap.Error(err))
|
|
return result.Error(http.StatusInternalServerError, err.Error())
|
|
}
|
|
return result.Success(
|
|
"已经获取到符合条件的计费记录。",
|
|
response.NewPagedResponse(page, total).ToMap(),
|
|
fiber.Map{"records": charges},
|
|
)
|
|
}
|
|
|
|
// 创建一条新的用户充值记录
|
|
func createNewUserChargeRecord(c *fiber.Ctx) error {
|
|
chargeLog.Info("创建一条新的用户充值记录。")
|
|
result := response.NewResult(c)
|
|
createionForm := new(model.ChargeRecordCreationForm)
|
|
if err := c.BodyParser(createionForm); err != nil {
|
|
chargeLog.Error("无法解析创建充值记录的请求数据。", zap.Error(err))
|
|
return result.Error(http.StatusBadRequest, err.Error())
|
|
}
|
|
ok, err := service.ChargeService.RecordUserCharge(
|
|
createionForm.UserId,
|
|
createionForm.Fee,
|
|
createionForm.Discount,
|
|
createionForm.Amount,
|
|
createionForm.ChargeTo,
|
|
true,
|
|
)
|
|
if err != nil {
|
|
chargeLog.Error("创建用户充值记录失败。", zap.Error(err))
|
|
return result.Error(http.StatusInternalServerError, err.Error())
|
|
}
|
|
if !ok {
|
|
chargeLog.Error("创建用户充值记录失败。")
|
|
return result.NotAccept("创建用户充值记录失败。")
|
|
} else {
|
|
return result.Success("创建用户充值记录成功, 指定用户的服务已延期。")
|
|
}
|
|
}
|
|
|
|
// 改变用户充值记录的状态
|
|
func modifyUserChargeState(c *fiber.Ctx) error {
|
|
chargeLog.Info("改变用户充值记录的状态。")
|
|
result := response.NewResult(c)
|
|
uid := c.Params("uid")
|
|
seq, err := c.ParamsInt("seq")
|
|
if err != nil {
|
|
chargeLog.Error("无法解析请求参数。", zap.Error(err))
|
|
return result.Error(http.StatusBadRequest, err.Error())
|
|
}
|
|
ok, err := service.ChargeService.CancelUserCharge(uid, int64(seq))
|
|
if err != nil {
|
|
chargeLog.Error("取消用户充值记录失败。", zap.Error(err))
|
|
return result.Error(http.StatusInternalServerError, err.Error())
|
|
}
|
|
if !ok {
|
|
chargeLog.Error("取消用户充值记录失败。")
|
|
return result.NotAccept("取消用户充值记录失败。")
|
|
} else {
|
|
return result.Success("取消用户充值记录成功。")
|
|
}
|
|
}
|