12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package utils
- import (
- "github.com/gin-gonic/gin"
- "gorm.io/gorm"
- "sfis/db"
- "sfis/lock"
- "sfis/model"
- "sfis/model/response"
- )
- func Check(appID string, productID int, context *gin.Context, getData func() []interface{}) {
- if userLock := lock.GetUserLock(appID); userLock != nil {
- /**
- 第二步:用户接口产品校验-加锁处理
- */
- //2.1 取用户接口状态校验
- //userLock.Lock()
- userProduct := &model.UserProduct{}
- db.GetSFISDB().First(userProduct, &model.UserProduct{AppID: appID, ProductID: productID})
- //userLock.Unlock()
- if userProduct.InterfaceStatus != 0 {
- response.FailWithDetailed(response.InterfaceDeleted, nil, "该用户接口暂不提供服务", context)
- return
- }
- //2.2 取用户 产品余量|钱包账户余额 校验
- costModel := userProduct.CostModel
- product := GetProductByID(productID)
- productType := product.ProductType
- userLock.Lock()
- db.GetSFISDB().First(userProduct, &model.UserProduct{AppID: appID, ProductID: productID})
- switch costModel {
- case 0:
- //按剩余量扣费
- if productType == 0 {
- //按次扣费-每调一次 剩余量-1
- if userProduct.LeftNum == 0 {
- response.FailWithDetailed(response.LeftNumEmpty, nil, "余额不足", context)
- return
- }
- db.GetSFISDB().Transaction(func(tx *gorm.DB) error {
- //扣费
- tx.Exec("update user_product set left_num = IF(`left_num`<1, 0, `left_num`-1) WHERE `app_id` = ? and product_id=?", appID, productID)
- //生调用记录
- //生订单
- //存历史数据
- return nil
- })
- } else if productType == 1 {
- //按条扣费-每调一次剩余量-len(getDataList)
- }
- case 1:
- //按账户钱包余额扣费
- if productType == 0 {
- //按次扣费-每调一次
- //todo 账户余额表user_account的余额 减去 product单价*1
- } else if productType == 1 {
- //按条扣费-每调一次
- //todo 账户余额表user_account的余额 减去 product单价*len(getDataList)
- }
- case 2:
- //优先扣剩余量,剩余量为0,扣钱包余额
- }
- }
- }
|