industry_fllow.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package cygx
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hz_crm_api/models"
  6. "hongze/hz_crm_api/models/cygx"
  7. "hongze/hz_crm_api/services/alarm_msg"
  8. "strconv"
  9. "time"
  10. )
  11. //func init() {
  12. // AddUserFllowCompanyLossToTryOut(1431)
  13. //}
  14. // 流失客户转试用给下面的用户自动添加产业关注
  15. func AddUserFllowCompanyLossToTryOut(companyId int) {
  16. var err error
  17. defer func() {
  18. if err != nil {
  19. fmt.Println(err)
  20. go alarm_msg.SendAlarmMsg("流失客户转试用给下面的用户自动添加产业关注。失败 ErrMsg:"+err.Error()+"companyId :"+strconv.Itoa(companyId), 2)
  21. }
  22. }()
  23. //获取机构下所有的用户
  24. userList, e := models.GetWxUserListCompanyId(companyId)
  25. if e != nil {
  26. err = errors.New("GetWxUserListByUserMobileHaveCompany" + e.Error())
  27. return
  28. }
  29. var condition string
  30. var pars []interface{}
  31. //所有的产业
  32. industrNamelist, e := cygx.GetTopOneMonthArtReadNumIndustryAll(condition, pars)
  33. if e != nil {
  34. err = errors.New("GetTopOneMonthArtReadNumIndustryAll, Err: " + e.Error())
  35. return
  36. }
  37. condition = " AND company_id = ? "
  38. pars = append(pars, companyId)
  39. userFllowList, e := cygx.GetCygxIndustryFllowList(condition, pars, 0, 0)
  40. if e != nil {
  41. err = errors.New("GetCygxIndustryFllowList, Err: " + e.Error())
  42. return
  43. }
  44. mapUserFllow := make(map[string]bool) // 用户已经关注了某些产业
  45. for _, v := range userFllowList {
  46. mapUserFllow[fmt.Sprint("Uid_", v.UserId, "IndustrialManagementId_", v.IndustrialManagementId)] = true //用户ID与产业ID组成唯一索引Map
  47. }
  48. var numk int
  49. var industryFllowItems []*cygx.CygxIndustryFllow
  50. var Items []*cygx.CygxIndustryFllow
  51. for _, vUser := range userList {
  52. for _, vIndustry := range industrNamelist {
  53. if mapUserFllow[fmt.Sprint("Uid_", vUser.UserId, "IndustrialManagementId_", vIndustry.IndustrialManagementId)] {
  54. continue
  55. }
  56. item := new(cygx.CygxIndustryFllow)
  57. item.IndustrialManagementId = vIndustry.IndustrialManagementId
  58. item.UserId = vUser.UserId
  59. item.Email = vUser.Email
  60. item.Mobile = vUser.Mobile
  61. item.RealName = vUser.RealName
  62. item.CompanyId = vUser.CompanyId
  63. item.CompanyName = vUser.CompanyName
  64. item.Source = 3 // 通过程序或者管理员手动添加的关注
  65. item.Type = 1
  66. item.CreateTime = time.Now()
  67. item.ModifyTime = time.Now()
  68. Items = append(Items, item)
  69. }
  70. }
  71. //如果小于五千条就直接插入,大于五千条就批量插入
  72. if len(Items) < 5000 {
  73. e = cygx.AddCygxIndustryFllowMulti(Items)
  74. if e != nil {
  75. err = errors.New("AddCygxIndustryFllowMulti , Err: " + e.Error())
  76. return
  77. }
  78. } else {
  79. for _, vUser := range Items {
  80. numk++
  81. item := new(cygx.CygxIndustryFllow)
  82. item.IndustrialManagementId = vUser.IndustrialManagementId
  83. item.UserId = vUser.UserId
  84. item.Email = vUser.Email
  85. item.Mobile = vUser.Mobile
  86. item.RealName = vUser.RealName
  87. item.CompanyId = vUser.CompanyId
  88. item.CompanyName = vUser.CompanyName
  89. item.Source = 3 // 通过程序或者管理员手动添加的关注
  90. item.Type = 1
  91. item.CreateTime = time.Now()
  92. item.ModifyTime = time.Now()
  93. industryFllowItems = append(industryFllowItems, item)
  94. //一次插入五千条
  95. if numk%5000 == 0 {
  96. e = cygx.AddCygxIndustryFllowMulti(industryFllowItems)
  97. if e != nil {
  98. err = errors.New("AddCygxIndustryFllowMulti , Err: " + e.Error())
  99. return
  100. }
  101. industryFllowItems = make([]*cygx.CygxIndustryFllow, 0)
  102. numk = 0
  103. }
  104. }
  105. if len(industryFllowItems) > 0 {
  106. e = cygx.AddCygxIndustryFllowMulti(industryFllowItems)
  107. if e != nil {
  108. err = errors.New("AddCygxIndustryFllowMulti , Err: " + e.Error())
  109. return
  110. }
  111. }
  112. }
  113. return
  114. }