102 lines
2.8 KiB
Go
102 lines
2.8 KiB
Go
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"
|
|
"xorm.io/builder"
|
|
)
|
|
|
|
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
|
|
}
|
|
|
|
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
|
|
}
|