483 lines
12 KiB
Go
483 lines
12 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/model"
|
||
"hepa-calc-api/api/requests"
|
||
"hepa-calc-api/api/responses"
|
||
"hepa-calc-api/api/service"
|
||
"hepa-calc-api/global"
|
||
"hepa-calc-api/utils"
|
||
"math"
|
||
"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 == nil {
|
||
responses.FailWithMessage("订单金额错误", c)
|
||
return
|
||
}
|
||
|
||
if *req.OrderPrice < 0 {
|
||
responses.FailWithMessage("价格错误", c)
|
||
return
|
||
}
|
||
|
||
// 开始事务
|
||
tx := global.Db.Begin()
|
||
defer func() {
|
||
if r := recover(); r != nil {
|
||
tx.Rollback()
|
||
utils.LogJsonErr("订单创建失败1", r)
|
||
responses.FailWithMessage("订单创建失败2", c)
|
||
return
|
||
}
|
||
}()
|
||
|
||
// 创建会员订单
|
||
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()
|
||
|
||
// 处理返回值
|
||
g := &dto.AddOrderMemberDto{}
|
||
g.OrderId = fmt.Sprintf("%d", orderMember.OrderId)
|
||
g.OrderNo = orderMember.OrderNo
|
||
responses.OkWithData(g, 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)
|
||
}
|
||
|
||
// DeleteOrderMember 删除会员订单支付数据
|
||
func (b *OrderMember) DeleteOrderMember(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
|
||
}
|
||
|
||
// 检测订单状态
|
||
if orderMember.OrderStatus != 2 {
|
||
responses.FailWithMessage("订单不允许删除", c)
|
||
return
|
||
}
|
||
|
||
// 检测订单删除状态
|
||
if orderMember.IsDelete == 1 {
|
||
responses.Ok(c)
|
||
return
|
||
}
|
||
|
||
// 开始事务
|
||
tx := global.Db.Begin()
|
||
defer func() {
|
||
if r := recover(); r != nil {
|
||
tx.Rollback()
|
||
utils.LogJsonErr("操作失败", r)
|
||
responses.FailWithMessage("操作失败", c)
|
||
return
|
||
}
|
||
}()
|
||
|
||
orderMemberData := make(map[string]interface{})
|
||
orderMemberData["is_delete"] = 1
|
||
orderMemberData["updated_at"] = time.Now().Format("2006-01-02 15:04:05")
|
||
err = orderMemberDao.EditOrderMemberById(tx, orderId, orderMemberData)
|
||
if err != nil {
|
||
tx.Rollback()
|
||
responses.FailWithMessage("删除失败", c)
|
||
return
|
||
}
|
||
|
||
tx.Commit()
|
||
responses.Ok(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)
|
||
}
|
||
|
||
// GetOrderMemberRecentList 获取会员订单列表-最近下单
|
||
func (b *OrderMember) GetOrderMemberRecentList(c *gin.Context) {
|
||
// 获取数据
|
||
orderMemberDao := dao.OrderMemberDao{}
|
||
|
||
maps := make(map[string]interface{})
|
||
maps["order_status"] = 2
|
||
maps["is_delete"] = 0
|
||
maps["pay_status"] = 2
|
||
orderMembers, err := orderMemberDao.GetOrderMemberPreloadOrderLimitList(maps, "created_at desc", 20)
|
||
if err != nil {
|
||
responses.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
|
||
// 增加虚假数据
|
||
createdAt := []model.LocalTime{
|
||
model.LocalTime(time.Now()),
|
||
model.LocalTime(time.Now().Add(-10 * time.Hour)),
|
||
model.LocalTime(time.Now().Add(-20 * time.Hour)),
|
||
model.LocalTime(time.Now().Add(-30 * time.Hour)),
|
||
model.LocalTime(time.Now().Add(-40 * time.Hour)),
|
||
model.LocalTime(time.Now().Add(-50 * time.Hour)),
|
||
model.LocalTime(time.Now().Add(-70 * time.Hour)),
|
||
model.LocalTime(time.Now().Add(-90 * time.Hour)),
|
||
model.LocalTime(time.Now().Add(-100 * time.Hour)),
|
||
model.LocalTime(time.Now().Add(-105 * time.Hour)),
|
||
model.LocalTime(time.Now().Add(-110 * time.Hour)),
|
||
model.LocalTime(time.Now().Add(-115 * time.Hour)),
|
||
model.LocalTime(time.Now().Add(-120 * time.Hour)),
|
||
model.LocalTime(time.Now().Add(-125 * time.Hour)),
|
||
model.LocalTime(time.Now().Add(-130 * time.Hour)),
|
||
model.LocalTime(time.Now().Add(-135 * time.Hour)),
|
||
}
|
||
|
||
userName := []string{
|
||
"邹**",
|
||
"王**",
|
||
"刘**",
|
||
"吴*",
|
||
"欧*",
|
||
"国**",
|
||
"图**",
|
||
"赵**",
|
||
"刘*",
|
||
"陈**",
|
||
"郝*",
|
||
"杨*",
|
||
"魏*",
|
||
"周*",
|
||
"宋**",
|
||
"马**",
|
||
}
|
||
|
||
avatar := []string{
|
||
"/user/avatar/999999.jpeg",
|
||
"/user/avatar/888888.jpeg",
|
||
"/user/avatar/7777777.jpeg",
|
||
"/user/avatar/666666.jpeg",
|
||
"/user/avatar/555555.jpeg",
|
||
"/user/avatar/444444.jpeg",
|
||
"/user/avatar/161616.jpeg",
|
||
"/user/avatar/151515.jpeg",
|
||
"/user/avatar/151515.jpeg",
|
||
"/user/avatar/141414.jpeg",
|
||
"/user/avatar/12121212.jpeg",
|
||
"/user/avatar/131313.jpeg",
|
||
"/user/avatar/111111.jpeg",
|
||
"/user/avatar/100000.jpeg",
|
||
"/user/avatar/444444.jpeg",
|
||
"/user/avatar/151515.jpeg",
|
||
}
|
||
|
||
// 处理返回值
|
||
g := make([]*dto.OrderMemberRecentDto, 15)
|
||
|
||
systemMemberDao := dao.SystemMemberDao{}
|
||
maps = make(map[string]interface{})
|
||
systemMembers, err := systemMemberDao.GetSystemMemberList(maps)
|
||
if err != nil {
|
||
responses.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
|
||
userDao := dao.UserDao{}
|
||
for i := 0; i < 15; i++ {
|
||
if len(orderMembers) > i {
|
||
response := &dto.OrderMemberRecentDto{
|
||
OrderId: fmt.Sprintf("%d", orderMembers[i].OrderId),
|
||
UserId: fmt.Sprintf("%d", orderMembers[i].UserId),
|
||
SystemMemberId: fmt.Sprintf("%d", orderMembers[i].SystemMemberId),
|
||
CreatedAt: orderMembers[i].CreatedAt,
|
||
}
|
||
|
||
// 获取用户数据
|
||
maps = make(map[string]interface{})
|
||
maps["user_id"] = orderMembers[i].UserId
|
||
user, err := userDao.GetUser(maps)
|
||
if err != nil {
|
||
responses.FailWithMessage(err.Error(), c)
|
||
return
|
||
}
|
||
response.UserName = utils.MaskNameStr(user.UserName, 2)
|
||
response.UserAvatar = utils.AddOssDomain(user.Avatar)
|
||
|
||
response.MemberDays = orderMembers[i].SystemMember.MemberDays
|
||
|
||
// 处理时间
|
||
createdAt := time.Time(orderMembers[i].CreatedAt)
|
||
response.TimeDesc = utils.TimeToAgoString(createdAt)
|
||
|
||
g[i] = response
|
||
} else {
|
||
response := &dto.OrderMemberRecentDto{
|
||
OrderId: fmt.Sprintf("%d", i),
|
||
UserId: fmt.Sprintf("%d", i),
|
||
SystemMemberId: fmt.Sprintf("%d", 1),
|
||
CreatedAt: createdAt[i],
|
||
}
|
||
|
||
response.UserName = utils.MaskNameStr(userName[i], 2)
|
||
response.UserAvatar = utils.AddOssDomain(avatar[i])
|
||
|
||
if i == 0 {
|
||
response.MemberDays = systemMembers[0].MemberDays
|
||
} else {
|
||
response.MemberDays = systemMembers[int(math.Floor(float64(i)/4))].MemberDays
|
||
}
|
||
|
||
// 处理时间
|
||
createdAt := time.Time(createdAt[i])
|
||
response.TimeDesc = utils.TimeToAgoString(createdAt)
|
||
|
||
g[i] = response
|
||
}
|
||
}
|
||
|
||
responses.OkWithData(g, c)
|
||
}
|