base_district.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package base
  2. import (
  3. "context"
  4. "github.com/gogf/gf/frame/g"
  5. "github.com/gogf/gf/util/gconv"
  6. "dashoo.cn/micro/app/dao/base"
  7. model "dashoo.cn/micro/app/model/base"
  8. "dashoo.cn/micro/app/service"
  9. )
  10. type districtService struct {
  11. *service.ContextService
  12. Dao *base.BaseDistrictDao
  13. DetailDao *base.BaseSalesRegionDetailDao
  14. RegionDao *base.BaseSalesRegionDao
  15. }
  16. func NewDistrictService(ctx context.Context) (svc *districtService, err error) {
  17. svc = new(districtService)
  18. if svc.ContextService, err = svc.Init(ctx); err != nil {
  19. return nil, err
  20. }
  21. svc.Dao = base.NewBaseDistrictDao(svc.Tenant)
  22. svc.DetailDao = base.NewBaseSalesRegionDetailDao(svc.Tenant)
  23. svc.RegionDao = base.NewBaseSalesRegionDao(svc.Tenant)
  24. return svc, nil
  25. }
  26. //GetProvincesList 所属区域列表
  27. func (s *districtService) GetProvincesList(Id int64) (treeList []*model.ProvincesTree, err error) {
  28. ms := make(map[int]*model.ProvincesTree)
  29. var distributorList []model.BaseDistrict
  30. err = s.Dao.Order("id asc").Scan(&distributorList)
  31. if err != nil {
  32. g.Log().Error(err)
  33. return
  34. }
  35. for _, v := range distributorList {
  36. ms[v.Id] = &model.ProvincesTree{
  37. Id: v.Id,
  38. ParentId: v.ParentId,
  39. DistName: v.DistName,
  40. }
  41. }
  42. for _, v := range ms {
  43. if _, ok := ms[v.ParentId]; ok {
  44. ms[v.ParentId].Children = append(ms[v.ParentId].Children, v)
  45. continue
  46. }
  47. treeList = append(treeList, v)
  48. }
  49. s.SortToProvince(treeList)
  50. return
  51. }
  52. // SortToProvince 省市区排序
  53. func (s *districtService) SortToProvince(treeList []*model.ProvincesTree) []*model.ProvincesTree {
  54. length := len(treeList)
  55. for i := 0; i < length-1; i++ {
  56. for j := i + 1; j < length; j++ {
  57. if treeList[i].Id > treeList[j].Id {
  58. treeList[i], treeList[j] = treeList[j], treeList[i]
  59. }
  60. }
  61. }
  62. for i := 0; i < length; i++ {
  63. treeList[i].Children = s.SortToProvince(treeList[i].Children)
  64. }
  65. return treeList
  66. }
  67. // GetProvinceList 返回所有省份的
  68. func (s *districtService) GetProvinceList() (list []*model.Province, err error) {
  69. err = s.Dao.Where(base.BaseDistrict.Columns.ParentId, 0).Scan(&list)
  70. if err != nil {
  71. g.Log().Error(err)
  72. return
  73. }
  74. return
  75. }
  76. //GetRegionsProvinceList 区域下所有的省份
  77. func (s *districtService) GetRegionsProvinceList() (region []*model.Region, err error) {
  78. err = s.RegionDao.Fields(s.RegionDao.Columns.RegionDesc, s.RegionDao.Columns.Id).Scan(&region)
  79. if err != nil {
  80. g.Log().Error(err)
  81. return
  82. }
  83. var districtList []int
  84. for _, v := range region {
  85. districtList = append(districtList, v.Id)
  86. }
  87. list, err := s.Dao.M.As("dis").RightJoin("base_sales_region_detail deftail", "dis.id = deftail.province_code").
  88. Fields("dis.dist_name,dis.id,deftail.region_id").Where("deftail.region_id in (?)", districtList).All()
  89. if err != nil {
  90. g.Log().Error(err)
  91. return
  92. }
  93. ms := make(map[int][]*model.District)
  94. for _, v := range list.List() {
  95. ms[gconv.Int(v["region_id"])] = append(ms[gconv.Int(v["region_id"])], &model.District{
  96. Id: gconv.Int(v["id"]),
  97. RegionDesc: gconv.String(v["dist_name"]),
  98. RegionId: gconv.Int(v["region_id"]),
  99. })
  100. }
  101. for _, v := range region {
  102. v.Children = ms[v.Id]
  103. }
  104. return
  105. }