|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- package svc
-
- import (
- "applet/app/admin/md"
- "applet/app/db"
- "applet/app/db/model"
- "applet/app/utils"
- "errors"
- "github.com/gin-gonic/gin"
- "reflect"
- "time"
- "xorm.io/xorm"
- )
-
- func List(c *gin.Context) ([]map[string]interface{}, error) {
- engine := db.Db
- //1、获取当前主营类目下所有 一级类目
- firstCategoryList, err := db.GetCategoryList(engine, "1")
- if err != nil {
- return nil, err
- }
- var firstCategoryListIds []int
- for _, v := range *firstCategoryList {
- firstCategoryListIds = append(firstCategoryListIds, v.Id)
- }
-
- //2、获取所有 二级类目
- secondCategoryList, _ := db.CategoryListFindByParams(engine, map[string]interface{}{
- "key": "pid",
- "value": firstCategoryListIds,
- })
- var secondCategoryListIds []int
- for _, v := range *secondCategoryList {
- secondCategoryListIds = append(secondCategoryListIds, v.Id)
- }
-
- var tempResult = map[string][]map[string]interface{}{}
- for _, v := range *secondCategoryList {
- var tmp = map[string]interface{}{}
- tmp["id"] = v.Id
- tmp["pid"] = v.Pid
- tmp["name"] = v.Name
- tmp["level"] = v.Level
- tmp["create_at"] = v.CreateAt
- tmp["update_at"] = v.UpdateAt
- tempResult[utils.AnyToString(v.Pid)] = append(tempResult[utils.AnyToString(v.Pid)], tmp)
- }
-
- var result []map[string]interface{}
- for _, v := range *firstCategoryList {
- var temp = map[string]interface{}{}
- temp["id"] = v.Id
- temp["pid"] = v.Pid
- temp["name"] = v.Name
- temp["level"] = v.Level
- temp["create_at"] = v.CreateAt
- temp["update_at"] = v.UpdateAt
- temp["child"] = tempResult[utils.AnyToString(v.Id)]
- result = append(result, temp)
- }
- return result, nil
- }
-
- func Add(c *gin.Context, name string, pid string) error {
- engine := db.Db
- var level = 1
- if pid != "0" {
- fatherCategory, err := db.GetCategoryById(engine, pid)
- if err != nil {
- return err
- }
- if fatherCategory == nil {
- return errors.New("未找到该分类的父类")
- }
- level = fatherCategory.Level + 1
- }
- m := model.GoodsCategory{
- Name: name,
- Level: level,
- Pid: utils.StrToInt(pid),
- CreateAt: time.Now().Format("2006-01-02 15:04:05"),
- UpdateAt: time.Now().Format("2006-01-02 15:04:05"),
- }
- _, err := db.CategoryInsert(engine, &m)
- if err != nil {
- return err
- }
- return nil
- }
-
- func Del(c *gin.Context, categoryId string) error {
- engine := db.Db
- delModel := new(model.GoodsCategory)
- _, err := engine.ID(categoryId).Delete(delModel)
- if err != nil {
- return err
- }
- _, err = engine.Table("goods_category").Where("pid = ?", categoryId).Delete(new(model.GoodsCategory))
- if err != nil {
- return err
- }
- return nil
- }
-
- func Sort(c *gin.Context, ids []string) error {
- engine := db.Db
- categoryList, _ := db.CategoryListFindByParams(engine, map[string]interface{}{
- "key": "id",
- "value": ids,
- })
- for _, v := range *categoryList {
- err := db.UpdateCategoryById(engine, &v)
- if err != nil {
- return err
- }
- }
- return nil
- }
-
- func Save(c *gin.Context, data map[string]interface{}) error {
- engine := db.Db
- //todo::处理一级类目
- err := db.UpdateOrInsert(engine, &model.GoodsCategory{
- Id: utils.StrToInt(utils.AnyToString(data["id"])),
- Pid: utils.StrToInt(utils.AnyToString(data["pid"])),
- Name: utils.AnyToString(data["name"]),
- Level: 1,
- CreateAt: utils.AnyToString(data["create_at"]),
- UpdateAt: time.Now().Format("2006-01-02 15:04:05"),
- })
- if err != nil {
- return err
- }
-
- if data["child"] != nil {
- //todo::有二级类目
- child := reflect.ValueOf(data["child"])
- if child.Len() > 0 {
- //1、查询出所有三级类目
- secondCategoryListData, _ := db.CategoryListFindByParams(engine, map[string]interface{}{
- "key": "pid",
- "value": data["id"],
- })
- var secondCategoryList = map[string]interface{}{}
- for _, secondCategory := range *secondCategoryListData {
- secondCategoryList[utils.AnyToString(secondCategory.Id)] = secondCategory
- }
-
- tempSave := map[string]interface{}{}
- for i := 0; i < child.Len(); i++ {
- tempChild := child.Index(i).Interface().(map[string]interface{})
- tempSave[utils.AnyToString(tempChild["id"])] = tempChild
- m := &model.GoodsCategory{
- Id: utils.StrToInt(utils.AnyToString(tempChild["id"])),
- Pid: utils.StrToInt(utils.AnyToString(data["id"])),
- Name: utils.AnyToString(tempChild["name"]),
- Level: 2,
- CreateAt: utils.AnyToString(tempChild["create_at"]),
- UpdateAt: time.Now().Format("2006-01-02 15:04:05"),
- }
- err := db.UpdateOrInsert(engine, m)
- if err != nil {
- return err
- }
- }
-
- for key, _ := range secondCategoryList {
- if tempSave[key] == nil {
- engine.Where("id=?", key).Delete(model.GoodsCategory{})
- }
- }
- } else {
- //删除所有二级类目
- engine.Where("pid=?", data["id"]).Delete(model.GoodsCategory{})
- }
- } else {
- //删除所有二级类目
- engine.Where("pid=?", data["id"]).Delete(model.GoodsCategory{})
- }
- return nil
- }
-
- func GetAllCategory(c *gin.Context) (interface{}, error) {
- engine := db.Db
- var result interface{}
- result, err := MakeCategoryOptionV2(engine)
- if err != nil {
- return nil, err
- }
- return result, nil
- }
-
- // 按照父级子级进行分类
- func MakeCategoryOptionV2(engine *xorm.Engine) ([]md.CateGoryTreeList, error) {
- //1、获取当前主营类目下所有 一级类目
- firstCategoryList, err := db.GetCategoryList(engine, "1")
- if err != nil {
- return nil, err
- }
- var firstCategoryListIds []int
- for _, v := range *firstCategoryList {
- firstCategoryListIds = append(firstCategoryListIds, v.Id)
- }
- //2、获取所有 二级类目
- secondCategoryList, _ := db.CategoryListFindByParams(engine, map[string]interface{}{
- "key": "pid",
- "value": firstCategoryListIds,
- })
-
- var tempResult = map[string][]md.CateGoryTreeList{}
- for _, v := range *secondCategoryList {
- tempResult[utils.AnyToString(v.Pid)] = append(tempResult[utils.AnyToString(v.Pid)], md.CateGoryTreeList{
- Id: v.Id,
- Pid: v.Pid,
- Name: v.Name,
- CreateAt: v.CreateAt,
- UpdateAt: v.CreateAt,
- })
- }
-
- var result []md.CateGoryTreeList
- for _, v := range *firstCategoryList {
- result = append(result, md.CateGoryTreeList{
- Id: v.Id,
- Pid: v.Pid,
- Name: v.Name,
- CreateAt: v.CreateAt,
- UpdateAt: v.CreateAt,
- Children: tempResult[utils.AnyToString(v.Id)],
- })
- }
- return result, nil
- }
|