region_gen.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package permisgen
  2. import (
  3. "Cold_Logistic/internal/server/infra/dao"
  4. "Cold_Logistic/internal/server/infra/models"
  5. "context"
  6. )
  7. type RegionFiled struct {
  8. ParentId int `json:"parentId"`
  9. Id int `json:"id"`
  10. Name string `json:"name"`
  11. Level int `json:"level"`
  12. Sort int `json:"sort"`
  13. Children []*RegionFiled `json:"children"`
  14. }
  15. func buildRegionTree(result []*RegionFiled, all []models.Region) []*RegionFiled {
  16. for _, v := range all {
  17. if v.ParentId == 0 {
  18. result = append(result, &RegionFiled{
  19. Id: v.Id,
  20. Name: v.Name,
  21. Level: v.Level,
  22. Sort: v.Sort,
  23. Children: make([]*RegionFiled, 0),
  24. })
  25. continue
  26. }
  27. for _, r := range result {
  28. if r.Id == v.ParentId {
  29. r.Children = append(r.Children, &RegionFiled{
  30. ParentId: v.ParentId,
  31. Id: v.Id,
  32. Name: v.Name,
  33. Level: v.Level,
  34. Sort: v.Sort,
  35. Children: make([]*RegionFiled, 0),
  36. })
  37. break
  38. }
  39. buildRegionTree(r.Children, []models.Region{v})
  40. }
  41. }
  42. return result
  43. }
  44. type RegionGen struct {
  45. store *dao.DataStore
  46. }
  47. func NewRegionGen(store *dao.DataStore) *RegionGen {
  48. return &RegionGen{store: store}
  49. }
  50. // 110000
  51. func (r *RegionGen) Run(ctx context.Context, tree []*RegionFiled) error {
  52. for _, v := range tree {
  53. if err := r.Gen(ctx, v, 0); err != nil {
  54. return err
  55. }
  56. }
  57. return nil
  58. }
  59. func (r *RegionGen) Gen(ctx context.Context, d *RegionFiled, parentId int) error {
  60. g := &models.Region{
  61. Id: 0,
  62. Name: d.Name,
  63. Level: d.Level,
  64. Sort: d.Sort,
  65. ParentId: parentId,
  66. IsProtected: 1,
  67. }
  68. if err := r.store.Region().Create(ctx, g); err != nil {
  69. return err
  70. }
  71. if len(d.Children) > 0 {
  72. for _, v := range d.Children {
  73. if err := r.Gen(ctx, v, g.Id); err != nil {
  74. return err
  75. }
  76. }
  77. }
  78. return nil
  79. }