panghu 7 ヶ月 前
親
コミット
547f3893ab
9 ファイル変更、195 行追加、6 行削除
  1. 1 1
      api/base.go
  2. 21 0
      api/shop_order.go
  3. 1 0
      go.mod
  4. 2 0
      go.sum
  5. 59 0
      middleware/api.go
  6. 58 0
      model/x_members.gen.go
  7. 4 4
      request/api/shop_order.go
  8. 1 1
      router/api_shop_order.go
  9. 48 0
      server/redisServer.go

+ 1 - 1
api/base.go

@@ -29,6 +29,6 @@ func (b BaseController) responseError(c *gin.Context, code int, message string)
 	c.JSON(http.StatusOK, gin.H{
 		"code":    code,
 		"message": message,
-		"data":    nil,
+		"data":    []interface{}{},
 	})
 }

+ 21 - 0
api/shop_order.go

@@ -1,7 +1,9 @@
 package api
 
 import (
+	"fmt"
 	"github.com/gin-gonic/gin"
+	"github.com/shopspring/decimal"
 	"go_zh/pkg/validator"
 	"go_zh/request/api"
 )
@@ -11,6 +13,11 @@ type ShopOrderController struct {
 }
 
 func (shopOrder ShopOrderController) GetOrderSn(c *gin.Context) {
+	mId := c.GetInt("mId")
+	if mId == 0 {
+		shopOrder.responseError(c, 401, "缺少登陆信息")
+		return
+	}
 	//数据验证
 	var data api.CreateOrderRequest
 	msg, ok := validator.ValidatorData(c, &data)
@@ -18,4 +25,18 @@ func (shopOrder ShopOrderController) GetOrderSn(c *gin.Context) {
 		shopOrder.responseError(c, 400, msg)
 		return
 	}
+	//对金额进行精度处理
+	money, err := decimal.NewFromString(data.PayMoney)
+	if err != nil {
+		shopOrder.responseError(c, 400, "金额错误")
+		return
+	}
+	//对最小金额做判断
+	minMoney, _ := decimal.NewFromString("0.01")
+	if money.LessThan(minMoney) { //当 money小于minMoney时
+		shopOrder.responseError(c, 400, "金额不合法")
+		return
+	}
+	fmt.Println("money", money)
+	fmt.Println(data)
 }

+ 1 - 0
go.mod

@@ -36,6 +36,7 @@ require (
 	github.com/quic-go/quic-go v0.59.0 // indirect
 	github.com/redis/go-redis/v9 v9.17.3 // indirect
 	github.com/sagikazarmark/locafero v0.12.0 // indirect
+	github.com/shopspring/decimal v1.4.0 // indirect
 	github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
 	github.com/spf13/afero v1.15.0 // indirect
 	github.com/spf13/cast v1.10.0 // indirect

+ 2 - 0
go.sum

@@ -67,6 +67,8 @@ github.com/redis/go-redis/v9 v9.17.3 h1:fN29NdNrE17KttK5Ndf20buqfDZwGNgoUr9qjl1D
 github.com/redis/go-redis/v9 v9.17.3/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370=
 github.com/sagikazarmark/locafero v0.12.0 h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88eegjfxfHb4=
 github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9tLLBmM4eneO6WwsI=
+github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
+github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
 github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
 github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U=
 github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=

+ 59 - 0
middleware/api.go

@@ -0,0 +1,59 @@
+package middleware
+
+import (
+	"github.com/gin-gonic/gin"
+	"go_zh/model"
+	"net/http"
+)
+
+// 不需要token验证的路由白名单
+var whiteList = []string{
+	"/api/auth/login",
+}
+
+func ApiMiddleware() gin.HandlerFunc {
+	return func(c *gin.Context) {
+		// 检查当前路径是否在白名单中
+		if isPathInWhiteList(c.Request.URL.Path) {
+			c.Next()
+			return
+		}
+		// 从Header或Query中获取token
+		token := c.GetHeader("Authorization")
+		if token == "" {
+			token = c.Query("token")
+		}
+		if token == "" {
+			c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{
+				"code":    401,
+				"message": "缺少认证信息",
+				"data":    nil,
+			})
+			return
+		}
+		//根据token获取用户信息
+		memberModel := model.XMember{}
+		member, err := memberModel.GetMemberByToken(token)
+		if err != nil {
+			c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{
+				"code":    401,
+				"message": "认证信息已过期",
+				"data":    nil,
+			})
+		}
+
+		c.Set("mId", member.ID)
+		c.Next()
+	}
+}
+
+// isPathInWhiteList 检查路径是否在白名单中
+func isPathInWhiteList(path string) bool {
+	for _, whitePath := range whiteList {
+		// 精确匹配(用于匹配路径前缀)
+		if path == whitePath {
+			return true
+		}
+	}
+	return false
+}

+ 58 - 0
model/x_members.gen.go

@@ -0,0 +1,58 @@
+// Code generated by gorm.io/gen. DO NOT EDIT.
+// Code generated by gorm.io/gen. DO NOT EDIT.
+// Code generated by gorm.io/gen. DO NOT EDIT.
+
+package model
+
+import (
+	"go_zh/config"
+	"time"
+)
+
+const TableNameXMember = "x_members"
+
+// XMember mapped from table <x_members>
+type XMember struct {
+	ID           int     `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"`
+	Phone        string    `gorm:"column:phone;not null;comment:手机号码" json:"phone"`                 // 手机号码
+	Nickname     string    `gorm:"column:nickname;not null;default:振合网;comment:昵称" json:"nickname"` // 昵称
+	Password     string    `gorm:"column:password;not null;comment:登录密码" json:"password"`           // 登录密码
+	PayPass      string    `gorm:"column:pay_pass;not null;comment:支付密码" json:"pay_pass"`           // 支付密码
+	Encrypt      string    `gorm:"column:encrypt;not null;comment:加密字符串" json:"encrypt"`            // 加密字符串
+	Status       int     `gorm:"column:status;not null;comment:状态,0:关闭,1:开启" json:"status"`       // 状态,0:关闭,1:开启
+	CreatedAt    time.Time `gorm:"column:created_at" json:"created_at"`
+	UpdatedAt    time.Time `gorm:"column:updated_at" json:"updated_at"`
+	RecomID      int     `gorm:"column:recom_id;not null;comment:推荐人ID" json:"recom_id"`         // 推荐人ID
+	HeadImg      string    `gorm:"column:head_img;comment:头像" json:"head_img"`                     // 头像
+	InviteCode   string    `gorm:"column:invite_code;not null;comment:推荐码" json:"invite_code"`     // 推荐码
+	LevelID      int     `gorm:"column:level_id;not null;comment:等级ID" json:"level_id"`          // 等级ID
+	TokenStr     string    `gorm:"column:token_str;comment:token" json:"token_str"`                // token
+	ConsumeMoney float64   `gorm:"column:consume_money;comment:消费金" json:"consume_money"`          // 消费金
+	Money        float64   `gorm:"column:money;comment:余额" json:"money"`                           // 余额
+	BenefitMoney float64   `gorm:"column:benefit_money;comment:公益豆" json:"benefit_money"`          // 公益豆
+	ShareImg     string    `gorm:"column:share_img;comment:分享海报图片" json:"share_img"`               // 分享海报图片
+	Sex          int      `gorm:"column:sex;comment:性别" json:"sex"`                               // 性别
+	CodeImg      string    `gorm:"column:code_img;comment:推荐码" json:"code_img"`                    // 推荐码
+	Describe     string    `gorm:"column:describe;comment:描述" json:"describe"`                     // 描述
+	Sid          string    `gorm:"column:sid;comment:长链接登陆编号" json:"sid"`                          // 长链接登陆编号
+	OnLine       int      `gorm:"column:on_line;comment:长链接在线" json:"on_line"`                    // 长链接在线
+	Source       int      `gorm:"column:source;default:1;comment:来源 1微信 2支付宝 3浏览器" json:"source"` // 来源 1微信 2支付宝 3浏览器
+	IsDel        int      `gorm:"column:is_del;comment:是否删除 0否 1是" json:"is_del"`                 // 是否删除 0否 1是
+	MergeSource  string    `gorm:"column:merge_source;comment:账户合并了那些来源账户" json:"merge_source"`    // 账户合并了那些来源账户
+	BeanMoney    float64   `gorm:"column:bean_money;comment:振合豆" json:"bean_money"`                // 振合豆
+}
+
+// TableName XMember's table name
+func (*XMember) TableName() string {
+	return TableNameXMember
+}
+
+//根据token获取用户信息
+func (m *XMember) GetMemberByToken(token string) (*XMember, error)  {
+	member := &XMember{}
+	model := config.Mdb.Model(member).Where("token_str = ?",token)
+	if err := model.First(member).Error; err != nil {
+		return member,err
+	}
+	return member, nil
+}

+ 4 - 4
request/api/shop_order.go

@@ -1,8 +1,8 @@
 package api
 
 type CreateOrderRequest struct {
-	ShopId        int   `binding:"required,gt=0" form:"shop_id" json:"shop_id" label:"商家id"`
-	PayType       int   `binding:"required,gt=0,lt=3" form:"pay_type" json:"pay_type" label:"支付方式"`
-	PayMoney      int64 `binding:"required,gt=0" form:"pay_money" json:"pay_money" label:"支付金额"`
-	PayCodeSource int   `binding:"omitempty" form:"pay_code_source" json:"pay_code_source" label:"收款码来源"`
+	ShopId        int    `binding:"required,gt=0" form:"shop_id" json:"shop_id" label:"商家id"`
+	PayType       int    `binding:"required,gt=0,lt=3" form:"pay_type" json:"pay_type" label:"支付方式"`
+	PayMoney      string `binding:"required,gt=0" form:"pay_money" json:"pay_money" label:"支付金额"`
+	PayCodeSource int    `binding:"omitempty" form:"pay_code_source" json:"pay_code_source" label:"收款码来源"`
 }

+ 1 - 1
router/api_shop_order.go

@@ -7,7 +7,7 @@ import (
 
 func init() {
 	RegisterRoute(func(engine *gin.Engine) {
-		v1 := engine.Group("/v1")
+		v1 := engine.Group("/api")
 		// 商家订单路由组
 		shopOrderGroup := v1.Group("/shopOrder")
 		{

+ 48 - 0
server/redisServer.go

@@ -0,0 +1,48 @@
+package server
+
+import (
+	"context"
+	"github.com/redis/go-redis/v9"
+	"go_zh/config"
+	"time"
+)
+
+type RedisServer struct {
+	rdb *redis.Client
+}
+
+// 定义单例实例,但不在包级别初始化
+var redisServerInstance *RedisServer
+var ctx = context.Background()
+
+// 使用init函数初始化单例实例
+func init() {
+	redisServerInstance = &RedisServer{
+		rdb: config.Rdb,
+	}
+}
+
+// 获取单例实例的方法
+func GetRedisServerInstance() *RedisServer {
+	return redisServerInstance
+}
+
+func (r *RedisServer) SetStr(key string, val string, timeout int) bool {
+	err := r.rdb.Set(ctx, key, val, time.Duration(timeout)*time.Second).Err()
+	if err != nil {
+		return false
+	}
+	return true
+}
+
+func (r *RedisServer) GetStr(key string) string {
+	if key == "" {
+		return ""
+	}
+	ctx := context.Background()
+	val, err := r.rdb.Get(ctx, key).Result()
+	if err != nil {
+		return ""
+	}
+	return val
+}