12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package permisgen
- import (
- "Cold_Logistic/internal/server/infra/dao"
- "Cold_Logistic/internal/server/infra/models"
- "context"
- )
- type RegionFiled struct {
- ParentId int `json:"parentId"`
- Id int `json:"id"`
- Name string `json:"name"`
- Level int `json:"level"`
- Sort int `json:"sort"`
- Children []*RegionFiled `json:"children"`
- }
- func buildRegionTree(result []*RegionFiled, all []models.Region) []*RegionFiled {
- for _, v := range all {
- if v.ParentId == 0 {
- result = append(result, &RegionFiled{
- Id: v.Id,
- Name: v.Name,
- Level: v.Level,
- Sort: v.Sort,
- Children: make([]*RegionFiled, 0),
- })
- continue
- }
- for _, r := range result {
- if r.Id == v.ParentId {
- r.Children = append(r.Children, &RegionFiled{
- ParentId: v.ParentId,
- Id: v.Id,
- Name: v.Name,
- Level: v.Level,
- Sort: v.Sort,
- Children: make([]*RegionFiled, 0),
- })
- break
- }
- buildRegionTree(r.Children, []models.Region{v})
- }
- }
- return result
- }
- type RegionGen struct {
- store *dao.DataStore
- }
- func NewRegionGen(store *dao.DataStore) *RegionGen {
- return &RegionGen{store: store}
- }
- // 110000
- func (r *RegionGen) Run(ctx context.Context, tree []*RegionFiled) error {
- for _, v := range tree {
- if err := r.Gen(ctx, v, 0); err != nil {
- return err
- }
- }
- return nil
- }
- func (r *RegionGen) Gen(ctx context.Context, d *RegionFiled, parentId int) error {
- g := &models.Region{
- Id: 0,
- Name: d.Name,
- Level: d.Level,
- Sort: d.Sort,
- ParentId: parentId,
- IsProtected: 1,
- }
- if err := r.store.Region().Create(ctx, g); err != nil {
- return err
- }
- if len(d.Children) > 0 {
- for _, v := range d.Children {
- if err := r.Gen(ctx, v, g.Id); err != nil {
- return err
- }
- }
- }
- return nil
- }
|