api_util.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package utils
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "gorm.io/gorm"
  5. "sfis/db"
  6. "sfis/lock"
  7. "sfis/model"
  8. "sfis/model/response"
  9. )
  10. func Check(appID string, productID int, context *gin.Context, getData func() []interface{}) {
  11. if userLock := lock.GetUserLock(appID); userLock != nil {
  12. /**
  13. 第二步:用户接口产品校验-加锁处理
  14. */
  15. //2.1 取用户接口状态校验
  16. //userLock.Lock()
  17. userProduct := &model.UserProduct{}
  18. db.GetSFISDB().First(userProduct, &model.UserProduct{AppID: appID, ProductID: productID})
  19. //userLock.Unlock()
  20. if userProduct.InterfaceStatus != 0 {
  21. response.FailWithDetailed(response.InterfaceDeleted, nil, "该用户接口暂不提供服务", context)
  22. return
  23. }
  24. //2.2 取用户 产品余量|钱包账户余额 校验
  25. costModel := userProduct.CostModel
  26. product := GetProductByID(productID)
  27. productType := product.ProductType
  28. userLock.Lock()
  29. db.GetSFISDB().First(userProduct, &model.UserProduct{AppID: appID, ProductID: productID})
  30. switch costModel {
  31. case 0:
  32. //按剩余量扣费
  33. if productType == 0 {
  34. //按次扣费-每调一次 剩余量-1
  35. if userProduct.LeftNum == 0 {
  36. response.FailWithDetailed(response.LeftNumEmpty, nil, "余额不足", context)
  37. return
  38. }
  39. db.GetSFISDB().Transaction(func(tx *gorm.DB) error {
  40. //扣费
  41. tx.Exec("update user_product set left_num = IF(`left_num`<1, 0, `left_num`-1) WHERE `app_id` = ? and product_id=?", appID, productID)
  42. //生调用记录
  43. //生订单
  44. //存历史数据
  45. return nil
  46. })
  47. } else if productType == 1 {
  48. //按条扣费-每调一次剩余量-len(getDataList)
  49. }
  50. case 1:
  51. //按账户钱包余额扣费
  52. if productType == 0 {
  53. //按次扣费-每调一次
  54. //todo 账户余额表user_account的余额 减去 product单价*1
  55. } else if productType == 1 {
  56. //按条扣费-每调一次
  57. //todo 账户余额表user_account的余额 减去 product单价*len(getDataList)
  58. }
  59. case 2:
  60. //优先扣剩余量,剩余量为0,扣钱包余额
  61. }
  62. }
  63. }