XinYeYouKu/app/services/OrderService.go

102 lines
2.8 KiB
Go
Raw Normal View History

2024-06-13 14:30:06 +08:00
package services
import (
"qteam/app/constants/common"
"qteam/app/constants/errorcode"
"qteam/app/http/entities/front"
"qteam/app/models/ordermodel"
"qteam/app/models/productmodel"
"qteam/app/models/usersmodel"
"qteam/app/utils"
redis_util "qteam/app/utils/redis"
"qteam/config"
"strconv"
"time"
2024-06-13 14:50:26 +08:00
"xorm.io/builder"
2024-06-13 14:30:06 +08:00
)
func CreateOrderService(userId int, productId int) (code int) {
var err error
{ // redis保证用户当前抽奖结束才能开始下次抽奖
key := utils.GetRealKey("lottery_code:" + strconv.Itoa(userId) + strconv.Itoa(productId))
ok, err := redis_util.AcquireLock(key, time.Second*10)
if ok {
defer redis_util.Del(key)
} else {
if err != nil {
utils.Log(nil, "CreateOrderService", err.Error())
}
code = errorcode.OrderLottery
return code
}
}
session := ordermodel.GetInstance().GetDb().NewSession()
defer func() {
if err != nil {
_ = session.Rollback()
return
}
_ = session.Close()
}()
var product productmodel.Product
has, err := productmodel.GetInstance().GetDb().Where("id =?", productId).Get(&product)
if err != nil {
return errorcode.SystemError
}
if !has {
return errorcode.OrderProductNotExist
}
var user usersmodel.Users
_, err = usersmodel.GetInstance().GetDb().Where("id =?", userId).Get(&user)
if err != nil {
return errorcode.SystemError
}
order := ordermodel.Order{
OrderNo: utils.GenerateOrderNumber(),
UserId: userId,
ProductId: productId,
ProductName: product.Name,
UserName: user.Name,
Mobile: user.Phone,
ActivityId: config.GetConf().ActivityId,
VoucherId: product.ThirdProductId,
State: common.STATUSABLED,
CreateTime: time.Now(),
}
if _, err := session.Insert(order); err != nil {
utils.Log(nil, "CreateOrderService", err.Error())
return errorcode.SystemError
}
if err = session.Begin(); err != nil {
return errorcode.SystemError
}
return errorcode.Success
}
func OrderQueryService(userId int, OrderRequest *front.OrderQueryRequest) (code int, data []ordermodel.Order, count int64) {
activityId := config.GetConf().ActivityId
repo := ordermodel.GetInstance().GetDb()
count, err := repo.Where("user_id = ? and activity_id = ?", userId, activityId).
Desc("id").Limit(OrderRequest.PageSize, (OrderRequest.Page-1)*OrderRequest.PageSize).FindAndCount(&data)
code = handErr(err)
return
}
2024-06-13 14:50:26 +08:00
func OrderDetailService(order *ordermodel.Order) (has bool, err error) {
repo := ordermodel.GetInstance().GetDb()
conn := builder.NewCond()
if order.Id != 0 {
conn = conn.And(builder.Eq{"Id": order.Id})
}
if order.OrderNo != "" {
conn = conn.And(builder.Eq{"OrderNo": order.OrderNo})
}
return repo.Where(conn).Get(order)
}
func OrdersUpdateService(req front.OrdersUpdateRequest) (err error) {
repo := ordermodel.GetInstance().GetDb()
_, err = repo.Where("Id = ?", req.Id).Update(&ordermodel.Order{State: req.Status})
return
}