简单实现二级分销

这里用gin框架简单实现了一下二级分销

连接数据库

//全局变量
var (
    Db *gorm.DB
)
func init() {
    var err error
    dsn := "root:123456@(127.0.0.1:3306)/2201a?charset=utf8mb4&parseTime=True&loc=Local"
    Db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
       log.Println("数据库连接失败")
    }
    log.Println("数据库连接成功")
}

二级分销代码

// CalculateCommission 计算佣金
func CalculateCommission(c *gin.Context) {
    uid := c.PostForm("user_id")
    userId, _ := strconv.Atoi(uid)
    Amount := c.PostForm("amount")
    amount, _ := strconv.ParseFloat(Amount, 32)

    //查询所有用户信息
    var users []User
    tx := Db.Model(&User{}).Find(&users)
    if tx.RowsAffected < 1 {
       c.JSON(http.StatusBadRequest, gin.H{
          "code":    -1,
          "message": "用户信息错误",
          "data":    nil,
       })
       return
    }

    //获取当前用户信息
    var user User
    for _, u := range users {
       if int64(u.ID) == int64(userId) {
          user = u
          break
       }
    }

    //计算一级分销员的佣金
    if user.ParentIdF > 0 {
       for _, u := range users {
          if int64(u.ID) == int64(user.ParentIdF) {
             //假设一级分销员的佣金比例为10%
             u.Commission += float32(amount * 0.1)
             Db.Model(&User{}).Where("id = ?", u.ID).Update("commission", u.Commission)
             break
          }
       }
    }

    //计算二级分销员的佣金
    if user.ParentIdS > 0 {
       for _, u := range users {
          if int64(u.ID) == int64(user.ParentIdS) {
             //假设二级分销员的佣金比例为5%
             u.Commission += float32(amount * 0.05)
             fmt.Println(u.Commission)
             Db.Model(&User{}).Where("id = ?", u.ID).Update("commission", u.Commission)
             break
          }
       }
    }

    c.JSON(http.StatusOK, gin.H{
       "code":    0,
       "message": "success",
       "data":    nil,
    })

}

完整代码

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
    "log"
    "net/http"
    "strconv"
)

var (
    Db *gorm.DB
)

type User struct {
    gorm.Model
    Mobile     string  `json:"mobile"`
    NickName   string  `json:"nick_name"`
    Password   string  `json:"password"`
    Birthday   int32   `json:"birthday"`
    Gender     int32   `json:"gender"`
    Grade      int32   `json:"grade"`
    ParentIdF  int32   `json:"parent_id_f"` //一级分销员id
    ParentIdS  int32   `json:"parent_id_s"` //二级分销员id
    Commission float32 `json:"commission"`
}

func main() {
    r := gin.Default()
    r.POST("/calculate/commission", CalculateCommission)
    r.Run(":8089")
}

// 链接数据库
func init() {
    var err error
    dsn := "root:123456@(127.0.0.1:3306)/2201a?charset=utf8mb4&parseTime=True&loc=Local"
    Db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
       log.Println("数据库连接失败")
    }
    log.Println("数据库连接成功")
}

// CalculateCommission 计算佣金
func CalculateCommission(c *gin.Context) {
    uid := c.PostForm("user_id")
    userId, _ := strconv.Atoi(uid)
    Amount := c.PostForm("amount")
    amount, _ := strconv.ParseFloat(Amount, 32)

    //查询所有用户信息
    var users []User
    tx := Db.Model(&User{}).Find(&users)
    if tx.RowsAffected < 1 {
       c.JSON(http.StatusBadRequest, gin.H{
          "code":    -1,
          "message": "用户信息错误",
          "data":    nil,
       })
       return
    }

    //获取当前用户信息
    var user User
    for _, u := range users {
       if int64(u.ID) == int64(userId) {
          user = u
          break
       }
    }

    //计算一级分销员的佣金
    if user.ParentIdF > 0 {
       for _, u := range users {
          if int64(u.ID) == int64(user.ParentIdF) {
             //假设一级分销员的佣金比例为10%
             u.Commission += float32(amount * 0.1)
             Db.Model(&User{}).Where("id = ?", u.ID).Update("commission", u.Commission)
             break
          }
       }
    }

    //计算二级分销员的佣金
    if user.ParentIdS > 0 {
       for _, u := range users {
          if int64(u.ID) == int64(user.ParentIdS) {
             //假设二级分销员的佣金比例为5%
             u.Commission += float32(amount * 0.05)
             fmt.Println(u.Commission)
             Db.Model(&User{}).Where("id = ?", u.ID).Update("commission", u.Commission)
             break
          }
       }
    }

    c.JSON(http.StatusOK, gin.H{
       "code":    0,
       "message": "success",
       "data":    nil,
    })

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值