base_sales_region.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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. // UpdateById 修改区域
  43. func (s *salesRegionService) UpdateById(req *model.RegionUpdateReq) (err error) {
  44. _, err = s.Dao.Where("id", req.Id).Data(g.Map{"region_desc": req.RegionDesc}).Update()
  45. if err != nil {
  46. g.Log().Error(err)
  47. return
  48. }
  49. return nil
  50. }
  51. // DeleteById 删除区域
  52. func (s *salesRegionService) DeleteById(id int64) (err error) {
  53. _, err = s.Dao.Where("id", id).Delete()
  54. if err != nil {
  55. g.Log().Error(err)
  56. return
  57. }
  58. return nil
  59. }
  60. // GetRegionList 获取区域
  61. func (s *salesRegionService) GetRegionList() (RegionList []*model.Region, err error) {
  62. err = s.Dao.Order("id asc").Scan(&RegionList)
  63. if err != nil {
  64. g.Log().Error(err)
  65. return
  66. }
  67. return
  68. }
  69. // GetRegionTree 获取大区及下属地区
  70. func (s *salesRegionService) GetRegionTree(req *model.RegionTreeReq) (regionList []*model.Region, err error) {
  71. where1 := ""
  72. where2 := ""
  73. if req.IsPermission == "1" {
  74. // 系统管理员、总经理、销售总监、销售助理看到所有区域
  75. 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") {
  76. // 无条件,查询全部
  77. } else {
  78. // 大区经理:看到大区及所负责的其他区域;销售工程师:看到所负责的区域
  79. if data, ok := s.CxtUser.DataScope["cust_city_id"]; ok {
  80. if data != nil {
  81. idArr := data.([]interface{})
  82. ids := "-1"
  83. for _, id := range idArr {
  84. ids += "," + gconv.String(id)
  85. }
  86. where2 = fmt.Sprintf("cust_city_id IN (%v)", ids)
  87. }
  88. }
  89. }
  90. }
  91. detailDao := base.NewBaseSalesRegionDetailDao(s.Tenant)
  92. regionDetailsList := ([]*model.District)(nil)
  93. err = detailDao.Where(where2).Fields("region_id, cust_province_id as regionCode, cust_province as regionDesc").Group("cust_province_id").
  94. OrderAsc(detailDao.C.RegionId).Scan(&regionDetailsList)
  95. if err != nil {
  96. return
  97. }
  98. regionMap := make(map[int]int, 0)
  99. regionIds := "-1"
  100. for _, detail := range regionDetailsList {
  101. if _, ok := regionMap[detail.RegionId]; !ok {
  102. regionMap[detail.RegionId] = 1
  103. regionIds += "," + gconv.String(detail.RegionId)
  104. }
  105. }
  106. where1 += fmt.Sprintf("id IN (%v)", regionIds)
  107. err = s.Dao.Order("created_time asc").Where(where1).Scan(&regionList)
  108. if err != nil {
  109. return
  110. }
  111. for _, item := range regionList {
  112. item.Children = make([]*model.District, 0)
  113. for _, v := range regionDetailsList {
  114. if item.Id == v.RegionId {
  115. item.Children = append(item.Children, v)
  116. }
  117. }
  118. }
  119. return
  120. }