267 lines
6.0 KiB
Go
267 lines
6.0 KiB
Go
package controller
|
||
|
||
import (
|
||
"fmt"
|
||
"github.com/gin-gonic/gin"
|
||
"hepa-calc-api/api/dao"
|
||
"hepa-calc-api/api/dto"
|
||
"hepa-calc-api/api/requests"
|
||
"hepa-calc-api/api/responses"
|
||
"hepa-calc-api/api/service"
|
||
"hepa-calc-api/global"
|
||
"hepa-calc-api/utils"
|
||
"strconv"
|
||
"time"
|
||
)
|
||
|
||
type OrderMember struct{}
|
||
|
||
// GetOrderMemberPage 获取会员订单列表-分页
|
||
func (b *OrderMember) GetOrderMemberPage(c *gin.Context) {
|
||
orderMemberRequest := requests.OrderMemberRequest{}
|
||
req := orderMemberRequest.GetOrderMemberPage
|
||
if err := c.ShouldBind(&req); err != nil {
|
||
responses.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
|
||
// 参数验证
|
||
if err := global.Validate.Struct(req); err != nil {
|
||
responses.FailWithMessage(utils.Translate(err), c)
|
||
return
|
||
}
|
||
|
||
if req.Page == 0 {
|
||
req.Page = 1
|
||
}
|
||
|
||
if req.PageSize == 0 {
|
||
req.PageSize = 20
|
||
}
|
||
|
||
userId := c.GetInt64("UserId")
|
||
req.UserId = userId
|
||
|
||
// 获取数据
|
||
orderMemberDao := dao.OrderMemberDao{}
|
||
orderMember, total, err := orderMemberDao.GetOrderMemberPageSearch(req, req.Page, req.PageSize)
|
||
if err != nil {
|
||
responses.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
|
||
// 处理返回值
|
||
g := dto.GetOrderMemberListDto(orderMember)
|
||
|
||
result := make(map[string]interface{})
|
||
result["page"] = req.Page
|
||
result["page_size"] = req.PageSize
|
||
result["total"] = total
|
||
result["data"] = g
|
||
responses.OkWithData(result, c)
|
||
}
|
||
|
||
// AddOrderMember 创建会员订单
|
||
func (b *OrderMember) AddOrderMember(c *gin.Context) {
|
||
orderMemberRequest := requests.OrderMemberRequest{}
|
||
req := orderMemberRequest.AddOrderMember
|
||
if err := c.ShouldBind(&req); err != nil {
|
||
responses.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
|
||
// 参数验证
|
||
if err := global.Validate.Struct(req); err != nil {
|
||
responses.FailWithMessage(utils.Translate(err), c)
|
||
return
|
||
}
|
||
|
||
userId := c.GetInt64("UserId")
|
||
|
||
// 将 id 转换为 int64 类型
|
||
systemMemberId, err := strconv.ParseInt(req.SystemMemberId, 10, 64)
|
||
if err != nil {
|
||
responses.Fail(c)
|
||
return
|
||
}
|
||
|
||
// 用户优惠卷id
|
||
var userCouponId *int64
|
||
if req.UserCouponId != "" {
|
||
id, err := strconv.ParseInt(req.UserCouponId, 10, 64)
|
||
if err != nil {
|
||
responses.Fail(c)
|
||
return
|
||
}
|
||
|
||
userCouponId = &id
|
||
}
|
||
|
||
if req.OrderPrice < 0 {
|
||
responses.FailWithMessage("价格错误", c)
|
||
return
|
||
}
|
||
|
||
// 开始事务
|
||
tx := global.Db.Begin()
|
||
defer func() {
|
||
if r := recover(); r != nil {
|
||
tx.Rollback()
|
||
}
|
||
}()
|
||
|
||
// 创建会员订单
|
||
orderMemberService := service.OrderMemberService{}
|
||
orderMember, err := orderMemberService.AddOrderMember(tx, userId, systemMemberId, userCouponId, req.PayChannel, req.OrderPrice)
|
||
if err != nil {
|
||
tx.Rollback()
|
||
responses.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
|
||
tx.Commit()
|
||
|
||
// 处理返回值
|
||
orderId := fmt.Sprintf("%d", orderMember.OrderId)
|
||
|
||
responses.OkWithData(orderId, c)
|
||
}
|
||
|
||
// GetOrderMemberPay 获取会员订单支付数据
|
||
func (b *OrderMember) GetOrderMemberPay(c *gin.Context) {
|
||
orderMemberRequest := requests.OrderMemberRequest{}
|
||
req := orderMemberRequest.GetOrderMemberPay
|
||
if err := c.ShouldBind(&req); err != nil {
|
||
responses.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
|
||
// 参数验证
|
||
if err := global.Validate.Struct(req); err != nil {
|
||
responses.FailWithMessage(utils.Translate(err), c)
|
||
return
|
||
}
|
||
|
||
userId := c.GetInt64("UserId")
|
||
|
||
id := c.Param("order_id")
|
||
if id == "" {
|
||
responses.FailWithMessage("缺少参数", c)
|
||
return
|
||
}
|
||
|
||
// 将 id 转换为 int64 类型
|
||
orderId, err := strconv.ParseInt(id, 10, 64)
|
||
if err != nil {
|
||
responses.Fail(c)
|
||
return
|
||
}
|
||
|
||
// 获取订单数据
|
||
orderMemberDao := dao.OrderMemberDao{}
|
||
maps := make(map[string]interface{})
|
||
maps["user_id"] = userId
|
||
maps["order_id"] = orderId
|
||
orderMember, err := orderMemberDao.GetOrderMember(maps)
|
||
if err != nil {
|
||
responses.FailWithMessage("订单异常", c)
|
||
return
|
||
}
|
||
|
||
// 检测订单状态(1:待支付 2:已完成 3:已取消)
|
||
if orderMember.OrderStatus != 1 {
|
||
responses.FailWithMessage("订单状态异常", c)
|
||
return
|
||
}
|
||
|
||
// 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
|
||
if orderMember.PayStatus != 1 {
|
||
responses.FailWithMessage("订单支付状态异常", c)
|
||
return
|
||
}
|
||
|
||
// 验证订单过期支付时间
|
||
now := time.Now()
|
||
validTime := time.Time(orderMember.CreatedAt).Add(30 * time.Minute)
|
||
if validTime.Before(now) {
|
||
responses.FailWithMessage("订单已过期", c)
|
||
return
|
||
}
|
||
|
||
// 处理返回值
|
||
g := dto.GetOrderMemberPayDto(orderMember)
|
||
|
||
// 获取预支付交易会话标识
|
||
if req.ClientType == 1 {
|
||
orderMemberService := service.OrderMemberService{}
|
||
prepay, err := orderMemberService.GetJsapiPrepay(orderMember)
|
||
if err != nil {
|
||
responses.FailWithMessage("发起支付失败", c)
|
||
return
|
||
}
|
||
|
||
g.PrepayJsapi = prepay
|
||
} else {
|
||
orderMemberService := service.OrderMemberService{}
|
||
prepay, err := orderMemberService.GetAppPrepay(orderMember)
|
||
if err != nil {
|
||
responses.FailWithMessage("发起支付失败", c)
|
||
return
|
||
}
|
||
|
||
g.PrepayApp = prepay
|
||
}
|
||
|
||
responses.OkWithData(g, c)
|
||
}
|
||
|
||
// GetOrderMemberPayStatus 查询订单支付状态-会员
|
||
func (b *OrderMember) GetOrderMemberPayStatus(c *gin.Context) {
|
||
userId := c.GetInt64("UserId")
|
||
|
||
id := c.Param("order_id")
|
||
if id == "" {
|
||
responses.FailWithMessage("缺少参数", c)
|
||
return
|
||
}
|
||
|
||
// 将 id 转换为 int64 类型
|
||
orderId, err := strconv.ParseInt(id, 10, 64)
|
||
if err != nil {
|
||
responses.Fail(c)
|
||
return
|
||
}
|
||
|
||
// 获取订单数据
|
||
orderMemberDao := dao.OrderMemberDao{}
|
||
maps := make(map[string]interface{})
|
||
maps["user_id"] = userId
|
||
maps["order_id"] = orderId
|
||
orderMember, err := orderMemberDao.GetOrderMember(maps)
|
||
if err != nil {
|
||
responses.FailWithMessage("订单异常", c)
|
||
return
|
||
}
|
||
|
||
// 处理返回值
|
||
g := dto.GetOrderMemberPayStatus(orderMember)
|
||
|
||
// 处理有效期
|
||
if g.PayStatus == 2 {
|
||
// 获取用户数据
|
||
userDao := dao.UserDao{}
|
||
user, err := userDao.GetUserById(orderMember.UserId)
|
||
if err != nil {
|
||
responses.FailWithMessage("用户数据错误", c)
|
||
return
|
||
}
|
||
|
||
if user.MemberExpireDate != nil {
|
||
// 加载到期时间
|
||
g.LoadValidDate(user.MemberExpireDate)
|
||
}
|
||
}
|
||
|
||
responses.OkWithData(g, c)
|
||
}
|