Kaynağa Gözat

api部分问题修改

May1145 1 yıl önce
ebeveyn
işleme
0c4f643ab0

+ 1 - 1
trading-go/controller/ordercontroller.go

@@ -111,7 +111,7 @@ func CreateOrder(c *gin.Context) {
 // @Router /order/delete/{id} [delete]
 func DeleteOrder(c *gin.Context) {
 	var order model.Order
-	ids := c.PostForm("id")
+	ids := c.Param("id")
 	id, err := strconv.Atoi(ids)
 	if err != nil {
 		response.Fail(c.Writer, err.Error(), 500)

+ 14 - 6
trading-go/controller/piccontrller.go

@@ -1,11 +1,12 @@
 package controller
 
 import (
+	"fmt"
 	"github.com/gin-gonic/gin"
 	"strconv"
-	"time"
 	"trading-go/model"
 	"trading-go/response"
+	"trading-go/util"
 )
 
 // Upload
@@ -24,24 +25,31 @@ func Upload(c *gin.Context) {
 		response.Fail(c.Writer, msg, 500)
 		return
 	}
-	file.Filename = time.Now().String() + file.Filename
-	path := "./pic/" + file.Filename
-	err = c.SaveUploadedFile(file, path)
+	path := util.MakePath(file.Filename)
+	fmt.Println(path)
 	if err != nil {
 		msg := err.Error()
 		response.Fail(c.Writer, msg, 500)
 		return
 	}
-	url := "http://" + c.Request.Host + file.Filename
+	fmt.Println(path)
+	err = c.SaveUploadedFile(file, "."+path)
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	url := "http://" + c.Request.Host + path
 	pic.Name = file.Filename
 	pic.Url = url
+	fmt.Println(pic)
 	err = pic.Save()
 	if err != nil {
 		msg := err.Error()
 		response.Fail(c.Writer, msg, 500)
 		return
 	}
-	response.Success(c.Writer, "success", model.Pic{})
+	response.Success(c.Writer, "success", pic)
 }
 
 // GetAllPic

+ 5 - 2
trading-go/controller/relationcontroller.go

@@ -1,6 +1,7 @@
 package controller
 
 import (
+	"fmt"
 	"github.com/gin-gonic/gin"
 	"strconv"
 	"trading-go/model"
@@ -16,12 +17,14 @@ import (
 // @Success 200 {object} response.Response
 // @Router /relation/create [post]
 func RCreat(c *gin.Context) {
-	var relation model.Relation
-	err := c.ShouldBindJSON(&relation)
+	var relationJson model.RelationJson
+	err := c.ShouldBindJSON(&relationJson)
 	if err != nil {
 		response.Fail(c.Writer, err.Error(), 500)
 		return
 	}
+	relation := relationJson.Change()
+	fmt.Println(relation)
 	err = relation.Creat()
 	if err != nil {
 		response.Fail(c.Writer, err.Error(), 500)

+ 6 - 1
trading-go/controller/usercontroller.go

@@ -2,6 +2,7 @@ package controller
 
 import (
 	"errors"
+	"fmt"
 	"github.com/gin-gonic/gin"
 	"trading-go/model"
 	"trading-go/response"
@@ -19,14 +20,17 @@ import (
 func Register(c *gin.Context) {
 	var userJ model.UserJson
 	err := c.ShouldBindJSON(&userJ)
+	fmt.Println(userJ)
 	if err != nil {
 		msg := err.Error()
 		response.Fail(c.Writer, msg, 500)
+		return
 	}
-	id := util.GenID()
+	id := util.GetID()
 	if !util.CheckMobile(userJ.Phone) {
 		msg := util.PhoneFormatError.Error()
 		response.Fail(c.Writer, msg, 400)
+		return
 	}
 	user := model.User{
 		Uid:    uint(id),
@@ -39,6 +43,7 @@ func Register(c *gin.Context) {
 	if err != nil {
 		msg := err.Error()
 		response.Fail(c.Writer, msg, 500)
+		return
 	} else {
 		msg := "register succeed"
 		response.Success(c.Writer, msg, nil)

+ 7 - 3
trading-go/model/goods.go

@@ -120,19 +120,24 @@ func (g *Goods) Revise() error {
 	db := common.DB
 	sqlStr := "UPDATE goods SET pic_id = ?, owner_id = ?, `desc` = ?, title = ?, price = ?, integrity = ?, place = ?, state = ? WHERE id = ?"
 	_, err := db.Exec(sqlStr, g.PicId, g.OwnerId, g.Desc, g.Title, g.Price, g.Integrity, g.Place, g.State, g.Id)
+	if err != nil {
+		return err
+	}
+	sqlStr = "UPDATE goods_surfaces SET pic_id = ?, owner_id = ?, title = ?, price = ?, integrity = ?, state = ? WHERE id = ?"
+	_, err = db.Exec(sqlStr, g.PicId, g.OwnerId, g.Title, g.Price, g.Integrity, g.State, g.Id)
 	return err
 }
 
 func (g *Goods) GetDetail() error {
 	db := common.DB
-	fmt.Println(g.Id)
 	sqlStr := "SELECT * FROM goods WHERE id = ?"
-	err := db.Get(&g, sqlStr, g.Id)
+	err := db.Get(g, sqlStr, g.Id)
 	return err
 }
 
 func (g *Goods) GetUserGoods() (goods []Goods, err error) {
 	db := common.DB
+	fmt.Println(g.OwnerId)
 	sqlStr := "SELECT * FROM goods WHERE owner_id = ?"
 	err = db.Select(&goods, sqlStr, g.OwnerId)
 	return
@@ -154,7 +159,6 @@ func (g *GoodsSurface) GetCategoryPaged(page, pageSize int, category uint) (rsp
 	if err != nil {
 		return
 	}
-	fmt.Println(query, args)
 	err = db.Select(&goods, query, args...)
 	rsp.Data = goods
 	return

+ 1 - 1
trading-go/model/orders.go

@@ -65,6 +65,6 @@ func (o Order) Create() error {
 func (o Order) Delete() error {
 	db := common.DB
 	sqlStr := "DELETE FROM orders WHERE id = ?"
-	_, err := db.Exec(sqlStr)
+	_, err := db.Exec(sqlStr, o.Id)
 	return err
 }

+ 11 - 3
trading-go/model/relation.go

@@ -18,9 +18,17 @@ type RelationJson struct {
 	Type   int  `json:"type"`
 }
 
+func (r RelationJson) Change() Relation {
+	return Relation{
+		Owner:  r.Owner,
+		Target: r.Target,
+		Type:   r.Type,
+	}
+}
+
 func (r Relation) Creat() error {
 	db := common.DB
-	sqlStr := "INSERT INTO relations(owner, target, type) VALUES (:onwer, :target, :type)"
+	sqlStr := "INSERT INTO relations(owner, target, type) VALUES (:owner, :target, :type)"
 	rows, err := db.NamedExec(sqlStr, r)
 	if err != nil {
 		return err
@@ -35,7 +43,7 @@ func (r Relation) Creat() error {
 func (r Relation) Friend(uid int) ([]int64, error) {
 	var friends []int64
 	db := common.DB
-	sqlStr := "SELECT target From relations WHERE onwer = ? AND type = 1"
+	sqlStr := "SELECT target From relations WHERE owner = ? AND type = 1"
 	err := db.Select(&friends, sqlStr, uid)
 	return friends, err
 }
@@ -43,7 +51,7 @@ func (r Relation) Friend(uid int) ([]int64, error) {
 func (r Relation) BadRelation(uid int) ([]int64, error) {
 	var badRelation []int64
 	db := common.DB
-	sqlStr := "SELECT target From relations WHERE onwer = ? AND type = 2"
+	sqlStr := "SELECT target From relations WHERE owner = ? AND type = 2"
 	err := db.Select(&badRelation, sqlStr, uid)
 	return badRelation, err
 }

BIN
trading-go/pic/1693216061Snipaste_2023-08-28_17-11-56.png


+ 16 - 0
trading-go/util/makepath.go

@@ -0,0 +1,16 @@
+package util
+
+import (
+	"fmt"
+	"time"
+)
+
+func MakePath(file string) string {
+	now := toString(time.Now().Unix())
+	path := "/pic/" + now + file
+	return path
+}
+
+func toString(now int64) string {
+	return fmt.Sprint(now)
+}

+ 129 - 22
trading-go/util/snowflake.go

@@ -1,40 +1,147 @@
 package util
 
 import (
+	"errors"
 	"fmt"
-	"github.com/bwmarrin/snowflake"
 	"github.com/spf13/viper"
+	"sync"
 	"time"
 )
 
-var node *snowflake.Node
+type SnowFlakeIdWorker struct {
 
-func init() {
-	tie := viper.GetString("time.time")
-	if err := Init(tie, 1); err != nil {
-		fmt.Println("Init() failed, err = ", err)
-		return
+	// 开始时间戳
+	twepoch int64
+
+	// 机器ID所占的位数
+	workerIdBits int64
+
+	// 数据标识ID所占的位数
+	dataCenterIdBits int64
+
+	// 支持的最大机器ID
+	maxWorkerId int64
+
+	// 支持的最大机房 ID
+	maxDataCenterId int64
+
+	// 序列在ID中占的位数
+	sequenceBits int64
+
+	// 机器ID向左移位数
+	workerIdShift int64
+
+	// 机房ID向左移位数
+	dataCenterIdShift int64
+
+	// 时间截向左移位数
+	timestampLeftShift int64
+
+	// 生成序列的掩码最大值
+	sequenceMask int64
+
+	// 工作机器ID
+	workerId int64
+
+	// 机房ID
+	dataCenterId int64
+
+	/**
+	 * 毫秒内序列
+	 */
+	sequence int64
+
+	// 上次生成ID的时间戳
+	lastTimestamp int64
+
+	// 锁
+	lock sync.Mutex
+}
+
+func (p *SnowFlakeIdWorker) init(dataCenterId int64, workerId int64) {
+	t, _ := time.Parse("2006-01-02", viper.GetString("time.time"))
+	// 开始时间戳;这里是2021-06-01
+	p.twepoch = t.Unix()
+	// 机器ID所占的位数
+	p.workerIdBits = 5
+	// 数据标识ID所占的位数
+	p.dataCenterIdBits = 5
+	// 支持的最大机器ID,最大是31
+	p.maxWorkerId = -1 ^ (-1 << p.workerIdBits)
+	// 支持的最大机房ID,最大是 31
+	p.maxDataCenterId = -1 ^ (-1 << p.dataCenterIdBits)
+	// 序列在ID中占的位数
+	p.sequenceBits = 12
+	// 机器ID向左移12位
+	p.workerIdShift = p.sequenceBits
+	// 机房ID向左移17位
+	p.dataCenterIdShift = p.sequenceBits + p.workerIdBits
+	// 时间截向左移22位
+	p.timestampLeftShift = p.sequenceBits + p.workerIdBits + p.dataCenterIdBits
+	// 生成序列的掩码最大值,最大为4095
+	p.sequenceMask = -1 ^ (-1 << p.sequenceBits)
+
+	if workerId > p.maxWorkerId || workerId < 0 {
+		panic(errors.New(fmt.Sprintf("Worker ID can't be greater than %d or less than 0", p.maxWorkerId)))
 	}
+	if dataCenterId > p.maxDataCenterId || dataCenterId < 0 {
+		panic(errors.New(fmt.Sprintf("DataCenter ID can't be greater than %d or less than 0", p.maxDataCenterId)))
+	}
+
+	p.workerId = workerId
+	p.dataCenterId = dataCenterId
+	// 毫秒内序列(0~4095)
+	p.sequence = 0
+	// 上次生成 ID 的时间戳
+	p.lastTimestamp = -1
 }
 
-func Init(startTime string, machineID int64) (err error) {
-	var st time.Time
-	// 格式化 1月2号下午3时4分5秒  2006年
-	st, err = time.Parse("2006-01-02", startTime)
-	if err != nil {
-		fmt.Println(err)
-		return
+// 生成ID,注意此方法已经通过加锁来保证线程安全
+func (p *SnowFlakeIdWorker) nextId() int64 {
+	p.lock.Lock()
+	defer p.lock.Unlock()
+
+	timestamp := p.timeGen()
+	// 如果当前时间小于上一次 ID 生成的时间戳,说明发生时钟回拨,为保证ID不重复抛出异常。
+	if timestamp < p.lastTimestamp {
+		panic(errors.New(fmt.Sprintf("Clock moved backwards. Refusing to generate id for %d milliseconds", p.lastTimestamp-timestamp)))
 	}
 
-	snowflake.Epoch = st.UnixNano() / 1e6
-	node, err = snowflake.NewNode(machineID)
-	if err != nil {
-		fmt.Println(err)
-		return
+	if p.lastTimestamp == timestamp {
+		// 同一时间生成的,则序号+1
+		p.sequence = (p.sequence + 1) & p.sequenceMask
+		// 毫秒内序列溢出:超过最大值
+		if p.sequence == 0 {
+			// 阻塞到下一个毫秒,获得新的时间戳
+			timestamp = p.tilNextMillis(p.lastTimestamp)
+		}
+	} else {
+		// 时间戳改变,序列重置
+		p.sequence = 0
 	}
-	return
+	// 保存本次的时间戳
+	p.lastTimestamp = timestamp
+
+	// 移位并通过或运算拼到一起
+	return ((timestamp - p.twepoch) << p.timestampLeftShift) |
+		(p.dataCenterId << p.dataCenterIdShift) |
+		(p.workerId << p.workerIdShift) | p.sequence
+}
+
+func (p *SnowFlakeIdWorker) tilNextMillis(lastTimestamp int64) int64 {
+	timestamp := p.timeGen()
+	for timestamp <= lastTimestamp {
+		timestamp = p.timeGen()
+	}
+	return timestamp
+}
+
+func (p *SnowFlakeIdWorker) timeGen() int64 {
+	return time.Now().UnixNano() / 1e6
 }
 
-func GenID() int64 {
-	return node.Generate().Int64()
+func GetID() int64 {
+	idWorker := &SnowFlakeIdWorker{}
+	idWorker.init(0, 1)
+	return idWorker.nextId()
 }