这里用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,
})
}