activity_wx_msg.go 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. package cygx
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hz_crm_api/models"
  6. "hongze/hz_crm_api/models/company"
  7. "hongze/hz_crm_api/models/cygx"
  8. "hongze/hz_crm_api/services"
  9. "hongze/hz_crm_api/services/alarm_msg"
  10. "hongze/hz_crm_api/utils"
  11. "strconv"
  12. )
  13. // 修改活动人数限制之后,对于因为人数已满而失败的用户,推送模板消息
  14. func SendWxMsgWithCygxActivityUpdateLimitPeople(activityId int) (err error) {
  15. var msg string
  16. defer func() {
  17. if err != nil {
  18. fmt.Println(err)
  19. go alarm_msg.SendAlarmMsg("修改活动人数限制之后,对于因为人数已满而失败的用户,推送模板消息,发送模版消息失败,Err:"+err.Error()+";msg:"+msg, 3)
  20. utils.FileLogCygx.Info(fmt.Sprintf("发送模版消息失败,Err:%s,%s", err.Error(), msg))
  21. }
  22. }()
  23. activityInfo, e := cygx.GetAddActivityInfoById(activityId)
  24. if e != nil {
  25. err = errors.New("活动不存在, Err: " + e.Error())
  26. return
  27. }
  28. if activityInfo == nil {
  29. return
  30. }
  31. //已经推送过的不做二次推送
  32. listSendOpendId, err := models.GeUserTemplateRecordListBysendType(utils.TEMPLATE_MSG_CYGX_ACTIVITY_LIMIT_PEOPLE, strconv.Itoa(activityId))
  33. if err != nil && err.Error() != utils.ErrNoRow() {
  34. return err
  35. }
  36. mapSendOpenid := make(map[string]int)
  37. for _, v := range listSendOpendId {
  38. mapSendOpenid[v.OpenId] = v.UserId
  39. }
  40. var condition string
  41. var pars []interface{}
  42. condition = ` AND do_fail_type = 1 AND activity_id = ? `
  43. pars = append(pars, activityId)
  44. listSignup, e := cygx.GetActivitySignupList(condition, pars)
  45. if e != nil {
  46. err = errors.New("GetResourceDataList, Err: " + e.Error())
  47. return
  48. }
  49. var mobileArr []string
  50. for _, v := range listSignup {
  51. if v.Mobile != "" {
  52. mobileArr = append(mobileArr, v.Mobile)
  53. }
  54. }
  55. mobileLen := len(mobileArr)
  56. if mobileLen == 0 {
  57. return
  58. }
  59. //condition = ""
  60. //pars = make([]interface{}, 0)
  61. //condition += ` AND u.mobile IN (` + utils.GetOrmInReplace(mobileLen) + `)`
  62. //pars = append(pars, mobileArr)
  63. openIdList, e := cygx.GetUserRecordListByMobileArr(mobileArr)
  64. if e != nil {
  65. err = errors.New("GetWxOpenIdBList, Err: " + e.Error())
  66. return
  67. }
  68. if len(openIdList) == 0 {
  69. return
  70. }
  71. openIdArr := make([]string, len(openIdList))
  72. for i, v := range openIdList {
  73. if mapSendOpenid[v.OpenId] > 0 {
  74. continue
  75. }
  76. openIdArr[i] = v.OpenId
  77. }
  78. first := "您好,本场活动已增加活动名额至" + activityInfo.LimitPeopleNum + "人,欢迎报名"
  79. keyword1 := activityInfo.ActivityName
  80. keyword2 := "已增加活动名额至" + activityInfo.LimitPeopleNum + "人,欢迎报名"
  81. keyword3 := ""
  82. keyword4 := ""
  83. remark := "点击查看活动详情"
  84. redirectUrl := utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
  85. sendInfo := new(services.SendWxTemplate)
  86. sendInfo.First = first
  87. sendInfo.Keyword1 = keyword1
  88. sendInfo.Keyword2 = keyword2
  89. sendInfo.Keyword3 = keyword3
  90. sendInfo.Keyword4 = keyword4
  91. sendInfo.Remark = remark
  92. sendInfo.TemplateId = utils.WxMsgTemplateIdActivityChangeApplyXzs
  93. sendInfo.RedirectUrl = redirectUrl
  94. sendInfo.RedirectTarget = 3
  95. sendInfo.Resource = strconv.Itoa(activityId)
  96. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_LIMIT_PEOPLE
  97. sendInfo.OpenIdArr = openIdArr
  98. e = services.SendTemplateMsg(sendInfo)
  99. if e != nil {
  100. err = errors.New("SendTemplateMsg, Err: " + e.Error())
  101. return
  102. }
  103. return
  104. }
  105. // 销售或后台管理员给用户添加报名之后,进行模版消息推送
  106. func SendWxMsgWithCygxActivitySignUpBySell(items []*cygx.CygxSignupUser) (err error) {
  107. var msg string
  108. defer func() {
  109. if err != nil {
  110. fmt.Println(err)
  111. go alarm_msg.SendAlarmMsg("修改活动人数限制之后,对于因为人数已满而失败的用户,推送模板消息,发送模版消息失败,Err:"+err.Error()+";msg:"+msg, 3)
  112. utils.FileLogCygx.Info(fmt.Sprintf("发送模版消息失败,Err:%s,%s", err.Error(), msg))
  113. }
  114. }()
  115. if len(items) == 0 {
  116. return
  117. }
  118. //var condition string
  119. //var pars []interface{}
  120. for _, v := range items {
  121. activityId := v.ActivityId
  122. uid := v.UserId
  123. activityInfo, e := cygx.GetAddActivityInfoById(activityId)
  124. if e != nil {
  125. err = errors.New("活动不存在, Err: " + e.Error())
  126. return
  127. }
  128. if activityInfo == nil {
  129. return
  130. }
  131. wxUser, e := models.GetWxUserByUserId(uid)
  132. if e != nil {
  133. err = errors.New("查询用户信息失败, Err: " + e.Error())
  134. return
  135. }
  136. var mobileArr []string
  137. mobileArr = append(mobileArr, wxUser.Mobile)
  138. mobileLen := len(mobileArr)
  139. if mobileLen == 0 {
  140. return
  141. }
  142. //condition = ""
  143. //pars = make([]interface{}, 0)
  144. //condition += ` AND u.mobile IN (` + utils.GetOrmInReplace(mobileLen) + `)`
  145. //pars = append(pars, mobileArr)
  146. openIdList, e := cygx.GetUserRecordListByMobileArr(mobileArr)
  147. if e != nil {
  148. err = errors.New("GetWxOpenIdBList, Err: " + e.Error())
  149. return
  150. }
  151. if len(openIdList) == 0 {
  152. return
  153. }
  154. openIdArr := make([]string, len(openIdList))
  155. for i, v := range openIdList {
  156. fmt.Println(v.OpenId)
  157. openIdArr[i] = v.OpenId
  158. }
  159. first := "对口销售已为您报名本场活动"
  160. keyword1 := "销售已为您报名:" + activityInfo.ActivityName
  161. keyword2 := activityInfo.ActivityTimeText
  162. keyword3 := ""
  163. keyword4 := ""
  164. remark := "点击查看活动详情"
  165. redirectUrl := utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
  166. sendInfo := new(services.SendWxTemplate)
  167. sendInfo.First = first
  168. sendInfo.Keyword1 = keyword1
  169. sendInfo.Keyword2 = keyword2
  170. sendInfo.Keyword3 = keyword3
  171. sendInfo.Keyword4 = keyword4
  172. sendInfo.Remark = remark
  173. sendInfo.TemplateId = utils.WxMsgTemplateIdActivityApplyXzs
  174. sendInfo.RedirectUrl = redirectUrl
  175. sendInfo.RedirectTarget = 3
  176. sendInfo.Resource = strconv.Itoa(activityId)
  177. sendInfo.SendType = utils.TEMPLATE_MSG_ACTIVITY_APPOINTMENT
  178. sendInfo.OpenIdArr = openIdArr
  179. e = services.SendTemplateMsg(sendInfo)
  180. if e != nil {
  181. err = errors.New("SendTemplateMsg, Err: " + e.Error())
  182. return
  183. }
  184. }
  185. return
  186. }
  187. // 已结束的活动上传音频或视频后给已关注这个活动关联的产业的正式、试用 客户发送模板信息
  188. func SendWxMsgWithUpdateActivityVideoAndVoice(activityId int, fileName string) (err error) {
  189. defer func() {
  190. if err != nil {
  191. fmt.Println(err)
  192. go alarm_msg.SendAlarmMsg(fmt.Sprint("已结束的活动上传音频或视频后给已关注这个活动关联的产业的正式、试用 客户发送模板信息失败,Err:"+err.Error()+";activityId:", activityId), 3)
  193. //utils.FileLogCygx.Info(fmt.Sprintf("发送模版消息失败,Err:%s,%s", err.Error(), msg))
  194. }
  195. }()
  196. activityInfo, e := cygx.GetAddActivityInfoById(activityId)
  197. if e != nil {
  198. err = errors.New("活动不存在, Err: " + e.Error())
  199. return
  200. }
  201. if activityInfo == nil {
  202. return
  203. }
  204. industrialList, e := cygx.GetIndustrialActivityGroupListByactivityIds(strconv.Itoa(activityId))
  205. if e != nil && e.Error() != utils.ErrNoRow() {
  206. err = errors.New("GetIndustrialActivityGroupListByactivityIds: " + e.Error())
  207. return
  208. }
  209. //if len(industrialList) == 0 {
  210. // return
  211. //}
  212. var industrialManagementIds []int
  213. for _, v := range industrialList {
  214. industrialManagementIds = append(industrialManagementIds, v.IndustrialManagementId)
  215. }
  216. lenindustrialManagementIds := len(industrialManagementIds)
  217. if lenindustrialManagementIds == 0 {
  218. return
  219. }
  220. var condition string
  221. var pars []interface{}
  222. //获取试用正式权益客户
  223. condition = " AND product_id = 2 AND `status` IN('正式','试用') "
  224. listCompany, e := company.GetCompanyProductList(condition, pars)
  225. if e != nil && e.Error() != utils.ErrNoRow() {
  226. err = errors.New("GetCompanyProductList, Err: " + e.Error())
  227. return
  228. }
  229. var companyIds []int
  230. for _, v := range listCompany {
  231. companyIds = append(companyIds, v.CompanyId)
  232. }
  233. lencompanyIds := len(companyIds)
  234. if lencompanyIds == 0 {
  235. return
  236. }
  237. //根据产业关注ID,与有权限的公司ID获取对应的用户列表
  238. condition = " AND industrial_management_id IN (" + utils.GetOrmInReplace(lenindustrialManagementIds) + ") AND company_id IN (" + utils.GetOrmInReplace(lencompanyIds) + ") "
  239. pars = append(pars, industrialManagementIds, companyIds)
  240. userFllowList, e := cygx.GetCygxIndustryFllowList(condition, pars, 0, 0)
  241. if e != nil && e.Error() != utils.ErrNoRow() {
  242. err = errors.New("GetCygxIndustryFllowList, Err: " + e.Error())
  243. return
  244. }
  245. //获取这些用户的手机号
  246. var mobileArr []string
  247. for _, v := range userFllowList {
  248. mobileArr = append(mobileArr, v.Mobile)
  249. }
  250. mobileLen := len(mobileArr)
  251. if mobileLen == 0 {
  252. return
  253. }
  254. openIdList, e := cygx.GetUserRecordListByMobileArr(mobileArr)
  255. if e != nil {
  256. err = errors.New("GetWxOpenIdBList, Err: " + e.Error())
  257. return
  258. }
  259. if len(openIdList) == 0 {
  260. return
  261. }
  262. openIdArr := make([]string, len(openIdList))
  263. for _, v := range openIdList {
  264. openIdArr = append(openIdArr, v.OpenId)
  265. }
  266. keyword1 := fileName
  267. keyword2 := "路演回放已发布,欢迎查看"
  268. keyword3 := ""
  269. keyword4 := ""
  270. redirectUrl := utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
  271. sendInfo := new(services.SendWxTemplate)
  272. sendInfo.Keyword1 = keyword1
  273. sendInfo.Keyword2 = keyword2
  274. sendInfo.Keyword3 = keyword3
  275. sendInfo.Keyword4 = keyword4
  276. sendInfo.TemplateId = utils.WxMsgTemplateIdActivityChangeApplyXzs
  277. sendInfo.RedirectUrl = redirectUrl
  278. sendInfo.RedirectTarget = 3
  279. sendInfo.Resource = strconv.Itoa(activityId)
  280. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_LIMIT_PEOPLE
  281. sendInfo.OpenIdArr = openIdArr
  282. e = services.SendTemplateMsg(sendInfo)
  283. if e != nil {
  284. err = errors.New("SendTemplateMsg, Err: " + e.Error())
  285. return
  286. }
  287. return
  288. }