You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
62 KiB
168 lines
62 KiB
6 months ago
|
package service
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"strconv"
|
||
|
|
||
|
"bkb-seller/global"
|
||
|
"bkb-seller/model"
|
||
|
"bkb-seller/model/request"
|
||
|
)
|
||
|
|
||
|
func GetTbCategoryList(info request.TbCategory) (err error, list []model.TbCategory) {
|
||
|
db := global.MG_DB.Model(&model.TbCategory{}).Where("status = 1").Where("pid = ?", info.Pid)
|
||
|
if info.Name != "" {
|
||
|
db = db.Where("name LIKE ?", "%"+info.Name+"%")
|
||
|
}
|
||
|
var res []model.TbCategory
|
||
|
err = db.Find(&res).Error
|
||
|
return err, res
|
||
|
}
|
||
|
|
||
|
func GetTbCategoryTree(info *model.TbCategoryTree) (err error) {
|
||
|
var list []model.TbCategory
|
||
|
err = global.MG_DB.Model(&model.TbCategory{}).Where("`status` = 1").Order("layer ASC").Find(&list).Error
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
var lm = make(map[uint]*model.TbCategoryTree)
|
||
|
lm[0] = info
|
||
|
for i := 0; i < len(list); i++ {
|
||
|
var tct = &model.TbCategoryTree{ID: list[i].ID, Name: list[i].Name, Pid: list[i].Pid, Layer: list[i].Layer, IsLeaf: list[i].IsLeaf, Children: []*model.TbCategoryTree{}}
|
||
|
if cg, ok := lm[list[i].Pid]; !ok {
|
||
|
info.Children = append(info.Children, tct)
|
||
|
lm[list[i].ID] = info.Children[len(info.Children)-1]
|
||
|
} else {
|
||
|
cg.Children = append(cg.Children, tct)
|
||
|
lm[list[i].ID] = cg.Children[len(cg.Children)-1]
|
||
|
}
|
||
|
}
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func GetTbCategoryTree0(info *model.TbCategoryTree) (err error) {
|
||
|
err = global.MG_DB.Model(&model.TbCategory{}).Where("status = 1").Where("pid = ?", info.ID).Select("id,name,pid,is_leaf").Find(&info.Children).Error
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
for i := 0; i < len(info.Children); i++ {
|
||
|
if !info.Children[i].IsLeaf {
|
||
|
err = GetTbCategoryTree0(info.Children[i])
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
} else {
|
||
|
info.Children[i].Children = make([]*model.TbCategoryTree, 0)
|
||
|
}
|
||
|
}
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
// func GetTbCategoryTreeSearch(name string, res []model.TbCategoryTree) (err error) {
|
||
|
// var (
|
||
|
// tmp []model.TbCategoryTree
|
||
|
// )
|
||
|
// err = global.MG_DB.Model(&model.TbCategory{}).Where("status = 1").Where("name LIKE ?", "%"+name+"%").Find(&tmp).Error
|
||
|
// if err != nil {
|
||
|
// return err
|
||
|
// }
|
||
|
// for _, t := range res {
|
||
|
// if t.Pid != 0 {
|
||
|
//
|
||
|
// } else {
|
||
|
//
|
||
|
// }
|
||
|
// }
|
||
|
// return nil
|
||
|
// }
|
||
|
func GetTbCategoryBreadcrumb(id uint) (error, []model.Breadcrumb) {
|
||
|
var (
|
||
|
category model.Breadcrumb
|
||
|
result = make([]model.Breadcrumb, 0)
|
||
|
)
|
||
|
err := global.MG_DB.Table("tb_category").Select("id,`name`,pid,is_leaf").Where("status = 1 AND id = ?", id).Find(&category).Error
|
||
|
if err != nil {
|
||
|
return err, nil
|
||
|
}
|
||
|
if category.Pid != 0 {
|
||
|
err = getTbCategoryParent(&category)
|
||
|
if err != nil {
|
||
|
return err, nil
|
||
|
}
|
||
|
}
|
||
|
transferBreadcrumbList(&category, &result)
|
||
|
return nil, result
|
||
|
}
|
||
|
|
||
|
func getTbCategoryParent(breadcrumb *model.Breadcrumb) (err error) {
|
||
|
var tmp model.Breadcrumb
|
||
|
err = global.MG_DB.Table("tb_category").Select("id,`name`,pid,is_leaf").Where("status = 1 AND id = ?", breadcrumb.Pid).Find(&tmp).Error
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
breadcrumb.Parent = &tmp
|
||
|
if breadcrumb.Parent.Pid != 0 {
|
||
|
err = getTbCategoryParent(breadcrumb.Parent)
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func transferBreadcrumbList(info *model.Breadcrumb, breadcrumbs *[]model.Breadcrumb) {
|
||
|
if info.ID != 0 {
|
||
|
*breadcrumbs = append(*breadcrumbs, *info)
|
||
|
if info.Parent != nil {
|
||
|
transferBreadcrumbList(info.Parent, breadcrumbs)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func ImportTbCategory() (err error) {
|
||
|
var (
|
||
|
attrs = make([][]string, 0)
|
||
|
attrMap = make(map[string]model.TbCategory)
|
||
|
)
|
||
|
var str = `[["童鞋/婴儿鞋/亲子鞋","板鞋","板鞋"],["童鞋/婴儿鞋/亲子鞋","传统布鞋/手工编织鞋","传统布鞋/手工编织鞋"],["童鞋/婴儿鞋/亲子鞋","帆布鞋","帆布鞋"],["童鞋/婴儿鞋/亲子鞋","凉鞋","凉鞋"],["童鞋/婴儿鞋/亲子鞋","棉鞋","棉鞋"],["童鞋/婴儿鞋/亲子鞋","皮鞋","皮鞋"],["童鞋/婴儿鞋/亲子鞋","青少年鞋","青少年鞋"],["童鞋/婴儿鞋/亲子鞋","亲子鞋","亲子鞋"],["童鞋/婴儿鞋/亲子鞋","拖鞋","拖鞋"],["童鞋/婴儿鞋/亲子鞋","舞蹈鞋","舞蹈鞋"],["童鞋/婴儿鞋/亲子鞋","鞋配件","鞋配件"],["童鞋/婴儿鞋/亲子鞋","学步鞋","学步鞋"],["童鞋/婴儿鞋/亲子鞋","靴子/雪地靴","皮靴/棉靴"],["童鞋/婴儿鞋/亲子鞋","靴子/雪地靴","雪地靴"],["童鞋/婴儿鞋/亲子鞋","婴儿步前鞋","婴儿步前鞋"],["童鞋/婴儿鞋/亲子鞋","运动鞋","运动鞋"],["童鞋/婴儿鞋/亲子鞋","雨靴","雨靴"],["婴童尿裤","布尿裤/尿垫","布尿裤"],["婴童尿裤","布尿裤/尿垫","隔尿床垫"],["婴童尿裤","布尿裤/尿垫","隔尿垫巾"],["婴童尿裤","布尿裤/尿垫","隔尿裙"],["婴童尿裤","布尿裤/尿垫","尿布带"],["婴童尿裤","布尿裤/尿垫","纱布尿布"],["婴童尿裤","拉拉裤","拉拉裤"],["婴童尿裤","婴儿游泳纸尿裤","婴儿游泳纸尿裤"],["婴童尿裤","纸尿裤","纸尿裤"],["婴童尿裤","纸尿片","纸尿片"],["奶粉/辅食/营养品/零食","宝宝辅食","菜粉/水果粉"],["奶粉/辅食/营养品/零食","宝宝辅食","果/菜/肉/混合泥"],["奶粉/辅食/营养品/零食","宝宝辅食","果汁/饮品"],["奶粉/辅食/营养品/零食","宝宝辅食","面条"],["奶粉/辅食/营养品/零食","宝宝辅食","米粉/米糊/汤粥"],["奶粉/辅食/营养品/零食","宝宝辅食","磨牙棒/饼干"],["奶粉/辅食/营养品/零食","宝宝辅食","其他宝宝辅食"],["奶粉/辅食/营养品/零食","宝宝辅食","肉松/鱼松"],["奶粉/辅食/营养品/零食","宝宝零食","果肉条/果干"],["奶粉/辅食/营养品/零食","宝宝零食","海苔"],["奶粉/辅食/营养品/零食","宝宝零食","奶酪/奶片"],["奶粉/辅食/营养品/零食","宝宝零食","泡芙"],["奶粉/辅食/营养品/零食","宝宝零食","其他宝宝零食"],["奶粉/辅食/营养品/零食","宝宝零食","溶溶豆"],["奶粉/辅食/营养品/零食","宝宝零食","糖果"],["奶粉/辅食/营养品/零食","宝宝零食","鱼肉肠"],["奶粉/辅食/营养品/零食","儿童零食","果肉条/果干"],["奶粉/辅食/营养品/零食","儿童零食","海苔"],["奶粉/辅食/营养品/零食","儿童零食","奶酪/奶片"],["奶粉/辅食/营养品/零食","儿童零食","其他儿童零食"],["奶粉/辅食/营养品/零食","儿童零食","肉肠"],["奶粉/辅食/营养品/零食","儿童零食","糖果"],["奶粉/辅食/营养品/零食","儿童奶粉","儿童奶粉"],["奶粉/辅食/营养品/零食","其他","其他"],["奶粉/辅食/营养品/零食","特殊配方奶粉","低体重儿/早产儿奶粉"],["奶粉/辅食/营养品/零食","特殊配方奶粉","豆奶粉"],["奶粉/辅食/营养品/零食","特殊配方奶粉","防腹泻/抗过敏奶粉"],["奶粉/辅食/营养品/零食","婴幼儿调味品","调料"],["奶粉/辅食/营养品/零食","婴幼儿调味品","食用油"],["奶粉/辅食/营养品/零食","婴幼儿牛奶粉","婴幼儿牛奶粉"],["奶粉/辅食/营养品/零食","婴幼儿羊奶粉","婴幼儿羊奶粉"],["奶粉/辅食/营养品/零食","婴幼儿液态奶","婴幼儿液态奶"],["奶粉/辅食/营养品/零食","婴幼儿营养品","蛋白粉"],["奶粉/辅食/营养品/零食","婴幼儿营养品","DHA/核桃油"],["奶粉/辅食/营养品/零食","婴幼儿营养品","钙铁锌"],["奶粉/辅食/营养品/零食","婴幼儿营养品","牛初乳"],["奶粉/辅食/营养品/零食","婴幼儿营养品","葡萄糖"],["奶粉/辅食/营养品/零食","婴幼儿营养品","清凉/调理/奶伴"],["奶粉/辅食/营养品/零食","婴幼��
|
||
|
err = json.Unmarshal([]byte(str), &attrs)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
var tx = global.MG_DB.Begin()
|
||
|
for _, attr := range attrs {
|
||
|
for i := 0; i < len(attr); i++ {
|
||
|
if i == 3 {
|
||
|
fmt.Println(i)
|
||
|
}
|
||
|
is := strconv.Itoa(i)
|
||
|
if _, ok := attrMap[is+attr[i]]; !ok {
|
||
|
var tc model.TbCategory
|
||
|
tc.Name = attr[i]
|
||
|
if i > 0 {
|
||
|
iS := strconv.Itoa(i - 1)
|
||
|
tc.Pid = attrMap[iS+attr[i-1]].ID
|
||
|
tc.Layer = attrMap[iS+attr[i-1]].Layer + 1
|
||
|
} else {
|
||
|
tc.Layer = 1
|
||
|
}
|
||
|
if i == len(attr)-1 {
|
||
|
tc.IsLeaf = true
|
||
|
}
|
||
|
tc.Status = 0
|
||
|
err = tx.Model(&model.TbCategory{}).Create(&tc).Error
|
||
|
if err != nil {
|
||
|
tx.Rollback()
|
||
|
fmt.Println(is + attr[i])
|
||
|
return err
|
||
|
}
|
||
|
attrMap[is+attr[i]] = tc
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
tx.Commit()
|
||
|
return nil
|
||
|
}
|
||
|
|