base_region_auth.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. package service
  2. import (
  3. "context"
  4. "dashoo.cn/micro/app/dao"
  5. "dashoo.cn/micro/app/model"
  6. "database/sql"
  7. "fmt"
  8. "github.com/gogf/gf/errors/gerror"
  9. "github.com/gogf/gf/frame/g"
  10. "github.com/gogf/gf/os/gtime"
  11. "github.com/gogf/gf/util/gconv"
  12. )
  13. type regionService struct {
  14. *contextService
  15. Dao *dao.BaseRegionAuthDao
  16. }
  17. func NewRegionService(ctx context.Context) (svc *regionService, err error) {
  18. svc = new(regionService)
  19. if svc.contextService, err = svc.Init(ctx); err != nil {
  20. return nil, err
  21. }
  22. svc.Dao = dao.NewBaseRegionAuthDao(svc.Tenant)
  23. svc.Table = svc.Dao.Table
  24. return svc, nil
  25. }
  26. // GetList 用户产品线列表
  27. func (s *regionService) GetList(req *model.BaseRegionAuthSearchReq) (regions []*model.BaseRegionAuth, err error) {
  28. regionModel := s.Dao.M
  29. if req.UserId != 0 {
  30. regionModel = regionModel.Where("user_id", req.UserId)
  31. }
  32. if req.UserName != "" {
  33. regionModel = regionModel.Where("user_name", req.UserName)
  34. }
  35. if req.UserPost != "" {
  36. regionModel = regionModel.Where("user_post", req.UserPost)
  37. }
  38. if req.UserPhone != "" {
  39. regionModel = regionModel.Where("user_phone", req.UserPhone)
  40. }
  41. if req.SaleRegionId != 0 {
  42. regionModel = regionModel.Where("sale_region_id", req.SaleRegionId)
  43. }
  44. if req.SaleRegionName != "" {
  45. regionModel = regionModel.Where("sale_region_name", req.SaleRegionName)
  46. }
  47. if req.ProvinceId != 0 {
  48. regionModel = regionModel.Where("province_id", req.ProvinceId)
  49. }
  50. if req.ProvinceName != "" {
  51. regionModel = regionModel.Where("province_name", req.ProvinceName)
  52. }
  53. if req.CityId != 0 {
  54. regionModel = regionModel.Where("city_id", req.CityId)
  55. }
  56. if req.CityName != "" {
  57. regionModel = regionModel.Where("city_name", req.CityName)
  58. }
  59. err = regionModel.Order("id ASC").Scan(&regions)
  60. if err != nil {
  61. g.Log().Error(err)
  62. err = gerror.New("获取数据失败")
  63. }
  64. return
  65. }
  66. // Save 创建或更新数据
  67. func (s *regionService) Save(req *model.SaveBaseRegionAuthReq) (err error) {
  68. var newRegions []*model.BaseRegionAuth
  69. // 标记删除旧数据
  70. oldRegions, err := s.Dao.Where(fmt.Sprintf("user_id='%v' AND sale_region_id='%v'", req.UserId, req.SaleRegionId)).FindAll()
  71. if err != nil {
  72. return err
  73. }
  74. // 填入新数据
  75. for _, region := range req.Regions {
  76. isNew := true
  77. for _, old := range oldRegions {
  78. if region.ProvinceId == old.ProvinceId && region.CityId == old.CityId {
  79. isNew = false
  80. break
  81. }
  82. }
  83. if isNew {
  84. data := &model.BaseRegionAuth{
  85. UserId: req.UserId,
  86. UserName: req.UserName,
  87. UserPhone: req.UserPhone,
  88. UserPost: req.UserPost,
  89. SaleRegionId: req.SaleRegionId,
  90. SaleRegionName: req.SaleRegionName,
  91. ProvinceId: region.ProvinceId,
  92. ProvinceName: region.ProvinceName,
  93. CityId: region.CityId,
  94. CityName: region.CityName,
  95. Remark: region.Remark,
  96. }
  97. SetCreatedInfo(data, s.GetCxtUserId(), s.GetCxtUserName())
  98. SetUpdatedInfo(data, s.GetCxtUserId(), s.GetCxtUserName())
  99. newRegions = append(newRegions, data)
  100. }
  101. }
  102. // 标记删除旧数据
  103. for index, old := range oldRegions {
  104. isDelete := true
  105. for _, region := range req.Regions {
  106. if region.ProvinceId == old.ProvinceId && region.CityId == old.CityId {
  107. isDelete = false
  108. break
  109. }
  110. }
  111. if isDelete {
  112. // 标记删除
  113. oldRegions[index].DeletedTime = gtime.Now()
  114. // 将删除数据存入切片中
  115. newRegions = append(newRegions, oldRegions[index])
  116. }
  117. }
  118. if len(newRegions) > 0 {
  119. _, err = s.Dao.Save(newRegions)
  120. }
  121. return
  122. }
  123. func (s *regionService) GetRegionUsers(req *model.SysUserSearchReq) (total int, regions []*model.ReturnBaseRegionAuth, err error) {
  124. userService, err := NewUserService(s.Ctx)
  125. if err != nil {
  126. return 0, nil, err
  127. }
  128. total, users, err := userService.GetUsersByDeptEx(req)
  129. if err != nil {
  130. return 0, nil, err
  131. }
  132. var userIds []int
  133. for _, user := range users {
  134. userIds = append(userIds, user.Id)
  135. }
  136. allRegions, err := s.Dao.Where("user_id IN (?)", userIds).Order("user_id ASC, id ASC").FindAll()
  137. if err != nil && err != sql.ErrNoRows {
  138. return 0, nil, err
  139. }
  140. for _, user := range users {
  141. var data model.ReturnBaseRegionAuth
  142. data.UserId = user.Id
  143. data.UserName = user.NickName
  144. data.UserPost = "" // TODO 暂时为空
  145. data.UserPhone = user.Phone
  146. for _, region := range allRegions {
  147. if user.Id == region.UserId {
  148. if data.RegionInfo == "" {
  149. data.SaleRegionId = gconv.String(region.SaleRegionId)
  150. data.SaleRegionName = region.SaleRegionName
  151. data.ProvinceId = gconv.String(region.ProvinceId)
  152. data.ProvinceName = region.ProvinceName
  153. data.CityId = gconv.String(region.CityId)
  154. data.CityName = region.CityName
  155. data.RegionInfo = region.SaleRegionName + "-" + region.ProvinceName + "-" + region.CityName
  156. } else {
  157. data.SaleRegionId += "," + gconv.String(region.SaleRegionId)
  158. data.SaleRegionName += "," + region.SaleRegionName
  159. data.ProvinceId += "," + gconv.String(region.ProvinceId)
  160. data.ProvinceName += "," + region.ProvinceName
  161. data.CityId += "," + gconv.String(region.CityId)
  162. data.CityName += "," + region.CityName
  163. data.RegionInfo += region.SaleRegionName + "-" + region.ProvinceName + "-" + region.CityName
  164. }
  165. }
  166. }
  167. regions = append(regions, &data)
  168. }
  169. return
  170. }