componentClassify.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package model
  2. import (
  3. "Panel_development/global"
  4. "errors"
  5. "gorm.io/gorm"
  6. )
  7. type ComponentClassify struct {
  8. gorm.Model
  9. Name string `gorm:"type:varchar(255);not null;unique;comment:组件分类名称" json:"name" validate:"required"`
  10. ParentId uint `gorm:"type:int;not null;comment:父组件id" json:"parentId"`
  11. Child []ComponentClassify `gorm:"-" json:"child"` // 此字段将不会被GORM迁移至数据库
  12. }
  13. type ComponentClassifyDto struct {
  14. Id int `json:"id"`
  15. Name string `gorm:"type:varchar(255);not null;unique;comment:组件分类名称" json:"name" validate:"required"`
  16. ParentId uint `gorm:"type:int;not null;comment:父组件id" json:"parentId"`
  17. Child []ComponentClassify `gorm:"-" json:"child"` // 此字段将不会被GORM迁移至数据库
  18. }
  19. func (cc ComponentClassify) TableName() string {
  20. return "component_classify"
  21. }
  22. // AddComponentClassify 添加组件分类
  23. func (cc ComponentClassify) AddComponentClassify(cclass ComponentClassify) (ComponentClassify, error) {
  24. //TODO implement me
  25. tx := global.DBLink.Create(&cclass)
  26. if tx.RowsAffected > 0 {
  27. return ComponentClassify{}, nil
  28. }
  29. return ComponentClassify{}, errors.New("添加失败")
  30. }
  31. // GetComponentClassify 获取组件分类
  32. func (cc ComponentClassify) GetComponentClassify() ([]ComponentClassify, error) {
  33. var roots []ComponentClassify
  34. err := global.DBLink.Where("parent_id = 0").Find(&roots).Error
  35. if err != nil {
  36. return nil, err
  37. }
  38. for i := range roots {
  39. err = recursiveFetchChildren(global.DBLink, &roots[i])
  40. if err != nil {
  41. return nil, err
  42. }
  43. }
  44. return roots, nil
  45. }
  46. // 递归获取分类
  47. func recursiveFetchChildren(db *gorm.DB, parent *ComponentClassify) error {
  48. var children []ComponentClassify
  49. err := db.Where("parent_id = ?", parent.ID).Find(&children).Error
  50. if err != nil {
  51. return err
  52. }
  53. for _, child := range children {
  54. err = recursiveFetchChildren(db, &child)
  55. if err != nil {
  56. return err
  57. }
  58. parent.Child = append(parent.Child, child)
  59. }
  60. return nil
  61. }
  62. func UpdateByIds(id int, tableName string, model ComponentClassifyDto) (ComponentClassifyDto, error) {
  63. tx := global.DBLink.Table(tableName).Where("id = ?", id).Updates(&model)
  64. if tx.RowsAffected > 0 {
  65. return model, nil
  66. } else {
  67. return model, errors.New("修改失败当前id不存在")
  68. }
  69. }