tags_service.go 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package member_service
  2. import (
  3. "SCRM/models"
  4. "SCRM/service"
  5. "errors"
  6. "strings"
  7. "time"
  8. "github.com/jinzhu/gorm"
  9. )
  10. func GetTagList(orgID int64) (tags []*models.UserTags, err error) {
  11. err = service.UserReadDB().Model(&models.UserTags{}).Where("user_org_id=? and status=1", orgID).Order("id asc").Find(&tags).Error
  12. return
  13. }
  14. //GetMemberAllTags 取所有(包括已经软删除的记录)
  15. func GetMemberAllTags(orgID, customerID int64) (tags []*models.UserTagLinks, err error) {
  16. err = service.UserReadDB().Where("user_org_id = ? and user_link_id =? ", orgID, customerID).Find(&tags).Error
  17. return
  18. }
  19. //GetMembersAllTags 取所有(包括已经软删除的记录)
  20. func GetMembersAllTags(orgID int64, customerIDs []int64) (tags []*models.UserTagLinks, err error) {
  21. err = service.UserReadDB().Where("user_org_id = ? and user_link_id in (?) ", orgID, customerIDs).Find(&tags).Error
  22. return
  23. }
  24. //DeleteMemeberAllTags 删除会员所有标签
  25. func DeleteMemeberAllTags(orgID, customerID int64) (err error) {
  26. err = service.UserWriteDB().Model(&models.UserTagLinks{}).Where("user_org_id = ? and user_link_id =? ", orgID, customerID).Update(map[string]interface{}{"Status": 0, "UpdatedTime": time.Now().Unix()}).Error
  27. return
  28. }
  29. func SaveMemberTags(tags []*models.UserTagLinks) (err error) {
  30. if len(tags) == 0 {
  31. err = errors.New("NotRecordToUpdate")
  32. return
  33. }
  34. insertSql := "INSERT INTO sgj_user_tag_links (tag_id, user_link_id, status, created_time, updated_time, user_org_id) VALUES "
  35. insertParams := make([]string, 0)
  36. insertData := make([]interface{}, 0)
  37. updateIds := make([]int64, 0)
  38. deleteIds := make([]int64, 0)
  39. for _, tag := range tags {
  40. if tag.ID == 0 {
  41. insertParams = append(insertParams, "(?,?,?,?,?,?)")
  42. insertData = append(insertData, tag.TagId)
  43. insertData = append(insertData, tag.UserLinkId)
  44. insertData = append(insertData, tag.Status)
  45. insertData = append(insertData, tag.CreatedTime)
  46. insertData = append(insertData, tag.UpdatedTime)
  47. insertData = append(insertData, tag.UserOrgId)
  48. } else {
  49. if tag.Status == 1 {
  50. updateIds = append(updateIds, tag.ID)
  51. } else {
  52. deleteIds = append(deleteIds, tag.ID)
  53. }
  54. }
  55. }
  56. tx := service.UserWriteDB().Begin()
  57. if len(insertParams) > 0 {
  58. insertSql += strings.Join(insertParams, ", ")
  59. err = tx.Exec(insertSql, insertData...).Error
  60. if err != nil {
  61. tx.Rollback()
  62. return
  63. }
  64. }
  65. if len(updateIds) > 0 {
  66. err = service.UserWriteDB().Model(&models.UserTagLinks{}).Where("id IN (?)", updateIds).Update(map[string]interface{}{"Status": 1, "UpdatedTime": time.Now().Unix()}).Error
  67. if err != nil {
  68. tx.Rollback()
  69. return
  70. }
  71. }
  72. if len(deleteIds) > 0 {
  73. err = service.UserWriteDB().Model(&models.UserTagLinks{}).Where("id IN (?)", deleteIds).Update(map[string]interface{}{"Status": 0, "UpdatedTime": time.Now().Unix()}).Error
  74. if err != nil {
  75. tx.Rollback()
  76. return
  77. }
  78. }
  79. tx.Commit()
  80. return
  81. }
  82. func GetPageTagList(orgID, page, limit int64, search string) (tags []*Tags, total int64, err error) {
  83. db := service.UserReadDB().Model(&models.UserTags{}).Where("user_org_id=? and status=1", orgID)
  84. if len(search) > 0 {
  85. searchKey := "%" + search + "%"
  86. db = db.Where("tag_name LIKE ?", searchKey)
  87. }
  88. offset := (page - 1) * limit
  89. err = db.Count(&total).Order("id desc").Offset(offset).Limit(limit).Find(&tags).Error
  90. if len(tags) > 0 {
  91. var tmcs []*TagsMemberCount
  92. tagIDs := make([]int64, 0)
  93. for _, tag := range tags {
  94. tagIDs = append(tagIDs, tag.ID)
  95. }
  96. err = service.UserReadDB().Table("sgj_user_tag_links as utl").Joins("JOIN sgj_user_tags AS ut ON ut.id=utl.tag_id and utl.user_org_id=? and ut.user_org_id=?", orgID, orgID).Select("utl.tag_id, COUNT(utl.tag_id) AS member_count").Where("utl.tag_id IN (?)", tagIDs).Group("utl.tag_id").Scan(&tmcs).Error
  97. if err != nil {
  98. return
  99. }
  100. if len(tmcs) > 0 {
  101. tmcsMap := make(map[int64]int64, 0)
  102. for _, tmc := range tmcs {
  103. tmcsMap[tmc.TagID] = tmc.MemberCount
  104. }
  105. for index, tag := range tags {
  106. if _, exist := tmcsMap[tag.ID]; exist {
  107. tags[index].MemberCount = tmcsMap[tag.ID]
  108. }
  109. }
  110. }
  111. }
  112. return
  113. }
  114. func FindTagByName(orgID int64, name string) (*models.UserTags, error) {
  115. var tag models.UserTags
  116. var err error
  117. err = service.UserReadDB().Model(&models.UserTags{}).Where("tag_name=? and user_org_id=? and status=1", name, orgID).First(&tag).Error
  118. if err == gorm.ErrRecordNotFound {
  119. return nil, nil
  120. }
  121. if err != nil {
  122. return nil, err
  123. }
  124. return &tag, nil
  125. }
  126. func SaveTag(tag *models.UserTags) (err error) {
  127. err = service.UserWriteDB().Save(tag).Error
  128. return
  129. }
  130. func FindOnlyTagByID(orgID, id int64) (*models.UserTags, error) {
  131. var tag models.UserTags
  132. var err error
  133. err = service.UserReadDB().Model(&models.UserTags{}).Where("id=? and user_org_id=? and status=1", id, orgID).First(&tag).Error
  134. if err == gorm.ErrRecordNotFound {
  135. return nil, nil
  136. }
  137. if err != nil {
  138. return nil, err
  139. }
  140. return &tag, nil
  141. }
  142. func DeleteTags(orgID int64, ids []int64) (err error) {
  143. if len(ids) == 1 {
  144. err = service.UserWriteDB().Model(&models.UserTags{}).Where("id =? and user_org_id =?", ids[0], orgID).Update(map[string]interface{}{"Status": 0, "UpdatedTime": time.Now().Unix()}).Error
  145. } else {
  146. err = service.UserWriteDB().Model(&models.UserTags{}).Where("id IN (?) and user_org_id =?", ids, orgID).Update(map[string]interface{}{"Status": 0, "UpdatedTime": time.Now().Unix()}).Error
  147. }
  148. return
  149. }
  150. // 获取 tag ids 下有手机号的客户的数量
  151. func GetTagUsersCountWithMobileByTagIDs(tagIDs []string) (int, error) {
  152. var count int
  153. err := service.UserReadDB().Table("sgj_user_customer AS uc").
  154. Joins("JOIN sgj_user_tag_links AS tl on uc.id = tl.user_link_id").
  155. Where("tl.tag_id IN (?) and tl.status = 1 and uc.status=1 and uc.mobile <>'' ", tagIDs).
  156. Group("uc.id").
  157. Count(&count).
  158. Error
  159. return count, err
  160. }