89 lines
2.0 KiB
Go
89 lines
2.0 KiB
Go
package l_ai_category
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"gitea.cdlsxd.cn/self-tools/l_ai_category/utils_gorm"
|
|
"testing"
|
|
)
|
|
|
|
const (
|
|
dns = ""
|
|
driver = "mysql"
|
|
table = "goods_category"
|
|
)
|
|
|
|
func TestCategory(t *testing.T) {
|
|
catString := string(CategoryToJsonByte())
|
|
res, err := GetCategory(context.Background(), "思嘉思达 雅格电火锅 3.5L电火锅 SKD-G0020", "03320e58-6a0b-4061-a22b-902039f2190d", "deepseek-v3-250324", catString)
|
|
t.Log(res, err)
|
|
}
|
|
|
|
type Category struct {
|
|
Id int `json:"id"`
|
|
Name string `json:"name"`
|
|
Level int `json:"level"`
|
|
Pid int `json:"pid"`
|
|
}
|
|
|
|
type CategoryDic struct {
|
|
Category
|
|
Children []*CategoryDic `json:"children"`
|
|
}
|
|
|
|
func TestGetCateGoryJson(t *testing.T) {
|
|
cateJsonByte := CategoryToJsonByte()
|
|
|
|
t.Log(string(cateJsonByte))
|
|
}
|
|
|
|
func CategoryToJsonByte() (cateJsonByte []byte) {
|
|
cates := cateAll()
|
|
var (
|
|
cateLevelPath = make([]map[int][]*CategoryDic, 3)
|
|
)
|
|
for _, v := range cates {
|
|
if cateLevelPath[v.Level-1] == nil {
|
|
cateLevelPath[v.Level-1] = make(map[int][]*CategoryDic)
|
|
}
|
|
if _, ex := cateLevelPath[v.Level-1][v.Pid]; !ex {
|
|
cateLevelPath[v.Level-1][v.Pid] = make([]*CategoryDic, 0)
|
|
}
|
|
cateLevelPath[v.Level-1][v.Pid] = append(cateLevelPath[v.Level-1][v.Pid], &CategoryDic{Category: v})
|
|
}
|
|
cate := cateIteration(cateLevelPath[0], cateIteration(cateLevelPath[1], cateLevelPath[2]))[0]
|
|
cateJsonByte, _ = json.Marshal(cate)
|
|
return
|
|
}
|
|
|
|
func cateIteration(parent map[int][]*CategoryDic, child map[int][]*CategoryDic) map[int][]*CategoryDic {
|
|
for _, v := range parent {
|
|
for _, vv := range v {
|
|
vv.Children = child[vv.Id]
|
|
}
|
|
}
|
|
return parent
|
|
}
|
|
|
|
func cateAll() (data []Category) {
|
|
var (
|
|
row Category
|
|
)
|
|
db, err, clean := utils_gorm.DB(driver, dns)
|
|
defer clean()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
rows, _ := db.Raw(fmt.Sprintf("SELECT id,name,level,pid FROM `%s` where `type`=2", table)).Rows()
|
|
defer rows.Close()
|
|
for rows.Next() {
|
|
err = db.ScanRows(rows, &row)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
data = append(data, row)
|
|
}
|
|
return
|
|
}
|