shop-example/pkg/controller/product_backend.go
2023-08-14 08:44:10 +08:00

217 lines
4.7 KiB
Go

package controller
import (
"encoding/json"
"fmt"
"github.com/gin-gonic/gin"
"github.com/go-redis/redis"
"strconv"
"time"
"worktest/pkg/model"
"worktest/pkg/redistab"
)
type ListReq struct {
Title string `json:"'title'"`
}
type ProductReq struct {
ID uint `json:"autoincr"`
}
//RemoveCache 清除所有redis1缓存
func RemoveCache(c *gin.Context) {
var req ProductReq
if err := c.ShouldBind(&req); err != nil {
Error(c, err.Error())
return
}
v, err := redistab.RedisClient.Del(redistab.GetProductOrderList(req.ID)).Result()
fmt.Println("1---------", v, err)
v, err = redistab.RedisClient.Del(redistab.GetProductSaleNum(req.ID)).Result()
fmt.Println("1---------", v, err)
v, err = redistab.RedisClient.Del(redistab.GetProductStockSize(req.ID)).Result()
fmt.Println("1---------", v, err)
Success(c, nil)
return
}
//RemoveAllCache 清除所有redis1缓存
func RemoveAllCache(c *gin.Context) {
var req ListReq
if err := c.ShouldBind(&req); err != nil {
Error(c, err.Error())
return
}
var list []*model.Product
model.DB.Model(&model.Product{}).Find(&list)
fmt.Println("2--------", redistab.RedisClient)
for _, t := range list {
//销量
v, err := redistab.RedisClient.Del(redistab.GetProductOrderList(t.ID)).Result()
fmt.Println("1---------", v, err)
v, err = redistab.RedisClient.Del(redistab.GetProductSaleNum(t.ID)).Result()
fmt.Println("1---------", v, err)
v, err = redistab.RedisClient.Del(redistab.GetProductStockSize(t.ID)).Result()
fmt.Println("1---------", v, err)
}
Success(c, nil)
return
}
func List(c *gin.Context) {
var req ListReq
if err := c.ShouldBind(&req); err != nil {
Error(c, err.Error())
return
}
var list []*model.Product
model.DB.Model(&model.Product{}).Find(&list)
fmt.Println("2--------", redistab.RedisClient)
for i, t := range list {
fmt.Println("30----", redistab.GetProductOrderList(t.ID))
//销量
v, err := redistab.RedisClient.Get(redistab.GetProductOrderList(t.ID)).Result()
fmt.Println("1---------", v, err)
if err == nil && v != "" {
u64, err := strconv.ParseUint(v, 10, 32)
if err != nil {
list[i].OrderNum = u64
}
}
v, err = redistab.RedisClient.Get(redistab.GetProductSaleNum(t.ID)).Result()
fmt.Println("1---------", v, err)
if err == nil && v != "" {
u64, err := strconv.ParseUint(v, 10, 32)
if err != nil {
list[i].SalesVolume = u64
}
}
v, err = redistab.RedisClient.Get(redistab.GetProductStockSize(t.ID)).Result()
fmt.Println("1---------", v, err)
if err == nil && v != "" {
u64, err := strconv.ParseUint(v, 10, 32)
if err != nil {
list[i].NowStockSize = u64
}
}
b, err := redistab.RedisClient.PFCount(redistab.GetProductStockSize(t.ID)).Result()
fmt.Println("1---------", b, err)
if err == nil && v != "" {
list[i].Uv = uint(b)
}
}
Success(c, list)
return
}
//Clear 清除数据
func Clear(c *gin.Context) {
var req ListReq
if err := c.ShouldBind(&req); err != nil {
Error(c, err.Error())
return
}
var list []*model.Product
model.DB.Model(&model.Product{}).Find(&list)
Success(c, list)
return
}
//SynCache 同步redis
func SynCache(c *gin.Context) {
var req ListReq
if err := c.ShouldBind(&req); err != nil {
Error(c, err.Error())
return
}
var list []*model.Product
model.DB.Model(&model.Product{}).Find(&list)
fmt.Println("2--------", redistab.RedisClient)
redistab.RedisClient.Del(redistab.GetProductBitMap())
redistab.RedisClient.Del(redistab.GetProductIdSet())
redistab.RedisClient.Del(redistab.GetProductIdZet())
for _, t := range list {
v, err := redistab.RedisClient.Set(redistab.GetProductStockSize(t.ID), t.StockSize, 0).Result()
fmt.Println("1---------", v, err)
temp, err := json.Marshal(t)
v, err = redistab.RedisClient.Set(redistab.GetProductDetail(t.ID), string(temp), 0).Result()
fmt.Println("1---------", v, err)
//同步bitmap
b, err := redistab.RedisClient.SetBit(redistab.GetProductBitMap(), int64(t.ID), 1).Result()
fmt.Println("1---------", b, err)
//id同步到set
redistab.RedisClient.SAdd(redistab.GetProductIdSet(),t.ID)
//id同步到zset
redistab.RedisClient.ZAdd(redistab.GetProductIdZet(),redis.Z{Score: float64(t.ID), Member: t.ID})
}
//同步列表
Success(c, list)
return
}
func PublishMsg(c *gin.Context) {
for i := 0 ; i<=10 ; i++ {
msg := fmt.Sprintf("消息标号:%d号",i)
_= redistab.RedisClient.Publish(redistab.GetChannelKey(),msg) // 订阅 mychannel
}
Success(c, nil)
return
}
func PublishMsgTime(c *gin.Context) {
for i := 0 ; i<=10 ; i++ {
time.Sleep(100*time.Microsecond)
msg := fmt.Sprintf("消息标号:%d号",i)
_= redistab.RedisClient.Publish(redistab.GetChannelKey(),msg) // 订阅 mychannel
}
Success(c, nil)
return
}