base_sales_region.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package base
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/gogf/gf/frame/g"
  6. "github.com/gogf/gf/os/gtime"
  7. "github.com/gogf/gf/util/gconv"
  8. "strconv"
  9. "dashoo.cn/micro/app/dao/base"
  10. model "dashoo.cn/micro/app/model/base"
  11. "dashoo.cn/micro/app/service"
  12. )
  13. type salesRegionService struct {
  14. *service.ContextService
  15. Dao *base.BaseSalesRegionDao
  16. Detail *base.BaseSalesRegionDetailDao
  17. }
  18. func NewSalesRegionService(ctx context.Context) (svc *salesRegionService, err error) {
  19. svc = new(salesRegionService)
  20. if svc.ContextService, err = svc.Init(ctx); err != nil {
  21. return nil, err
  22. }
  23. svc.Dao = base.NewBaseSalesRegionDao(svc.Tenant)
  24. svc.Detail = base.NewBaseSalesRegionDetailDao(svc.Tenant)
  25. return svc, nil
  26. }
  27. // Create 创建区域
  28. func (s *salesRegionService) Create(req *model.AddRegionReq) (err error) {
  29. regionData := new(model.BaseSalesRegion)
  30. if err = gconv.Struct(req, regionData); err != nil {
  31. return
  32. }
  33. service.SetCreatedInfo(regionData, s.GetCxtUserId(), s.GetCxtUserName())
  34. regionData.RegionCode = strconv.Itoa(int(gtime.Timestamp()))
  35. _, err = s.Dao.Insert(regionData)
  36. if err != nil {
  37. g.Log().Error(err)
  38. return
  39. }
  40. return nil
  41. }
  42. // GetRegionList 获取区域
  43. func (s *salesRegionService) GetRegionList() (RegionList []*model.Region, err error) {
  44. err = s.Dao.Order("id asc").Scan(&RegionList)
  45. if err != nil {
  46. g.Log().Error(err)
  47. return
  48. }
  49. return
  50. }
  51. // GetRegionTree 获取大区及下属地区
  52. func (s *salesRegionService) GetRegionTree(req *model.RegionTreeReq) (regionList []*model.Region, err error) {
  53. where1 := ""
  54. where2 := ""
  55. if req.IsPermission == "1" {
  56. // 系统管理员、总经理、销售总监、销售助理看到所有区域
  57. if service.StringsContains(s.CxtUser.Roles, "GeneralManager") || service.StringsContains(s.CxtUser.Roles, "SalesDirector") || service.StringsContains(s.CxtUser.Roles, "SaleAssociate") || service.StringsContains(s.CxtUser.Roles, "SysAdmin") {
  58. // 无条件,查询全部
  59. } else {
  60. // 大区经理:看到大区及所负责的其他区域;销售工程师:看到所负责的区域
  61. if data, ok := s.CxtUser.DataScope["cust_city_id"]; ok {
  62. if data != nil {
  63. idArr := data.([]interface{})
  64. ids := "-1"
  65. for _, id := range idArr {
  66. ids += "," + gconv.String(id)
  67. }
  68. where2 = fmt.Sprintf("cust_city_id IN (%v)", ids)
  69. }
  70. }
  71. }
  72. }
  73. detailDao := base.NewBaseSalesRegionDetailDao(s.Tenant)
  74. regionDetailsList := ([]*model.District)(nil)
  75. err = detailDao.Where(where2).Fields("region_id, cust_province_id as regionCode, cust_province as regionDesc").Group("cust_province_id").
  76. OrderAsc(detailDao.C.RegionId).Scan(&regionDetailsList)
  77. if err != nil {
  78. return
  79. }
  80. regionMap := make(map[int]int, 0)
  81. regionIds := "-1"
  82. for _, detail := range regionDetailsList {
  83. if _, ok := regionMap[detail.RegionId]; !ok {
  84. regionMap[detail.RegionId] = 1
  85. regionIds += "," + gconv.String(detail.RegionId)
  86. }
  87. }
  88. where1 += fmt.Sprintf("id IN (%v)", regionIds)
  89. err = s.Dao.Order("created_time asc").Where(where1).Scan(&regionList)
  90. if err != nil {
  91. return
  92. }
  93. for _, item := range regionList {
  94. item.Children = make([]*model.District, 0)
  95. for _, v := range regionDetailsList {
  96. if item.Id == v.RegionId {
  97. item.Children = append(item.Children, v)
  98. }
  99. }
  100. }
  101. return
  102. }