123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- package member_service
-
- import (
- "SCRM/models"
- "SCRM/service"
- "errors"
- "strings"
- "time"
-
- "github.com/jinzhu/gorm"
- )
-
- func GetTagList(orgID int64) (tags []*models.UserTags, err error) {
- err = service.UserReadDB().Model(&models.UserTags{}).Where("user_org_id=? and status=1", orgID).Order("id asc").Find(&tags).Error
-
- return
- }
-
- //GetMemberAllTags 取所有(包括已经软删除的记录)
- func GetMemberAllTags(orgID, customerID int64) (tags []*models.UserTagLinks, err error) {
- err = service.UserReadDB().Where("user_org_id = ? and user_link_id =? ", orgID, customerID).Find(&tags).Error
- return
- }
-
- //GetMembersAllTags 取所有(包括已经软删除的记录)
- func GetMembersAllTags(orgID int64, customerIDs []int64) (tags []*models.UserTagLinks, err error) {
- err = service.UserReadDB().Where("user_org_id = ? and user_link_id in (?) ", orgID, customerIDs).Find(&tags).Error
- return
- }
-
- //DeleteMemeberAllTags 删除会员所有标签
- func DeleteMemeberAllTags(orgID, customerID int64) (err error) {
- 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
- return
- }
-
- func SaveMemberTags(tags []*models.UserTagLinks) (err error) {
- if len(tags) == 0 {
- err = errors.New("NotRecordToUpdate")
- return
- }
-
- insertSql := "INSERT INTO sgj_user_tag_links (tag_id, user_link_id, status, created_time, updated_time, user_org_id) VALUES "
- insertParams := make([]string, 0)
- insertData := make([]interface{}, 0)
- updateIds := make([]int64, 0)
- deleteIds := make([]int64, 0)
- for _, tag := range tags {
- if tag.ID == 0 {
- insertParams = append(insertParams, "(?,?,?,?,?,?)")
- insertData = append(insertData, tag.TagId)
- insertData = append(insertData, tag.UserLinkId)
- insertData = append(insertData, tag.Status)
- insertData = append(insertData, tag.CreatedTime)
- insertData = append(insertData, tag.UpdatedTime)
- insertData = append(insertData, tag.UserOrgId)
- } else {
- if tag.Status == 1 {
- updateIds = append(updateIds, tag.ID)
- } else {
- deleteIds = append(deleteIds, tag.ID)
- }
- }
- }
-
- tx := service.UserWriteDB().Begin()
- if len(insertParams) > 0 {
- insertSql += strings.Join(insertParams, ", ")
- err = tx.Exec(insertSql, insertData...).Error
- if err != nil {
- tx.Rollback()
- return
- }
- }
-
- if len(updateIds) > 0 {
- err = service.UserWriteDB().Model(&models.UserTagLinks{}).Where("id IN (?)", updateIds).Update(map[string]interface{}{"Status": 1, "UpdatedTime": time.Now().Unix()}).Error
- if err != nil {
- tx.Rollback()
- return
- }
- }
- if len(deleteIds) > 0 {
- err = service.UserWriteDB().Model(&models.UserTagLinks{}).Where("id IN (?)", deleteIds).Update(map[string]interface{}{"Status": 0, "UpdatedTime": time.Now().Unix()}).Error
- if err != nil {
- tx.Rollback()
- return
- }
- }
-
- tx.Commit()
- return
- }
-
- func GetPageTagList(orgID, page, limit int64, search string) (tags []*Tags, total int64, err error) {
- db := service.UserReadDB().Model(&models.UserTags{}).Where("user_org_id=? and status=1", orgID)
-
- if len(search) > 0 {
- searchKey := "%" + search + "%"
- db = db.Where("tag_name LIKE ?", searchKey)
- }
- offset := (page - 1) * limit
-
- err = db.Count(&total).Order("id desc").Offset(offset).Limit(limit).Find(&tags).Error
-
- if len(tags) > 0 {
- var tmcs []*TagsMemberCount
- tagIDs := make([]int64, 0)
- for _, tag := range tags {
- tagIDs = append(tagIDs, tag.ID)
- }
- 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
- if err != nil {
- return
- }
- if len(tmcs) > 0 {
- tmcsMap := make(map[int64]int64, 0)
- for _, tmc := range tmcs {
- tmcsMap[tmc.TagID] = tmc.MemberCount
- }
-
- for index, tag := range tags {
- if _, exist := tmcsMap[tag.ID]; exist {
- tags[index].MemberCount = tmcsMap[tag.ID]
- }
- }
-
- }
-
- }
- return
- }
-
- func FindTagByName(orgID int64, name string) (*models.UserTags, error) {
- var tag models.UserTags
- var err error
- err = service.UserReadDB().Model(&models.UserTags{}).Where("tag_name=? and user_org_id=? and status=1", name, orgID).First(&tag).Error
- if err == gorm.ErrRecordNotFound {
- return nil, nil
- }
- if err != nil {
- return nil, err
- }
- return &tag, nil
- }
-
- func SaveTag(tag *models.UserTags) (err error) {
- err = service.UserWriteDB().Save(tag).Error
- return
- }
-
- func FindOnlyTagByID(orgID, id int64) (*models.UserTags, error) {
- var tag models.UserTags
- var err error
- err = service.UserReadDB().Model(&models.UserTags{}).Where("id=? and user_org_id=? and status=1", id, orgID).First(&tag).Error
- if err == gorm.ErrRecordNotFound {
- return nil, nil
- }
- if err != nil {
- return nil, err
- }
- return &tag, nil
- }
-
- func DeleteTags(orgID int64, ids []int64) (err error) {
- if len(ids) == 1 {
- 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
- } else {
- 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
- }
- return
- }
-
- // 获取 tag ids 下有手机号的客户的数量
- func GetTagUsersCountWithMobileByTagIDs(tagIDs []string) (int, error) {
- var count int
- err := service.UserReadDB().Table("sgj_user_customer AS uc").
- Joins("JOIN sgj_user_tag_links AS tl on uc.id = tl.user_link_id").
- Where("tl.tag_id IN (?) and tl.status = 1 and uc.status=1 and uc.mobile <>'' ", tagIDs).
- Group("uc.id").
- Count(&count).
- Error
- return count, err
- }
|